diff options
Diffstat (limited to 'packages/excalidraw/components/TTDDialog/TTDDialogPanel.tsx')
| -rw-r--r-- | packages/excalidraw/components/TTDDialog/TTDDialogPanel.tsx | 63 |
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> + ); +}; |
