@flexkit/studio 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/chat-page-H6I3XOKS.js +2 -0
  2. package/dist/chat-page-H6I3XOKS.js.map +1 -0
  3. package/dist/{chunk-LMVJWCOM.js → chunk-2IRKGO2B.js} +3 -3
  4. package/dist/{chunk-LMVJWCOM.js.map → chunk-2IRKGO2B.js.map} +1 -1
  5. package/dist/{chunk-WBZKCRQK.js → chunk-5TQF5UQQ.js} +2 -2
  6. package/dist/{chunk-WBZKCRQK.js.map → chunk-5TQF5UQQ.js.map} +1 -1
  7. package/dist/{chunk-DQ6Z333C.js → chunk-ANVO5P65.js} +3 -3
  8. package/dist/{chunk-DQ6Z333C.js.map → chunk-ANVO5P65.js.map} +1 -1
  9. package/dist/chunk-BURKG2UC.js +6 -0
  10. package/dist/chunk-BURKG2UC.js.map +1 -0
  11. package/dist/{chunk-QJWY4XIM.js → chunk-GM5OZTHL.js} +2 -2
  12. package/dist/{chunk-QJWY4XIM.js.map → chunk-GM5OZTHL.js.map} +1 -1
  13. package/dist/{chunk-LX7Q56OS.js → chunk-JYHZU2UZ.js} +2 -2
  14. package/dist/{chunk-LX7Q56OS.js.map → chunk-JYHZU2UZ.js.map} +1 -1
  15. package/dist/{chunk-BKJ2DBRK.js → chunk-LQVZWFM2.js} +2 -2
  16. package/dist/{chunk-BKJ2DBRK.js.map → chunk-LQVZWFM2.js.map} +1 -1
  17. package/dist/{chunk-6LYEDKFY.js → chunk-QHDL6CA2.js} +3 -3
  18. package/dist/{chunk-6LYEDKFY.js.map → chunk-QHDL6CA2.js.map} +1 -1
  19. package/dist/{chunk-G4PYYHI3.js → chunk-S7M5CQ5S.js} +2 -2
  20. package/dist/{chunk-G4PYYHI3.js.map → chunk-S7M5CQ5S.js.map} +1 -1
  21. package/dist/{chunk-DPCMOWK4.js → chunk-ZBI744KS.js} +3 -3
  22. package/dist/{chunk-DPCMOWK4.js.map → chunk-ZBI744KS.js.map} +1 -1
  23. package/dist/index.d.ts +2 -0
  24. package/dist/index.js +1 -1
  25. package/dist/{list-GALFFS5F.js → list-ZQJ6NHKQ.js} +2 -2
  26. package/dist/{list-GALFFS5F.js.map → list-ZQJ6NHKQ.js.map} +1 -1
  27. package/dist/{pages-IA7GOMMS.js → pages-2GQVTLL2.js} +3 -3
  28. package/dist/{pages-IA7GOMMS.js.map → pages-2GQVTLL2.js.map} +1 -1
  29. package/dist/plugin-pages-E5TUDDT5.js +2 -0
  30. package/dist/{plugin-pages-Q63UBSKH.js.map → plugin-pages-E5TUDDT5.js.map} +1 -1
  31. package/dist/{root-SMHRBFGW.js → root-BD4VN3RD.js} +3 -3
  32. package/dist/{root-SMHRBFGW.js.map → root-BD4VN3RD.js.map} +1 -1
  33. package/dist/{root-VSTE2THV.js → root-HC5QZ2JM.js} +2 -2
  34. package/dist/{root-VSTE2THV.js.map → root-HC5QZ2JM.js.map} +1 -1
  35. package/dist/{root-VYZYDWIB.js → root-P6CVZ5ZB.js} +2 -2
  36. package/dist/{root-VYZYDWIB.js.map → root-P6CVZ5ZB.js.map} +1 -1
  37. package/dist/{root-5TCUJI6Q.js → root-TXKDRPOK.js} +3 -3
  38. package/dist/{root-5TCUJI6Q.js.map → root-TXKDRPOK.js.map} +1 -1
  39. package/dist/{search-K75Q65A6.js → search-PVXTPIYJ.js} +2 -2
  40. package/dist/{search-K75Q65A6.js.map → search-PVXTPIYJ.js.map} +1 -1
  41. package/dist/{skills-pages-KDG2NOQJ.js → skills-pages-N5KDEHLT.js} +2 -2
  42. package/dist/{skills-pages-KDG2NOQJ.js.map → skills-pages-N5KDEHLT.js.map} +1 -1
  43. package/dist/spec-renderer-ZZ3GPVKU.js +2 -0
  44. package/dist/spec-renderer-ZZ3GPVKU.js.map +1 -0
  45. package/dist/ui.js +1 -1
  46. package/package.json +3 -3
  47. package/dist/chat-page-ZFPMTRLD.js +0 -2
  48. package/dist/chat-page-ZFPMTRLD.js.map +0 -1
  49. package/dist/chunk-MKEIZ5ZQ.js +0 -5
  50. package/dist/chunk-MKEIZ5ZQ.js.map +0 -1
  51. package/dist/plugin-pages-Q63UBSKH.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/primitives/external-link.tsx","../src/ui/primitives/label.tsx","../src/ui/primitives/form.tsx","../src/ui/primitives/checkbox.tsx","../src/ui/primitives/collapsible.tsx","../src/ui/primitives/input.tsx","../src/ui/primitives/popover.tsx","../src/ui/primitives/resizable.tsx","../src/ui/primitives/sheet.tsx","../src/ui/hooks/use-mobile.tsx","../src/ui/primitives/tooltip.tsx","../src/ui/primitives/sidebar.tsx","../src/ui/components/icon-name.ts","../src/ui/components/icon.tsx","../src/ui/components/sidebar.tsx","../src/ui/primitives/switch.tsx","../src/ui/primitives/table.tsx","../src/ui/primitives/tabs.tsx","../src/ui/primitives/textarea.tsx","../src/ui/primitives/toggle.tsx","../src/ui/primitives/toggle-group.tsx","../src/ui/components/permission-tooltip.tsx","../src/ui/primitives/drawer.tsx","../src/ui/components/drawer-modal.tsx","../src/ui/primitives/sonner.tsx","../src/ui/primitives/hover-card.tsx","../src/ui/primitives/spinner.tsx","../src/ui/primitives/input-group.tsx","../src/ui/ai-elements/attachments.tsx","../src/ui/ai-elements/code-block.tsx","../src/ui/ai-elements/conversation.tsx","../src/ui/ai-elements/message.tsx","../src/ui/ai-elements/model-selector.tsx","../src/ui/ai-elements/prompt-input.tsx","../src/ui/ai-elements/shimmer.tsx","../src/ui/ai-elements/reasoning.tsx","../src/ui/ai-elements/sources.tsx","../src/ui/ai-elements/speech-input.tsx","../src/ui/ai-elements/suggestion.tsx","../src/ui/ai-elements/tool.tsx","../src/ui/primitives/alert.tsx"],"names":["ExternalLink","href","children","jsx","Button","jsxs","ExternalLinkIcon","Label","className","props","LabelPrimitive","cn","Form","FormProvider","FormFieldContext","ae","FormField","Controller","useFormField","fieldContext","itemContext","FormItemContext","getFieldState","useFormContext","formState","useFormState","fieldState","id","FormItem","FormLabel","error","formItemId","FormControl","formDescriptionId","formMessageId","Slot","FormDescription","FormMessage","body","Checkbox","CheckboxPrimitive","CheckIcon","Collapsible","CollapsiblePrimitive","CollapsibleTrigger","CollapsibleContent","Input","type","Popover","PopoverPrimitive","PopoverTrigger","PopoverContent","align","sideOffset","PopoverAnchor","ResizablePanelGroup","ResizablePanel","ResizableHandle","withHandle","GripVerticalIcon","Sheet","SheetPrimitive","SheetTrigger","SheetClose","SheetPortal","SheetOverlay","SheetContent","side","showCloseButton","XIcon","SheetHeader","SheetFooter","SheetTitle","SheetDescription","MOBILE_BREAKPOINT","useIsMobile","isMobile","setIsMobile","pt","mql","onChange","TooltipProvider","delayDuration","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipPortal","TooltipContent","SIDEBAR_COOKIE_NAME","SIDEBAR_COOKIE_MAX_AGE","SIDEBAR_WIDTH","SIDEBAR_WIDTH_MOBILE","SIDEBAR_WIDTH_ICON","SIDEBAR_KEYBOARD_SHORTCUT","SidebarContext","useSidebar","context","SidebarProvider","defaultOpen","openProp","setOpenProp","style","openMobile","setOpenMobile","_open","_setOpen","open","setOpen","value","openState","toggleSidebar","handleKeyDown","event","state","contextValue","Sidebar","variant","collapsible","SidebarTrigger","onClick","PanelLeftIcon","SidebarRail","SidebarInset","SidebarContent","SidebarGroup","SidebarGroupLabel","asChild","Comp","SidebarGroupContent","SidebarMenu","SidebarMenuItem","sidebarMenuButtonVariants","cva","SidebarMenuButton","isActive","size","tooltip","button","toIconName","name","DEFAULT_ICON_NAME","toPascalIconName","_","__","char","createIconResolver","iconNames","available","byPascalName","candidate","pascal","findExact","trimmed","kebab","fallbackFor","exact","match","resolve","resolveIconName","Icon","strokeWidth","DynamicIcon","NavLinkCompat","NavLink","menuGroups","schema","visibleItems","item","itemsByGroup","groupBy","g","nonEmptyGroups","menuGroup","group","entity","capitalize","str","withSpaces","Switch","SwitchPrimitive","Table","containerClassName","onScroll","ref","TableHeader","TableBody","TableFooter","TableRow","TableHead","TableCell","TableCaption","Tabs","orientation","TabsPrimitive","tabsListVariants","TabsList","TabsTrigger","TabsContent","Textarea","toggleVariants","Toggle","TogglePrimitive","ToggleGroupContext","ht","ToggleGroup","spacing","ToggleGroupPrimitive","ToggleGroupItem","InsufficientPermissionsTooltipContent","Info","PermissionTooltip","disabled","Fragment","DrawerPrimitivePortal","DrawerPrimitive","Drawer","DrawerPortal","DrawerOverlay","DrawerContent","DrawerHeader","DrawerTitle","DrawerDescription","DrawerModal","actions","beforeClose","depth","forceClose","isFocused","_onFormChange","onClose","title","isOpen","setIsOpen","useState","gutter","closeDrawer","useCallback","handleClose","useEffect","onEscapeKeyPressed","Skeleton","CloseIcon","Separator","Toaster","richColors","theme","useTheme","Sonner","CircleCheckIcon","InfoIcon","TriangleAlertIcon","OctagonXIcon","Loader2Icon","HoverCard","HoverCardPrimitive","HoverCardTrigger","HoverCardContent","Spinner","InputGroup","inputGroupAddonVariants","InputGroupAddon","e","inputGroupButtonVariants","InputGroupButton","InputGroupText","InputGroupInput","InputGroupTextarea","mediaCategoryIcons","Music2Icon","FileTextIcon","ImageIcon","GlobeIcon","PaperclipIcon","VideoIcon","getMediaCategory","data","mediaType","getAttachmentLabel","category","renderAttachmentImage","url","filename","isGrid","AttachmentsContext","createContext","AttachmentContext","useAttachmentsContext","useContext","useAttachmentContext","ctx","Attachments","useMemo","Attachment","onRemove","mediaCategory","AttachmentPreview","fallbackIcon","iconSize","renderIcon","renderContent","AttachmentInfo","showMediaType","label","AttachmentRemove","handleClick","AttachmentHoverCard","openDelay","closeDelay","AttachmentHoverCardTrigger","AttachmentHoverCardContent","AttachmentEmpty","isItalic","fontStyle","isBold","isUnderline","addKeysToTokens","lines","line","lineIdx","token","tokenIdx","TokenSpan","LINE_NUMBER_CLASSES","LineSpan","keyedLine","showLineNumbers","key","CodeBlockContext","highlighterCache","tokensCache","subscribers","getTokensCacheKey","code","language","start","end","getHighlighter","cached","highlighterPromise","createHighlighter","createRawTokens","highlightCode","callback","tokensCacheKey","highlighter","langToUse","result","tokenized","subs","sub","CodeBlockBody","memo","preStyle","keyedLines","prevProps","nextProps","CodeBlockContainer","CodeBlockHeader","CodeBlockTitle","CodeBlockFilename","CodeBlockActions","CodeBlockContent","rawTokens","syncTokens","asyncTokens","setAsyncTokens","asyncKeyRef","useRef","cancelled","CodeBlock","CodeBlockCopyButton","onCopy","onError","timeout","isCopied","setIsCopied","timeoutRef","copyToClipboard","CopyIcon","CodeBlockLanguageSelector","Select","CodeBlockLanguageSelectorTrigger","SelectTrigger","CodeBlockLanguageSelectorValue","SelectValue","CodeBlockLanguageSelectorContent","SelectContent","CodeBlockLanguageSelectorItem","SelectItem","Conversation","StickToBottom","ConversationContent","ConversationEmptyState","description","icon","ConversationScrollButton","isAtBottom","scrollToBottom","useStickToBottomContext","handleScrollToBottom","ArrowDownIcon","getMessageText","message","part","defaultFormatMessage","messagesToMarkdown","messages","formatMessage","msg","i","ConversationDownload","handleDownload","markdown","blob","link","DownloadIcon","Message","from","MessageContent","MessageActions","MessageAction","MessageBranchContext","useMessageBranch","MessageBranch","defaultBranch","onBranchChange","currentBranch","setCurrentBranch","branches","setBranches","handleBranchChange","newBranch","goToPrevious","goToNext","MessageBranchContent","childrenArray","branch","index","MessageBranchSelector","totalBranches","ButtonGroup","MessageBranchPrevious","ChevronLeftIcon","MessageBranchNext","ChevronRightIcon","MessageBranchPage","ButtonGroupText","streamdownPlugins","cjk","math","mermaid","MessageResponse","Streamdown","MessageToolbar","ModelSelector","Dialog","ModelSelectorTrigger","DialogTrigger","ModelSelectorContent","DialogContent","DialogTitle","Command","ModelSelectorDialog","CommandDialog","ModelSelectorInput","CommandInput","ModelSelectorList","CommandList","ModelSelectorEmpty","CommandEmpty","ModelSelectorGroup","CommandGroup","ModelSelectorItem","CommandItem","ModelSelectorShortcut","CommandShortcut","ModelSelectorSeparator","CommandSeparator","ModelSelectorLogo","provider","ModelSelectorLogoGroup","ModelSelectorName","convertBlobUrlToDataUrl","reader","captureScreenshot","stream","video","reject","width","height","canvas","timestamp","track","PromptInputController","ProviderAttachmentsContext","usePromptInputController","useOptionalPromptInputController","useProviderAttachments","useOptionalProviderAttachments","PromptInputProvider","initialTextInput","textInput","setTextInput","clearInput","attachmentFiles","setAttachmentFiles","fileInputRef","openRef","add","files","incoming","prev","file","nanoid","remove","found","f","clear","attachmentsRef","openFileDialog","attachments","__registerFileInput","controller","LocalAttachmentsContext","usePromptInputAttachments","LocalReferencedSourcesContext","usePromptInputReferencedSources","PromptInputActionAddAttachments","onSelect","handleSelect","DropdownMenuItem","PromptInputActionAddScreenshot","screenshot","Monitor","PromptInput","accept","multiple","globalDrop","syncHiddenInput","maxFiles","maxFileSize","onSubmit","usingProvider","inputRef","formRef","items","setItems","referencedSources","setReferencedSources","filesRef","openFileDialogLocal","matchesAccept","s","pattern","prefix","addLocal","fileList","accepted","withinSize","sized","capacity","capped","next","removeLocal","addWithProviderValidation","currentCount","clearAttachments","clearReferencedSources","form","onDragOver","onDrop","handleChange","attachmentsCtx","refsCtx","array","handleSubmit","text","convertedFiles","_id","dataUrl","inner","withReferencedSources","PromptInputBody","PromptInputTextarea","onKeyDown","placeholder","isComposing","setIsComposing","lastAttachment","handlePaste","handleCompositionEnd","handleCompositionStart","controlledProps","PromptInputHeader","PromptInputFooter","PromptInputTools","PromptInputButton","newSize","Children","tooltipContent","shortcut","PromptInputActionMenu","DropdownMenu","PromptInputActionMenuTrigger","DropdownMenuTrigger","PlusIcon","PromptInputActionMenuContent","onCloseAutoFocus","DropdownMenuContent","PromptInputActionMenuItem","PromptInputSubmit","status","onStop","isGenerating","CornerDownLeftIcon","SquareIcon","PromptInputSelect","PromptInputSelectTrigger","PromptInputSelectContent","PromptInputSelectItem","PromptInputSelectValue","PromptInputHoverCard","PromptInputHoverCardTrigger","PromptInputHoverCardContent","PromptInputTabsList","PromptInputTab","PromptInputTabLabel","PromptInputTabBody","PromptInputTabItem","PromptInputCommand","PromptInputCommandInput","PromptInputCommandList","PromptInputCommandEmpty","PromptInputCommandGroup","PromptInputCommandItem","PromptInputCommandSeparator","motionComponentCache","getMotionComponent","element","component","motion","ShimmerComponent","Component","duration","spread","MotionComponent","dynamicSpread","Shimmer","ReasoningContext","useReasoning","AUTO_CLOSE_DELAY","MS_IN_S","Reasoning","isStreaming","onOpenChange","durationProp","resolvedDefaultOpen","isExplicitlyClosed","useControllableState","setDuration","hasEverStreamedRef","hasAutoClosed","setHasAutoClosed","startTimeRef","timer","handleOpenChange","newOpen","defaultGetThinkingMessage","ReasoningTrigger","getThinkingMessage","BrainIcon","ChevronDownIcon","ReasoningContent","Sources","SourcesTrigger","count","SourcesContent","Source","BookIcon","MAX_RECORDING_MS","isMediaRecorderSupported","getSupportedRecorderMimeType","toSpeechInputError","fallback","isAbortError","getTooltip","isSupported","isListening","isProcessing","SpeechInput","onAudioRecorded","onTranscriptionChange","setIsListening","setIsProcessing","setIsSupported","mediaRecorderRef","streamRef","audioChunksRef","maxDurationTimerRef","abortControllerRef","discardNextStopRef","disabledRef","onAudioRecordedRef","onErrorRef","onTranscriptionChangeRef","releaseStream","clearMaxDurationTimer","stopMediaRecorder","abortProcessing","cancelCapture","recorder","startMediaRecorder","mimeType","mediaRecorder","audioBlob","abortController","transcribe","transcript","isDisabled","LoaderIcon","MicIcon","Suggestions","ScrollArea","ScrollBar","Suggestion","suggestion","Tool","statusLabels","statusIcons","ClockIcon","CheckCircleIcon","CircleIcon","XCircleIcon","getStatusBadge","Badge","ToolHeader","toolName","derivedName","WrenchIcon","ToolContent","ToolInput","input","ToolOutput","output","errorText","Output","isValidElement","alertVariants","Alert","AlertTitle","AlertDescription"],"mappings":"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","file":"chunk-6LYEDKFY.js","sourcesContent":["import { SquareArrowOutUpRight as ExternalLinkIcon } from 'lucide-react';\nimport { Button } from './button';\nimport type { JSX } from 'react';\n\nexport function ExternalLink({ href, children }: { href: string; children: React.ReactNode }): JSX.Element {\n return (\n <Button asChild className=\"fk:h-6 fk:px-1! fk:py-0 fk:text-sm fk:font-light fk:text-link\" size=\"sm\" variant=\"link\">\n <a href={href} target=\"_blank\">\n {children} <ExternalLinkIcon className=\"fk:size-3\" strokeWidth={3} />\n </a>\n </Button>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Label as LabelPrimitive } from 'radix-ui';\nimport { cn } from '../lib/utils';\n\nfunction Label({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n 'fk:flex fk:items-center fk:gap-2 fk:text-sm fk:leading-none fk:font-medium fk:select-none fk:group-data-[disabled=true]:pointer-events-none fk:group-data-[disabled=true]:opacity-50 fk:peer-disabled:cursor-not-allowed fk:peer-disabled:opacity-50',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Label };\n","import * as React from 'react';\nimport { Label as LabelPrimitive, Slot } from 'radix-ui';\nimport {\n Controller,\n FormProvider,\n useFormContext,\n useFormState,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n} from 'react-hook-form';\nimport { cn } from '../lib/utils';\nimport { Label } from './label';\n\nconst Form = FormProvider;\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n name: TName;\n};\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>({} as FormFieldContextValue);\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n );\n};\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext);\n const itemContext = React.useContext(FormItemContext);\n const { getFieldState } = useFormContext();\n const formState = useFormState({ name: fieldContext.name });\n const fieldState = getFieldState(fieldContext.name, formState);\n\n if (!fieldContext) {\n throw new Error('useFormField should be used within <FormField>');\n }\n\n const { id } = itemContext;\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n };\n};\n\ntype FormItemContextValue = {\n id: string;\n};\n\nconst FormItemContext = React.createContext<FormItemContextValue>({} as FormItemContextValue);\n\nfunction FormItem({ className, ...props }: React.ComponentProps<'div'>) {\n const id = React.useId();\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div data-slot=\"form-item\" className={cn('fk:grid fk:gap-2', className)} {...props} />\n </FormItemContext.Provider>\n );\n}\n\nfunction FormLabel({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n const { error, formItemId } = useFormField();\n\n return (\n <Label\n data-slot=\"form-label\"\n data-error={!!error}\n className={cn('fk:data-[error=true]:text-destructive', className)}\n htmlFor={formItemId}\n {...props}\n />\n );\n}\n\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot.Root>) {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField();\n\n return (\n <Slot.Root\n data-slot=\"form-control\"\n id={formItemId}\n aria-describedby={!error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`}\n aria-invalid={!!error}\n {...props}\n />\n );\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<'p'>) {\n const { formDescriptionId } = useFormField();\n\n return (\n <p\n data-slot=\"form-description\"\n id={formDescriptionId}\n className={cn('fk:text-sm fk:text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nfunction FormMessage({ className, ...props }: React.ComponentProps<'p'>) {\n const { error, formMessageId } = useFormField();\n const body = error ? String(error?.message ?? '') : props.children;\n\n if (!body) {\n return null;\n }\n\n return (\n <p\n data-slot=\"form-message\"\n id={formMessageId}\n className={cn('fk:text-sm fk:text-destructive', className)}\n {...props}\n >\n {body}\n </p>\n );\n}\n\nexport { useFormField, Form, FormItem, FormLabel, FormControl, FormDescription, FormMessage, FormField };\n","'use client';\n\nimport * as React from 'react';\nimport { Checkbox as CheckboxPrimitive } from 'radix-ui';\nimport { CheckIcon } from 'lucide-react';\nimport { cn } from '../lib/utils';\n\nfunction Checkbox({ className, ...props }: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n 'fk:peer fk:size-4 fk:shrink-0 fk:rounded-[4px] fk:border fk:border-input fk:shadow-xs fk:transition-shadow fk:outline-none fk:focus-visible:border-ring fk:focus-visible:ring-[3px] fk:focus-visible:ring-ring/50 fk:disabled:cursor-not-allowed fk:disabled:opacity-50 fk:aria-invalid:border-destructive fk:aria-invalid:ring-destructive/20 fk:data-[state=checked]:border-primary fk:data-[state=checked]:bg-primary fk:data-[state=checked]:text-primary-foreground fk:dark:bg-input/30 fk:dark:aria-invalid:ring-destructive/40 fk:dark:data-[state=checked]:bg-primary fk:corner-squircle',\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"fk:grid fk:place-content-center fk:text-current fk:transition-none\"\n >\n <CheckIcon className=\"fk:size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { Checkbox };\n","'use client';\n\nimport { Collapsible as CollapsiblePrimitive } from 'radix-ui';\n\nfunction Collapsible({ ...props }: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {\n return <CollapsiblePrimitive.Root data-slot=\"collapsible\" {...props} />;\n}\n\nfunction CollapsibleTrigger({ ...props }: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) {\n return <CollapsiblePrimitive.CollapsibleTrigger data-slot=\"collapsible-trigger\" {...props} />;\n}\n\nfunction CollapsibleContent({ ...props }: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) {\n return <CollapsiblePrimitive.CollapsibleContent data-slot=\"collapsible-content\" {...props} />;\n}\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };\n","import * as React from 'react';\nimport { cn } from '../lib/utils';\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n 'fk:h-9 fk:w-full fk:min-w-0 fk:rounded-md fk:border fk:border-input fk:bg-background fk:px-3 fk:py-1 fk:text-base fk:shadow-xs fk:transition-[color,box-shadow] fk:outline-none fk:selection:bg-primary fk:selection:text-primary-foreground fk:file:inline-flex fk:file:h-7 fk:file:border-0 fk:file:bg-transparent fk:file:text-sm fk:file:font-medium fk:file:text-foreground fk:placeholder:text-muted-foreground fk:disabled:pointer-events-none fk:disabled:cursor-not-allowed fk:disabled:opacity-50 fk:md:text-sm fk:dark:bg-input/30 fk:corner-squircle',\n 'fk:focus-visible:border-ring fk:focus-visible:ring-[3px] fk:focus-visible:ring-ring/50',\n 'fk:aria-invalid:border-destructive fk:aria-invalid:ring-destructive/20 fk:dark:aria-invalid:ring-destructive/40',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","'use client';\n\nimport * as React from 'react';\nimport { Popover as PopoverPrimitive } from 'radix-ui';\nimport { cn } from '../lib/utils';\n\nfunction Popover({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\n}\n\nfunction PopoverTrigger({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n}\n\nfunction PopoverContent({\n className,\n align = 'center',\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'fk:z-50 fk:w-72 fk:origin-(--radix-popover-content-transform-origin) fk:rounded-md fk:border fk:bg-popover fk:p-4 fk:text-popover-foreground fk:shadow-md fk:outline-hidden fk:data-[side=bottom]:slide-in-from-top-2 fk:data-[side=left]:slide-in-from-right-2 fk:data-[side=right]:slide-in-from-left-2 fk:data-[side=top]:slide-in-from-bottom-2 fk:data-[state=closed]:animate-out fk:data-[state=closed]:fade-out-0 fk:data-[state=closed]:zoom-out-95 fk:data-[state=open]:animate-in fk:data-[state=open]:fade-in-0 fk:data-[state=open]:zoom-in-95 fk:corner-squircle',\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n}\n\nfunction PopoverAnchor({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />;\n}\n\nfunction PopoverHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div data-slot=\"popover-header\" className={cn('fk:flex fk:flex-col fk:gap-1 fk:text-sm', className)} {...props} />\n );\n}\n\nfunction PopoverTitle({ className, ...props }: React.ComponentProps<'h2'>) {\n return <div data-slot=\"popover-title\" className={cn('fk:font-medium', className)} {...props} />;\n}\n\nfunction PopoverDescription({ className, ...props }: React.ComponentProps<'p'>) {\n return <p data-slot=\"popover-description\" className={cn('fk:text-muted-foreground', className)} {...props} />;\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor, PopoverHeader, PopoverTitle, PopoverDescription };\n","import { GripVerticalIcon } from 'lucide-react';\nimport * as ResizablePrimitive from 'react-resizable-panels';\nimport { cn } from '../lib/utils';\n\nfunction ResizablePanelGroup({ className, ...props }: ResizablePrimitive.GroupProps) {\n return (\n <ResizablePrimitive.Group\n data-slot=\"resizable-panel-group\"\n className={cn('fk:flex fk:h-full fk:w-full fk:aria-[orientation=vertical]:flex-col', className)}\n {...props}\n />\n );\n}\n\nfunction ResizablePanel({ ...props }: ResizablePrimitive.PanelProps) {\n return <ResizablePrimitive.Panel data-slot=\"resizable-panel\" {...props} />;\n}\n\nfunction ResizableHandle({\n withHandle,\n className,\n ...props\n}: ResizablePrimitive.SeparatorProps & {\n withHandle?: boolean;\n}) {\n return (\n <ResizablePrimitive.Separator\n data-slot=\"resizable-handle\"\n className={cn(\n 'fk:relative fk:flex fk:w-px fk:items-center fk:justify-center fk:bg-border fk:after:absolute fk:after:inset-y-0 fk:after:left-1/2 fk:after:w-1 fk:after:-translate-x-1/2 fk:focus-visible:ring-1 fk:focus-visible:ring-ring fk:focus-visible:ring-offset-1 fk:focus-visible:outline-hidden fk:aria-[orientation=horizontal]:h-px fk:aria-[orientation=horizontal]:w-full fk:aria-[orientation=horizontal]:after:left-0 fk:aria-[orientation=horizontal]:after:h-1 fk:aria-[orientation=horizontal]:after:w-full fk:aria-[orientation=horizontal]:after:translate-x-0 fk:aria-[orientation=horizontal]:after:-translate-y-1/2 fk:[&[aria-orientation=horizontal]>div]:rotate-90',\n className\n )}\n {...props}\n >\n {withHandle && (\n <div className=\"fk:z-10 fk:flex fk:h-8 fk:w-3 fk:items-center fk:justify-center fk:rounded-xs fk:border fk:bg-border fk:corner-squircle\">\n <GripVerticalIcon className=\"fk:size-2.5\" />\n </div>\n )}\n </ResizablePrimitive.Separator>\n );\n}\n\nexport { ResizableHandle, ResizablePanel, ResizablePanelGroup };\n","'use client';\n\nimport * as React from 'react';\nimport { Dialog as SheetPrimitive } from 'radix-ui';\nimport { XIcon } from 'lucide-react';\nimport { cn } from '../lib/utils';\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />;\n}\n\nfunction SheetTrigger({ ...props }: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\nfunction SheetClose({ ...props }: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\nfunction SheetPortal({ ...props }: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />;\n}\n\nfunction SheetOverlay({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n 'fk:fixed fk:inset-0 fk:z-50 fk:bg-black/50 fk:data-[state=closed]:animate-out fk:data-[state=closed]:fade-out-0 fk:data-[state=open]:animate-in fk:data-[state=open]:fade-in-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SheetContent({\n className,\n children,\n side = 'right',\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: 'top' | 'right' | 'bottom' | 'left';\n showCloseButton?: boolean;\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n 'fk:fixed fk:z-50 fk:flex fk:flex-col fk:gap-4 fk:bg-background fk:shadow-lg fk:transition fk:ease-in-out fk:data-[state=closed]:animate-out fk:data-[state=closed]:duration-300 fk:data-[state=open]:animate-in fk:data-[state=open]:duration-500',\n side === 'right' &&\n 'fk:inset-y-0 fk:right-0 fk:h-full fk:w-3/4 fk:border-l fk:data-[state=closed]:slide-out-to-right fk:data-[state=open]:slide-in-from-right fk:sm:max-w-sm',\n side === 'left' &&\n 'fk:inset-y-0 fk:left-0 fk:h-full fk:w-3/4 fk:border-r fk:data-[state=closed]:slide-out-to-left fk:data-[state=open]:slide-in-from-left fk:sm:max-w-sm',\n side === 'top' &&\n 'fk:inset-x-0 fk:top-0 fk:h-auto fk:border-b fk:data-[state=closed]:slide-out-to-top fk:data-[state=open]:slide-in-from-top',\n side === 'bottom' &&\n 'fk:inset-x-0 fk:bottom-0 fk:h-auto fk:border-t fk:data-[state=closed]:slide-out-to-bottom fk:data-[state=open]:slide-in-from-bottom',\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close className=\"fk:absolute fk:top-4 fk:right-4 fk:rounded-xs fk:opacity-70 fk:ring-offset-background fk:transition-opacity fk:hover:opacity-100 fk:focus:ring-2 fk:focus:ring-ring fk:focus:ring-offset-2 fk:focus:outline-hidden fk:disabled:pointer-events-none fk:data-[state=open]:bg-secondary fk:corner-squircle\">\n <XIcon className=\"fk:size-4\" />\n <span className=\"fk:sr-only\">Close</span>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n );\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sheet-header\" className={cn('fk:flex fk:flex-col fk:gap-1.5 fk:p-4', className)} {...props} />;\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn('fk:mt-auto fk:flex fk:flex-col fk:gap-2 fk:p-4', className)}\n {...props}\n />\n );\n}\n\nfunction SheetTitle({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn('fk:font-semibold fk:text-foreground', className)}\n {...props}\n />\n );\n}\n\nfunction SheetDescription({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn('fk:text-sm fk:text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n SheetPortal,\n SheetOverlay,\n};\n","import * as React from 'react';\n\nconst MOBILE_BREAKPOINT = 768;\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined);\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n };\n mql.addEventListener('change', onChange);\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n return () => mql.removeEventListener('change', onChange);\n }, []);\n\n return !!isMobile;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Tooltip as TooltipPrimitive } from 'radix-ui';\nimport { cn } from '../lib/utils';\n\nfunction TooltipProvider({ delayDuration = 0, ...props }: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return <TooltipPrimitive.Provider data-slot=\"tooltip-provider\" delayDuration={delayDuration} {...props} />;\n}\n\nfunction Tooltip({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />;\n}\n\nfunction TooltipTrigger({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nfunction TooltipPortal({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Portal>) {\n return <TooltipPrimitive.Portal {...props} />;\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n 'fk:z-50 fk:w-fit fk:origin-(--radix-tooltip-content-transform-origin) fk:animate-in fk:rounded-md fk:bg-foreground fk:px-3 fk:py-1.5 fk:text-xs fk:text-balance fk:text-background fk:fade-in-0 fk:zoom-in-95 fk:data-[side=bottom]:slide-in-from-top-2 fk:data-[side=left]:slide-in-from-right-2 fk:data-[side=right]:slide-in-from-left-2 fk:data-[side=top]:slide-in-from-bottom-2 fk:data-[state=closed]:animate-out fk:data-[state=closed]:fade-out-0 fk:data-[state=closed]:zoom-out-95 fk:corner-squircle',\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"fk:z-50 fk:size-2.5 fk:translate-y-[calc(-50%-2px)] fk:rotate-45 fk:rounded-[2px] fk:bg-foreground fk:fill-foreground fk:corner-squircle\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider, TooltipPortal };\n","'use client';\n\nimport * as React from 'react';\nimport { Slot } from 'radix-ui';\nimport { VariantProps, cva } from 'class-variance-authority';\nimport { PanelLeftIcon } from 'lucide-react';\nimport { useIsMobile } from '../hooks/use-mobile';\nimport { cn } from '../lib/utils';\nimport { Button } from './button';\nimport { Input } from './input';\nimport { Separator } from './separator';\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from './sheet';\nimport { Skeleton } from './skeleton';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './tooltip';\n\nconst SIDEBAR_COOKIE_NAME = 'flexkit:sidebar:state';\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = '16rem';\nconst SIDEBAR_WIDTH_MOBILE = '18rem';\nconst SIDEBAR_WIDTH_ICON = '2rem';\nconst SIDEBAR_KEYBOARD_SHORTCUT = 'b';\n\ntype SidebarContextProps = {\n state: 'expanded' | 'collapsed';\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null);\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.');\n }\n\n return context;\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = React.useState(false);\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === 'function' ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [setOpenProp, open]\n );\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);\n }, [isMobile, setOpen, setOpenMobile]);\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [toggleSidebar]);\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? 'expanded' : 'collapsed';\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH,\n '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n 'fk:group/sidebar-wrapper fk:flex fk:w-full fk:has-data-[variant=inset]:bg-sidebar fk:overflow-hidden',\n className\n )}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\nfunction Sidebar({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n className,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n side?: 'left' | 'right';\n variant?: 'sidebar' | 'floating' | 'inset';\n collapsible?: 'offcanvas' | 'icon' | 'none';\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === 'none') {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn(\n 'fk:flex fk:h-full fk:w-(--sidebar-width) fk:flex-col fk:bg-sidebar fk:text-sidebar-foreground',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"fk:w-(--sidebar-width) fk:bg-sidebar fk:p-0 fk:text-sidebar-foreground fk:[&>button]:hidden\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"fk:sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"fk:flex fk:h-full fk:w-full fk:flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <div\n className=\"fk:group fk:peer flexkit-sidebar-desktop-block fk:text-sidebar-foreground\"\n data-state={state}\n data-collapsible={state === 'collapsed' ? collapsible : ''}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n 'fk:relative fk:w-(--sidebar-width) fk:bg-transparent fk:transition-[width] fk:duration-200 fk:ease-linear',\n 'fk:group-data-[collapsible=offcanvas]:w-0',\n 'fk:group-data-[side=right]:rotate-180',\n variant === 'floating' || variant === 'inset'\n ? 'fk:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n : 'fk:group-data-[collapsible=icon]:w-(--sidebar-width-icon)'\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n 'fk:relative fk:inset-y-0 fk:z-10 flexkit-sidebar-desktop-flex fk:h-[calc(100svh-3.5rem)] fk:w-(--sidebar-width) fk:transition-[left,right,width] fk:duration-200 fk:ease-linear',\n side === 'left'\n ? 'fk:left-0 fk:group-data-[collapsible=offcanvas]:-left-(--sidebar-width)'\n : 'fk:right-0 k:group-data-[collapsible=offcanvas]:-right-(--sidebar-width)',\n // Adjust the padding for floating and inset variants.\n variant === 'floating' || variant === 'inset'\n ? 'fk:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)] fk:group-data-[side=left]:border-r'\n : 'fk:group-data-[collapsible=icon]:w-(--sidebar-width-icon) fk:group-data-[side=left]:border-r fk:group-data-[side=right]:border-l',\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"fk:flex fk:h-full fk:w-full fk:flex-col fk:bg-sidebar fk:group-data-[variant=floating]:rounded-lg fk:group-data-[variant=floating]:border fk:group-data-[variant=floating]:border-sidebar-border fk:group-data-[variant=floating]:shadow-sm\"\n >\n {children}\n </div>\n </div>\n </div>\n );\n}\n\nfunction SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn('fk:size-7', className)}\n onClick={(event) => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"fk:sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<'button'>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n 'fk:absolute fk:inset-y-0 fk:z-20 flexkit-sidebar-sm-flex fk:w-4 fk:-translate-x-1/2 fk:transition-all fk:ease-linear fk:group-data-[side=left]:-right-4 fk:group-data-[side=right]:left-0 fk:after:absolute fk:after:inset-y-0 fk:after:left-1/2 fk:after:w-[2px] fk:hover:after:bg-sidebar-border',\n 'fk:in-data-[side=left]:cursor-w-resize fk:in-data-[side=right]:cursor-e-resize',\n 'fk:[[data-side=left][data-state=collapsed]_&]:cursor-e-resize fk:[[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n 'fk:group-data-[collapsible=offcanvas]:translate-x-0 fk:group-data-[collapsible=offcanvas]:after:left-full fk:hover:group-data-[collapsible=offcanvas]:bg-sidebar',\n 'fk:[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',\n 'fk:[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<'main'>) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\n 'fk:relative fk:flex fk:flex-1 fk:flex-col fk:bg-background fk:overflow-hidden fk:peer-data-[variant=inset]:h-[calc(100svh-3.625rem)]',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarInput({ className, ...props }: React.ComponentProps<typeof Input>) {\n return (\n <Input\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn('fk:h-8 fk:w-full fk:bg-background fk:shadow-none', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn('fk:flex fk:flex-col fk:gap-2 fk:p-2', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn('fk:flex fk:flex-col fk:gap-2 fk:p-2', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarSeparator({ className, ...props }: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn('fk:mx-2 fk:w-auto fk:bg-sidebar-border', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n 'fk:flex fk:min-h-0 fk:flex-1 fk:flex-col fk:overflow-auto fk:group-data-[collapsible=icon]:overflow-hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn('fk:relative fk:flex fk:w-full fk:min-w-0 fk:flex-col fk:p-2', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<'div'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : 'div';\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n 'fk:flex fk:h-8 fk:shrink-0 fk:items-center fk:rounded-md fk:px-2 fk:text-xs fk:font-medium fk:text-sidebar-foreground/70 fk:ring-sidebar-ring fk:outline-hidden fk:transition-[margin,opacity] fk:duration-200 fk:ease-linear fk:focus-visible:ring-2 fk:[&>svg]:size-4 fk:[&>svg]:shrink-0 fk:corner-squircle',\n 'fk:group-data-[collapsible=icon]:-mt-8 fk:group-data-[collapsible=icon]:opacity-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n 'fk:absolute fk:top-3.5 fk:right-3 fk:flex fk:aspect-square fk:w-5 fk:items-center fk:justify-center fk:rounded-md fk:p-0 fk:text-sidebar-foreground fk:ring-sidebar-ring fk:outline-hidden fk:transition-transform fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground fk:focus-visible:ring-2 fk:[&>svg]:size-4 fk:[&>svg]:shrink-0 fk:corner-squircle',\n // Increases the hit area of the button on mobile.\n 'fk:after:absolute fk:after:-inset-2 fk:md:after:hidden',\n 'fk:group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn('fk:w-full fk:text-sm', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn('fk:flex fk:w-full fk:min-w-0 fk:flex-col fk:gap-1', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn('fk:group/menu-item fk:relative', className)}\n {...props}\n />\n );\n}\n\nconst sidebarMenuButtonVariants = cva(\n 'fk:peer/menu-button fk:flex fk:w-full fk:items-center fk:gap-2 fk:overflow-hidden fk:rounded-md fk:p-2 fk:text-left fk:text-sm fk:ring-sidebar-ring fk:outline-hidden fk:transition-[width,height,padding] fk:group-has-data-[sidebar=menu-action]/menu-item:pr-8 fk:group-data-[collapsible=icon]:size-8! fk:group-data-[collapsible=icon]:p-2! fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground fk:focus-visible:ring-2 fk:active:bg-sidebar-accent fk:active:text-sidebar-accent-foreground fk:disabled:pointer-events-none fk:disabled:opacity-50 fk:aria-disabled:pointer-events-none fk:aria-disabled:opacity-50 fk:data-[active=true]:bg-sidebar-accent fk:data-[active=true]:font-medium fk:data-[active=true]:text-sidebar-accent-foreground fk:data-[state=open]:hover:bg-sidebar-accent fk:data-[state=open]:hover:text-sidebar-accent-foreground fk:[&>span:last-child]:truncate fk:[&>svg]:size-4 fk:[&>svg]:shrink-0 fk:corner-squircle',\n {\n variants: {\n variant: {\n default: 'fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground',\n outline:\n 'fk:bg-background fk:shadow-[0_0_0_1px_hsl(var(--sidebar-border))] fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground fk:hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]',\n },\n size: {\n default: 'fk:h-8 fk:text-sm',\n sm: 'fk:h-7 fk:text-xs',\n lg: 'fk:h-12 fk:text-sm fk:group-data-[collapsible=icon]:p-0!',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = 'default',\n size = 'default',\n tooltip,\n className,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot.Root : 'button';\n const { isMobile, state } = useSidebar();\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n if (!tooltip) {\n return button;\n }\n\n if (typeof tooltip === 'string') {\n tooltip = {\n children: tooltip,\n };\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\" align=\"center\" hidden={state !== 'collapsed' || isMobile} {...tooltip} />\n </Tooltip>\n );\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n showOnHover?: boolean;\n}) {\n const Comp = asChild ? Slot.Root : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n 'fk:absolute fk:top-1.5 fk:right-1 fk:flex fk:aspect-square fk:w-5 fk:items-center fk:justify-center fk:rounded-md fk:p-0 fk:text-sidebar-foreground fk:ring-sidebar-ring fk:outline-hidden fk:transition-transform fk:peer-hover/menu-button:text-sidebar-accent-foreground fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground fk:focus-visible:ring-2 fk:[&>svg]:size-4 fk:[&>svg]:shrink-0 fk:corner-squircle',\n // Increases the hit area of the button on mobile.\n 'fk:after:absolute fk:after:-inset-2 fk:md:after:hidden',\n 'fk:peer-data-[size=sm]/menu-button:top-1',\n 'fk:peer-data-[size=default]/menu-button:top-1.5',\n 'fk:peer-data-[size=lg]/menu-button:top-2.5',\n 'fk:group-data-[collapsible=icon]:hidden',\n showOnHover &&\n 'fk:group-focus-within/menu-item:opacity-100 fk:group-hover/menu-item:opacity-100 fk:peer-data-[active=true]/menu-button:text-sidebar-accent-foreground fk:data-[state=open]:opacity-100 fk:md:opacity-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuBadge({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n 'fk:pointer-events-none fk:absolute fk:right-1 fk:flex fk:h-5 fk:min-w-5 fk:items-center fk:justify-center fk:rounded-md fk:px-1 fk:text-xs fk:font-medium fk:text-sidebar-foreground fk:tabular-nums fk:select-none fk:corner-squircle',\n 'fk:peer-hover/menu-button:text-sidebar-accent-foreground fk:peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n 'fk:peer-data-[size=sm]/menu-button:top-1',\n 'fk:peer-data-[size=default]/menu-button:top-1.5',\n 'fk:peer-data-[size=lg]/menu-button:top-2.5',\n 'fk:group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<'div'> & {\n showIcon?: boolean;\n}) {\n // Random width between 50 to 90%.\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n }, []);\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn('fk:flex fk:h-8 fk:items-center fk:gap-2 fk:rounded-md fk:px-2 fk:corner-squircle', className)}\n {...props}\n >\n {showIcon && <Skeleton className=\"fk:size-4 fk:rounded-md fk:corner-squircle\" data-sidebar=\"menu-skeleton-icon\" />}\n <Skeleton\n className=\"fk:h-4 fk:max-w-(--skeleton-width) fk:flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n '--skeleton-width': width,\n } as React.CSSProperties\n }\n />\n </div>\n );\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n 'fk:mx-3.5 fk:flex fk:min-w-0 fk:translate-x-px fk:flex-col fk:gap-1 fk:border-l fk:border-sidebar-border fk:px-2.5 fk:py-0.5',\n 'fk:group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn('fk:group/menu-sub-item fk:relative', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = 'md',\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<'a'> & {\n asChild?: boolean;\n size?: 'sm' | 'md';\n isActive?: boolean;\n}) {\n const Comp = asChild ? Slot.Root : 'a';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n 'fk:flex fk:h-7 fk:min-w-0 fk:-translate-x-px fk:items-center fk:gap-2 fk:overflow-hidden fk:rounded-md fk:px-2 fk:text-sidebar-foreground fk:ring-sidebar-ring fk:outline-hidden fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground fk:focus-visible:ring-2 fk:active:bg-sidebar-accent fk:active:text-sidebar-accent-foreground fk:disabled:pointer-events-none fk:disabled:opacity-50 fk:aria-disabled:pointer-events-none fk:aria-disabled:opacity-50 fk:[&>span:last-child]:truncate fk:[&>svg]:size-4 fk:[&>svg]:shrink-0 fk:[&>svg]:text-sidebar-accent-foreground fk:corner-squircle',\n 'fk:data-[active=true]:bg-sidebar-accent fk:data-[active=true]:text-sidebar-accent-foreground',\n size === 'sm' && 'fk:text-xs',\n size === 'md' && 'fk:text-sm',\n 'fk:group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n};\n","/** `FolderTree` → `folder-tree`, `Clock10` → `clock-10`, `folder-tree` → `folder-tree`. */\nexport function toIconName(name: string): string {\n return name\n .trim()\n .replace(/([a-z])([A-Z0-9])/g, '$1-$2')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n}\n\n/** Shown for entities that declare no icon and whose name is not itself an icon name. */\nexport const DEFAULT_ICON_NAME = 'dock';\n\n/** `arrow-down-0-1` → `ArrowDown01`: the component name lucide exports for a kebab icon name. */\nexport function toPascalIconName(name: string): string {\n return name.replace(/(^|-)([a-z0-9])/g, (_, __, char: string) => char.toUpperCase());\n}\n\n/**\n * Builds a resolver over the available icon names.\n *\n * `name` (from `menu.icon`) is accepted as a kebab name or as lucide's\n * PascalCase component name. Without one, an entity gets the icon that shares\n * its name exactly, allowing for a plural `s` either way (`tag` → `tags`,\n * `languages` → `languages`); anything looser produced unrelated icons, so\n * everything else falls back to `DEFAULT_ICON_NAME`.\n */\nexport function createIconResolver(\n iconNames: readonly string[]\n): (name: string | undefined, fallbackFor?: string) => string {\n const available = new Set<string>(iconNames);\n // Kebab → PascalCase is lossy (`arrow-down-0-1` and `clock-10` both keep\n // their digits differently), so map every known PascalCase name explicitly.\n // Aliases (`arrow-down-0-1`, `arrow-down-01`) share a PascalCase name; the first one wins.\n const byPascalName = new Map<string, string>();\n\n for (const candidate of iconNames) {\n const pascal = toPascalIconName(candidate);\n\n if (!byPascalName.has(pascal)) {\n byPascalName.set(pascal, candidate);\n }\n }\n\n const findExact = (value: string): string | undefined => {\n const trimmed = value.trim();\n\n if (available.has(trimmed)) {\n return trimmed;\n }\n\n const pascal = byPascalName.get(trimmed);\n\n if (pascal) {\n return pascal;\n }\n\n const kebab = toIconName(trimmed);\n\n return available.has(kebab) ? kebab : undefined;\n };\n\n return (name, fallbackFor) => {\n if (name) {\n const exact = findExact(name);\n\n if (exact) {\n return exact;\n }\n }\n\n if (fallbackFor) {\n const kebab = toIconName(fallbackFor);\n const candidates = [kebab, `${kebab}s`, kebab.endsWith('s') ? kebab.slice(0, -1) : ''].filter(Boolean);\n const match = candidates.find((candidate) => available.has(candidate));\n\n if (match) {\n return match;\n }\n }\n\n return DEFAULT_ICON_NAME;\n };\n}\n","import type { JSX } from 'react';\nimport { DynamicIcon, iconNames } from 'lucide-react/dynamic';\nimport type { IconName } from 'lucide-react/dynamic';\nimport { createIconResolver } from './icon-name';\n\nconst resolve = createIconResolver(iconNames);\n\n/** Picks the lucide icon to render for `name`, see `createIconResolver`. */\nexport function resolveIconName(name: string | undefined, fallbackFor?: string): IconName {\n return resolve(name, fallbackFor) as IconName;\n}\n\ntype Props = {\n /** Lucide icon name, PascalCase (`'Tag'`) or kebab-case (`'tag'`). */\n name?: string;\n /** Concept to fuzzy-match an icon for when `name` is missing or unknown. */\n fallbackFor?: string;\n className?: string;\n strokeWidth?: number;\n};\n\n/**\n * Renders a lucide icon by name. Icons load as separate chunks, so the whole\n * icon set stays out of the main bundle. A fixed-size placeholder keeps the\n * layout stable while a chunk loads.\n */\nexport function Icon({ name, fallbackFor, className = 'fk:h-4 fk:w-4', strokeWidth = 2 }: Props): JSX.Element {\n return (\n <DynamicIcon\n className={className}\n fallback={() => <span aria-hidden className={`fk:inline-block ${className}`} />}\n name={resolveIconName(name, fallbackFor)}\n strokeWidth={strokeWidth}\n />\n );\n}\n","import type { JSX } from 'react';\nimport { NavLink } from 'react-router-dom';\nimport {\n Sidebar as SidebarPrimitive,\n SidebarContent,\n SidebarGroup,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuItem,\n SidebarMenuButton,\n SidebarRail,\n} from '../primitives/sidebar';\nimport type { Entity, MenuGroup } from '../../core/types';\nimport { groupBy } from 'ramda';\nimport { Icon } from './icon';\n\nconst NavLinkCompat = NavLink as unknown as React.ComponentType<{\n children?: React.ReactNode;\n to: string;\n}>;\n\ninterface SidebarProps extends React.HTMLAttributes<HTMLDivElement> {\n className?: string;\n menuGroups?: MenuGroup[];\n schema: Entity[];\n}\n\nexport function Sidebar({ className, menuGroups, schema }: SidebarProps): JSX.Element {\n // Filter out hidden items first, then group them\n const visibleItems = schema.filter((item) => item.menu?.hidden !== true);\n const itemsByGroup = groupBy(\n (item) => (item.menu?.group && menuGroups?.find((g) => g.name === item.menu?.group)?.name) || 'ungrouped',\n visibleItems\n );\n const nonEmptyGroups = menuGroups?.filter((menuGroup) => itemsByGroup[menuGroup.name]?.length);\n\n return (\n <SidebarPrimitive className={className} collapsible=\"icon\" variant=\"inset\">\n <SidebarContent>\n {nonEmptyGroups?.map((group) => (\n <SidebarGroup key={group.name}>\n <SidebarGroupLabel>{group.title}</SidebarGroupLabel>\n <SidebarMenu>\n {itemsByGroup[group.name]?.map((entity) => (\n <SidebarMenuItem key={entity.plural}>\n <SidebarMenuButton\n asChild\n isActive={location.pathname.includes(`/list/${entity.plural}`)}\n tooltip={capitalize(entity.menu?.label ?? entity.plural)}\n >\n <NavLinkCompat to={`list/${entity.plural}`}>\n <Icon className=\"fk:h-4 fk:w-4 fk:mr-2\" fallbackFor={entity.name} name={entity.menu?.icon} />\n <span>{capitalize(entity.menu?.label ?? entity.plural)}</span>\n </NavLinkCompat>\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroup>\n ))}\n <SidebarGroup>\n <SidebarMenu>\n {itemsByGroup['ungrouped']?.map((entity) => (\n <SidebarMenuItem key={entity.plural}>\n <SidebarMenuButton\n asChild\n isActive={location.pathname.includes(`/list/${entity.plural}`)}\n tooltip={capitalize(entity.menu?.label ?? entity.plural)}\n >\n <NavLinkCompat to={`list/${entity.plural}`}>\n <Icon className=\"fk:h-4 fk:w-4 fk:mr-2\" fallbackFor={entity.name} name={entity.menu?.icon} />\n <span>{capitalize(entity.menu?.label ?? entity.plural)}</span>\n </NavLinkCompat>\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroup>\n </SidebarContent>\n <SidebarRail />\n </SidebarPrimitive>\n );\n}\n\nfunction capitalize(str: string): string {\n // Add space before capital letters and capitalize first letter\n const withSpaces = str.replace(/([A-Z])/g, ' $1');\n // Capitalize first letter and trim any leading space\n return withSpaces.charAt(0).toUpperCase() + withSpaces.slice(1).trim();\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Switch as SwitchPrimitive } from 'radix-ui';\nimport { cn } from '../lib/utils';\n\nfunction Switch({\n className,\n size = 'default',\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: 'sm' | 'default';\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n 'fk:peer fk:group/switch fk:inline-flex fk:shrink-0 fk:items-center fk:rounded-full fk:border fk:border-transparent fk:shadow-xs fk:transition-all fk:outline-none fk:focus-visible:border-ring fk:focus-visible:ring-[3px] fk:focus-visible:ring-ring/50 fk:disabled:cursor-not-allowed fk:disabled:opacity-50 fk:data-[size=default]:h-5 fk:data-[size=default]:w-8 fk:data-[size=sm]:h-3.5 fk:data-[size=sm]:w-6 fk:data-[state=checked]:bg-success fk:data-[state=unchecked]:bg-input fk:dark:data-[state=unchecked]:bg-input/80 fk:corner-squircle',\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n 'fk:pointer-events-none fk:block fk:rounded-full fk:bg-white fk:ring-0 fk:transition-transform fk:group-data-[size=default]/switch:size-3.75 fk:group-data-[size=sm]/switch:size-3 fk:data-[state=checked]:translate-x-[calc(100%-2px)] fk:data-[state=unchecked]:translate-x-0.25 fk:dark:data-[state=checked]:bg-white fk:dark:data-[state=unchecked]:bg-white fk:corner-squircle'\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import * as React from 'react';\nimport { cn } from '../lib/utils';\n\ntype TableProps = Omit<React.ComponentProps<'table'>, 'ref'> & {\n containerClassName?: string;\n ref?: React.Ref<HTMLDivElement>;\n};\n\nfunction Table({ className, containerClassName, onScroll, ref, ...props }: TableProps) {\n return (\n <div\n ref={ref}\n data-slot=\"table-container\"\n className={cn(\n 'fk:relative fk:h-full fk:w-full fk:min-w-0 fk:overflow-auto fk:rounded-t-md fk:border-border fk:border fk:corner-squircle',\n containerClassName\n )}\n onScroll={onScroll}\n >\n <table data-slot=\"table\" className={cn('fk:w-full fk:caption-bottom fk:text-sm', className)} {...props} />\n </div>\n );\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<'thead'>) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn('fk:[&_tr]:border-b fk:bg-muted fk:dark:bg-muted', className)}\n {...props}\n />\n );\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<'tbody'>) {\n return <tbody data-slot=\"table-body\" className={cn('fk:[&_tr:last-child]:border-0', className)} {...props} />;\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<'tfoot'>) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn('fk:border-t fk:bg-muted/50 fk:font-medium fk:[&>tr]:last:border-b-0', className)}\n {...props}\n />\n );\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<'tr'>) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n 'fk:border-b fk:transition-colors fk:hover:bg-muted/50 fk:has-aria-expanded:bg-muted/50 fk:data-[state=selected]:bg-muted',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<'th'>) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n 'fk:h-10 fk:px-4 fk:text-left fk:align-middle fk:font-medium fk:whitespace-nowrap fk:text-foreground fk:[&:has([role=checkbox])]:pr-0 fk:*:[[role=checkbox]]:translate-y-[2px]',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<'td'>) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n 'fk:px-4 fk:py-1 fk:align-middle fk:whitespace-nowrap fk:[&:has([role=checkbox])]:pr-0 fk:*:[[role=checkbox]]:translate-y-[2px]',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableCaption({ className, ...props }: React.ComponentProps<'caption'>) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn('fk:mt-4 fk:pb-2 fk:text-sm fk:text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nexport { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption };\n","'use client';\n\nimport * as React from 'react';\nimport { Tabs as TabsPrimitive } from 'radix-ui';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../lib/utils';\n\nfunction Tabs({ className, orientation = 'horizontal', ...props }: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-orientation={orientation}\n orientation={orientation}\n className={cn('fk:group/tabs fk:flex fk:data-[orientation=horizontal]:flex-col', className)}\n {...props}\n />\n );\n}\n\nconst tabsListVariants = cva(\n 'fk:group/tabs-list fk:inline-flex fk:w-fit fk:items-center fk:justify-center fk:rounded-lg fk:text-muted-foreground fk:group-data-[orientation=horizontal]/tabs:h-9 fk:group-data-[orientation=vertical]/tabs:h-fit fk:group-data-[orientation=vertical]/tabs:flex-col fk:data-[variant=line]:rounded-none fk:corner-squircle',\n {\n variants: {\n variant: {\n default: 'fk:bg-muted',\n line: 'fk:gap-1 fk:bg-transparent',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nfunction TabsList({\n className,\n variant = 'default',\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List> & VariantProps<typeof tabsListVariants>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n data-variant={variant}\n className={cn(tabsListVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({\n className,\n type = 'button',\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n type={type}\n className={cn(\n \"fk:relative fk:inline-flex fk:h-[calc(100%-1px)] fk:flex-1 fk:items-center fk:justify-center fk:gap-1.5 fk:rounded-md fk:border fk:border-transparent! fk:px-4 fk:py-1 fk:text-sm fk:font-medium fk:whitespace-nowrap fk:text-foreground/60 fk:transition-all fk:group-data-[orientation=vertical]/tabs:w-full fk:group-data-[orientation=vertical]/tabs:justify-start fk:hover:text-foreground fk:focus-visible:border-ring! fk:focus-visible:ring-[3px] fk:focus-visible:ring-ring/50 fk:focus-visible:outline-1 fk:focus-visible:outline-ring fk:disabled:pointer-events-none fk:disabled:opacity-50 fk:group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm fk:group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none fk:dark:text-muted-foreground fk:dark:hover:text-foreground fk:[&_svg]:pointer-events-none fk:[&_svg]:shrink-0 fk:[&_svg:not([class*='size-'])]:size-4 fk:corner-squircle\",\n 'fk:group-data-[variant=line]/tabs-list:bg-transparent fk:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent fk:dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent! fk:dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent',\n 'fk:data-[state=active]:bg-background fk:data-[state=active]:text-foreground fk:dark:data-[state=active]:bg-muted-foreground/10 fk:dark:data-[state=active]:text-foreground fk:data-[state=active]:scale-[1.05]',\n 'fk:after:absolute fk:after:bg-foreground fk:after:opacity-0 fk:after:transition-opacity fk:group-data-[orientation=horizontal]/tabs:after:inset-x-0 fk:group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] fk:group-data-[orientation=horizontal]/tabs:after:h-0.5 fk:group-data-[orientation=vertical]/tabs:after:inset-y-0 fk:group-data-[orientation=vertical]/tabs:after:-right-1 fk:group-data-[orientation=vertical]/tabs:after:w-0.5 fk:group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn('fk:flex-1 fk:outline-none fk:flex fk:flex-col', className)}\n {...props}\n />\n );\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants };\n","import * as React from 'react';\nimport { cn } from '../lib/utils';\n\nfunction Textarea({ className, ...props }: React.ComponentProps<'textarea'>) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n 'fk:flex fk:field-sizing-content fk:min-h-16 fk:w-full fk:rounded-md fk:border fk:border-input fk:bg-background fk:px-3 fk:py-2 fk:text-base fk:shadow-xs fk:transition-[color,box-shadow] fk:outline-none fk:placeholder:text-muted-foreground fk:focus-visible:border-ring fk:focus-visible:ring-[3px] fk:focus-visible:ring-ring/50 fk:disabled:cursor-not-allowed fk:disabled:opacity-50 fk:aria-invalid:border-destructive fk:aria-invalid:ring-destructive/20 fk:md:text-sm fk:dark:bg-input/30 fk:dark:aria-invalid:ring-destructive/40 fk:corner-squircle',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Textarea };\n","'use client';\n\nimport * as React from 'react';\nimport { Toggle as TogglePrimitive } from 'radix-ui';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../lib/utils';\n\nconst toggleVariants = cva(\n \"fk:inline-flex fk:items-center fk:justify-center fk:gap-2 fk:rounded-md fk:text-sm fk:font-medium fk:whitespace-nowrap fk:transition-[color,box-shadow] fk:outline-none fk:hover:bg-muted fk:hover:text-muted-foreground fk:focus-visible:border-ring fk:focus-visible:ring-[3px] fk:focus-visible:ring-ring/50 fk:disabled:pointer-events-none fk:disabled:opacity-50 fk:aria-invalid:border-destructive fk:aria-invalid:ring-destructive/20 fk:data-[state=on]:bg-accent fk:data-[state=on]:text-accent-foreground fk:dark:aria-invalid:ring-destructive/40 fk:[&_svg]:pointer-events-none fk:[&_svg]:shrink-0 fk:[&_svg:not([class*='size-'])]:size-4 fk:corner-squircle\",\n {\n variants: {\n variant: {\n default: 'fk:bg-transparent',\n outline:\n 'fk:border fk:border-input fk:bg-transparent fk:shadow-xs fk:hover:bg-accent fk:hover:text-accent-foreground',\n },\n size: {\n default: 'fk:h-9 fk:min-w-9 fk:px-2',\n sm: 'fk:h-8 fk:min-w-8 fk:px-1.5',\n lg: 'fk:h-10 fk:min-w-10 fk:px-2.5',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nfunction Toggle({\n className,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive.Root data-slot=\"toggle\" className={cn(toggleVariants({ variant, size, className }))} {...props} />\n );\n}\n\nexport { Toggle, toggleVariants };\n","'use client';\n\nimport * as React from 'react';\nimport { ToggleGroup as ToggleGroupPrimitive } from 'radix-ui';\nimport type { VariantProps } from 'class-variance-authority';\nimport { cn } from '../lib/utils';\nimport { toggleVariants } from './toggle';\n\nconst ToggleGroupContext = React.createContext<\n VariantProps<typeof toggleVariants> & {\n spacing?: number;\n }\n>({\n size: 'default',\n variant: 'default',\n spacing: 0,\n});\n\nfunction ToggleGroup({\n className,\n variant,\n size,\n spacing = 0,\n children,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &\n VariantProps<typeof toggleVariants> & {\n spacing?: number;\n }) {\n return (\n <ToggleGroupPrimitive.Root\n data-slot=\"toggle-group\"\n data-variant={variant}\n data-size={size}\n data-spacing={spacing}\n style={{ '--gap': spacing } as React.CSSProperties}\n className={cn(\n 'fk:group/toggle-group fk:flex fk:w-fit fk:items-center fk:gap-[--spacing(var(--gap))] fk:rounded-md fk:data-[spacing=default]:data-[variant=outline]:shadow-xs fk:corner-squircle',\n className\n )}\n {...props}\n >\n <ToggleGroupContext.Provider value={{ variant, size, spacing }}>{children}</ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n );\n}\n\nfunction ToggleGroupItem({\n className,\n children,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> & VariantProps<typeof toggleVariants>) {\n const context = React.useContext(ToggleGroupContext);\n\n return (\n <ToggleGroupPrimitive.Item\n data-slot=\"toggle-group-item\"\n data-variant={context.variant || variant}\n data-size={context.size || size}\n data-spacing={context.spacing}\n className={cn(\n toggleVariants({\n variant: context.variant || variant,\n size: context.size || size,\n }),\n 'fk:w-auto fk:min-w-0 fk:shrink-0 fk:px-3 fk:focus:z-10 fk:focus-visible:z-10',\n 'fk:data-[spacing=0]:rounded-none fk:data-[spacing=0]:shadow-none fk:data-[spacing=0]:first:rounded-l-md fk:data-[spacing=0]:last:rounded-r-md fk:data-[spacing=0]:data-[variant=outline]:border-l-0 fk:data-[spacing=0]:data-[variant=outline]:first:border-l',\n className\n )}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Item>\n );\n}\n\nexport { ToggleGroup, ToggleGroupItem };\n","'use client';\n\nimport { Info } from 'lucide-react';\nimport type { JSX, ReactNode } from 'react';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../primitives/tooltip';\n\nexport function InsufficientPermissionsTooltipContent(): JSX.Element {\n return (\n <TooltipContent className=\"fk:max-w-64 fk:p-3\">\n <div className=\"fk:flex fk:gap-2.5\">\n <Info className=\"fk:mt-0.5 fk:h-4 fk:w-4 fk:shrink-0 fk:opacity-70\" />\n <div className=\"fk:flex fk:flex-col fk:gap-1\">\n <p className=\"fk:text-sm fk:font-semibold fk:leading-none\">Insufficient permissions</p>\n <p className=\"fk:text-xs fk:opacity-70 fk:leading-snug\">Your member role cannot perform this action</p>\n </div>\n </div>\n </TooltipContent>\n );\n}\n\n/**\n * Wraps a disabled control so it still shows an \"Insufficient permissions\"\n * tooltip on hover (disabled buttons swallow pointer events, hence the span).\n */\nexport function PermissionTooltip({ disabled, children }: { disabled: boolean; children: ReactNode }): JSX.Element {\n if (!disabled) {\n return <>{children}</>;\n }\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"fk:inline-flex\">{children}</span>\n </TooltipTrigger>\n <InsufficientPermissionsTooltipContent />\n </Tooltip>\n </TooltipProvider>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Drawer as DrawerPrimitive } from 'vaul';\nimport { cn } from '../lib/utils';\n\ntype DrawerPortalProps = React.PropsWithChildren<{\n container?: HTMLElement | null;\n}>;\n\nconst DrawerPrimitivePortal = DrawerPrimitive.Portal as React.ComponentType<DrawerPortalProps>;\n\nfunction Drawer({ ...props }: React.ComponentProps<typeof DrawerPrimitive.Root>) {\n return <DrawerPrimitive.Root data-slot=\"drawer\" {...props} />;\n}\n\nfunction DrawerTrigger({ ...props }: React.ComponentProps<typeof DrawerPrimitive.Trigger>) {\n return <DrawerPrimitive.Trigger data-slot=\"drawer-trigger\" {...props} />;\n}\n\nfunction DrawerPortal({ ...props }: DrawerPortalProps) {\n return <DrawerPrimitivePortal {...props} />;\n}\n\nfunction DrawerClose({ ...props }: React.ComponentProps<typeof DrawerPrimitive.Close>) {\n return <DrawerPrimitive.Close data-slot=\"drawer-close\" {...props} />;\n}\n\nfunction DrawerOverlay({ className, ...props }: React.ComponentProps<typeof DrawerPrimitive.Overlay>) {\n return (\n <DrawerPrimitive.Overlay\n data-slot=\"drawer-overlay\"\n className={cn(\n 'fk:fixed fk:inset-0 fk:z-50 fk:bg-overlay/75 fk:backdrop-blur-[1px] fk:data-[state=closed]:animate-out fk:data-[state=closed]:fade-out-0 fk:data-[state=open]:animate-in fk:data-[state=open]:fade-in-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction DrawerContent({ className, children, ...props }: React.ComponentProps<typeof DrawerPrimitive.Content>) {\n return (\n <DrawerPortal>\n <DrawerOverlay />\n <DrawerPrimitive.Content\n data-slot=\"drawer-content\"\n className={cn(\n 'fk:group/drawer-content fk:fixed fk:z-50 fk:flex fk:h-auto fk:flex-col fk:bg-background',\n 'fk:data-[vaul-drawer-direction=top]:inset-x-0 fk:data-[vaul-drawer-direction=top]:top-0 fk:data-[vaul-drawer-direction=top]:mb-24 fk:data-[vaul-drawer-direction=top]:max-h-[80vh] fk:data-[vaul-drawer-direction=top]:rounded-b-lg fk:data-[vaul-drawer-direction=top]:border-b',\n 'fk:data-[vaul-drawer-direction=bottom]:inset-x-0 fk:data-[vaul-drawer-direction=bottom]:bottom-0 fk:data-[vaul-drawer-direction=bottom]:mt-24 fk:data-[vaul-drawer-direction=bottom]:max-h-[80vh] fk:data-[vaul-drawer-direction=bottom]:rounded-t-lg fk:data-[vaul-drawer-direction=bottom]:border-t',\n 'fk:data-[vaul-drawer-direction=right]:inset-y-0 fk:data-[vaul-drawer-direction=right]:right-0 fk:data-[vaul-drawer-direction=right]:w-full fk:data-[vaul-drawer-direction=right]:max-w-[clamp(40vw,95vw,60rem)] fk:data-[vaul-drawer-direction=right]:border-l fk:rounded-l-[20px] fk:corner-squircle',\n 'fk:data-[vaul-drawer-direction=left]:inset-y-0 fk:data-[vaul-drawer-direction=left]:left-0 fk:data-[vaul-drawer-direction=left]:w-3/4 fk:data-[vaul-drawer-direction=left]:border-r fk:data-[vaul-drawer-direction=left]:sm:max-w-sm',\n className\n )}\n {...props}\n >\n <div\n className={cn(\n 'fk:absolute fk:z-10 fk:hidden fk:shrink-0 fk:rounded-full fk:bg-muted fk:corner-squircle',\n 'fk:group-data-[vaul-drawer-direction=bottom]/drawer-content:top-4 fk:group-data-[vaul-drawer-direction=bottom]/drawer-content:left-1/2 fk:group-data-[vaul-drawer-direction=bottom]/drawer-content:block fk:group-data-[vaul-drawer-direction=bottom]/drawer-content:h-2 fk:group-data-[vaul-drawer-direction=bottom]/drawer-content:w-[100px] fk:group-data-[vaul-drawer-direction=bottom]/drawer-content:-translate-x-1/2',\n 'fk:group-data-[vaul-drawer-direction=top]/drawer-content:bottom-4 fk:group-data-[vaul-drawer-direction=top]/drawer-content:left-1/2 fk:group-data-[vaul-drawer-direction=top]/drawer-content:block fk:group-data-[vaul-drawer-direction=top]/drawer-content:h-2 fk:group-data-[vaul-drawer-direction=top]/drawer-content:w-[100px] fk:group-data-[vaul-drawer-direction=top]/drawer-content:-translate-x-1/2',\n 'fk:group-data-[vaul-drawer-direction=right]/drawer-content:left-3 fk:group-data-[vaul-drawer-direction=right]/drawer-content:top-1/2 fk:group-data-[vaul-drawer-direction=right]/drawer-content:block fk:group-data-[vaul-drawer-direction=right]/drawer-content:h-[100px] fk:group-data-[vaul-drawer-direction=right]/drawer-content:w-2 fk:group-data-[vaul-drawer-direction=right]/drawer-content:-translate-y-1/2',\n 'fk:group-data-[vaul-drawer-direction=left]/drawer-content:right-4 fk:group-data-[vaul-drawer-direction=left]/drawer-content:top-1/2 fk:group-data-[vaul-drawer-direction=left]/drawer-content:block fk:group-data-[vaul-drawer-direction=left]/drawer-content:h-[100px] fk:group-data-[vaul-drawer-direction=left]/drawer-content:w-2 fk:group-data-[vaul-drawer-direction=left]/drawer-content:-translate-y-1/2'\n )}\n />\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n );\n}\n\nfunction DrawerHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"drawer-header\"\n className={cn(\n 'fk:flex fk:gap-2.5 fk:p-4 fk:group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center fk:group-data-[vaul-drawer-direction=top]/drawer-content:text-center fk:md:text-left',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction DrawerFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"drawer-footer\"\n className={cn('fk:mt-auto fk:flex fk:flex-col fk:gap-2 fk:p-4', className)}\n {...props}\n />\n );\n}\n\nfunction DrawerTitle({ className, ...props }: React.ComponentProps<typeof DrawerPrimitive.Title>) {\n return (\n <DrawerPrimitive.Title\n data-slot=\"drawer-title\"\n className={cn('fk:flex fk:items-center fk:text-lg fk:font-semibold fk:leading-none fk:tracking-tight', className)}\n {...props}\n />\n );\n}\n\nfunction DrawerDescription({ className, ...props }: React.ComponentProps<typeof DrawerPrimitive.Description>) {\n return (\n <DrawerPrimitive.Description\n data-slot=\"drawer-description\"\n className={cn('fk:text-sm fk:text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nexport {\n Drawer,\n DrawerPortal,\n DrawerOverlay,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n};\n","'use client';\n\nimport type { JSX } from 'react';\nimport { useCallback, useEffect, useState } from 'react';\nimport type { Dispatch, ReactNode, SetStateAction } from 'react';\nimport { X as CloseIcon } from 'lucide-react';\nimport { Button } from '../primitives/button';\nimport { Drawer, DrawerContent, DrawerDescription, DrawerHeader, DrawerTitle } from '../primitives/drawer';\nimport { Separator } from '../primitives/separator';\nimport { Skeleton } from '../primitives/skeleton';\n\ntype Props = {\n actions: ReactNode;\n beforeClose?: () => boolean;\n children: ReactNode;\n depth: number; // how many drawers are open, to control the width of the drawers\n /**\n * Close the drawer without running `beforeClose` (used after confirming discard).\n * Lets Vaul release its body lock instead of hard-unmounting an open drawer.\n */\n forceClose?: boolean;\n isFocused: boolean; // whether the drawer is the last one open\n onFormChange?: Dispatch<SetStateAction<boolean>>; // a callback executed everyt time the form changes its state\n onClose: () => void;\n title: string;\n};\n\nexport default function DrawerModal({\n actions,\n beforeClose,\n children,\n depth,\n forceClose = false,\n isFocused,\n onFormChange: _onFormChange,\n onClose,\n title,\n}: Props): JSX.Element {\n const [isOpen, setIsOpen] = useState(false);\n const gutter = depth * (50 / depth);\n\n const closeDrawer = useCallback(() => {\n setIsOpen(false);\n globalThis.setTimeout(() => {\n onClose();\n }, 150);\n }, [onClose]);\n\n const handleClose = useCallback(() => {\n if (forceClose) {\n return;\n }\n\n const shouldClose = beforeClose ? beforeClose() : true;\n\n if (!shouldClose) {\n return;\n }\n\n closeDrawer();\n }, [beforeClose, closeDrawer, forceClose]);\n\n useEffect(() => {\n if (!forceClose) {\n return;\n }\n\n closeDrawer();\n }, [closeDrawer, forceClose]);\n\n const onEscapeKeyPressed = useCallback(\n (event: KeyboardEvent): void => {\n if (event.key === 'Escape' && isFocused) {\n handleClose();\n }\n },\n [handleClose, isFocused]\n );\n\n useEffect(() => {\n setIsOpen(true);\n // overwrite \"background: black\" set by Vaul in the body, and add missing bottom: 0 style\n globalThis.document.body.classList.add('fk-drawer-fix');\n\n return () => {\n globalThis.document.body.classList.remove('fk-drawer-fix');\n };\n }, []);\n\n useEffect(() => {\n globalThis.document.addEventListener('keydown', onEscapeKeyPressed, false);\n\n return () => {\n globalThis.document.removeEventListener('keydown', onEscapeKeyPressed, false);\n };\n }, [onEscapeKeyPressed]);\n\n return (\n <Drawer\n direction=\"right\"\n dismissible={false}\n onClose={() => {\n handleClose();\n }}\n open={isOpen}\n >\n <DrawerContent style={isFocused ? {} : { maxWidth: `calc(100% - ${gutter.toString()}px)` }}>\n <DrawerHeader className=\"fk:px-10\">\n <DrawerTitle className=\"fk:w-full\">\n {title ? title : <Skeleton className=\"fk:h-5 fk:w-[120px]\" />}\n </DrawerTitle>\n <DrawerDescription className=\"fk:sr-only\">{title ? title : 'Loading form'}</DrawerDescription>\n {actions}\n <Button className=\"\" onClick={handleClose} size=\"icon\" variant=\"ghost\">\n <CloseIcon className=\"fk:h-4 fk:w-4\" />\n <span className=\"fk:sr-only\">Close</span>\n </Button>\n </DrawerHeader>\n <Separator />\n <div className=\"fk:min-h-0 fk:px-10 fk:pt-6 fk:h-full fk:overflow-y-auto fk:pb-16\" data-vaul-no-drag>\n {children}\n </div>\n </DrawerContent>\n </Drawer>\n );\n}\n","'use client';\n\nimport { CircleCheckIcon, InfoIcon, Loader2Icon, OctagonXIcon, TriangleAlertIcon } from 'lucide-react';\nimport { useTheme } from '../theme-context';\nimport { toast, Toaster as Sonner, type ToasterProps } from 'sonner';\n\nconst Toaster = ({ richColors = true, style, ...props }: ToasterProps) => {\n const { theme = 'system' } = useTheme();\n\n return (\n <Sonner\n theme={theme as ToasterProps['theme']}\n richColors={richColors}\n className=\"toaster group\"\n icons={{\n success: <CircleCheckIcon className=\"fk:size-4\" />,\n info: <InfoIcon className=\"fk:size-4\" />,\n warning: <TriangleAlertIcon className=\"fk:size-4\" />,\n error: <OctagonXIcon className=\"fk:size-4\" />,\n loading: <Loader2Icon className=\"fk:size-4 fk:animate-spin\" />,\n }}\n style={\n {\n '--normal-bg': 'hsl(var(--popover))',\n '--normal-text': 'hsl(var(--popover-foreground))',\n '--normal-border': 'hsl(var(--border))',\n '--border-radius': 'var(--radius)',\n ...style,\n } as React.CSSProperties\n }\n {...props}\n />\n );\n};\n\nexport { toast, Toaster };\n","'use client';\n\nimport * as React from 'react';\nimport { HoverCard as HoverCardPrimitive } from 'radix-ui';\nimport { cn } from '../lib/utils';\n\nfunction HoverCard({ ...props }: React.ComponentProps<typeof HoverCardPrimitive.Root>) {\n return <HoverCardPrimitive.Root data-slot=\"hover-card\" {...props} />;\n}\n\nfunction HoverCardTrigger({ ...props }: React.ComponentProps<typeof HoverCardPrimitive.Trigger>) {\n return <HoverCardPrimitive.Trigger data-slot=\"hover-card-trigger\" {...props} />;\n}\n\nfunction HoverCardContent({\n className,\n align = 'center',\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Content>) {\n return (\n <HoverCardPrimitive.Portal data-slot=\"hover-card-portal\">\n <HoverCardPrimitive.Content\n data-slot=\"hover-card-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'fk:z-50 fk:w-64 fk:origin-(--radix-hover-card-content-transform-origin) fk:rounded-md fk:border fk:bg-popover fk:p-4 fk:text-popover-foreground fk:shadow-md fk:outline-hidden fk:data-[side=bottom]:slide-in-from-top-2 fk:data-[side=left]:slide-in-from-right-2 fk:data-[side=right]:slide-in-from-left-2 fk:data-[side=top]:slide-in-from-bottom-2 fk:data-[state=closed]:animate-out fk:data-[state=closed]:fade-out-0 fk:data-[state=closed]:zoom-out-95 fk:data-[state=open]:animate-in fk:data-[state=open]:fade-in-0 fk:data-[state=open]:zoom-in-95 fk:corner-squircle',\n className\n )}\n {...props}\n />\n </HoverCardPrimitive.Portal>\n );\n}\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent };\n","import * as React from 'react';\nimport { Loader2Icon } from 'lucide-react';\nimport { cn } from '../lib/utils';\n\nfunction Spinner({ className, ...props }: React.ComponentProps<'svg'>) {\n return (\n <Loader2Icon\n role=\"status\"\n aria-label=\"Loading\"\n className={cn('fk:size-4 fk:animate-spin', className)}\n {...props}\n />\n );\n}\n\nexport { Spinner };\n","'use client';\n\nimport * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../lib/utils';\nimport { Button } from './button';\nimport { Input } from './input';\nimport { Textarea } from './textarea';\n\nfunction InputGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"input-group\"\n role=\"group\"\n className={cn(\n 'fk:group/input-group fk:border-input fk:dark:bg-input/30 fk:shadow-xs fk:relative fk:flex fk:w-full fk:items-center fk:rounded-lg fk:border fk:outline-none fk:transition-[color,box-shadow] fk:corner-squircle',\n 'fk:h-9 fk:has-[>textarea]:h-auto',\n 'fk:has-[>[data-align=inline-start]]:[&>input]:pl-2',\n 'fk:has-[>[data-align=inline-end]]:[&>input]:pr-2',\n 'fk:has-[>[data-align=block-start]]:h-auto fk:has-[>[data-align=block-start]]:flex-col fk:has-[>[data-align=block-start]]:[&>input]:pb-3',\n 'fk:has-[>[data-align=block-end]]:h-auto fk:has-[>[data-align=block-end]]:flex-col fk:has-[>[data-align=block-end]]:[&>input]:pt-3',\n 'fk:has-[[data-slot=input-group-control]:focus-visible]:ring-ring fk:has-[[data-slot=input-group-control]:focus-visible]:ring-1',\n 'fk:has-[[data-slot][aria-invalid=true]]:ring-destructive/20 fk:has-[[data-slot][aria-invalid=true]]:border-destructive fk:dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40',\n className\n )}\n {...props}\n />\n );\n}\n\nconst inputGroupAddonVariants = cva(\n 'fk:text-muted-foreground fk:flex fk:h-auto fk:cursor-text fk:select-none fk:items-center fk:justify-center fk:gap-2 fk:py-1.5 fk:text-sm fk:font-medium fk:group-data-[disabled=true]/input-group:opacity-50 fk:[&>kbd]:rounded-[calc(var(--radius)-5px)] fk:[&>svg:not([class*=size-])]:size-4',\n {\n variants: {\n align: {\n 'inline-start':\n 'fk:order-first fk:pl-3 fk:has-[>button]:ml-[-0.45rem] fk:has-[>kbd]:ml-[-0.35rem]',\n 'inline-end':\n 'fk:order-last fk:pr-3 fk:has-[>button]:mr-[-0.4rem] fk:has-[>kbd]:mr-[-0.35rem]',\n 'block-start':\n 'fk:[.border-b]:pb-3 fk:order-first fk:w-full fk:justify-start fk:px-3 fk:pt-3 fk:group-has-[>input]/input-group:pt-2.5',\n 'block-end':\n 'fk:[.border-t]:pt-3 fk:order-last fk:w-full fk:justify-start fk:px-3 fk:pb-3 fk:group-has-[>input]/input-group:pb-2.5',\n },\n },\n defaultVariants: {\n align: 'inline-start',\n },\n }\n);\n\nfunction InputGroupAddon({\n className,\n align = 'inline-start',\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest('button')) {\n return;\n }\n\n e.currentTarget.parentElement?.querySelector('input')?.focus();\n }}\n {...props}\n />\n );\n}\n\nconst inputGroupButtonVariants = cva('fk:flex fk:items-center fk:gap-2 fk:text-sm fk:shadow-none', {\n variants: {\n size: {\n xs: 'fk:h-6 fk:gap-1 fk:rounded-[calc(var(--radius)-5px)] fk:px-2 fk:has-[>svg]:px-2 fk:[&>svg:not([class*=size-])]:size-3.5 fk:corner-squircle',\n sm: 'fk:h-8 fk:gap-1.5 fk:rounded-lg fk:px-2.5 fk:has-[>svg]:px-2.5 fk:corner-squircle',\n 'icon-xs': 'fk:size-6 fk:rounded-[calc(var(--radius)-5px)] fk:p-0 fk:has-[>svg]:p-0 fk:corner-squircle',\n 'icon-sm': 'fk:size-8 fk:p-0 fk:has-[>svg]:p-0',\n },\n },\n defaultVariants: {\n size: 'xs',\n },\n});\n\nfunction InputGroupButton({\n className,\n type = 'button',\n variant = 'ghost',\n size = 'xs',\n ...props\n}: Omit<React.ComponentProps<typeof Button>, 'size'> & VariantProps<typeof inputGroupButtonVariants>) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n );\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n className={cn(\n 'fk:text-muted-foreground fk:flex fk:items-center fk:gap-2 fk:text-sm fk:[&_svg:not([class*=size-])]:size-4 fk:[&_svg]:pointer-events-none',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupInput({ className, ...props }: React.ComponentProps<'input'>) {\n return (\n <Input\n data-slot=\"input-group-control\"\n className={cn(\n 'fk:flex-1 fk:rounded-none fk:border-0 fk:bg-transparent fk:shadow-none fk:focus-visible:ring-0 fk:dark:bg-transparent fk:corner-squircle',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupTextarea({ className, ...props }: React.ComponentProps<'textarea'>) {\n return (\n <Textarea\n data-slot=\"input-group-control\"\n className={cn(\n 'fk:flex-1 fk:resize-none fk:rounded-none fk:border-0 fk:bg-transparent fk:py-3 fk:shadow-none fk:focus-visible:ring-0 fk:dark:bg-transparent fk:corner-squircle',\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupText,\n InputGroupInput,\n InputGroupTextarea,\n};\n","'use client';\n\nimport { Button } from '../primitives/button';\nimport { HoverCard, HoverCardContent, HoverCardTrigger } from '../primitives/hover-card';\nimport { cn } from '../lib/utils';\nimport type { FileUIPart, SourceDocumentUIPart } from 'ai';\nimport { FileTextIcon, GlobeIcon, ImageIcon, Music2Icon, PaperclipIcon, VideoIcon, XIcon } from 'lucide-react';\nimport type { ComponentProps, HTMLAttributes, ReactNode } from 'react';\nimport { createContext, useCallback, useContext, useMemo } from 'react';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type AttachmentData = (FileUIPart & { id: string }) | (SourceDocumentUIPart & { id: string });\n\nexport type AttachmentMediaCategory = 'image' | 'video' | 'audio' | 'document' | 'source' | 'unknown';\n\nexport type AttachmentVariant = 'grid' | 'inline' | 'list';\n\nconst mediaCategoryIcons: Record<AttachmentMediaCategory, typeof ImageIcon> = {\n audio: Music2Icon,\n document: FileTextIcon,\n image: ImageIcon,\n source: GlobeIcon,\n unknown: PaperclipIcon,\n video: VideoIcon,\n};\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\nexport const getMediaCategory = (data: AttachmentData): AttachmentMediaCategory => {\n if (data.type === 'source-document') {\n return 'source';\n }\n\n const mediaType = data.mediaType ?? '';\n\n if (mediaType.startsWith('image/')) {\n return 'image';\n }\n if (mediaType.startsWith('video/')) {\n return 'video';\n }\n if (mediaType.startsWith('audio/')) {\n return 'audio';\n }\n if (mediaType.startsWith('application/') || mediaType.startsWith('text/')) {\n return 'document';\n }\n\n return 'unknown';\n};\n\nexport const getAttachmentLabel = (data: AttachmentData): string => {\n if (data.type === 'source-document') {\n return data.title || data.filename || 'Source';\n }\n\n const category = getMediaCategory(data);\n return data.filename || (category === 'image' ? 'Image' : 'Attachment');\n};\n\nconst renderAttachmentImage = (url: string, filename: string | undefined, isGrid: boolean) =>\n isGrid ? (\n <img alt={filename || 'Image'} className=\"fk:size-full fk:object-cover\" height={96} src={url} width={96} />\n ) : (\n <img\n alt={filename || 'Image'}\n className=\"fk:size-full fk:rounded fk:object-cover fk:corner-squircle\"\n height={20}\n src={url}\n width={20}\n />\n );\n\n// ============================================================================\n// Contexts\n// ============================================================================\n\ninterface AttachmentsContextValue {\n variant: AttachmentVariant;\n}\n\nconst AttachmentsContext = createContext<AttachmentsContextValue | null>(null);\n\ninterface AttachmentContextValue {\n data: AttachmentData;\n mediaCategory: AttachmentMediaCategory;\n onRemove?: () => void;\n variant: AttachmentVariant;\n}\n\nconst AttachmentContext = createContext<AttachmentContextValue | null>(null);\n\n// ============================================================================\n// Hooks\n// ============================================================================\n\nexport const useAttachmentsContext = () => useContext(AttachmentsContext) ?? { variant: 'grid' as const };\n\nexport const useAttachmentContext = () => {\n const ctx = useContext(AttachmentContext);\n if (!ctx) {\n throw new Error('Attachment components must be used within <Attachment>');\n }\n return ctx;\n};\n\n// ============================================================================\n// Attachments - Container\n// ============================================================================\n\nexport type AttachmentsProps = HTMLAttributes<HTMLDivElement> & {\n variant?: AttachmentVariant;\n};\n\nexport const Attachments = ({ variant = 'grid', className, children, ...props }: AttachmentsProps) => {\n const contextValue = useMemo(() => ({ variant }), [variant]);\n\n return (\n <AttachmentsContext.Provider value={contextValue}>\n <div\n className={cn(\n 'fk:flex fk:items-start',\n variant === 'list' ? 'fk:flex-col fk:gap-2' : 'fk:flex-wrap fk:gap-2',\n variant === 'grid' && 'fk:ml-auto fk:w-fit',\n className\n )}\n {...props}\n >\n {children}\n </div>\n </AttachmentsContext.Provider>\n );\n};\n\n// ============================================================================\n// Attachment - Item\n// ============================================================================\n\nexport type AttachmentProps = HTMLAttributes<HTMLDivElement> & {\n data: AttachmentData;\n onRemove?: () => void;\n};\n\nexport const Attachment = ({ data, onRemove, className, children, ...props }: AttachmentProps) => {\n const { variant } = useAttachmentsContext();\n const mediaCategory = getMediaCategory(data);\n\n const contextValue = useMemo<AttachmentContextValue>(\n () => ({ data, mediaCategory, onRemove, variant }),\n [data, mediaCategory, onRemove, variant]\n );\n\n return (\n <AttachmentContext.Provider value={contextValue}>\n <div\n className={cn(\n 'fk:group fk:relative',\n variant === 'grid' && 'fk:size-24 fk:overflow-hidden fk:rounded-lg fk:corner-squircle',\n variant === 'inline' && [\n 'fk:flex fk:h-8 fk:cursor-pointer fk:select-none fk:items-center fk:gap-1.5',\n 'fk:rounded-md fk:border fk:border-border fk:px-1.5 fk:corner-squircle',\n 'fk:font-medium fk:text-sm fk:transition-all',\n 'fk:hover:bg-accent fk:hover:text-accent-foreground fk:dark:hover:bg-accent/50',\n ],\n variant === 'list' && [\n 'fk:flex fk:w-full fk:items-center fk:gap-3 fk:rounded-lg fk:border fk:p-3 fk:corner-squircle',\n 'fk:hover:bg-accent/50',\n ],\n className\n )}\n {...props}\n >\n {children}\n </div>\n </AttachmentContext.Provider>\n );\n};\n\n// ============================================================================\n// AttachmentPreview - Media preview\n// ============================================================================\n\nexport type AttachmentPreviewProps = HTMLAttributes<HTMLDivElement> & {\n fallbackIcon?: ReactNode;\n};\n\nexport const AttachmentPreview = ({ fallbackIcon, className, ...props }: AttachmentPreviewProps) => {\n const { data, mediaCategory, variant } = useAttachmentContext();\n\n const iconSize = variant === 'inline' ? 'fk:size-3' : 'fk:size-4';\n\n const renderIcon = (Icon: typeof ImageIcon) => <Icon className={cn(iconSize, 'fk:text-muted-foreground')} />;\n\n const renderContent = () => {\n if (mediaCategory === 'image' && data.type === 'file' && data.url) {\n return renderAttachmentImage(data.url, data.filename, variant === 'grid');\n }\n\n if (mediaCategory === 'video' && data.type === 'file' && data.url) {\n return <video className=\"fk:size-full fk:object-cover\" muted src={data.url} />;\n }\n\n const Icon = mediaCategoryIcons[mediaCategory];\n return fallbackIcon ?? renderIcon(Icon);\n };\n\n return (\n <div\n className={cn(\n 'fk:flex fk:shrink-0 fk:items-center fk:justify-center fk:overflow-hidden',\n variant === 'grid' && 'fk:size-full fk:bg-muted',\n variant === 'inline' && 'fk:size-5 fk:rounded fk:bg-background fk:corner-squircle',\n variant === 'list' && 'fk:size-12 fk:rounded fk:bg-muted fk:corner-squircle',\n className\n )}\n {...props}\n >\n {renderContent()}\n </div>\n );\n};\n\n// ============================================================================\n// AttachmentInfo - Name and type display\n// ============================================================================\n\nexport type AttachmentInfoProps = HTMLAttributes<HTMLDivElement> & {\n showMediaType?: boolean;\n};\n\nexport const AttachmentInfo = ({ showMediaType = false, className, ...props }: AttachmentInfoProps) => {\n const { data, variant } = useAttachmentContext();\n const label = getAttachmentLabel(data);\n\n if (variant === 'grid') {\n return null;\n }\n\n return (\n <div className={cn('fk:min-w-0 fk:flex-1', className)} {...props}>\n <span className=\"fk:block fk:truncate\">{label}</span>\n {showMediaType && data.mediaType && (\n <span className=\"fk:block fk:truncate fk:text-muted-foreground fk:text-xs\">{data.mediaType}</span>\n )}\n </div>\n );\n};\n\n// ============================================================================\n// AttachmentRemove - Remove button\n// ============================================================================\n\nexport type AttachmentRemoveProps = ComponentProps<typeof Button> & {\n label?: string;\n};\n\nexport const AttachmentRemove = ({ label = 'Remove', className, children, ...props }: AttachmentRemoveProps) => {\n const { onRemove, variant } = useAttachmentContext();\n\n const handleClick = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onRemove?.();\n },\n [onRemove]\n );\n\n if (!onRemove) {\n return null;\n }\n\n return (\n <Button\n aria-label={label}\n className={cn(\n variant === 'grid' && [\n 'fk:absolute fk:top-2 fk:right-2 fk:size-6 fk:rounded-full fk:p-0 fk:corner-squircle',\n 'fk:bg-background/80 fk:backdrop-blur-sm',\n 'fk:opacity-0 fk:transition-opacity fk:group-hover:opacity-100',\n 'fk:hover:bg-background',\n 'fk:[&>svg]:size-3',\n ],\n variant === 'inline' && [\n 'fk:size-5 fk:rounded fk:p-0 fk:corner-squircle',\n 'fk:opacity-0 fk:transition-opacity fk:group-hover:opacity-100',\n 'fk:[&>svg]:size-2.5',\n ],\n variant === 'list' && ['fk:size-8 fk:shrink-0 fk:rounded fk:p-0 fk:corner-squircle', 'fk:[&>svg]:size-4'],\n className\n )}\n onClick={handleClick}\n type=\"button\"\n variant=\"ghost\"\n {...props}\n >\n {children ?? <XIcon />}\n <span className=\"fk:sr-only\">{label}</span>\n </Button>\n );\n};\n\n// ============================================================================\n// AttachmentHoverCard - Hover preview\n// ============================================================================\n\nexport type AttachmentHoverCardProps = ComponentProps<typeof HoverCard>;\n\nexport const AttachmentHoverCard = ({ openDelay = 0, closeDelay = 0, ...props }: AttachmentHoverCardProps) => (\n <HoverCard closeDelay={closeDelay} openDelay={openDelay} {...props} />\n);\n\nexport type AttachmentHoverCardTriggerProps = ComponentProps<typeof HoverCardTrigger>;\n\nexport const AttachmentHoverCardTrigger = (props: AttachmentHoverCardTriggerProps) => <HoverCardTrigger {...props} />;\n\nexport type AttachmentHoverCardContentProps = ComponentProps<typeof HoverCardContent>;\n\nexport const AttachmentHoverCardContent = ({\n align = 'start',\n className,\n ...props\n}: AttachmentHoverCardContentProps) => (\n <HoverCardContent align={align} className={cn('fk:w-auto fk:p-2', className)} {...props} />\n);\n\n// ============================================================================\n// AttachmentEmpty - Empty state\n// ============================================================================\n\nexport type AttachmentEmptyProps = HTMLAttributes<HTMLDivElement>;\n\nexport const AttachmentEmpty = ({ className, children, ...props }: AttachmentEmptyProps) => (\n <div\n className={cn('fk:flex fk:items-center fk:justify-center fk:p-4 fk:text-muted-foreground fk:text-sm', className)}\n {...props}\n >\n {children ?? 'No attachments'}\n </div>\n);\n","'use client';\n\nimport { Button } from '../primitives/button';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../primitives/select';\nimport { cn } from '../lib/utils';\nimport { CheckIcon, CopyIcon } from 'lucide-react';\nimport type { ComponentProps, CSSProperties, HTMLAttributes } from 'react';\nimport { createContext, memo, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport type { BundledLanguage, BundledTheme, HighlighterGeneric, ThemedToken } from 'shiki';\nimport { createHighlighter } from 'shiki';\n\n// Shiki uses bitflags for font styles: 1=italic, 2=bold, 4=underline\n// oxlint-disable-next-line eslint(no-bitwise)\nconst isItalic = (fontStyle: number | undefined) => fontStyle && fontStyle & 1;\n// oxlint-disable-next-line eslint(no-bitwise)\nconst isBold = (fontStyle: number | undefined) => fontStyle && fontStyle & 2;\nconst isUnderline = (fontStyle: number | undefined) =>\n // oxlint-disable-next-line eslint(no-bitwise)\n fontStyle && fontStyle & 4;\n\n// Transform tokens to include pre-computed keys to avoid noArrayIndexKey lint\ninterface KeyedToken {\n token: ThemedToken;\n key: string;\n}\ninterface KeyedLine {\n tokens: KeyedToken[];\n key: string;\n}\n\nconst addKeysToTokens = (lines: ThemedToken[][]): KeyedLine[] =>\n lines.map((line, lineIdx) => ({\n key: `line-${lineIdx}`,\n tokens: line.map((token, tokenIdx) => ({\n key: `line-${lineIdx}-${tokenIdx}`,\n token,\n })),\n }));\n\n// Token rendering component\nconst TokenSpan = ({ token }: { token: ThemedToken }) => (\n <span\n className=\"fk:dark:bg-(--shiki-dark-bg)! fk:dark:text-(--shiki-dark)!\"\n style={\n {\n backgroundColor: token.bgColor,\n color: token.color,\n fontStyle: isItalic(token.fontStyle) ? 'italic' : undefined,\n fontWeight: isBold(token.fontStyle) ? 'bold' : undefined,\n textDecoration: isUnderline(token.fontStyle) ? 'underline' : undefined,\n ...token.htmlStyle,\n } as CSSProperties\n }\n >\n {token.content}\n </span>\n);\n\n// Line number styles using CSS counters\nconst LINE_NUMBER_CLASSES = cn(\n 'fk:block',\n 'fk:before:content-[counter(line)]',\n 'fk:before:inline-block',\n 'fk:before:[counter-increment:line]',\n 'fk:before:w-8',\n 'fk:before:mr-4',\n 'fk:before:text-right',\n 'fk:before:text-muted-foreground/50',\n 'fk:before:font-mono',\n 'fk:before:select-none'\n);\n\n// Line rendering component\nconst LineSpan = ({ keyedLine, showLineNumbers }: { keyedLine: KeyedLine; showLineNumbers: boolean }) => (\n <span className={showLineNumbers ? LINE_NUMBER_CLASSES : 'fk:block'}>\n {keyedLine.tokens.length === 0\n ? '\\n'\n : keyedLine.tokens.map(({ token, key }) => <TokenSpan key={key} token={token} />)}\n </span>\n);\n\n// Types\ntype CodeBlockProps = HTMLAttributes<HTMLDivElement> & {\n code: string;\n language: BundledLanguage;\n showLineNumbers?: boolean;\n};\n\ninterface TokenizedCode {\n tokens: ThemedToken[][];\n fg: string;\n bg: string;\n}\n\ninterface CodeBlockContextType {\n code: string;\n}\n\n// Context\nconst CodeBlockContext = createContext<CodeBlockContextType>({\n code: '',\n});\n\n// Highlighter cache (singleton per language)\nconst highlighterCache = new Map<string, Promise<HighlighterGeneric<BundledLanguage, BundledTheme>>>();\n\n// Token cache\nconst tokensCache = new Map<string, TokenizedCode>();\n\n// Subscribers for async token updates\nconst subscribers = new Map<string, Set<(result: TokenizedCode) => void>>();\n\nconst getTokensCacheKey = (code: string, language: BundledLanguage) => {\n const start = code.slice(0, 100);\n const end = code.length > 100 ? code.slice(-100) : '';\n return `${language}:${code.length}:${start}:${end}`;\n};\n\nconst getHighlighter = (language: BundledLanguage): Promise<HighlighterGeneric<BundledLanguage, BundledTheme>> => {\n const cached = highlighterCache.get(language);\n if (cached) {\n return cached;\n }\n\n const highlighterPromise = createHighlighter({\n langs: [language],\n themes: ['github-light', 'github-dark'],\n });\n\n highlighterCache.set(language, highlighterPromise);\n return highlighterPromise;\n};\n\n// Create raw tokens for immediate display while highlighting loads\nconst createRawTokens = (code: string): TokenizedCode => ({\n bg: 'transparent',\n fg: 'inherit',\n tokens: code.split('\\n').map((line) =>\n line === ''\n ? []\n : [\n {\n color: 'inherit',\n content: line,\n } as ThemedToken,\n ]\n ),\n});\n\n// Synchronous highlight with callback for async results\nexport const highlightCode = (\n code: string,\n language: BundledLanguage,\n // oxlint-disable-next-line eslint-plugin-promise(prefer-await-to-callbacks)\n callback?: (result: TokenizedCode) => void\n): TokenizedCode | null => {\n const tokensCacheKey = getTokensCacheKey(code, language);\n\n // Return cached result if available\n const cached = tokensCache.get(tokensCacheKey);\n if (cached) {\n return cached;\n }\n\n // Subscribe callback if provided\n if (callback) {\n if (!subscribers.has(tokensCacheKey)) {\n subscribers.set(tokensCacheKey, new Set());\n }\n subscribers.get(tokensCacheKey)?.add(callback);\n }\n\n // Start highlighting in background - fire-and-forget async pattern\n getHighlighter(language)\n // oxlint-disable-next-line eslint-plugin-promise(prefer-await-to-then)\n .then((highlighter) => {\n const availableLangs = highlighter.getLoadedLanguages();\n const langToUse = availableLangs.includes(language) ? language : 'text';\n\n const result = highlighter.codeToTokens(code, {\n lang: langToUse,\n themes: {\n dark: 'github-dark',\n light: 'github-light',\n },\n });\n\n const tokenized: TokenizedCode = {\n bg: result.bg ?? 'transparent',\n fg: result.fg ?? 'inherit',\n tokens: result.tokens,\n };\n\n // Cache the result\n tokensCache.set(tokensCacheKey, tokenized);\n\n // Notify all subscribers\n const subs = subscribers.get(tokensCacheKey);\n if (subs) {\n for (const sub of subs) {\n sub(tokenized);\n }\n subscribers.delete(tokensCacheKey);\n }\n })\n // oxlint-disable-next-line eslint-plugin-promise(prefer-await-to-then), eslint-plugin-promise(prefer-await-to-callbacks)\n .catch((error) => {\n console.error('Failed to highlight code:', error);\n subscribers.delete(tokensCacheKey);\n });\n\n return null;\n};\n\nconst CodeBlockBody = memo(\n ({\n tokenized,\n showLineNumbers,\n className,\n }: {\n tokenized: TokenizedCode;\n showLineNumbers: boolean;\n className?: string;\n }) => {\n const preStyle = useMemo(\n () => ({\n backgroundColor: tokenized.bg,\n color: tokenized.fg,\n }),\n [tokenized.bg, tokenized.fg]\n );\n\n const keyedLines = useMemo(() => addKeysToTokens(tokenized.tokens), [tokenized.tokens]);\n\n return (\n <pre\n className={cn('fk:dark:bg-(--shiki-dark-bg)! fk:dark:text-(--shiki-dark)! fk:m-0 fk:p-4 fk:text-sm', className)}\n style={preStyle}\n >\n <code\n className={cn(\n 'fk:font-mono fk:text-sm',\n showLineNumbers && 'fk:[counter-increment:line_0] fk:[counter-reset:line]'\n )}\n >\n {keyedLines.map((keyedLine) => (\n <LineSpan key={keyedLine.key} keyedLine={keyedLine} showLineNumbers={showLineNumbers} />\n ))}\n </code>\n </pre>\n );\n },\n (prevProps, nextProps) =>\n prevProps.tokenized === nextProps.tokenized &&\n prevProps.showLineNumbers === nextProps.showLineNumbers &&\n prevProps.className === nextProps.className\n);\n\nCodeBlockBody.displayName = 'CodeBlockBody';\n\nexport const CodeBlockContainer = ({\n className,\n language,\n style,\n ...props\n}: HTMLAttributes<HTMLDivElement> & { language: string }) => (\n <div\n className={cn(\n 'fk:group fk:relative fk:w-full fk:overflow-hidden fk:rounded-md fk:border fk:bg-background fk:text-foreground fk:corner-squircle',\n className\n )}\n data-language={language}\n style={{\n containIntrinsicSize: 'auto 200px',\n contentVisibility: 'auto',\n ...style,\n }}\n {...props}\n />\n);\n\nexport const CodeBlockHeader = ({ children, className, ...props }: HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n 'fk:flex fk:items-center fk:justify-between fk:border-b fk:bg-muted/80 fk:px-3 fk:py-2 fk:text-muted-foreground fk:text-xs',\n className\n )}\n {...props}\n >\n {children}\n </div>\n);\n\nexport const CodeBlockTitle = ({ children, className, ...props }: HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('fk:flex fk:items-center fk:gap-2', className)} {...props}>\n {children}\n </div>\n);\n\nexport const CodeBlockFilename = ({ children, className, ...props }: HTMLAttributes<HTMLSpanElement>) => (\n <span className={cn('fk:font-mono', className)} {...props}>\n {children}\n </span>\n);\n\nexport const CodeBlockActions = ({ children, className, ...props }: HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('fk:-my-1 fk:-mr-1 fk:flex fk:items-center fk:gap-2', className)} {...props}>\n {children}\n </div>\n);\n\nexport const CodeBlockContent = ({\n code,\n language,\n showLineNumbers = false,\n}: {\n code: string;\n language: BundledLanguage;\n showLineNumbers?: boolean;\n}) => {\n // Memoized raw tokens for immediate display\n const rawTokens = useMemo(() => createRawTokens(code), [code]);\n\n // Synchronous cache lookup — avoids setState in effect for cached results\n const syncTokens = useMemo(() => highlightCode(code, language) ?? rawTokens, [code, language, rawTokens]);\n\n // Async highlighting result (populated after shiki loads)\n const [asyncTokens, setAsyncTokens] = useState<TokenizedCode | null>(null);\n const asyncKeyRef = useRef({ code, language });\n\n // Invalidate stale async tokens synchronously during render\n if (asyncKeyRef.current.code !== code || asyncKeyRef.current.language !== language) {\n asyncKeyRef.current = { code, language };\n setAsyncTokens(null);\n }\n\n useEffect(() => {\n let cancelled = false;\n\n highlightCode(code, language, (result) => {\n if (!cancelled) {\n setAsyncTokens(result);\n }\n });\n\n return () => {\n cancelled = true;\n };\n }, [code, language]);\n\n const tokenized = asyncTokens ?? syncTokens;\n\n return (\n <div className=\"fk:relative fk:overflow-auto\">\n <CodeBlockBody showLineNumbers={showLineNumbers} tokenized={tokenized} />\n </div>\n );\n};\n\nexport const CodeBlock = ({\n code,\n language,\n showLineNumbers = false,\n className,\n children,\n ...props\n}: CodeBlockProps) => {\n const contextValue = useMemo(() => ({ code }), [code]);\n\n return (\n <CodeBlockContext.Provider value={contextValue}>\n <CodeBlockContainer className={className} language={language} {...props}>\n {children}\n <CodeBlockContent code={code} language={language} showLineNumbers={showLineNumbers} />\n </CodeBlockContainer>\n </CodeBlockContext.Provider>\n );\n};\n\nexport type CodeBlockCopyButtonProps = ComponentProps<typeof Button> & {\n onCopy?: () => void;\n onError?: (error: Error) => void;\n timeout?: number;\n};\n\nexport const CodeBlockCopyButton = ({\n onCopy,\n onError,\n timeout = 2000,\n children,\n className,\n ...props\n}: CodeBlockCopyButtonProps) => {\n const [isCopied, setIsCopied] = useState(false);\n const timeoutRef = useRef<number>(0);\n const { code } = useContext(CodeBlockContext);\n\n const copyToClipboard = useCallback(async () => {\n if (typeof window === 'undefined' || !navigator?.clipboard?.writeText) {\n onError?.(new Error('Clipboard API not available'));\n return;\n }\n\n try {\n if (!isCopied) {\n await navigator.clipboard.writeText(code);\n setIsCopied(true);\n onCopy?.();\n timeoutRef.current = window.setTimeout(() => setIsCopied(false), timeout);\n }\n } catch (error) {\n onError?.(error as Error);\n }\n }, [code, onCopy, onError, timeout, isCopied]);\n\n useEffect(\n () => () => {\n window.clearTimeout(timeoutRef.current);\n },\n []\n );\n\n const Icon = isCopied ? CheckIcon : CopyIcon;\n\n return (\n <Button className={cn('fk:shrink-0', className)} onClick={copyToClipboard} size=\"icon\" variant=\"ghost\" {...props}>\n {children ?? <Icon size={14} />}\n </Button>\n );\n};\n\nexport type CodeBlockLanguageSelectorProps = ComponentProps<typeof Select>;\n\nexport const CodeBlockLanguageSelector = (props: CodeBlockLanguageSelectorProps) => <Select {...props} />;\n\nexport type CodeBlockLanguageSelectorTriggerProps = ComponentProps<typeof SelectTrigger>;\n\nexport const CodeBlockLanguageSelectorTrigger = ({ className, ...props }: CodeBlockLanguageSelectorTriggerProps) => (\n <SelectTrigger\n className={cn('fk:h-7 fk:border-none fk:bg-transparent fk:px-2 fk:text-xs fk:shadow-none', className)}\n size=\"sm\"\n {...props}\n />\n);\n\nexport type CodeBlockLanguageSelectorValueProps = ComponentProps<typeof SelectValue>;\n\nexport const CodeBlockLanguageSelectorValue = (props: CodeBlockLanguageSelectorValueProps) => (\n <SelectValue {...props} />\n);\n\nexport type CodeBlockLanguageSelectorContentProps = ComponentProps<typeof SelectContent>;\n\nexport const CodeBlockLanguageSelectorContent = ({\n align = 'end',\n ...props\n}: CodeBlockLanguageSelectorContentProps) => <SelectContent align={align} {...props} />;\n\nexport type CodeBlockLanguageSelectorItemProps = ComponentProps<typeof SelectItem>;\n\nexport const CodeBlockLanguageSelectorItem = (props: CodeBlockLanguageSelectorItemProps) => <SelectItem {...props} />;\n","'use client';\n\nimport { Button } from '../primitives/button';\nimport { cn } from '../lib/utils';\nimport type { UIMessage } from 'ai';\nimport { ArrowDownIcon, DownloadIcon } from 'lucide-react';\nimport type { ComponentProps } from 'react';\nimport { useCallback } from 'react';\nimport { StickToBottom, useStickToBottomContext } from 'use-stick-to-bottom';\n\nexport type ConversationProps = ComponentProps<typeof StickToBottom>;\n\nexport const Conversation = ({ className, ...props }: ConversationProps) => (\n <StickToBottom\n className={cn('fk:relative fk:flex-1 fk:overflow-y-hidden', className)}\n initial=\"smooth\"\n resize=\"smooth\"\n role=\"log\"\n {...props}\n />\n);\n\nexport type ConversationContentProps = ComponentProps<typeof StickToBottom.Content>;\n\nexport const ConversationContent = ({ className, ...props }: ConversationContentProps) => (\n <StickToBottom.Content className={cn('fk:flex fk:flex-col fk:gap-8 fk:p-4', className)} {...props} />\n);\n\nexport type ConversationEmptyStateProps = ComponentProps<'div'> & {\n title?: string;\n description?: string;\n icon?: React.ReactNode;\n};\n\nexport const ConversationEmptyState = ({\n className,\n title = 'No messages yet',\n description = 'Start a conversation to see messages here',\n icon,\n children,\n ...props\n}: ConversationEmptyStateProps) => (\n <div\n className={cn(\n 'fk:flex fk:size-full fk:flex-col fk:items-center fk:justify-center fk:gap-3 fk:p-8 fk:text-center',\n className\n )}\n {...props}\n >\n {children ?? (\n <>\n {icon && <div className=\"fk:text-muted-foreground\">{icon}</div>}\n <div className=\"fk:space-y-1\">\n <h3 className=\"fk:font-medium fk:text-sm\">{title}</h3>\n {description && <p className=\"fk:text-muted-foreground fk:text-sm\">{description}</p>}\n </div>\n </>\n )}\n </div>\n);\n\nexport type ConversationScrollButtonProps = ComponentProps<typeof Button>;\n\nexport const ConversationScrollButton = ({ className, ...props }: ConversationScrollButtonProps) => {\n const { isAtBottom, scrollToBottom } = useStickToBottomContext();\n\n const handleScrollToBottom = useCallback(() => {\n scrollToBottom();\n }, [scrollToBottom]);\n\n return (\n !isAtBottom && (\n <Button\n className={cn(\n 'fk:absolute fk:bottom-4 fk:left-[50%] fk:translate-x-[-50%] fk:rounded-full fk:dark:bg-background fk:dark:hover:bg-muted fk:corner-squircle',\n className\n )}\n onClick={handleScrollToBottom}\n size=\"icon\"\n type=\"button\"\n variant=\"outline\"\n {...props}\n >\n <ArrowDownIcon className=\"fk:size-4\" />\n </Button>\n )\n );\n};\n\nconst getMessageText = (message: UIMessage): string =>\n message.parts\n .filter((part) => part.type === 'text')\n .map((part) => part.text)\n .join('');\n\nexport type ConversationDownloadProps = Omit<ComponentProps<typeof Button>, 'onClick'> & {\n messages: UIMessage[];\n filename?: string;\n formatMessage?: (message: UIMessage, index: number) => string;\n};\n\nconst defaultFormatMessage = (message: UIMessage): string => {\n const roleLabel = message.role.charAt(0).toUpperCase() + message.role.slice(1);\n return `**${roleLabel}:** ${getMessageText(message)}`;\n};\n\nexport const messagesToMarkdown = (\n messages: UIMessage[],\n formatMessage: (message: UIMessage, index: number) => string = defaultFormatMessage\n): string => messages.map((msg, i) => formatMessage(msg, i)).join('\\n\\n');\n\nexport const ConversationDownload = ({\n messages,\n filename = 'conversation.md',\n formatMessage = defaultFormatMessage,\n className,\n children,\n ...props\n}: ConversationDownloadProps) => {\n const handleDownload = useCallback(() => {\n const markdown = messagesToMarkdown(messages, formatMessage);\n const blob = new Blob([markdown], { type: 'text/markdown' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n document.body.append(link);\n link.click();\n link.remove();\n URL.revokeObjectURL(url);\n }, [messages, filename, formatMessage]);\n\n return (\n <Button\n className={cn(\n 'fk:absolute fk:top-4 fk:right-4 fk:rounded-full fk:dark:bg-background fk:dark:hover:bg-muted fk:corner-squircle',\n className\n )}\n onClick={handleDownload}\n size=\"icon\"\n type=\"button\"\n variant=\"outline\"\n {...props}\n >\n {children ?? <DownloadIcon className=\"fk:size-4\" />}\n </Button>\n );\n};\n","'use client';\n\nimport { Button } from '../primitives/button';\nimport { ButtonGroup, ButtonGroupText } from '../primitives/button-group';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../primitives/tooltip';\nimport { cn } from '../lib/utils';\nimport { cjk } from '@streamdown/cjk';\nimport { code } from '@streamdown/code';\nimport { math } from '@streamdown/math';\nimport { mermaid } from '@streamdown/mermaid';\nimport type { UIMessage } from 'ai';\nimport { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react';\nimport type { ComponentProps, HTMLAttributes, ReactElement } from 'react';\nimport { createContext, memo, useCallback, useContext, useEffect, useMemo, useState } from 'react';\nimport { Streamdown } from 'streamdown';\n\nexport type MessageProps = HTMLAttributes<HTMLDivElement> & {\n from: UIMessage['role'];\n};\n\nexport const Message = ({ className, from, ...props }: MessageProps) => (\n <div\n className={cn(\n 'fk:group fk:flex fk:w-full fk:max-w-[95%] fk:flex-col fk:gap-2',\n from === 'user' ? 'fk:is-user fk:ml-auto fk:justify-end' : 'fk:is-assistant',\n className\n )}\n {...props}\n />\n);\n\nexport type MessageContentProps = HTMLAttributes<HTMLDivElement>;\n\nexport const MessageContent = ({ children, className, ...props }: MessageContentProps) => (\n <div\n className={cn(\n 'fk:is-user:dark fk:flex fk:w-fit fk:min-w-0 fk:max-w-full fk:flex-col fk:gap-2 fk:overflow-hidden fk:text-sm',\n 'fk:group-[.is-user]:ml-auto fk:group-[.is-user]:rounded-lg fk:group-[.is-user]:bg-secondary fk:group-[.is-user]:px-4 fk:group-[.is-user]:py-3 fk:group-[.is-user]:text-foreground',\n 'fk:group-[.is-assistant]:text-foreground',\n className\n )}\n {...props}\n >\n {children}\n </div>\n);\n\nexport type MessageActionsProps = ComponentProps<'div'>;\n\nexport const MessageActions = ({ className, children, ...props }: MessageActionsProps) => (\n <div className={cn('fk:flex fk:items-center fk:gap-1', className)} {...props}>\n {children}\n </div>\n);\n\nexport type MessageActionProps = ComponentProps<typeof Button> & {\n tooltip?: string;\n label?: string;\n};\n\nexport const MessageAction = ({\n tooltip,\n children,\n label,\n variant = 'ghost',\n size = 'icon-sm',\n ...props\n}: MessageActionProps) => {\n const button = (\n <Button size={size} type=\"button\" variant={variant} {...props}>\n {children}\n <span className=\"fk:sr-only\">{label || tooltip}</span>\n </Button>\n );\n\n if (tooltip) {\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent>\n <p>{tooltip}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n return button;\n};\n\ninterface MessageBranchContextType {\n currentBranch: number;\n totalBranches: number;\n goToPrevious: () => void;\n goToNext: () => void;\n branches: ReactElement[];\n setBranches: (branches: ReactElement[]) => void;\n}\n\nconst MessageBranchContext = createContext<MessageBranchContextType | null>(null);\n\nconst useMessageBranch = () => {\n const context = useContext(MessageBranchContext);\n\n if (!context) {\n throw new Error('MessageBranch components must be used within MessageBranch');\n }\n\n return context;\n};\n\nexport type MessageBranchProps = HTMLAttributes<HTMLDivElement> & {\n defaultBranch?: number;\n onBranchChange?: (branchIndex: number) => void;\n};\n\nexport const MessageBranch = ({ defaultBranch = 0, onBranchChange, className, ...props }: MessageBranchProps) => {\n const [currentBranch, setCurrentBranch] = useState(defaultBranch);\n const [branches, setBranches] = useState<ReactElement[]>([]);\n\n const handleBranchChange = useCallback(\n (newBranch: number) => {\n setCurrentBranch(newBranch);\n onBranchChange?.(newBranch);\n },\n [onBranchChange]\n );\n\n const goToPrevious = useCallback(() => {\n const newBranch = currentBranch > 0 ? currentBranch - 1 : branches.length - 1;\n handleBranchChange(newBranch);\n }, [currentBranch, branches.length, handleBranchChange]);\n\n const goToNext = useCallback(() => {\n const newBranch = currentBranch < branches.length - 1 ? currentBranch + 1 : 0;\n handleBranchChange(newBranch);\n }, [currentBranch, branches.length, handleBranchChange]);\n\n const contextValue = useMemo<MessageBranchContextType>(\n () => ({\n branches,\n currentBranch,\n goToNext,\n goToPrevious,\n setBranches,\n totalBranches: branches.length,\n }),\n [branches, currentBranch, goToNext, goToPrevious]\n );\n\n return (\n <MessageBranchContext.Provider value={contextValue}>\n <div className={cn('fk:grid fk:w-full fk:gap-2 fk:[&>div]:pb-0', className)} {...props} />\n </MessageBranchContext.Provider>\n );\n};\n\nexport type MessageBranchContentProps = HTMLAttributes<HTMLDivElement>;\n\nexport const MessageBranchContent = ({ children, ...props }: MessageBranchContentProps) => {\n const { currentBranch, setBranches, branches } = useMessageBranch();\n const childrenArray = useMemo(() => (Array.isArray(children) ? children : [children]), [children]);\n\n // Use useEffect to update branches when they change\n useEffect(() => {\n if (branches.length !== childrenArray.length) {\n setBranches(childrenArray);\n }\n }, [childrenArray, branches, setBranches]);\n\n return childrenArray.map((branch, index) => (\n <div\n className={cn(\n 'fk:grid fk:gap-2 fk:overflow-hidden fk:[&>div]:pb-0',\n index === currentBranch ? 'fk:block' : 'fk:hidden'\n )}\n key={branch.key}\n {...props}\n >\n {branch}\n </div>\n ));\n};\n\nexport type MessageBranchSelectorProps = ComponentProps<typeof ButtonGroup>;\n\nexport const MessageBranchSelector = ({ className, ...props }: MessageBranchSelectorProps) => {\n const { totalBranches } = useMessageBranch();\n\n // Don't render if there's only one branch\n if (totalBranches <= 1) {\n return null;\n }\n\n return (\n <ButtonGroup\n className={cn('fk:[&>*:not(:first-child)]:rounded-l-md fk:[&>*:not(:last-child)]:rounded-r-md', className)}\n orientation=\"horizontal\"\n {...props}\n />\n );\n};\n\nexport type MessageBranchPreviousProps = ComponentProps<typeof Button>;\n\nexport const MessageBranchPrevious = ({ children, ...props }: MessageBranchPreviousProps) => {\n const { goToPrevious, totalBranches } = useMessageBranch();\n\n return (\n <Button\n aria-label=\"Previous branch\"\n disabled={totalBranches <= 1}\n onClick={goToPrevious}\n size=\"icon-sm\"\n type=\"button\"\n variant=\"ghost\"\n {...props}\n >\n {children ?? <ChevronLeftIcon size={14} />}\n </Button>\n );\n};\n\nexport type MessageBranchNextProps = ComponentProps<typeof Button>;\n\nexport const MessageBranchNext = ({ children, ...props }: MessageBranchNextProps) => {\n const { goToNext, totalBranches } = useMessageBranch();\n\n return (\n <Button\n aria-label=\"Next branch\"\n disabled={totalBranches <= 1}\n onClick={goToNext}\n size=\"icon-sm\"\n type=\"button\"\n variant=\"ghost\"\n {...props}\n >\n {children ?? <ChevronRightIcon size={14} />}\n </Button>\n );\n};\n\nexport type MessageBranchPageProps = HTMLAttributes<HTMLSpanElement>;\n\nexport const MessageBranchPage = ({ className, ...props }: MessageBranchPageProps) => {\n const { currentBranch, totalBranches } = useMessageBranch();\n\n return (\n <ButtonGroupText\n className={cn('fk:border-none fk:bg-transparent fk:text-muted-foreground fk:shadow-none', className)}\n {...props}\n >\n {currentBranch + 1} of {totalBranches}\n </ButtonGroupText>\n );\n};\n\nexport type MessageResponseProps = ComponentProps<typeof Streamdown>;\n\nconst streamdownPlugins = { cjk, code, math, mermaid };\n\nexport const MessageResponse = memo(\n ({ className, ...props }: MessageResponseProps) => (\n <Streamdown\n className={cn('fk:size-full fk:[&>*:first-child]:mt-0 fk:[&>*:last-child]:mb-0', className)}\n plugins={streamdownPlugins}\n prefix=\"fk\"\n {...props}\n />\n ),\n (prevProps, nextProps) => prevProps.children === nextProps.children && nextProps.isAnimating === prevProps.isAnimating\n);\n\nMessageResponse.displayName = 'MessageResponse';\n\nexport type MessageToolbarProps = ComponentProps<'div'>;\n\nexport const MessageToolbar = ({ className, children, ...props }: MessageToolbarProps) => (\n <div className={cn('fk:mt-4 fk:flex fk:w-full fk:items-center fk:justify-between fk:gap-4', className)} {...props}>\n {children}\n </div>\n);\n","import {\n Command,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut,\n} from '../primitives/command';\nimport { Dialog, DialogContent, DialogTitle, DialogTrigger } from '../primitives/dialog';\nimport { cn } from '../lib/utils';\nimport type { ComponentProps, ReactNode } from 'react';\n\nexport type ModelSelectorProps = ComponentProps<typeof Dialog>;\n\nexport const ModelSelector = (props: ModelSelectorProps) => <Dialog {...props} />;\n\nexport type ModelSelectorTriggerProps = ComponentProps<typeof DialogTrigger>;\n\nexport const ModelSelectorTrigger = (props: ModelSelectorTriggerProps) => <DialogTrigger {...props} />;\n\nexport type ModelSelectorContentProps = ComponentProps<typeof DialogContent> & {\n title?: ReactNode;\n};\n\nexport const ModelSelectorContent = ({\n className,\n children,\n title = 'Model Selector',\n ...props\n}: ModelSelectorContentProps) => (\n <DialogContent\n aria-describedby={undefined}\n className={cn('fk:outline! fk:border-none! fk:p-0 fk:outline-border! fk:outline-solid!', className)}\n {...props}\n >\n <DialogTitle className=\"fk:sr-only\">{title}</DialogTitle>\n <Command className=\"fk:**:data-[slot=command-input-wrapper]:h-auto\">{children}</Command>\n </DialogContent>\n);\n\nexport type ModelSelectorDialogProps = ComponentProps<typeof CommandDialog>;\n\nexport const ModelSelectorDialog = (props: ModelSelectorDialogProps) => <CommandDialog {...props} />;\n\nexport type ModelSelectorInputProps = ComponentProps<typeof CommandInput>;\n\nexport const ModelSelectorInput = ({ className, ...props }: ModelSelectorInputProps) => (\n <CommandInput className={cn('fk:h-auto fk:py-3.5', className)} {...props} />\n);\n\nexport type ModelSelectorListProps = ComponentProps<typeof CommandList>;\n\nexport const ModelSelectorList = (props: ModelSelectorListProps) => <CommandList {...props} />;\n\nexport type ModelSelectorEmptyProps = ComponentProps<typeof CommandEmpty>;\n\nexport const ModelSelectorEmpty = (props: ModelSelectorEmptyProps) => <CommandEmpty {...props} />;\n\nexport type ModelSelectorGroupProps = ComponentProps<typeof CommandGroup>;\n\nexport const ModelSelectorGroup = (props: ModelSelectorGroupProps) => <CommandGroup {...props} />;\n\nexport type ModelSelectorItemProps = ComponentProps<typeof CommandItem>;\n\nexport const ModelSelectorItem = (props: ModelSelectorItemProps) => <CommandItem {...props} />;\n\nexport type ModelSelectorShortcutProps = ComponentProps<typeof CommandShortcut>;\n\nexport const ModelSelectorShortcut = (props: ModelSelectorShortcutProps) => <CommandShortcut {...props} />;\n\nexport type ModelSelectorSeparatorProps = ComponentProps<typeof CommandSeparator>;\n\nexport const ModelSelectorSeparator = (props: ModelSelectorSeparatorProps) => <CommandSeparator {...props} />;\n\nexport type ModelSelectorLogoProps = Omit<ComponentProps<'img'>, 'src' | 'alt'> & {\n provider:\n | 'moonshotai-cn'\n | 'lucidquery'\n | 'moonshotai'\n | 'zai-coding-plan'\n | 'alibaba'\n | 'xai'\n | 'vultr'\n | 'nvidia'\n | 'upstage'\n | 'groq'\n | 'github-copilot'\n | 'mistral'\n | 'vercel'\n | 'nebius'\n | 'deepseek'\n | 'alibaba-cn'\n | 'google-vertex-anthropic'\n | 'venice'\n | 'chutes'\n | 'cortecs'\n | 'github-models'\n | 'togetherai'\n | 'azure'\n | 'baseten'\n | 'huggingface'\n | 'opencode'\n | 'fastrouter'\n | 'google'\n | 'google-vertex'\n | 'cloudflare-workers-ai'\n | 'inception'\n | 'wandb'\n | 'openai'\n | 'zhipuai-coding-plan'\n | 'perplexity'\n | 'openrouter'\n | 'zenmux'\n | 'v0'\n | 'iflowcn'\n | 'synthetic'\n | 'deepinfra'\n | 'zhipuai'\n | 'submodel'\n | 'zai'\n | 'inference'\n | 'requesty'\n | 'morph'\n | 'lmstudio'\n | 'anthropic'\n | 'aihubmix'\n | 'fireworks-ai'\n | 'modelscope'\n | 'llama'\n | 'scaleway'\n | 'amazon-bedrock'\n | 'cerebras'\n // oxlint-disable-next-line typescript-eslint(ban-types) -- intentional pattern for autocomplete-friendly string union\n | (string & {});\n};\n\nexport const ModelSelectorLogo = ({ provider, className, ...props }: ModelSelectorLogoProps) => (\n <img\n {...props}\n alt={`${provider} logo`}\n className={cn('fk:size-3 fk:dark:invert', className)}\n height={12}\n src={`https://models.dev/logos/${provider}.svg`}\n width={12}\n />\n);\n\nexport type ModelSelectorLogoGroupProps = ComponentProps<'div'>;\n\nexport const ModelSelectorLogoGroup = ({ className, ...props }: ModelSelectorLogoGroupProps) => (\n <div\n className={cn(\n 'fk:flex fk:shrink-0 fk:items-center fk:-space-x-1 fk:[&>img]:rounded-full fk:[&>img]:bg-background fk:[&>img]:p-px fk:[&>img]:ring-1 fk:dark:[&>img]:bg-foreground',\n className\n )}\n {...props}\n />\n);\n\nexport type ModelSelectorNameProps = ComponentProps<'span'>;\n\nexport const ModelSelectorName = ({ className, ...props }: ModelSelectorNameProps) => (\n <span className={cn('fk:flex-1 fk:truncate fk:text-left', className)} {...props} />\n);\n","'use client';\n\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n} from '../primitives/command';\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '../primitives/dropdown-menu';\nimport { HoverCard, HoverCardContent, HoverCardTrigger } from '../primitives/hover-card';\nimport { InputGroup, InputGroupAddon, InputGroupButton, InputGroupTextarea } from '../primitives/input-group';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../primitives/select';\nimport { Spinner } from '../primitives/spinner';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../primitives/tooltip';\nimport { cn } from '../lib/utils';\nimport type { ChatStatus, FileUIPart, SourceDocumentUIPart } from 'ai';\nimport { CornerDownLeftIcon, ImageIcon, Monitor, PlusIcon, SquareIcon, XIcon } from 'lucide-react';\nimport { nanoid } from 'nanoid';\nimport type {\n ChangeEvent,\n ChangeEventHandler,\n ClipboardEventHandler,\n ComponentProps,\n FormEvent,\n FormEventHandler,\n HTMLAttributes,\n KeyboardEventHandler,\n PropsWithChildren,\n ReactNode,\n RefObject,\n} from 'react';\nimport { Children, createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nconst convertBlobUrlToDataUrl = async (url: string): Promise<string | null> => {\n try {\n const response = await fetch(url);\n const blob = await response.blob();\n // FileReader uses callback-based API, wrapping in Promise is necessary\n // oxlint-disable-next-line eslint-plugin-promise(avoid-new)\n return new Promise((resolve) => {\n const reader = new FileReader();\n // oxlint-disable-next-line eslint-plugin-unicorn(prefer-add-event-listener)\n reader.onloadend = () => resolve(reader.result as string);\n // oxlint-disable-next-line eslint-plugin-unicorn(prefer-add-event-listener)\n reader.onerror = () => resolve(null);\n reader.readAsDataURL(blob);\n });\n } catch {\n return null;\n }\n};\n\nconst captureScreenshot = async (): Promise<File | null> => {\n if (typeof navigator === 'undefined' || !navigator.mediaDevices?.getDisplayMedia) {\n return null;\n }\n\n let stream: MediaStream | null = null;\n const video = document.createElement('video');\n video.muted = true;\n video.playsInline = true;\n\n try {\n stream = await navigator.mediaDevices.getDisplayMedia({\n audio: false,\n video: true,\n });\n\n video.srcObject = stream;\n\n // Video element uses callback-based API, wrapping in Promise is necessary\n // oxlint-disable-next-line eslint-plugin-promise(avoid-new)\n await new Promise<void>((resolve, reject) => {\n // oxlint-disable-next-line eslint-plugin-unicorn(prefer-add-event-listener)\n video.onloadedmetadata = () => resolve();\n // oxlint-disable-next-line eslint-plugin-unicorn(prefer-add-event-listener)\n video.onerror = () => reject(new Error('Failed to load screen stream'));\n });\n\n await video.play();\n\n const width = video.videoWidth;\n const height = video.videoHeight;\n if (!width || !height) {\n return null;\n }\n\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n const context = canvas.getContext('2d');\n if (!context) {\n return null;\n }\n\n context.drawImage(video, 0, 0, width, height);\n // canvas.toBlob uses callback-based API, wrapping in Promise is necessary\n // oxlint-disable-next-line eslint-plugin-promise(avoid-new)\n const blob = await new Promise<Blob | null>((resolve) => {\n canvas.toBlob(resolve, 'image/png');\n });\n if (!blob) {\n return null;\n }\n\n const timestamp = new Date().toISOString().replaceAll(/[:.]/g, '-').replace('T', '_').replace('Z', '');\n\n return new File([blob], `screenshot-${timestamp}.png`, {\n lastModified: Date.now(),\n type: 'image/png',\n });\n } finally {\n if (stream) {\n for (const track of stream.getTracks()) {\n track.stop();\n }\n }\n video.pause();\n video.srcObject = null;\n }\n};\n\n// ============================================================================\n// Provider Context & Types\n// ============================================================================\n\nexport interface AttachmentsContext {\n files: (FileUIPart & { id: string })[];\n add: (files: File[] | FileList) => void;\n remove: (id: string) => void;\n clear: () => void;\n openFileDialog: () => void;\n fileInputRef: RefObject<HTMLInputElement | null>;\n}\n\nexport interface TextInputContext {\n value: string;\n setInput: (v: string) => void;\n clear: () => void;\n}\n\nexport interface PromptInputControllerProps {\n textInput: TextInputContext;\n attachments: AttachmentsContext;\n /** INTERNAL: Allows PromptInput to register its file textInput + \"open\" callback */\n __registerFileInput: (ref: RefObject<HTMLInputElement | null>, open: () => void) => void;\n}\n\nconst PromptInputController = createContext<PromptInputControllerProps | null>(null);\nconst ProviderAttachmentsContext = createContext<AttachmentsContext | null>(null);\n\nexport const usePromptInputController = () => {\n const ctx = useContext(PromptInputController);\n if (!ctx) {\n throw new Error('Wrap your component inside <PromptInputProvider> to use usePromptInputController().');\n }\n return ctx;\n};\n\n// Optional variants (do NOT throw). Useful for dual-mode components.\nconst useOptionalPromptInputController = () => useContext(PromptInputController);\n\nexport const useProviderAttachments = () => {\n const ctx = useContext(ProviderAttachmentsContext);\n if (!ctx) {\n throw new Error('Wrap your component inside <PromptInputProvider> to use useProviderAttachments().');\n }\n return ctx;\n};\n\nconst useOptionalProviderAttachments = () => useContext(ProviderAttachmentsContext);\n\nexport type PromptInputProviderProps = PropsWithChildren<{\n initialInput?: string;\n}>;\n\n/**\n * Optional global provider that lifts PromptInput state outside of PromptInput.\n * If you don't use it, PromptInput stays fully self-managed.\n */\nexport const PromptInputProvider = ({ initialInput: initialTextInput = '', children }: PromptInputProviderProps) => {\n // ----- textInput state\n const [textInput, setTextInput] = useState(initialTextInput);\n const clearInput = useCallback(() => setTextInput(''), []);\n\n // ----- attachments state (global when wrapped)\n const [attachmentFiles, setAttachmentFiles] = useState<(FileUIPart & { id: string })[]>([]);\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n // oxlint-disable-next-line eslint(no-empty-function)\n const openRef = useRef<() => void>(() => {});\n\n const add = useCallback((files: File[] | FileList) => {\n const incoming = Array.from(files);\n\n if (incoming.length === 0) {\n return;\n }\n\n setAttachmentFiles((prev) => [\n ...prev,\n ...incoming.map((file) => ({\n filename: file.name,\n id: nanoid(),\n mediaType: file.type,\n type: 'file' as const,\n url: URL.createObjectURL(file),\n })),\n ]);\n }, []);\n\n const remove = useCallback((id: string) => {\n setAttachmentFiles((prev) => {\n const found = prev.find((f) => f.id === id);\n if (found?.url) {\n URL.revokeObjectURL(found.url);\n }\n return prev.filter((f) => f.id !== id);\n });\n }, []);\n\n const clear = useCallback(() => {\n setAttachmentFiles((prev) => {\n for (const f of prev) {\n if (f.url) {\n URL.revokeObjectURL(f.url);\n }\n }\n return [];\n });\n }, []);\n\n // Keep a ref to attachments for cleanup on unmount (avoids stale closure)\n const attachmentsRef = useRef(attachmentFiles);\n\n useEffect(() => {\n attachmentsRef.current = attachmentFiles;\n }, [attachmentFiles]);\n\n // Cleanup blob URLs on unmount to prevent memory leaks\n useEffect(\n () => () => {\n for (const f of attachmentsRef.current) {\n if (f.url) {\n URL.revokeObjectURL(f.url);\n }\n }\n },\n []\n );\n\n const openFileDialog = useCallback(() => {\n openRef.current?.();\n }, []);\n\n const attachments = useMemo<AttachmentsContext>(\n () => ({\n add,\n clear,\n fileInputRef,\n files: attachmentFiles,\n openFileDialog,\n remove,\n }),\n [attachmentFiles, add, remove, clear, openFileDialog]\n );\n\n const __registerFileInput = useCallback((ref: RefObject<HTMLInputElement | null>, open: () => void) => {\n fileInputRef.current = ref.current;\n openRef.current = open;\n }, []);\n\n const controller = useMemo<PromptInputControllerProps>(\n () => ({\n __registerFileInput,\n attachments,\n textInput: {\n clear: clearInput,\n setInput: setTextInput,\n value: textInput,\n },\n }),\n [textInput, clearInput, attachments, __registerFileInput]\n );\n\n return (\n <PromptInputController.Provider value={controller}>\n <ProviderAttachmentsContext.Provider value={attachments}>{children}</ProviderAttachmentsContext.Provider>\n </PromptInputController.Provider>\n );\n};\n\n// ============================================================================\n// Component Context & Hooks\n// ============================================================================\n\nconst LocalAttachmentsContext = createContext<AttachmentsContext | null>(null);\n\nexport const usePromptInputAttachments = () => {\n // Prefer local context (inside PromptInput) as it has validation, fall back to provider\n const provider = useOptionalProviderAttachments();\n const local = useContext(LocalAttachmentsContext);\n const context = local ?? provider;\n if (!context) {\n throw new Error('usePromptInputAttachments must be used within a PromptInput or PromptInputProvider');\n }\n return context;\n};\n\n// ============================================================================\n// Referenced Sources (Local to PromptInput)\n// ============================================================================\n\nexport interface ReferencedSourcesContext {\n sources: (SourceDocumentUIPart & { id: string })[];\n add: (sources: SourceDocumentUIPart[] | SourceDocumentUIPart) => void;\n remove: (id: string) => void;\n clear: () => void;\n}\n\nexport const LocalReferencedSourcesContext = createContext<ReferencedSourcesContext | null>(null);\n\nexport const usePromptInputReferencedSources = () => {\n const ctx = useContext(LocalReferencedSourcesContext);\n if (!ctx) {\n throw new Error('usePromptInputReferencedSources must be used within a LocalReferencedSourcesContext.Provider');\n }\n return ctx;\n};\n\nexport type PromptInputActionAddAttachmentsProps = ComponentProps<typeof DropdownMenuItem> & {\n label?: string;\n};\n\nexport const PromptInputActionAddAttachments = ({\n label = 'Add photos or files',\n onSelect,\n ...props\n}: PromptInputActionAddAttachmentsProps) => {\n const attachments = usePromptInputAttachments();\n\n const handleSelect = useCallback(\n (event: Event) => {\n onSelect?.(event);\n if (event.defaultPrevented) {\n return;\n }\n\n // Not calling preventDefault lets the menu close; the file dialog still\n // opens because input.click() runs within the same user gesture.\n attachments.openFileDialog();\n },\n [attachments, onSelect]\n );\n\n return (\n <DropdownMenuItem {...props} onSelect={handleSelect}>\n <ImageIcon className=\"fk:mr-2 fk:size-4\" /> {label}\n </DropdownMenuItem>\n );\n};\n\nexport type PromptInputActionAddScreenshotProps = ComponentProps<typeof DropdownMenuItem> & {\n label?: string;\n};\n\nexport const PromptInputActionAddScreenshot = ({\n label = 'Take screenshot',\n onSelect,\n ...props\n}: PromptInputActionAddScreenshotProps) => {\n const attachments = usePromptInputAttachments();\n\n const handleSelect = useCallback(\n async (event: Event) => {\n onSelect?.(event);\n if (event.defaultPrevented) {\n return;\n }\n\n try {\n const screenshot = await captureScreenshot();\n if (screenshot) {\n attachments.add([screenshot]);\n }\n } catch (error) {\n if (error instanceof DOMException && (error.name === 'NotAllowedError' || error.name === 'AbortError')) {\n return;\n }\n throw error;\n }\n },\n [onSelect, attachments]\n );\n\n return (\n <DropdownMenuItem {...props} onSelect={handleSelect}>\n <Monitor className=\"fk:mr-2 fk:size-4\" />\n {label}\n </DropdownMenuItem>\n );\n};\n\nexport interface PromptInputMessage {\n text: string;\n files: FileUIPart[];\n}\n\nexport type PromptInputProps = Omit<HTMLAttributes<HTMLFormElement>, 'onSubmit' | 'onError'> & {\n // e.g., \"image/*\" or leave undefined for any\n accept?: string;\n multiple?: boolean;\n // When true, accepts drops anywhere on document. Default false (opt-in).\n globalDrop?: boolean;\n // Render a hidden input with given name and keep it in sync for native form posts. Default false.\n syncHiddenInput?: boolean;\n // Minimal constraints\n maxFiles?: number;\n // bytes\n maxFileSize?: number;\n onError?: (err: { code: 'max_files' | 'max_file_size' | 'accept'; message: string }) => void;\n onSubmit: (message: PromptInputMessage, event: FormEvent<HTMLFormElement>) => void | Promise<void>;\n};\n\nexport const PromptInput = ({\n className,\n accept,\n multiple,\n globalDrop,\n syncHiddenInput,\n maxFiles,\n maxFileSize,\n onError,\n onSubmit,\n children,\n ...props\n}: PromptInputProps) => {\n // Try to use a provider controller if present\n const controller = useOptionalPromptInputController();\n const usingProvider = !!controller;\n\n // Refs\n const inputRef = useRef<HTMLInputElement | null>(null);\n const formRef = useRef<HTMLFormElement | null>(null);\n\n // ----- Local attachments (only used when no provider)\n const [items, setItems] = useState<(FileUIPart & { id: string })[]>([]);\n const files = usingProvider ? controller.attachments.files : items;\n\n // ----- Local referenced sources (always local to PromptInput)\n const [referencedSources, setReferencedSources] = useState<(SourceDocumentUIPart & { id: string })[]>([]);\n\n // Keep a ref to files for cleanup on unmount (avoids stale closure)\n const filesRef = useRef(files);\n\n useEffect(() => {\n filesRef.current = files;\n }, [files]);\n\n const openFileDialogLocal = useCallback(() => {\n inputRef.current?.click();\n }, []);\n\n const matchesAccept = useCallback(\n (f: File) => {\n if (!accept || accept.trim() === '') {\n return true;\n }\n\n const patterns = accept\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n\n return patterns.some((pattern) => {\n if (pattern.startsWith('.')) {\n // e.g: .csv — match on the filename like the native accept attribute,\n // since browsers report inconsistent media types for many extensions\n return f.name.toLowerCase().endsWith(pattern.toLowerCase());\n }\n if (pattern.endsWith('/*')) {\n // e.g: image/* -> image/\n const prefix = pattern.slice(0, -1);\n return f.type.startsWith(prefix);\n }\n return f.type === pattern;\n });\n },\n [accept]\n );\n\n const addLocal = useCallback(\n (fileList: File[] | FileList) => {\n const incoming = Array.from(fileList);\n const accepted = incoming.filter((f) => matchesAccept(f));\n if (incoming.length && accepted.length === 0) {\n onError?.({\n code: 'accept',\n message: 'No files match the accepted types.',\n });\n return;\n }\n const withinSize = (f: File) => (maxFileSize ? f.size <= maxFileSize : true);\n const sized = accepted.filter(withinSize);\n if (accepted.length > 0 && sized.length === 0) {\n onError?.({\n code: 'max_file_size',\n message: 'All files exceed the maximum size.',\n });\n return;\n }\n\n setItems((prev) => {\n const capacity = typeof maxFiles === 'number' ? Math.max(0, maxFiles - prev.length) : undefined;\n const capped = typeof capacity === 'number' ? sized.slice(0, capacity) : sized;\n if (typeof capacity === 'number' && sized.length > capacity) {\n onError?.({\n code: 'max_files',\n message: 'Too many files. Some were not added.',\n });\n }\n const next: (FileUIPart & { id: string })[] = [];\n for (const file of capped) {\n next.push({\n filename: file.name,\n id: nanoid(),\n mediaType: file.type,\n type: 'file',\n url: URL.createObjectURL(file),\n });\n }\n return [...prev, ...next];\n });\n },\n [matchesAccept, maxFiles, maxFileSize, onError]\n );\n\n const removeLocal = useCallback(\n (id: string) =>\n setItems((prev) => {\n const found = prev.find((file) => file.id === id);\n if (found?.url) {\n URL.revokeObjectURL(found.url);\n }\n return prev.filter((file) => file.id !== id);\n }),\n []\n );\n\n // Wrapper that validates files before calling provider's add\n const addWithProviderValidation = useCallback(\n (fileList: File[] | FileList) => {\n const incoming = Array.from(fileList);\n const accepted = incoming.filter((f) => matchesAccept(f));\n if (incoming.length && accepted.length === 0) {\n onError?.({\n code: 'accept',\n message: 'No files match the accepted types.',\n });\n return;\n }\n const withinSize = (f: File) => (maxFileSize ? f.size <= maxFileSize : true);\n const sized = accepted.filter(withinSize);\n if (accepted.length > 0 && sized.length === 0) {\n onError?.({\n code: 'max_file_size',\n message: 'All files exceed the maximum size.',\n });\n return;\n }\n\n const currentCount = files.length;\n const capacity = typeof maxFiles === 'number' ? Math.max(0, maxFiles - currentCount) : undefined;\n const capped = typeof capacity === 'number' ? sized.slice(0, capacity) : sized;\n if (typeof capacity === 'number' && sized.length > capacity) {\n onError?.({\n code: 'max_files',\n message: 'Too many files. Some were not added.',\n });\n }\n\n if (capped.length > 0) {\n controller?.attachments.add(capped);\n }\n },\n [matchesAccept, maxFileSize, maxFiles, onError, files.length, controller]\n );\n\n const clearAttachments = useCallback(\n () =>\n usingProvider\n ? controller?.attachments.clear()\n : setItems((prev) => {\n for (const file of prev) {\n if (file.url) {\n URL.revokeObjectURL(file.url);\n }\n }\n return [];\n }),\n [usingProvider, controller]\n );\n\n const clearReferencedSources = useCallback(() => setReferencedSources([]), []);\n\n const add = usingProvider ? addWithProviderValidation : addLocal;\n const remove = usingProvider ? controller.attachments.remove : removeLocal;\n const openFileDialog = usingProvider ? controller.attachments.openFileDialog : openFileDialogLocal;\n\n const clear = useCallback(() => {\n clearAttachments();\n clearReferencedSources();\n }, [clearAttachments, clearReferencedSources]);\n\n // Let provider know about our hidden file input so external menus can call openFileDialog()\n useEffect(() => {\n if (!usingProvider) {\n return;\n }\n controller.__registerFileInput(inputRef, () => inputRef.current?.click());\n }, [usingProvider, controller]);\n\n // Note: File input cannot be programmatically set for security reasons\n // The syncHiddenInput prop is no longer functional\n useEffect(() => {\n if (syncHiddenInput && inputRef.current && files.length === 0) {\n inputRef.current.value = '';\n }\n }, [files, syncHiddenInput]);\n\n // Attach drop handlers on nearest form and document (opt-in)\n useEffect(() => {\n const form = formRef.current;\n if (!form) {\n return;\n }\n if (globalDrop) {\n // when global drop is on, let the document-level handler own drops\n return;\n }\n\n const onDragOver = (e: DragEvent) => {\n if (e.dataTransfer?.types?.includes('Files')) {\n e.preventDefault();\n }\n };\n const onDrop = (e: DragEvent) => {\n if (e.dataTransfer?.types?.includes('Files')) {\n e.preventDefault();\n }\n if (e.dataTransfer?.files && e.dataTransfer.files.length > 0) {\n add(e.dataTransfer.files);\n }\n };\n form.addEventListener('dragover', onDragOver);\n form.addEventListener('drop', onDrop);\n return () => {\n form.removeEventListener('dragover', onDragOver);\n form.removeEventListener('drop', onDrop);\n };\n }, [add, globalDrop]);\n\n useEffect(() => {\n if (!globalDrop) {\n return;\n }\n\n const onDragOver = (e: DragEvent) => {\n if (e.dataTransfer?.types?.includes('Files')) {\n e.preventDefault();\n }\n };\n const onDrop = (e: DragEvent) => {\n if (e.dataTransfer?.types?.includes('Files')) {\n e.preventDefault();\n }\n if (e.dataTransfer?.files && e.dataTransfer.files.length > 0) {\n add(e.dataTransfer.files);\n }\n };\n document.addEventListener('dragover', onDragOver);\n document.addEventListener('drop', onDrop);\n return () => {\n document.removeEventListener('dragover', onDragOver);\n document.removeEventListener('drop', onDrop);\n };\n }, [add, globalDrop]);\n\n useEffect(\n () => () => {\n if (!usingProvider) {\n for (const f of filesRef.current) {\n if (f.url) {\n URL.revokeObjectURL(f.url);\n }\n }\n }\n },\n [usingProvider]\n );\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = useCallback(\n (event) => {\n if (event.currentTarget.files) {\n add(event.currentTarget.files);\n }\n // Reset input value to allow selecting files that were previously removed\n event.currentTarget.value = '';\n },\n [add]\n );\n\n const attachmentsCtx = useMemo<AttachmentsContext>(\n () => ({\n add,\n clear: clearAttachments,\n fileInputRef: inputRef,\n files: files.map((item) => ({ ...item, id: item.id })),\n openFileDialog,\n remove,\n }),\n [files, add, remove, clearAttachments, openFileDialog]\n );\n\n const refsCtx = useMemo<ReferencedSourcesContext>(\n () => ({\n add: (incoming: SourceDocumentUIPart[] | SourceDocumentUIPart) => {\n const array = Array.isArray(incoming) ? incoming : [incoming];\n setReferencedSources((prev) => [...prev, ...array.map((s) => ({ ...s, id: nanoid() }))]);\n },\n clear: clearReferencedSources,\n remove: (id: string) => {\n setReferencedSources((prev) => prev.filter((s) => s.id !== id));\n },\n sources: referencedSources,\n }),\n [referencedSources, clearReferencedSources]\n );\n\n const handleSubmit: FormEventHandler<HTMLFormElement> = useCallback(\n async (event) => {\n event.preventDefault();\n\n const form = event.currentTarget;\n const text = usingProvider\n ? controller.textInput.value\n : (() => {\n const formData = new FormData(form);\n return (formData.get('message') as string) || '';\n })();\n\n // Reset form immediately after capturing text to avoid race condition\n // where user input during async blob conversion would be lost\n if (!usingProvider) {\n form.reset();\n }\n\n try {\n // Convert blob URLs to data URLs asynchronously\n const convertedFiles: FileUIPart[] = await Promise.all(\n files.map(async ({ id: _id, ...item }) => {\n if (item.url?.startsWith('blob:')) {\n const dataUrl = await convertBlobUrlToDataUrl(item.url);\n // If conversion failed, keep the original blob URL\n return {\n ...item,\n url: dataUrl ?? item.url,\n };\n }\n return item;\n })\n );\n\n const result = onSubmit({ files: convertedFiles, text }, event);\n\n // Handle both sync and async onSubmit\n if (result instanceof Promise) {\n try {\n await result;\n clear();\n if (usingProvider) {\n controller.textInput.clear();\n }\n } catch {\n // Don't clear on error - user may want to retry\n }\n } else {\n // Sync function completed without throwing, clear inputs\n clear();\n if (usingProvider) {\n controller.textInput.clear();\n }\n }\n } catch {\n // Don't clear on error - user may want to retry\n }\n },\n [usingProvider, controller, files, onSubmit, clear]\n );\n\n // Render with or without local provider\n const inner = (\n <>\n <input\n accept={accept}\n aria-label=\"Upload files\"\n className=\"fk:hidden\"\n multiple={multiple}\n onChange={handleChange}\n ref={inputRef}\n title=\"Upload files\"\n type=\"file\"\n />\n <form className={cn('fk:w-full', className)} onSubmit={handleSubmit} ref={formRef} {...props}>\n <InputGroup className=\"fk:overflow-hidden\">{children}</InputGroup>\n </form>\n </>\n );\n\n const withReferencedSources = (\n <LocalReferencedSourcesContext.Provider value={refsCtx}>{inner}</LocalReferencedSourcesContext.Provider>\n );\n\n // Always provide LocalAttachmentsContext so children get validated add function\n return (\n <LocalAttachmentsContext.Provider value={attachmentsCtx}>{withReferencedSources}</LocalAttachmentsContext.Provider>\n );\n};\n\nexport type PromptInputBodyProps = HTMLAttributes<HTMLDivElement>;\n\nexport const PromptInputBody = ({ className, ...props }: PromptInputBodyProps) => (\n <div className={cn('fk:contents', className)} {...props} />\n);\n\nexport type PromptInputTextareaProps = ComponentProps<typeof InputGroupTextarea>;\n\nexport const PromptInputTextarea = ({\n onChange,\n onKeyDown,\n className,\n placeholder = 'What would you like to know?',\n ...props\n}: PromptInputTextareaProps) => {\n const controller = useOptionalPromptInputController();\n const attachments = usePromptInputAttachments();\n const [isComposing, setIsComposing] = useState(false);\n\n const handleKeyDown: KeyboardEventHandler<HTMLTextAreaElement> = useCallback(\n (e) => {\n // Call the external onKeyDown handler first\n onKeyDown?.(e);\n\n // If the external handler prevented default, don't run internal logic\n if (e.defaultPrevented) {\n return;\n }\n\n if (e.key === 'Enter') {\n if (isComposing || e.nativeEvent.isComposing) {\n return;\n }\n if (e.shiftKey) {\n return;\n }\n e.preventDefault();\n\n // Check if the submit button is disabled before submitting\n const { form } = e.currentTarget;\n const submitButton = form?.querySelector('button[type=\"submit\"]') as HTMLButtonElement | null;\n if (submitButton?.disabled) {\n return;\n }\n\n form?.requestSubmit();\n }\n\n // Remove last attachment when Backspace is pressed and textarea is empty\n if (e.key === 'Backspace' && e.currentTarget.value === '' && attachments.files.length > 0) {\n e.preventDefault();\n const lastAttachment = attachments.files[attachments.files.length - 1];\n\n if (lastAttachment) {\n attachments.remove(lastAttachment.id);\n }\n }\n },\n [onKeyDown, isComposing, attachments]\n );\n\n const handlePaste: ClipboardEventHandler<HTMLTextAreaElement> = useCallback(\n (event) => {\n const items = event.clipboardData?.items;\n\n if (!items) {\n return;\n }\n\n const files: File[] = [];\n\n for (const item of Array.from(items)) {\n if (item.kind === 'file') {\n const file = item.getAsFile();\n\n if (file) {\n files.push(file);\n }\n }\n }\n\n if (files.length > 0) {\n event.preventDefault();\n attachments.add(files);\n }\n },\n [attachments]\n );\n\n const handleCompositionEnd = useCallback(() => setIsComposing(false), []);\n const handleCompositionStart = useCallback(() => setIsComposing(true), []);\n\n const controlledProps = controller\n ? {\n onChange: (e: ChangeEvent<HTMLTextAreaElement>) => {\n controller.textInput.setInput(e.currentTarget.value);\n onChange?.(e);\n },\n value: controller.textInput.value,\n }\n : {\n onChange,\n };\n\n return (\n <InputGroupTextarea\n className={cn('fk:field-sizing-content fk:max-h-48 fk:min-h-16', className)}\n name=\"message\"\n onCompositionEnd={handleCompositionEnd}\n onCompositionStart={handleCompositionStart}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n placeholder={placeholder}\n {...props}\n {...controlledProps}\n />\n );\n};\n\nexport type PromptInputHeaderProps = Omit<ComponentProps<typeof InputGroupAddon>, 'align'>;\n\nexport const PromptInputHeader = ({ className, ...props }: PromptInputHeaderProps) => (\n <InputGroupAddon align=\"block-end\" className={cn('fk:order-first fk:flex-wrap fk:gap-1', className)} {...props} />\n);\n\nexport type PromptInputFooterProps = Omit<ComponentProps<typeof InputGroupAddon>, 'align'>;\n\nexport const PromptInputFooter = ({ className, ...props }: PromptInputFooterProps) => (\n <InputGroupAddon align=\"block-end\" className={cn('fk:justify-between fk:gap-1', className)} {...props} />\n);\n\nexport type PromptInputToolsProps = HTMLAttributes<HTMLDivElement>;\n\nexport const PromptInputTools = ({ className, ...props }: PromptInputToolsProps) => (\n <div className={cn('fk:flex fk:min-w-0 fk:items-center fk:gap-1', className)} {...props} />\n);\n\nexport type PromptInputButtonTooltip =\n | string\n | {\n content: ReactNode;\n shortcut?: string;\n side?: ComponentProps<typeof TooltipContent>['side'];\n };\n\nexport type PromptInputButtonProps = ComponentProps<typeof InputGroupButton> & {\n tooltip?: PromptInputButtonTooltip;\n};\n\nexport const PromptInputButton = ({\n variant = 'ghost',\n className,\n size,\n tooltip,\n ...props\n}: PromptInputButtonProps) => {\n const newSize = size ?? (Children.count(props.children) > 1 ? 'sm' : 'icon-sm');\n\n const button = (\n <InputGroupButton className={cn(className)} size={newSize} type=\"button\" variant={variant} {...props} />\n );\n\n if (!tooltip) {\n return button;\n }\n\n const tooltipContent = typeof tooltip === 'string' ? tooltip : tooltip.content;\n const shortcut = typeof tooltip === 'string' ? undefined : tooltip.shortcut;\n const side = typeof tooltip === 'string' ? 'top' : (tooltip.side ?? 'top');\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side={side}>\n {tooltipContent}\n {shortcut && <span className=\"fk:ml-2 fk:text-muted-foreground\">{shortcut}</span>}\n </TooltipContent>\n </Tooltip>\n );\n};\n\nexport type PromptInputActionMenuProps = ComponentProps<typeof DropdownMenu>;\nexport const PromptInputActionMenu = (props: PromptInputActionMenuProps) => <DropdownMenu {...props} />;\n\nexport type PromptInputActionMenuTriggerProps = PromptInputButtonProps;\n\nexport const PromptInputActionMenuTrigger = ({ className, children, ...props }: PromptInputActionMenuTriggerProps) => (\n <DropdownMenuTrigger asChild>\n <PromptInputButton className={className} {...props}>\n {children ?? <PlusIcon className=\"fk:size-4\" />}\n </PromptInputButton>\n </DropdownMenuTrigger>\n);\n\nexport type PromptInputActionMenuContentProps = ComponentProps<typeof DropdownMenuContent>;\nexport const PromptInputActionMenuContent = ({ className, onCloseAutoFocus, ...props }: PromptInputActionMenuContentProps) => (\n <DropdownMenuContent\n align=\"start\"\n className={cn(className)}\n onCloseAutoFocus={(event) => {\n onCloseAutoFocus?.(event);\n if (event.defaultPrevented) {\n return;\n }\n\n // Radix refocuses the trigger on close, which would open the trigger's\n // tooltip (tooltips show on focus) right after picking an action.\n event.preventDefault();\n }}\n {...props}\n />\n);\n\nexport type PromptInputActionMenuItemProps = ComponentProps<typeof DropdownMenuItem>;\nexport const PromptInputActionMenuItem = ({ className, ...props }: PromptInputActionMenuItemProps) => (\n <DropdownMenuItem className={cn(className)} {...props} />\n);\n\n// Note: Actions that perform side-effects (like opening a file dialog)\n// are provided in opt-in modules (e.g., prompt-input-attachments).\n\nexport type PromptInputSubmitProps = ComponentProps<typeof InputGroupButton> & {\n status?: ChatStatus;\n onStop?: () => void;\n};\n\nexport const PromptInputSubmit = ({\n className,\n variant = 'default',\n size = 'icon-sm',\n status,\n onStop,\n onClick,\n children,\n ...props\n}: PromptInputSubmitProps) => {\n const isGenerating = status === 'submitted' || status === 'streaming';\n\n let Icon = <CornerDownLeftIcon className=\"fk:size-4\" />;\n\n if (status === 'submitted') {\n Icon = <Spinner />;\n } else if (status === 'streaming') {\n Icon = <SquareIcon className=\"fk:size-4\" />;\n } else if (status === 'error') {\n Icon = <XIcon className=\"fk:size-4\" />;\n }\n\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n if (isGenerating && onStop) {\n e.preventDefault();\n onStop();\n return;\n }\n onClick?.(e);\n },\n [isGenerating, onStop, onClick]\n );\n\n return (\n <InputGroupButton\n aria-label={isGenerating ? 'Stop' : 'Submit'}\n className={cn(className)}\n onClick={handleClick}\n size={size}\n type={isGenerating && onStop ? 'button' : 'submit'}\n variant={variant}\n {...props}\n >\n {children ?? Icon}\n </InputGroupButton>\n );\n};\n\nexport type PromptInputSelectProps = ComponentProps<typeof Select>;\n\nexport const PromptInputSelect = (props: PromptInputSelectProps) => <Select {...props} />;\n\nexport type PromptInputSelectTriggerProps = ComponentProps<typeof SelectTrigger>;\n\nexport const PromptInputSelectTrigger = ({ className, ...props }: PromptInputSelectTriggerProps) => (\n <SelectTrigger\n className={cn(\n 'fk:border-none fk:bg-transparent fk:font-medium fk:text-muted-foreground fk:shadow-none fk:transition-colors',\n 'fk:hover:bg-accent fk:hover:text-foreground fk:aria-expanded:bg-accent fk:aria-expanded:text-foreground',\n className\n )}\n {...props}\n />\n);\n\nexport type PromptInputSelectContentProps = ComponentProps<typeof SelectContent>;\n\nexport const PromptInputSelectContent = ({ className, ...props }: PromptInputSelectContentProps) => (\n <SelectContent className={cn(className)} {...props} />\n);\n\nexport type PromptInputSelectItemProps = ComponentProps<typeof SelectItem>;\n\nexport const PromptInputSelectItem = ({ className, ...props }: PromptInputSelectItemProps) => (\n <SelectItem className={cn(className)} {...props} />\n);\n\nexport type PromptInputSelectValueProps = ComponentProps<typeof SelectValue>;\n\nexport const PromptInputSelectValue = ({ className, ...props }: PromptInputSelectValueProps) => (\n <SelectValue className={cn(className)} {...props} />\n);\n\nexport type PromptInputHoverCardProps = ComponentProps<typeof HoverCard>;\n\nexport const PromptInputHoverCard = ({ openDelay = 0, closeDelay = 0, ...props }: PromptInputHoverCardProps) => (\n <HoverCard closeDelay={closeDelay} openDelay={openDelay} {...props} />\n);\n\nexport type PromptInputHoverCardTriggerProps = ComponentProps<typeof HoverCardTrigger>;\n\nexport const PromptInputHoverCardTrigger = (props: PromptInputHoverCardTriggerProps) => <HoverCardTrigger {...props} />;\n\nexport type PromptInputHoverCardContentProps = ComponentProps<typeof HoverCardContent>;\n\nexport const PromptInputHoverCardContent = ({ align = 'start', ...props }: PromptInputHoverCardContentProps) => (\n <HoverCardContent align={align} {...props} />\n);\n\nexport type PromptInputTabsListProps = HTMLAttributes<HTMLDivElement>;\n\nexport const PromptInputTabsList = ({ className, ...props }: PromptInputTabsListProps) => (\n <div className={cn(className)} {...props} />\n);\n\nexport type PromptInputTabProps = HTMLAttributes<HTMLDivElement>;\n\nexport const PromptInputTab = ({ className, ...props }: PromptInputTabProps) => (\n <div className={cn(className)} {...props} />\n);\n\nexport type PromptInputTabLabelProps = HTMLAttributes<HTMLHeadingElement>;\n\nexport const PromptInputTabLabel = ({ className, ...props }: PromptInputTabLabelProps) => (\n // Content provided via children in props\n // oxlint-disable-next-line eslint-plugin-jsx-a11y(heading-has-content)\n <h3 className={cn('fk:mb-2 fk:px-3 fk:font-medium fk:text-muted-foreground fk:text-xs', className)} {...props} />\n);\n\nexport type PromptInputTabBodyProps = HTMLAttributes<HTMLDivElement>;\n\nexport const PromptInputTabBody = ({ className, ...props }: PromptInputTabBodyProps) => (\n <div className={cn('fk:space-y-1', className)} {...props} />\n);\n\nexport type PromptInputTabItemProps = HTMLAttributes<HTMLDivElement>;\n\nexport const PromptInputTabItem = ({ className, ...props }: PromptInputTabItemProps) => (\n <div\n className={cn('fk:flex fk:items-center fk:gap-2 fk:px-3 fk:py-2 fk:text-xs fk:hover:bg-accent', className)}\n {...props}\n />\n);\n\nexport type PromptInputCommandProps = ComponentProps<typeof Command>;\n\nexport const PromptInputCommand = ({ className, ...props }: PromptInputCommandProps) => (\n <Command className={cn(className)} {...props} />\n);\n\nexport type PromptInputCommandInputProps = ComponentProps<typeof CommandInput>;\n\nexport const PromptInputCommandInput = ({ className, ...props }: PromptInputCommandInputProps) => (\n <CommandInput className={cn(className)} {...props} />\n);\n\nexport type PromptInputCommandListProps = ComponentProps<typeof CommandList>;\n\nexport const PromptInputCommandList = ({ className, ...props }: PromptInputCommandListProps) => (\n <CommandList className={cn(className)} {...props} />\n);\n\nexport type PromptInputCommandEmptyProps = ComponentProps<typeof CommandEmpty>;\n\nexport const PromptInputCommandEmpty = ({ className, ...props }: PromptInputCommandEmptyProps) => (\n <CommandEmpty className={cn(className)} {...props} />\n);\n\nexport type PromptInputCommandGroupProps = ComponentProps<typeof CommandGroup>;\n\nexport const PromptInputCommandGroup = ({ className, ...props }: PromptInputCommandGroupProps) => (\n <CommandGroup className={cn(className)} {...props} />\n);\n\nexport type PromptInputCommandItemProps = ComponentProps<typeof CommandItem>;\n\nexport const PromptInputCommandItem = ({ className, ...props }: PromptInputCommandItemProps) => (\n <CommandItem className={cn(className)} {...props} />\n);\n\nexport type PromptInputCommandSeparatorProps = ComponentProps<typeof CommandSeparator>;\n\nexport const PromptInputCommandSeparator = ({ className, ...props }: PromptInputCommandSeparatorProps) => (\n <CommandSeparator className={cn(className)} {...props} />\n);\n","'use client';\n\nimport { cn } from '../lib/utils';\nimport type { MotionProps } from 'motion/react';\nimport { motion } from 'motion/react';\nimport type { CSSProperties, ElementType, JSX } from 'react';\nimport { memo, useMemo } from 'react';\n\ntype MotionHTMLProps = MotionProps & Record<string, unknown>;\n\n// Cache motion components at module level to avoid creating during render\nconst motionComponentCache = new Map<keyof JSX.IntrinsicElements, React.ComponentType<MotionHTMLProps>>();\n\nconst getMotionComponent = (element: keyof JSX.IntrinsicElements) => {\n let component = motionComponentCache.get(element);\n if (!component) {\n component = motion.create(element);\n motionComponentCache.set(element, component);\n }\n return component;\n};\n\nexport interface TextShimmerProps {\n children: string;\n as?: ElementType;\n className?: string;\n duration?: number;\n spread?: number;\n}\n\nconst ShimmerComponent = ({ children, as: Component = 'p', className, duration = 2, spread = 2 }: TextShimmerProps) => {\n const MotionComponent = getMotionComponent(Component as keyof JSX.IntrinsicElements);\n\n const dynamicSpread = useMemo(() => (children?.length ?? 0) * spread, [children, spread]);\n\n return (\n <MotionComponent\n animate={{ backgroundPosition: '0% center' }}\n className={cn(\n 'fk:relative fk:inline-block fk:bg-[length:250%_100%,auto] fk:bg-clip-text fk:text-transparent',\n 'fk:[--bg:linear-gradient(90deg,#0000_calc(50%-var(--spread)),var(--color-background),#0000_calc(50%+var(--spread)))] fk:[background-repeat:no-repeat,padding-box]',\n className\n )}\n initial={{ backgroundPosition: '100% center' }}\n style={\n {\n '--spread': `${dynamicSpread}px`,\n backgroundImage: 'var(--bg), linear-gradient(var(--color-muted-foreground), var(--color-muted-foreground))',\n } as CSSProperties\n }\n transition={{\n duration,\n ease: 'linear',\n repeat: Number.POSITIVE_INFINITY,\n }}\n >\n {children}\n </MotionComponent>\n );\n};\n\nexport const Shimmer = memo(ShimmerComponent);\n","'use client';\n\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../primitives/collapsible';\nimport { cn } from '../lib/utils';\nimport { cjk } from '@streamdown/cjk';\nimport { code } from '@streamdown/code';\nimport { math } from '@streamdown/math';\nimport { mermaid } from '@streamdown/mermaid';\nimport { BrainIcon, ChevronDownIcon } from 'lucide-react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { createContext, memo, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { Streamdown } from 'streamdown';\n\nimport { Shimmer } from './shimmer';\n\ninterface ReasoningContextValue {\n isStreaming: boolean;\n isOpen: boolean;\n setIsOpen: (open: boolean) => void;\n duration: number | undefined;\n}\n\nconst ReasoningContext = createContext<ReasoningContextValue | null>(null);\n\nexport const useReasoning = () => {\n const context = useContext(ReasoningContext);\n if (!context) {\n throw new Error('Reasoning components must be used within Reasoning');\n }\n return context;\n};\n\nexport type ReasoningProps = ComponentProps<typeof Collapsible> & {\n isStreaming?: boolean;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n duration?: number;\n};\n\nconst AUTO_CLOSE_DELAY = 1000;\nconst MS_IN_S = 1000;\n\nexport const Reasoning = memo(\n ({\n className,\n isStreaming = false,\n open,\n defaultOpen,\n onOpenChange,\n duration: durationProp,\n children,\n ...props\n }: ReasoningProps) => {\n const resolvedDefaultOpen = defaultOpen ?? isStreaming;\n // Track if defaultOpen was explicitly set to false (to prevent auto-open)\n const isExplicitlyClosed = defaultOpen === false;\n\n const [isOpen, setIsOpen] = useControllableState<boolean>({\n defaultProp: resolvedDefaultOpen,\n onChange: onOpenChange,\n prop: open,\n });\n const [duration, setDuration] = useControllableState<number | undefined>({\n defaultProp: undefined,\n prop: durationProp,\n });\n\n const hasEverStreamedRef = useRef(isStreaming);\n const [hasAutoClosed, setHasAutoClosed] = useState(false);\n const startTimeRef = useRef<number | null>(null);\n\n // Track when streaming starts and compute duration\n useEffect(() => {\n if (isStreaming) {\n hasEverStreamedRef.current = true;\n if (startTimeRef.current === null) {\n startTimeRef.current = Date.now();\n }\n } else if (startTimeRef.current !== null) {\n setDuration(Math.ceil((Date.now() - startTimeRef.current) / MS_IN_S));\n startTimeRef.current = null;\n }\n }, [isStreaming, setDuration]);\n\n // Auto-open when streaming starts (unless explicitly closed)\n useEffect(() => {\n if (isStreaming && !isOpen && !isExplicitlyClosed) {\n setIsOpen(true);\n }\n }, [isStreaming, isOpen, setIsOpen, isExplicitlyClosed]);\n\n // Auto-close when streaming ends (once only, and only if it ever streamed)\n useEffect(() => {\n if (hasEverStreamedRef.current && !isStreaming && isOpen && !hasAutoClosed) {\n const timer = setTimeout(() => {\n setIsOpen(false);\n setHasAutoClosed(true);\n }, AUTO_CLOSE_DELAY);\n\n return () => clearTimeout(timer);\n }\n }, [isStreaming, isOpen, setIsOpen, hasAutoClosed]);\n\n const handleOpenChange = useCallback(\n (newOpen: boolean) => {\n setIsOpen(newOpen);\n },\n [setIsOpen]\n );\n\n const contextValue = useMemo(\n () => ({ duration, isOpen, isStreaming, setIsOpen }),\n [duration, isOpen, isStreaming, setIsOpen]\n );\n\n return (\n <ReasoningContext.Provider value={contextValue}>\n <Collapsible\n className={cn('fk:not-prose fk:mb-4', className)}\n onOpenChange={handleOpenChange}\n open={isOpen}\n {...props}\n >\n {children}\n </Collapsible>\n </ReasoningContext.Provider>\n );\n }\n);\n\nexport type ReasoningTriggerProps = ComponentProps<typeof CollapsibleTrigger> & {\n getThinkingMessage?: (isStreaming: boolean, duration?: number) => ReactNode;\n};\n\nconst defaultGetThinkingMessage = (isStreaming: boolean, duration?: number) => {\n if (isStreaming || duration === 0) {\n return <Shimmer duration={1}>Thinking...</Shimmer>;\n }\n if (duration === undefined) {\n return <p>Thought for a few seconds</p>;\n }\n return <p>Thought for {duration} seconds</p>;\n};\n\nexport const ReasoningTrigger = memo(\n ({ className, children, getThinkingMessage = defaultGetThinkingMessage, ...props }: ReasoningTriggerProps) => {\n const { isStreaming, isOpen, duration } = useReasoning();\n\n return (\n <CollapsibleTrigger\n className={cn(\n 'fk:flex fk:w-full fk:items-center fk:gap-2 fk:text-muted-foreground fk:text-sm fk:transition-colors fk:hover:text-foreground',\n className\n )}\n {...props}\n >\n {children ?? (\n <>\n <BrainIcon className=\"fk:size-4\" />\n {getThinkingMessage(isStreaming, duration)}\n <ChevronDownIcon\n className={cn('fk:size-4 fk:transition-transform', isOpen ? 'fk:rotate-180' : 'fk:rotate-0')}\n />\n </>\n )}\n </CollapsibleTrigger>\n );\n }\n);\n\nexport type ReasoningContentProps = ComponentProps<typeof CollapsibleContent> & {\n children: string;\n};\n\nconst streamdownPlugins = { cjk, code, math, mermaid };\n\nexport const ReasoningContent = memo(({ className, children, ...props }: ReasoningContentProps) => (\n <CollapsibleContent\n className={cn(\n 'fk:mt-4 fk:text-sm',\n 'fk:data-[state=closed]:fade-out-0 fk:data-[state=closed]:slide-out-to-top-2 fk:data-[state=open]:slide-in-from-top-2 fk:text-muted-foreground fk:outline-none fk:data-[state=closed]:animate-out fk:data-[state=open]:animate-in',\n className\n )}\n {...props}\n >\n <Streamdown plugins={streamdownPlugins}>{children}</Streamdown>\n </CollapsibleContent>\n));\n\nReasoning.displayName = 'Reasoning';\nReasoningTrigger.displayName = 'ReasoningTrigger';\nReasoningContent.displayName = 'ReasoningContent';\n","'use client';\n\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../primitives/collapsible';\nimport { cn } from '../lib/utils';\nimport { BookIcon, ChevronDownIcon } from 'lucide-react';\nimport type { ComponentProps } from 'react';\n\nexport type SourcesProps = ComponentProps<'div'>;\n\nexport const Sources = ({ className, ...props }: SourcesProps) => (\n <Collapsible className={cn('fk:not-prose fk:mb-4 fk:text-primary fk:text-xs', className)} {...props} />\n);\n\nexport type SourcesTriggerProps = ComponentProps<typeof CollapsibleTrigger> & {\n count: number;\n};\n\nexport const SourcesTrigger = ({ className, count, children, ...props }: SourcesTriggerProps) => (\n <CollapsibleTrigger className={cn('fk:flex fk:items-center fk:gap-2', className)} {...props}>\n {children ?? (\n <>\n <p className=\"fk:font-medium\">Used {count} sources</p>\n <ChevronDownIcon className=\"fk:h-4 fk:w-4\" />\n </>\n )}\n </CollapsibleTrigger>\n);\n\nexport type SourcesContentProps = ComponentProps<typeof CollapsibleContent>;\n\nexport const SourcesContent = ({ className, ...props }: SourcesContentProps) => (\n <CollapsibleContent\n className={cn(\n 'fk:mt-3 fk:flex fk:w-fit fk:flex-col fk:gap-2',\n 'fk:data-[state=closed]:fade-out-0 fk:data-[state=closed]:slide-out-to-top-2 fk:data-[state=open]:slide-in-from-top-2 fk:outline-none fk:data-[state=closed]:animate-out fk:data-[state=open]:animate-in',\n className\n )}\n {...props}\n />\n);\n\nexport type SourceProps = ComponentProps<'a'>;\n\nexport const Source = ({ href, title, children, ...props }: SourceProps) => (\n <a className=\"fk:flex fk:items-center fk:gap-2\" href={href} rel=\"noreferrer\" target=\"_blank\" {...props}>\n {children ?? (\n <>\n <BookIcon className=\"fk:h-4 fk:w-4\" />\n <span className=\"fk:block fk:font-medium\">{title}</span>\n </>\n )}\n </a>\n);\n","'use client';\n\nimport { Button } from '../primitives/button';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../primitives/tooltip';\nimport { cn } from '../lib/utils';\nimport { LoaderIcon, MicIcon, SquareIcon } from 'lucide-react';\nimport { type ComponentProps, useCallback, useEffect, useRef, useState } from 'react';\n\nexport type SpeechInputProps = Omit<ComponentProps<typeof Button>, 'onError'> & {\n onTranscriptionChange?: (text: string) => void;\n /**\n * Required. Receives the recorded audio blob and an abort signal that is\n * cancelled if the user stops processing. Return the transcribed text.\n */\n onAudioRecorded?: (audioBlob: Blob, signal: AbortSignal) => Promise<string>;\n onError?: (error: Error) => void;\n};\n\nconst MAX_RECORDING_MS = 60_000;\n\nfunction isMediaRecorderSupported(): boolean {\n return (\n typeof window !== 'undefined' &&\n 'MediaRecorder' in window &&\n typeof navigator !== 'undefined' &&\n 'mediaDevices' in navigator &&\n typeof navigator.mediaDevices.getUserMedia === 'function'\n );\n}\n\nfunction getSupportedRecorderMimeType(): string | undefined {\n const candidates = ['audio/webm;codecs=opus', 'audio/webm', 'audio/mp4', 'audio/ogg;codecs=opus'];\n\n return candidates.find((type) => MediaRecorder.isTypeSupported(type));\n}\n\nfunction toSpeechInputError(error: unknown, fallback: string): Error {\n if (error instanceof DOMException && (error.name === 'NotAllowedError' || error.name === 'PermissionDeniedError')) {\n return new Error('Microphone permission was denied. Enable the microphone to dictate.');\n }\n\n if (error instanceof DOMException && error.name === 'NotFoundError') {\n return new Error('No microphone was found.');\n }\n\n if (error instanceof Error) {\n return error;\n }\n\n return new Error(fallback);\n}\n\nfunction isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === 'AbortError';\n}\n\nfunction getTooltip(isSupported: boolean, isListening: boolean, isProcessing: boolean): string {\n if (!isSupported) {\n return 'Dictation is not available in this browser.';\n }\n\n if (isProcessing) {\n return 'Cancel transcription';\n }\n\n if (isListening) {\n return 'Stop recording';\n }\n\n return 'Dictate';\n}\n\nexport const SpeechInput = ({\n className,\n disabled,\n onAudioRecorded,\n onError,\n onTranscriptionChange,\n size = 'icon-sm',\n variant = 'ghost',\n ...props\n}: SpeechInputProps) => {\n const [isListening, setIsListening] = useState(false);\n const [isProcessing, setIsProcessing] = useState(false);\n const [isSupported, setIsSupported] = useState(false);\n const mediaRecorderRef = useRef<MediaRecorder | null>(null);\n const streamRef = useRef<MediaStream | null>(null);\n const audioChunksRef = useRef<Blob[]>([]);\n const maxDurationTimerRef = useRef<number | null>(null);\n const abortControllerRef = useRef<AbortController | null>(null);\n const discardNextStopRef = useRef(false);\n const disabledRef = useRef(Boolean(disabled));\n const onAudioRecordedRef = useRef(onAudioRecorded);\n const onErrorRef = useRef(onError);\n const onTranscriptionChangeRef = useRef(onTranscriptionChange);\n\n disabledRef.current = Boolean(disabled);\n onAudioRecordedRef.current = onAudioRecorded;\n onErrorRef.current = onError;\n onTranscriptionChangeRef.current = onTranscriptionChange;\n\n useEffect(() => {\n setIsSupported(isMediaRecorderSupported());\n }, []);\n\n const releaseStream = useCallback(() => {\n if (!streamRef.current) {\n return;\n }\n\n for (const track of streamRef.current.getTracks()) {\n track.stop();\n }\n\n streamRef.current = null;\n }, []);\n\n const clearMaxDurationTimer = useCallback(() => {\n if (maxDurationTimerRef.current === null) {\n return;\n }\n\n window.clearTimeout(maxDurationTimerRef.current);\n maxDurationTimerRef.current = null;\n }, []);\n\n const stopMediaRecorder = useCallback(() => {\n clearMaxDurationTimer();\n\n if (mediaRecorderRef.current?.state === 'recording') {\n mediaRecorderRef.current.stop();\n }\n\n setIsListening(false);\n }, [clearMaxDurationTimer]);\n\n const abortProcessing = useCallback(() => {\n abortControllerRef.current?.abort();\n abortControllerRef.current = null;\n setIsProcessing(false);\n }, []);\n\n const cancelCapture = useCallback(() => {\n abortProcessing();\n clearMaxDurationTimer();\n\n const recorder = mediaRecorderRef.current;\n\n if (recorder?.state === 'recording') {\n discardNextStopRef.current = true;\n recorder.stop();\n }\n\n setIsListening(false);\n releaseStream();\n }, [abortProcessing, clearMaxDurationTimer, releaseStream]);\n\n const startMediaRecorder = useCallback(async () => {\n if (disabledRef.current) {\n return;\n }\n\n if (!onAudioRecordedRef.current) {\n onErrorRef.current?.(new Error('Dictation is not configured.'));\n\n return;\n }\n\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n\n if (disabledRef.current) {\n for (const track of stream.getTracks()) {\n track.stop();\n }\n\n return;\n }\n\n streamRef.current = stream;\n const mimeType = getSupportedRecorderMimeType();\n const mediaRecorder = mimeType ? new MediaRecorder(stream, { mimeType }) : new MediaRecorder(stream);\n audioChunksRef.current = [];\n\n mediaRecorder.ondataavailable = (event) => {\n if (event.data.size > 0) {\n audioChunksRef.current.push(event.data);\n }\n };\n\n mediaRecorder.onstop = async () => {\n releaseStream();\n clearMaxDurationTimer();\n setIsListening(false);\n\n if (discardNextStopRef.current) {\n discardNextStopRef.current = false;\n audioChunksRef.current = [];\n\n return;\n }\n\n const audioBlob = new Blob(audioChunksRef.current, {\n type: mediaRecorder.mimeType || 'audio/webm',\n });\n\n if (audioBlob.size === 0) {\n return;\n }\n\n const abortController = new AbortController();\n abortControllerRef.current = abortController;\n setIsProcessing(true);\n\n try {\n const transcribe = onAudioRecordedRef.current;\n\n if (!transcribe) {\n return;\n }\n\n const transcript = await transcribe(audioBlob, abortController.signal);\n\n if (transcript) {\n onTranscriptionChangeRef.current?.(transcript);\n }\n } catch (error) {\n if (isAbortError(error)) {\n return;\n }\n\n onErrorRef.current?.(toSpeechInputError(error, 'Transcription failed.'));\n } finally {\n // Cancel already nulls the shared ref so the UI can re-record.\n // Only this attempt may clear its own controller and flag.\n if (abortControllerRef.current === abortController) {\n abortControllerRef.current = null;\n setIsProcessing(false);\n }\n }\n };\n\n mediaRecorder.onerror = () => {\n setIsListening(false);\n releaseStream();\n clearMaxDurationTimer();\n onErrorRef.current?.(new Error('Recording failed. Try again.'));\n };\n\n mediaRecorderRef.current = mediaRecorder;\n mediaRecorder.start(250);\n setIsListening(true);\n maxDurationTimerRef.current = window.setTimeout(() => {\n stopMediaRecorder();\n }, MAX_RECORDING_MS);\n } catch (error) {\n setIsListening(false);\n releaseStream();\n onErrorRef.current?.(toSpeechInputError(error, 'Could not start the microphone.'));\n }\n }, [clearMaxDurationTimer, releaseStream, stopMediaRecorder]);\n\n // `disabled` must tear down capture, not only grey out the button. In the\n // chat composer, submit/stream sets this true and would otherwise freeze\n // the mic in the listening state.\n useEffect(() => {\n if (!disabled) {\n return;\n }\n\n cancelCapture();\n }, [cancelCapture, disabled]);\n\n useEffect(() => {\n return () => {\n cancelCapture();\n };\n }, [cancelCapture]);\n\n const handleClick = useCallback(() => {\n if (isProcessing) {\n abortProcessing();\n\n return;\n }\n\n if (isListening) {\n stopMediaRecorder();\n\n return;\n }\n\n void startMediaRecorder();\n }, [abortProcessing, isListening, isProcessing, startMediaRecorder, stopMediaRecorder]);\n\n const isDisabled = disabled || !isSupported || !onAudioRecorded;\n const tooltip = getTooltip(isSupported && Boolean(onAudioRecorded), isListening, isProcessing);\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"fk:relative fk:inline-flex fk:items-center fk:justify-center\">\n {isListening\n ? [0, 1, 2].map((index) => (\n <span\n className=\"fk:absolute fk:inset-0 fk:animate-ping fk:rounded-full fk:border-2 fk:border-red-400/30 fk:corner-squircle\"\n key={index}\n style={{\n animationDelay: `${String(index * 0.3)}s`,\n animationDuration: '2s',\n }}\n />\n ))\n : null}\n <Button\n aria-label={tooltip}\n aria-pressed={isListening}\n size={size}\n variant={isListening ? 'destructive' : variant}\n {...props}\n className={cn('fk:relative fk:z-10 fk:rounded-full fk:dark:hover:bg-accent fk:corner-squircle', className)}\n disabled={isDisabled}\n onClick={handleClick}\n type=\"button\"\n >\n {isProcessing ? <LoaderIcon className=\"fk:size-4 fk:animate-spin\" /> : null}\n {!isProcessing && isListening ? <SquareIcon className=\"fk:size-4\" /> : null}\n {!(isProcessing || isListening) ? <MicIcon className=\"fk:size-5\" /> : null}\n </Button>\n </span>\n </TooltipTrigger>\n <TooltipContent>{tooltip}</TooltipContent>\n </Tooltip>\n );\n};\n","'use client';\n\nimport { Button } from '../primitives/button';\nimport { ScrollArea, ScrollBar } from '../primitives/scroll-area';\nimport { cn } from '../lib/utils';\nimport type { ComponentProps } from 'react';\nimport { useCallback } from 'react';\n\nexport type SuggestionsProps = ComponentProps<typeof ScrollArea>;\n\nexport const Suggestions = ({ className, children, ...props }: SuggestionsProps) => (\n <ScrollArea className=\"fk:w-full fk:overflow-x-auto fk:whitespace-nowrap\" {...props}>\n <div className={cn('fk:flex fk:w-max fk:flex-nowrap fk:items-center fk:gap-2', className)}>{children}</div>\n <ScrollBar className=\"fk:hidden\" orientation=\"horizontal\" />\n </ScrollArea>\n);\n\nexport type SuggestionProps = Omit<ComponentProps<typeof Button>, 'onClick'> & {\n suggestion: string;\n onClick?: (suggestion: string) => void;\n};\n\nexport const Suggestion = ({\n suggestion,\n onClick,\n className,\n variant = 'outline',\n size = 'sm',\n children,\n ...props\n}: SuggestionProps) => {\n const handleClick = useCallback(() => {\n onClick?.(suggestion);\n }, [onClick, suggestion]);\n\n return (\n <Button\n className={cn('fk:cursor-pointer fk:rounded-full fk:px-4 fk:corner-squircle', className)}\n onClick={handleClick}\n size={size}\n type=\"button\"\n variant={variant}\n {...props}\n >\n {children || suggestion}\n </Button>\n );\n};\n","'use client';\n\nimport { Badge } from '../primitives/badge';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../primitives/collapsible';\nimport { cn } from '../lib/utils';\nimport type { DynamicToolUIPart, ToolUIPart } from 'ai';\nimport { CheckCircleIcon, ChevronDownIcon, CircleIcon, ClockIcon, WrenchIcon, XCircleIcon } from 'lucide-react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { isValidElement } from 'react';\n\nimport { CodeBlock } from './code-block';\n\nexport type ToolProps = ComponentProps<typeof Collapsible>;\n\nexport const Tool = ({ className, ...props }: ToolProps) => (\n <Collapsible\n className={cn('fk:group fk:not-prose fk:mb-4 fk:w-full fk:rounded-md fk:border fk:corner-squircle', className)}\n {...props}\n />\n);\n\nexport type ToolPart = ToolUIPart | DynamicToolUIPart;\n\nexport type ToolHeaderProps = {\n title?: string;\n className?: string;\n} & (\n | { type: ToolUIPart['type']; state: ToolUIPart['state']; toolName?: never }\n | {\n type: DynamicToolUIPart['type'];\n state: DynamicToolUIPart['state'];\n toolName: string;\n }\n);\n\nconst statusLabels: Record<ToolPart['state'], string> = {\n 'approval-requested': 'Awaiting Approval',\n 'approval-responded': 'Responded',\n 'input-available': 'Running',\n 'input-streaming': 'Pending',\n 'output-available': 'Completed',\n 'output-denied': 'Denied',\n 'output-error': 'Error',\n};\n\nconst statusIcons: Record<ToolPart['state'], ReactNode> = {\n 'approval-requested': <ClockIcon className=\"fk:size-4 fk:text-yellow-600\" />,\n 'approval-responded': <CheckCircleIcon className=\"fk:size-4 fk:text-blue-600\" />,\n 'input-available': <ClockIcon className=\"fk:size-4 fk:animate-pulse\" />,\n 'input-streaming': <CircleIcon className=\"fk:size-4\" />,\n 'output-available': <CheckCircleIcon className=\"fk:size-4 fk:text-green-600\" />,\n 'output-denied': <XCircleIcon className=\"fk:size-4 fk:text-orange-600\" />,\n 'output-error': <XCircleIcon className=\"fk:size-4 fk:text-red-600\" />,\n};\n\nexport const getStatusBadge = (status: ToolPart['state']) => (\n <Badge className=\"fk:gap-1.5 fk:py-px fk:rounded-full fk:text-xs fk:corner-squircle\" variant=\"secondary\">\n {statusIcons[status]}\n {statusLabels[status]}\n </Badge>\n);\n\nexport const ToolHeader = ({ className, title, type, state, toolName, ...props }: ToolHeaderProps) => {\n const derivedName = type === 'dynamic-tool' ? toolName : type.split('-').slice(1).join('-');\n\n return (\n <CollapsibleTrigger\n className={cn('fk:flex fk:w-full fk:items-center fk:justify-between fk:gap-4 fk:px-3 fk:py-2', className)}\n {...props}\n >\n <div className=\"fk:flex fk:items-center fk:gap-2\">\n <WrenchIcon className=\"fk:size-4 fk:text-muted-foreground\" />\n <span className=\"fk:font-medium fk:text-sm\">{title ?? derivedName}</span>\n {getStatusBadge(state)}\n </div>\n <ChevronDownIcon className=\"fk:size-4 fk:text-muted-foreground fk:transition-transform fk:group-data-[state=open]:rotate-180\" />\n </CollapsibleTrigger>\n );\n};\n\nexport type ToolContentProps = ComponentProps<typeof CollapsibleContent>;\n\nexport const ToolContent = ({ className, ...props }: ToolContentProps) => (\n <CollapsibleContent\n className={cn(\n 'fk:data-[state=closed]:fade-out-0 fk:data-[state=closed]:slide-out-to-top-2 fk:data-[state=open]:slide-in-from-top-2 fk:space-y-4 fk:p-4 fk:text-popover-foreground fk:outline-none fk:data-[state=closed]:animate-out fk:data-[state=open]:animate-in',\n className\n )}\n {...props}\n />\n);\n\nexport type ToolInputProps = ComponentProps<'div'> & {\n input: ToolPart['input'];\n};\n\nexport const ToolInput = ({ className, input, ...props }: ToolInputProps) => (\n <div className={cn('fk:space-y-2 fk:overflow-hidden', className)} {...props}>\n <h4 className=\"fk:font-medium fk:text-muted-foreground fk:text-xs fk:uppercase fk:tracking-wide\">Parameters</h4>\n <div className=\"fk:rounded-md fk:bg-muted/50 fk:corner-squircle\">\n <CodeBlock code={JSON.stringify(input, null, 2)} language=\"json\" />\n </div>\n </div>\n);\n\nexport type ToolOutputProps = ComponentProps<'div'> & {\n output: ToolPart['output'];\n errorText: ToolPart['errorText'];\n};\n\nexport const ToolOutput = ({ className, output, errorText, ...props }: ToolOutputProps) => {\n if (!(output || errorText)) {\n return null;\n }\n\n let Output = <div>{output as ReactNode}</div>;\n\n if (typeof output === 'object' && !isValidElement(output)) {\n Output = <CodeBlock code={JSON.stringify(output, null, 2)} language=\"json\" />;\n } else if (typeof output === 'string') {\n Output = <CodeBlock code={output} language=\"json\" />;\n }\n\n return (\n <div className={cn('fk:space-y-2', className)} {...props}>\n <h4 className=\"fk:font-medium fk:text-muted-foreground fk:text-xs fk:uppercase fk:tracking-wide\">\n {errorText ? 'Error' : 'Result'}\n </h4>\n <div\n className={cn(\n 'fk:overflow-x-auto fk:rounded-md fk:text-xs fk:[&_table]:w-full fk:corner-squircle',\n errorText ? 'fk:bg-destructive/10 fk:text-destructive' : 'fk:bg-muted/50 fk:text-foreground'\n )}\n >\n {errorText && <div>{errorText}</div>}\n {Output}\n </div>\n </div>\n );\n};\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../lib/utils';\n\nconst alertVariants = cva(\n 'fk:relative fk:w-full fk:rounded-lg fk:border fk:px-4 fk:py-3 fk:[&>svg~*]:pl-7 fk:[&>svg+div]:translate-y-[-3px] fk:[&>svg]:absolute fk:[&>svg]:left-4 fk:[&>svg]:top-4 fk:[&>svg]:text-foreground fk:corner-squircle',\n {\n variants: {\n variant: {\n 'default': 'fk:bg-card fk:text-card-foreground',\n destructive: 'fk:border-none fk:text-destructive fk:bg-destructive-foreground fk:[&>svg]:text-destructive',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nfunction Alert({ className, variant, ...props }: React.ComponentProps<'div'> & VariantProps<typeof alertVariants>) {\n return <div data-slot=\"alert\" role=\"alert\" className={cn(alertVariants({ variant }), className)} {...props} />;\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn('fk:col-start-2 fk:line-clamp-1 fk:min-h-4 fk:font-medium fk:tracking-tight', className)}\n {...props}\n />\n );\n}\n\nfunction AlertDescription({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div data-slot=\"alert-description\" className={cn('fk:text-sm fk:[&_p]:leading-relaxed', className)} {...props} />\n );\n}\n\nexport { Alert, AlertTitle, AlertDescription };\n"]}
1
+ {"version":3,"sources":["../src/ui/primitives/external-link.tsx","../src/ui/primitives/label.tsx","../src/ui/primitives/form.tsx","../src/ui/primitives/checkbox.tsx","../src/ui/primitives/collapsible.tsx","../src/ui/primitives/input.tsx","../src/ui/primitives/popover.tsx","../src/ui/primitives/resizable.tsx","../src/ui/primitives/sheet.tsx","../src/ui/hooks/use-mobile.tsx","../src/ui/primitives/tooltip.tsx","../src/ui/primitives/sidebar.tsx","../src/ui/components/icon-name.ts","../src/ui/components/icon.tsx","../src/ui/components/sidebar.tsx","../src/ui/primitives/switch.tsx","../src/ui/primitives/table.tsx","../src/ui/primitives/tabs.tsx","../src/ui/primitives/textarea.tsx","../src/ui/primitives/toggle.tsx","../src/ui/primitives/toggle-group.tsx","../src/ui/components/permission-tooltip.tsx","../src/ui/primitives/drawer.tsx","../src/ui/components/drawer-modal.tsx","../src/ui/primitives/sonner.tsx","../src/ui/primitives/hover-card.tsx","../src/ui/primitives/spinner.tsx","../src/ui/primitives/input-group.tsx","../src/ui/ai-elements/attachments.tsx","../src/ui/ai-elements/code-block.tsx","../src/ui/ai-elements/conversation.tsx","../src/ui/ai-elements/message.tsx","../src/ui/ai-elements/model-selector.tsx","../src/ui/ai-elements/prompt-input.tsx","../src/ui/ai-elements/shimmer.tsx","../src/ui/ai-elements/reasoning.tsx","../src/ui/ai-elements/sources.tsx","../src/ui/ai-elements/speech-input.tsx","../src/ui/ai-elements/suggestion.tsx","../src/ui/ai-elements/tool.tsx","../src/ui/primitives/alert.tsx"],"names":["ExternalLink","href","children","jsx","Button","jsxs","ExternalLinkIcon","Label","className","props","LabelPrimitive","cn","Form","FormProvider","FormFieldContext","ae","FormField","Controller","useFormField","fieldContext","itemContext","FormItemContext","getFieldState","useFormContext","formState","useFormState","fieldState","id","FormItem","FormLabel","error","formItemId","FormControl","formDescriptionId","formMessageId","Slot","FormDescription","FormMessage","body","Checkbox","CheckboxPrimitive","CheckIcon","Collapsible","CollapsiblePrimitive","CollapsibleTrigger","CollapsibleContent","Input","type","Popover","PopoverPrimitive","PopoverTrigger","PopoverContent","align","sideOffset","PopoverAnchor","ResizablePanelGroup","ResizablePanel","ResizableHandle","withHandle","GripVerticalIcon","Sheet","SheetPrimitive","SheetTrigger","SheetClose","SheetPortal","SheetOverlay","SheetContent","side","showCloseButton","XIcon","SheetHeader","SheetFooter","SheetTitle","SheetDescription","MOBILE_BREAKPOINT","useIsMobile","isMobile","setIsMobile","pt","mql","onChange","TooltipProvider","delayDuration","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipPortal","TooltipContent","SIDEBAR_COOKIE_NAME","SIDEBAR_COOKIE_MAX_AGE","SIDEBAR_WIDTH","SIDEBAR_WIDTH_MOBILE","SIDEBAR_WIDTH_ICON","SIDEBAR_KEYBOARD_SHORTCUT","SidebarContext","useSidebar","context","SidebarProvider","defaultOpen","openProp","setOpenProp","style","openMobile","setOpenMobile","_open","_setOpen","open","setOpen","value","openState","toggleSidebar","handleKeyDown","event","state","contextValue","Sidebar","variant","collapsible","SidebarTrigger","onClick","PanelLeftIcon","SidebarRail","SidebarInset","SidebarContent","SidebarGroup","SidebarGroupLabel","asChild","Comp","SidebarGroupContent","SidebarMenu","SidebarMenuItem","sidebarMenuButtonVariants","cva","SidebarMenuButton","isActive","size","tooltip","button","toIconName","name","DEFAULT_ICON_NAME","toPascalIconName","_","__","char","createIconResolver","iconNames","available","byPascalName","candidate","pascal","findExact","trimmed","kebab","fallbackFor","exact","match","resolve","resolveIconName","Icon","strokeWidth","DynamicIcon","NavLinkCompat","NavLink","menuGroups","schema","visibleItems","item","itemsByGroup","groupBy","g","nonEmptyGroups","menuGroup","group","entity","capitalize","str","withSpaces","Switch","SwitchPrimitive","Table","containerClassName","onScroll","ref","TableHeader","TableBody","TableFooter","TableRow","TableHead","TableCell","TableCaption","Tabs","orientation","TabsPrimitive","tabsListVariants","TabsList","TabsTrigger","TabsContent","Textarea","toggleVariants","Toggle","TogglePrimitive","ToggleGroupContext","ht","ToggleGroup","spacing","ToggleGroupPrimitive","ToggleGroupItem","InsufficientPermissionsTooltipContent","Info","PermissionTooltip","disabled","Fragment","DrawerPrimitivePortal","DrawerPrimitive","Drawer","DrawerPortal","DrawerOverlay","DrawerContent","DrawerHeader","DrawerTitle","DrawerDescription","DrawerModal","actions","beforeClose","depth","forceClose","isFocused","_onFormChange","onClose","title","isOpen","setIsOpen","useState","gutter","closeDrawer","useCallback","handleClose","useEffect","onEscapeKeyPressed","Skeleton","CloseIcon","Separator","Toaster","richColors","theme","useTheme","Sonner","CircleCheckIcon","InfoIcon","TriangleAlertIcon","OctagonXIcon","Loader2Icon","HoverCard","HoverCardPrimitive","HoverCardTrigger","HoverCardContent","Spinner","InputGroup","inputGroupAddonVariants","InputGroupAddon","e","inputGroupButtonVariants","InputGroupButton","InputGroupText","InputGroupInput","InputGroupTextarea","mediaCategoryIcons","Music2Icon","FileTextIcon","ImageIcon","GlobeIcon","PaperclipIcon","VideoIcon","getMediaCategory","data","mediaType","getAttachmentLabel","category","renderAttachmentImage","url","filename","isGrid","AttachmentsContext","createContext","AttachmentContext","useAttachmentsContext","useContext","useAttachmentContext","ctx","Attachments","useMemo","Attachment","onRemove","mediaCategory","AttachmentPreview","fallbackIcon","iconSize","renderIcon","renderContent","AttachmentInfo","showMediaType","label","AttachmentRemove","handleClick","AttachmentHoverCard","openDelay","closeDelay","AttachmentHoverCardTrigger","AttachmentHoverCardContent","AttachmentEmpty","isItalic","fontStyle","isBold","isUnderline","addKeysToTokens","lines","line","lineIdx","token","tokenIdx","TokenSpan","LINE_NUMBER_CLASSES","LineSpan","keyedLine","showLineNumbers","key","CodeBlockContext","highlighterCache","tokensCache","subscribers","getTokensCacheKey","code","language","start","end","getHighlighter","cached","highlighterPromise","createHighlighter","createRawTokens","highlightCode","callback","tokensCacheKey","highlighter","langToUse","result","tokenized","subs","sub","CodeBlockBody","memo","preStyle","keyedLines","prevProps","nextProps","CodeBlockContainer","CodeBlockHeader","CodeBlockTitle","CodeBlockFilename","CodeBlockActions","CodeBlockContent","rawTokens","syncTokens","asyncTokens","setAsyncTokens","asyncKeyRef","useRef","cancelled","CodeBlock","CodeBlockCopyButton","onCopy","onError","timeout","isCopied","setIsCopied","timeoutRef","copyToClipboard","CopyIcon","CodeBlockLanguageSelector","Select","CodeBlockLanguageSelectorTrigger","SelectTrigger","CodeBlockLanguageSelectorValue","SelectValue","CodeBlockLanguageSelectorContent","SelectContent","CodeBlockLanguageSelectorItem","SelectItem","Conversation","StickToBottom","ConversationContent","ConversationEmptyState","description","icon","ConversationScrollButton","isAtBottom","scrollToBottom","useStickToBottomContext","handleScrollToBottom","ArrowDownIcon","getMessageText","message","part","defaultFormatMessage","messagesToMarkdown","messages","formatMessage","msg","i","ConversationDownload","handleDownload","markdown","blob","link","DownloadIcon","Message","from","MessageContent","MessageActions","MessageAction","MessageBranchContext","useMessageBranch","MessageBranch","defaultBranch","onBranchChange","currentBranch","setCurrentBranch","branches","setBranches","handleBranchChange","newBranch","goToPrevious","goToNext","MessageBranchContent","childrenArray","branch","index","MessageBranchSelector","totalBranches","ButtonGroup","MessageBranchPrevious","ChevronLeftIcon","MessageBranchNext","ChevronRightIcon","MessageBranchPage","ButtonGroupText","streamdownPlugins","cjk","math","mermaid","MessageResponse","Streamdown","MessageToolbar","ModelSelector","Dialog","ModelSelectorTrigger","DialogTrigger","ModelSelectorContent","DialogContent","DialogTitle","Command","ModelSelectorDialog","CommandDialog","ModelSelectorInput","CommandInput","ModelSelectorList","CommandList","ModelSelectorEmpty","CommandEmpty","ModelSelectorGroup","CommandGroup","ModelSelectorItem","CommandItem","ModelSelectorShortcut","CommandShortcut","ModelSelectorSeparator","CommandSeparator","ModelSelectorLogo","provider","ModelSelectorLogoGroup","ModelSelectorName","convertBlobUrlToDataUrl","reader","captureScreenshot","stream","video","reject","width","height","canvas","timestamp","track","PromptInputController","ProviderAttachmentsContext","usePromptInputController","useOptionalPromptInputController","useProviderAttachments","useOptionalProviderAttachments","PromptInputProvider","initialTextInput","textInput","setTextInput","clearInput","attachmentFiles","setAttachmentFiles","fileInputRef","openRef","add","files","incoming","prev","file","nanoid","remove","found","f","clear","attachmentsRef","openFileDialog","attachments","__registerFileInput","controller","LocalAttachmentsContext","usePromptInputAttachments","LocalReferencedSourcesContext","usePromptInputReferencedSources","PromptInputActionAddAttachments","onSelect","handleSelect","DropdownMenuItem","PromptInputActionAddScreenshot","screenshot","Monitor","PromptInput","accept","multiple","globalDrop","syncHiddenInput","maxFiles","maxFileSize","onSubmit","usingProvider","inputRef","formRef","items","setItems","referencedSources","setReferencedSources","filesRef","openFileDialogLocal","matchesAccept","s","pattern","prefix","addLocal","fileList","accepted","withinSize","sized","capacity","capped","next","removeLocal","addWithProviderValidation","currentCount","clearAttachments","clearReferencedSources","form","onDragOver","onDrop","handleChange","attachmentsCtx","refsCtx","array","handleSubmit","text","convertedFiles","_id","dataUrl","inner","withReferencedSources","PromptInputBody","PromptInputTextarea","onKeyDown","placeholder","isComposing","setIsComposing","lastAttachment","handlePaste","handleCompositionEnd","handleCompositionStart","controlledProps","PromptInputHeader","PromptInputFooter","PromptInputTools","PromptInputButton","newSize","Children","tooltipContent","shortcut","PromptInputActionMenu","DropdownMenu","PromptInputActionMenuTrigger","DropdownMenuTrigger","PlusIcon","PromptInputActionMenuContent","onCloseAutoFocus","DropdownMenuContent","PromptInputActionMenuItem","PromptInputSubmit","status","onStop","isGenerating","CornerDownLeftIcon","SquareIcon","PromptInputSelect","PromptInputSelectTrigger","PromptInputSelectContent","PromptInputSelectItem","PromptInputSelectValue","PromptInputHoverCard","PromptInputHoverCardTrigger","PromptInputHoverCardContent","PromptInputTabsList","PromptInputTab","PromptInputTabLabel","PromptInputTabBody","PromptInputTabItem","PromptInputCommand","PromptInputCommandInput","PromptInputCommandList","PromptInputCommandEmpty","PromptInputCommandGroup","PromptInputCommandItem","PromptInputCommandSeparator","motionComponentCache","getMotionComponent","element","component","motion","ShimmerComponent","Component","duration","spread","MotionComponent","dynamicSpread","Shimmer","ReasoningContext","useReasoning","AUTO_CLOSE_DELAY","MS_IN_S","Reasoning","isStreaming","onOpenChange","durationProp","resolvedDefaultOpen","isExplicitlyClosed","useControllableState","setDuration","hasEverStreamedRef","hasAutoClosed","setHasAutoClosed","startTimeRef","timer","handleOpenChange","newOpen","defaultGetThinkingMessage","ReasoningTrigger","getThinkingMessage","BrainIcon","ChevronDownIcon","ReasoningContent","Sources","SourcesTrigger","count","SourcesContent","Source","BookIcon","MAX_RECORDING_MS","isMediaRecorderSupported","getSupportedRecorderMimeType","toSpeechInputError","fallback","isAbortError","getTooltip","isSupported","isListening","isProcessing","SpeechInput","onAudioRecorded","onTranscriptionChange","setIsListening","setIsProcessing","setIsSupported","mediaRecorderRef","streamRef","audioChunksRef","maxDurationTimerRef","abortControllerRef","discardNextStopRef","disabledRef","onAudioRecordedRef","onErrorRef","onTranscriptionChangeRef","releaseStream","clearMaxDurationTimer","stopMediaRecorder","abortProcessing","cancelCapture","recorder","startMediaRecorder","mimeType","mediaRecorder","audioBlob","abortController","transcribe","transcript","isDisabled","LoaderIcon","MicIcon","Suggestions","ScrollArea","ScrollBar","Suggestion","suggestion","Tool","statusLabels","statusIcons","ClockIcon","CheckCircleIcon","CircleIcon","XCircleIcon","getStatusBadge","Badge","ToolHeader","toolName","derivedName","WrenchIcon","ToolContent","ToolInput","input","ToolOutput","output","errorText","Output","isValidElement","alertVariants","Alert","AlertTitle","AlertDescription"],"mappings":"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","file":"chunk-QHDL6CA2.js","sourcesContent":["import { SquareArrowOutUpRight as ExternalLinkIcon } from 'lucide-react';\nimport { Button } from './button';\nimport type { JSX } from 'react';\n\nexport function ExternalLink({ href, children }: { href: string; children: React.ReactNode }): JSX.Element {\n return (\n <Button asChild className=\"fk:h-6 fk:px-1! fk:py-0 fk:text-sm fk:font-light fk:text-link\" size=\"sm\" variant=\"link\">\n <a href={href} target=\"_blank\">\n {children} <ExternalLinkIcon className=\"fk:size-3\" strokeWidth={3} />\n </a>\n </Button>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Label as LabelPrimitive } from 'radix-ui';\nimport { cn } from '../lib/utils';\n\nfunction Label({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n 'fk:flex fk:items-center fk:gap-2 fk:text-sm fk:leading-none fk:font-medium fk:select-none fk:group-data-[disabled=true]:pointer-events-none fk:group-data-[disabled=true]:opacity-50 fk:peer-disabled:cursor-not-allowed fk:peer-disabled:opacity-50',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Label };\n","import * as React from 'react';\nimport { Label as LabelPrimitive, Slot } from 'radix-ui';\nimport {\n Controller,\n FormProvider,\n useFormContext,\n useFormState,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n} from 'react-hook-form';\nimport { cn } from '../lib/utils';\nimport { Label } from './label';\n\nconst Form = FormProvider;\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n name: TName;\n};\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>({} as FormFieldContextValue);\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n );\n};\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext);\n const itemContext = React.useContext(FormItemContext);\n const { getFieldState } = useFormContext();\n const formState = useFormState({ name: fieldContext.name });\n const fieldState = getFieldState(fieldContext.name, formState);\n\n if (!fieldContext) {\n throw new Error('useFormField should be used within <FormField>');\n }\n\n const { id } = itemContext;\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n };\n};\n\ntype FormItemContextValue = {\n id: string;\n};\n\nconst FormItemContext = React.createContext<FormItemContextValue>({} as FormItemContextValue);\n\nfunction FormItem({ className, ...props }: React.ComponentProps<'div'>) {\n const id = React.useId();\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div data-slot=\"form-item\" className={cn('fk:grid fk:gap-2', className)} {...props} />\n </FormItemContext.Provider>\n );\n}\n\nfunction FormLabel({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n const { error, formItemId } = useFormField();\n\n return (\n <Label\n data-slot=\"form-label\"\n data-error={!!error}\n className={cn('fk:data-[error=true]:text-destructive', className)}\n htmlFor={formItemId}\n {...props}\n />\n );\n}\n\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot.Root>) {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField();\n\n return (\n <Slot.Root\n data-slot=\"form-control\"\n id={formItemId}\n aria-describedby={!error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`}\n aria-invalid={!!error}\n {...props}\n />\n );\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<'p'>) {\n const { formDescriptionId } = useFormField();\n\n return (\n <p\n data-slot=\"form-description\"\n id={formDescriptionId}\n className={cn('fk:text-sm fk:text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nfunction FormMessage({ className, ...props }: React.ComponentProps<'p'>) {\n const { error, formMessageId } = useFormField();\n const body = error ? String(error?.message ?? '') : props.children;\n\n if (!body) {\n return null;\n }\n\n return (\n <p\n data-slot=\"form-message\"\n id={formMessageId}\n className={cn('fk:text-sm fk:text-destructive', className)}\n {...props}\n >\n {body}\n </p>\n );\n}\n\nexport { useFormField, Form, FormItem, FormLabel, FormControl, FormDescription, FormMessage, FormField };\n","'use client';\n\nimport * as React from 'react';\nimport { Checkbox as CheckboxPrimitive } from 'radix-ui';\nimport { CheckIcon } from 'lucide-react';\nimport { cn } from '../lib/utils';\n\nfunction Checkbox({ className, ...props }: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n 'fk:peer fk:size-4 fk:shrink-0 fk:rounded-[4px] fk:border fk:border-input fk:shadow-xs fk:transition-shadow fk:outline-none fk:focus-visible:border-ring fk:focus-visible:ring-[3px] fk:focus-visible:ring-ring/50 fk:disabled:cursor-not-allowed fk:disabled:opacity-50 fk:aria-invalid:border-destructive fk:aria-invalid:ring-destructive/20 fk:data-[state=checked]:border-primary fk:data-[state=checked]:bg-primary fk:data-[state=checked]:text-primary-foreground fk:dark:bg-input/30 fk:dark:aria-invalid:ring-destructive/40 fk:dark:data-[state=checked]:bg-primary fk:corner-squircle',\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"fk:grid fk:place-content-center fk:text-current fk:transition-none\"\n >\n <CheckIcon className=\"fk:size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { Checkbox };\n","'use client';\n\nimport { Collapsible as CollapsiblePrimitive } from 'radix-ui';\n\nfunction Collapsible({ ...props }: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {\n return <CollapsiblePrimitive.Root data-slot=\"collapsible\" {...props} />;\n}\n\nfunction CollapsibleTrigger({ ...props }: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) {\n return <CollapsiblePrimitive.CollapsibleTrigger data-slot=\"collapsible-trigger\" {...props} />;\n}\n\nfunction CollapsibleContent({ ...props }: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) {\n return <CollapsiblePrimitive.CollapsibleContent data-slot=\"collapsible-content\" {...props} />;\n}\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };\n","import * as React from 'react';\nimport { cn } from '../lib/utils';\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n 'fk:h-9 fk:w-full fk:min-w-0 fk:rounded-md fk:border fk:border-input fk:bg-background fk:px-3 fk:py-1 fk:text-base fk:shadow-xs fk:transition-[color,box-shadow] fk:outline-none fk:selection:bg-primary fk:selection:text-primary-foreground fk:file:inline-flex fk:file:h-7 fk:file:border-0 fk:file:bg-transparent fk:file:text-sm fk:file:font-medium fk:file:text-foreground fk:placeholder:text-muted-foreground fk:disabled:pointer-events-none fk:disabled:cursor-not-allowed fk:disabled:opacity-50 fk:md:text-sm fk:dark:bg-input/30 fk:corner-squircle',\n 'fk:focus-visible:border-ring fk:focus-visible:ring-[3px] fk:focus-visible:ring-ring/50',\n 'fk:aria-invalid:border-destructive fk:aria-invalid:ring-destructive/20 fk:dark:aria-invalid:ring-destructive/40',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","'use client';\n\nimport * as React from 'react';\nimport { Popover as PopoverPrimitive } from 'radix-ui';\nimport { cn } from '../lib/utils';\n\nfunction Popover({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\n}\n\nfunction PopoverTrigger({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n}\n\nfunction PopoverContent({\n className,\n align = 'center',\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'fk:z-50 fk:w-72 fk:origin-(--radix-popover-content-transform-origin) fk:rounded-md fk:border fk:bg-popover fk:p-4 fk:text-popover-foreground fk:shadow-md fk:outline-hidden fk:data-[side=bottom]:slide-in-from-top-2 fk:data-[side=left]:slide-in-from-right-2 fk:data-[side=right]:slide-in-from-left-2 fk:data-[side=top]:slide-in-from-bottom-2 fk:data-[state=closed]:animate-out fk:data-[state=closed]:fade-out-0 fk:data-[state=closed]:zoom-out-95 fk:data-[state=open]:animate-in fk:data-[state=open]:fade-in-0 fk:data-[state=open]:zoom-in-95 fk:corner-squircle',\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n}\n\nfunction PopoverAnchor({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />;\n}\n\nfunction PopoverHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div data-slot=\"popover-header\" className={cn('fk:flex fk:flex-col fk:gap-1 fk:text-sm', className)} {...props} />\n );\n}\n\nfunction PopoverTitle({ className, ...props }: React.ComponentProps<'h2'>) {\n return <div data-slot=\"popover-title\" className={cn('fk:font-medium', className)} {...props} />;\n}\n\nfunction PopoverDescription({ className, ...props }: React.ComponentProps<'p'>) {\n return <p data-slot=\"popover-description\" className={cn('fk:text-muted-foreground', className)} {...props} />;\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor, PopoverHeader, PopoverTitle, PopoverDescription };\n","import { GripVerticalIcon } from 'lucide-react';\nimport * as ResizablePrimitive from 'react-resizable-panels';\nimport { cn } from '../lib/utils';\n\nfunction ResizablePanelGroup({ className, ...props }: ResizablePrimitive.GroupProps) {\n return (\n <ResizablePrimitive.Group\n data-slot=\"resizable-panel-group\"\n className={cn('fk:flex fk:h-full fk:w-full fk:aria-[orientation=vertical]:flex-col', className)}\n {...props}\n />\n );\n}\n\nfunction ResizablePanel({ ...props }: ResizablePrimitive.PanelProps) {\n return <ResizablePrimitive.Panel data-slot=\"resizable-panel\" {...props} />;\n}\n\nfunction ResizableHandle({\n withHandle,\n className,\n ...props\n}: ResizablePrimitive.SeparatorProps & {\n withHandle?: boolean;\n}) {\n return (\n <ResizablePrimitive.Separator\n data-slot=\"resizable-handle\"\n className={cn(\n 'fk:relative fk:flex fk:w-px fk:items-center fk:justify-center fk:bg-border fk:after:absolute fk:after:inset-y-0 fk:after:left-1/2 fk:after:w-1 fk:after:-translate-x-1/2 fk:focus-visible:ring-1 fk:focus-visible:ring-ring fk:focus-visible:ring-offset-1 fk:focus-visible:outline-hidden fk:aria-[orientation=horizontal]:h-px fk:aria-[orientation=horizontal]:w-full fk:aria-[orientation=horizontal]:after:left-0 fk:aria-[orientation=horizontal]:after:h-1 fk:aria-[orientation=horizontal]:after:w-full fk:aria-[orientation=horizontal]:after:translate-x-0 fk:aria-[orientation=horizontal]:after:-translate-y-1/2 fk:[&[aria-orientation=horizontal]>div]:rotate-90',\n className\n )}\n {...props}\n >\n {withHandle && (\n <div className=\"fk:z-10 fk:flex fk:h-8 fk:w-3 fk:items-center fk:justify-center fk:rounded-xs fk:border fk:bg-border fk:corner-squircle\">\n <GripVerticalIcon className=\"fk:size-2.5\" />\n </div>\n )}\n </ResizablePrimitive.Separator>\n );\n}\n\nexport { ResizableHandle, ResizablePanel, ResizablePanelGroup };\n","'use client';\n\nimport * as React from 'react';\nimport { Dialog as SheetPrimitive } from 'radix-ui';\nimport { XIcon } from 'lucide-react';\nimport { cn } from '../lib/utils';\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />;\n}\n\nfunction SheetTrigger({ ...props }: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\nfunction SheetClose({ ...props }: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\nfunction SheetPortal({ ...props }: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />;\n}\n\nfunction SheetOverlay({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n 'fk:fixed fk:inset-0 fk:z-50 fk:bg-black/50 fk:data-[state=closed]:animate-out fk:data-[state=closed]:fade-out-0 fk:data-[state=open]:animate-in fk:data-[state=open]:fade-in-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SheetContent({\n className,\n children,\n side = 'right',\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: 'top' | 'right' | 'bottom' | 'left';\n showCloseButton?: boolean;\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n 'fk:fixed fk:z-50 fk:flex fk:flex-col fk:gap-4 fk:bg-background fk:shadow-lg fk:transition fk:ease-in-out fk:data-[state=closed]:animate-out fk:data-[state=closed]:duration-300 fk:data-[state=open]:animate-in fk:data-[state=open]:duration-500',\n side === 'right' &&\n 'fk:inset-y-0 fk:right-0 fk:h-full fk:w-3/4 fk:border-l fk:data-[state=closed]:slide-out-to-right fk:data-[state=open]:slide-in-from-right fk:sm:max-w-sm',\n side === 'left' &&\n 'fk:inset-y-0 fk:left-0 fk:h-full fk:w-3/4 fk:border-r fk:data-[state=closed]:slide-out-to-left fk:data-[state=open]:slide-in-from-left fk:sm:max-w-sm',\n side === 'top' &&\n 'fk:inset-x-0 fk:top-0 fk:h-auto fk:border-b fk:data-[state=closed]:slide-out-to-top fk:data-[state=open]:slide-in-from-top',\n side === 'bottom' &&\n 'fk:inset-x-0 fk:bottom-0 fk:h-auto fk:border-t fk:data-[state=closed]:slide-out-to-bottom fk:data-[state=open]:slide-in-from-bottom',\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close className=\"fk:absolute fk:top-4 fk:right-4 fk:rounded-xs fk:opacity-70 fk:ring-offset-background fk:transition-opacity fk:hover:opacity-100 fk:focus:ring-2 fk:focus:ring-ring fk:focus:ring-offset-2 fk:focus:outline-hidden fk:disabled:pointer-events-none fk:data-[state=open]:bg-secondary fk:corner-squircle\">\n <XIcon className=\"fk:size-4\" />\n <span className=\"fk:sr-only\">Close</span>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n );\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sheet-header\" className={cn('fk:flex fk:flex-col fk:gap-1.5 fk:p-4', className)} {...props} />;\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn('fk:mt-auto fk:flex fk:flex-col fk:gap-2 fk:p-4', className)}\n {...props}\n />\n );\n}\n\nfunction SheetTitle({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn('fk:font-semibold fk:text-foreground', className)}\n {...props}\n />\n );\n}\n\nfunction SheetDescription({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn('fk:text-sm fk:text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n SheetPortal,\n SheetOverlay,\n};\n","import * as React from 'react';\n\nconst MOBILE_BREAKPOINT = 768;\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined);\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n };\n mql.addEventListener('change', onChange);\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n return () => mql.removeEventListener('change', onChange);\n }, []);\n\n return !!isMobile;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Tooltip as TooltipPrimitive } from 'radix-ui';\nimport { cn } from '../lib/utils';\n\nfunction TooltipProvider({ delayDuration = 0, ...props }: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return <TooltipPrimitive.Provider data-slot=\"tooltip-provider\" delayDuration={delayDuration} {...props} />;\n}\n\nfunction Tooltip({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />;\n}\n\nfunction TooltipTrigger({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nfunction TooltipPortal({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Portal>) {\n return <TooltipPrimitive.Portal {...props} />;\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n 'fk:z-50 fk:w-fit fk:origin-(--radix-tooltip-content-transform-origin) fk:animate-in fk:rounded-md fk:bg-foreground fk:px-3 fk:py-1.5 fk:text-xs fk:text-balance fk:text-background fk:fade-in-0 fk:zoom-in-95 fk:data-[side=bottom]:slide-in-from-top-2 fk:data-[side=left]:slide-in-from-right-2 fk:data-[side=right]:slide-in-from-left-2 fk:data-[side=top]:slide-in-from-bottom-2 fk:data-[state=closed]:animate-out fk:data-[state=closed]:fade-out-0 fk:data-[state=closed]:zoom-out-95 fk:corner-squircle',\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"fk:z-50 fk:size-2.5 fk:translate-y-[calc(-50%-2px)] fk:rotate-45 fk:rounded-[2px] fk:bg-foreground fk:fill-foreground fk:corner-squircle\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider, TooltipPortal };\n","'use client';\n\nimport * as React from 'react';\nimport { Slot } from 'radix-ui';\nimport { VariantProps, cva } from 'class-variance-authority';\nimport { PanelLeftIcon } from 'lucide-react';\nimport { useIsMobile } from '../hooks/use-mobile';\nimport { cn } from '../lib/utils';\nimport { Button } from './button';\nimport { Input } from './input';\nimport { Separator } from './separator';\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from './sheet';\nimport { Skeleton } from './skeleton';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './tooltip';\n\nconst SIDEBAR_COOKIE_NAME = 'flexkit:sidebar:state';\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = '16rem';\nconst SIDEBAR_WIDTH_MOBILE = '18rem';\nconst SIDEBAR_WIDTH_ICON = '2rem';\nconst SIDEBAR_KEYBOARD_SHORTCUT = 'b';\n\ntype SidebarContextProps = {\n state: 'expanded' | 'collapsed';\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null);\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.');\n }\n\n return context;\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = React.useState(false);\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === 'function' ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [setOpenProp, open]\n );\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);\n }, [isMobile, setOpen, setOpenMobile]);\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [toggleSidebar]);\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? 'expanded' : 'collapsed';\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH,\n '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n 'fk:group/sidebar-wrapper fk:flex fk:w-full fk:has-data-[variant=inset]:bg-sidebar fk:overflow-hidden',\n className\n )}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\nfunction Sidebar({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n className,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n side?: 'left' | 'right';\n variant?: 'sidebar' | 'floating' | 'inset';\n collapsible?: 'offcanvas' | 'icon' | 'none';\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === 'none') {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn(\n 'fk:flex fk:h-full fk:w-(--sidebar-width) fk:flex-col fk:bg-sidebar fk:text-sidebar-foreground',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"fk:w-(--sidebar-width) fk:bg-sidebar fk:p-0 fk:text-sidebar-foreground fk:[&>button]:hidden\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"fk:sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"fk:flex fk:h-full fk:w-full fk:flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <div\n className=\"fk:group fk:peer flexkit-sidebar-desktop-block fk:text-sidebar-foreground\"\n data-state={state}\n data-collapsible={state === 'collapsed' ? collapsible : ''}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n 'fk:relative fk:w-(--sidebar-width) fk:bg-transparent fk:transition-[width] fk:duration-200 fk:ease-linear',\n 'fk:group-data-[collapsible=offcanvas]:w-0',\n 'fk:group-data-[side=right]:rotate-180',\n variant === 'floating' || variant === 'inset'\n ? 'fk:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n : 'fk:group-data-[collapsible=icon]:w-(--sidebar-width-icon)'\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n 'fk:relative fk:inset-y-0 fk:z-10 flexkit-sidebar-desktop-flex fk:h-[calc(100svh-3.5rem)] fk:w-(--sidebar-width) fk:transition-[left,right,width] fk:duration-200 fk:ease-linear',\n side === 'left'\n ? 'fk:left-0 fk:group-data-[collapsible=offcanvas]:-left-(--sidebar-width)'\n : 'fk:right-0 k:group-data-[collapsible=offcanvas]:-right-(--sidebar-width)',\n // Adjust the padding for floating and inset variants.\n variant === 'floating' || variant === 'inset'\n ? 'fk:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)] fk:group-data-[side=left]:border-r'\n : 'fk:group-data-[collapsible=icon]:w-(--sidebar-width-icon) fk:group-data-[side=left]:border-r fk:group-data-[side=right]:border-l',\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"fk:flex fk:h-full fk:w-full fk:flex-col fk:bg-sidebar fk:group-data-[variant=floating]:rounded-lg fk:group-data-[variant=floating]:border fk:group-data-[variant=floating]:border-sidebar-border fk:group-data-[variant=floating]:shadow-sm\"\n >\n {children}\n </div>\n </div>\n </div>\n );\n}\n\nfunction SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn('fk:size-7', className)}\n onClick={(event) => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"fk:sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<'button'>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n 'fk:absolute fk:inset-y-0 fk:z-20 flexkit-sidebar-sm-flex fk:w-4 fk:-translate-x-1/2 fk:transition-all fk:ease-linear fk:group-data-[side=left]:-right-4 fk:group-data-[side=right]:left-0 fk:after:absolute fk:after:inset-y-0 fk:after:left-1/2 fk:after:w-[2px] fk:hover:after:bg-sidebar-border',\n 'fk:in-data-[side=left]:cursor-w-resize fk:in-data-[side=right]:cursor-e-resize',\n 'fk:[[data-side=left][data-state=collapsed]_&]:cursor-e-resize fk:[[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n 'fk:group-data-[collapsible=offcanvas]:translate-x-0 fk:group-data-[collapsible=offcanvas]:after:left-full fk:hover:group-data-[collapsible=offcanvas]:bg-sidebar',\n 'fk:[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',\n 'fk:[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<'main'>) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\n 'fk:relative fk:flex fk:flex-1 fk:flex-col fk:bg-background fk:overflow-hidden fk:peer-data-[variant=inset]:h-[calc(100svh-3.625rem)]',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarInput({ className, ...props }: React.ComponentProps<typeof Input>) {\n return (\n <Input\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn('fk:h-8 fk:w-full fk:bg-background fk:shadow-none', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn('fk:flex fk:flex-col fk:gap-2 fk:p-2', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn('fk:flex fk:flex-col fk:gap-2 fk:p-2', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarSeparator({ className, ...props }: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn('fk:mx-2 fk:w-auto fk:bg-sidebar-border', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n 'fk:flex fk:min-h-0 fk:flex-1 fk:flex-col fk:overflow-auto fk:group-data-[collapsible=icon]:overflow-hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn('fk:relative fk:flex fk:w-full fk:min-w-0 fk:flex-col fk:p-2', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<'div'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : 'div';\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n 'fk:flex fk:h-8 fk:shrink-0 fk:items-center fk:rounded-md fk:px-2 fk:text-xs fk:font-medium fk:text-sidebar-foreground/70 fk:ring-sidebar-ring fk:outline-hidden fk:transition-[margin,opacity] fk:duration-200 fk:ease-linear fk:focus-visible:ring-2 fk:[&>svg]:size-4 fk:[&>svg]:shrink-0 fk:corner-squircle',\n 'fk:group-data-[collapsible=icon]:-mt-8 fk:group-data-[collapsible=icon]:opacity-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n 'fk:absolute fk:top-3.5 fk:right-3 fk:flex fk:aspect-square fk:w-5 fk:items-center fk:justify-center fk:rounded-md fk:p-0 fk:text-sidebar-foreground fk:ring-sidebar-ring fk:outline-hidden fk:transition-transform fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground fk:focus-visible:ring-2 fk:[&>svg]:size-4 fk:[&>svg]:shrink-0 fk:corner-squircle',\n // Increases the hit area of the button on mobile.\n 'fk:after:absolute fk:after:-inset-2 fk:md:after:hidden',\n 'fk:group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn('fk:w-full fk:text-sm', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn('fk:flex fk:w-full fk:min-w-0 fk:flex-col fk:gap-1', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn('fk:group/menu-item fk:relative', className)}\n {...props}\n />\n );\n}\n\nconst sidebarMenuButtonVariants = cva(\n 'fk:peer/menu-button fk:flex fk:w-full fk:items-center fk:gap-2 fk:overflow-hidden fk:rounded-md fk:p-2 fk:text-left fk:text-sm fk:ring-sidebar-ring fk:outline-hidden fk:transition-[width,height,padding] fk:group-has-data-[sidebar=menu-action]/menu-item:pr-8 fk:group-data-[collapsible=icon]:size-8! fk:group-data-[collapsible=icon]:p-2! fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground fk:focus-visible:ring-2 fk:active:bg-sidebar-accent fk:active:text-sidebar-accent-foreground fk:disabled:pointer-events-none fk:disabled:opacity-50 fk:aria-disabled:pointer-events-none fk:aria-disabled:opacity-50 fk:data-[active=true]:bg-sidebar-accent fk:data-[active=true]:font-medium fk:data-[active=true]:text-sidebar-accent-foreground fk:data-[state=open]:hover:bg-sidebar-accent fk:data-[state=open]:hover:text-sidebar-accent-foreground fk:[&>span:last-child]:truncate fk:[&>svg]:size-4 fk:[&>svg]:shrink-0 fk:corner-squircle',\n {\n variants: {\n variant: {\n default: 'fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground',\n outline:\n 'fk:bg-background fk:shadow-[0_0_0_1px_hsl(var(--sidebar-border))] fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground fk:hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]',\n },\n size: {\n default: 'fk:h-8 fk:text-sm',\n sm: 'fk:h-7 fk:text-xs',\n lg: 'fk:h-12 fk:text-sm fk:group-data-[collapsible=icon]:p-0!',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = 'default',\n size = 'default',\n tooltip,\n className,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot.Root : 'button';\n const { isMobile, state } = useSidebar();\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n if (!tooltip) {\n return button;\n }\n\n if (typeof tooltip === 'string') {\n tooltip = {\n children: tooltip,\n };\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\" align=\"center\" hidden={state !== 'collapsed' || isMobile} {...tooltip} />\n </Tooltip>\n );\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n showOnHover?: boolean;\n}) {\n const Comp = asChild ? Slot.Root : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n 'fk:absolute fk:top-1.5 fk:right-1 fk:flex fk:aspect-square fk:w-5 fk:items-center fk:justify-center fk:rounded-md fk:p-0 fk:text-sidebar-foreground fk:ring-sidebar-ring fk:outline-hidden fk:transition-transform fk:peer-hover/menu-button:text-sidebar-accent-foreground fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground fk:focus-visible:ring-2 fk:[&>svg]:size-4 fk:[&>svg]:shrink-0 fk:corner-squircle',\n // Increases the hit area of the button on mobile.\n 'fk:after:absolute fk:after:-inset-2 fk:md:after:hidden',\n 'fk:peer-data-[size=sm]/menu-button:top-1',\n 'fk:peer-data-[size=default]/menu-button:top-1.5',\n 'fk:peer-data-[size=lg]/menu-button:top-2.5',\n 'fk:group-data-[collapsible=icon]:hidden',\n showOnHover &&\n 'fk:group-focus-within/menu-item:opacity-100 fk:group-hover/menu-item:opacity-100 fk:peer-data-[active=true]/menu-button:text-sidebar-accent-foreground fk:data-[state=open]:opacity-100 fk:md:opacity-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuBadge({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n 'fk:pointer-events-none fk:absolute fk:right-1 fk:flex fk:h-5 fk:min-w-5 fk:items-center fk:justify-center fk:rounded-md fk:px-1 fk:text-xs fk:font-medium fk:text-sidebar-foreground fk:tabular-nums fk:select-none fk:corner-squircle',\n 'fk:peer-hover/menu-button:text-sidebar-accent-foreground fk:peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n 'fk:peer-data-[size=sm]/menu-button:top-1',\n 'fk:peer-data-[size=default]/menu-button:top-1.5',\n 'fk:peer-data-[size=lg]/menu-button:top-2.5',\n 'fk:group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<'div'> & {\n showIcon?: boolean;\n}) {\n // Random width between 50 to 90%.\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n }, []);\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn('fk:flex fk:h-8 fk:items-center fk:gap-2 fk:rounded-md fk:px-2 fk:corner-squircle', className)}\n {...props}\n >\n {showIcon && <Skeleton className=\"fk:size-4 fk:rounded-md fk:corner-squircle\" data-sidebar=\"menu-skeleton-icon\" />}\n <Skeleton\n className=\"fk:h-4 fk:max-w-(--skeleton-width) fk:flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n '--skeleton-width': width,\n } as React.CSSProperties\n }\n />\n </div>\n );\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n 'fk:mx-3.5 fk:flex fk:min-w-0 fk:translate-x-px fk:flex-col fk:gap-1 fk:border-l fk:border-sidebar-border fk:px-2.5 fk:py-0.5',\n 'fk:group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn('fk:group/menu-sub-item fk:relative', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = 'md',\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<'a'> & {\n asChild?: boolean;\n size?: 'sm' | 'md';\n isActive?: boolean;\n}) {\n const Comp = asChild ? Slot.Root : 'a';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n 'fk:flex fk:h-7 fk:min-w-0 fk:-translate-x-px fk:items-center fk:gap-2 fk:overflow-hidden fk:rounded-md fk:px-2 fk:text-sidebar-foreground fk:ring-sidebar-ring fk:outline-hidden fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground fk:focus-visible:ring-2 fk:active:bg-sidebar-accent fk:active:text-sidebar-accent-foreground fk:disabled:pointer-events-none fk:disabled:opacity-50 fk:aria-disabled:pointer-events-none fk:aria-disabled:opacity-50 fk:[&>span:last-child]:truncate fk:[&>svg]:size-4 fk:[&>svg]:shrink-0 fk:[&>svg]:text-sidebar-accent-foreground fk:corner-squircle',\n 'fk:data-[active=true]:bg-sidebar-accent fk:data-[active=true]:text-sidebar-accent-foreground',\n size === 'sm' && 'fk:text-xs',\n size === 'md' && 'fk:text-sm',\n 'fk:group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n};\n","/** `FolderTree` → `folder-tree`, `Clock10` → `clock-10`, `folder-tree` → `folder-tree`. */\nexport function toIconName(name: string): string {\n return name\n .trim()\n .replace(/([a-z])([A-Z0-9])/g, '$1-$2')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n}\n\n/** Shown for entities that declare no icon and whose name is not itself an icon name. */\nexport const DEFAULT_ICON_NAME = 'dock';\n\n/** `arrow-down-0-1` → `ArrowDown01`: the component name lucide exports for a kebab icon name. */\nexport function toPascalIconName(name: string): string {\n return name.replace(/(^|-)([a-z0-9])/g, (_, __, char: string) => char.toUpperCase());\n}\n\n/**\n * Builds a resolver over the available icon names.\n *\n * `name` (from `menu.icon`) is accepted as a kebab name or as lucide's\n * PascalCase component name. Without one, an entity gets the icon that shares\n * its name exactly, allowing for a plural `s` either way (`tag` → `tags`,\n * `languages` → `languages`); anything looser produced unrelated icons, so\n * everything else falls back to `DEFAULT_ICON_NAME`.\n */\nexport function createIconResolver(\n iconNames: readonly string[]\n): (name: string | undefined, fallbackFor?: string) => string {\n const available = new Set<string>(iconNames);\n // Kebab → PascalCase is lossy (`arrow-down-0-1` and `clock-10` both keep\n // their digits differently), so map every known PascalCase name explicitly.\n // Aliases (`arrow-down-0-1`, `arrow-down-01`) share a PascalCase name; the first one wins.\n const byPascalName = new Map<string, string>();\n\n for (const candidate of iconNames) {\n const pascal = toPascalIconName(candidate);\n\n if (!byPascalName.has(pascal)) {\n byPascalName.set(pascal, candidate);\n }\n }\n\n const findExact = (value: string): string | undefined => {\n const trimmed = value.trim();\n\n if (available.has(trimmed)) {\n return trimmed;\n }\n\n const pascal = byPascalName.get(trimmed);\n\n if (pascal) {\n return pascal;\n }\n\n const kebab = toIconName(trimmed);\n\n return available.has(kebab) ? kebab : undefined;\n };\n\n return (name, fallbackFor) => {\n if (name) {\n const exact = findExact(name);\n\n if (exact) {\n return exact;\n }\n }\n\n if (fallbackFor) {\n const kebab = toIconName(fallbackFor);\n const candidates = [kebab, `${kebab}s`, kebab.endsWith('s') ? kebab.slice(0, -1) : ''].filter(Boolean);\n const match = candidates.find((candidate) => available.has(candidate));\n\n if (match) {\n return match;\n }\n }\n\n return DEFAULT_ICON_NAME;\n };\n}\n","import type { JSX } from 'react';\nimport { DynamicIcon, iconNames } from 'lucide-react/dynamic';\nimport type { IconName } from 'lucide-react/dynamic';\nimport { createIconResolver } from './icon-name';\n\nconst resolve = createIconResolver(iconNames);\n\n/** Picks the lucide icon to render for `name`, see `createIconResolver`. */\nexport function resolveIconName(name: string | undefined, fallbackFor?: string): IconName {\n return resolve(name, fallbackFor) as IconName;\n}\n\ntype Props = {\n /** Lucide icon name, PascalCase (`'Tag'`) or kebab-case (`'tag'`). */\n name?: string;\n /** Concept to fuzzy-match an icon for when `name` is missing or unknown. */\n fallbackFor?: string;\n className?: string;\n strokeWidth?: number;\n};\n\n/**\n * Renders a lucide icon by name. Icons load as separate chunks, so the whole\n * icon set stays out of the main bundle. A fixed-size placeholder keeps the\n * layout stable while a chunk loads.\n */\nexport function Icon({ name, fallbackFor, className = 'fk:h-4 fk:w-4', strokeWidth = 2 }: Props): JSX.Element {\n return (\n <DynamicIcon\n className={className}\n fallback={() => <span aria-hidden className={`fk:inline-block ${className}`} />}\n name={resolveIconName(name, fallbackFor)}\n strokeWidth={strokeWidth}\n />\n );\n}\n","import type { JSX } from 'react';\nimport { NavLink } from 'react-router-dom';\nimport {\n Sidebar as SidebarPrimitive,\n SidebarContent,\n SidebarGroup,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuItem,\n SidebarMenuButton,\n SidebarRail,\n} from '../primitives/sidebar';\nimport type { Entity, MenuGroup } from '../../core/types';\nimport { groupBy } from 'ramda';\nimport { Icon } from './icon';\n\nconst NavLinkCompat = NavLink as unknown as React.ComponentType<{\n children?: React.ReactNode;\n to: string;\n}>;\n\ninterface SidebarProps extends React.HTMLAttributes<HTMLDivElement> {\n className?: string;\n menuGroups?: MenuGroup[];\n schema: Entity[];\n}\n\nexport function Sidebar({ className, menuGroups, schema }: SidebarProps): JSX.Element {\n // Filter out hidden items first, then group them\n const visibleItems = schema.filter((item) => item.menu?.hidden !== true);\n const itemsByGroup = groupBy(\n (item) => (item.menu?.group && menuGroups?.find((g) => g.name === item.menu?.group)?.name) || 'ungrouped',\n visibleItems\n );\n const nonEmptyGroups = menuGroups?.filter((menuGroup) => itemsByGroup[menuGroup.name]?.length);\n\n return (\n <SidebarPrimitive className={className} collapsible=\"icon\" variant=\"inset\">\n <SidebarContent>\n {nonEmptyGroups?.map((group) => (\n <SidebarGroup key={group.name}>\n <SidebarGroupLabel>{group.title}</SidebarGroupLabel>\n <SidebarMenu>\n {itemsByGroup[group.name]?.map((entity) => (\n <SidebarMenuItem key={entity.plural}>\n <SidebarMenuButton\n asChild\n isActive={location.pathname.includes(`/list/${entity.plural}`)}\n tooltip={capitalize(entity.menu?.label ?? entity.plural)}\n >\n <NavLinkCompat to={`list/${entity.plural}`}>\n <Icon className=\"fk:h-4 fk:w-4 fk:mr-2\" fallbackFor={entity.name} name={entity.menu?.icon} />\n <span>{capitalize(entity.menu?.label ?? entity.plural)}</span>\n </NavLinkCompat>\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroup>\n ))}\n <SidebarGroup>\n <SidebarMenu>\n {itemsByGroup['ungrouped']?.map((entity) => (\n <SidebarMenuItem key={entity.plural}>\n <SidebarMenuButton\n asChild\n isActive={location.pathname.includes(`/list/${entity.plural}`)}\n tooltip={capitalize(entity.menu?.label ?? entity.plural)}\n >\n <NavLinkCompat to={`list/${entity.plural}`}>\n <Icon className=\"fk:h-4 fk:w-4 fk:mr-2\" fallbackFor={entity.name} name={entity.menu?.icon} />\n <span>{capitalize(entity.menu?.label ?? entity.plural)}</span>\n </NavLinkCompat>\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroup>\n </SidebarContent>\n <SidebarRail />\n </SidebarPrimitive>\n );\n}\n\nfunction capitalize(str: string): string {\n // Add space before capital letters and capitalize first letter\n const withSpaces = str.replace(/([A-Z])/g, ' $1');\n // Capitalize first letter and trim any leading space\n return withSpaces.charAt(0).toUpperCase() + withSpaces.slice(1).trim();\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Switch as SwitchPrimitive } from 'radix-ui';\nimport { cn } from '../lib/utils';\n\nfunction Switch({\n className,\n size = 'default',\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: 'sm' | 'default';\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n 'fk:peer fk:group/switch fk:inline-flex fk:shrink-0 fk:items-center fk:rounded-full fk:border fk:border-transparent fk:shadow-xs fk:transition-all fk:outline-none fk:focus-visible:border-ring fk:focus-visible:ring-[3px] fk:focus-visible:ring-ring/50 fk:disabled:cursor-not-allowed fk:disabled:opacity-50 fk:data-[size=default]:h-5 fk:data-[size=default]:w-8 fk:data-[size=sm]:h-3.5 fk:data-[size=sm]:w-6 fk:data-[state=checked]:bg-success fk:data-[state=unchecked]:bg-input fk:dark:data-[state=unchecked]:bg-input/80 fk:corner-squircle',\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n 'fk:pointer-events-none fk:block fk:rounded-full fk:bg-white fk:ring-0 fk:transition-transform fk:group-data-[size=default]/switch:size-3.75 fk:group-data-[size=sm]/switch:size-3 fk:data-[state=checked]:translate-x-[calc(100%-2px)] fk:data-[state=unchecked]:translate-x-0.25 fk:dark:data-[state=checked]:bg-white fk:dark:data-[state=unchecked]:bg-white fk:corner-squircle'\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import * as React from 'react';\nimport { cn } from '../lib/utils';\n\ntype TableProps = Omit<React.ComponentProps<'table'>, 'ref'> & {\n containerClassName?: string;\n ref?: React.Ref<HTMLDivElement>;\n};\n\nfunction Table({ className, containerClassName, onScroll, ref, ...props }: TableProps) {\n return (\n <div\n ref={ref}\n data-slot=\"table-container\"\n className={cn(\n 'fk:relative fk:h-full fk:w-full fk:min-w-0 fk:overflow-auto fk:rounded-t-md fk:border-border fk:border fk:corner-squircle',\n containerClassName\n )}\n onScroll={onScroll}\n >\n <table data-slot=\"table\" className={cn('fk:w-full fk:caption-bottom fk:text-sm', className)} {...props} />\n </div>\n );\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<'thead'>) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn('fk:[&_tr]:border-b fk:bg-muted fk:dark:bg-muted', className)}\n {...props}\n />\n );\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<'tbody'>) {\n return <tbody data-slot=\"table-body\" className={cn('fk:[&_tr:last-child]:border-0', className)} {...props} />;\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<'tfoot'>) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn('fk:border-t fk:bg-muted/50 fk:font-medium fk:[&>tr]:last:border-b-0', className)}\n {...props}\n />\n );\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<'tr'>) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n 'fk:border-b fk:transition-colors fk:hover:bg-muted/50 fk:has-aria-expanded:bg-muted/50 fk:data-[state=selected]:bg-muted',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<'th'>) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n 'fk:h-10 fk:px-4 fk:text-left fk:align-middle fk:font-medium fk:whitespace-nowrap fk:text-foreground fk:[&:has([role=checkbox])]:pr-0 fk:*:[[role=checkbox]]:translate-y-[2px]',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<'td'>) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n 'fk:px-4 fk:py-1 fk:align-middle fk:whitespace-nowrap fk:[&:has([role=checkbox])]:pr-0 fk:*:[[role=checkbox]]:translate-y-[2px]',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableCaption({ className, ...props }: React.ComponentProps<'caption'>) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn('fk:mt-4 fk:pb-2 fk:text-sm fk:text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nexport { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption };\n","'use client';\n\nimport * as React from 'react';\nimport { Tabs as TabsPrimitive } from 'radix-ui';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../lib/utils';\n\nfunction Tabs({ className, orientation = 'horizontal', ...props }: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-orientation={orientation}\n orientation={orientation}\n className={cn('fk:group/tabs fk:flex fk:data-[orientation=horizontal]:flex-col', className)}\n {...props}\n />\n );\n}\n\nconst tabsListVariants = cva(\n 'fk:group/tabs-list fk:inline-flex fk:w-fit fk:items-center fk:justify-center fk:rounded-lg fk:text-muted-foreground fk:group-data-[orientation=horizontal]/tabs:h-9 fk:group-data-[orientation=vertical]/tabs:h-fit fk:group-data-[orientation=vertical]/tabs:flex-col fk:data-[variant=line]:rounded-none fk:corner-squircle',\n {\n variants: {\n variant: {\n default: 'fk:bg-muted',\n line: 'fk:gap-1 fk:bg-transparent',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nfunction TabsList({\n className,\n variant = 'default',\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List> & VariantProps<typeof tabsListVariants>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n data-variant={variant}\n className={cn(tabsListVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({\n className,\n type = 'button',\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n type={type}\n className={cn(\n \"fk:relative fk:inline-flex fk:h-[calc(100%-1px)] fk:flex-1 fk:items-center fk:justify-center fk:gap-1.5 fk:rounded-md fk:border fk:border-transparent! fk:px-4 fk:py-1 fk:text-sm fk:font-medium fk:whitespace-nowrap fk:text-foreground/60 fk:transition-all fk:group-data-[orientation=vertical]/tabs:w-full fk:group-data-[orientation=vertical]/tabs:justify-start fk:hover:text-foreground fk:focus-visible:border-ring! fk:focus-visible:ring-[3px] fk:focus-visible:ring-ring/50 fk:focus-visible:outline-1 fk:focus-visible:outline-ring fk:disabled:pointer-events-none fk:disabled:opacity-50 fk:group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm fk:group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none fk:dark:text-muted-foreground fk:dark:hover:text-foreground fk:[&_svg]:pointer-events-none fk:[&_svg]:shrink-0 fk:[&_svg:not([class*='size-'])]:size-4 fk:corner-squircle\",\n 'fk:group-data-[variant=line]/tabs-list:bg-transparent fk:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent fk:dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent! fk:dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent',\n 'fk:data-[state=active]:bg-background fk:data-[state=active]:text-foreground fk:dark:data-[state=active]:bg-muted-foreground/10 fk:dark:data-[state=active]:text-foreground fk:data-[state=active]:scale-[1.05]',\n 'fk:after:absolute fk:after:bg-foreground fk:after:opacity-0 fk:after:transition-opacity fk:group-data-[orientation=horizontal]/tabs:after:inset-x-0 fk:group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] fk:group-data-[orientation=horizontal]/tabs:after:h-0.5 fk:group-data-[orientation=vertical]/tabs:after:inset-y-0 fk:group-data-[orientation=vertical]/tabs:after:-right-1 fk:group-data-[orientation=vertical]/tabs:after:w-0.5 fk:group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn('fk:flex-1 fk:outline-none fk:flex fk:flex-col', className)}\n {...props}\n />\n );\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants };\n","import * as React from 'react';\nimport { cn } from '../lib/utils';\n\nfunction Textarea({ className, ...props }: React.ComponentProps<'textarea'>) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n 'fk:flex fk:field-sizing-content fk:min-h-16 fk:w-full fk:rounded-md fk:border fk:border-input fk:bg-background fk:px-3 fk:py-2 fk:text-base fk:shadow-xs fk:transition-[color,box-shadow] fk:outline-none fk:placeholder:text-muted-foreground fk:focus-visible:border-ring fk:focus-visible:ring-[3px] fk:focus-visible:ring-ring/50 fk:disabled:cursor-not-allowed fk:disabled:opacity-50 fk:aria-invalid:border-destructive fk:aria-invalid:ring-destructive/20 fk:md:text-sm fk:dark:bg-input/30 fk:dark:aria-invalid:ring-destructive/40 fk:corner-squircle',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Textarea };\n","'use client';\n\nimport * as React from 'react';\nimport { Toggle as TogglePrimitive } from 'radix-ui';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../lib/utils';\n\nconst toggleVariants = cva(\n \"fk:inline-flex fk:items-center fk:justify-center fk:gap-2 fk:rounded-md fk:text-sm fk:font-medium fk:whitespace-nowrap fk:transition-[color,box-shadow] fk:outline-none fk:hover:bg-muted fk:hover:text-muted-foreground fk:focus-visible:border-ring fk:focus-visible:ring-[3px] fk:focus-visible:ring-ring/50 fk:disabled:pointer-events-none fk:disabled:opacity-50 fk:aria-invalid:border-destructive fk:aria-invalid:ring-destructive/20 fk:data-[state=on]:bg-accent fk:data-[state=on]:text-accent-foreground fk:dark:aria-invalid:ring-destructive/40 fk:[&_svg]:pointer-events-none fk:[&_svg]:shrink-0 fk:[&_svg:not([class*='size-'])]:size-4 fk:corner-squircle\",\n {\n variants: {\n variant: {\n default: 'fk:bg-transparent',\n outline:\n 'fk:border fk:border-input fk:bg-transparent fk:shadow-xs fk:hover:bg-accent fk:hover:text-accent-foreground',\n },\n size: {\n default: 'fk:h-9 fk:min-w-9 fk:px-2',\n sm: 'fk:h-8 fk:min-w-8 fk:px-1.5',\n lg: 'fk:h-10 fk:min-w-10 fk:px-2.5',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nfunction Toggle({\n className,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive.Root data-slot=\"toggle\" className={cn(toggleVariants({ variant, size, className }))} {...props} />\n );\n}\n\nexport { Toggle, toggleVariants };\n","'use client';\n\nimport * as React from 'react';\nimport { ToggleGroup as ToggleGroupPrimitive } from 'radix-ui';\nimport type { VariantProps } from 'class-variance-authority';\nimport { cn } from '../lib/utils';\nimport { toggleVariants } from './toggle';\n\nconst ToggleGroupContext = React.createContext<\n VariantProps<typeof toggleVariants> & {\n spacing?: number;\n }\n>({\n size: 'default',\n variant: 'default',\n spacing: 0,\n});\n\nfunction ToggleGroup({\n className,\n variant,\n size,\n spacing = 0,\n children,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &\n VariantProps<typeof toggleVariants> & {\n spacing?: number;\n }) {\n return (\n <ToggleGroupPrimitive.Root\n data-slot=\"toggle-group\"\n data-variant={variant}\n data-size={size}\n data-spacing={spacing}\n style={{ '--gap': spacing } as React.CSSProperties}\n className={cn(\n 'fk:group/toggle-group fk:flex fk:w-fit fk:items-center fk:gap-[--spacing(var(--gap))] fk:rounded-md fk:data-[spacing=default]:data-[variant=outline]:shadow-xs fk:corner-squircle',\n className\n )}\n {...props}\n >\n <ToggleGroupContext.Provider value={{ variant, size, spacing }}>{children}</ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n );\n}\n\nfunction ToggleGroupItem({\n className,\n children,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> & VariantProps<typeof toggleVariants>) {\n const context = React.useContext(ToggleGroupContext);\n\n return (\n <ToggleGroupPrimitive.Item\n data-slot=\"toggle-group-item\"\n data-variant={context.variant || variant}\n data-size={context.size || size}\n data-spacing={context.spacing}\n className={cn(\n toggleVariants({\n variant: context.variant || variant,\n size: context.size || size,\n }),\n 'fk:w-auto fk:min-w-0 fk:shrink-0 fk:px-3 fk:focus:z-10 fk:focus-visible:z-10',\n 'fk:data-[spacing=0]:rounded-none fk:data-[spacing=0]:shadow-none fk:data-[spacing=0]:first:rounded-l-md fk:data-[spacing=0]:last:rounded-r-md fk:data-[spacing=0]:data-[variant=outline]:border-l-0 fk:data-[spacing=0]:data-[variant=outline]:first:border-l',\n className\n )}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Item>\n );\n}\n\nexport { ToggleGroup, ToggleGroupItem };\n","'use client';\n\nimport { Info } from 'lucide-react';\nimport type { JSX, ReactNode } from 'react';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../primitives/tooltip';\n\nexport function InsufficientPermissionsTooltipContent(): JSX.Element {\n return (\n <TooltipContent className=\"fk:max-w-64 fk:p-3\">\n <div className=\"fk:flex fk:gap-2.5\">\n <Info className=\"fk:mt-0.5 fk:h-4 fk:w-4 fk:shrink-0 fk:opacity-70\" />\n <div className=\"fk:flex fk:flex-col fk:gap-1\">\n <p className=\"fk:text-sm fk:font-semibold fk:leading-none\">Insufficient permissions</p>\n <p className=\"fk:text-xs fk:opacity-70 fk:leading-snug\">Your member role cannot perform this action</p>\n </div>\n </div>\n </TooltipContent>\n );\n}\n\n/**\n * Wraps a disabled control so it still shows an \"Insufficient permissions\"\n * tooltip on hover (disabled buttons swallow pointer events, hence the span).\n */\nexport function PermissionTooltip({ disabled, children }: { disabled: boolean; children: ReactNode }): JSX.Element {\n if (!disabled) {\n return <>{children}</>;\n }\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"fk:inline-flex\">{children}</span>\n </TooltipTrigger>\n <InsufficientPermissionsTooltipContent />\n </Tooltip>\n </TooltipProvider>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Drawer as DrawerPrimitive } from 'vaul';\nimport { cn } from '../lib/utils';\n\ntype DrawerPortalProps = React.PropsWithChildren<{\n container?: HTMLElement | null;\n}>;\n\nconst DrawerPrimitivePortal = DrawerPrimitive.Portal as React.ComponentType<DrawerPortalProps>;\n\nfunction Drawer({ ...props }: React.ComponentProps<typeof DrawerPrimitive.Root>) {\n return <DrawerPrimitive.Root data-slot=\"drawer\" {...props} />;\n}\n\nfunction DrawerTrigger({ ...props }: React.ComponentProps<typeof DrawerPrimitive.Trigger>) {\n return <DrawerPrimitive.Trigger data-slot=\"drawer-trigger\" {...props} />;\n}\n\nfunction DrawerPortal({ ...props }: DrawerPortalProps) {\n return <DrawerPrimitivePortal {...props} />;\n}\n\nfunction DrawerClose({ ...props }: React.ComponentProps<typeof DrawerPrimitive.Close>) {\n return <DrawerPrimitive.Close data-slot=\"drawer-close\" {...props} />;\n}\n\nfunction DrawerOverlay({ className, ...props }: React.ComponentProps<typeof DrawerPrimitive.Overlay>) {\n return (\n <DrawerPrimitive.Overlay\n data-slot=\"drawer-overlay\"\n className={cn(\n 'fk:fixed fk:inset-0 fk:z-50 fk:bg-overlay/75 fk:backdrop-blur-[1px] fk:data-[state=closed]:animate-out fk:data-[state=closed]:fade-out-0 fk:data-[state=open]:animate-in fk:data-[state=open]:fade-in-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction DrawerContent({ className, children, ...props }: React.ComponentProps<typeof DrawerPrimitive.Content>) {\n return (\n <DrawerPortal>\n <DrawerOverlay />\n <DrawerPrimitive.Content\n data-slot=\"drawer-content\"\n className={cn(\n 'fk:group/drawer-content fk:fixed fk:z-50 fk:flex fk:h-auto fk:flex-col fk:bg-background',\n 'fk:data-[vaul-drawer-direction=top]:inset-x-0 fk:data-[vaul-drawer-direction=top]:top-0 fk:data-[vaul-drawer-direction=top]:mb-24 fk:data-[vaul-drawer-direction=top]:max-h-[80vh] fk:data-[vaul-drawer-direction=top]:rounded-b-lg fk:data-[vaul-drawer-direction=top]:border-b',\n 'fk:data-[vaul-drawer-direction=bottom]:inset-x-0 fk:data-[vaul-drawer-direction=bottom]:bottom-0 fk:data-[vaul-drawer-direction=bottom]:mt-24 fk:data-[vaul-drawer-direction=bottom]:max-h-[80vh] fk:data-[vaul-drawer-direction=bottom]:rounded-t-lg fk:data-[vaul-drawer-direction=bottom]:border-t',\n 'fk:data-[vaul-drawer-direction=right]:inset-y-0 fk:data-[vaul-drawer-direction=right]:right-0 fk:data-[vaul-drawer-direction=right]:w-full fk:data-[vaul-drawer-direction=right]:max-w-[clamp(40vw,95vw,60rem)] fk:data-[vaul-drawer-direction=right]:border-l fk:rounded-l-[20px] fk:corner-squircle',\n 'fk:data-[vaul-drawer-direction=left]:inset-y-0 fk:data-[vaul-drawer-direction=left]:left-0 fk:data-[vaul-drawer-direction=left]:w-3/4 fk:data-[vaul-drawer-direction=left]:border-r fk:data-[vaul-drawer-direction=left]:sm:max-w-sm',\n className\n )}\n {...props}\n >\n <div\n className={cn(\n 'fk:absolute fk:z-10 fk:hidden fk:shrink-0 fk:rounded-full fk:bg-muted fk:corner-squircle',\n 'fk:group-data-[vaul-drawer-direction=bottom]/drawer-content:top-4 fk:group-data-[vaul-drawer-direction=bottom]/drawer-content:left-1/2 fk:group-data-[vaul-drawer-direction=bottom]/drawer-content:block fk:group-data-[vaul-drawer-direction=bottom]/drawer-content:h-2 fk:group-data-[vaul-drawer-direction=bottom]/drawer-content:w-[100px] fk:group-data-[vaul-drawer-direction=bottom]/drawer-content:-translate-x-1/2',\n 'fk:group-data-[vaul-drawer-direction=top]/drawer-content:bottom-4 fk:group-data-[vaul-drawer-direction=top]/drawer-content:left-1/2 fk:group-data-[vaul-drawer-direction=top]/drawer-content:block fk:group-data-[vaul-drawer-direction=top]/drawer-content:h-2 fk:group-data-[vaul-drawer-direction=top]/drawer-content:w-[100px] fk:group-data-[vaul-drawer-direction=top]/drawer-content:-translate-x-1/2',\n 'fk:group-data-[vaul-drawer-direction=right]/drawer-content:left-3 fk:group-data-[vaul-drawer-direction=right]/drawer-content:top-1/2 fk:group-data-[vaul-drawer-direction=right]/drawer-content:block fk:group-data-[vaul-drawer-direction=right]/drawer-content:h-[100px] fk:group-data-[vaul-drawer-direction=right]/drawer-content:w-2 fk:group-data-[vaul-drawer-direction=right]/drawer-content:-translate-y-1/2',\n 'fk:group-data-[vaul-drawer-direction=left]/drawer-content:right-4 fk:group-data-[vaul-drawer-direction=left]/drawer-content:top-1/2 fk:group-data-[vaul-drawer-direction=left]/drawer-content:block fk:group-data-[vaul-drawer-direction=left]/drawer-content:h-[100px] fk:group-data-[vaul-drawer-direction=left]/drawer-content:w-2 fk:group-data-[vaul-drawer-direction=left]/drawer-content:-translate-y-1/2'\n )}\n />\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n );\n}\n\nfunction DrawerHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"drawer-header\"\n className={cn(\n 'fk:flex fk:gap-2.5 fk:p-4 fk:group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center fk:group-data-[vaul-drawer-direction=top]/drawer-content:text-center fk:md:text-left',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction DrawerFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"drawer-footer\"\n className={cn('fk:mt-auto fk:flex fk:flex-col fk:gap-2 fk:p-4', className)}\n {...props}\n />\n );\n}\n\nfunction DrawerTitle({ className, ...props }: React.ComponentProps<typeof DrawerPrimitive.Title>) {\n return (\n <DrawerPrimitive.Title\n data-slot=\"drawer-title\"\n className={cn('fk:flex fk:items-center fk:text-lg fk:font-semibold fk:leading-none fk:tracking-tight', className)}\n {...props}\n />\n );\n}\n\nfunction DrawerDescription({ className, ...props }: React.ComponentProps<typeof DrawerPrimitive.Description>) {\n return (\n <DrawerPrimitive.Description\n data-slot=\"drawer-description\"\n className={cn('fk:text-sm fk:text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nexport {\n Drawer,\n DrawerPortal,\n DrawerOverlay,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n};\n","'use client';\n\nimport type { JSX } from 'react';\nimport { useCallback, useEffect, useState } from 'react';\nimport type { Dispatch, ReactNode, SetStateAction } from 'react';\nimport { X as CloseIcon } from 'lucide-react';\nimport { Button } from '../primitives/button';\nimport { Drawer, DrawerContent, DrawerDescription, DrawerHeader, DrawerTitle } from '../primitives/drawer';\nimport { Separator } from '../primitives/separator';\nimport { Skeleton } from '../primitives/skeleton';\n\ntype Props = {\n actions: ReactNode;\n beforeClose?: () => boolean;\n children: ReactNode;\n depth: number; // how many drawers are open, to control the width of the drawers\n /**\n * Close the drawer without running `beforeClose` (used after confirming discard).\n * Lets Vaul release its body lock instead of hard-unmounting an open drawer.\n */\n forceClose?: boolean;\n isFocused: boolean; // whether the drawer is the last one open\n onFormChange?: Dispatch<SetStateAction<boolean>>; // a callback executed everyt time the form changes its state\n onClose: () => void;\n title: string;\n};\n\nexport default function DrawerModal({\n actions,\n beforeClose,\n children,\n depth,\n forceClose = false,\n isFocused,\n onFormChange: _onFormChange,\n onClose,\n title,\n}: Props): JSX.Element {\n const [isOpen, setIsOpen] = useState(false);\n const gutter = depth * (50 / depth);\n\n const closeDrawer = useCallback(() => {\n setIsOpen(false);\n globalThis.setTimeout(() => {\n onClose();\n }, 150);\n }, [onClose]);\n\n const handleClose = useCallback(() => {\n if (forceClose) {\n return;\n }\n\n const shouldClose = beforeClose ? beforeClose() : true;\n\n if (!shouldClose) {\n return;\n }\n\n closeDrawer();\n }, [beforeClose, closeDrawer, forceClose]);\n\n useEffect(() => {\n if (!forceClose) {\n return;\n }\n\n closeDrawer();\n }, [closeDrawer, forceClose]);\n\n const onEscapeKeyPressed = useCallback(\n (event: KeyboardEvent): void => {\n if (event.key === 'Escape' && isFocused) {\n handleClose();\n }\n },\n [handleClose, isFocused]\n );\n\n useEffect(() => {\n setIsOpen(true);\n // overwrite \"background: black\" set by Vaul in the body, and add missing bottom: 0 style\n globalThis.document.body.classList.add('fk-drawer-fix');\n\n return () => {\n globalThis.document.body.classList.remove('fk-drawer-fix');\n };\n }, []);\n\n useEffect(() => {\n globalThis.document.addEventListener('keydown', onEscapeKeyPressed, false);\n\n return () => {\n globalThis.document.removeEventListener('keydown', onEscapeKeyPressed, false);\n };\n }, [onEscapeKeyPressed]);\n\n return (\n <Drawer\n direction=\"right\"\n dismissible={false}\n onClose={() => {\n handleClose();\n }}\n open={isOpen}\n >\n <DrawerContent style={isFocused ? {} : { maxWidth: `calc(100% - ${gutter.toString()}px)` }}>\n <DrawerHeader className=\"fk:px-10\">\n <DrawerTitle className=\"fk:w-full\">\n {title ? title : <Skeleton className=\"fk:h-5 fk:w-[120px]\" />}\n </DrawerTitle>\n <DrawerDescription className=\"fk:sr-only\">{title ? title : 'Loading form'}</DrawerDescription>\n {actions}\n <Button className=\"\" onClick={handleClose} size=\"icon\" variant=\"ghost\">\n <CloseIcon className=\"fk:h-4 fk:w-4\" />\n <span className=\"fk:sr-only\">Close</span>\n </Button>\n </DrawerHeader>\n <Separator />\n <div className=\"fk:min-h-0 fk:px-10 fk:pt-6 fk:h-full fk:overflow-y-auto fk:pb-16\" data-vaul-no-drag>\n {children}\n </div>\n </DrawerContent>\n </Drawer>\n );\n}\n","'use client';\n\nimport { CircleCheckIcon, InfoIcon, Loader2Icon, OctagonXIcon, TriangleAlertIcon } from 'lucide-react';\nimport { useTheme } from '../theme-context';\nimport { toast, Toaster as Sonner, type ToasterProps } from 'sonner';\n\nconst Toaster = ({ richColors = true, style, ...props }: ToasterProps) => {\n const { theme = 'system' } = useTheme();\n\n return (\n <Sonner\n theme={theme as ToasterProps['theme']}\n richColors={richColors}\n className=\"toaster group\"\n icons={{\n success: <CircleCheckIcon className=\"fk:size-4\" />,\n info: <InfoIcon className=\"fk:size-4\" />,\n warning: <TriangleAlertIcon className=\"fk:size-4\" />,\n error: <OctagonXIcon className=\"fk:size-4\" />,\n loading: <Loader2Icon className=\"fk:size-4 fk:animate-spin\" />,\n }}\n style={\n {\n '--normal-bg': 'hsl(var(--popover))',\n '--normal-text': 'hsl(var(--popover-foreground))',\n '--normal-border': 'hsl(var(--border))',\n '--border-radius': 'var(--radius)',\n ...style,\n } as React.CSSProperties\n }\n {...props}\n />\n );\n};\n\nexport { toast, Toaster };\n","'use client';\n\nimport * as React from 'react';\nimport { HoverCard as HoverCardPrimitive } from 'radix-ui';\nimport { cn } from '../lib/utils';\n\nfunction HoverCard({ ...props }: React.ComponentProps<typeof HoverCardPrimitive.Root>) {\n return <HoverCardPrimitive.Root data-slot=\"hover-card\" {...props} />;\n}\n\nfunction HoverCardTrigger({ ...props }: React.ComponentProps<typeof HoverCardPrimitive.Trigger>) {\n return <HoverCardPrimitive.Trigger data-slot=\"hover-card-trigger\" {...props} />;\n}\n\nfunction HoverCardContent({\n className,\n align = 'center',\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Content>) {\n return (\n <HoverCardPrimitive.Portal data-slot=\"hover-card-portal\">\n <HoverCardPrimitive.Content\n data-slot=\"hover-card-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'fk:z-50 fk:w-64 fk:origin-(--radix-hover-card-content-transform-origin) fk:rounded-md fk:border fk:bg-popover fk:p-4 fk:text-popover-foreground fk:shadow-md fk:outline-hidden fk:data-[side=bottom]:slide-in-from-top-2 fk:data-[side=left]:slide-in-from-right-2 fk:data-[side=right]:slide-in-from-left-2 fk:data-[side=top]:slide-in-from-bottom-2 fk:data-[state=closed]:animate-out fk:data-[state=closed]:fade-out-0 fk:data-[state=closed]:zoom-out-95 fk:data-[state=open]:animate-in fk:data-[state=open]:fade-in-0 fk:data-[state=open]:zoom-in-95 fk:corner-squircle',\n className\n )}\n {...props}\n />\n </HoverCardPrimitive.Portal>\n );\n}\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent };\n","import * as React from 'react';\nimport { Loader2Icon } from 'lucide-react';\nimport { cn } from '../lib/utils';\n\nfunction Spinner({ className, ...props }: React.ComponentProps<'svg'>) {\n return (\n <Loader2Icon\n role=\"status\"\n aria-label=\"Loading\"\n className={cn('fk:size-4 fk:animate-spin', className)}\n {...props}\n />\n );\n}\n\nexport { Spinner };\n","'use client';\n\nimport * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../lib/utils';\nimport { Button } from './button';\nimport { Input } from './input';\nimport { Textarea } from './textarea';\n\nfunction InputGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"input-group\"\n role=\"group\"\n className={cn(\n 'fk:group/input-group fk:border-input fk:dark:bg-input/30 fk:shadow-xs fk:relative fk:flex fk:w-full fk:items-center fk:rounded-lg fk:border fk:outline-none fk:transition-[color,box-shadow] fk:corner-squircle',\n 'fk:h-9 fk:has-[>textarea]:h-auto',\n 'fk:has-[>[data-align=inline-start]]:[&>input]:pl-2',\n 'fk:has-[>[data-align=inline-end]]:[&>input]:pr-2',\n 'fk:has-[>[data-align=block-start]]:h-auto fk:has-[>[data-align=block-start]]:flex-col fk:has-[>[data-align=block-start]]:[&>input]:pb-3',\n 'fk:has-[>[data-align=block-end]]:h-auto fk:has-[>[data-align=block-end]]:flex-col fk:has-[>[data-align=block-end]]:[&>input]:pt-3',\n 'fk:has-[[data-slot=input-group-control]:focus-visible]:ring-ring fk:has-[[data-slot=input-group-control]:focus-visible]:ring-1',\n 'fk:has-[[data-slot][aria-invalid=true]]:ring-destructive/20 fk:has-[[data-slot][aria-invalid=true]]:border-destructive fk:dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40',\n className\n )}\n {...props}\n />\n );\n}\n\nconst inputGroupAddonVariants = cva(\n 'fk:text-muted-foreground fk:flex fk:h-auto fk:cursor-text fk:select-none fk:items-center fk:justify-center fk:gap-2 fk:py-1.5 fk:text-sm fk:font-medium fk:group-data-[disabled=true]/input-group:opacity-50 fk:[&>kbd]:rounded-[calc(var(--radius)-5px)] fk:[&>svg:not([class*=size-])]:size-4',\n {\n variants: {\n align: {\n 'inline-start':\n 'fk:order-first fk:pl-3 fk:has-[>button]:ml-[-0.45rem] fk:has-[>kbd]:ml-[-0.35rem]',\n 'inline-end':\n 'fk:order-last fk:pr-3 fk:has-[>button]:mr-[-0.4rem] fk:has-[>kbd]:mr-[-0.35rem]',\n 'block-start':\n 'fk:[.border-b]:pb-3 fk:order-first fk:w-full fk:justify-start fk:px-3 fk:pt-3 fk:group-has-[>input]/input-group:pt-2.5',\n 'block-end':\n 'fk:[.border-t]:pt-3 fk:order-last fk:w-full fk:justify-start fk:px-3 fk:pb-3 fk:group-has-[>input]/input-group:pb-2.5',\n },\n },\n defaultVariants: {\n align: 'inline-start',\n },\n }\n);\n\nfunction InputGroupAddon({\n className,\n align = 'inline-start',\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest('button')) {\n return;\n }\n\n e.currentTarget.parentElement?.querySelector('input')?.focus();\n }}\n {...props}\n />\n );\n}\n\nconst inputGroupButtonVariants = cva('fk:flex fk:items-center fk:gap-2 fk:text-sm fk:shadow-none', {\n variants: {\n size: {\n xs: 'fk:h-6 fk:gap-1 fk:rounded-[calc(var(--radius)-5px)] fk:px-2 fk:has-[>svg]:px-2 fk:[&>svg:not([class*=size-])]:size-3.5 fk:corner-squircle',\n sm: 'fk:h-8 fk:gap-1.5 fk:rounded-lg fk:px-2.5 fk:has-[>svg]:px-2.5 fk:corner-squircle',\n 'icon-xs': 'fk:size-6 fk:rounded-[calc(var(--radius)-5px)] fk:p-0 fk:has-[>svg]:p-0 fk:corner-squircle',\n 'icon-sm': 'fk:size-8 fk:p-0 fk:has-[>svg]:p-0',\n },\n },\n defaultVariants: {\n size: 'xs',\n },\n});\n\nfunction InputGroupButton({\n className,\n type = 'button',\n variant = 'ghost',\n size = 'xs',\n ...props\n}: Omit<React.ComponentProps<typeof Button>, 'size'> & VariantProps<typeof inputGroupButtonVariants>) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n );\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n className={cn(\n 'fk:text-muted-foreground fk:flex fk:items-center fk:gap-2 fk:text-sm fk:[&_svg:not([class*=size-])]:size-4 fk:[&_svg]:pointer-events-none',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupInput({ className, ...props }: React.ComponentProps<'input'>) {\n return (\n <Input\n data-slot=\"input-group-control\"\n className={cn(\n 'fk:flex-1 fk:rounded-none fk:border-0 fk:bg-transparent fk:shadow-none fk:focus-visible:ring-0 fk:dark:bg-transparent fk:corner-squircle',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupTextarea({ className, ...props }: React.ComponentProps<'textarea'>) {\n return (\n <Textarea\n data-slot=\"input-group-control\"\n className={cn(\n 'fk:flex-1 fk:resize-none fk:rounded-none fk:border-0 fk:bg-transparent fk:py-3 fk:shadow-none fk:focus-visible:ring-0 fk:dark:bg-transparent fk:corner-squircle',\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupText,\n InputGroupInput,\n InputGroupTextarea,\n};\n","'use client';\n\nimport { Button } from '../primitives/button';\nimport { HoverCard, HoverCardContent, HoverCardTrigger } from '../primitives/hover-card';\nimport { cn } from '../lib/utils';\nimport type { FileUIPart, SourceDocumentUIPart } from 'ai';\nimport { FileTextIcon, GlobeIcon, ImageIcon, Music2Icon, PaperclipIcon, VideoIcon, XIcon } from 'lucide-react';\nimport type { ComponentProps, HTMLAttributes, ReactNode } from 'react';\nimport { createContext, useCallback, useContext, useMemo } from 'react';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type AttachmentData = (FileUIPart & { id: string }) | (SourceDocumentUIPart & { id: string });\n\nexport type AttachmentMediaCategory = 'image' | 'video' | 'audio' | 'document' | 'source' | 'unknown';\n\nexport type AttachmentVariant = 'grid' | 'inline' | 'list';\n\nconst mediaCategoryIcons: Record<AttachmentMediaCategory, typeof ImageIcon> = {\n audio: Music2Icon,\n document: FileTextIcon,\n image: ImageIcon,\n source: GlobeIcon,\n unknown: PaperclipIcon,\n video: VideoIcon,\n};\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\nexport const getMediaCategory = (data: AttachmentData): AttachmentMediaCategory => {\n if (data.type === 'source-document') {\n return 'source';\n }\n\n const mediaType = data.mediaType ?? '';\n\n if (mediaType.startsWith('image/')) {\n return 'image';\n }\n if (mediaType.startsWith('video/')) {\n return 'video';\n }\n if (mediaType.startsWith('audio/')) {\n return 'audio';\n }\n if (mediaType.startsWith('application/') || mediaType.startsWith('text/')) {\n return 'document';\n }\n\n return 'unknown';\n};\n\nexport const getAttachmentLabel = (data: AttachmentData): string => {\n if (data.type === 'source-document') {\n return data.title || data.filename || 'Source';\n }\n\n const category = getMediaCategory(data);\n return data.filename || (category === 'image' ? 'Image' : 'Attachment');\n};\n\nconst renderAttachmentImage = (url: string, filename: string | undefined, isGrid: boolean) =>\n isGrid ? (\n <img alt={filename || 'Image'} className=\"fk:size-full fk:object-cover\" height={96} src={url} width={96} />\n ) : (\n <img\n alt={filename || 'Image'}\n className=\"fk:size-full fk:rounded fk:object-cover fk:corner-squircle\"\n height={20}\n src={url}\n width={20}\n />\n );\n\n// ============================================================================\n// Contexts\n// ============================================================================\n\ninterface AttachmentsContextValue {\n variant: AttachmentVariant;\n}\n\nconst AttachmentsContext = createContext<AttachmentsContextValue | null>(null);\n\ninterface AttachmentContextValue {\n data: AttachmentData;\n mediaCategory: AttachmentMediaCategory;\n onRemove?: () => void;\n variant: AttachmentVariant;\n}\n\nconst AttachmentContext = createContext<AttachmentContextValue | null>(null);\n\n// ============================================================================\n// Hooks\n// ============================================================================\n\nexport const useAttachmentsContext = () => useContext(AttachmentsContext) ?? { variant: 'grid' as const };\n\nexport const useAttachmentContext = () => {\n const ctx = useContext(AttachmentContext);\n if (!ctx) {\n throw new Error('Attachment components must be used within <Attachment>');\n }\n return ctx;\n};\n\n// ============================================================================\n// Attachments - Container\n// ============================================================================\n\nexport type AttachmentsProps = HTMLAttributes<HTMLDivElement> & {\n variant?: AttachmentVariant;\n};\n\nexport const Attachments = ({ variant = 'grid', className, children, ...props }: AttachmentsProps) => {\n const contextValue = useMemo(() => ({ variant }), [variant]);\n\n return (\n <AttachmentsContext.Provider value={contextValue}>\n <div\n className={cn(\n 'fk:flex fk:items-start',\n variant === 'list' ? 'fk:flex-col fk:gap-2' : 'fk:flex-wrap fk:gap-2',\n variant === 'grid' && 'fk:ml-auto fk:w-fit',\n className\n )}\n {...props}\n >\n {children}\n </div>\n </AttachmentsContext.Provider>\n );\n};\n\n// ============================================================================\n// Attachment - Item\n// ============================================================================\n\nexport type AttachmentProps = HTMLAttributes<HTMLDivElement> & {\n data: AttachmentData;\n onRemove?: () => void;\n};\n\nexport const Attachment = ({ data, onRemove, className, children, ...props }: AttachmentProps) => {\n const { variant } = useAttachmentsContext();\n const mediaCategory = getMediaCategory(data);\n\n const contextValue = useMemo<AttachmentContextValue>(\n () => ({ data, mediaCategory, onRemove, variant }),\n [data, mediaCategory, onRemove, variant]\n );\n\n return (\n <AttachmentContext.Provider value={contextValue}>\n <div\n className={cn(\n 'fk:group fk:relative',\n variant === 'grid' && 'fk:size-24 fk:overflow-hidden fk:rounded-lg fk:corner-squircle',\n variant === 'inline' && [\n 'fk:flex fk:h-8 fk:cursor-pointer fk:select-none fk:items-center fk:gap-1.5',\n 'fk:rounded-md fk:border fk:border-border fk:px-1.5 fk:corner-squircle',\n 'fk:font-medium fk:text-sm fk:transition-all',\n 'fk:hover:bg-accent fk:hover:text-accent-foreground fk:dark:hover:bg-accent/50',\n ],\n variant === 'list' && [\n 'fk:flex fk:w-full fk:items-center fk:gap-3 fk:rounded-lg fk:border fk:p-3 fk:corner-squircle',\n 'fk:hover:bg-accent/50',\n ],\n className\n )}\n {...props}\n >\n {children}\n </div>\n </AttachmentContext.Provider>\n );\n};\n\n// ============================================================================\n// AttachmentPreview - Media preview\n// ============================================================================\n\nexport type AttachmentPreviewProps = HTMLAttributes<HTMLDivElement> & {\n fallbackIcon?: ReactNode;\n};\n\nexport const AttachmentPreview = ({ fallbackIcon, className, ...props }: AttachmentPreviewProps) => {\n const { data, mediaCategory, variant } = useAttachmentContext();\n\n const iconSize = variant === 'inline' ? 'fk:size-3' : 'fk:size-4';\n\n const renderIcon = (Icon: typeof ImageIcon) => <Icon className={cn(iconSize, 'fk:text-muted-foreground')} />;\n\n const renderContent = () => {\n if (mediaCategory === 'image' && data.type === 'file' && data.url) {\n return renderAttachmentImage(data.url, data.filename, variant === 'grid');\n }\n\n if (mediaCategory === 'video' && data.type === 'file' && data.url) {\n return <video className=\"fk:size-full fk:object-cover\" muted src={data.url} />;\n }\n\n const Icon = mediaCategoryIcons[mediaCategory];\n return fallbackIcon ?? renderIcon(Icon);\n };\n\n return (\n <div\n className={cn(\n 'fk:flex fk:shrink-0 fk:items-center fk:justify-center fk:overflow-hidden',\n variant === 'grid' && 'fk:size-full fk:bg-muted',\n variant === 'inline' && 'fk:size-5 fk:rounded fk:bg-background fk:corner-squircle',\n variant === 'list' && 'fk:size-12 fk:rounded fk:bg-muted fk:corner-squircle',\n className\n )}\n {...props}\n >\n {renderContent()}\n </div>\n );\n};\n\n// ============================================================================\n// AttachmentInfo - Name and type display\n// ============================================================================\n\nexport type AttachmentInfoProps = HTMLAttributes<HTMLDivElement> & {\n showMediaType?: boolean;\n};\n\nexport const AttachmentInfo = ({ showMediaType = false, className, ...props }: AttachmentInfoProps) => {\n const { data, variant } = useAttachmentContext();\n const label = getAttachmentLabel(data);\n\n if (variant === 'grid') {\n return null;\n }\n\n return (\n <div className={cn('fk:min-w-0 fk:flex-1', className)} {...props}>\n <span className=\"fk:block fk:truncate\">{label}</span>\n {showMediaType && data.mediaType && (\n <span className=\"fk:block fk:truncate fk:text-muted-foreground fk:text-xs\">{data.mediaType}</span>\n )}\n </div>\n );\n};\n\n// ============================================================================\n// AttachmentRemove - Remove button\n// ============================================================================\n\nexport type AttachmentRemoveProps = ComponentProps<typeof Button> & {\n label?: string;\n};\n\nexport const AttachmentRemove = ({ label = 'Remove', className, children, ...props }: AttachmentRemoveProps) => {\n const { onRemove, variant } = useAttachmentContext();\n\n const handleClick = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onRemove?.();\n },\n [onRemove]\n );\n\n if (!onRemove) {\n return null;\n }\n\n return (\n <Button\n aria-label={label}\n className={cn(\n variant === 'grid' && [\n 'fk:absolute fk:top-2 fk:right-2 fk:size-6 fk:rounded-full fk:p-0 fk:corner-squircle',\n 'fk:bg-background/80 fk:backdrop-blur-sm',\n 'fk:opacity-0 fk:transition-opacity fk:group-hover:opacity-100',\n 'fk:hover:bg-background',\n 'fk:[&>svg]:size-3',\n ],\n variant === 'inline' && [\n 'fk:size-5 fk:rounded fk:p-0 fk:corner-squircle',\n 'fk:opacity-0 fk:transition-opacity fk:group-hover:opacity-100',\n 'fk:[&>svg]:size-2.5',\n ],\n variant === 'list' && ['fk:size-8 fk:shrink-0 fk:rounded fk:p-0 fk:corner-squircle', 'fk:[&>svg]:size-4'],\n className\n )}\n onClick={handleClick}\n type=\"button\"\n variant=\"ghost\"\n {...props}\n >\n {children ?? <XIcon />}\n <span className=\"fk:sr-only\">{label}</span>\n </Button>\n );\n};\n\n// ============================================================================\n// AttachmentHoverCard - Hover preview\n// ============================================================================\n\nexport type AttachmentHoverCardProps = ComponentProps<typeof HoverCard>;\n\nexport const AttachmentHoverCard = ({ openDelay = 0, closeDelay = 0, ...props }: AttachmentHoverCardProps) => (\n <HoverCard closeDelay={closeDelay} openDelay={openDelay} {...props} />\n);\n\nexport type AttachmentHoverCardTriggerProps = ComponentProps<typeof HoverCardTrigger>;\n\nexport const AttachmentHoverCardTrigger = (props: AttachmentHoverCardTriggerProps) => <HoverCardTrigger {...props} />;\n\nexport type AttachmentHoverCardContentProps = ComponentProps<typeof HoverCardContent>;\n\nexport const AttachmentHoverCardContent = ({\n align = 'start',\n className,\n ...props\n}: AttachmentHoverCardContentProps) => (\n <HoverCardContent align={align} className={cn('fk:w-auto fk:p-2', className)} {...props} />\n);\n\n// ============================================================================\n// AttachmentEmpty - Empty state\n// ============================================================================\n\nexport type AttachmentEmptyProps = HTMLAttributes<HTMLDivElement>;\n\nexport const AttachmentEmpty = ({ className, children, ...props }: AttachmentEmptyProps) => (\n <div\n className={cn('fk:flex fk:items-center fk:justify-center fk:p-4 fk:text-muted-foreground fk:text-sm', className)}\n {...props}\n >\n {children ?? 'No attachments'}\n </div>\n);\n","'use client';\n\nimport { Button } from '../primitives/button';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../primitives/select';\nimport { cn } from '../lib/utils';\nimport { CheckIcon, CopyIcon } from 'lucide-react';\nimport type { ComponentProps, CSSProperties, HTMLAttributes } from 'react';\nimport { createContext, memo, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport type { BundledLanguage, BundledTheme, HighlighterGeneric, ThemedToken } from 'shiki';\nimport { createHighlighter } from 'shiki';\n\n// Shiki uses bitflags for font styles: 1=italic, 2=bold, 4=underline\n// oxlint-disable-next-line eslint(no-bitwise)\nconst isItalic = (fontStyle: number | undefined) => fontStyle && fontStyle & 1;\n// oxlint-disable-next-line eslint(no-bitwise)\nconst isBold = (fontStyle: number | undefined) => fontStyle && fontStyle & 2;\nconst isUnderline = (fontStyle: number | undefined) =>\n // oxlint-disable-next-line eslint(no-bitwise)\n fontStyle && fontStyle & 4;\n\n// Transform tokens to include pre-computed keys to avoid noArrayIndexKey lint\ninterface KeyedToken {\n token: ThemedToken;\n key: string;\n}\ninterface KeyedLine {\n tokens: KeyedToken[];\n key: string;\n}\n\nconst addKeysToTokens = (lines: ThemedToken[][]): KeyedLine[] =>\n lines.map((line, lineIdx) => ({\n key: `line-${lineIdx}`,\n tokens: line.map((token, tokenIdx) => ({\n key: `line-${lineIdx}-${tokenIdx}`,\n token,\n })),\n }));\n\n// Token rendering component\nconst TokenSpan = ({ token }: { token: ThemedToken }) => (\n <span\n className=\"fk:dark:bg-(--shiki-dark-bg)! fk:dark:text-(--shiki-dark)!\"\n style={\n {\n backgroundColor: token.bgColor,\n color: token.color,\n fontStyle: isItalic(token.fontStyle) ? 'italic' : undefined,\n fontWeight: isBold(token.fontStyle) ? 'bold' : undefined,\n textDecoration: isUnderline(token.fontStyle) ? 'underline' : undefined,\n ...token.htmlStyle,\n } as CSSProperties\n }\n >\n {token.content}\n </span>\n);\n\n// Line number styles using CSS counters\nconst LINE_NUMBER_CLASSES = cn(\n 'fk:block',\n 'fk:before:content-[counter(line)]',\n 'fk:before:inline-block',\n 'fk:before:[counter-increment:line]',\n 'fk:before:w-8',\n 'fk:before:mr-4',\n 'fk:before:text-right',\n 'fk:before:text-muted-foreground/50',\n 'fk:before:font-mono',\n 'fk:before:select-none'\n);\n\n// Line rendering component\nconst LineSpan = ({ keyedLine, showLineNumbers }: { keyedLine: KeyedLine; showLineNumbers: boolean }) => (\n <span className={showLineNumbers ? LINE_NUMBER_CLASSES : 'fk:block'}>\n {keyedLine.tokens.length === 0\n ? '\\n'\n : keyedLine.tokens.map(({ token, key }) => <TokenSpan key={key} token={token} />)}\n </span>\n);\n\n// Types\ntype CodeBlockProps = HTMLAttributes<HTMLDivElement> & {\n code: string;\n language: BundledLanguage;\n showLineNumbers?: boolean;\n};\n\ninterface TokenizedCode {\n tokens: ThemedToken[][];\n fg: string;\n bg: string;\n}\n\ninterface CodeBlockContextType {\n code: string;\n}\n\n// Context\nconst CodeBlockContext = createContext<CodeBlockContextType>({\n code: '',\n});\n\n// Highlighter cache (singleton per language)\nconst highlighterCache = new Map<string, Promise<HighlighterGeneric<BundledLanguage, BundledTheme>>>();\n\n// Token cache\nconst tokensCache = new Map<string, TokenizedCode>();\n\n// Subscribers for async token updates\nconst subscribers = new Map<string, Set<(result: TokenizedCode) => void>>();\n\nconst getTokensCacheKey = (code: string, language: BundledLanguage) => {\n const start = code.slice(0, 100);\n const end = code.length > 100 ? code.slice(-100) : '';\n return `${language}:${code.length}:${start}:${end}`;\n};\n\nconst getHighlighter = (language: BundledLanguage): Promise<HighlighterGeneric<BundledLanguage, BundledTheme>> => {\n const cached = highlighterCache.get(language);\n if (cached) {\n return cached;\n }\n\n const highlighterPromise = createHighlighter({\n langs: [language],\n themes: ['github-light', 'github-dark'],\n });\n\n highlighterCache.set(language, highlighterPromise);\n return highlighterPromise;\n};\n\n// Create raw tokens for immediate display while highlighting loads\nconst createRawTokens = (code: string): TokenizedCode => ({\n bg: 'transparent',\n fg: 'inherit',\n tokens: code.split('\\n').map((line) =>\n line === ''\n ? []\n : [\n {\n color: 'inherit',\n content: line,\n } as ThemedToken,\n ]\n ),\n});\n\n// Synchronous highlight with callback for async results\nexport const highlightCode = (\n code: string,\n language: BundledLanguage,\n // oxlint-disable-next-line eslint-plugin-promise(prefer-await-to-callbacks)\n callback?: (result: TokenizedCode) => void\n): TokenizedCode | null => {\n const tokensCacheKey = getTokensCacheKey(code, language);\n\n // Return cached result if available\n const cached = tokensCache.get(tokensCacheKey);\n if (cached) {\n return cached;\n }\n\n // Subscribe callback if provided\n if (callback) {\n if (!subscribers.has(tokensCacheKey)) {\n subscribers.set(tokensCacheKey, new Set());\n }\n subscribers.get(tokensCacheKey)?.add(callback);\n }\n\n // Start highlighting in background - fire-and-forget async pattern\n getHighlighter(language)\n // oxlint-disable-next-line eslint-plugin-promise(prefer-await-to-then)\n .then((highlighter) => {\n const availableLangs = highlighter.getLoadedLanguages();\n const langToUse = availableLangs.includes(language) ? language : 'text';\n\n const result = highlighter.codeToTokens(code, {\n lang: langToUse,\n themes: {\n dark: 'github-dark',\n light: 'github-light',\n },\n });\n\n const tokenized: TokenizedCode = {\n bg: result.bg ?? 'transparent',\n fg: result.fg ?? 'inherit',\n tokens: result.tokens,\n };\n\n // Cache the result\n tokensCache.set(tokensCacheKey, tokenized);\n\n // Notify all subscribers\n const subs = subscribers.get(tokensCacheKey);\n if (subs) {\n for (const sub of subs) {\n sub(tokenized);\n }\n subscribers.delete(tokensCacheKey);\n }\n })\n // oxlint-disable-next-line eslint-plugin-promise(prefer-await-to-then), eslint-plugin-promise(prefer-await-to-callbacks)\n .catch((error) => {\n console.error('Failed to highlight code:', error);\n subscribers.delete(tokensCacheKey);\n });\n\n return null;\n};\n\nconst CodeBlockBody = memo(\n ({\n tokenized,\n showLineNumbers,\n className,\n }: {\n tokenized: TokenizedCode;\n showLineNumbers: boolean;\n className?: string;\n }) => {\n const preStyle = useMemo(\n () => ({\n backgroundColor: tokenized.bg,\n color: tokenized.fg,\n }),\n [tokenized.bg, tokenized.fg]\n );\n\n const keyedLines = useMemo(() => addKeysToTokens(tokenized.tokens), [tokenized.tokens]);\n\n return (\n <pre\n className={cn('fk:dark:bg-(--shiki-dark-bg)! fk:dark:text-(--shiki-dark)! fk:m-0 fk:p-4 fk:text-sm', className)}\n style={preStyle}\n >\n <code\n className={cn(\n 'fk:font-mono fk:text-sm',\n showLineNumbers && 'fk:[counter-increment:line_0] fk:[counter-reset:line]'\n )}\n >\n {keyedLines.map((keyedLine) => (\n <LineSpan key={keyedLine.key} keyedLine={keyedLine} showLineNumbers={showLineNumbers} />\n ))}\n </code>\n </pre>\n );\n },\n (prevProps, nextProps) =>\n prevProps.tokenized === nextProps.tokenized &&\n prevProps.showLineNumbers === nextProps.showLineNumbers &&\n prevProps.className === nextProps.className\n);\n\nCodeBlockBody.displayName = 'CodeBlockBody';\n\nexport const CodeBlockContainer = ({\n className,\n language,\n style,\n ...props\n}: HTMLAttributes<HTMLDivElement> & { language: string }) => (\n <div\n className={cn(\n 'fk:group fk:relative fk:w-full fk:overflow-hidden fk:rounded-md fk:border fk:bg-background fk:text-foreground fk:corner-squircle',\n className\n )}\n data-language={language}\n style={{\n containIntrinsicSize: 'auto 200px',\n contentVisibility: 'auto',\n ...style,\n }}\n {...props}\n />\n);\n\nexport const CodeBlockHeader = ({ children, className, ...props }: HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n 'fk:flex fk:items-center fk:justify-between fk:border-b fk:bg-muted/80 fk:px-3 fk:py-2 fk:text-muted-foreground fk:text-xs',\n className\n )}\n {...props}\n >\n {children}\n </div>\n);\n\nexport const CodeBlockTitle = ({ children, className, ...props }: HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('fk:flex fk:items-center fk:gap-2', className)} {...props}>\n {children}\n </div>\n);\n\nexport const CodeBlockFilename = ({ children, className, ...props }: HTMLAttributes<HTMLSpanElement>) => (\n <span className={cn('fk:font-mono', className)} {...props}>\n {children}\n </span>\n);\n\nexport const CodeBlockActions = ({ children, className, ...props }: HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('fk:-my-1 fk:-mr-1 fk:flex fk:items-center fk:gap-2', className)} {...props}>\n {children}\n </div>\n);\n\nexport const CodeBlockContent = ({\n code,\n language,\n showLineNumbers = false,\n}: {\n code: string;\n language: BundledLanguage;\n showLineNumbers?: boolean;\n}) => {\n // Memoized raw tokens for immediate display\n const rawTokens = useMemo(() => createRawTokens(code), [code]);\n\n // Synchronous cache lookup — avoids setState in effect for cached results\n const syncTokens = useMemo(() => highlightCode(code, language) ?? rawTokens, [code, language, rawTokens]);\n\n // Async highlighting result (populated after shiki loads)\n const [asyncTokens, setAsyncTokens] = useState<TokenizedCode | null>(null);\n const asyncKeyRef = useRef({ code, language });\n\n // Invalidate stale async tokens synchronously during render\n if (asyncKeyRef.current.code !== code || asyncKeyRef.current.language !== language) {\n asyncKeyRef.current = { code, language };\n setAsyncTokens(null);\n }\n\n useEffect(() => {\n let cancelled = false;\n\n highlightCode(code, language, (result) => {\n if (!cancelled) {\n setAsyncTokens(result);\n }\n });\n\n return () => {\n cancelled = true;\n };\n }, [code, language]);\n\n const tokenized = asyncTokens ?? syncTokens;\n\n return (\n <div className=\"fk:relative fk:overflow-auto\">\n <CodeBlockBody showLineNumbers={showLineNumbers} tokenized={tokenized} />\n </div>\n );\n};\n\nexport const CodeBlock = ({\n code,\n language,\n showLineNumbers = false,\n className,\n children,\n ...props\n}: CodeBlockProps) => {\n const contextValue = useMemo(() => ({ code }), [code]);\n\n return (\n <CodeBlockContext.Provider value={contextValue}>\n <CodeBlockContainer className={className} language={language} {...props}>\n {children}\n <CodeBlockContent code={code} language={language} showLineNumbers={showLineNumbers} />\n </CodeBlockContainer>\n </CodeBlockContext.Provider>\n );\n};\n\nexport type CodeBlockCopyButtonProps = ComponentProps<typeof Button> & {\n onCopy?: () => void;\n onError?: (error: Error) => void;\n timeout?: number;\n};\n\nexport const CodeBlockCopyButton = ({\n onCopy,\n onError,\n timeout = 2000,\n children,\n className,\n ...props\n}: CodeBlockCopyButtonProps) => {\n const [isCopied, setIsCopied] = useState(false);\n const timeoutRef = useRef<number>(0);\n const { code } = useContext(CodeBlockContext);\n\n const copyToClipboard = useCallback(async () => {\n if (typeof window === 'undefined' || !navigator?.clipboard?.writeText) {\n onError?.(new Error('Clipboard API not available'));\n return;\n }\n\n try {\n if (!isCopied) {\n await navigator.clipboard.writeText(code);\n setIsCopied(true);\n onCopy?.();\n timeoutRef.current = window.setTimeout(() => setIsCopied(false), timeout);\n }\n } catch (error) {\n onError?.(error as Error);\n }\n }, [code, onCopy, onError, timeout, isCopied]);\n\n useEffect(\n () => () => {\n window.clearTimeout(timeoutRef.current);\n },\n []\n );\n\n const Icon = isCopied ? CheckIcon : CopyIcon;\n\n return (\n <Button className={cn('fk:shrink-0', className)} onClick={copyToClipboard} size=\"icon\" variant=\"ghost\" {...props}>\n {children ?? <Icon size={14} />}\n </Button>\n );\n};\n\nexport type CodeBlockLanguageSelectorProps = ComponentProps<typeof Select>;\n\nexport const CodeBlockLanguageSelector = (props: CodeBlockLanguageSelectorProps) => <Select {...props} />;\n\nexport type CodeBlockLanguageSelectorTriggerProps = ComponentProps<typeof SelectTrigger>;\n\nexport const CodeBlockLanguageSelectorTrigger = ({ className, ...props }: CodeBlockLanguageSelectorTriggerProps) => (\n <SelectTrigger\n className={cn('fk:h-7 fk:border-none fk:bg-transparent fk:px-2 fk:text-xs fk:shadow-none', className)}\n size=\"sm\"\n {...props}\n />\n);\n\nexport type CodeBlockLanguageSelectorValueProps = ComponentProps<typeof SelectValue>;\n\nexport const CodeBlockLanguageSelectorValue = (props: CodeBlockLanguageSelectorValueProps) => (\n <SelectValue {...props} />\n);\n\nexport type CodeBlockLanguageSelectorContentProps = ComponentProps<typeof SelectContent>;\n\nexport const CodeBlockLanguageSelectorContent = ({\n align = 'end',\n ...props\n}: CodeBlockLanguageSelectorContentProps) => <SelectContent align={align} {...props} />;\n\nexport type CodeBlockLanguageSelectorItemProps = ComponentProps<typeof SelectItem>;\n\nexport const CodeBlockLanguageSelectorItem = (props: CodeBlockLanguageSelectorItemProps) => <SelectItem {...props} />;\n","'use client';\n\nimport { Button } from '../primitives/button';\nimport { cn } from '../lib/utils';\nimport type { UIMessage } from 'ai';\nimport { ArrowDownIcon, DownloadIcon } from 'lucide-react';\nimport type { ComponentProps } from 'react';\nimport { useCallback } from 'react';\nimport { StickToBottom, useStickToBottomContext } from 'use-stick-to-bottom';\n\nexport type ConversationProps = ComponentProps<typeof StickToBottom>;\n\nexport const Conversation = ({ className, ...props }: ConversationProps) => (\n <StickToBottom\n className={cn('fk:relative fk:flex-1 fk:overflow-y-hidden', className)}\n initial=\"smooth\"\n resize=\"smooth\"\n role=\"log\"\n {...props}\n />\n);\n\nexport type ConversationContentProps = ComponentProps<typeof StickToBottom.Content>;\n\nexport const ConversationContent = ({ className, ...props }: ConversationContentProps) => (\n <StickToBottom.Content className={cn('fk:flex fk:flex-col fk:gap-8 fk:p-4', className)} {...props} />\n);\n\nexport type ConversationEmptyStateProps = ComponentProps<'div'> & {\n title?: string;\n description?: string;\n icon?: React.ReactNode;\n};\n\nexport const ConversationEmptyState = ({\n className,\n title = 'No messages yet',\n description = 'Start a conversation to see messages here',\n icon,\n children,\n ...props\n}: ConversationEmptyStateProps) => (\n <div\n className={cn(\n 'fk:flex fk:size-full fk:flex-col fk:items-center fk:justify-center fk:gap-3 fk:p-8 fk:text-center',\n className\n )}\n {...props}\n >\n {children ?? (\n <>\n {icon && <div className=\"fk:text-muted-foreground\">{icon}</div>}\n <div className=\"fk:space-y-1\">\n <h3 className=\"fk:font-medium fk:text-sm\">{title}</h3>\n {description && <p className=\"fk:text-muted-foreground fk:text-sm\">{description}</p>}\n </div>\n </>\n )}\n </div>\n);\n\nexport type ConversationScrollButtonProps = ComponentProps<typeof Button>;\n\nexport const ConversationScrollButton = ({ className, ...props }: ConversationScrollButtonProps) => {\n const { isAtBottom, scrollToBottom } = useStickToBottomContext();\n\n const handleScrollToBottom = useCallback(() => {\n scrollToBottom();\n }, [scrollToBottom]);\n\n return (\n !isAtBottom && (\n <Button\n className={cn(\n 'fk:absolute fk:bottom-4 fk:left-[50%] fk:translate-x-[-50%] fk:rounded-full fk:dark:bg-background fk:dark:hover:bg-muted fk:corner-squircle',\n className\n )}\n onClick={handleScrollToBottom}\n size=\"icon\"\n type=\"button\"\n variant=\"outline\"\n {...props}\n >\n <ArrowDownIcon className=\"fk:size-4\" />\n </Button>\n )\n );\n};\n\nconst getMessageText = (message: UIMessage): string =>\n message.parts\n .filter((part) => part.type === 'text')\n .map((part) => part.text)\n .join('');\n\nexport type ConversationDownloadProps = Omit<ComponentProps<typeof Button>, 'onClick'> & {\n messages: UIMessage[];\n filename?: string;\n formatMessage?: (message: UIMessage, index: number) => string;\n};\n\nconst defaultFormatMessage = (message: UIMessage): string => {\n const roleLabel = message.role.charAt(0).toUpperCase() + message.role.slice(1);\n return `**${roleLabel}:** ${getMessageText(message)}`;\n};\n\nexport const messagesToMarkdown = (\n messages: UIMessage[],\n formatMessage: (message: UIMessage, index: number) => string = defaultFormatMessage\n): string => messages.map((msg, i) => formatMessage(msg, i)).join('\\n\\n');\n\nexport const ConversationDownload = ({\n messages,\n filename = 'conversation.md',\n formatMessage = defaultFormatMessage,\n className,\n children,\n ...props\n}: ConversationDownloadProps) => {\n const handleDownload = useCallback(() => {\n const markdown = messagesToMarkdown(messages, formatMessage);\n const blob = new Blob([markdown], { type: 'text/markdown' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n document.body.append(link);\n link.click();\n link.remove();\n URL.revokeObjectURL(url);\n }, [messages, filename, formatMessage]);\n\n return (\n <Button\n className={cn(\n 'fk:absolute fk:top-4 fk:right-4 fk:rounded-full fk:dark:bg-background fk:dark:hover:bg-muted fk:corner-squircle',\n className\n )}\n onClick={handleDownload}\n size=\"icon\"\n type=\"button\"\n variant=\"outline\"\n {...props}\n >\n {children ?? <DownloadIcon className=\"fk:size-4\" />}\n </Button>\n );\n};\n","'use client';\n\nimport { Button } from '../primitives/button';\nimport { ButtonGroup, ButtonGroupText } from '../primitives/button-group';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../primitives/tooltip';\nimport { cn } from '../lib/utils';\nimport { cjk } from '@streamdown/cjk';\nimport { code } from '@streamdown/code';\nimport { math } from '@streamdown/math';\nimport { mermaid } from '@streamdown/mermaid';\nimport type { UIMessage } from 'ai';\nimport { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react';\nimport type { ComponentProps, HTMLAttributes, ReactElement } from 'react';\nimport { createContext, memo, useCallback, useContext, useEffect, useMemo, useState } from 'react';\nimport { Streamdown } from 'streamdown';\n\nexport type MessageProps = HTMLAttributes<HTMLDivElement> & {\n from: UIMessage['role'];\n};\n\nexport const Message = ({ className, from, ...props }: MessageProps) => (\n <div\n className={cn(\n 'fk:group fk:flex fk:w-full fk:max-w-[95%] fk:flex-col fk:gap-2',\n from === 'user' ? 'fk:is-user fk:ml-auto fk:justify-end' : 'fk:is-assistant',\n className\n )}\n {...props}\n />\n);\n\nexport type MessageContentProps = HTMLAttributes<HTMLDivElement>;\n\nexport const MessageContent = ({ children, className, ...props }: MessageContentProps) => (\n <div\n className={cn(\n 'fk:is-user:dark fk:flex fk:w-fit fk:min-w-0 fk:max-w-full fk:flex-col fk:gap-2 fk:overflow-hidden fk:text-sm',\n 'fk:group-[.is-user]:ml-auto fk:group-[.is-user]:rounded-lg fk:group-[.is-user]:bg-secondary fk:group-[.is-user]:px-4 fk:group-[.is-user]:py-3 fk:group-[.is-user]:text-foreground',\n 'fk:group-[.is-assistant]:text-foreground',\n className\n )}\n {...props}\n >\n {children}\n </div>\n);\n\nexport type MessageActionsProps = ComponentProps<'div'>;\n\nexport const MessageActions = ({ className, children, ...props }: MessageActionsProps) => (\n <div className={cn('fk:flex fk:items-center fk:gap-1', className)} {...props}>\n {children}\n </div>\n);\n\nexport type MessageActionProps = ComponentProps<typeof Button> & {\n tooltip?: string;\n label?: string;\n};\n\nexport const MessageAction = ({\n tooltip,\n children,\n label,\n variant = 'ghost',\n size = 'icon-sm',\n ...props\n}: MessageActionProps) => {\n const button = (\n <Button size={size} type=\"button\" variant={variant} {...props}>\n {children}\n <span className=\"fk:sr-only\">{label || tooltip}</span>\n </Button>\n );\n\n if (tooltip) {\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent>\n <p>{tooltip}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n return button;\n};\n\ninterface MessageBranchContextType {\n currentBranch: number;\n totalBranches: number;\n goToPrevious: () => void;\n goToNext: () => void;\n branches: ReactElement[];\n setBranches: (branches: ReactElement[]) => void;\n}\n\nconst MessageBranchContext = createContext<MessageBranchContextType | null>(null);\n\nconst useMessageBranch = () => {\n const context = useContext(MessageBranchContext);\n\n if (!context) {\n throw new Error('MessageBranch components must be used within MessageBranch');\n }\n\n return context;\n};\n\nexport type MessageBranchProps = HTMLAttributes<HTMLDivElement> & {\n defaultBranch?: number;\n onBranchChange?: (branchIndex: number) => void;\n};\n\nexport const MessageBranch = ({ defaultBranch = 0, onBranchChange, className, ...props }: MessageBranchProps) => {\n const [currentBranch, setCurrentBranch] = useState(defaultBranch);\n const [branches, setBranches] = useState<ReactElement[]>([]);\n\n const handleBranchChange = useCallback(\n (newBranch: number) => {\n setCurrentBranch(newBranch);\n onBranchChange?.(newBranch);\n },\n [onBranchChange]\n );\n\n const goToPrevious = useCallback(() => {\n const newBranch = currentBranch > 0 ? currentBranch - 1 : branches.length - 1;\n handleBranchChange(newBranch);\n }, [currentBranch, branches.length, handleBranchChange]);\n\n const goToNext = useCallback(() => {\n const newBranch = currentBranch < branches.length - 1 ? currentBranch + 1 : 0;\n handleBranchChange(newBranch);\n }, [currentBranch, branches.length, handleBranchChange]);\n\n const contextValue = useMemo<MessageBranchContextType>(\n () => ({\n branches,\n currentBranch,\n goToNext,\n goToPrevious,\n setBranches,\n totalBranches: branches.length,\n }),\n [branches, currentBranch, goToNext, goToPrevious]\n );\n\n return (\n <MessageBranchContext.Provider value={contextValue}>\n <div className={cn('fk:grid fk:w-full fk:gap-2 fk:[&>div]:pb-0', className)} {...props} />\n </MessageBranchContext.Provider>\n );\n};\n\nexport type MessageBranchContentProps = HTMLAttributes<HTMLDivElement>;\n\nexport const MessageBranchContent = ({ children, ...props }: MessageBranchContentProps) => {\n const { currentBranch, setBranches, branches } = useMessageBranch();\n const childrenArray = useMemo(() => (Array.isArray(children) ? children : [children]), [children]);\n\n // Use useEffect to update branches when they change\n useEffect(() => {\n if (branches.length !== childrenArray.length) {\n setBranches(childrenArray);\n }\n }, [childrenArray, branches, setBranches]);\n\n return childrenArray.map((branch, index) => (\n <div\n className={cn(\n 'fk:grid fk:gap-2 fk:overflow-hidden fk:[&>div]:pb-0',\n index === currentBranch ? 'fk:block' : 'fk:hidden'\n )}\n key={branch.key}\n {...props}\n >\n {branch}\n </div>\n ));\n};\n\nexport type MessageBranchSelectorProps = ComponentProps<typeof ButtonGroup>;\n\nexport const MessageBranchSelector = ({ className, ...props }: MessageBranchSelectorProps) => {\n const { totalBranches } = useMessageBranch();\n\n // Don't render if there's only one branch\n if (totalBranches <= 1) {\n return null;\n }\n\n return (\n <ButtonGroup\n className={cn('fk:[&>*:not(:first-child)]:rounded-l-md fk:[&>*:not(:last-child)]:rounded-r-md', className)}\n orientation=\"horizontal\"\n {...props}\n />\n );\n};\n\nexport type MessageBranchPreviousProps = ComponentProps<typeof Button>;\n\nexport const MessageBranchPrevious = ({ children, ...props }: MessageBranchPreviousProps) => {\n const { goToPrevious, totalBranches } = useMessageBranch();\n\n return (\n <Button\n aria-label=\"Previous branch\"\n disabled={totalBranches <= 1}\n onClick={goToPrevious}\n size=\"icon-sm\"\n type=\"button\"\n variant=\"ghost\"\n {...props}\n >\n {children ?? <ChevronLeftIcon size={14} />}\n </Button>\n );\n};\n\nexport type MessageBranchNextProps = ComponentProps<typeof Button>;\n\nexport const MessageBranchNext = ({ children, ...props }: MessageBranchNextProps) => {\n const { goToNext, totalBranches } = useMessageBranch();\n\n return (\n <Button\n aria-label=\"Next branch\"\n disabled={totalBranches <= 1}\n onClick={goToNext}\n size=\"icon-sm\"\n type=\"button\"\n variant=\"ghost\"\n {...props}\n >\n {children ?? <ChevronRightIcon size={14} />}\n </Button>\n );\n};\n\nexport type MessageBranchPageProps = HTMLAttributes<HTMLSpanElement>;\n\nexport const MessageBranchPage = ({ className, ...props }: MessageBranchPageProps) => {\n const { currentBranch, totalBranches } = useMessageBranch();\n\n return (\n <ButtonGroupText\n className={cn('fk:border-none fk:bg-transparent fk:text-muted-foreground fk:shadow-none', className)}\n {...props}\n >\n {currentBranch + 1} of {totalBranches}\n </ButtonGroupText>\n );\n};\n\nexport type MessageResponseProps = ComponentProps<typeof Streamdown>;\n\nconst streamdownPlugins = { cjk, code, math, mermaid };\n\nexport const MessageResponse = memo(\n ({ className, ...props }: MessageResponseProps) => (\n <Streamdown\n className={cn('fk:size-full fk:[&>*:first-child]:mt-0 fk:[&>*:last-child]:mb-0', className)}\n plugins={streamdownPlugins}\n prefix=\"fk\"\n {...props}\n />\n ),\n (prevProps, nextProps) => prevProps.children === nextProps.children && nextProps.isAnimating === prevProps.isAnimating\n);\n\nMessageResponse.displayName = 'MessageResponse';\n\nexport type MessageToolbarProps = ComponentProps<'div'>;\n\nexport const MessageToolbar = ({ className, children, ...props }: MessageToolbarProps) => (\n <div className={cn('fk:mt-4 fk:flex fk:w-full fk:items-center fk:justify-between fk:gap-4', className)} {...props}>\n {children}\n </div>\n);\n","import {\n Command,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut,\n} from '../primitives/command';\nimport { Dialog, DialogContent, DialogTitle, DialogTrigger } from '../primitives/dialog';\nimport { cn } from '../lib/utils';\nimport type { ComponentProps, ReactNode } from 'react';\n\nexport type ModelSelectorProps = ComponentProps<typeof Dialog>;\n\nexport const ModelSelector = (props: ModelSelectorProps) => <Dialog {...props} />;\n\nexport type ModelSelectorTriggerProps = ComponentProps<typeof DialogTrigger>;\n\nexport const ModelSelectorTrigger = (props: ModelSelectorTriggerProps) => <DialogTrigger {...props} />;\n\nexport type ModelSelectorContentProps = ComponentProps<typeof DialogContent> & {\n title?: ReactNode;\n};\n\nexport const ModelSelectorContent = ({\n className,\n children,\n title = 'Model Selector',\n ...props\n}: ModelSelectorContentProps) => (\n <DialogContent\n aria-describedby={undefined}\n className={cn('fk:outline! fk:border-none! fk:p-0 fk:outline-border! fk:outline-solid!', className)}\n {...props}\n >\n <DialogTitle className=\"fk:sr-only\">{title}</DialogTitle>\n <Command className=\"fk:**:data-[slot=command-input-wrapper]:h-auto\">{children}</Command>\n </DialogContent>\n);\n\nexport type ModelSelectorDialogProps = ComponentProps<typeof CommandDialog>;\n\nexport const ModelSelectorDialog = (props: ModelSelectorDialogProps) => <CommandDialog {...props} />;\n\nexport type ModelSelectorInputProps = ComponentProps<typeof CommandInput>;\n\nexport const ModelSelectorInput = ({ className, ...props }: ModelSelectorInputProps) => (\n <CommandInput className={cn('fk:h-auto fk:py-3.5', className)} {...props} />\n);\n\nexport type ModelSelectorListProps = ComponentProps<typeof CommandList>;\n\nexport const ModelSelectorList = (props: ModelSelectorListProps) => <CommandList {...props} />;\n\nexport type ModelSelectorEmptyProps = ComponentProps<typeof CommandEmpty>;\n\nexport const ModelSelectorEmpty = (props: ModelSelectorEmptyProps) => <CommandEmpty {...props} />;\n\nexport type ModelSelectorGroupProps = ComponentProps<typeof CommandGroup>;\n\nexport const ModelSelectorGroup = (props: ModelSelectorGroupProps) => <CommandGroup {...props} />;\n\nexport type ModelSelectorItemProps = ComponentProps<typeof CommandItem>;\n\nexport const ModelSelectorItem = (props: ModelSelectorItemProps) => <CommandItem {...props} />;\n\nexport type ModelSelectorShortcutProps = ComponentProps<typeof CommandShortcut>;\n\nexport const ModelSelectorShortcut = (props: ModelSelectorShortcutProps) => <CommandShortcut {...props} />;\n\nexport type ModelSelectorSeparatorProps = ComponentProps<typeof CommandSeparator>;\n\nexport const ModelSelectorSeparator = (props: ModelSelectorSeparatorProps) => <CommandSeparator {...props} />;\n\nexport type ModelSelectorLogoProps = Omit<ComponentProps<'img'>, 'src' | 'alt'> & {\n provider:\n | 'moonshotai-cn'\n | 'lucidquery'\n | 'moonshotai'\n | 'zai-coding-plan'\n | 'alibaba'\n | 'xai'\n | 'vultr'\n | 'nvidia'\n | 'upstage'\n | 'groq'\n | 'github-copilot'\n | 'mistral'\n | 'vercel'\n | 'nebius'\n | 'deepseek'\n | 'alibaba-cn'\n | 'google-vertex-anthropic'\n | 'venice'\n | 'chutes'\n | 'cortecs'\n | 'github-models'\n | 'togetherai'\n | 'azure'\n | 'baseten'\n | 'huggingface'\n | 'opencode'\n | 'fastrouter'\n | 'google'\n | 'google-vertex'\n | 'cloudflare-workers-ai'\n | 'inception'\n | 'wandb'\n | 'openai'\n | 'zhipuai-coding-plan'\n | 'perplexity'\n | 'openrouter'\n | 'zenmux'\n | 'v0'\n | 'iflowcn'\n | 'synthetic'\n | 'deepinfra'\n | 'zhipuai'\n | 'submodel'\n | 'zai'\n | 'inference'\n | 'requesty'\n | 'morph'\n | 'lmstudio'\n | 'anthropic'\n | 'aihubmix'\n | 'fireworks-ai'\n | 'modelscope'\n | 'llama'\n | 'scaleway'\n | 'amazon-bedrock'\n | 'cerebras'\n // oxlint-disable-next-line typescript-eslint(ban-types) -- intentional pattern for autocomplete-friendly string union\n | (string & {});\n};\n\nexport const ModelSelectorLogo = ({ provider, className, ...props }: ModelSelectorLogoProps) => (\n <img\n {...props}\n alt={`${provider} logo`}\n className={cn('fk:size-3 fk:dark:invert', className)}\n height={12}\n src={`https://models.dev/logos/${provider}.svg`}\n width={12}\n />\n);\n\nexport type ModelSelectorLogoGroupProps = ComponentProps<'div'>;\n\nexport const ModelSelectorLogoGroup = ({ className, ...props }: ModelSelectorLogoGroupProps) => (\n <div\n className={cn(\n 'fk:flex fk:shrink-0 fk:items-center fk:-space-x-1 fk:[&>img]:rounded-full fk:[&>img]:bg-background fk:[&>img]:p-px fk:[&>img]:ring-1 fk:dark:[&>img]:bg-foreground',\n className\n )}\n {...props}\n />\n);\n\nexport type ModelSelectorNameProps = ComponentProps<'span'>;\n\nexport const ModelSelectorName = ({ className, ...props }: ModelSelectorNameProps) => (\n <span className={cn('fk:flex-1 fk:truncate fk:text-left', className)} {...props} />\n);\n","'use client';\n\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n} from '../primitives/command';\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '../primitives/dropdown-menu';\nimport { HoverCard, HoverCardContent, HoverCardTrigger } from '../primitives/hover-card';\nimport { InputGroup, InputGroupAddon, InputGroupButton, InputGroupTextarea } from '../primitives/input-group';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../primitives/select';\nimport { Spinner } from '../primitives/spinner';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../primitives/tooltip';\nimport { cn } from '../lib/utils';\nimport type { ChatStatus, FileUIPart, SourceDocumentUIPart } from 'ai';\nimport { CornerDownLeftIcon, ImageIcon, Monitor, PlusIcon, SquareIcon, XIcon } from 'lucide-react';\nimport { nanoid } from 'nanoid';\nimport type {\n ChangeEvent,\n ChangeEventHandler,\n ClipboardEventHandler,\n ComponentProps,\n FormEvent,\n FormEventHandler,\n HTMLAttributes,\n KeyboardEventHandler,\n PropsWithChildren,\n ReactNode,\n RefObject,\n} from 'react';\nimport { Children, createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nconst convertBlobUrlToDataUrl = async (url: string): Promise<string | null> => {\n try {\n const response = await fetch(url);\n const blob = await response.blob();\n // FileReader uses callback-based API, wrapping in Promise is necessary\n // oxlint-disable-next-line eslint-plugin-promise(avoid-new)\n return new Promise((resolve) => {\n const reader = new FileReader();\n // oxlint-disable-next-line eslint-plugin-unicorn(prefer-add-event-listener)\n reader.onloadend = () => resolve(reader.result as string);\n // oxlint-disable-next-line eslint-plugin-unicorn(prefer-add-event-listener)\n reader.onerror = () => resolve(null);\n reader.readAsDataURL(blob);\n });\n } catch {\n return null;\n }\n};\n\nconst captureScreenshot = async (): Promise<File | null> => {\n if (typeof navigator === 'undefined' || !navigator.mediaDevices?.getDisplayMedia) {\n return null;\n }\n\n let stream: MediaStream | null = null;\n const video = document.createElement('video');\n video.muted = true;\n video.playsInline = true;\n\n try {\n stream = await navigator.mediaDevices.getDisplayMedia({\n audio: false,\n video: true,\n });\n\n video.srcObject = stream;\n\n // Video element uses callback-based API, wrapping in Promise is necessary\n // oxlint-disable-next-line eslint-plugin-promise(avoid-new)\n await new Promise<void>((resolve, reject) => {\n // oxlint-disable-next-line eslint-plugin-unicorn(prefer-add-event-listener)\n video.onloadedmetadata = () => resolve();\n // oxlint-disable-next-line eslint-plugin-unicorn(prefer-add-event-listener)\n video.onerror = () => reject(new Error('Failed to load screen stream'));\n });\n\n await video.play();\n\n const width = video.videoWidth;\n const height = video.videoHeight;\n if (!width || !height) {\n return null;\n }\n\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n const context = canvas.getContext('2d');\n if (!context) {\n return null;\n }\n\n context.drawImage(video, 0, 0, width, height);\n // canvas.toBlob uses callback-based API, wrapping in Promise is necessary\n // oxlint-disable-next-line eslint-plugin-promise(avoid-new)\n const blob = await new Promise<Blob | null>((resolve) => {\n canvas.toBlob(resolve, 'image/png');\n });\n if (!blob) {\n return null;\n }\n\n const timestamp = new Date().toISOString().replaceAll(/[:.]/g, '-').replace('T', '_').replace('Z', '');\n\n return new File([blob], `screenshot-${timestamp}.png`, {\n lastModified: Date.now(),\n type: 'image/png',\n });\n } finally {\n if (stream) {\n for (const track of stream.getTracks()) {\n track.stop();\n }\n }\n video.pause();\n video.srcObject = null;\n }\n};\n\n// ============================================================================\n// Provider Context & Types\n// ============================================================================\n\nexport interface AttachmentsContext {\n files: (FileUIPart & { id: string })[];\n add: (files: File[] | FileList) => void;\n remove: (id: string) => void;\n clear: () => void;\n openFileDialog: () => void;\n fileInputRef: RefObject<HTMLInputElement | null>;\n}\n\nexport interface TextInputContext {\n value: string;\n setInput: (v: string) => void;\n clear: () => void;\n}\n\nexport interface PromptInputControllerProps {\n textInput: TextInputContext;\n attachments: AttachmentsContext;\n /** INTERNAL: Allows PromptInput to register its file textInput + \"open\" callback */\n __registerFileInput: (ref: RefObject<HTMLInputElement | null>, open: () => void) => void;\n}\n\nconst PromptInputController = createContext<PromptInputControllerProps | null>(null);\nconst ProviderAttachmentsContext = createContext<AttachmentsContext | null>(null);\n\nexport const usePromptInputController = () => {\n const ctx = useContext(PromptInputController);\n if (!ctx) {\n throw new Error('Wrap your component inside <PromptInputProvider> to use usePromptInputController().');\n }\n return ctx;\n};\n\n// Optional variants (do NOT throw). Useful for dual-mode components.\nconst useOptionalPromptInputController = () => useContext(PromptInputController);\n\nexport const useProviderAttachments = () => {\n const ctx = useContext(ProviderAttachmentsContext);\n if (!ctx) {\n throw new Error('Wrap your component inside <PromptInputProvider> to use useProviderAttachments().');\n }\n return ctx;\n};\n\nconst useOptionalProviderAttachments = () => useContext(ProviderAttachmentsContext);\n\nexport type PromptInputProviderProps = PropsWithChildren<{\n initialInput?: string;\n}>;\n\n/**\n * Optional global provider that lifts PromptInput state outside of PromptInput.\n * If you don't use it, PromptInput stays fully self-managed.\n */\nexport const PromptInputProvider = ({ initialInput: initialTextInput = '', children }: PromptInputProviderProps) => {\n // ----- textInput state\n const [textInput, setTextInput] = useState(initialTextInput);\n const clearInput = useCallback(() => setTextInput(''), []);\n\n // ----- attachments state (global when wrapped)\n const [attachmentFiles, setAttachmentFiles] = useState<(FileUIPart & { id: string })[]>([]);\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n // oxlint-disable-next-line eslint(no-empty-function)\n const openRef = useRef<() => void>(() => {});\n\n const add = useCallback((files: File[] | FileList) => {\n const incoming = Array.from(files);\n\n if (incoming.length === 0) {\n return;\n }\n\n setAttachmentFiles((prev) => [\n ...prev,\n ...incoming.map((file) => ({\n filename: file.name,\n id: nanoid(),\n mediaType: file.type,\n type: 'file' as const,\n url: URL.createObjectURL(file),\n })),\n ]);\n }, []);\n\n const remove = useCallback((id: string) => {\n setAttachmentFiles((prev) => {\n const found = prev.find((f) => f.id === id);\n if (found?.url) {\n URL.revokeObjectURL(found.url);\n }\n return prev.filter((f) => f.id !== id);\n });\n }, []);\n\n const clear = useCallback(() => {\n setAttachmentFiles((prev) => {\n for (const f of prev) {\n if (f.url) {\n URL.revokeObjectURL(f.url);\n }\n }\n return [];\n });\n }, []);\n\n // Keep a ref to attachments for cleanup on unmount (avoids stale closure)\n const attachmentsRef = useRef(attachmentFiles);\n\n useEffect(() => {\n attachmentsRef.current = attachmentFiles;\n }, [attachmentFiles]);\n\n // Cleanup blob URLs on unmount to prevent memory leaks\n useEffect(\n () => () => {\n for (const f of attachmentsRef.current) {\n if (f.url) {\n URL.revokeObjectURL(f.url);\n }\n }\n },\n []\n );\n\n const openFileDialog = useCallback(() => {\n openRef.current?.();\n }, []);\n\n const attachments = useMemo<AttachmentsContext>(\n () => ({\n add,\n clear,\n fileInputRef,\n files: attachmentFiles,\n openFileDialog,\n remove,\n }),\n [attachmentFiles, add, remove, clear, openFileDialog]\n );\n\n const __registerFileInput = useCallback((ref: RefObject<HTMLInputElement | null>, open: () => void) => {\n fileInputRef.current = ref.current;\n openRef.current = open;\n }, []);\n\n const controller = useMemo<PromptInputControllerProps>(\n () => ({\n __registerFileInput,\n attachments,\n textInput: {\n clear: clearInput,\n setInput: setTextInput,\n value: textInput,\n },\n }),\n [textInput, clearInput, attachments, __registerFileInput]\n );\n\n return (\n <PromptInputController.Provider value={controller}>\n <ProviderAttachmentsContext.Provider value={attachments}>{children}</ProviderAttachmentsContext.Provider>\n </PromptInputController.Provider>\n );\n};\n\n// ============================================================================\n// Component Context & Hooks\n// ============================================================================\n\nconst LocalAttachmentsContext = createContext<AttachmentsContext | null>(null);\n\nexport const usePromptInputAttachments = () => {\n // Prefer local context (inside PromptInput) as it has validation, fall back to provider\n const provider = useOptionalProviderAttachments();\n const local = useContext(LocalAttachmentsContext);\n const context = local ?? provider;\n if (!context) {\n throw new Error('usePromptInputAttachments must be used within a PromptInput or PromptInputProvider');\n }\n return context;\n};\n\n// ============================================================================\n// Referenced Sources (Local to PromptInput)\n// ============================================================================\n\nexport interface ReferencedSourcesContext {\n sources: (SourceDocumentUIPart & { id: string })[];\n add: (sources: SourceDocumentUIPart[] | SourceDocumentUIPart) => void;\n remove: (id: string) => void;\n clear: () => void;\n}\n\nexport const LocalReferencedSourcesContext = createContext<ReferencedSourcesContext | null>(null);\n\nexport const usePromptInputReferencedSources = () => {\n const ctx = useContext(LocalReferencedSourcesContext);\n if (!ctx) {\n throw new Error('usePromptInputReferencedSources must be used within a LocalReferencedSourcesContext.Provider');\n }\n return ctx;\n};\n\nexport type PromptInputActionAddAttachmentsProps = ComponentProps<typeof DropdownMenuItem> & {\n label?: string;\n};\n\nexport const PromptInputActionAddAttachments = ({\n label = 'Add photos or files',\n onSelect,\n ...props\n}: PromptInputActionAddAttachmentsProps) => {\n const attachments = usePromptInputAttachments();\n\n const handleSelect = useCallback(\n (event: Event) => {\n onSelect?.(event);\n if (event.defaultPrevented) {\n return;\n }\n\n // Not calling preventDefault lets the menu close; the file dialog still\n // opens because input.click() runs within the same user gesture.\n attachments.openFileDialog();\n },\n [attachments, onSelect]\n );\n\n return (\n <DropdownMenuItem {...props} onSelect={handleSelect}>\n <ImageIcon className=\"fk:mr-2 fk:size-4\" /> {label}\n </DropdownMenuItem>\n );\n};\n\nexport type PromptInputActionAddScreenshotProps = ComponentProps<typeof DropdownMenuItem> & {\n label?: string;\n};\n\nexport const PromptInputActionAddScreenshot = ({\n label = 'Take screenshot',\n onSelect,\n ...props\n}: PromptInputActionAddScreenshotProps) => {\n const attachments = usePromptInputAttachments();\n\n const handleSelect = useCallback(\n async (event: Event) => {\n onSelect?.(event);\n if (event.defaultPrevented) {\n return;\n }\n\n try {\n const screenshot = await captureScreenshot();\n if (screenshot) {\n attachments.add([screenshot]);\n }\n } catch (error) {\n if (error instanceof DOMException && (error.name === 'NotAllowedError' || error.name === 'AbortError')) {\n return;\n }\n throw error;\n }\n },\n [onSelect, attachments]\n );\n\n return (\n <DropdownMenuItem {...props} onSelect={handleSelect}>\n <Monitor className=\"fk:mr-2 fk:size-4\" />\n {label}\n </DropdownMenuItem>\n );\n};\n\nexport interface PromptInputMessage {\n text: string;\n files: FileUIPart[];\n}\n\nexport type PromptInputProps = Omit<HTMLAttributes<HTMLFormElement>, 'onSubmit' | 'onError'> & {\n // e.g., \"image/*\" or leave undefined for any\n accept?: string;\n multiple?: boolean;\n // When true, accepts drops anywhere on document. Default false (opt-in).\n globalDrop?: boolean;\n // Render a hidden input with given name and keep it in sync for native form posts. Default false.\n syncHiddenInput?: boolean;\n // Minimal constraints\n maxFiles?: number;\n // bytes\n maxFileSize?: number;\n onError?: (err: { code: 'max_files' | 'max_file_size' | 'accept'; message: string }) => void;\n onSubmit: (message: PromptInputMessage, event: FormEvent<HTMLFormElement>) => void | Promise<void>;\n};\n\nexport const PromptInput = ({\n className,\n accept,\n multiple,\n globalDrop,\n syncHiddenInput,\n maxFiles,\n maxFileSize,\n onError,\n onSubmit,\n children,\n ...props\n}: PromptInputProps) => {\n // Try to use a provider controller if present\n const controller = useOptionalPromptInputController();\n const usingProvider = !!controller;\n\n // Refs\n const inputRef = useRef<HTMLInputElement | null>(null);\n const formRef = useRef<HTMLFormElement | null>(null);\n\n // ----- Local attachments (only used when no provider)\n const [items, setItems] = useState<(FileUIPart & { id: string })[]>([]);\n const files = usingProvider ? controller.attachments.files : items;\n\n // ----- Local referenced sources (always local to PromptInput)\n const [referencedSources, setReferencedSources] = useState<(SourceDocumentUIPart & { id: string })[]>([]);\n\n // Keep a ref to files for cleanup on unmount (avoids stale closure)\n const filesRef = useRef(files);\n\n useEffect(() => {\n filesRef.current = files;\n }, [files]);\n\n const openFileDialogLocal = useCallback(() => {\n inputRef.current?.click();\n }, []);\n\n const matchesAccept = useCallback(\n (f: File) => {\n if (!accept || accept.trim() === '') {\n return true;\n }\n\n const patterns = accept\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n\n return patterns.some((pattern) => {\n if (pattern.startsWith('.')) {\n // e.g: .csv — match on the filename like the native accept attribute,\n // since browsers report inconsistent media types for many extensions\n return f.name.toLowerCase().endsWith(pattern.toLowerCase());\n }\n if (pattern.endsWith('/*')) {\n // e.g: image/* -> image/\n const prefix = pattern.slice(0, -1);\n return f.type.startsWith(prefix);\n }\n return f.type === pattern;\n });\n },\n [accept]\n );\n\n const addLocal = useCallback(\n (fileList: File[] | FileList) => {\n const incoming = Array.from(fileList);\n const accepted = incoming.filter((f) => matchesAccept(f));\n if (incoming.length && accepted.length === 0) {\n onError?.({\n code: 'accept',\n message: 'No files match the accepted types.',\n });\n return;\n }\n const withinSize = (f: File) => (maxFileSize ? f.size <= maxFileSize : true);\n const sized = accepted.filter(withinSize);\n if (accepted.length > 0 && sized.length === 0) {\n onError?.({\n code: 'max_file_size',\n message: 'All files exceed the maximum size.',\n });\n return;\n }\n\n setItems((prev) => {\n const capacity = typeof maxFiles === 'number' ? Math.max(0, maxFiles - prev.length) : undefined;\n const capped = typeof capacity === 'number' ? sized.slice(0, capacity) : sized;\n if (typeof capacity === 'number' && sized.length > capacity) {\n onError?.({\n code: 'max_files',\n message: 'Too many files. Some were not added.',\n });\n }\n const next: (FileUIPart & { id: string })[] = [];\n for (const file of capped) {\n next.push({\n filename: file.name,\n id: nanoid(),\n mediaType: file.type,\n type: 'file',\n url: URL.createObjectURL(file),\n });\n }\n return [...prev, ...next];\n });\n },\n [matchesAccept, maxFiles, maxFileSize, onError]\n );\n\n const removeLocal = useCallback(\n (id: string) =>\n setItems((prev) => {\n const found = prev.find((file) => file.id === id);\n if (found?.url) {\n URL.revokeObjectURL(found.url);\n }\n return prev.filter((file) => file.id !== id);\n }),\n []\n );\n\n // Wrapper that validates files before calling provider's add\n const addWithProviderValidation = useCallback(\n (fileList: File[] | FileList) => {\n const incoming = Array.from(fileList);\n const accepted = incoming.filter((f) => matchesAccept(f));\n if (incoming.length && accepted.length === 0) {\n onError?.({\n code: 'accept',\n message: 'No files match the accepted types.',\n });\n return;\n }\n const withinSize = (f: File) => (maxFileSize ? f.size <= maxFileSize : true);\n const sized = accepted.filter(withinSize);\n if (accepted.length > 0 && sized.length === 0) {\n onError?.({\n code: 'max_file_size',\n message: 'All files exceed the maximum size.',\n });\n return;\n }\n\n const currentCount = files.length;\n const capacity = typeof maxFiles === 'number' ? Math.max(0, maxFiles - currentCount) : undefined;\n const capped = typeof capacity === 'number' ? sized.slice(0, capacity) : sized;\n if (typeof capacity === 'number' && sized.length > capacity) {\n onError?.({\n code: 'max_files',\n message: 'Too many files. Some were not added.',\n });\n }\n\n if (capped.length > 0) {\n controller?.attachments.add(capped);\n }\n },\n [matchesAccept, maxFileSize, maxFiles, onError, files.length, controller]\n );\n\n const clearAttachments = useCallback(\n () =>\n usingProvider\n ? controller?.attachments.clear()\n : setItems((prev) => {\n for (const file of prev) {\n if (file.url) {\n URL.revokeObjectURL(file.url);\n }\n }\n return [];\n }),\n [usingProvider, controller]\n );\n\n const clearReferencedSources = useCallback(() => setReferencedSources([]), []);\n\n const add = usingProvider ? addWithProviderValidation : addLocal;\n const remove = usingProvider ? controller.attachments.remove : removeLocal;\n const openFileDialog = usingProvider ? controller.attachments.openFileDialog : openFileDialogLocal;\n\n const clear = useCallback(() => {\n clearAttachments();\n clearReferencedSources();\n }, [clearAttachments, clearReferencedSources]);\n\n // Let provider know about our hidden file input so external menus can call openFileDialog()\n useEffect(() => {\n if (!usingProvider) {\n return;\n }\n controller.__registerFileInput(inputRef, () => inputRef.current?.click());\n }, [usingProvider, controller]);\n\n // Note: File input cannot be programmatically set for security reasons\n // The syncHiddenInput prop is no longer functional\n useEffect(() => {\n if (syncHiddenInput && inputRef.current && files.length === 0) {\n inputRef.current.value = '';\n }\n }, [files, syncHiddenInput]);\n\n // Attach drop handlers on nearest form and document (opt-in)\n useEffect(() => {\n const form = formRef.current;\n if (!form) {\n return;\n }\n if (globalDrop) {\n // when global drop is on, let the document-level handler own drops\n return;\n }\n\n const onDragOver = (e: DragEvent) => {\n if (e.dataTransfer?.types?.includes('Files')) {\n e.preventDefault();\n }\n };\n const onDrop = (e: DragEvent) => {\n if (e.dataTransfer?.types?.includes('Files')) {\n e.preventDefault();\n }\n if (e.dataTransfer?.files && e.dataTransfer.files.length > 0) {\n add(e.dataTransfer.files);\n }\n };\n form.addEventListener('dragover', onDragOver);\n form.addEventListener('drop', onDrop);\n return () => {\n form.removeEventListener('dragover', onDragOver);\n form.removeEventListener('drop', onDrop);\n };\n }, [add, globalDrop]);\n\n useEffect(() => {\n if (!globalDrop) {\n return;\n }\n\n const onDragOver = (e: DragEvent) => {\n if (e.dataTransfer?.types?.includes('Files')) {\n e.preventDefault();\n }\n };\n const onDrop = (e: DragEvent) => {\n if (e.dataTransfer?.types?.includes('Files')) {\n e.preventDefault();\n }\n if (e.dataTransfer?.files && e.dataTransfer.files.length > 0) {\n add(e.dataTransfer.files);\n }\n };\n document.addEventListener('dragover', onDragOver);\n document.addEventListener('drop', onDrop);\n return () => {\n document.removeEventListener('dragover', onDragOver);\n document.removeEventListener('drop', onDrop);\n };\n }, [add, globalDrop]);\n\n useEffect(\n () => () => {\n if (!usingProvider) {\n for (const f of filesRef.current) {\n if (f.url) {\n URL.revokeObjectURL(f.url);\n }\n }\n }\n },\n [usingProvider]\n );\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = useCallback(\n (event) => {\n if (event.currentTarget.files) {\n add(event.currentTarget.files);\n }\n // Reset input value to allow selecting files that were previously removed\n event.currentTarget.value = '';\n },\n [add]\n );\n\n const attachmentsCtx = useMemo<AttachmentsContext>(\n () => ({\n add,\n clear: clearAttachments,\n fileInputRef: inputRef,\n files: files.map((item) => ({ ...item, id: item.id })),\n openFileDialog,\n remove,\n }),\n [files, add, remove, clearAttachments, openFileDialog]\n );\n\n const refsCtx = useMemo<ReferencedSourcesContext>(\n () => ({\n add: (incoming: SourceDocumentUIPart[] | SourceDocumentUIPart) => {\n const array = Array.isArray(incoming) ? incoming : [incoming];\n setReferencedSources((prev) => [...prev, ...array.map((s) => ({ ...s, id: nanoid() }))]);\n },\n clear: clearReferencedSources,\n remove: (id: string) => {\n setReferencedSources((prev) => prev.filter((s) => s.id !== id));\n },\n sources: referencedSources,\n }),\n [referencedSources, clearReferencedSources]\n );\n\n const handleSubmit: FormEventHandler<HTMLFormElement> = useCallback(\n async (event) => {\n event.preventDefault();\n\n const form = event.currentTarget;\n const text = usingProvider\n ? controller.textInput.value\n : (() => {\n const formData = new FormData(form);\n return (formData.get('message') as string) || '';\n })();\n\n // Reset form immediately after capturing text to avoid race condition\n // where user input during async blob conversion would be lost\n if (!usingProvider) {\n form.reset();\n }\n\n try {\n // Convert blob URLs to data URLs asynchronously\n const convertedFiles: FileUIPart[] = await Promise.all(\n files.map(async ({ id: _id, ...item }) => {\n if (item.url?.startsWith('blob:')) {\n const dataUrl = await convertBlobUrlToDataUrl(item.url);\n // If conversion failed, keep the original blob URL\n return {\n ...item,\n url: dataUrl ?? item.url,\n };\n }\n return item;\n })\n );\n\n const result = onSubmit({ files: convertedFiles, text }, event);\n\n // Handle both sync and async onSubmit\n if (result instanceof Promise) {\n try {\n await result;\n clear();\n if (usingProvider) {\n controller.textInput.clear();\n }\n } catch {\n // Don't clear on error - user may want to retry\n }\n } else {\n // Sync function completed without throwing, clear inputs\n clear();\n if (usingProvider) {\n controller.textInput.clear();\n }\n }\n } catch {\n // Don't clear on error - user may want to retry\n }\n },\n [usingProvider, controller, files, onSubmit, clear]\n );\n\n // Render with or without local provider\n const inner = (\n <>\n <input\n accept={accept}\n aria-label=\"Upload files\"\n className=\"fk:hidden\"\n multiple={multiple}\n onChange={handleChange}\n ref={inputRef}\n title=\"Upload files\"\n type=\"file\"\n />\n <form className={cn('fk:w-full', className)} onSubmit={handleSubmit} ref={formRef} {...props}>\n <InputGroup className=\"fk:overflow-hidden\">{children}</InputGroup>\n </form>\n </>\n );\n\n const withReferencedSources = (\n <LocalReferencedSourcesContext.Provider value={refsCtx}>{inner}</LocalReferencedSourcesContext.Provider>\n );\n\n // Always provide LocalAttachmentsContext so children get validated add function\n return (\n <LocalAttachmentsContext.Provider value={attachmentsCtx}>{withReferencedSources}</LocalAttachmentsContext.Provider>\n );\n};\n\nexport type PromptInputBodyProps = HTMLAttributes<HTMLDivElement>;\n\nexport const PromptInputBody = ({ className, ...props }: PromptInputBodyProps) => (\n <div className={cn('fk:contents', className)} {...props} />\n);\n\nexport type PromptInputTextareaProps = ComponentProps<typeof InputGroupTextarea>;\n\nexport const PromptInputTextarea = ({\n onChange,\n onKeyDown,\n className,\n placeholder = 'What would you like to know?',\n ...props\n}: PromptInputTextareaProps) => {\n const controller = useOptionalPromptInputController();\n const attachments = usePromptInputAttachments();\n const [isComposing, setIsComposing] = useState(false);\n\n const handleKeyDown: KeyboardEventHandler<HTMLTextAreaElement> = useCallback(\n (e) => {\n // Call the external onKeyDown handler first\n onKeyDown?.(e);\n\n // If the external handler prevented default, don't run internal logic\n if (e.defaultPrevented) {\n return;\n }\n\n if (e.key === 'Enter') {\n if (isComposing || e.nativeEvent.isComposing) {\n return;\n }\n if (e.shiftKey) {\n return;\n }\n e.preventDefault();\n\n // Check if the submit button is disabled before submitting\n const { form } = e.currentTarget;\n const submitButton = form?.querySelector('button[type=\"submit\"]') as HTMLButtonElement | null;\n if (submitButton?.disabled) {\n return;\n }\n\n form?.requestSubmit();\n }\n\n // Remove last attachment when Backspace is pressed and textarea is empty\n if (e.key === 'Backspace' && e.currentTarget.value === '' && attachments.files.length > 0) {\n e.preventDefault();\n const lastAttachment = attachments.files[attachments.files.length - 1];\n\n if (lastAttachment) {\n attachments.remove(lastAttachment.id);\n }\n }\n },\n [onKeyDown, isComposing, attachments]\n );\n\n const handlePaste: ClipboardEventHandler<HTMLTextAreaElement> = useCallback(\n (event) => {\n const items = event.clipboardData?.items;\n\n if (!items) {\n return;\n }\n\n const files: File[] = [];\n\n for (const item of Array.from(items)) {\n if (item.kind === 'file') {\n const file = item.getAsFile();\n\n if (file) {\n files.push(file);\n }\n }\n }\n\n if (files.length > 0) {\n event.preventDefault();\n attachments.add(files);\n }\n },\n [attachments]\n );\n\n const handleCompositionEnd = useCallback(() => setIsComposing(false), []);\n const handleCompositionStart = useCallback(() => setIsComposing(true), []);\n\n const controlledProps = controller\n ? {\n onChange: (e: ChangeEvent<HTMLTextAreaElement>) => {\n controller.textInput.setInput(e.currentTarget.value);\n onChange?.(e);\n },\n value: controller.textInput.value,\n }\n : {\n onChange,\n };\n\n return (\n <InputGroupTextarea\n className={cn('fk:field-sizing-content fk:max-h-48 fk:min-h-16', className)}\n name=\"message\"\n onCompositionEnd={handleCompositionEnd}\n onCompositionStart={handleCompositionStart}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n placeholder={placeholder}\n {...props}\n {...controlledProps}\n />\n );\n};\n\nexport type PromptInputHeaderProps = Omit<ComponentProps<typeof InputGroupAddon>, 'align'>;\n\nexport const PromptInputHeader = ({ className, ...props }: PromptInputHeaderProps) => (\n <InputGroupAddon align=\"block-end\" className={cn('fk:order-first fk:flex-wrap fk:gap-1', className)} {...props} />\n);\n\nexport type PromptInputFooterProps = Omit<ComponentProps<typeof InputGroupAddon>, 'align'>;\n\nexport const PromptInputFooter = ({ className, ...props }: PromptInputFooterProps) => (\n <InputGroupAddon align=\"block-end\" className={cn('fk:justify-between fk:gap-1', className)} {...props} />\n);\n\nexport type PromptInputToolsProps = HTMLAttributes<HTMLDivElement>;\n\nexport const PromptInputTools = ({ className, ...props }: PromptInputToolsProps) => (\n <div className={cn('fk:flex fk:min-w-0 fk:items-center fk:gap-1', className)} {...props} />\n);\n\nexport type PromptInputButtonTooltip =\n | string\n | {\n content: ReactNode;\n shortcut?: string;\n side?: ComponentProps<typeof TooltipContent>['side'];\n };\n\nexport type PromptInputButtonProps = ComponentProps<typeof InputGroupButton> & {\n tooltip?: PromptInputButtonTooltip;\n};\n\nexport const PromptInputButton = ({\n variant = 'ghost',\n className,\n size,\n tooltip,\n ...props\n}: PromptInputButtonProps) => {\n const newSize = size ?? (Children.count(props.children) > 1 ? 'sm' : 'icon-sm');\n\n const button = (\n <InputGroupButton className={cn(className)} size={newSize} type=\"button\" variant={variant} {...props} />\n );\n\n if (!tooltip) {\n return button;\n }\n\n const tooltipContent = typeof tooltip === 'string' ? tooltip : tooltip.content;\n const shortcut = typeof tooltip === 'string' ? undefined : tooltip.shortcut;\n const side = typeof tooltip === 'string' ? 'top' : (tooltip.side ?? 'top');\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side={side}>\n {tooltipContent}\n {shortcut && <span className=\"fk:ml-2 fk:text-muted-foreground\">{shortcut}</span>}\n </TooltipContent>\n </Tooltip>\n );\n};\n\nexport type PromptInputActionMenuProps = ComponentProps<typeof DropdownMenu>;\nexport const PromptInputActionMenu = (props: PromptInputActionMenuProps) => <DropdownMenu {...props} />;\n\nexport type PromptInputActionMenuTriggerProps = PromptInputButtonProps;\n\nexport const PromptInputActionMenuTrigger = ({ className, children, ...props }: PromptInputActionMenuTriggerProps) => (\n <DropdownMenuTrigger asChild>\n <PromptInputButton className={className} {...props}>\n {children ?? <PlusIcon className=\"fk:size-4\" />}\n </PromptInputButton>\n </DropdownMenuTrigger>\n);\n\nexport type PromptInputActionMenuContentProps = ComponentProps<typeof DropdownMenuContent>;\nexport const PromptInputActionMenuContent = ({ className, onCloseAutoFocus, ...props }: PromptInputActionMenuContentProps) => (\n <DropdownMenuContent\n align=\"start\"\n className={cn(className)}\n onCloseAutoFocus={(event) => {\n onCloseAutoFocus?.(event);\n if (event.defaultPrevented) {\n return;\n }\n\n // Radix refocuses the trigger on close, which would open the trigger's\n // tooltip (tooltips show on focus) right after picking an action.\n event.preventDefault();\n }}\n {...props}\n />\n);\n\nexport type PromptInputActionMenuItemProps = ComponentProps<typeof DropdownMenuItem>;\nexport const PromptInputActionMenuItem = ({ className, ...props }: PromptInputActionMenuItemProps) => (\n <DropdownMenuItem className={cn(className)} {...props} />\n);\n\n// Note: Actions that perform side-effects (like opening a file dialog)\n// are provided in opt-in modules (e.g., prompt-input-attachments).\n\nexport type PromptInputSubmitProps = ComponentProps<typeof InputGroupButton> & {\n status?: ChatStatus;\n onStop?: () => void;\n};\n\nexport const PromptInputSubmit = ({\n className,\n variant = 'default',\n size = 'icon-sm',\n status,\n onStop,\n onClick,\n children,\n ...props\n}: PromptInputSubmitProps) => {\n const isGenerating = status === 'submitted' || status === 'streaming';\n\n let Icon = <CornerDownLeftIcon className=\"fk:size-4\" />;\n\n if (status === 'submitted') {\n Icon = <Spinner />;\n } else if (status === 'streaming') {\n Icon = <SquareIcon className=\"fk:size-4\" />;\n } else if (status === 'error') {\n Icon = <XIcon className=\"fk:size-4\" />;\n }\n\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n if (isGenerating && onStop) {\n e.preventDefault();\n onStop();\n return;\n }\n onClick?.(e);\n },\n [isGenerating, onStop, onClick]\n );\n\n return (\n <InputGroupButton\n aria-label={isGenerating ? 'Stop' : 'Submit'}\n className={cn(className)}\n onClick={handleClick}\n size={size}\n type={isGenerating && onStop ? 'button' : 'submit'}\n variant={variant}\n {...props}\n >\n {children ?? Icon}\n </InputGroupButton>\n );\n};\n\nexport type PromptInputSelectProps = ComponentProps<typeof Select>;\n\nexport const PromptInputSelect = (props: PromptInputSelectProps) => <Select {...props} />;\n\nexport type PromptInputSelectTriggerProps = ComponentProps<typeof SelectTrigger>;\n\nexport const PromptInputSelectTrigger = ({ className, ...props }: PromptInputSelectTriggerProps) => (\n <SelectTrigger\n className={cn(\n 'fk:border-none fk:bg-transparent fk:font-medium fk:text-muted-foreground fk:shadow-none fk:transition-colors',\n 'fk:hover:bg-accent fk:hover:text-foreground fk:aria-expanded:bg-accent fk:aria-expanded:text-foreground',\n className\n )}\n {...props}\n />\n);\n\nexport type PromptInputSelectContentProps = ComponentProps<typeof SelectContent>;\n\nexport const PromptInputSelectContent = ({ className, ...props }: PromptInputSelectContentProps) => (\n <SelectContent className={cn(className)} {...props} />\n);\n\nexport type PromptInputSelectItemProps = ComponentProps<typeof SelectItem>;\n\nexport const PromptInputSelectItem = ({ className, ...props }: PromptInputSelectItemProps) => (\n <SelectItem className={cn(className)} {...props} />\n);\n\nexport type PromptInputSelectValueProps = ComponentProps<typeof SelectValue>;\n\nexport const PromptInputSelectValue = ({ className, ...props }: PromptInputSelectValueProps) => (\n <SelectValue className={cn(className)} {...props} />\n);\n\nexport type PromptInputHoverCardProps = ComponentProps<typeof HoverCard>;\n\nexport const PromptInputHoverCard = ({ openDelay = 0, closeDelay = 0, ...props }: PromptInputHoverCardProps) => (\n <HoverCard closeDelay={closeDelay} openDelay={openDelay} {...props} />\n);\n\nexport type PromptInputHoverCardTriggerProps = ComponentProps<typeof HoverCardTrigger>;\n\nexport const PromptInputHoverCardTrigger = (props: PromptInputHoverCardTriggerProps) => <HoverCardTrigger {...props} />;\n\nexport type PromptInputHoverCardContentProps = ComponentProps<typeof HoverCardContent>;\n\nexport const PromptInputHoverCardContent = ({ align = 'start', ...props }: PromptInputHoverCardContentProps) => (\n <HoverCardContent align={align} {...props} />\n);\n\nexport type PromptInputTabsListProps = HTMLAttributes<HTMLDivElement>;\n\nexport const PromptInputTabsList = ({ className, ...props }: PromptInputTabsListProps) => (\n <div className={cn(className)} {...props} />\n);\n\nexport type PromptInputTabProps = HTMLAttributes<HTMLDivElement>;\n\nexport const PromptInputTab = ({ className, ...props }: PromptInputTabProps) => (\n <div className={cn(className)} {...props} />\n);\n\nexport type PromptInputTabLabelProps = HTMLAttributes<HTMLHeadingElement>;\n\nexport const PromptInputTabLabel = ({ className, ...props }: PromptInputTabLabelProps) => (\n // Content provided via children in props\n // oxlint-disable-next-line eslint-plugin-jsx-a11y(heading-has-content)\n <h3 className={cn('fk:mb-2 fk:px-3 fk:font-medium fk:text-muted-foreground fk:text-xs', className)} {...props} />\n);\n\nexport type PromptInputTabBodyProps = HTMLAttributes<HTMLDivElement>;\n\nexport const PromptInputTabBody = ({ className, ...props }: PromptInputTabBodyProps) => (\n <div className={cn('fk:space-y-1', className)} {...props} />\n);\n\nexport type PromptInputTabItemProps = HTMLAttributes<HTMLDivElement>;\n\nexport const PromptInputTabItem = ({ className, ...props }: PromptInputTabItemProps) => (\n <div\n className={cn('fk:flex fk:items-center fk:gap-2 fk:px-3 fk:py-2 fk:text-xs fk:hover:bg-accent', className)}\n {...props}\n />\n);\n\nexport type PromptInputCommandProps = ComponentProps<typeof Command>;\n\nexport const PromptInputCommand = ({ className, ...props }: PromptInputCommandProps) => (\n <Command className={cn(className)} {...props} />\n);\n\nexport type PromptInputCommandInputProps = ComponentProps<typeof CommandInput>;\n\nexport const PromptInputCommandInput = ({ className, ...props }: PromptInputCommandInputProps) => (\n <CommandInput className={cn(className)} {...props} />\n);\n\nexport type PromptInputCommandListProps = ComponentProps<typeof CommandList>;\n\nexport const PromptInputCommandList = ({ className, ...props }: PromptInputCommandListProps) => (\n <CommandList className={cn(className)} {...props} />\n);\n\nexport type PromptInputCommandEmptyProps = ComponentProps<typeof CommandEmpty>;\n\nexport const PromptInputCommandEmpty = ({ className, ...props }: PromptInputCommandEmptyProps) => (\n <CommandEmpty className={cn(className)} {...props} />\n);\n\nexport type PromptInputCommandGroupProps = ComponentProps<typeof CommandGroup>;\n\nexport const PromptInputCommandGroup = ({ className, ...props }: PromptInputCommandGroupProps) => (\n <CommandGroup className={cn(className)} {...props} />\n);\n\nexport type PromptInputCommandItemProps = ComponentProps<typeof CommandItem>;\n\nexport const PromptInputCommandItem = ({ className, ...props }: PromptInputCommandItemProps) => (\n <CommandItem className={cn(className)} {...props} />\n);\n\nexport type PromptInputCommandSeparatorProps = ComponentProps<typeof CommandSeparator>;\n\nexport const PromptInputCommandSeparator = ({ className, ...props }: PromptInputCommandSeparatorProps) => (\n <CommandSeparator className={cn(className)} {...props} />\n);\n","'use client';\n\nimport { cn } from '../lib/utils';\nimport type { MotionProps } from 'motion/react';\nimport { motion } from 'motion/react';\nimport type { CSSProperties, ElementType, JSX } from 'react';\nimport { memo, useMemo } from 'react';\n\ntype MotionHTMLProps = MotionProps & Record<string, unknown>;\n\n// Cache motion components at module level to avoid creating during render\nconst motionComponentCache = new Map<keyof JSX.IntrinsicElements, React.ComponentType<MotionHTMLProps>>();\n\nconst getMotionComponent = (element: keyof JSX.IntrinsicElements) => {\n let component = motionComponentCache.get(element);\n if (!component) {\n component = motion.create(element);\n motionComponentCache.set(element, component);\n }\n return component;\n};\n\nexport interface TextShimmerProps {\n children: string;\n as?: ElementType;\n className?: string;\n duration?: number;\n spread?: number;\n}\n\nconst ShimmerComponent = ({ children, as: Component = 'p', className, duration = 2, spread = 2 }: TextShimmerProps) => {\n const MotionComponent = getMotionComponent(Component as keyof JSX.IntrinsicElements);\n\n const dynamicSpread = useMemo(() => (children?.length ?? 0) * spread, [children, spread]);\n\n return (\n <MotionComponent\n animate={{ backgroundPosition: '0% center' }}\n className={cn(\n 'fk:relative fk:inline-block fk:bg-[length:250%_100%,auto] fk:bg-clip-text fk:text-transparent',\n 'fk:[--bg:linear-gradient(90deg,#0000_calc(50%-var(--spread)),var(--color-background),#0000_calc(50%+var(--spread)))] fk:[background-repeat:no-repeat,padding-box]',\n className\n )}\n initial={{ backgroundPosition: '100% center' }}\n style={\n {\n '--spread': `${dynamicSpread}px`,\n backgroundImage: 'var(--bg), linear-gradient(var(--color-muted-foreground), var(--color-muted-foreground))',\n } as CSSProperties\n }\n transition={{\n duration,\n ease: 'linear',\n repeat: Number.POSITIVE_INFINITY,\n }}\n >\n {children}\n </MotionComponent>\n );\n};\n\nexport const Shimmer = memo(ShimmerComponent);\n","'use client';\n\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../primitives/collapsible';\nimport { cn } from '../lib/utils';\nimport { cjk } from '@streamdown/cjk';\nimport { code } from '@streamdown/code';\nimport { math } from '@streamdown/math';\nimport { mermaid } from '@streamdown/mermaid';\nimport { BrainIcon, ChevronDownIcon } from 'lucide-react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { createContext, memo, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { Streamdown } from 'streamdown';\n\nimport { Shimmer } from './shimmer';\n\ninterface ReasoningContextValue {\n isStreaming: boolean;\n isOpen: boolean;\n setIsOpen: (open: boolean) => void;\n duration: number | undefined;\n}\n\nconst ReasoningContext = createContext<ReasoningContextValue | null>(null);\n\nexport const useReasoning = () => {\n const context = useContext(ReasoningContext);\n if (!context) {\n throw new Error('Reasoning components must be used within Reasoning');\n }\n return context;\n};\n\nexport type ReasoningProps = ComponentProps<typeof Collapsible> & {\n isStreaming?: boolean;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n duration?: number;\n};\n\nconst AUTO_CLOSE_DELAY = 1000;\nconst MS_IN_S = 1000;\n\nexport const Reasoning = memo(\n ({\n className,\n isStreaming = false,\n open,\n defaultOpen,\n onOpenChange,\n duration: durationProp,\n children,\n ...props\n }: ReasoningProps) => {\n const resolvedDefaultOpen = defaultOpen ?? isStreaming;\n // Track if defaultOpen was explicitly set to false (to prevent auto-open)\n const isExplicitlyClosed = defaultOpen === false;\n\n const [isOpen, setIsOpen] = useControllableState<boolean>({\n defaultProp: resolvedDefaultOpen,\n onChange: onOpenChange,\n prop: open,\n });\n const [duration, setDuration] = useControllableState<number | undefined>({\n defaultProp: undefined,\n prop: durationProp,\n });\n\n const hasEverStreamedRef = useRef(isStreaming);\n const [hasAutoClosed, setHasAutoClosed] = useState(false);\n const startTimeRef = useRef<number | null>(null);\n\n // Track when streaming starts and compute duration\n useEffect(() => {\n if (isStreaming) {\n hasEverStreamedRef.current = true;\n if (startTimeRef.current === null) {\n startTimeRef.current = Date.now();\n }\n } else if (startTimeRef.current !== null) {\n setDuration(Math.ceil((Date.now() - startTimeRef.current) / MS_IN_S));\n startTimeRef.current = null;\n }\n }, [isStreaming, setDuration]);\n\n // Auto-open when streaming starts (unless explicitly closed)\n useEffect(() => {\n if (isStreaming && !isOpen && !isExplicitlyClosed) {\n setIsOpen(true);\n }\n }, [isStreaming, isOpen, setIsOpen, isExplicitlyClosed]);\n\n // Auto-close when streaming ends (once only, and only if it ever streamed)\n useEffect(() => {\n if (hasEverStreamedRef.current && !isStreaming && isOpen && !hasAutoClosed) {\n const timer = setTimeout(() => {\n setIsOpen(false);\n setHasAutoClosed(true);\n }, AUTO_CLOSE_DELAY);\n\n return () => clearTimeout(timer);\n }\n }, [isStreaming, isOpen, setIsOpen, hasAutoClosed]);\n\n const handleOpenChange = useCallback(\n (newOpen: boolean) => {\n setIsOpen(newOpen);\n },\n [setIsOpen]\n );\n\n const contextValue = useMemo(\n () => ({ duration, isOpen, isStreaming, setIsOpen }),\n [duration, isOpen, isStreaming, setIsOpen]\n );\n\n return (\n <ReasoningContext.Provider value={contextValue}>\n <Collapsible\n className={cn('fk:not-prose fk:mb-4', className)}\n onOpenChange={handleOpenChange}\n open={isOpen}\n {...props}\n >\n {children}\n </Collapsible>\n </ReasoningContext.Provider>\n );\n }\n);\n\nexport type ReasoningTriggerProps = ComponentProps<typeof CollapsibleTrigger> & {\n getThinkingMessage?: (isStreaming: boolean, duration?: number) => ReactNode;\n};\n\nconst defaultGetThinkingMessage = (isStreaming: boolean, duration?: number) => {\n if (isStreaming || duration === 0) {\n return <Shimmer duration={1}>Thinking...</Shimmer>;\n }\n if (duration === undefined) {\n return <p>Thought for a few seconds</p>;\n }\n return <p>Thought for {duration} seconds</p>;\n};\n\nexport const ReasoningTrigger = memo(\n ({ className, children, getThinkingMessage = defaultGetThinkingMessage, ...props }: ReasoningTriggerProps) => {\n const { isStreaming, isOpen, duration } = useReasoning();\n\n return (\n <CollapsibleTrigger\n className={cn(\n 'fk:flex fk:w-full fk:items-center fk:gap-2 fk:text-muted-foreground fk:text-sm fk:transition-colors fk:hover:text-foreground',\n className\n )}\n {...props}\n >\n {children ?? (\n <>\n <BrainIcon className=\"fk:size-4\" />\n {getThinkingMessage(isStreaming, duration)}\n <ChevronDownIcon\n className={cn('fk:size-4 fk:transition-transform', isOpen ? 'fk:rotate-180' : 'fk:rotate-0')}\n />\n </>\n )}\n </CollapsibleTrigger>\n );\n }\n);\n\nexport type ReasoningContentProps = ComponentProps<typeof CollapsibleContent> & {\n children: string;\n};\n\nconst streamdownPlugins = { cjk, code, math, mermaid };\n\nexport const ReasoningContent = memo(({ className, children, ...props }: ReasoningContentProps) => (\n <CollapsibleContent\n className={cn(\n 'fk:mt-4 fk:text-sm',\n 'fk:data-[state=closed]:fade-out-0 fk:data-[state=closed]:slide-out-to-top-2 fk:data-[state=open]:slide-in-from-top-2 fk:text-muted-foreground fk:outline-none fk:data-[state=closed]:animate-out fk:data-[state=open]:animate-in',\n className\n )}\n {...props}\n >\n <Streamdown plugins={streamdownPlugins}>{children}</Streamdown>\n </CollapsibleContent>\n));\n\nReasoning.displayName = 'Reasoning';\nReasoningTrigger.displayName = 'ReasoningTrigger';\nReasoningContent.displayName = 'ReasoningContent';\n","'use client';\n\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../primitives/collapsible';\nimport { cn } from '../lib/utils';\nimport { BookIcon, ChevronDownIcon } from 'lucide-react';\nimport type { ComponentProps } from 'react';\n\nexport type SourcesProps = ComponentProps<'div'>;\n\nexport const Sources = ({ className, ...props }: SourcesProps) => (\n <Collapsible className={cn('fk:not-prose fk:mb-4 fk:text-primary fk:text-xs', className)} {...props} />\n);\n\nexport type SourcesTriggerProps = ComponentProps<typeof CollapsibleTrigger> & {\n count: number;\n};\n\nexport const SourcesTrigger = ({ className, count, children, ...props }: SourcesTriggerProps) => (\n <CollapsibleTrigger className={cn('fk:flex fk:items-center fk:gap-2', className)} {...props}>\n {children ?? (\n <>\n <p className=\"fk:font-medium\">Used {count} sources</p>\n <ChevronDownIcon className=\"fk:h-4 fk:w-4\" />\n </>\n )}\n </CollapsibleTrigger>\n);\n\nexport type SourcesContentProps = ComponentProps<typeof CollapsibleContent>;\n\nexport const SourcesContent = ({ className, ...props }: SourcesContentProps) => (\n <CollapsibleContent\n className={cn(\n 'fk:mt-3 fk:flex fk:w-fit fk:flex-col fk:gap-2',\n 'fk:data-[state=closed]:fade-out-0 fk:data-[state=closed]:slide-out-to-top-2 fk:data-[state=open]:slide-in-from-top-2 fk:outline-none fk:data-[state=closed]:animate-out fk:data-[state=open]:animate-in',\n className\n )}\n {...props}\n />\n);\n\nexport type SourceProps = ComponentProps<'a'>;\n\nexport const Source = ({ href, title, children, ...props }: SourceProps) => (\n <a className=\"fk:flex fk:items-center fk:gap-2\" href={href} rel=\"noreferrer\" target=\"_blank\" {...props}>\n {children ?? (\n <>\n <BookIcon className=\"fk:h-4 fk:w-4\" />\n <span className=\"fk:block fk:font-medium\">{title}</span>\n </>\n )}\n </a>\n);\n","'use client';\n\nimport { Button } from '../primitives/button';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../primitives/tooltip';\nimport { cn } from '../lib/utils';\nimport { LoaderIcon, MicIcon, SquareIcon } from 'lucide-react';\nimport { type ComponentProps, useCallback, useEffect, useRef, useState } from 'react';\n\nexport type SpeechInputProps = Omit<ComponentProps<typeof Button>, 'onError'> & {\n onTranscriptionChange?: (text: string) => void;\n /**\n * Required. Receives the recorded audio blob and an abort signal that is\n * cancelled if the user stops processing. Return the transcribed text.\n */\n onAudioRecorded?: (audioBlob: Blob, signal: AbortSignal) => Promise<string>;\n onError?: (error: Error) => void;\n};\n\nconst MAX_RECORDING_MS = 60_000;\n\nfunction isMediaRecorderSupported(): boolean {\n return (\n typeof window !== 'undefined' &&\n 'MediaRecorder' in window &&\n typeof navigator !== 'undefined' &&\n 'mediaDevices' in navigator &&\n typeof navigator.mediaDevices.getUserMedia === 'function'\n );\n}\n\nfunction getSupportedRecorderMimeType(): string | undefined {\n const candidates = ['audio/webm;codecs=opus', 'audio/webm', 'audio/mp4', 'audio/ogg;codecs=opus'];\n\n return candidates.find((type) => MediaRecorder.isTypeSupported(type));\n}\n\nfunction toSpeechInputError(error: unknown, fallback: string): Error {\n if (error instanceof DOMException && (error.name === 'NotAllowedError' || error.name === 'PermissionDeniedError')) {\n return new Error('Microphone permission was denied. Enable the microphone to dictate.');\n }\n\n if (error instanceof DOMException && error.name === 'NotFoundError') {\n return new Error('No microphone was found.');\n }\n\n if (error instanceof Error) {\n return error;\n }\n\n return new Error(fallback);\n}\n\nfunction isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === 'AbortError';\n}\n\nfunction getTooltip(isSupported: boolean, isListening: boolean, isProcessing: boolean): string {\n if (!isSupported) {\n return 'Dictation is not available in this browser.';\n }\n\n if (isProcessing) {\n return 'Cancel transcription';\n }\n\n if (isListening) {\n return 'Stop recording';\n }\n\n return 'Dictate';\n}\n\nexport const SpeechInput = ({\n className,\n disabled,\n onAudioRecorded,\n onError,\n onTranscriptionChange,\n size = 'icon-sm',\n variant = 'ghost',\n ...props\n}: SpeechInputProps) => {\n const [isListening, setIsListening] = useState(false);\n const [isProcessing, setIsProcessing] = useState(false);\n const [isSupported, setIsSupported] = useState(false);\n const mediaRecorderRef = useRef<MediaRecorder | null>(null);\n const streamRef = useRef<MediaStream | null>(null);\n const audioChunksRef = useRef<Blob[]>([]);\n const maxDurationTimerRef = useRef<number | null>(null);\n const abortControllerRef = useRef<AbortController | null>(null);\n const discardNextStopRef = useRef(false);\n const disabledRef = useRef(Boolean(disabled));\n const onAudioRecordedRef = useRef(onAudioRecorded);\n const onErrorRef = useRef(onError);\n const onTranscriptionChangeRef = useRef(onTranscriptionChange);\n\n disabledRef.current = Boolean(disabled);\n onAudioRecordedRef.current = onAudioRecorded;\n onErrorRef.current = onError;\n onTranscriptionChangeRef.current = onTranscriptionChange;\n\n useEffect(() => {\n setIsSupported(isMediaRecorderSupported());\n }, []);\n\n const releaseStream = useCallback(() => {\n if (!streamRef.current) {\n return;\n }\n\n for (const track of streamRef.current.getTracks()) {\n track.stop();\n }\n\n streamRef.current = null;\n }, []);\n\n const clearMaxDurationTimer = useCallback(() => {\n if (maxDurationTimerRef.current === null) {\n return;\n }\n\n window.clearTimeout(maxDurationTimerRef.current);\n maxDurationTimerRef.current = null;\n }, []);\n\n const stopMediaRecorder = useCallback(() => {\n clearMaxDurationTimer();\n\n if (mediaRecorderRef.current?.state === 'recording') {\n mediaRecorderRef.current.stop();\n }\n\n setIsListening(false);\n }, [clearMaxDurationTimer]);\n\n const abortProcessing = useCallback(() => {\n abortControllerRef.current?.abort();\n abortControllerRef.current = null;\n setIsProcessing(false);\n }, []);\n\n const cancelCapture = useCallback(() => {\n abortProcessing();\n clearMaxDurationTimer();\n\n const recorder = mediaRecorderRef.current;\n\n if (recorder?.state === 'recording') {\n discardNextStopRef.current = true;\n recorder.stop();\n }\n\n setIsListening(false);\n releaseStream();\n }, [abortProcessing, clearMaxDurationTimer, releaseStream]);\n\n const startMediaRecorder = useCallback(async () => {\n if (disabledRef.current) {\n return;\n }\n\n if (!onAudioRecordedRef.current) {\n onErrorRef.current?.(new Error('Dictation is not configured.'));\n\n return;\n }\n\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n\n if (disabledRef.current) {\n for (const track of stream.getTracks()) {\n track.stop();\n }\n\n return;\n }\n\n streamRef.current = stream;\n const mimeType = getSupportedRecorderMimeType();\n const mediaRecorder = mimeType ? new MediaRecorder(stream, { mimeType }) : new MediaRecorder(stream);\n audioChunksRef.current = [];\n\n mediaRecorder.ondataavailable = (event) => {\n if (event.data.size > 0) {\n audioChunksRef.current.push(event.data);\n }\n };\n\n mediaRecorder.onstop = async () => {\n releaseStream();\n clearMaxDurationTimer();\n setIsListening(false);\n\n if (discardNextStopRef.current) {\n discardNextStopRef.current = false;\n audioChunksRef.current = [];\n\n return;\n }\n\n const audioBlob = new Blob(audioChunksRef.current, {\n type: mediaRecorder.mimeType || 'audio/webm',\n });\n\n if (audioBlob.size === 0) {\n return;\n }\n\n const abortController = new AbortController();\n abortControllerRef.current = abortController;\n setIsProcessing(true);\n\n try {\n const transcribe = onAudioRecordedRef.current;\n\n if (!transcribe) {\n return;\n }\n\n const transcript = await transcribe(audioBlob, abortController.signal);\n\n if (transcript) {\n onTranscriptionChangeRef.current?.(transcript);\n }\n } catch (error) {\n if (isAbortError(error)) {\n return;\n }\n\n onErrorRef.current?.(toSpeechInputError(error, 'Transcription failed.'));\n } finally {\n // Cancel already nulls the shared ref so the UI can re-record.\n // Only this attempt may clear its own controller and flag.\n if (abortControllerRef.current === abortController) {\n abortControllerRef.current = null;\n setIsProcessing(false);\n }\n }\n };\n\n mediaRecorder.onerror = () => {\n setIsListening(false);\n releaseStream();\n clearMaxDurationTimer();\n onErrorRef.current?.(new Error('Recording failed. Try again.'));\n };\n\n mediaRecorderRef.current = mediaRecorder;\n mediaRecorder.start(250);\n setIsListening(true);\n maxDurationTimerRef.current = window.setTimeout(() => {\n stopMediaRecorder();\n }, MAX_RECORDING_MS);\n } catch (error) {\n setIsListening(false);\n releaseStream();\n onErrorRef.current?.(toSpeechInputError(error, 'Could not start the microphone.'));\n }\n }, [clearMaxDurationTimer, releaseStream, stopMediaRecorder]);\n\n // `disabled` must tear down capture, not only grey out the button. In the\n // chat composer, submit/stream sets this true and would otherwise freeze\n // the mic in the listening state.\n useEffect(() => {\n if (!disabled) {\n return;\n }\n\n cancelCapture();\n }, [cancelCapture, disabled]);\n\n useEffect(() => {\n return () => {\n cancelCapture();\n };\n }, [cancelCapture]);\n\n const handleClick = useCallback(() => {\n if (isProcessing) {\n abortProcessing();\n\n return;\n }\n\n if (isListening) {\n stopMediaRecorder();\n\n return;\n }\n\n void startMediaRecorder();\n }, [abortProcessing, isListening, isProcessing, startMediaRecorder, stopMediaRecorder]);\n\n const isDisabled = disabled || !isSupported || !onAudioRecorded;\n const tooltip = getTooltip(isSupported && Boolean(onAudioRecorded), isListening, isProcessing);\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"fk:relative fk:inline-flex fk:items-center fk:justify-center\">\n {isListening\n ? [0, 1, 2].map((index) => (\n <span\n className=\"fk:absolute fk:inset-0 fk:animate-ping fk:rounded-full fk:border-2 fk:border-red-400/30 fk:corner-squircle\"\n key={index}\n style={{\n animationDelay: `${String(index * 0.3)}s`,\n animationDuration: '2s',\n }}\n />\n ))\n : null}\n <Button\n aria-label={tooltip}\n aria-pressed={isListening}\n size={size}\n variant={isListening ? 'destructive' : variant}\n {...props}\n className={cn('fk:relative fk:z-10 fk:rounded-full fk:dark:hover:bg-accent fk:corner-squircle', className)}\n disabled={isDisabled}\n onClick={handleClick}\n type=\"button\"\n >\n {isProcessing ? <LoaderIcon className=\"fk:size-4 fk:animate-spin\" /> : null}\n {!isProcessing && isListening ? <SquareIcon className=\"fk:size-4\" /> : null}\n {!(isProcessing || isListening) ? <MicIcon className=\"fk:size-5\" /> : null}\n </Button>\n </span>\n </TooltipTrigger>\n <TooltipContent>{tooltip}</TooltipContent>\n </Tooltip>\n );\n};\n","'use client';\n\nimport { Button } from '../primitives/button';\nimport { ScrollArea, ScrollBar } from '../primitives/scroll-area';\nimport { cn } from '../lib/utils';\nimport type { ComponentProps } from 'react';\nimport { useCallback } from 'react';\n\nexport type SuggestionsProps = ComponentProps<typeof ScrollArea>;\n\nexport const Suggestions = ({ className, children, ...props }: SuggestionsProps) => (\n <ScrollArea className=\"fk:w-full fk:overflow-x-auto fk:whitespace-nowrap\" {...props}>\n <div className={cn('fk:flex fk:w-max fk:flex-nowrap fk:items-center fk:gap-2', className)}>{children}</div>\n <ScrollBar className=\"fk:hidden\" orientation=\"horizontal\" />\n </ScrollArea>\n);\n\nexport type SuggestionProps = Omit<ComponentProps<typeof Button>, 'onClick'> & {\n suggestion: string;\n onClick?: (suggestion: string) => void;\n};\n\nexport const Suggestion = ({\n suggestion,\n onClick,\n className,\n variant = 'outline',\n size = 'sm',\n children,\n ...props\n}: SuggestionProps) => {\n const handleClick = useCallback(() => {\n onClick?.(suggestion);\n }, [onClick, suggestion]);\n\n return (\n <Button\n className={cn('fk:cursor-pointer fk:rounded-full fk:px-4 fk:corner-squircle', className)}\n onClick={handleClick}\n size={size}\n type=\"button\"\n variant={variant}\n {...props}\n >\n {children || suggestion}\n </Button>\n );\n};\n","'use client';\n\nimport { Badge } from '../primitives/badge';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../primitives/collapsible';\nimport { cn } from '../lib/utils';\nimport type { DynamicToolUIPart, ToolUIPart } from 'ai';\nimport { CheckCircleIcon, ChevronDownIcon, CircleIcon, ClockIcon, WrenchIcon, XCircleIcon } from 'lucide-react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { isValidElement } from 'react';\n\nimport { CodeBlock } from './code-block';\n\nexport type ToolProps = ComponentProps<typeof Collapsible>;\n\nexport const Tool = ({ className, ...props }: ToolProps) => (\n <Collapsible\n className={cn('fk:group fk:not-prose fk:mb-4 fk:w-full fk:rounded-md fk:border fk:corner-squircle', className)}\n {...props}\n />\n);\n\nexport type ToolPart = ToolUIPart | DynamicToolUIPart;\n\nexport type ToolHeaderProps = {\n title?: string;\n className?: string;\n} & (\n | { type: ToolUIPart['type']; state: ToolUIPart['state']; toolName?: never }\n | {\n type: DynamicToolUIPart['type'];\n state: DynamicToolUIPart['state'];\n toolName: string;\n }\n);\n\nconst statusLabels: Record<ToolPart['state'], string> = {\n 'approval-requested': 'Awaiting Approval',\n 'approval-responded': 'Responded',\n 'input-available': 'Running',\n 'input-streaming': 'Pending',\n 'output-available': 'Completed',\n 'output-denied': 'Denied',\n 'output-error': 'Error',\n};\n\nconst statusIcons: Record<ToolPart['state'], ReactNode> = {\n 'approval-requested': <ClockIcon className=\"fk:size-4 fk:text-yellow-600\" />,\n 'approval-responded': <CheckCircleIcon className=\"fk:size-4 fk:text-blue-600\" />,\n 'input-available': <ClockIcon className=\"fk:size-4 fk:animate-pulse\" />,\n 'input-streaming': <CircleIcon className=\"fk:size-4\" />,\n 'output-available': <CheckCircleIcon className=\"fk:size-4 fk:text-green-600\" />,\n 'output-denied': <XCircleIcon className=\"fk:size-4 fk:text-orange-600\" />,\n 'output-error': <XCircleIcon className=\"fk:size-4 fk:text-red-600\" />,\n};\n\nexport const getStatusBadge = (status: ToolPart['state']) => (\n <Badge className=\"fk:gap-1.5 fk:py-px fk:rounded-full fk:text-xs fk:corner-squircle\" variant=\"secondary\">\n {statusIcons[status]}\n {statusLabels[status]}\n </Badge>\n);\n\nexport const ToolHeader = ({ className, title, type, state, toolName, ...props }: ToolHeaderProps) => {\n const derivedName = type === 'dynamic-tool' ? toolName : type.split('-').slice(1).join('-');\n\n return (\n <CollapsibleTrigger\n className={cn('fk:flex fk:w-full fk:items-center fk:justify-between fk:gap-4 fk:px-3 fk:py-2', className)}\n {...props}\n >\n <div className=\"fk:flex fk:items-center fk:gap-2\">\n <WrenchIcon className=\"fk:size-4 fk:text-muted-foreground\" />\n <span className=\"fk:font-medium fk:text-sm\">{title ?? derivedName}</span>\n {getStatusBadge(state)}\n </div>\n <ChevronDownIcon className=\"fk:size-4 fk:text-muted-foreground fk:transition-transform fk:group-data-[state=open]:rotate-180\" />\n </CollapsibleTrigger>\n );\n};\n\nexport type ToolContentProps = ComponentProps<typeof CollapsibleContent>;\n\nexport const ToolContent = ({ className, ...props }: ToolContentProps) => (\n <CollapsibleContent\n className={cn(\n 'fk:data-[state=closed]:fade-out-0 fk:data-[state=closed]:slide-out-to-top-2 fk:data-[state=open]:slide-in-from-top-2 fk:space-y-4 fk:p-4 fk:text-popover-foreground fk:outline-none fk:data-[state=closed]:animate-out fk:data-[state=open]:animate-in',\n className\n )}\n {...props}\n />\n);\n\nexport type ToolInputProps = ComponentProps<'div'> & {\n input: ToolPart['input'];\n};\n\nexport const ToolInput = ({ className, input, ...props }: ToolInputProps) => (\n <div className={cn('fk:space-y-2 fk:overflow-hidden', className)} {...props}>\n <h4 className=\"fk:font-medium fk:text-muted-foreground fk:text-xs fk:uppercase fk:tracking-wide\">Parameters</h4>\n <div className=\"fk:rounded-md fk:bg-muted/50 fk:corner-squircle\">\n <CodeBlock code={JSON.stringify(input, null, 2)} language=\"json\" />\n </div>\n </div>\n);\n\nexport type ToolOutputProps = ComponentProps<'div'> & {\n output: ToolPart['output'];\n errorText: ToolPart['errorText'];\n};\n\nexport const ToolOutput = ({ className, output, errorText, ...props }: ToolOutputProps) => {\n if (!(output || errorText)) {\n return null;\n }\n\n let Output = <div>{output as ReactNode}</div>;\n\n if (typeof output === 'object' && !isValidElement(output)) {\n Output = <CodeBlock code={JSON.stringify(output, null, 2)} language=\"json\" />;\n } else if (typeof output === 'string') {\n Output = <CodeBlock code={output} language=\"json\" />;\n }\n\n return (\n <div className={cn('fk:space-y-2', className)} {...props}>\n <h4 className=\"fk:font-medium fk:text-muted-foreground fk:text-xs fk:uppercase fk:tracking-wide\">\n {errorText ? 'Error' : 'Result'}\n </h4>\n <div\n className={cn(\n 'fk:overflow-x-auto fk:rounded-md fk:text-xs fk:[&_table]:w-full fk:corner-squircle',\n errorText ? 'fk:bg-destructive/10 fk:text-destructive' : 'fk:bg-muted/50 fk:text-foreground'\n )}\n >\n {errorText && <div>{errorText}</div>}\n {Output}\n </div>\n </div>\n );\n};\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../lib/utils';\n\nconst alertVariants = cva(\n 'fk:relative fk:w-full fk:rounded-lg fk:border fk:px-4 fk:py-3 fk:[&>svg~*]:pl-7 fk:[&>svg+div]:translate-y-[-3px] fk:[&>svg]:absolute fk:[&>svg]:left-4 fk:[&>svg]:top-4 fk:[&>svg]:text-foreground fk:corner-squircle',\n {\n variants: {\n variant: {\n 'default': 'fk:bg-card fk:text-card-foreground',\n destructive: 'fk:border-none fk:text-destructive fk:bg-destructive-foreground fk:[&>svg]:text-destructive',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nfunction Alert({ className, variant, ...props }: React.ComponentProps<'div'> & VariantProps<typeof alertVariants>) {\n return <div data-slot=\"alert\" role=\"alert\" className={cn(alertVariants({ variant }), className)} {...props} />;\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn('fk:col-start-2 fk:line-clamp-1 fk:min-h-4 fk:font-medium fk:tracking-tight', className)}\n {...props}\n />\n );\n}\n\nfunction AlertDescription({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div data-slot=\"alert-description\" className={cn('fk:text-sm fk:[&_p]:leading-relaxed', className)} {...props} />\n );\n}\n\nexport { Alert, AlertTitle, AlertDescription };\n"]}