"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 };