import clsx from "clsx"; import { Fragment } from "react"; import { Button } from "../Button"; import Spinner from "../Spinner"; import type { ReactNode } from "react"; export type TTDPanelAction = { label: string; action?: () => void; icon?: ReactNode; variant: "button" | "link" | "rateLimit"; disabled?: boolean; className?: string; }; interface TTDDialogPanelProps { label?: string | ReactNode; children: ReactNode; panelActions?: TTDPanelAction[]; onTextSubmitInProgess?: boolean; renderTopRight?: () => ReactNode; renderSubmitShortcut?: () => ReactNode; className?: string; panelActionJustifyContent?: | "flex-start" | "flex-end" | "center" | "space-between" | "space-around" | "space-evenly"; } export const TTDDialogPanel = ({ label, children, panelActions = [], onTextSubmitInProgess, renderTopRight, renderSubmitShortcut, className, panelActionJustifyContent = "flex-start", }: TTDDialogPanelProps) => { const renderPanelAction = (panelAction: TTDPanelAction) => { if (panelAction?.variant === "link") { return ( ); } if (panelAction?.variant === "button") { return ( ); } if (panelAction?.variant === "rateLimit") { return (
{panelAction.label}
); } }; return (
{(label || renderTopRight) && (
{typeof label === "string" ? : label} {renderTopRight?.()}
)} {children}
{panelActions.filter(Boolean).map((panelAction) => ( {renderPanelAction(panelAction)} ))} {!onTextSubmitInProgess && renderSubmitShortcut?.()}
); };