"use client"; import { useState, type ReactNode } from "react"; import { useTranslation } from "react-i18next"; import { IconChevronRight, IconInfoCircle } from "@tabler/icons-react"; import { Button } from "@kandev/ui/button"; import { Drawer, DrawerContent, DrawerDescription, DrawerHeader, DrawerTitle, DrawerTrigger, } from "@kandev/ui/drawer"; import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@kandev/ui/collapsible"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@kandev/ui/tooltip"; import { useTouchDrawer } from "@/hooks/use-compact-task-chrome"; import { cn } from "@/lib/utils"; export type FallbackOptionKind = "automatic" | "explicit" | "strict"; function helpCopy(kind: FallbackOptionKind, t: (key: string) => string) { if (kind === "automatic") { return { label: t("settings:autoFallbackInfoLabel"), title: t("settings:autoFallbackHelpTitle"), body: t("settings:autoFallbackHelp"), }; } if (kind === "strict") { return { label: t("settings:requireExactModelInfoLabel"), title: t("settings:requireExactModelHelpTitle"), body: t("settings:requireExactModelHelp"), }; } return { label: t("settings:agentFallbackInfoLabel"), title: t("settings:agentFallbackHelpTitle"), body: t("settings:agentFallbackHelp"), }; } export function FallbackOptionHelp({ kind }: { kind: FallbackOptionKind }) { const { t } = useTranslation(); const usesTouchDrawer = useTouchDrawer(); const [open, setOpen] = useState(false); const copy = helpCopy(kind, t); const button = ( ); const trigger = usesTouchDrawer ? ( {button} ) : ( {button} {copy.title} {copy.body} ); return ( {trigger} {copy.title} {copy.body} ); } export function ModelFallbackSettingsShell({ autoFallback, fallbackModel, isDirty, requireExactModel = false, strictOption, automaticOption, explicitOption, }: { autoFallback: boolean; fallbackModel: string; isDirty?: boolean; requireExactModel?: boolean; strictOption?: ReactNode; automaticOption: ReactNode; explicitOption: ReactNode; }) { const { t } = useTranslation(); const [open, setOpen] = useState(false); let summary = t("settings:fallbackSettingsSummaryExecutorDefault"); if (fallbackModel) { summary = t("settings:fallbackSettingsSummaryExplicit", { model: fallbackModel }); } if (autoFallback) { summary = t("settings:fallbackSettingsSummaryAutomatic"); } if (requireExactModel) { summary = t("settings:fallbackSettingsSummaryExact"); } return ( {t("settings:fallbackSettings")} {summary} {strictOption && ( {strictOption} )} {automaticOption} {explicitOption} ); }
{copy.title}
{copy.body}