"use client"; import type { ReactNode } from "react"; import { ArrowUp, Loader2, Square } from "lucide-react"; import { Button } from "@multica/ui/components/ui/button"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@multica/ui/components/ui/tooltip"; interface SubmitButtonProps { onClick: () => void; disabled?: boolean; loading?: boolean; /** * Blocked on background work the user started (an attachment still * uploading) rather than on a missing precondition. Disables the button and * marks it `aria-busy`, so a screen reader reaching it with a virtual cursor * reads "busy" rather than an unexplained dead control. It is NOT tab * reachable while disabled, so callers should also carry the reason in * `ariaLabel` / `tooltip` and in the visible label where there is one. */ busy?: boolean; running?: boolean; onStop?: () => void; /** * Tooltip shown over the send button when idle. Pass a string or a node * (e.g. `Send · ⌘↵`). Omit to render no tooltip. * Callers compose the shortcut hint themselves to keep this component * free of `@multica/core` (platform-detection) and i18n imports. */ tooltip?: ReactNode; /** Accessible name for the icon-only submit button. */ ariaLabel?: string; /** Tooltip shown over the stop button while a run is in progress. */ stopTooltip?: ReactNode; /** Accessible name for the icon-only stop button. */ stopAriaLabel?: string; } function SubmitButton({ onClick, disabled, loading, busy, running, onStop, tooltip, ariaLabel, stopTooltip, stopAriaLabel, }: SubmitButtonProps) { if (running) { const stopButton = ( ); if (!stopTooltip) return stopButton; return ( {stopTooltip} ); } const submitButton = ( ); if (!tooltip) return submitButton; return ( {tooltip} ); } export { SubmitButton, type SubmitButtonProps };