aboutsummaryrefslogtreecommitdiffstats
path: root/packages/excalidraw/components/TTDDialog/TTDDialogPanel.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'packages/excalidraw/components/TTDDialog/TTDDialogPanel.tsx')
-rw-r--r--packages/excalidraw/components/TTDDialog/TTDDialogPanel.tsx63
1 files changed, 63 insertions, 0 deletions
diff --git a/packages/excalidraw/components/TTDDialog/TTDDialogPanel.tsx b/packages/excalidraw/components/TTDDialog/TTDDialogPanel.tsx
new file mode 100644
index 0000000..0a78e49
--- /dev/null
+++ b/packages/excalidraw/components/TTDDialog/TTDDialogPanel.tsx
@@ -0,0 +1,63 @@
+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>
+ );
+};