import { IconLayoutList, IconPin, IconPinned, IconTrash, IconX } from "@tabler/icons-react"; import { useId } from "react"; import { useTranslation } from "react-i18next"; import { Button } from "@kandev/ui"; import { Switch } from "@kandev/ui/switch"; import { Tooltip, TooltipContent, TooltipTrigger } from "@kandev/ui/tooltip"; import { cn } from "@/lib/utils"; import { useResponsiveBreakpoint } from "@/hooks/use-responsive-breakpoint"; export type QueuePanelHeaderProps = { count: number; max: number; isFull: boolean; autoRun: boolean; autoMerge: boolean; autoMergeAvailable: boolean; isLoading: boolean; cancellationPending: boolean; pinned: boolean; onClear: () => void; onAutoRunChange: (enabled: boolean) => void; onAutoMergeChange: (enabled: boolean) => void; onTogglePin: () => void; onClose: () => void; }; type QueueAutomationPillsProps = Pick< QueuePanelHeaderProps, | "autoRun" | "autoMerge" | "autoMergeAvailable" | "isLoading" | "cancellationPending" | "onAutoRunChange" | "onAutoMergeChange" >; function QueueAutomationPills({ autoRun, autoMerge, autoMergeAvailable, isLoading, cancellationPending, onAutoRunChange, onAutoMergeChange, }: QueueAutomationPillsProps) { const { t } = useTranslation(); const autoRunId = useId(); const autoRunDescriptionId = useId(); const autoMergeId = useId(); const controlsDisabled = isLoading || cancellationPending; const pillClassName = "flex min-h-7 items-center gap-1.5 rounded-full border border-border/70 bg-muted/40 px-2 text-xs font-medium text-foreground [@media(pointer:coarse)]:min-h-11 [@media(pointer:coarse)]:px-3"; return (
{t(autoRun ? "chat:queueAutoRunOnHelp" : "chat:queueAutoRunOffHelp")} {t(autoRun ? "chat:queueAutoRunOnHelp" : "chat:queueAutoRunOffHelp")} {t("system:messageQueueAutoMergeNotice")}
); } export function QueuePanelHeader({ count, max, isFull, autoRun, autoMerge, autoMergeAvailable, isLoading, cancellationPending, pinned, onClear, onAutoRunChange, onAutoMergeChange, onTogglePin, onClose, }: QueuePanelHeaderProps) { const { t } = useTranslation(); const { isMobile } = useResponsiveBreakpoint(); const capacityText = max > 0 ? t(isFull ? "chat:queueCapacityFull" : "chat:queueCapacity", { count, max }) : t("chat:queueCount", { count }); return (
{t("chat:queued")} {capacityText}
{!isMobile && ( )}
); }