mirror of
https://github.com/excalidraw/excalidraw.git
synced 2025-05-03 10:00:07 -04:00
* build: enable consistent type imports eslint rule * change to warn * fix the warning in example and excalidraw-app * fix packages * enable type annotations and throw error for the rule
63 lines
1.7 KiB
TypeScript
63 lines
1.7 KiB
TypeScript
import type { ReactNode } from "react";
|
|
import { Button } from "../Button";
|
|
import clsx from "clsx";
|
|
import Spinner from "../Spinner";
|
|
|
|
interface TTDDialogPanelProps {
|
|
label: string;
|
|
children: ReactNode;
|
|
panelAction?: {
|
|
label: string;
|
|
action: () => void;
|
|
icon?: ReactNode;
|
|
};
|
|
panelActionDisabled?: boolean;
|
|
onTextSubmitInProgess?: boolean;
|
|
renderTopRight?: () => ReactNode;
|
|
renderSubmitShortcut?: () => ReactNode;
|
|
renderBottomRight?: () => ReactNode;
|
|
}
|
|
|
|
export const TTDDialogPanel = ({
|
|
label,
|
|
children,
|
|
panelAction,
|
|
panelActionDisabled = false,
|
|
onTextSubmitInProgess,
|
|
renderTopRight,
|
|
renderSubmitShortcut,
|
|
renderBottomRight,
|
|
}: TTDDialogPanelProps) => {
|
|
return (
|
|
<div className="ttd-dialog-panel">
|
|
<div className="ttd-dialog-panel__header">
|
|
<label>{label}</label>
|
|
{renderTopRight?.()}
|
|
</div>
|
|
|
|
{children}
|
|
<div
|
|
className={clsx("ttd-dialog-panel-button-container", {
|
|
invisible: !panelAction,
|
|
})}
|
|
style={{ display: "flex", alignItems: "center" }}
|
|
>
|
|
<Button
|
|
className="ttd-dialog-panel-button"
|
|
onSelect={panelAction ? panelAction.action : () => {}}
|
|
disabled={panelActionDisabled || onTextSubmitInProgess}
|
|
>
|
|
<div className={clsx({ invisible: onTextSubmitInProgess })}>
|
|
{panelAction?.label}
|
|
{panelAction?.icon && <span>{panelAction.icon}</span>}
|
|
</div>
|
|
{onTextSubmitInProgess && <Spinner />}
|
|
</Button>
|
|
{!panelActionDisabled &&
|
|
!onTextSubmitInProgess &&
|
|
renderSubmitShortcut?.()}
|
|
{renderBottomRight?.()}
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|