@yourgpt/copilot-sdk 2.1.8 → 2.5.1-beta.0
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.
- package/dist/{chunk-JFVTY757.cjs → chunk-6R63NBNP.cjs} +16 -16
- package/dist/{chunk-JFVTY757.cjs.map → chunk-6R63NBNP.cjs.map} +1 -1
- package/dist/{chunk-ISOMZAYN.js → chunk-JPUKXFR4.js} +8 -4
- package/dist/chunk-JPUKXFR4.js.map +1 -0
- package/dist/{chunk-H3LX6FTP.js → chunk-YYLTWY5R.js} +3 -3
- package/dist/{chunk-H3LX6FTP.js.map → chunk-YYLTWY5R.js.map} +1 -1
- package/dist/{chunk-IDAQU3FP.cjs → chunk-ZYLHGNIG.cjs} +8 -4
- package/dist/chunk-ZYLHGNIG.cjs.map +1 -0
- package/dist/experimental/index.cjs +2 -2
- package/dist/experimental/index.js +1 -1
- package/dist/react/index.cjs +62 -62
- package/dist/react/index.d.cts +2 -0
- package/dist/react/index.d.ts +2 -0
- package/dist/react/index.js +2 -2
- package/dist/ui/index.cjs +26 -11
- package/dist/ui/index.cjs.map +1 -1
- package/dist/ui/index.d.cts +6 -1
- package/dist/ui/index.d.ts +6 -1
- package/dist/ui/index.js +23 -8
- package/dist/ui/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-IDAQU3FP.cjs.map +0 -1
- package/dist/chunk-ISOMZAYN.js.map +0 -1
package/dist/ui/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ui/components/ui/markdown.tsx","../../src/ui/components/ui/code-block.tsx","../../src/ui/components/ui/button.tsx","../../src/ui/components/ui/feedback-bar.tsx","../../src/ui/components/ui/chat-container.tsx","../../src/ui/components/ui/scroll-button.tsx","../../src/ui/components/ui/tooltip.tsx","../../src/ui/components/ui/avatar.tsx","../../src/ui/components/ui/message.tsx","../../src/ui/components/ui/textarea.tsx","../../src/ui/components/ui/prompt-input.tsx","../../src/ui/components/ui/hover-card.tsx","../../src/ui/components/ui/source.tsx","../../src/ui/components/ui/search-results.tsx","../../src/ui/components/ui/citations.tsx","../../src/ui/components/ui/reasoning.tsx","../../src/ui/context/copilot-ui-context.tsx","../../src/ui/components/ui/tool-steps.tsx","../../src/ui/components/icons/index.tsx","../../src/ui/components/ui/confirmation.tsx","../../src/ui/components/ui/permission-confirmation.tsx","../../src/ui/components/ui/follow-up.tsx","../../src/ui/components/ui/branch-navigator.tsx","../../src/ui/components/ui/dev-logger.tsx","../../src/ui/components/ui/capability-badge.tsx","../../src/ui/components/ui/model-selector.tsx","../../src/ui/components/ui/popover.tsx","../../src/ui/components/ui/thread-picker.tsx","../../src/ui/components/ui/thread-list.tsx","../../src/ui/components/icons/copilot-sdk-logo.tsx","../../src/ui/components/composed/chat/chat-header.tsx","../../src/ui/components/composed/chat/suggestions.tsx","../../src/ui/components/ui/mcp-ui-frame.tsx","../../src/ui/components/composed/chat/message-actions-context.tsx","../../src/ui/components/composed/chat/message-actions-compound.tsx","../../src/ui/components/composed/chat/default-message.tsx","../../src/ui/components/composed/chat/chat-welcome.tsx","../../src/ui/components/composed/chat/chat.tsx","../../src/ui/components/composed/chat/message-list.tsx","../../src/ui/components/composed/chat/tool-execution-message.tsx","../../src/ui/hooks/useInternalThreadManager.ts","../../src/ui/components/composed/connected-chat.tsx","../../src/ui/components/composed/powered-by.tsx","../../src/ui/hooks/useAttachments.ts","../../src/ui/components/attachment-strip.tsx","../../src/ui/components/drop-zone-overlay.tsx","../../src/ui/index.ts"],"names":["jsx","Streamdown","code","memo","cn","cva","React","Slot","jsxs","StickToBottomOriginal","useStickToBottomContext","BaseTooltip","React3","AvatarPrimitive","React4","createContext","useContext","useState","useRef","useLayoutEffect","HoverCardPrimitive","React6","getDomain","getFaviconUrl","Globe","React7","ChevronUp","ChevronDown","ExternalLink","React8","React9","React10","TextShimmerLoader","ChevronDownIcon","ThumbsUpIcon","ThumbsDownIcon","XIcon","React11","Fragment","React12","BasePopover","React13","formatDate","PlusIcon","CheckIcon","React14","TrashIcon","React15","DEFAULT_MCP_UI_SANDBOX","React16","parseMCPUIMessage","Loader","useCallback","useMemo","CopyIcon","MessageActions","React19","ReactDOM","useId","DEFAULT_MAX_FILE_SIZE","DEFAULT_ALLOWED_TYPES","getAttachmentType","fileToBase64","generateAttachmentId","error","React22","useReducer","useThreadManager","useCopilot","useEffect","createServerAdapter","createLocalStorageAdapter","StatusBadge","svgProps"],"mappings":"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","file":"index.cjs","sourcesContent":["import { memo, ComponentProps } from \"react\";\nimport { Streamdown, LinkSafetyConfig } from \"streamdown\";\nimport { code } from \"@streamdown/code\";\n\nexport type MarkdownProps = {\n children: string;\n id?: string;\n className?: string;\n isStreaming?: boolean;\n /** Link safety modal configuration. Disabled by default. */\n linkSafety?: LinkSafetyConfig;\n};\n\n// Normalized heading component for chat UI (same size, just bold)\n// Ignore Streamdown's className to prevent its text-3xl etc. from overriding\nconst createHeading = (Tag: \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\") => {\n const HeadingComponent = ({\n children,\n className: _,\n ...props\n }: ComponentProps<typeof Tag>) => (\n <Tag className=\"text-[1em] font-semibold my-2 first:mt-0\" {...props}>\n {children}\n </Tag>\n );\n HeadingComponent.displayName = Tag.toUpperCase();\n return HeadingComponent;\n};\n\nconst headingComponents = {\n h1: createHeading(\"h1\"),\n h2: createHeading(\"h2\"),\n h3: createHeading(\"h3\"),\n h4: createHeading(\"h4\"),\n h5: createHeading(\"h5\"),\n h6: createHeading(\"h6\"),\n};\n\nfunction MarkdownComponent({\n children,\n className,\n isStreaming = false,\n linkSafety = { enabled: false },\n}: MarkdownProps) {\n return (\n <div className={className}>\n <Streamdown\n plugins={{ code }}\n isAnimating={isStreaming}\n components={headingComponents}\n linkSafety={linkSafety}\n >\n {children}\n </Streamdown>\n </div>\n );\n}\n\nconst Markdown = memo(MarkdownComponent);\nMarkdown.displayName = \"Markdown\";\n\nexport { Markdown };\nexport type { LinkSafetyConfig } from \"streamdown\";\n","import { cn } from \"../../lib/utils\";\nimport React from \"react\";\n\nexport type CodeBlockProps = {\n children?: React.ReactNode;\n className?: string;\n} & React.HTMLProps<HTMLDivElement>;\n\nfunction CodeBlock({ children, className, ...props }: CodeBlockProps) {\n return (\n <div\n className={cn(\n \"not-prose flex w-full flex-col overflow-clip border\",\n \"border-border bg-card text-card-foreground rounded-xl\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport type CodeBlockCodeProps = {\n code: string;\n language?: string;\n className?: string;\n} & React.HTMLProps<HTMLDivElement>;\n\nfunction CodeBlockCode({\n code,\n language = \"plaintext\",\n className,\n ...props\n}: CodeBlockCodeProps) {\n const classNames = cn(\n \"w-full overflow-x-auto text-[13px] [&>pre]:px-4 [&>pre]:py-4\",\n className,\n );\n\n return (\n <div className={classNames} {...props}>\n <pre>\n <code data-language={language}>{code}</code>\n </pre>\n </div>\n );\n}\n\nexport type CodeBlockGroupProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction CodeBlockGroup({\n children,\n className,\n ...props\n}: CodeBlockGroupProps) {\n return (\n <div\n className={cn(\"flex items-center justify-between\", className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport { CodeBlockGroup, CodeBlockCode, CodeBlock };\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst buttonVariants = cva(\n \"csdk-button inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white shadow-sm hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n lg: \"h-10 rounded-md px-8\",\n icon: \"h-9 w-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nexport interface ButtonProps\n extends\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n );\n },\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","import { cn } from \"../../lib/utils\";\n\nfunction ThumbsUpIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M7 10v12\" />\n <path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\" />\n </svg>\n );\n}\n\nfunction ThumbsDownIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M17 14V2\" />\n <path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z\" />\n </svg>\n );\n}\n\nfunction XIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\ntype FeedbackBarProps = {\n className?: string;\n title?: string;\n icon?: React.ReactNode;\n onHelpful?: () => void;\n onNotHelpful?: () => void;\n onClose?: () => void;\n};\n\nexport function FeedbackBar({\n className,\n title,\n icon,\n onHelpful,\n onNotHelpful,\n onClose,\n}: FeedbackBarProps) {\n return (\n <div\n className={cn(\n \"bg-background border-border inline-flex rounded-[12px] border text-sm\",\n className,\n )}\n >\n <div className=\"flex w-full items-center justify-between\">\n <div className=\"flex flex-1 items-center justify-start gap-4 py-3 pl-4\">\n {icon}\n <span className=\"text-foreground font-medium\">{title}</span>\n </div>\n <div className=\"flex items-center justify-center gap-0.5 px-3 py-0\">\n <button\n type=\"button\"\n className=\"text-muted-foreground hover:text-foreground flex size-8 items-center justify-center rounded-md transition-colors\"\n aria-label=\"Helpful\"\n onClick={onHelpful}\n >\n <ThumbsUpIcon className=\"size-4\" />\n </button>\n <button\n type=\"button\"\n className=\"text-muted-foreground hover:text-foreground flex size-8 items-center justify-center rounded-md transition-colors\"\n aria-label=\"Not helpful\"\n onClick={onNotHelpful}\n >\n <ThumbsDownIcon className=\"size-4\" />\n </button>\n </div>\n <div className=\"border-border flex items-center justify-center border-l\">\n <button\n type=\"button\"\n onClick={onClose}\n className=\"text-muted-foreground hover:text-foreground flex items-center justify-center rounded-md p-3\"\n aria-label=\"Close\"\n >\n <XIcon className=\"size-5\" />\n </button>\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { cn } from \"../../lib/utils\";\nimport {\n StickToBottom as StickToBottomOriginal,\n useStickToBottomContext,\n} from \"use-stick-to-bottom\";\n\n// Cast to fix React types version mismatch in monorepo\nconst StickToBottom = StickToBottomOriginal as unknown as React.FC<\n React.PropsWithChildren<{\n className?: string;\n resize?: string;\n initial?: string;\n role?: string;\n }>\n> & { Content: React.FC<React.PropsWithChildren<{ className?: string }>> };\n\n// Re-export the context hook for ScrollButton\nfunction useChatContainer() {\n const context = useStickToBottomContext();\n return {\n isAtBottom: context.isAtBottom,\n scrollToBottom: context.scrollToBottom,\n };\n}\n\nexport type ChatContainerRootProps = {\n children: React.ReactNode;\n className?: string;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nexport type ChatContainerContentProps = {\n children: React.ReactNode;\n className?: string;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nexport type ChatContainerScrollAnchorProps = {\n className?: string;\n ref?: React.RefObject<HTMLDivElement>;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nfunction ChatContainerRoot({\n children,\n className,\n ...props\n}: ChatContainerRootProps) {\n return (\n <StickToBottom\n className={cn(\"min-h-0\", className)}\n resize=\"smooth\"\n initial=\"instant\"\n role=\"log\"\n {...props}\n >\n {children}\n </StickToBottom>\n );\n}\n\nfunction ChatContainerContent({\n children,\n className,\n ...props\n}: ChatContainerContentProps) {\n return (\n <StickToBottom.Content\n className={cn(\"flex w-full flex-col\", className)}\n {...props}\n >\n {children}\n </StickToBottom.Content>\n );\n}\n\nfunction ChatContainerScrollAnchor({\n className,\n ...props\n}: ChatContainerScrollAnchorProps) {\n return (\n <div\n className={cn(\"h-px w-full shrink-0 scroll-mt-4\", className)}\n aria-hidden=\"true\"\n {...props}\n />\n );\n}\n\nexport {\n ChatContainerRoot,\n ChatContainerContent,\n ChatContainerScrollAnchor,\n useChatContainer,\n};\n","import { Button, buttonVariants } from \"./button\";\nimport { cn } from \"../../lib/utils\";\nimport { type VariantProps } from \"class-variance-authority\";\nimport { useChatContainer } from \"./chat-container\";\n\nfunction ChevronDownIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\nexport type ScrollButtonProps = {\n className?: string;\n variant?: VariantProps<typeof buttonVariants>[\"variant\"];\n size?: VariantProps<typeof buttonVariants>[\"size\"];\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nfunction ScrollButton({\n className,\n variant = \"secondary\",\n size = \"sm\",\n ...props\n}: ScrollButtonProps) {\n const { isAtBottom, scrollToBottom } = useChatContainer();\n\n return (\n <Button\n variant={variant}\n size={size}\n className={cn(\n \"h-10 w-10 rounded-full transition-all duration-150 ease-out shadow-md bg-background\",\n !isAtBottom\n ? \"translate-y-0 scale-100 opacity-100\"\n : \"pointer-events-none translate-y-4 scale-95 opacity-0\",\n className,\n )}\n onClick={() => scrollToBottom()}\n {...props}\n >\n <ChevronDownIcon className=\"h-5 w-5\" />\n </Button>\n );\n}\n\nexport { ScrollButton };\n","\"use client\";\n\nimport React from \"react\";\nimport { Tooltip as BaseTooltip } from \"@base-ui/react/tooltip\";\nimport { cn } from \"../../lib/utils\";\n\n// ============================================\n// TooltipProvider\n// ============================================\n\nexport type TooltipProviderProps = {\n children: React.ReactNode;\n delayDuration?: number;\n};\n\nfunction TooltipProvider({\n children,\n delayDuration = 300,\n}: TooltipProviderProps) {\n return (\n <BaseTooltip.Provider delay={delayDuration}>\n {children}\n </BaseTooltip.Provider>\n );\n}\n\n// ============================================\n// Tooltip (Root)\n// ============================================\n\nexport type TooltipProps = {\n children: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n};\n\nfunction Tooltip({ children, open, defaultOpen, onOpenChange }: TooltipProps) {\n return (\n <BaseTooltip.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n >\n {children}\n </BaseTooltip.Root>\n );\n}\n\n// ============================================\n// TooltipTrigger\n// ============================================\n\nexport type TooltipTriggerProps = {\n children: React.ReactNode;\n asChild?: boolean;\n disabled?: boolean;\n} & React.ComponentPropsWithoutRef<\"button\">;\n\nfunction TooltipTrigger({\n children,\n asChild,\n disabled,\n ...props\n}: TooltipTriggerProps) {\n if (asChild && React.isValidElement(children)) {\n return (\n <BaseTooltip.Trigger disabled={disabled} render={children} {...props} />\n );\n }\n\n return (\n <BaseTooltip.Trigger disabled={disabled} {...props}>\n {children}\n </BaseTooltip.Trigger>\n );\n}\n\n// ============================================\n// TooltipContent\n// ============================================\n\nexport type TooltipContentProps = {\n children: React.ReactNode;\n className?: string;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n align?: \"start\" | \"center\" | \"end\";\n sideOffset?: number;\n showArrow?: boolean;\n};\n\nfunction TooltipContent({\n children,\n className,\n side = \"top\",\n align = \"center\",\n sideOffset = 8,\n showArrow = true,\n}: TooltipContentProps) {\n return (\n <BaseTooltip.Portal>\n <BaseTooltip.Positioner side={side} align={align} sideOffset={sideOffset}>\n <BaseTooltip.Popup\n className={cn(\n \"z-50 rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground shadow-md\",\n \"animate-in fade-in-0 zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n className,\n )}\n >\n {children}\n {showArrow && <BaseTooltip.Arrow className=\"fill-primary\" />}\n </BaseTooltip.Popup>\n </BaseTooltip.Positioner>\n </BaseTooltip.Portal>\n );\n}\n\n// ============================================\n// Exports\n// ============================================\n\nexport { TooltipProvider, Tooltip, TooltipTrigger, TooltipContent };\n","import * as React from \"react\";\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst Avatar = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full\",\n className,\n )}\n {...props}\n />\n));\nAvatar.displayName = AvatarPrimitive.Root.displayName;\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn(\"aspect-square h-full w-full object-cover\", className)}\n {...props}\n />\n));\nAvatarImage.displayName = AvatarPrimitive.Image.displayName;\n\nconst AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n \"csdk-avatar-fallback flex h-full w-full items-center justify-center rounded-full bg-muted\",\n className,\n )}\n {...props}\n />\n));\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;\n\nexport { Avatar, AvatarImage, AvatarFallback };\n","import { Avatar, AvatarFallback, AvatarImage } from \"./avatar\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"./tooltip\";\nimport { cn } from \"../../lib/utils\";\nimport { Markdown } from \"./markdown\";\n\nexport type MessageProps = {\n children: React.ReactNode;\n className?: string;\n} & React.HTMLProps<HTMLDivElement>;\n\nconst Message = ({ children, className, ...props }: MessageProps) => (\n <div className={cn(\"csdk-message flex gap-3\", className)} {...props}>\n {children}\n </div>\n);\n\nexport type MessageAvatarProps = {\n /** Image source URL */\n src?: string;\n /** Alt text for the image */\n alt?: string;\n /** Text fallback (e.g. \"AI\") */\n fallback?: string;\n /** Icon/component fallback (takes precedence over text fallback when src is empty) */\n fallbackIcon?: React.ReactNode;\n /** Custom avatar component - when provided, replaces the default avatar */\n children?: React.ReactNode;\n delayMs?: number;\n className?: string;\n};\n\nconst MessageAvatar = ({\n src,\n alt = \"Avatar\",\n fallback,\n fallbackIcon,\n children,\n delayMs,\n className,\n}: MessageAvatarProps) => {\n // If custom children provided, render them in a wrapper with proper sizing\n if (children) {\n return (\n <span className={cn(\"csdk-avatar flex shrink-0 size-7\", className)}>\n {children}\n </span>\n );\n }\n\n return (\n <Avatar className={cn(\"csdk-avatar size-7 shrink-0\", className)}>\n <AvatarImage src={src} alt={alt} />\n <AvatarFallback delayMs={delayMs}>\n {fallbackIcon || fallback}\n </AvatarFallback>\n </Avatar>\n );\n};\n\nexport type MessageContentProps = {\n children: React.ReactNode;\n markdown?: boolean;\n className?: string;\n /** Font size variant: 'sm' (14px), 'base' (16px), 'lg' (18px) */\n size?: \"sm\" | \"base\" | \"lg\";\n} & React.ComponentProps<typeof Markdown> &\n Omit<React.HTMLProps<HTMLDivElement>, \"size\">;\n\nconst textSizeMap = {\n sm: \"text-sm\",\n base: \"text-base\",\n lg: \"text-lg\",\n};\n\nconst MessageContent = ({\n children,\n markdown = false,\n className,\n size = \"sm\",\n ...props\n}: MessageContentProps) => {\n const classNames = cn(\n \"csdk-message-content rounded-lg p-2 break-words whitespace-normal max-w-full overflow-x-auto overflow-y-hidden\",\n // Typography - simple Tailwind utilities (no prose)\n \"[&_p]:my-1 \",\n \"[&_ul]:my-1 [&_ul]:pl-4 [&_ul]:list-disc [&_ul]:list-outside\",\n \"[&_ol]:my-1 [&_ol]:pl-4 [&_ol]:list-decimal [&_ol]:list-outside\",\n \"[&_li]:my-0.5 [&_li]:pl-0\",\n \"[&_pre]:my-2 [&_blockquote]:my-2 [&_blockquote]:pl-3 [&_blockquote]:border-l-2 [&_blockquote]:border-current/30\",\n \"[&_code]:bg-current/10 [&_code]:px-1 [&_code]:rounded [&_code]:text-[0.9em]\",\n \"[&_a]:underline [&_a]:text-[var(--csdk-link-color)] [&_a]:[overflow-wrap:anywhere]\",\n \"[&_button[data-streamdown='link']]:underline [&_button[data-streamdown='link']]:text-[var(--csdk-link-color)] [&_button[data-streamdown='link']]:[overflow-wrap:anywhere] [&_button[data-streamdown='link']]:font-medium\",\n \"[&_.text-primary]:text-[var(--csdk-link-color)]\",\n \"[&_strong]:font-semibold\",\n textSizeMap[size],\n className,\n );\n\n return markdown ? (\n <Markdown className={classNames} {...props}>\n {children as string}\n </Markdown>\n ) : (\n <div className={classNames} {...props}>\n {children}\n </div>\n );\n};\n\nexport type MessageActionsProps = {\n children: React.ReactNode;\n className?: string;\n} & React.HTMLProps<HTMLDivElement>;\n\nconst MessageActions = ({\n children,\n className,\n ...props\n}: MessageActionsProps) => (\n <div\n className={cn(\n \"csdk-message-actions text-muted-foreground flex items-center gap-2\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n);\n\nexport type MessageActionProps = {\n className?: string;\n tooltip: React.ReactNode;\n children: React.ReactNode;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n} & React.ComponentProps<typeof Tooltip>;\n\nconst MessageAction = ({\n tooltip,\n children,\n className,\n side = \"top\",\n ...props\n}: MessageActionProps) => {\n return (\n <TooltipProvider>\n <Tooltip {...props}>\n <TooltipTrigger asChild>{children}</TooltipTrigger>\n <TooltipContent side={side} className={className}>\n {tooltip}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n};\n\nexport {\n Message,\n MessageAvatar,\n MessageContent,\n MessageActions,\n MessageAction,\n};\n","import * as React from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst Textarea = React.forwardRef<\n HTMLTextAreaElement,\n React.ComponentProps<\"textarea\">\n>(({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n});\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","\"use client\";\n\nimport React, {\n createContext,\n useContext,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\nimport { Textarea } from \"./textarea\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"./tooltip\";\nimport { cn } from \"../../lib/utils\";\n\ntype PromptInputContextType = {\n isLoading: boolean;\n value: string;\n setValue: (value: string) => void;\n maxHeight: number | string;\n onSubmit?: () => void;\n disabled?: boolean;\n textareaRef: React.MutableRefObject<HTMLTextAreaElement | null>;\n};\n\nconst PromptInputContext = createContext<PromptInputContextType>({\n isLoading: false,\n value: \"\",\n setValue: () => {},\n maxHeight: 240,\n onSubmit: undefined,\n disabled: false,\n textareaRef: { current: null },\n});\n\nfunction usePromptInput() {\n return useContext(PromptInputContext);\n}\n\nexport type PromptInputProps = {\n isLoading?: boolean;\n value?: string;\n onValueChange?: (value: string) => void;\n maxHeight?: number | string;\n onSubmit?: () => void;\n children: React.ReactNode;\n className?: string;\n disabled?: boolean;\n} & React.ComponentProps<\"div\">;\n\nfunction PromptInput({\n className,\n isLoading = false,\n maxHeight = 240,\n value,\n onValueChange,\n onSubmit,\n children,\n disabled = false,\n onClick,\n ...props\n}: PromptInputProps) {\n const [internalValue, setInternalValue] = useState(value || \"\");\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n const handleChange = (newValue: string) => {\n setInternalValue(newValue);\n onValueChange?.(newValue);\n };\n\n const handleClick: React.MouseEventHandler<HTMLDivElement> = (e) => {\n if (!disabled) textareaRef.current?.focus();\n onClick?.(e);\n };\n\n return (\n <TooltipProvider>\n <PromptInputContext.Provider\n value={{\n isLoading,\n value: value ?? internalValue,\n setValue: onValueChange ?? handleChange,\n maxHeight,\n onSubmit,\n disabled,\n textareaRef,\n }}\n >\n <div\n onClick={handleClick}\n className={cn(\n \"csdk-input border-input bg-background cursor-text rounded-3xl border p-2 shadow-xs\",\n disabled && \"cursor-not-allowed opacity-60\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </PromptInputContext.Provider>\n </TooltipProvider>\n );\n}\n\nexport type PromptInputTextareaProps = {\n disableAutosize?: boolean;\n} & React.ComponentProps<typeof Textarea>;\n\nfunction PromptInputTextarea({\n className,\n onKeyDown,\n disableAutosize = false,\n ...props\n}: PromptInputTextareaProps) {\n const { value, setValue, maxHeight, onSubmit, disabled, textareaRef } =\n usePromptInput();\n\n const adjustHeight = (el: HTMLTextAreaElement | null) => {\n if (!el || disableAutosize) return;\n\n el.style.height = \"auto\";\n\n if (typeof maxHeight === \"number\") {\n el.style.height = `${Math.min(el.scrollHeight, maxHeight)}px`;\n } else {\n el.style.height = `min(${el.scrollHeight}px, ${maxHeight})`;\n }\n };\n\n const handleRef = (el: HTMLTextAreaElement | null) => {\n textareaRef.current = el;\n adjustHeight(el);\n };\n\n useLayoutEffect(() => {\n if (!textareaRef.current || disableAutosize) return;\n\n const el = textareaRef.current;\n el.style.height = \"auto\";\n\n if (typeof maxHeight === \"number\") {\n el.style.height = `${Math.min(el.scrollHeight, maxHeight)}px`;\n } else {\n el.style.height = `min(${el.scrollHeight}px, ${maxHeight})`;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, maxHeight, disableAutosize]);\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n adjustHeight(e.target);\n setValue(e.target.value);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n onSubmit?.();\n }\n onKeyDown?.(e);\n };\n\n return (\n <Textarea\n ref={handleRef}\n value={value}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n className={cn(\n \"csdk-input-textarea text-foreground min-h-[44px] w-full resize-none border-none bg-transparent shadow-none outline-none focus-visible:ring-0 focus-visible:ring-offset-0\",\n className,\n )}\n rows={1}\n disabled={disabled}\n {...props}\n />\n );\n}\n\nexport type PromptInputActionsProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction PromptInputActions({\n children,\n className,\n ...props\n}: PromptInputActionsProps) {\n return (\n <div className={cn(\"flex items-center gap-2\", className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport type PromptInputActionProps = {\n className?: string;\n tooltip: React.ReactNode;\n children: React.ReactNode;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n};\n\nfunction PromptInputAction({\n tooltip,\n children,\n className,\n side = \"top\",\n}: PromptInputActionProps) {\n const { disabled } = usePromptInput();\n\n return (\n <Tooltip>\n <TooltipTrigger\n asChild\n disabled={disabled}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n {children}\n </TooltipTrigger>\n <TooltipContent side={side} className={className} showArrow>\n {tooltip}\n </TooltipContent>\n </Tooltip>\n );\n}\n\nexport {\n PromptInput,\n PromptInputTextarea,\n PromptInputActions,\n PromptInputAction,\n};\n","import * as React from \"react\";\nimport * as HoverCardPrimitive from \"@radix-ui/react-hover-card\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst HoverCard = HoverCardPrimitive.Root;\n\nconst HoverCardTrigger = HoverCardPrimitive.Trigger;\n\nconst HoverCardContent = React.forwardRef<\n React.ElementRef<typeof HoverCardPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof HoverCardPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <HoverCardPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n />\n));\nHoverCardContent.displayName = HoverCardPrimitive.Content.displayName;\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent };\n","\"use client\";\n\nimport { HoverCard, HoverCardContent, HoverCardTrigger } from \"./hover-card\";\nimport { cn } from \"../../lib/utils\";\nimport { createContext, useContext } from \"react\";\n\nconst SourceContext = createContext<{\n href: string;\n domain: string;\n} | null>(null);\n\nfunction useSourceContext() {\n const ctx = useContext(SourceContext);\n if (!ctx) throw new Error(\"Source.* must be used inside <Source>\");\n return ctx;\n}\n\nexport type SourceProps = {\n href: string;\n children: React.ReactNode;\n};\n\nexport function Source({ href, children }: SourceProps) {\n let domain = \"\";\n try {\n domain = new URL(href).hostname;\n } catch {\n domain = href.split(\"/\").pop() || href;\n }\n\n return (\n <SourceContext.Provider value={{ href, domain }}>\n <HoverCard openDelay={150} closeDelay={0}>\n {children}\n </HoverCard>\n </SourceContext.Provider>\n );\n}\n\nexport type SourceTriggerProps = {\n label?: string | number;\n showFavicon?: boolean;\n className?: string;\n};\n\nexport function SourceTrigger({\n label,\n showFavicon = false,\n className,\n}: SourceTriggerProps) {\n const { href, domain } = useSourceContext();\n const labelToShow = label ?? domain.replace(\"www.\", \"\");\n\n return (\n <HoverCardTrigger asChild>\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cn(\n \"inline-flex h-7 items-center gap-1.5 rounded-full border border-border/50 bg-background px-2.5 text-xs text-foreground/80 no-underline shadow-sm transition-all duration-150\",\n \"hover:bg-muted hover:border-border hover:shadow-md hover:text-foreground\",\n className,\n )}\n >\n {showFavicon && (\n <img\n src={`https://www.google.com/s2/favicons?sz=64&domain_url=${encodeURIComponent(\n href,\n )}`}\n alt=\"\"\n width={16}\n height={16}\n className=\"size-4 rounded-full\"\n />\n )}\n <span className=\"truncate max-w-28 font-medium\">{labelToShow}</span>\n </a>\n </HoverCardTrigger>\n );\n}\n\nexport type SourceContentProps = {\n title: string;\n description: string;\n className?: string;\n};\n\nexport function SourceContent({\n title,\n description,\n className,\n}: SourceContentProps) {\n const { href, domain } = useSourceContext();\n\n return (\n <HoverCardContent\n className={cn(\"w-80 p-0 shadow-lg border border-border/50\", className)}\n sideOffset={8}\n >\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex flex-col gap-2.5 p-4 hover:bg-muted/50 transition-colors rounded-lg\"\n >\n <div className=\"flex items-center gap-2\">\n <img\n src={`https://www.google.com/s2/favicons?sz=64&domain_url=${encodeURIComponent(\n href,\n )}`}\n alt=\"\"\n className=\"size-5 rounded-full\"\n width={20}\n height={20}\n />\n <div className=\"text-foreground/70 truncate text-sm\">\n {domain.replace(\"www.\", \"\")}\n </div>\n </div>\n <div className=\"line-clamp-2 text-sm font-semibold text-foreground\">\n {title}\n </div>\n {description && (\n <div className=\"text-muted-foreground line-clamp-3 text-sm leading-relaxed\">\n {description}\n </div>\n )}\n </a>\n </HoverCardContent>\n );\n}\n\n// ============================================\n// SourceGroup - Multiple sources in a row\n// ============================================\n\nexport type SourceItem = {\n href: string;\n title?: string;\n description?: string;\n};\n\nexport type SourceGroupProps = {\n /** Array of sources to display */\n sources: SourceItem[];\n /** Label text (default: \"Sources\") */\n label?: string;\n /** Maximum sources to show before \"+N more\" */\n maxVisible?: number;\n /** Show favicon for each source */\n showFavicon?: boolean;\n /** Use numbered labels (1, 2, 3...) instead of domain */\n numbered?: boolean;\n /** Additional CSS classes */\n className?: string;\n};\n\n/**\n * Display a group of sources in a horizontal layout.\n * Each source shows a hover card with details on hover.\n *\n * @example\n * ```tsx\n * <SourceGroup\n * sources={[\n * { href: \"https://example.com\", title: \"Example\", description: \"...\" },\n * ]}\n * numbered\n * showFavicon\n * />\n * ```\n */\nexport function SourceGroup({\n sources,\n label,\n maxVisible = 5,\n showFavicon = true,\n numbered = false,\n className,\n}: SourceGroupProps) {\n if (!sources || sources.length === 0) return null;\n\n const visibleSources = sources.slice(0, maxVisible);\n const hiddenCount = sources.length - maxVisible;\n\n return (\n <div className={cn(\"flex flex-wrap items-center gap-2\", className)}>\n {label && (\n <span className=\"text-muted-foreground text-xs font-medium\">\n {label}\n </span>\n )}\n {visibleSources.map((source, index) => (\n <Source key={index} href={source.href}>\n <SourceTrigger\n label={numbered ? index + 1 : undefined}\n showFavicon={showFavicon}\n />\n {(source.title || source.description) && (\n <SourceContent\n title={source.title || getDomain(source.href)}\n description={source.description || source.href}\n />\n )}\n </Source>\n ))}\n {hiddenCount > 0 && (\n <span className=\"text-muted-foreground text-xs font-medium bg-muted px-2 py-1 rounded-full\">\n +{hiddenCount} more\n </span>\n )}\n </div>\n );\n}\n\n// ============================================\n// SimpleSource - Standalone source badge (no hover)\n// ============================================\n\nexport type SimpleSourceProps = {\n /** Source URL */\n href: string;\n /** Label (number or text) */\n label?: string | number;\n /** Show favicon */\n showFavicon?: boolean;\n /** Additional CSS classes */\n className?: string;\n};\n\n/**\n * Simple source badge without hover card.\n * Use for inline citations like [1], [2], etc.\n */\nexport function SimpleSource({\n href,\n label,\n showFavicon = false,\n className,\n}: SimpleSourceProps) {\n let domain = \"\";\n try {\n domain = new URL(href).hostname.replace(\"www.\", \"\");\n } catch {\n domain = href;\n }\n\n const displayLabel = label ?? domain;\n\n return (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cn(\n \"bg-muted text-muted-foreground hover:bg-primary/20 hover:text-primary\",\n \"inline-flex h-5 items-center gap-1 rounded-full text-xs no-underline transition-colors\",\n showFavicon ? \"pr-2 pl-1\" : \"px-1.5\",\n className,\n )}\n >\n {showFavicon && (\n <img\n src={`https://www.google.com/s2/favicons?sz=64&domain_url=${encodeURIComponent(href)}`}\n alt=\"\"\n width={14}\n height={14}\n className=\"size-3.5 rounded-full\"\n />\n )}\n <span className=\"truncate tabular-nums font-normal\">{displayLabel}</span>\n </a>\n );\n}\n\n// ============================================\n// Utility Functions\n// ============================================\n\nfunction getDomain(url: string): string {\n try {\n return new URL(url).hostname.replace(\"www.\", \"\");\n } catch {\n return url;\n }\n}\n","\"use client\";\n\nimport { cn } from \"../../lib/utils\";\nimport type {\n WebSearchResult,\n WebSearchResponse,\n} from \"../../../core/tools/webSearch/types\";\n\n// ============================================\n// SearchResults Component\n// ============================================\n\nexport interface SearchResultsProps {\n /** Search results to display */\n results: WebSearchResult[];\n /** Additional CSS classes */\n className?: string;\n /** Display variant */\n variant?: \"cards\" | \"list\" | \"compact\";\n /** Maximum results to show (default: all) */\n maxResults?: number;\n /** Show relevance scores (if available) */\n showScores?: boolean;\n /** Show publication dates (if available) */\n showDates?: boolean;\n}\n\n/**\n * Display web search results with multiple layout options.\n *\n * @example\n * ```tsx\n * // Compact inline citations\n * <SearchResults results={searchResults} variant=\"compact\" />\n *\n * // Card layout with full details\n * <SearchResults results={searchResults} variant=\"cards\" />\n *\n * // List layout\n * <SearchResults results={searchResults} variant=\"list\" />\n * ```\n */\nexport function SearchResults({\n results,\n className,\n variant = \"cards\",\n maxResults,\n showScores = false,\n showDates = false,\n}: SearchResultsProps) {\n const displayResults = maxResults ? results.slice(0, maxResults) : results;\n\n if (displayResults.length === 0) {\n return (\n <div className={cn(\"text-muted-foreground text-sm\", className)}>\n No results found\n </div>\n );\n }\n\n if (variant === \"compact\") {\n return (\n <div className={cn(\"flex flex-wrap gap-2\", className)}>\n {displayResults.map((result, i) => (\n <SearchResultCompact key={i} result={result} index={i + 1} />\n ))}\n </div>\n );\n }\n\n if (variant === \"list\") {\n return (\n <div className={cn(\"space-y-2\", className)}>\n {displayResults.map((result, i) => (\n <SearchResultList\n key={i}\n result={result}\n index={i + 1}\n showScore={showScores}\n showDate={showDates}\n />\n ))}\n </div>\n );\n }\n\n // Default: cards variant\n return (\n <div className={cn(\"grid gap-2\", className)}>\n {displayResults.map((result, i) => (\n <SearchResultCard\n key={i}\n result={result}\n showScore={showScores}\n showDate={showDates}\n />\n ))}\n </div>\n );\n}\n\n// ============================================\n// Sub-components\n// ============================================\n\ninterface SearchResultCardProps {\n result: WebSearchResult;\n showScore?: boolean;\n showDate?: boolean;\n}\n\nfunction SearchResultCard({\n result,\n showScore,\n showDate,\n}: SearchResultCardProps) {\n const domain = result.domain || getDomain(result.url);\n\n return (\n <a\n href={result.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"group block p-3 border rounded-lg hover:bg-muted/50 transition-colors\"\n >\n <div className=\"flex items-start gap-3\">\n <img\n src={getFaviconUrl(result.url)}\n alt=\"\"\n className=\"w-5 h-5 mt-0.5 rounded-sm\"\n width={20}\n height={20}\n />\n <div className=\"flex-1 min-w-0\">\n <h4 className=\"font-medium text-sm group-hover:text-primary truncate\">\n {result.title}\n </h4>\n <p className=\"text-xs text-muted-foreground mt-1 line-clamp-2\">\n {result.content}\n </p>\n <div className=\"flex items-center gap-2 mt-1\">\n <span className=\"text-xs text-muted-foreground/60 truncate\">\n {domain}\n </span>\n {showDate && result.publishedDate && (\n <span className=\"text-xs text-muted-foreground/60\">\n {formatDate(result.publishedDate)}\n </span>\n )}\n {showScore && result.score !== undefined && (\n <span className=\"text-xs text-muted-foreground/60\">\n {(result.score * 100).toFixed(0)}% match\n </span>\n )}\n </div>\n </div>\n </div>\n </a>\n );\n}\n\ninterface SearchResultListProps {\n result: WebSearchResult;\n index: number;\n showScore?: boolean;\n showDate?: boolean;\n}\n\nfunction SearchResultList({\n result,\n index,\n showScore,\n showDate,\n}: SearchResultListProps) {\n const domain = result.domain || getDomain(result.url);\n\n return (\n <a\n href={result.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"group flex items-start gap-2 py-1.5 hover:bg-muted/30 rounded px-1 -mx-1 transition-colors\"\n >\n <span className=\"text-xs text-muted-foreground/60 mt-0.5 w-4 text-right flex-shrink-0\">\n {index}.\n </span>\n <img\n src={getFaviconUrl(result.url)}\n alt=\"\"\n className=\"w-4 h-4 mt-0.5 rounded-sm flex-shrink-0\"\n width={16}\n height={16}\n />\n <div className=\"flex-1 min-w-0\">\n <span className=\"text-sm group-hover:text-primary\">{result.title}</span>\n <span className=\"text-xs text-muted-foreground ml-2\">{domain}</span>\n {showDate && result.publishedDate && (\n <span className=\"text-xs text-muted-foreground/60 ml-2\">\n {formatDate(result.publishedDate)}\n </span>\n )}\n {showScore && result.score !== undefined && (\n <span className=\"text-xs text-muted-foreground/60 ml-2\">\n ({(result.score * 100).toFixed(0)}%)\n </span>\n )}\n </div>\n </a>\n );\n}\n\ninterface SearchResultCompactProps {\n result: WebSearchResult;\n index: number;\n}\n\nfunction SearchResultCompact({ result, index }: SearchResultCompactProps) {\n const domain = result.domain || getDomain(result.url);\n\n return (\n <a\n href={result.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1.5 px-2 py-1 text-xs bg-muted hover:bg-muted/80 rounded-md transition-colors\"\n title={result.title}\n >\n <img\n src={getFaviconUrl(result.url)}\n alt=\"\"\n className=\"w-3.5 h-3.5 rounded-sm\"\n width={14}\n height={14}\n />\n <span className=\"truncate max-w-[120px]\">{domain}</span>\n </a>\n );\n}\n\n// ============================================\n// SearchAnswer Component\n// ============================================\n\nexport interface SearchAnswerProps {\n /** AI-generated answer from search */\n answer: string;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Display an AI-generated answer summary from web search.\n * Useful when using providers like Tavily that generate summaries.\n */\nexport function SearchAnswer({ answer, className }: SearchAnswerProps) {\n return (\n <div\n className={cn(\n \"p-3 bg-muted/50 rounded-lg border-l-2 border-primary/50\",\n className,\n )}\n >\n <p className=\"text-sm\">{answer}</p>\n </div>\n );\n}\n\n// ============================================\n// SearchResultsWithAnswer Component\n// ============================================\n\nexport interface SearchResultsWithAnswerProps {\n /** Full web search response */\n response: WebSearchResponse;\n /** Additional CSS classes */\n className?: string;\n /** Results variant */\n variant?: \"cards\" | \"list\" | \"compact\";\n /** Show the AI answer (if available) */\n showAnswer?: boolean;\n /** Maximum results to show */\n maxResults?: number;\n}\n\n/**\n * Display complete web search response including answer and results.\n *\n * @example\n * ```tsx\n * <SearchResultsWithAnswer\n * response={webSearchResponse}\n * showAnswer={true}\n * variant=\"cards\"\n * />\n * ```\n */\nexport function SearchResultsWithAnswer({\n response,\n className,\n variant = \"cards\",\n showAnswer = true,\n maxResults,\n}: SearchResultsWithAnswerProps) {\n return (\n <div className={cn(\"space-y-3\", className)}>\n {showAnswer && response.answer && (\n <SearchAnswer answer={response.answer} />\n )}\n <SearchResults\n results={response.results}\n variant={variant}\n maxResults={maxResults}\n />\n {response.searchTime && (\n <p className=\"text-xs text-muted-foreground\">\n Found {response.results.length} results in {response.searchTime}ms\n </p>\n )}\n </div>\n );\n}\n\n// ============================================\n// Utility Functions\n// ============================================\n\nfunction getDomain(url: string): string {\n try {\n return new URL(url).hostname.replace(\"www.\", \"\");\n } catch {\n return url;\n }\n}\n\nfunction getFaviconUrl(url: string): string {\n try {\n const domain = new URL(url).hostname;\n return `https://www.google.com/s2/favicons?domain=${domain}&sz=32`;\n } catch {\n return \"\";\n }\n}\n\nfunction formatDate(dateStr: string): string {\n try {\n const date = new Date(dateStr);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n\n if (diffDays === 0) return \"Today\";\n if (diffDays === 1) return \"Yesterday\";\n if (diffDays < 7) return `${diffDays} days ago`;\n if (diffDays < 30) return `${Math.floor(diffDays / 7)} weeks ago`;\n if (diffDays < 365) return `${Math.floor(diffDays / 30)} months ago`;\n return `${Math.floor(diffDays / 365)} years ago`;\n } catch {\n return dateStr;\n }\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { ChevronDown, ChevronUp, ExternalLink, Globe } from \"lucide-react\";\n\n// ============================================\n// Types\n// ============================================\n\nexport interface Citation {\n /** Citation number (1-based) */\n index: number;\n /** Source URL */\n url: string;\n /** Source title */\n title: string;\n /** Domain name */\n domain?: string;\n /** Favicon URL */\n favicon?: string;\n}\n\nexport interface CitationsConfig {\n /** Show citations (default: true) */\n enabled?: boolean;\n /** Citation style */\n style?: \"badges\" | \"numbered\" | \"superscript\";\n /** Where to show sources */\n sourcesPosition?: \"bottom\" | \"inline\" | \"collapsible\";\n /** Max sources to show initially */\n maxVisible?: number;\n}\n\n// ============================================\n// CitationBadge - Inline numbered reference [1]\n// ============================================\n\nexport interface CitationBadgeProps {\n /** Citation number */\n index: number;\n /** Source URL for linking */\n url?: string;\n /** Hover tooltip */\n title?: string;\n /** Size variant */\n size?: \"sm\" | \"md\";\n /** Additional CSS classes */\n className?: string;\n /** Click handler */\n onClick?: () => void;\n}\n\n/**\n * Inline citation badge like [1], [2], etc.\n * Similar to Perplexity and ChatGPT citation style.\n *\n * @example\n * ```tsx\n * <CitationBadge index={1} url=\"https://example.com\" title=\"Source\" />\n * ```\n */\nexport function CitationBadge({\n index,\n url,\n title,\n size = \"sm\",\n className,\n onClick,\n}: CitationBadgeProps) {\n const sizeClasses = {\n sm: \"text-[10px] min-w-[16px] h-4 px-1\",\n md: \"text-xs min-w-[20px] h-5 px-1.5\",\n };\n\n const badge = (\n <span\n className={cn(\n \"inline-flex items-center justify-center rounded font-medium\",\n \"bg-primary/10 text-primary hover:bg-primary/20\",\n \"cursor-pointer transition-colors\",\n sizeClasses[size],\n className,\n )}\n title={title}\n onClick={onClick}\n >\n {index}\n </span>\n );\n\n if (url) {\n return (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex\"\n >\n {badge}\n </a>\n );\n }\n\n return badge;\n}\n\n// ============================================\n// CitationSuperscript - Superscript style [1]\n// ============================================\n\nexport interface CitationSuperscriptProps {\n index: number;\n url?: string;\n title?: string;\n className?: string;\n}\n\n/**\n * Superscript citation like academic papers.\n */\nexport function CitationSuperscript({\n index,\n url,\n title,\n className,\n}: CitationSuperscriptProps) {\n const sup = (\n <sup\n className={cn(\n \"text-[10px] text-primary hover:underline cursor-pointer ml-0.5\",\n className,\n )}\n title={title}\n >\n [{index}]\n </sup>\n );\n\n if (url) {\n return (\n <a href={url} target=\"_blank\" rel=\"noopener noreferrer\">\n {sup}\n </a>\n );\n }\n\n return sup;\n}\n\n// ============================================\n// SourcePill - Compact source chip\n// ============================================\n\nexport interface SourcePillProps {\n /** Citation data */\n citation: Citation;\n /** Show index number */\n showIndex?: boolean;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Compact source pill with favicon and domain.\n * Used in horizontal source bars.\n */\nexport function SourcePill({\n citation,\n showIndex = true,\n className,\n}: SourcePillProps) {\n const domain = citation.domain || getDomain(citation.url);\n const favicon = citation.favicon || getFaviconUrl(citation.url);\n\n return (\n <a\n href={citation.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n title={citation.title}\n className={cn(\n \"inline-flex items-center gap-1.5 px-2 py-1 text-xs rounded-full\",\n \"bg-muted hover:bg-muted/80 transition-colors\",\n \"text-muted-foreground hover:text-foreground\",\n className,\n )}\n >\n {showIndex && (\n <span className=\"text-[10px] font-medium text-primary\">\n {citation.index}\n </span>\n )}\n <img\n src={favicon}\n alt=\"\"\n className=\"w-3.5 h-3.5 rounded-sm\"\n width={14}\n height={14}\n onError={(e) => {\n (e.target as HTMLImageElement).style.display = \"none\";\n }}\n />\n <span className=\"truncate max-w-[100px]\">{domain}</span>\n </a>\n );\n}\n\n// ============================================\n// SourcesBar - Horizontal scrollable sources\n// ============================================\n\nexport interface SourcesBarProps {\n /** List of citations */\n citations: Citation[];\n /** Label text (default: \"Sources\") */\n label?: string;\n /** Max sources to show */\n maxVisible?: number;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Horizontal bar of source pills.\n * Similar to Perplexity's sources section.\n *\n * @example\n * ```tsx\n * <SourcesBar\n * citations={[\n * { index: 1, url: \"https://...\", title: \"Source 1\" },\n * { index: 2, url: \"https://...\", title: \"Source 2\" },\n * ]}\n * />\n * ```\n */\nexport function SourcesBar({\n citations,\n label = \"Sources\",\n maxVisible = 5,\n className,\n}: SourcesBarProps) {\n const visibleCitations = citations.slice(0, maxVisible);\n const hiddenCount = citations.length - maxVisible;\n\n if (citations.length === 0) return null;\n\n return (\n <div className={cn(\"flex items-center gap-2\", className)}>\n <span className=\"text-xs text-muted-foreground flex items-center gap-1\">\n <Globe className=\"w-3 h-3\" />\n {label}\n </span>\n <div className=\"flex items-center gap-1.5 overflow-x-auto\">\n {visibleCitations.map((citation) => (\n <SourcePill key={citation.index} citation={citation} />\n ))}\n {hiddenCount > 0 && (\n <span className=\"text-xs text-muted-foreground px-2\">\n +{hiddenCount} more\n </span>\n )}\n </div>\n </div>\n );\n}\n\n// ============================================\n// SourcesCollapsible - Expandable sources\n// ============================================\n\nexport interface SourcesCollapsibleProps {\n /** List of citations */\n citations: Citation[];\n /** Label text (default: \"Sources\") */\n label?: string;\n /** Start expanded (default: false) */\n defaultExpanded?: boolean;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Collapsible sources section that expands to show full list.\n *\n * @example\n * ```tsx\n * <SourcesCollapsible\n * citations={citations}\n * defaultExpanded={false}\n * />\n * ```\n */\nexport function SourcesCollapsible({\n citations,\n label = \"Sources\",\n defaultExpanded = false,\n className,\n}: SourcesCollapsibleProps) {\n const [expanded, setExpanded] = React.useState(defaultExpanded);\n\n if (citations.length === 0) return null;\n\n return (\n <div className={cn(\"border rounded-lg\", className)}>\n <button\n onClick={() => setExpanded(!expanded)}\n className=\"w-full flex items-center justify-between px-3 py-2 text-sm hover:bg-muted/50 transition-colors\"\n >\n <span className=\"flex items-center gap-2 text-muted-foreground\">\n <Globe className=\"w-4 h-4\" />\n {label} ({citations.length})\n </span>\n {expanded ? (\n <ChevronUp className=\"w-4 h-4 text-muted-foreground\" />\n ) : (\n <ChevronDown className=\"w-4 h-4 text-muted-foreground\" />\n )}\n </button>\n {expanded && (\n <div className=\"px-3 pb-3 space-y-2\">\n {citations.map((citation) => (\n <SourceItem key={citation.index} citation={citation} />\n ))}\n </div>\n )}\n </div>\n );\n}\n\n// ============================================\n// SourceItem - Full source row\n// ============================================\n\ninterface SourceItemProps {\n citation: Citation;\n}\n\nfunction SourceItem({ citation }: SourceItemProps) {\n const domain = citation.domain || getDomain(citation.url);\n const favicon = citation.favicon || getFaviconUrl(citation.url);\n\n return (\n <a\n href={citation.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex items-start gap-3 p-2 rounded-md hover:bg-muted/50 transition-colors group\"\n >\n <span className=\"flex items-center justify-center w-5 h-5 rounded bg-primary/10 text-primary text-xs font-medium flex-shrink-0\">\n {citation.index}\n </span>\n <img\n src={favicon}\n alt=\"\"\n className=\"w-4 h-4 mt-0.5 rounded-sm flex-shrink-0\"\n width={16}\n height={16}\n onError={(e) => {\n (e.target as HTMLImageElement).style.display = \"none\";\n }}\n />\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium group-hover:text-primary truncate\">\n {citation.title}\n </p>\n <p className=\"text-xs text-muted-foreground truncate\">{domain}</p>\n </div>\n <ExternalLink className=\"w-3.5 h-3.5 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity flex-shrink-0\" />\n </a>\n );\n}\n\n// ============================================\n// SourcesList - Simple numbered list\n// ============================================\n\nexport interface SourcesListProps {\n /** List of citations */\n citations: Citation[];\n /** Additional CSS classes */\n className?: string;\n /** Compact mode */\n compact?: boolean;\n}\n\n/**\n * Simple numbered list of sources.\n *\n * @example\n * ```tsx\n * <SourcesList citations={citations} compact />\n * ```\n */\nexport function SourcesList({\n citations,\n className,\n compact = false,\n}: SourcesListProps) {\n if (citations.length === 0) return null;\n\n if (compact) {\n return (\n <div className={cn(\"text-xs text-muted-foreground\", className)}>\n <span className=\"font-medium\">Sources: </span>\n {citations.map((c, i) => (\n <React.Fragment key={c.index}>\n <a\n href={c.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"hover:text-primary hover:underline\"\n >\n [{c.index}]\n </a>\n {i < citations.length - 1 && \" \"}\n </React.Fragment>\n ))}\n </div>\n );\n }\n\n return (\n <div className={cn(\"space-y-1\", className)}>\n {citations.map((citation) => (\n <SourceItem key={citation.index} citation={citation} />\n ))}\n </div>\n );\n}\n\n// ============================================\n// MessageWithCitations - Complete message wrapper\n// ============================================\n\nexport interface MessageWithCitationsProps {\n /** Message content (can contain citation placeholders) */\n children: React.ReactNode;\n /** Citations for this message */\n citations: Citation[];\n /** Citation display configuration */\n config?: CitationsConfig;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Wraps a message with citation support.\n * Shows sources bar or collapsible section based on config.\n *\n * @example\n * ```tsx\n * <MessageWithCitations\n * citations={[\n * { index: 1, url: \"...\", title: \"Source 1\" },\n * ]}\n * config={{ sourcesPosition: \"bottom\" }}\n * >\n * <p>According to research <CitationBadge index={1} />, ...</p>\n * </MessageWithCitations>\n * ```\n */\nexport function MessageWithCitations({\n children,\n citations,\n config = {},\n className,\n}: MessageWithCitationsProps) {\n const { enabled = true, sourcesPosition = \"bottom\", maxVisible = 5 } = config;\n\n if (!enabled || citations.length === 0) {\n return <div className={className}>{children}</div>;\n }\n\n return (\n <div className={cn(\"space-y-3\", className)}>\n <div>{children}</div>\n {sourcesPosition === \"bottom\" && (\n <SourcesBar citations={citations} maxVisible={maxVisible} />\n )}\n {sourcesPosition === \"collapsible\" && (\n <SourcesCollapsible citations={citations} />\n )}\n </div>\n );\n}\n\n// ============================================\n// Utility Functions\n// ============================================\n\nfunction getDomain(url: string): string {\n try {\n return new URL(url).hostname.replace(\"www.\", \"\");\n } catch {\n return url;\n }\n}\n\nfunction getFaviconUrl(url: string): string {\n try {\n const domain = new URL(url).hostname;\n return `https://www.google.com/s2/favicons?domain=${domain}&sz=32`;\n } catch {\n return \"\";\n }\n}\n\n/**\n * Convert OpenAI annotations to Citation format\n */\nexport function annotationsToCitations(\n annotations: Array<{\n type: string;\n url?: string;\n title?: string;\n start_index?: number;\n end_index?: number;\n }>,\n): Citation[] {\n const seen = new Set<string>();\n const citations: Citation[] = [];\n\n for (const annotation of annotations) {\n if (annotation.type === \"url_citation\" && annotation.url) {\n if (!seen.has(annotation.url)) {\n seen.add(annotation.url);\n citations.push({\n index: citations.length + 1,\n url: annotation.url,\n title: annotation.title || getDomain(annotation.url),\n domain: getDomain(annotation.url),\n });\n }\n }\n }\n\n return citations;\n}\n\n/**\n * Convert WebSearchResult array to Citation format\n */\nexport function resultsToCitations(\n results: Array<{\n url: string;\n title: string;\n domain?: string;\n }>,\n): Citation[] {\n return results.map((result, index) => ({\n index: index + 1,\n url: result.url,\n title: result.title,\n domain: result.domain || getDomain(result.url),\n }));\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Markdown } from \"./markdown\";\n\n// ============================================\n// Context for Reasoning state\n// ============================================\n\ninterface ReasoningContextValue {\n isOpen: boolean;\n setIsOpen: (open: boolean) => void;\n isStreaming: boolean;\n}\n\nconst ReasoningContext = React.createContext<ReasoningContextValue | null>(\n null,\n);\n\nfunction useReasoningContext() {\n const context = React.useContext(ReasoningContext);\n if (!context) {\n throw new Error(\n \"Reasoning components must be used within a Reasoning provider\",\n );\n }\n return context;\n}\n\n// ============================================\n// Reasoning Root\n// ============================================\n\nexport interface ReasoningProps {\n children: React.ReactNode;\n /** Whether content is currently streaming */\n isStreaming?: boolean;\n /** Controlled open state */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Default open state (uncontrolled) */\n defaultOpen?: boolean;\n /** Class name for the container */\n className?: string;\n}\n\n/**\n * Reasoning component - Collapsible container for AI thinking/reasoning content\n *\n * Auto-expands during streaming and collapses when complete.\n *\n * @example\n * ```tsx\n * <Reasoning isStreaming={isStreaming}>\n * <ReasoningTrigger>Thinking...</ReasoningTrigger>\n * <ReasoningContent>{thinkingText}</ReasoningContent>\n * </Reasoning>\n * ```\n */\nexport function Reasoning({\n children,\n isStreaming = false,\n open: controlledOpen,\n onOpenChange,\n defaultOpen = false,\n className,\n}: ReasoningProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);\n const prevStreamingRef = React.useRef(isStreaming);\n\n // Determine if controlled or uncontrolled\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : uncontrolledOpen;\n\n const setIsOpen = React.useCallback(\n (open: boolean) => {\n if (onOpenChange) {\n onOpenChange(open);\n }\n if (!isControlled) {\n setUncontrolledOpen(open);\n }\n },\n [isControlled, onOpenChange],\n );\n\n // Auto-expand when streaming starts, auto-collapse when streaming ends\n React.useEffect(() => {\n if (isStreaming && !prevStreamingRef.current) {\n // Streaming just started - expand\n setIsOpen(true);\n } else if (!isStreaming && prevStreamingRef.current) {\n // Streaming just ended - collapse\n setIsOpen(false);\n }\n prevStreamingRef.current = isStreaming;\n }, [isStreaming, setIsOpen]);\n\n return (\n <ReasoningContext.Provider value={{ isOpen, setIsOpen, isStreaming }}>\n <div className={cn(\"reasoning\", className)}>{children}</div>\n </ReasoningContext.Provider>\n );\n}\n\n// ============================================\n// Reasoning Trigger\n// ============================================\n\nexport interface ReasoningTriggerProps {\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * Clickable trigger to expand/collapse reasoning content\n */\nexport function ReasoningTrigger({\n children,\n className,\n}: ReasoningTriggerProps) {\n const { isOpen, setIsOpen, isStreaming } = useReasoningContext();\n\n return (\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n className={cn(\n \"flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground transition-colors\",\n \"py-1 px-0 bg-transparent border-none cursor-pointer\",\n className,\n )}\n aria-expanded={isOpen}\n >\n {/* Chevron icon */}\n <svg\n className={cn(\n \"size-3 transition-transform duration-200\",\n isOpen && \"rotate-90\",\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n\n {/* Streaming indicator */}\n {isStreaming && (\n <span className=\"relative flex h-2 w-2\">\n <span className=\"animate-ping absolute inline-flex h-full w-full rounded-full bg-primary opacity-75\" />\n <span className=\"relative inline-flex rounded-full h-2 w-2 bg-primary\" />\n </span>\n )}\n\n {children}\n </button>\n );\n}\n\n// ============================================\n// Reasoning Content\n// ============================================\n\nexport interface ReasoningContentProps {\n children: React.ReactNode;\n /** Render content as markdown */\n markdown?: boolean;\n /** Class name for the content */\n className?: string;\n}\n\n/**\n * Collapsible content area for reasoning text\n */\nexport function ReasoningContent({\n children,\n markdown = false,\n className,\n}: ReasoningContentProps) {\n const { isOpen } = useReasoningContext();\n const contentRef = React.useRef<HTMLDivElement>(null);\n const [height, setHeight] = React.useState<number | undefined>(0);\n\n // Measure content height for smooth animation\n React.useEffect(() => {\n if (contentRef.current) {\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n setHeight(entry.contentRect.height);\n }\n });\n resizeObserver.observe(contentRef.current);\n return () => resizeObserver.disconnect();\n }\n }, []);\n\n return (\n <div\n className={cn(\n \"overflow-hidden transition-[max-height] duration-200 ease-out\",\n isOpen ? \"opacity-100\" : \"opacity-0\",\n )}\n style={{ maxHeight: isOpen ? height : 0 }}\n aria-hidden={!isOpen}\n >\n <div\n ref={contentRef}\n className={cn(\n \"mt-1 pl-3 border-l-2 border-muted-foreground/20\",\n \"text-xs text-muted-foreground\",\n className,\n )}\n >\n {markdown && typeof children === \"string\" ? (\n <Markdown className=\"prose-xs\">{children}</Markdown>\n ) : (\n <div className=\"whitespace-pre-wrap\">{children}</div>\n )}\n </div>\n </div>\n );\n}\n\n// ============================================\n// Convenience component for simple usage\n// ============================================\n\nexport interface SimpleReasoningProps {\n /** The reasoning/thinking content */\n content: string;\n /** Whether content is streaming */\n isStreaming?: boolean;\n /** Label when streaming */\n streamingLabel?: string;\n /** Label when collapsed */\n collapsedLabel?: string;\n /** Render as markdown */\n markdown?: boolean;\n /** Class name */\n className?: string;\n}\n\n/**\n * Simple reasoning display with default trigger labels\n *\n * @example\n * ```tsx\n * <SimpleReasoning\n * content={message.thinking}\n * isStreaming={isLoading}\n * />\n * ```\n */\nexport function SimpleReasoning({\n content,\n isStreaming = false,\n streamingLabel = \"Thinking...\",\n collapsedLabel = \"View reasoning\",\n markdown = true,\n className,\n}: SimpleReasoningProps) {\n if (!content) return null;\n\n return (\n <Reasoning isStreaming={isStreaming} className={className}>\n <ReasoningTrigger>\n {isStreaming ? streamingLabel : collapsedLabel}\n </ReasoningTrigger>\n <ReasoningContent markdown={markdown}>{content}</ReasoningContent>\n </Reasoning>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\n// ============================================\n// Types\n// ============================================\n\nexport interface CopilotUIConfig {\n /**\n * Debug mode - shows JSON args/results in collapsible sections\n * @default false\n */\n debug?: boolean;\n\n /**\n * Default expanded state for debug content\n * @default false\n */\n defaultDebugExpanded?: boolean;\n}\n\nexport interface CopilotUIContextValue extends CopilotUIConfig {\n /** Computed: whether debug mode is active */\n isDebug: boolean;\n}\n\n// ============================================\n// Context\n// ============================================\n\nconst CopilotUIContext = React.createContext<CopilotUIContextValue | null>(\n null,\n);\n\n/**\n * Hook to access CopilotUI configuration\n *\n * Returns defaults if no provider is present (allows standalone component usage)\n */\nexport function useCopilotUI(): CopilotUIContextValue {\n const context = React.useContext(CopilotUIContext);\n\n // Return defaults if no provider (allows standalone usage)\n if (!context) {\n return {\n debug: false,\n defaultDebugExpanded: false,\n isDebug: false,\n };\n }\n\n return context;\n}\n\n// ============================================\n// Provider\n// ============================================\n\nexport interface CopilotUIProviderProps extends CopilotUIConfig {\n children: React.ReactNode;\n}\n\n/**\n * Provider for global UI configuration (debug mode, etc.)\n *\n * @example\n * ```tsx\n * <CopilotUIProvider debug={process.env.NODE_ENV === \"development\"}>\n * <Chat messages={messages} />\n * </CopilotUIProvider>\n * ```\n */\nexport function CopilotUIProvider({\n children,\n debug = false,\n defaultDebugExpanded = false,\n}: CopilotUIProviderProps) {\n const value = React.useMemo<CopilotUIContextValue>(\n () => ({\n debug,\n defaultDebugExpanded,\n isDebug: debug,\n }),\n [debug, defaultDebugExpanded],\n );\n\n return (\n <CopilotUIContext.Provider value={value}>\n {children}\n </CopilotUIContext.Provider>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { TextShimmerLoader } from \"./loader\";\nimport { useCopilotUI } from \"../../context/copilot-ui-context\";\n\n// ============================================\n// Types\n// ============================================\n\nexport type ToolStepStatus =\n | \"pending\"\n | \"executing\"\n | \"completed\"\n | \"error\"\n | \"failed\"\n | \"rejected\";\n\nexport interface ToolStepData {\n id: string;\n name: string;\n args?: Record<string, unknown>;\n status: ToolStepStatus;\n result?: {\n success: boolean;\n message?: string;\n error?: string;\n data?: unknown;\n };\n error?: string;\n /** Human-readable title (resolved from tool definition) */\n title?: string;\n /** Title shown while executing */\n executingTitle?: string;\n /** Title shown after completion */\n completedTitle?: string;\n}\n\n// ============================================\n// Title Utilities\n// ============================================\n\n/**\n * Convert snake_case or camelCase tool name to human-readable title\n * @example \"get_order_details\" -> \"Get order details\"\n * @example \"fetchUserData\" -> \"Fetch user data\"\n */\nfunction toolNameToTitle(name: string | undefined): string {\n if (!name) return \"Tool\";\n // Handle snake_case\n let result = name.replace(/_/g, \" \");\n // Handle camelCase\n result = result.replace(/([a-z])([A-Z])/g, \"$1 $2\");\n // Capitalize first letter, lowercase rest\n return result.charAt(0).toUpperCase() + result.slice(1).toLowerCase();\n}\n\n/**\n * Get the display title based on tool step status\n */\nfunction getDisplayTitle(step: ToolStepData): string {\n const fallbackTitle = toolNameToTitle(step.name);\n\n switch (step.status) {\n case \"pending\":\n return step.title ?? fallbackTitle;\n case \"executing\":\n if (step.executingTitle) return step.executingTitle;\n return step.title ? `${step.title}...` : `${fallbackTitle}...`;\n case \"completed\":\n return step.completedTitle ?? step.title ?? fallbackTitle;\n case \"error\":\n case \"failed\":\n case \"rejected\":\n return step.title ?? fallbackTitle;\n default:\n return fallbackTitle;\n }\n}\n\n// ============================================\n// Status Indicator\n// ============================================\n\ninterface StatusIndicatorProps {\n status: ToolStepStatus;\n className?: string;\n}\n\nfunction StatusIndicator({ status, className }: StatusIndicatorProps) {\n const baseClasses = \"flex-shrink-0\";\n\n switch (status) {\n case \"pending\":\n return (\n <div\n className={cn(\n baseClasses,\n \"size-3 flex items-center justify-center\",\n className,\n )}\n >\n <div className=\"size-1.5 rounded-full bg-muted-foreground/40\" />\n </div>\n );\n\n case \"executing\":\n // Return null - shimmer text handles the loading state\n return null;\n\n case \"completed\":\n return (\n <div\n className={cn(\n baseClasses,\n \"size-3 flex items-center justify-center\",\n className,\n )}\n >\n <svg\n className=\"size-3 text-green-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={3}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n </div>\n );\n\n case \"error\":\n case \"failed\":\n case \"rejected\":\n return (\n <div\n className={cn(\n baseClasses,\n \"size-3 flex items-center justify-center\",\n className,\n )}\n >\n <svg\n className=\"size-3 text-red-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={3}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </div>\n );\n }\n}\n\n// ============================================\n// Tool Step\n// ============================================\n\nexport interface ToolStepProps {\n step: ToolStepData;\n /** Show connecting line to next step */\n showLine?: boolean;\n /** Override debug mode from context */\n debug?: boolean;\n /** Expanded by default (for debug mode) */\n defaultExpanded?: boolean;\n className?: string;\n}\n\n/**\n * Format result for display\n */\nfunction formatResult(result: ToolStepData[\"result\"]): string {\n if (!result) return \"\";\n if (result.message) return result.message;\n if (result.error) return result.error;\n if (result.data) {\n // Don't stringify image data - it's too long\n const data = result.data as Record<string, unknown>;\n if (\n data.image &&\n typeof data.image === \"string\" &&\n (data.image as string).startsWith(\"data:image\")\n ) {\n return `Image (${data.width || \"?\"}x${data.height || \"?\"})`;\n }\n return JSON.stringify(result.data);\n }\n return result.success ? \"Success\" : \"Failed\";\n}\n\n/**\n * Check if result contains an image\n */\nfunction getResultImage(result: ToolStepData[\"result\"]): string | null {\n if (!result?.data) return null;\n const data = result.data as Record<string, unknown>;\n if (\n data.image &&\n typeof data.image === \"string\" &&\n (data.image as string).startsWith(\"data:image\")\n ) {\n return data.image as string;\n }\n return null;\n}\n\n/**\n * Individual tool step with shimmer loading, status icons, and debug mode\n */\nexport function ToolStep({\n step,\n showLine = false,\n debug: debugProp,\n defaultExpanded,\n className,\n}: ToolStepProps) {\n const { isDebug, defaultDebugExpanded } = useCopilotUI();\n const debug = debugProp ?? isDebug;\n\n const [expanded, setExpanded] = React.useState(\n defaultExpanded ?? defaultDebugExpanded ?? false,\n );\n\n const displayTitle = getDisplayTitle(step);\n const hasDebugContent =\n (step.args && Object.keys(step.args).length > 0) || step.result;\n const isExecuting = step.status === \"executing\";\n const isCompleted = step.status === \"completed\";\n const isError =\n step.status === \"error\" ||\n step.status === \"failed\" ||\n step.status === \"rejected\";\n\n return (\n <div className={cn(\"relative\", className)}>\n {/* Connecting line */}\n {showLine && (\n <div\n className=\"absolute left-[5px] top-4 bottom-0 w-px bg-border\"\n aria-hidden=\"true\"\n />\n )}\n\n {/* Step row */}\n <div className=\"flex items-center gap-2\">\n {/* Status indicator - only show for non-executing states */}\n {!isExecuting && <StatusIndicator status={step.status} />}\n\n <div className=\"flex-1 min-w-0\">\n {/* Clickable trigger */}\n <button\n type=\"button\"\n onClick={() => debug && hasDebugContent && setExpanded(!expanded)}\n disabled={!debug || !hasDebugContent}\n className={cn(\n \"flex items-center gap-2 text-left min-w-0 w-full\",\n debug &&\n hasDebugContent &&\n \"cursor-pointer hover:text-foreground\",\n !debug && \"cursor-default\",\n )}\n >\n {/* Title with shimmer for executing state */}\n {isExecuting ? (\n <TextShimmerLoader text={displayTitle} size=\"sm\" />\n ) : (\n <span\n className={cn(\n \"text-sm truncate\",\n isCompleted && \"text-foreground\",\n isError && \"text-red-500\",\n step.status === \"pending\" && \"text-muted-foreground/60\",\n )}\n >\n {displayTitle}\n </span>\n )}\n\n {/* Expand indicator - only in debug mode with content */}\n {debug && hasDebugContent && (\n <svg\n className={cn(\n \"size-3 text-muted-foreground/40 transition-transform ml-auto flex-shrink-0\",\n expanded && \"rotate-90\",\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M9 5l7 7-7 7\"\n />\n </svg>\n )}\n </button>\n\n {/* Debug: Collapsible content (args + results) */}\n {debug && expanded && hasDebugContent && (\n <div className=\"mt-1.5 space-y-1.5\">\n {/* Arguments */}\n {step.args && Object.keys(step.args).length > 0 && (\n <div className=\"text-[10px] font-mono bg-muted/50 rounded px-2 py-1 overflow-x-auto\">\n <span className=\"text-muted-foreground\">args: </span>\n {JSON.stringify(step.args)}\n </div>\n )}\n\n {/* Result */}\n {step.result && (\n <div\n className={cn(\n \"text-[10px] font-mono rounded px-2 py-1 overflow-x-auto whitespace-pre-wrap break-all\",\n step.result.success !== false\n ? \"bg-green-500/10 text-green-600 dark:text-green-400\"\n : \"bg-red-500/10 text-red-600 dark:text-red-400\",\n )}\n >\n <span className=\"text-muted-foreground\">result: </span>\n {formatResult(step.result)}\n {/* Render image if present */}\n {getResultImage(step.result) && (\n <img\n src={getResultImage(step.result)!}\n alt=\"Screenshot\"\n className=\"mt-1.5 rounded border border-border max-w-full max-h-48 object-contain\"\n />\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Error display (always visible, not just in debug) */}\n {isError && step.error && !step.result && (\n <div className=\"mt-0.5 text-[10px] font-mono bg-red-500/10 text-red-600 dark:text-red-400 rounded px-1.5 py-0.5\">\n {step.error}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\n// ============================================\n// Tool Steps Container\n// ============================================\n\nexport interface ToolStepsProps {\n steps: ToolStepData[];\n /** Override debug mode from context */\n debug?: boolean;\n /** Expand all by default (in debug mode) */\n defaultExpanded?: boolean;\n /** Class name */\n className?: string;\n}\n\n/**\n * Compact tool steps display with shimmer loading and debug mode\n *\n * @example\n * ```tsx\n * <ToolSteps\n * steps={[\n * { id: \"1\", name: \"get_weather\", status: \"completed\", title: \"Get weather\" },\n * { id: \"2\", name: \"navigate\", status: \"executing\", executingTitle: \"Navigating...\" },\n * ]}\n * debug={true}\n * />\n * ```\n */\nexport function ToolSteps({\n steps,\n debug,\n defaultExpanded = false,\n className,\n}: ToolStepsProps) {\n if (steps.length === 0) return null;\n\n return (\n <div className={cn(\"space-y-1.5\", className)}>\n {steps.map((step, index) => (\n <ToolStep\n key={step.id}\n step={step}\n showLine={index < steps.length - 1}\n debug={debug}\n defaultExpanded={defaultExpanded}\n />\n ))}\n </div>\n );\n}\n\n// ============================================\n// Inline Tool Steps (super compact, single line)\n// ============================================\n\nexport interface InlineToolStepsProps {\n steps: ToolStepData[];\n /** Max steps to show before collapsing */\n maxVisible?: number;\n className?: string;\n}\n\n/**\n * Ultra-compact inline display showing just status icons\n *\n * @example\n * ```tsx\n * <InlineToolSteps steps={toolExecutions} />\n * // Shows: ✓ ✓ ⟳ ○\n * ```\n */\nexport function InlineToolSteps({\n steps,\n maxVisible = 5,\n className,\n}: InlineToolStepsProps) {\n if (steps.length === 0) return null;\n\n const visibleSteps = steps.slice(0, maxVisible);\n const hiddenCount = steps.length - maxVisible;\n\n return (\n <div className={cn(\"flex items-center gap-1\", className)}>\n {visibleSteps.map((step) => (\n <div\n key={step.id}\n title={`${step.name}: ${step.status}`}\n className=\"flex items-center\"\n >\n <StatusIndicator status={step.status} />\n </div>\n ))}\n {hiddenCount > 0 && (\n <span className=\"text-[10px] text-muted-foreground\">\n +{hiddenCount}\n </span>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\n\nexport function SendIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m22 2-7 20-4-9-9-4Z\" />\n <path d=\"M22 2 11 13\" />\n </svg>\n );\n}\n\nexport function StopIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\" />\n </svg>\n );\n}\n\nexport function CloseIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\nexport function ChevronDownIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\nexport function ChevronUpIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m18 15-6-6-6 6\" />\n </svg>\n );\n}\n\nexport function ChevronLeftIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n );\n}\n\nexport function CopyIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" />\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\n </svg>\n );\n}\n\nexport function CheckIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n );\n}\n\nexport function ThumbsUpIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M7 10v12\" />\n <path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\" />\n </svg>\n );\n}\n\nexport function ThumbsDownIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M17 14V2\" />\n <path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z\" />\n </svg>\n );\n}\n\nexport function RefreshIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" />\n <path d=\"M8 16H3v5\" />\n </svg>\n );\n}\n\nexport function UserIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" />\n <circle cx=\"12\" cy=\"7\" r=\"4\" />\n </svg>\n );\n}\n\nexport function BotIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M12 8V4H8\" />\n <rect width=\"16\" height=\"12\" x=\"4\" y=\"8\" rx=\"2\" />\n <path d=\"M2 14h2\" />\n <path d=\"M20 14h2\" />\n <path d=\"M15 13v2\" />\n <path d=\"M9 13v2\" />\n </svg>\n );\n}\n\nexport function PlusIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M5 12h14\" />\n <path d=\"M12 5v14\" />\n </svg>\n );\n}\n\nexport function ArrowUpIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m5 12 7-7 7 7\" />\n <path d=\"M12 19V5\" />\n </svg>\n );\n}\n\nexport function XIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\nexport function AlertTriangleIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n </svg>\n );\n}\n\nexport function TrashIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M3 6h18\" />\n <path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\" />\n <path d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\" />\n </svg>\n );\n}\n\nexport function ArrowUpRightIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M7 7h10v10\" />\n <path d=\"M7 17 17 7\" />\n </svg>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { CheckIcon, XIcon, AlertTriangleIcon } from \"../icons\";\n\n// ============================================\n// Types\n// ============================================\n\nexport type ConfirmationState =\n | \"pending\" // Waiting for user decision\n | \"approved\" // User approved\n | \"rejected\"; // User rejected\n\nexport interface ConfirmationContextValue {\n state: ConfirmationState;\n message?: string;\n onApprove?: () => void;\n onReject?: () => void;\n}\n\n// ============================================\n// Context\n// ============================================\n\nconst ConfirmationContext =\n React.createContext<ConfirmationContextValue | null>(null);\n\nfunction useConfirmationContext() {\n const context = React.useContext(ConfirmationContext);\n if (!context) {\n throw new Error(\n \"Confirmation components must be used within a Confirmation provider\",\n );\n }\n return context;\n}\n\n// ============================================\n// Confirmation Root\n// ============================================\n\nexport interface ConfirmationProps {\n children?: React.ReactNode;\n /** Current approval state */\n state?: ConfirmationState;\n /** Message to display */\n message?: string;\n /** Called when user approves */\n onApprove?: () => void;\n /** Called when user rejects */\n onReject?: () => void;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * Confirmation component - Tool approval/rejection UI\n *\n * Similar to Vercel AI SDK's Confirmation component for human-in-the-loop patterns.\n *\n * @example\n * ```tsx\n * <Confirmation\n * state={execution.approvalStatus}\n * message=\"This tool wants to delete a file.\"\n * onApprove={() => approveToolExecution(execution.id)}\n * onReject={() => rejectToolExecution(execution.id)}\n * >\n * <ConfirmationPending>\n * <ConfirmationMessage />\n * <ConfirmationActions />\n * </ConfirmationPending>\n * <ConfirmationApproved />\n * <ConfirmationRejected />\n * </Confirmation>\n * ```\n */\nexport function Confirmation({\n children,\n state = \"pending\",\n message,\n onApprove,\n onReject,\n className,\n}: ConfirmationProps) {\n return (\n <ConfirmationContext.Provider\n value={{ state, message, onApprove, onReject }}\n >\n <div\n className={cn(\n \"csdk-confirm-card\",\n \"confirmation rounded-2xl overflow-hidden\",\n \"border border-border/60\",\n \"bg-card text-card-foreground shadow-sm\",\n className,\n )}\n >\n {children}\n </div>\n </ConfirmationContext.Provider>\n );\n}\n\n// ============================================\n// Conditional Rendering Components\n// ============================================\n\nexport interface ConfirmationPendingProps {\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * Renders children only when state is \"pending\"\n */\nexport function ConfirmationPending({\n children,\n className,\n}: ConfirmationPendingProps) {\n const { state } = useConfirmationContext();\n if (state !== \"pending\") return null;\n\n return <div className={cn(\"pl-5 pr-4 pt-4 pb-3\", className)}>{children}</div>;\n}\n\nexport interface ConfirmationApprovedProps {\n children?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Renders children (or default approved message) when state is \"approved\"\n */\nexport function ConfirmationApproved({\n children,\n className,\n}: ConfirmationApprovedProps) {\n const { state } = useConfirmationContext();\n if (state !== \"approved\") return null;\n\n return (\n <div\n className={cn(\n \"csdk-confirm-result\",\n \"inline-flex items-center gap-1.5 px-3 py-1.5 text-sm font-medium\",\n \"rounded-2xl border border-green-200/60 dark:border-green-800/40\",\n \"bg-green-50/80 dark:bg-green-950/20 text-green-700 dark:text-green-400\",\n className,\n )}\n >\n <CheckIcon className=\"h-3.5 w-3.5 shrink-0\" />\n {children || <span>Approved</span>}\n </div>\n );\n}\n\nexport interface ConfirmationRejectedProps {\n children?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Renders children (or default rejected message) when state is \"rejected\"\n */\nexport function ConfirmationRejected({\n children,\n className,\n}: ConfirmationRejectedProps) {\n const { state } = useConfirmationContext();\n if (state !== \"rejected\") return null;\n\n return (\n <div\n className={cn(\n \"csdk-confirm-result\",\n \"inline-flex items-center gap-1.5 px-3 py-1.5 text-sm font-medium\",\n \"rounded-2xl border border-red-200/60 dark:border-red-800/40\",\n \"bg-red-50/80 dark:bg-red-950/20 text-red-700 dark:text-red-400\",\n className,\n )}\n >\n <XIcon className=\"h-3.5 w-3.5 shrink-0\" />\n {children || <span>Rejected</span>}\n </div>\n );\n}\n\n// ============================================\n// Content Components\n// ============================================\n\nexport interface ConfirmationMessageProps {\n children?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Displays the approval message\n */\nexport function ConfirmationMessage({\n children,\n className,\n}: ConfirmationMessageProps) {\n const { message } = useConfirmationContext();\n\n return (\n <div className={cn(\"flex items-start gap-3\", className)}>\n <div className=\"mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center rounded-xl bg-amber-100 dark:bg-amber-950/50 ring-1 ring-amber-200/60 dark:ring-amber-800/40\">\n <AlertTriangleIcon className=\"h-4 w-4 text-amber-600 dark:text-amber-400\" />\n </div>\n <p className=\"flex-1 min-w-0 pt-0.5 text-sm text-foreground leading-snug\">\n {children || message || \"This action requires your approval.\"}\n </p>\n </div>\n );\n}\n\nexport interface ConfirmationActionsProps {\n children?: React.ReactNode;\n className?: string;\n /** Label for reject button */\n rejectLabel?: string;\n /** Label for approve button */\n approveLabel?: string;\n}\n\n/**\n * Renders approval/rejection action buttons\n */\nexport function ConfirmationActions({\n children,\n className,\n rejectLabel = \"Reject\",\n approveLabel = \"Approve\",\n}: ConfirmationActionsProps) {\n const { onApprove, onReject } = useConfirmationContext();\n\n // Allow custom buttons via children\n if (children) {\n return (\n <div className={cn(\"mt-3 flex justify-end gap-2\", className)}>\n {children}\n </div>\n );\n }\n\n return (\n <>\n <div className=\"mx-0 border-t border-border/40 mt-3\" />\n <div className={cn(\"flex justify-end gap-2 pt-3\", className)}>\n <button\n type=\"button\"\n onClick={onReject}\n className={cn(\n \"csdk-confirm-btn\",\n \"px-4 py-1.5 text-sm font-medium rounded-xl\",\n \"border border-border/80 bg-transparent text-muted-foreground\",\n \"hover:bg-muted/80 hover:text-foreground hover:border-border\",\n )}\n >\n {rejectLabel}\n </button>\n <button\n type=\"button\"\n onClick={onApprove}\n className={cn(\n \"csdk-confirm-btn\",\n \"px-4 py-1.5 text-sm font-medium rounded-xl\",\n \"bg-primary text-primary-foreground\",\n \"hover:bg-primary/90\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n )}\n >\n {approveLabel}\n </button>\n </div>\n </>\n );\n}\n\n// ============================================\n// Simple Confirmation (Convenience Component)\n// ============================================\n\nexport interface SimpleConfirmationProps {\n /** Current approval state */\n state: ConfirmationState;\n /** Message to display */\n message?: string;\n /** Called when user approves */\n onApprove?: () => void;\n /** Called when user rejects */\n onReject?: () => void;\n /** Label for reject button */\n rejectLabel?: string;\n /** Label for approve button */\n approveLabel?: string;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * SimpleConfirmation - Convenience wrapper with all states built-in\n *\n * @example\n * ```tsx\n * <SimpleConfirmation\n * state={execution.approvalStatus === \"required\" ? \"pending\" : execution.approvalStatus}\n * message=\"Delete file /tmp/example.txt?\"\n * onApprove={() => approveToolExecution(execution.id)}\n * onReject={() => rejectToolExecution(execution.id)}\n * />\n * ```\n */\nexport function SimpleConfirmation({\n state,\n message,\n onApprove,\n onReject,\n rejectLabel,\n approveLabel,\n className,\n}: SimpleConfirmationProps) {\n return (\n <Confirmation\n state={state}\n message={message}\n onApprove={onApprove}\n onReject={onReject}\n className={className}\n >\n <ConfirmationPending>\n <ConfirmationMessage />\n <ConfirmationActions\n rejectLabel={rejectLabel}\n approveLabel={approveLabel}\n />\n </ConfirmationPending>\n <ConfirmationApproved />\n <ConfirmationRejected />\n </Confirmation>\n );\n}\n","\"use client\";\n\nimport { cn } from \"../../lib/utils\";\nimport { CheckIcon, XIcon, AlertTriangleIcon } from \"../icons\";\n\n// ============================================\n// Types\n// ============================================\n\nexport type PermissionLevel =\n | \"ask\"\n | \"allow_always\"\n | \"deny_always\"\n | \"session\";\n\nexport interface PermissionOption {\n value: PermissionLevel;\n label: string;\n description?: string;\n}\n\nexport const DEFAULT_PERMISSION_OPTIONS: PermissionOption[] = [\n {\n value: \"ask\",\n label: \"Ask every time\",\n description: \"Always prompt before this tool runs\",\n },\n {\n value: \"allow_always\",\n label: \"Allow always\",\n description: \"Never ask again, always approve\",\n },\n {\n value: \"session\",\n label: \"Allow this session\",\n description: \"Allow until you close this page\",\n },\n {\n value: \"deny_always\",\n label: \"Deny always\",\n description: \"Never ask again, always deny\",\n },\n];\n\nexport type ConfirmationState = \"pending\" | \"approved\" | \"rejected\";\n\n// ============================================\n// PermissionConfirmation Component\n// ============================================\n\nexport interface PermissionConfirmationProps {\n state: ConfirmationState;\n toolName?: string;\n message?: string;\n onApprove?: (permissionLevel: PermissionLevel) => void;\n onReject?: (permissionLevel?: PermissionLevel) => void;\n // showPermissionOptions disabled for now — causes issues\n // showPermissionOptions?: boolean;\n // permissionOptions?: PermissionOption[];\n className?: string;\n}\n\nexport function PermissionConfirmation({\n state,\n toolName,\n message,\n onApprove,\n onReject,\n className,\n}: PermissionConfirmationProps) {\n const handleApprove = () => {\n onApprove?.(\"ask\");\n };\n\n const handleReject = () => {\n onReject?.(undefined);\n };\n\n if (state === \"approved\") {\n return (\n <div\n className={cn(\n \"csdk-confirm-result\",\n \"inline-flex items-center gap-1.5 px-3 py-1.5 text-sm font-medium\",\n \"rounded-2xl border border-green-200/60 dark:border-green-800/40\",\n \"bg-green-50/80 dark:bg-green-950/20 text-green-700 dark:text-green-400\",\n className,\n )}\n >\n <CheckIcon className=\"h-3.5 w-3.5 shrink-0\" />\n <span>Approved</span>\n </div>\n );\n }\n\n if (state === \"rejected\") {\n return (\n <div\n className={cn(\n \"csdk-confirm-result\",\n \"inline-flex items-center gap-1.5 px-3 py-1.5 text-sm font-medium\",\n \"rounded-2xl border border-red-200/60 dark:border-red-800/40\",\n \"bg-red-50/80 dark:bg-red-950/20 text-red-700 dark:text-red-400\",\n className,\n )}\n >\n <XIcon className=\"h-3.5 w-3.5 shrink-0\" />\n <span>Rejected</span>\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n \"csdk-confirm-card\",\n \"w-full rounded-2xl overflow-hidden\",\n \"border border-border/60\",\n \"bg-card text-card-foreground shadow-sm\",\n className,\n )}\n >\n {/* Body */}\n <div className=\"flex items-start gap-3 p-4 pb-3\">\n <div className=\"mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center rounded-xl bg-muted\">\n <AlertTriangleIcon className=\"h-4 w-4 text-amber-600 dark:text-amber-400\" />\n </div>\n <div className=\"flex-1 min-w-0 pt-0.5\">\n {toolName && (\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-amber-600/80 dark:text-amber-400/70 mb-1\">\n {toolName}\n </p>\n )}\n <p className=\"text-sm text-foreground leading-snug\">\n {message || \"This tool requires your approval to execute.\"}\n </p>\n </div>\n </div>\n\n {/* Divider */}\n <div className=\"mx-4 border-t border-border/40\" />\n\n {/* Actions */}\n <div className=\"flex items-center justify-end gap-2 px-4 py-3\">\n <button\n type=\"button\"\n onClick={handleReject}\n className={cn(\n \"csdk-confirm-btn\",\n \"px-4 py-1.5 text-sm font-medium rounded-xl\",\n \"border border-border/80 bg-transparent text-muted-foreground\",\n \"hover:bg-muted/80 hover:text-foreground hover:border-border\",\n )}\n >\n Deny\n </button>\n <button\n type=\"button\"\n onClick={handleApprove}\n className={cn(\n \"csdk-confirm-btn\",\n \"px-4 py-1.5 text-sm font-medium rounded-xl\",\n \"bg-primary text-primary-foreground\",\n \"hover:bg-primary/90\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n )}\n >\n Allow\n </button>\n </div>\n </div>\n );\n}\n\n// ============================================\n// CompactPermissionConfirmation Component\n// ============================================\n\nexport interface CompactPermissionConfirmationProps {\n state: ConfirmationState;\n message?: string;\n onApprove?: (permissionLevel: PermissionLevel) => void;\n onReject?: (permissionLevel?: PermissionLevel) => void;\n className?: string;\n}\n\nexport function CompactPermissionConfirmation({\n state,\n message,\n onApprove,\n onReject,\n className,\n}: CompactPermissionConfirmationProps) {\n // \"Don't ask again\" checkbox disabled for now\n // const [rememberChoice, setRememberChoice] = React.useState(false);\n\n const handleApprove = () => {\n onApprove?.(\"ask\");\n };\n\n const handleReject = () => {\n onReject?.(undefined);\n };\n\n if (state === \"approved\") {\n return (\n <div\n className={cn(\n \"csdk-confirm-result\",\n \"inline-flex items-center gap-1.5 px-3 py-1.5 text-sm font-medium\",\n \"rounded-2xl border border-green-200/60 dark:border-green-800/40\",\n \"bg-green-50/80 dark:bg-green-950/20 text-green-700 dark:text-green-400\",\n className,\n )}\n >\n <CheckIcon className=\"h-3.5 w-3.5 shrink-0\" />\n <span>Approved</span>\n </div>\n );\n }\n\n if (state === \"rejected\") {\n return (\n <div\n className={cn(\n \"csdk-confirm-result\",\n \"inline-flex items-center gap-1.5 px-3 py-1.5 text-sm font-medium\",\n \"rounded-2xl border border-red-200/60 dark:border-red-800/40\",\n \"bg-red-50/80 dark:bg-red-950/20 text-red-700 dark:text-red-400\",\n className,\n )}\n >\n <XIcon className=\"h-3.5 w-3.5 shrink-0\" />\n <span>Rejected</span>\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n \"csdk-confirm-card\",\n \"w-full rounded-2xl overflow-hidden\",\n \"border border-border/60\",\n \"bg-card text-card-foreground shadow-sm\",\n className,\n )}\n >\n <div className=\"flex items-start gap-3 p-4 pb-3\">\n <div className=\"mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center rounded-xl bg-muted\">\n <AlertTriangleIcon className=\"h-4 w-4 text-amber-600 dark:text-amber-400\" />\n </div>\n <p className=\"flex-1 min-w-0 pt-0.5 text-sm text-foreground leading-snug\">\n {message || \"This action requires your approval.\"}\n </p>\n </div>\n\n {/* Divider */}\n <div className=\"mx-4 border-t border-border/40\" />\n\n <div className=\"flex items-center justify-end gap-2 px-4 py-3\">\n <button\n type=\"button\"\n onClick={handleReject}\n className={cn(\n \"csdk-confirm-btn\",\n \"px-4 py-1.5 text-sm font-medium rounded-xl\",\n \"border border-border/80 bg-transparent text-muted-foreground\",\n \"hover:bg-muted/80 hover:text-foreground hover:border-border\",\n )}\n >\n Deny\n </button>\n <button\n type=\"button\"\n onClick={handleApprove}\n className={cn(\n \"csdk-confirm-btn\",\n \"px-4 py-1.5 text-sm font-medium rounded-xl\",\n \"bg-primary text-primary-foreground\",\n \"hover:bg-primary/90\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n )}\n >\n Allow\n </button>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport type FollowUpProps = {\n /** Follow-up questions to display */\n questions: string[];\n /** Called when a follow-up is clicked */\n onSelect: (question: string) => void;\n /** Custom class for container */\n className?: string;\n /** Custom class for buttons */\n buttonClassName?: string;\n};\n\n/**\n * Parse follow-up questions from message content\n * Format: [FOLLOWUP: question1 | question2 | question3]\n */\nexport function parseFollowUps(content: string): {\n cleanContent: string;\n followUps: string[];\n} {\n if (!content) {\n return { cleanContent: content, followUps: [] };\n }\n\n const followUpRegex = /\\[FOLLOWUP:\\s*([^\\]]+)\\]/gi;\n const matches = content.match(followUpRegex);\n\n if (!matches || matches.length === 0) {\n return { cleanContent: content, followUps: [] };\n }\n\n // Extract follow-ups from the last match\n const lastMatch = matches[matches.length - 1];\n const innerContent = lastMatch.replace(/\\[FOLLOWUP:\\s*|\\]/gi, \"\");\n const followUps = innerContent\n .split(\"|\")\n .map((q) => q.trim())\n .filter((q) => q.length > 0);\n\n // Remove ALL FOLLOWUP tags from content\n const cleanContent = content.replace(followUpRegex, \"\").trim();\n\n return { cleanContent, followUps };\n}\n\n/**\n * Follow-up questions component\n * Displays clickable chips for suggested follow-up actions\n */\nexport function FollowUpQuestions({\n questions,\n onSelect,\n className,\n buttonClassName,\n}: FollowUpProps) {\n if (!questions || questions.length === 0) {\n return null;\n }\n\n return (\n <div className={cn(\"csdk-followup flex flex-wrap gap-2 mt-2\", className)}>\n {questions.map((question, index) => (\n <button\n key={index}\n onClick={() => onSelect(question)}\n className={cn(\n \"csdk-followup-button px-3 py-1.5 text-sm rounded-full\",\n \"bg-primary/10 hover:bg-primary/20 text-primary\",\n \"border border-primary/20 hover:border-primary/40\",\n \"transition-colors duration-150\",\n \"text-left whitespace-nowrap\",\n buttonClassName,\n )}\n >\n {question}\n </button>\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\n// ============================================\n// Types\n// ============================================\n\nexport interface BranchNavigatorProps {\n /** 0-based index of the current sibling */\n siblingIndex: number;\n /** Total number of sibling variants at this fork */\n totalSiblings: number;\n /** Whether there is a previous sibling to navigate to */\n hasPrevious: boolean;\n /** Whether there is a next sibling to navigate to */\n hasNext: boolean;\n /** Navigate to the previous sibling */\n onPrevious: () => void;\n /** Navigate to the next sibling */\n onNext: () => void;\n /** Additional class names */\n className?: string;\n}\n\n// ============================================\n// BranchNavigator\n// ============================================\n\n/**\n * BranchNavigator — ← N/M → variant navigator shown below user messages\n * when a conversation has been branched (via edit or regenerate).\n *\n * Purely presentational — no SDK dependency.\n *\n * @example\n * ```tsx\n * <BranchNavigator\n * siblingIndex={1}\n * totalSiblings={3}\n * hasPrevious={true}\n * hasNext={true}\n * onPrevious={() => switchBranch(siblings[0])}\n * onNext={() => switchBranch(siblings[2])}\n * />\n * ```\n */\nexport function BranchNavigator({\n siblingIndex,\n totalSiblings,\n hasPrevious,\n hasNext,\n onPrevious,\n onNext,\n className,\n}: BranchNavigatorProps) {\n return (\n <div\n className={cn(\n \"csdk-branch-navigator flex items-center gap-1 text-xs text-muted-foreground select-none\",\n className,\n )}\n >\n {/* ← Previous */}\n <button\n type=\"button\"\n onClick={onPrevious}\n disabled={!hasPrevious}\n aria-label=\"Previous version\"\n className={cn(\n \"p-0.5 rounded transition-colors\",\n hasPrevious\n ? \"hover:text-foreground hover:bg-muted cursor-pointer\"\n : \"opacity-30 cursor-default\",\n )}\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M15 18l-6-6 6-6\" />\n </svg>\n </button>\n\n {/* N / M */}\n <span className=\"tabular-nums leading-none\">\n {siblingIndex + 1} / {totalSiblings}\n </span>\n\n {/* → Next */}\n <button\n type=\"button\"\n onClick={onNext}\n disabled={!hasNext}\n aria-label=\"Next version\"\n className={cn(\n \"p-0.5 rounded transition-colors\",\n hasNext\n ? \"hover:text-foreground hover:bg-muted cursor-pointer\"\n : \"opacity-30 cursor-default\",\n )}\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M9 18l6-6-6-6\" />\n </svg>\n </button>\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useState, useEffect } from \"react\";\nimport { cn } from \"../../lib/utils\";\n\n/**\n * SDK State for DevLogger\n */\nexport interface DevLoggerState {\n // Chat state\n chat: {\n isLoading: boolean;\n messageCount: number;\n threadId: string;\n error: string | null;\n };\n // Tools state\n tools: {\n isEnabled: boolean;\n isCapturing: boolean;\n pendingConsent: boolean;\n };\n // Agent loop state\n agentLoop: {\n toolExecutions: Array<{\n id: string;\n name: string;\n status: string;\n approvalStatus: string;\n }>;\n pendingApprovals: number;\n iteration: number;\n maxIterations: number;\n };\n // Registered items\n registered: {\n tools: Array<{ name: string; location: string }>;\n actions: Array<{ name: string }>;\n contextCount: number;\n };\n // Permissions\n permissions: {\n stored: Array<{ toolName: string; level: string }>;\n loaded: boolean;\n };\n // Config\n config: {\n runtimeUrl: string;\n };\n}\n\nexport interface DevLoggerProps {\n /** SDK state to display */\n state: DevLoggerState;\n /** Position of the floating button */\n position?: \"bottom-left\" | \"bottom-right\" | \"top-left\" | \"top-right\";\n /** Custom class name */\n className?: string;\n}\n\n/**\n * DevLogger - Floating debug panel for SDK development\n *\n * Shows a floating button that opens a modal with all SDK state\n * for debugging purposes.\n */\nexport function DevLogger({\n state,\n position = \"bottom-right\",\n className,\n}: DevLoggerProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [activeTab, setActiveTab] = useState<\n \"chat\" | \"tools\" | \"agent\" | \"config\"\n >(\"chat\");\n\n // Position classes\n const positionClasses = {\n \"bottom-left\": \"bottom-4 left-4\",\n \"bottom-right\": \"bottom-4 right-4\",\n \"top-left\": \"top-4 left-4\",\n \"top-right\": \"top-4 right-4\",\n };\n\n return (\n <>\n {/* Floating Button */}\n <button\n type=\"button\"\n onClick={() => setIsOpen(true)}\n className={cn(\n \"fixed z-[9999] flex items-center justify-center\",\n \"w-12 h-12 rounded-full shadow-lg\",\n \"bg-orange-500 hover:bg-orange-600 text-white\",\n \"transition-transform hover:scale-110\",\n positionClasses[position],\n className,\n )}\n title=\"Open SDK DevLogger\"\n >\n <svg\n className=\"w-6 h-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4\"\n />\n </svg>\n </button>\n\n {/* Modal Overlay */}\n {isOpen && (\n <div\n className=\"csdk-devlogger-backdrop fixed inset-0 z-[10000] flex items-center justify-center bg-black/50\"\n onClick={() => setIsOpen(false)}\n >\n {/* Modal Content */}\n <div\n className=\"csdk-devlogger-modal bg-background border rounded-lg shadow-xl w-[600px] max-h-[80vh] overflow-hidden\"\n onClick={(e) => e.stopPropagation()}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b bg-muted/50\">\n <div className=\"flex items-center gap-2\">\n <div className=\"w-3 h-3 rounded-full bg-orange-500\" />\n <h2 className=\"font-semibold text-sm\">Copilot SDK DevLogger</h2>\n </div>\n <button\n type=\"button\"\n onClick={() => setIsOpen(false)}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <svg\n className=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n\n {/* Tabs */}\n <div className=\"flex border-b\">\n {([\"chat\", \"tools\", \"agent\", \"config\"] as const).map((tab) => (\n <button\n key={tab}\n type=\"button\"\n onClick={() => setActiveTab(tab)}\n className={cn(\n \"px-4 py-2 text-sm font-medium capitalize\",\n activeTab === tab\n ? \"border-b-2 border-primary text-primary\"\n : \"text-muted-foreground hover:text-foreground\",\n )}\n >\n {tab}\n </button>\n ))}\n </div>\n\n {/* Content */}\n <div className=\"p-4 overflow-y-auto max-h-[60vh]\">\n {activeTab === \"chat\" && <ChatTab state={state} />}\n {activeTab === \"tools\" && <ToolsTab state={state} />}\n {activeTab === \"agent\" && <AgentTab state={state} />}\n {activeTab === \"config\" && <ConfigTab state={state} />}\n </div>\n </div>\n </div>\n )}\n </>\n );\n}\n\n/**\n * Chat Tab Content\n */\nfunction ChatTab({ state }: { state: DevLoggerState }) {\n return (\n <div className=\"space-y-4\">\n <Section title=\"Status\">\n <Row label=\"Loading\" value={state.chat.isLoading ? \"Yes\" : \"No\"} />\n <Row label=\"Message Count\" value={state.chat.messageCount} />\n <Row label=\"Thread ID\" value={state.chat.threadId} mono />\n <Row\n label=\"Error\"\n value={state.chat.error || \"None\"}\n valueClass={state.chat.error ? \"text-red-500\" : \"text-green-500\"}\n />\n </Section>\n </div>\n );\n}\n\n/**\n * Tools Tab Content\n */\nfunction ToolsTab({ state }: { state: DevLoggerState }) {\n return (\n <div className=\"space-y-4\">\n <Section title=\"Smart Context\">\n <Row label=\"Enabled\" value={state.tools.isEnabled ? \"Yes\" : \"No\"} />\n <Row label=\"Capturing\" value={state.tools.isCapturing ? \"Yes\" : \"No\"} />\n <Row\n label=\"Pending Consent\"\n value={state.tools.pendingConsent ? \"Yes\" : \"No\"}\n />\n </Section>\n\n <Section title=\"Registered Tools\">\n {state.registered.tools.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">No tools registered</p>\n ) : (\n <div className=\"space-y-1\">\n {state.registered.tools.map((tool) => (\n <div\n key={tool.name}\n className=\"flex items-center justify-between text-sm\"\n >\n <code className=\"bg-muted px-1.5 py-0.5 rounded text-xs\">\n {tool.name}\n </code>\n <span className=\"text-muted-foreground text-xs\">\n {tool.location}\n </span>\n </div>\n ))}\n </div>\n )}\n </Section>\n\n <Section title=\"Permissions\">\n <Row label=\"Loaded\" value={state.permissions.loaded ? \"Yes\" : \"No\"} />\n {state.permissions.stored.length > 0 && (\n <div className=\"mt-2 space-y-1\">\n {state.permissions.stored.map((p) => (\n <div\n key={p.toolName}\n className=\"flex items-center justify-between text-sm\"\n >\n <code className=\"bg-muted px-1.5 py-0.5 rounded text-xs\">\n {p.toolName}\n </code>\n <Badge level={p.level} />\n </div>\n ))}\n </div>\n )}\n </Section>\n </div>\n );\n}\n\n/**\n * Agent Tab Content\n */\nfunction AgentTab({ state }: { state: DevLoggerState }) {\n return (\n <div className=\"space-y-4\">\n <Section title=\"Loop State\">\n <Row\n label=\"Iteration\"\n value={`${state.agentLoop.iteration} / ${state.agentLoop.maxIterations}`}\n />\n <Row\n label=\"Pending Approvals\"\n value={state.agentLoop.pendingApprovals}\n />\n </Section>\n\n <Section title=\"Tool Executions\">\n {state.agentLoop.toolExecutions.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">No executions</p>\n ) : (\n <div className=\"space-y-2\">\n {state.agentLoop.toolExecutions.map((exec) => (\n <div\n key={exec.id}\n className=\"border rounded p-2 text-sm space-y-1\"\n >\n <div className=\"flex items-center justify-between\">\n <code className=\"font-medium\">{exec.name}</code>\n <StatusBadge status={exec.status} />\n </div>\n <div className=\"flex items-center justify-between text-xs text-muted-foreground\">\n <span>ID: {exec.id.slice(0, 12)}...</span>\n <span>Approval: {exec.approvalStatus}</span>\n </div>\n </div>\n ))}\n </div>\n )}\n </Section>\n\n <Section title=\"Registered Actions\">\n {state.registered.actions.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">No actions registered</p>\n ) : (\n <div className=\"flex flex-wrap gap-1\">\n {state.registered.actions.map((action) => (\n <code\n key={action.name}\n className=\"bg-muted px-1.5 py-0.5 rounded text-xs\"\n >\n {action.name}\n </code>\n ))}\n </div>\n )}\n </Section>\n\n <Section title=\"Context Tree\">\n <Row label=\"Context Items\" value={state.registered.contextCount} />\n </Section>\n </div>\n );\n}\n\n/**\n * Config Tab Content\n */\nfunction ConfigTab({ state }: { state: DevLoggerState }) {\n return (\n <div className=\"space-y-4\">\n <Section title=\"Runtime\">\n <Row\n label=\"Runtime URL\"\n value={state.config.runtimeUrl || \"Not set\"}\n mono\n />\n </Section>\n </div>\n );\n}\n\n// Helper Components\n\nfunction Section({\n title,\n children,\n}: {\n title: string;\n children: React.ReactNode;\n}) {\n return (\n <div>\n <h3 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\n {title}\n </h3>\n {children}\n </div>\n );\n}\n\nfunction Row({\n label,\n value,\n mono,\n valueClass,\n}: {\n label: string;\n value: string | number;\n mono?: boolean;\n valueClass?: string;\n}) {\n return (\n <div className=\"flex items-center justify-between py-1 text-sm\">\n <span className=\"text-muted-foreground\">{label}</span>\n <span\n className={cn(\n mono && \"font-mono text-xs bg-muted px-1.5 py-0.5 rounded\",\n valueClass,\n )}\n >\n {value}\n </span>\n </div>\n );\n}\n\nfunction Badge({ level }: { level: string }) {\n const colors: Record<string, string> = {\n allow_always: \"bg-green-100 text-green-800\",\n deny_always: \"bg-red-100 text-red-800\",\n session: \"bg-blue-100 text-blue-800\",\n ask: \"bg-gray-100 text-gray-800\",\n };\n\n return (\n <span\n className={cn(\n \"px-1.5 py-0.5 rounded text-xs font-medium\",\n colors[level] || colors.ask,\n )}\n >\n {level}\n </span>\n );\n}\n\nfunction StatusBadge({ status }: { status: string }) {\n const colors: Record<string, string> = {\n pending: \"bg-yellow-100 text-yellow-800\",\n executing: \"bg-blue-100 text-blue-800\",\n completed: \"bg-green-100 text-green-800\",\n error: \"bg-red-100 text-red-800\",\n };\n\n return (\n <span\n className={cn(\n \"px-1.5 py-0.5 rounded text-xs font-medium\",\n colors[status] || \"bg-gray-100 text-gray-800\",\n )}\n >\n {status}\n </span>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\n// ============================================\n// Types\n// ============================================\n\nexport type CapabilityType =\n | \"vision\"\n | \"tools\"\n | \"thinking\"\n | \"streaming\"\n | \"pdf\"\n | \"audio\"\n | \"video\"\n | \"json\";\n\nexport interface CapabilityBadgeProps {\n /** Capability type to display */\n type: CapabilityType;\n /** Whether the capability is supported */\n supported?: boolean;\n /** Show label text next to icon */\n showLabel?: boolean;\n /** Size variant */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Additional class name */\n className?: string;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nconst icons: Record<CapabilityType, React.ReactNode> = {\n vision: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n ),\n tools: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z\" />\n </svg>\n ),\n thinking: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n ),\n streaming: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M22 12h-4l-3 9L9 3l-3 9H2\" />\n </svg>\n ),\n pdf: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <polyline points=\"10 9 9 9 8 9\" />\n </svg>\n ),\n audio: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z\" />\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\" />\n <line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\" />\n </svg>\n ),\n video: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <polygon points=\"23 7 16 12 23 17 23 7\" />\n <rect x=\"1\" y=\"5\" width=\"15\" height=\"14\" rx=\"2\" ry=\"2\" />\n </svg>\n ),\n json: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M4 6h16\" />\n <path d=\"M4 12h16\" />\n <path d=\"M4 18h12\" />\n </svg>\n ),\n};\n\nconst labels: Record<CapabilityType, string> = {\n vision: \"Vision\",\n tools: \"Tools\",\n thinking: \"Thinking\",\n streaming: \"Streaming\",\n pdf: \"PDF\",\n audio: \"Audio\",\n video: \"Video\",\n json: \"JSON\",\n};\n\nconst descriptions: Record<CapabilityType, string> = {\n vision: \"Supports image inputs\",\n tools: \"Supports function calling\",\n thinking: \"Extended reasoning mode\",\n streaming: \"Real-time streaming\",\n pdf: \"Can process PDF files\",\n audio: \"Supports audio inputs\",\n video: \"Supports video inputs\",\n json: \"Structured JSON output\",\n};\n\n// ============================================\n// Component\n// ============================================\n\n/**\n * Badge showing a model capability with icon\n *\n * @example\n * ```tsx\n * <CapabilityBadge type=\"vision\" supported />\n * <CapabilityBadge type=\"audio\" supported={false} />\n * ```\n */\nexport function CapabilityBadge({\n type,\n supported = true,\n showLabel = false,\n size = \"sm\",\n className,\n}: CapabilityBadgeProps) {\n const sizeClasses = {\n sm: \"h-5 px-1.5 text-[10px]\",\n md: \"h-6 px-2 text-xs\",\n lg: \"h-7 px-2.5 text-sm\",\n };\n\n const iconSizes = {\n sm: \"w-3 h-3\",\n md: \"w-3.5 h-3.5\",\n lg: \"w-4 h-4\",\n };\n\n return (\n <div\n className={cn(\n \"inline-flex items-center gap-1 rounded-full font-medium transition-colors\",\n sizeClasses[size],\n supported\n ? \"bg-primary/10 text-primary\"\n : \"bg-muted text-muted-foreground opacity-50\",\n className,\n )}\n title={`${labels[type]}: ${descriptions[type]}`}\n >\n <span className={cn(\"flex-shrink-0\", iconSizes[size])}>\n {icons[type]}\n </span>\n {showLabel && <span>{labels[type]}</span>}\n </div>\n );\n}\n\n// ============================================\n// Capability List\n// ============================================\n\nexport interface CapabilityListProps {\n /** Capabilities object */\n capabilities: {\n supportsVision?: boolean;\n supportsTools?: boolean;\n supportsThinking?: boolean;\n supportsStreaming?: boolean;\n supportsPDF?: boolean;\n supportsAudio?: boolean;\n supportsVideo?: boolean;\n supportsJsonMode?: boolean;\n };\n /** Show labels */\n showLabels?: boolean;\n /** Only show supported capabilities */\n onlySupported?: boolean;\n /** Size variant */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Additional class name */\n className?: string;\n}\n\n/**\n * Display a list of capability badges\n *\n * @example\n * ```tsx\n * const { capabilities } = useCapabilities();\n * <CapabilityList capabilities={capabilities} />\n * ```\n */\nexport function CapabilityList({\n capabilities,\n showLabels = false,\n onlySupported = true,\n size = \"sm\",\n className,\n}: CapabilityListProps) {\n const items: Array<{ type: CapabilityType; supported: boolean }> = [\n { type: \"vision\", supported: capabilities.supportsVision ?? false },\n { type: \"tools\", supported: capabilities.supportsTools ?? false },\n { type: \"thinking\", supported: capabilities.supportsThinking ?? false },\n { type: \"streaming\", supported: capabilities.supportsStreaming ?? false },\n { type: \"pdf\", supported: capabilities.supportsPDF ?? false },\n { type: \"audio\", supported: capabilities.supportsAudio ?? false },\n { type: \"video\", supported: capabilities.supportsVideo ?? false },\n { type: \"json\", supported: capabilities.supportsJsonMode ?? false },\n ];\n\n const filteredItems = onlySupported\n ? items.filter((item) => item.supported)\n : items;\n\n if (filteredItems.length === 0) return null;\n\n return (\n <div className={cn(\"flex flex-wrap gap-1\", className)}>\n {filteredItems.map((item) => (\n <CapabilityBadge\n key={item.type}\n type={item.type}\n supported={item.supported}\n showLabel={showLabels}\n size={size}\n />\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { CapabilityList } from \"./capability-badge\";\n\n// ============================================\n// Types\n// ============================================\n\nexport interface ModelOption {\n /** Model ID */\n id: string;\n /** Display name */\n name?: string;\n /** Provider name */\n provider?: string;\n /** Model capabilities (optional, for showing badges) */\n capabilities?: {\n supportsVision?: boolean;\n supportsTools?: boolean;\n supportsThinking?: boolean;\n supportsStreaming?: boolean;\n supportsPDF?: boolean;\n supportsAudio?: boolean;\n supportsVideo?: boolean;\n supportsJsonMode?: boolean;\n };\n}\n\nexport interface ProviderGroup {\n /** Provider name */\n name: string;\n /** Provider display label */\n label?: string;\n /** Models in this provider */\n models: ModelOption[];\n}\n\nexport interface ModelSelectorProps {\n /** Currently selected model ID */\n value?: string;\n /** Called when selection changes */\n onChange?: (modelId: string, provider?: string) => void;\n /** Models grouped by provider */\n providers?: ProviderGroup[];\n /** Flat list of models (alternative to providers) */\n models?: ModelOption[];\n /** Current capabilities (for showing in header) */\n currentCapabilities?: ModelOption[\"capabilities\"];\n /** Placeholder text */\n placeholder?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Size variant */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Show capability badges */\n showCapabilities?: boolean;\n /** Additional class name */\n className?: string;\n}\n\n// ============================================\n// Component\n// ============================================\n\n/**\n * Model selector dropdown with provider grouping\n *\n * @example\n * ```tsx\n * const { provider, model, supportedModels } = useCapabilities();\n *\n * <ModelSelector\n * value={model}\n * onChange={(modelId) => console.log('Selected:', modelId)}\n * providers={[\n * {\n * name: 'openai',\n * label: 'OpenAI',\n * models: [\n * { id: 'gpt-4o', name: 'GPT-4o' },\n * { id: 'gpt-5.2', name: 'GPT-4o Mini' },\n * ],\n * },\n * ]}\n * />\n * ```\n */\nexport function ModelSelector({\n value,\n onChange,\n providers,\n models,\n currentCapabilities,\n placeholder = \"Select model...\",\n disabled = false,\n size = \"md\",\n showCapabilities = true,\n className,\n}: ModelSelectorProps) {\n const [isOpen, setIsOpen] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n // Close on outside click\n React.useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n }\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n // Find selected model info\n const selectedModel = React.useMemo(() => {\n if (!value) return null;\n\n // Check providers first\n if (providers) {\n for (const provider of providers) {\n const model = provider.models.find((m) => m.id === value);\n if (model) return { ...model, provider: provider.name };\n }\n }\n\n // Check flat models list\n if (models) {\n return models.find((m) => m.id === value) || null;\n }\n\n return null;\n }, [value, providers, models]);\n\n const sizeClasses = {\n sm: \"h-8 text-xs px-2\",\n md: \"h-9 text-sm px-3\",\n lg: \"h-10 text-base px-4\",\n };\n\n const handleSelect = (modelId: string, provider?: string) => {\n onChange?.(modelId, provider);\n setIsOpen(false);\n };\n\n return (\n <div ref={containerRef} className={cn(\"relative\", className)}>\n {/* Trigger button */}\n <button\n type=\"button\"\n onClick={() => !disabled && setIsOpen(!isOpen)}\n disabled={disabled}\n className={cn(\n \"flex items-center justify-between gap-2 w-full rounded-md border bg-background\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n sizeClasses[size],\n )}\n >\n <div className=\"flex items-center gap-2 min-w-0\">\n {selectedModel ? (\n <>\n <span className=\"truncate font-medium\">\n {selectedModel.name || selectedModel.id}\n </span>\n {selectedModel.provider && (\n <span className=\"text-muted-foreground text-[10px] uppercase\">\n {selectedModel.provider}\n </span>\n )}\n </>\n ) : (\n <span className=\"text-muted-foreground\">{placeholder}</span>\n )}\n </div>\n\n {/* Chevron */}\n <svg\n className={cn(\n \"w-4 h-4 flex-shrink-0 text-muted-foreground transition-transform\",\n isOpen && \"rotate-180\",\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </button>\n\n {/* Show capabilities below button if provided */}\n {showCapabilities && currentCapabilities && (\n <div className=\"mt-1\">\n <CapabilityList\n capabilities={currentCapabilities}\n size=\"sm\"\n onlySupported\n />\n </div>\n )}\n\n {/* Dropdown */}\n {isOpen && (\n <div\n className={cn(\n \"csdk-model-dropdown absolute z-50 top-full left-0 right-0 mt-1\",\n \"max-h-[300px] overflow-auto\",\n \"rounded-md border bg-popover text-popover-foreground shadow-md\",\n \"animate-in fade-in-0 zoom-in-95\",\n )}\n >\n {/* Providers with groups */}\n {providers?.map((provider) => (\n <div key={provider.name}>\n {/* Provider header */}\n <div className=\"px-2 py-1.5 text-[10px] font-semibold text-muted-foreground uppercase tracking-wider bg-muted/50\">\n {provider.label || provider.name}\n </div>\n\n {/* Models */}\n {provider.models.map((model) => (\n <button\n key={model.id}\n type=\"button\"\n onClick={() => handleSelect(model.id, provider.name)}\n className={cn(\n \"flex flex-col gap-0.5 w-full px-3 py-2 text-left\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:bg-accent focus:text-accent-foreground focus:outline-none\",\n value === model.id && \"bg-accent\",\n )}\n >\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium text-sm\">\n {model.name || model.id}\n </span>\n {value === model.id && (\n <svg\n className=\"w-4 h-4 text-primary\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n )}\n </div>\n {showCapabilities && model.capabilities && (\n <CapabilityList\n capabilities={model.capabilities}\n size=\"sm\"\n onlySupported\n />\n )}\n </button>\n ))}\n </div>\n ))}\n\n {/* Flat models list */}\n {models?.map((model) => (\n <button\n key={model.id}\n type=\"button\"\n onClick={() => handleSelect(model.id, model.provider)}\n className={cn(\n \"flex flex-col gap-0.5 w-full px-3 py-2 text-left\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:bg-accent focus:text-accent-foreground focus:outline-none\",\n value === model.id && \"bg-accent\",\n )}\n >\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium text-sm\">\n {model.name || model.id}\n </span>\n {model.provider && (\n <span className=\"text-muted-foreground text-[10px] uppercase\">\n {model.provider}\n </span>\n )}\n {value === model.id && (\n <svg\n className=\"w-4 h-4 text-primary ml-auto\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n )}\n </div>\n {showCapabilities && model.capabilities && (\n <CapabilityList\n capabilities={model.capabilities}\n size=\"sm\"\n onlySupported\n />\n )}\n </button>\n ))}\n\n {/* Empty state */}\n {!providers?.length && !models?.length && (\n <div className=\"px-3 py-4 text-center text-sm text-muted-foreground\">\n No models available\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\n// ============================================\n// Simple Model Selector (just a native select)\n// ============================================\n\nexport interface SimpleModelSelectorProps {\n /** Currently selected model ID */\n value?: string;\n /** Called when selection changes */\n onChange?: (modelId: string) => void;\n /** List of model IDs */\n models: string[];\n /** Disabled state */\n disabled?: boolean;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * Simple native select for model selection\n *\n * @example\n * ```tsx\n * const { model, supportedModels } = useCapabilities();\n *\n * <SimpleModelSelector\n * value={model}\n * onChange={(id) => console.log('Selected:', id)}\n * models={supportedModels}\n * />\n * ```\n */\nexport function SimpleModelSelector({\n value,\n onChange,\n models,\n disabled = false,\n className,\n}: SimpleModelSelectorProps) {\n return (\n <select\n value={value || \"\"}\n onChange={(e) => onChange?.(e.target.value)}\n disabled={disabled}\n className={cn(\n \"h-9 px-3 rounded-md border bg-background text-sm\",\n \"focus:outline-none focus:ring-2 focus:ring-ring\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n >\n <option value=\"\" disabled>\n Select model...\n </option>\n {models.map((modelId) => (\n <option key={modelId} value={modelId}>\n {modelId}\n </option>\n ))}\n </select>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Popover as BasePopover } from \"@base-ui/react/popover\";\nimport { cn } from \"../../lib/utils\";\n\n// ============================================\n// Popover (Root)\n// ============================================\n\nexport type PopoverProps = {\n children: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n};\n\nfunction Popover({ children, open, defaultOpen, onOpenChange }: PopoverProps) {\n return (\n <BasePopover.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n >\n {children}\n </BasePopover.Root>\n );\n}\n\n// ============================================\n// PopoverTrigger\n// ============================================\n\nexport type PopoverTriggerProps = {\n children: React.ReactNode;\n asChild?: boolean;\n className?: string;\n} & React.ComponentPropsWithoutRef<\"button\">;\n\nfunction PopoverTrigger({\n children,\n asChild,\n className,\n ...props\n}: PopoverTriggerProps) {\n if (asChild && React.isValidElement(children)) {\n return (\n <BasePopover.Trigger render={children} className={className} {...props} />\n );\n }\n\n return (\n <BasePopover.Trigger className={className} {...props}>\n {children}\n </BasePopover.Trigger>\n );\n}\n\n// ============================================\n// PopoverContent\n// ============================================\n\nexport type PopoverContentProps = {\n children: React.ReactNode;\n className?: string;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n align?: \"start\" | \"center\" | \"end\";\n sideOffset?: number;\n};\n\nfunction PopoverContent({\n children,\n className,\n side = \"bottom\",\n align = \"start\",\n sideOffset = 4,\n}: PopoverContentProps) {\n return (\n <BasePopover.Portal>\n <BasePopover.Positioner side={side} align={align} sideOffset={sideOffset}>\n <BasePopover.Popup\n className={cn(\n \"csdk-popover-popup\",\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none\",\n className,\n )}\n >\n {children}\n </BasePopover.Popup>\n </BasePopover.Positioner>\n </BasePopover.Portal>\n );\n}\n\n// ============================================\n// Exports\n// ============================================\n\nexport { Popover, PopoverTrigger, PopoverContent };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { Thread } from \"../../../core/types/thread\";\nimport { Popover, PopoverTrigger, PopoverContent } from \"./popover\";\n\n// ============================================\n// Helper Functions\n// ============================================\n\n/**\n * Format a date for display\n */\nfunction formatDate(date: Date): string {\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n\n // Less than 1 minute\n if (diff < 60 * 1000) {\n return \"Just now\";\n }\n\n // Less than 1 hour\n if (diff < 60 * 60 * 1000) {\n const mins = Math.floor(diff / (60 * 1000));\n return `${mins}m ago`;\n }\n\n // Less than 24 hours\n if (diff < 24 * 60 * 60 * 1000) {\n const hours = Math.floor(diff / (60 * 60 * 1000));\n return `${hours}h ago`;\n }\n\n // Less than 7 days\n if (diff < 7 * 24 * 60 * 60 * 1000) {\n const days = Math.floor(diff / (24 * 60 * 60 * 1000));\n return `${days}d ago`;\n }\n\n // Otherwise show date\n return date.toLocaleDateString();\n}\n\n// ============================================\n// Types\n// ============================================\n\nexport interface ThreadPickerProps {\n /** Currently selected thread ID */\n value?: string | null;\n /** List of threads to display */\n threads: Thread[];\n /** Called when a thread is selected */\n onSelect?: (threadId: string) => void;\n /** Called when a thread is deleted */\n onDeleteThread?: (threadId: string) => void;\n /** Called when \"New conversation\" is clicked */\n onNewThread?: () => void;\n /** Placeholder text when no thread is selected */\n placeholder?: string;\n /** Text for new conversation button */\n newThreadLabel?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Size variant */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Additional class name for root container */\n className?: string;\n /** Class name for the trigger button */\n buttonClassName?: string;\n /** Class name for the dropdown container */\n dropdownClassName?: string;\n /** Class name for thread items */\n itemClassName?: string;\n /** Class name for the new conversation button */\n newButtonClassName?: string;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction ChevronIcon({ className }: { className?: string }) {\n return (\n <svg\n className={cn(\"w-4 h-4\", className)}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n );\n}\n\nfunction PlusIcon({ className }: { className?: string }) {\n return (\n <svg\n className={cn(\"w-4 h-4\", className)}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 4v16m8-8H4\" />\n </svg>\n );\n}\n\nfunction CheckIcon({ className }: { className?: string }) {\n return (\n <svg\n className={cn(\"w-4 h-4\", className)}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n );\n}\n\nfunction TrashIcon({ className }: { className?: string }) {\n return (\n <svg\n className={cn(\"w-4 h-4\", className)}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M3 6h18\" />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\"\n />\n </svg>\n );\n}\n\n// ============================================\n// Component\n// ============================================\n\n/**\n * ThreadPicker - Dropdown for selecting conversations\n *\n * @example\n * ```tsx\n * const { threads, currentThread, switchThread, createThread } = useThreadManager();\n *\n * <ThreadPicker\n * value={currentThread?.id}\n * threads={threads}\n * onSelect={switchThread}\n * onNewThread={() => createThread()}\n * />\n * ```\n */\nexport function ThreadPicker({\n value,\n threads,\n onSelect,\n onDeleteThread,\n onNewThread,\n placeholder = \"Select conversation...\",\n newThreadLabel = \"New conversation\",\n disabled = false,\n loading = false,\n size = \"md\",\n className,\n buttonClassName,\n dropdownClassName,\n itemClassName,\n newButtonClassName,\n}: ThreadPickerProps) {\n const [isOpen, setIsOpen] = React.useState(false);\n // Optimistic local list — immediately reflects deletions without waiting for async state\n const [displayedThreads, setDisplayedThreads] = React.useState(threads);\n\n // Sync when external threads prop changes (e.g. after async store update or new thread)\n React.useEffect(() => {\n setDisplayedThreads(threads);\n }, [threads]);\n\n // Find selected thread\n const selectedThread = React.useMemo(() => {\n if (!value) return null;\n return displayedThreads.find((t) => t.id === value) ?? null;\n }, [value, displayedThreads]);\n\n const handleSelect = (threadId: string) => {\n onSelect?.(threadId);\n setIsOpen(false);\n };\n\n const handleNewThread = () => {\n onNewThread?.();\n setIsOpen(false);\n };\n\n const handleDelete = (threadId: string) => {\n // Optimistically remove from local list immediately\n setDisplayedThreads((prev) => prev.filter((t) => t.id !== threadId));\n onDeleteThread?.(threadId);\n };\n\n return (\n <div className={cn(\"relative w-44\", className)}>\n <Popover open={isOpen} onOpenChange={setIsOpen}>\n <PopoverTrigger\n disabled={disabled || loading}\n className={cn(\n \"flex items-center gap-1.5 w-full rounded-md px-1.5 py-0.5\",\n \"hover:bg-muted/70 transition-colors duration-150\",\n \"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\",\n disabled && \"opacity-50 cursor-not-allowed pointer-events-none\",\n buttonClassName,\n )}\n >\n <div className=\"flex items-center gap-1 text-xs min-w-0 flex-1\">\n {loading ? (\n <span className=\"text-muted-foreground truncate\">Loading...</span>\n ) : selectedThread ? (\n <span className=\"truncate font-medium text-muted-foreground\">\n {selectedThread.title || \"Untitled conversation\"}\n </span>\n ) : (\n <span className=\"text-muted-foreground/70 truncate\">\n {placeholder}\n </span>\n )}\n </div>\n\n <ChevronIcon\n className={cn(\n \"flex-shrink-0 size-3 text-muted-foreground/60 transition-transform duration-150\",\n isOpen && \"rotate-180\",\n )}\n />\n </PopoverTrigger>\n\n <PopoverContent\n align=\"start\"\n className={cn(\n \"p-0 w-56 max-h-[280px] overflow-auto\",\n dropdownClassName,\n )}\n >\n {/* New conversation button */}\n {onNewThread && (\n <button\n type=\"button\"\n onClick={handleNewThread}\n className={cn(\n \"flex items-center gap-2 w-full px-2.5 py-1.5 text-left\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:bg-accent focus:text-accent-foreground focus:outline-none\",\n \"border-b\",\n newButtonClassName,\n )}\n >\n <PlusIcon className=\"text-primary size-3\" />\n <span className=\"font-medium text-xs\">{newThreadLabel}</span>\n </button>\n )}\n\n {/* Thread list */}\n {displayedThreads.length > 0 ? (\n displayedThreads.map((thread) => (\n <div\n key={thread.id}\n className={cn(\n \"group flex items-center gap-1 w-full px-2.5 py-1.5\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus-within:bg-accent focus-within:text-accent-foreground\",\n value === thread.id && \"bg-accent\",\n itemClassName,\n )}\n >\n <button\n type=\"button\"\n onClick={() => handleSelect(thread.id)}\n className=\"flex-1 flex flex-col gap-0.5 text-left focus:outline-none min-w-0\"\n >\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"font-medium text-xs truncate\">\n {thread.title || \"Untitled conversation\"}\n </span>\n {value === thread.id && (\n <CheckIcon className=\"flex-shrink-0 text-primary size-3\" />\n )}\n </div>\n <div className=\"flex items-center gap-1.5 text-[11px] text-muted-foreground\">\n {thread.preview && (\n <span className=\"truncate max-w-[180px]\">\n {thread.preview}\n </span>\n )}\n {thread.preview && thread.updatedAt && (\n <span className=\"flex-shrink-0\">·</span>\n )}\n {thread.updatedAt && (\n <span className=\"flex-shrink-0\">\n {formatDate(thread.updatedAt)}\n </span>\n )}\n </div>\n </button>\n {/* Delete button - appears on hover */}\n {onDeleteThread && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n handleDelete(thread.id);\n }}\n className=\"flex-shrink-0 p-1 rounded opacity-0 group-hover:opacity-100 text-muted-foreground hover:text-destructive hover:bg-destructive/10 transition-all focus:opacity-100 focus:outline-none\"\n aria-label=\"Delete thread\"\n >\n <TrashIcon className=\"size-3\" />\n </button>\n )}\n </div>\n ))\n ) : (\n <div className=\"px-2.5 py-3 text-center text-xs text-muted-foreground\">\n No conversations yet\n </div>\n )}\n </PopoverContent>\n </Popover>\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { Thread } from \"../../../core/types/thread\";\n\n// ============================================\n// Helper Functions\n// ============================================\n\n/**\n * Format a date for display\n */\nfunction formatDate(date: Date): string {\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n\n // Less than 1 minute\n if (diff < 60 * 1000) {\n return \"Just now\";\n }\n\n // Less than 1 hour\n if (diff < 60 * 60 * 1000) {\n const mins = Math.floor(diff / (60 * 1000));\n return `${mins}m ago`;\n }\n\n // Less than 24 hours\n if (diff < 24 * 60 * 60 * 1000) {\n const hours = Math.floor(diff / (60 * 60 * 1000));\n return `${hours}h ago`;\n }\n\n // Less than 7 days\n if (diff < 7 * 24 * 60 * 60 * 1000) {\n const days = Math.floor(diff / (24 * 60 * 60 * 1000));\n return `${days}d ago`;\n }\n\n // Otherwise show date\n return date.toLocaleDateString();\n}\n\n// ============================================\n// Types\n// ============================================\n\nexport interface ThreadListProps {\n /** List of threads to display */\n threads: Thread[];\n /** Currently selected thread ID */\n selectedId?: string | null;\n /** Called when a thread is selected */\n onSelect?: (threadId: string) => void;\n /** Called when a thread's delete button is clicked */\n onDelete?: (threadId: string) => void;\n /** Called when \"New conversation\" is clicked */\n onNewThread?: () => void;\n /** Text for new conversation button */\n newThreadLabel?: string;\n /** Loading state */\n loading?: boolean;\n /** Empty state text */\n emptyText?: string;\n /** Show delete buttons */\n showDelete?: boolean;\n /** Additional class name */\n className?: string;\n}\n\nexport interface ThreadCardProps {\n /** Thread data */\n thread: Thread;\n /** Whether this thread is selected */\n selected?: boolean;\n /** Called when clicked */\n onClick?: () => void;\n /** Called when delete is clicked */\n onDelete?: () => void;\n /** Show delete button */\n showDelete?: boolean;\n /** Additional class name */\n className?: string;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction TrashIcon({ className }: { className?: string }) {\n return (\n <svg\n className={cn(\"w-4 h-4\", className)}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\"\n />\n </svg>\n );\n}\n\nfunction PlusIcon({ className }: { className?: string }) {\n return (\n <svg\n className={cn(\"w-4 h-4\", className)}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 4v16m8-8H4\" />\n </svg>\n );\n}\n\nfunction MessageIcon({ className }: { className?: string }) {\n return (\n <svg\n className={cn(\"w-4 h-4\", className)}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z\"\n />\n </svg>\n );\n}\n\n// ============================================\n// Loading Skeleton\n// ============================================\n\nfunction ThreadCardSkeleton() {\n return (\n <div className=\"p-3 rounded-lg border bg-card animate-pulse\">\n <div className=\"flex items-start gap-3\">\n <div className=\"w-8 h-8 rounded-full bg-muted\" />\n <div className=\"flex-1 space-y-2\">\n <div className=\"h-4 w-3/4 bg-muted rounded\" />\n <div className=\"h-3 w-1/2 bg-muted rounded\" />\n </div>\n </div>\n </div>\n );\n}\n\n// ============================================\n// Thread Card Component\n// ============================================\n\n/**\n * ThreadCard - Individual thread item in the list\n */\nexport function ThreadCard({\n thread,\n selected = false,\n onClick,\n onDelete,\n showDelete = true,\n className,\n}: ThreadCardProps) {\n const [isHovered, setIsHovered] = React.useState(false);\n\n const handleDelete = (e: React.MouseEvent) => {\n e.stopPropagation();\n onDelete?.();\n };\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n className={cn(\n \"w-full p-3 rounded-lg border bg-card text-left transition-colors\",\n \"hover:bg-accent hover:border-accent-foreground/20\",\n \"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n selected && \"bg-accent border-primary/50\",\n className,\n )}\n >\n <div className=\"flex items-start gap-3\">\n {/* Icon */}\n <div\n className={cn(\n \"flex-shrink-0 w-8 h-8 rounded-full flex items-center justify-center\",\n selected\n ? \"bg-primary/10 text-primary\"\n : \"bg-muted text-muted-foreground\",\n )}\n >\n <MessageIcon />\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center justify-between gap-2\">\n <h3 className=\"font-medium text-sm truncate\">\n {thread.title || \"Untitled conversation\"}\n </h3>\n {showDelete && isHovered && onDelete && (\n <button\n type=\"button\"\n onClick={handleDelete}\n className={cn(\n \"flex-shrink-0 p-1 rounded\",\n \"hover:bg-destructive/10 hover:text-destructive\",\n \"focus:outline-none focus:ring-2 focus:ring-destructive\",\n )}\n aria-label=\"Delete conversation\"\n >\n <TrashIcon className=\"w-3.5 h-3.5\" />\n </button>\n )}\n </div>\n\n {thread.preview && (\n <p className=\"text-xs text-muted-foreground truncate mt-0.5\">\n {thread.preview}\n </p>\n )}\n\n <div className=\"flex items-center gap-2 mt-1 text-xs text-muted-foreground\">\n {thread.messageCount !== undefined && thread.messageCount > 0 && (\n <span>{thread.messageCount} messages</span>\n )}\n {thread.messageCount !== undefined &&\n thread.messageCount > 0 &&\n thread.updatedAt && <span>·</span>}\n {thread.updatedAt && <span>{formatDate(thread.updatedAt)}</span>}\n </div>\n </div>\n </div>\n </button>\n );\n}\n\n// ============================================\n// Thread List Component\n// ============================================\n\n/**\n * ThreadList - Card-based list of conversations\n *\n * @example\n * ```tsx\n * const { threads, currentThread, switchThread, deleteThread, createThread } = useThreadManager();\n *\n * <ThreadList\n * threads={threads}\n * selectedId={currentThread?.id}\n * onSelect={switchThread}\n * onDelete={deleteThread}\n * onNewThread={() => createThread()}\n * />\n * ```\n */\nexport function ThreadList({\n threads,\n selectedId,\n onSelect,\n onDelete,\n onNewThread,\n newThreadLabel = \"New conversation\",\n loading = false,\n emptyText = \"No conversations yet\",\n showDelete = true,\n className,\n}: ThreadListProps) {\n return (\n <div className={cn(\"flex flex-col gap-2\", className)}>\n {/* New conversation button */}\n {onNewThread && (\n <button\n type=\"button\"\n onClick={onNewThread}\n className={cn(\n \"flex items-center gap-2 p-3 rounded-lg border border-dashed\",\n \"hover:bg-accent hover:border-accent-foreground/20\",\n \"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n \"transition-colors\",\n )}\n >\n <div className=\"flex-shrink-0 w-8 h-8 rounded-full bg-primary/10 flex items-center justify-center\">\n <PlusIcon className=\"text-primary\" />\n </div>\n <span className=\"font-medium text-sm\">{newThreadLabel}</span>\n </button>\n )}\n\n {/* Loading state */}\n {loading && (\n <>\n <ThreadCardSkeleton />\n <ThreadCardSkeleton />\n <ThreadCardSkeleton />\n </>\n )}\n\n {/* Thread list */}\n {!loading &&\n threads.length > 0 &&\n threads.map((thread) => (\n <ThreadCard\n key={thread.id}\n thread={thread}\n selected={selectedId === thread.id}\n onClick={() => onSelect?.(thread.id)}\n onDelete={() => onDelete?.(thread.id)}\n showDelete={showDelete}\n />\n ))}\n\n {/* Empty state */}\n {!loading && threads.length === 0 && (\n <div className=\"py-8 text-center text-sm text-muted-foreground\">\n {emptyText}\n </div>\n )}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nconst CopilotSDKLogo = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n width={props.width || 170}\n height={props.height || 170}\n viewBox=\"0 0 170 170\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n className={cn(\"w-auto h-[30px]\", props.className)}\n >\n <path\n opacity={0.4}\n d=\"M108.379 0C111.143 0 113.538 1.91574 114.146 4.61243L118.392 23.4631C121.492 37.2253 132.239 47.9726 146.001 51.0727L164.852 55.319C167.549 55.9265 169.465 58.3218 169.465 61.0861C169.465 63.8504 167.549 66.2457 164.852 66.8532L146.001 71.0995C132.239 74.1995 121.492 84.9467 118.392 98.7088L114.146 117.56C113.538 120.257 111.143 122.172 108.379 122.172C105.614 122.172 103.219 120.257 102.611 117.56L98.3651 98.7088C95.2651 84.9467 84.5179 74.1995 70.7558 71.0995L51.9049 66.8532C49.2082 66.2457 47.2924 63.8504 47.2924 61.0861C47.2924 58.3218 49.2082 55.9265 51.9049 55.319L70.7558 51.0727C84.5179 47.9726 95.2651 37.2253 98.3651 23.4631L102.611 4.61243C103.219 1.91574 105.614 0 108.379 0Z\"\n fill=\"#6352FF\"\n />\n <path\n d=\"M45.3219 78.8207C48.0863 78.8207 50.4816 80.736 51.089 83.4333L54.1221 96.8982C56.1931 106.092 63.3728 113.272 72.5663 115.342L86.0313 118.375C88.7285 118.983 90.6439 121.378 90.6439 124.143C90.6439 126.907 88.7285 129.302 86.0313 129.91L72.5663 132.943C63.3728 135.014 56.1931 142.193 54.1221 151.387L51.089 164.852C50.4816 167.549 48.0863 169.465 45.3219 169.465C42.5576 169.465 40.1623 167.549 39.5549 164.852L36.5218 151.387C34.4507 142.193 27.271 135.014 18.0772 132.943L4.61243 129.91C1.91574 129.302 0 126.907 0 124.143C0 121.378 1.91574 118.983 4.61243 118.375L18.0772 115.342C27.271 113.272 34.4507 106.092 36.5218 96.8982L39.5549 83.4333C40.1623 80.736 42.5576 78.8207 45.3219 78.8207Z\"\n fill=\"#523FFF\"\n />\n <line\n x1={137.266}\n y1={162.316}\n x2={83.1281}\n y2={162.316}\n stroke=\"currentColor\"\n strokeWidth={11.8231}\n />\n <line\n x1={160.188}\n y1={162.316}\n x2={140.811}\n y2={162.316}\n stroke=\"currentColor\"\n strokeOpacity={0.26}\n strokeWidth={11.8231}\n />\n </svg>\n);\nexport default CopilotSDKLogo;\n","\"use client\";\n\nimport React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { CloseIcon } from \"../../icons\";\nimport CopilotSDKLogo from \"../../icons/copilot-sdk-logo\";\n\nconst DEFAULT_NAME = \"AI Copilot\";\n\nexport type ChatHeaderProps = {\n /** Logo image URL (pass empty string to hide logo) */\n logo?: string;\n /** Copilot name */\n name?: string;\n /** @deprecated Use `name` instead */\n title?: string;\n /** Thread picker element (injected by parent) */\n threadPicker?: React.ReactNode;\n /** Called when close button is clicked */\n onClose?: () => void;\n /** Additional class names */\n className?: string;\n};\n\nexport function ChatHeader({\n logo,\n name,\n title,\n threadPicker,\n onClose,\n className,\n}: ChatHeaderProps) {\n const displayName = name || title || DEFAULT_NAME;\n // Use custom logo URL if provided, otherwise use default SDK logo\n // Pass empty string to hide logo entirely\n const showDefaultLogo = logo === undefined;\n const showCustomLogo = typeof logo === \"string\" && logo.length > 0;\n\n return (\n <div\n className={cn(\n \"flex flex-col border-b border-border bg-background\",\n className,\n )}\n >\n {/* Top row: Logo + Name + Close */}\n <div className=\"flex items-center justify-between px-4 py-2\">\n <div className=\"flex items-center gap-2.5 shrink-0\">\n {showDefaultLogo && <CopilotSDKLogo className=\"h-6 w-auto\" />}\n {showCustomLogo && (\n <img\n src={logo}\n alt={displayName}\n className=\"size-6 rounded-md object-contain\"\n />\n )}\n <div>\n <div className=\"font-semibold text-foreground text-sm mb-0.5\">\n {displayName}\n </div>\n {/* Bottom row: Thread Picker */}\n {threadPicker && <div className=\"\">{threadPicker}</div>}\n </div>\n </div>\n\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"rounded-md p-1 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground\"\n aria-label=\"Close chat\"\n >\n <CloseIcon className=\"h-5 w-5\" />\n </button>\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { cn } from \"../../../lib/utils\";\n\ntype SuggestionsProps = {\n suggestions: string[];\n onSuggestionClick?: (suggestion: string) => void;\n className?: string;\n};\n\nexport function Suggestions({\n suggestions,\n onSuggestionClick,\n className,\n}: SuggestionsProps) {\n if (!suggestions.length) return null;\n\n return (\n <div className={cn(\"flex flex-wrap gap-2 px-4 py-2\", className)}>\n {suggestions.map((suggestion, index) => (\n <button\n key={index}\n type=\"button\"\n onClick={() => onSuggestionClick?.(suggestion)}\n className=\"inline-flex items-center rounded-full border bg-background px-3 py-1.5 text-sm transition-colors hover:bg-muted\"\n >\n {suggestion}\n </button>\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type {\n MCPUIResource,\n MCPUIIntent,\n MCPUIFrameProps,\n} from \"../../../mcp/ui/types\";\nimport {\n parseMCPUIMessage,\n DEFAULT_MCP_UI_SANDBOX,\n} from \"../../../mcp/ui/types\";\nimport { Loader } from \"./loader\";\n\n/**\n * MCPUIFrame - Renders MCP-UI resources in a sandboxed iframe\n *\n * This component provides secure rendering of interactive UI components\n * returned by MCP tools. It handles:\n * - Inline HTML content (text/html)\n * - External URLs (text/uri-list)\n * - PostMessage communication for intents\n *\n * @example\n * ```tsx\n * <MCPUIFrame\n * resource={{\n * uri: \"ui://shop/product/123\",\n * mimeType: \"text/html\",\n * content: \"<div class='product'>...</div>\",\n * metadata: { height: \"300px\" }\n * }}\n * onIntent={(intent) => {\n * if (intent.type === \"tool\") {\n * callTool(intent.name, intent.arguments);\n * }\n * }}\n * />\n * ```\n */\nexport function MCPUIFrame({\n resource,\n onIntent,\n onError,\n onLoad,\n className,\n style,\n sandbox = DEFAULT_MCP_UI_SANDBOX,\n showLoading = true,\n testId,\n}: MCPUIFrameProps) {\n const iframeRef = React.useRef<HTMLIFrameElement>(null);\n const [isLoading, setIsLoading] = React.useState(true);\n const [error, setError] = React.useState<Error | null>(null);\n\n // Handle postMessage events from the iframe\n React.useEffect(() => {\n const handleMessage = (event: MessageEvent) => {\n // Validate the message source\n if (event.source !== iframeRef.current?.contentWindow) {\n return;\n }\n\n // Parse the message\n const intent = parseMCPUIMessage(event.data);\n if (intent && onIntent) {\n onIntent(intent);\n }\n };\n\n window.addEventListener(\"message\", handleMessage);\n return () => window.removeEventListener(\"message\", handleMessage);\n }, [onIntent]);\n\n // Handle iframe load\n const handleLoad = React.useCallback(() => {\n setIsLoading(false);\n onLoad?.();\n }, [onLoad]);\n\n // Handle iframe error\n const handleError = React.useCallback(() => {\n const err = new Error(\"Failed to load MCP UI content\");\n setError(err);\n setIsLoading(false);\n onError?.(err);\n }, [onError]);\n\n // Build iframe content based on MIME type\n const { srcDoc, src } = React.useMemo(() => {\n if (resource.mimeType === \"text/html\") {\n // Inline HTML content\n let content = resource.content || \"\";\n\n // If blob is provided, decode it\n if (resource.blob && !resource.content) {\n try {\n content = atob(resource.blob);\n } catch {\n setError(new Error(\"Failed to decode MCP UI blob content\"));\n }\n }\n\n // Wrap content with base styles and message posting helper\n const wrappedContent = `\n <!DOCTYPE html>\n <html>\n <head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <style>\n *, *::before, *::after { box-sizing: border-box; }\n body { margin: 0; padding: 8px; font-family: system-ui, -apple-system, sans-serif; }\n </style>\n </head>\n <body>\n ${content}\n <script>\n // Helper for sending intents to parent\n window.mcpUI = {\n sendIntent: function(intent) {\n window.parent.postMessage({ source: 'mcp-ui', intent: intent }, '*');\n },\n callTool: function(name, args) {\n this.sendIntent({ type: 'tool', name: name, arguments: args });\n },\n sendAction: function(action, data) {\n this.sendIntent({ type: 'intent', action: action, data: data });\n },\n prompt: function(text) {\n this.sendIntent({ type: 'prompt', text: text });\n },\n notify: function(message, level) {\n this.sendIntent({ type: 'notify', message: message, level: level || 'info' });\n },\n openLink: function(url, newTab) {\n this.sendIntent({ type: 'link', url: url, newTab: newTab !== false });\n }\n };\n </script>\n </body>\n </html>\n `;\n\n return { srcDoc: wrappedContent, src: undefined };\n }\n\n if (resource.mimeType === \"text/uri-list\") {\n // External URL\n return { srcDoc: undefined, src: resource.content };\n }\n\n // Remote DOM or unknown - try to use content as URL\n return { srcDoc: undefined, src: resource.content };\n }, [resource]);\n\n // Calculate dimensions\n const frameStyle: React.CSSProperties = {\n width: resource.metadata?.width || \"100%\",\n minHeight: resource.metadata?.height || \"200px\",\n ...style,\n };\n\n if (error) {\n return (\n <div\n className={cn(\n \"flex items-center justify-center rounded-lg border border-destructive/50 bg-destructive/10 p-4 text-sm text-destructive\",\n className,\n )}\n style={frameStyle}\n data-testid={testId ? `${testId}-error` : undefined}\n >\n <div className=\"flex items-center gap-2\">\n <svg\n className=\"size-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"\n />\n </svg>\n <span>Failed to load interactive content</span>\n </div>\n </div>\n );\n }\n\n return (\n <div\n className={cn(\"relative overflow-hidden rounded-lg border\", className)}\n data-testid={testId}\n >\n {/* Title bar */}\n {resource.metadata?.title && (\n <div className=\"border-b bg-muted/50 px-3 py-1.5 text-xs font-medium text-muted-foreground\">\n {resource.metadata.title}\n </div>\n )}\n\n {/* Loading overlay */}\n {showLoading && isLoading && (\n <div className=\"csdk-mcp-loading absolute inset-0 z-10 flex items-center justify-center bg-background/80\">\n <Loader variant=\"dots\" size=\"md\" />\n </div>\n )}\n\n {/* Iframe */}\n <iframe\n ref={iframeRef}\n srcDoc={srcDoc}\n src={src}\n sandbox={sandbox}\n onLoad={handleLoad}\n onError={handleError}\n className=\"block w-full border-0\"\n style={frameStyle}\n title={resource.metadata?.title || \"MCP UI Content\"}\n data-testid={testId ? `${testId}-iframe` : undefined}\n />\n </div>\n );\n}\n\n/**\n * MCPUIFrameList - Renders multiple MCP-UI resources\n *\n * Convenience component for rendering an array of UI resources.\n *\n * @example\n * ```tsx\n * <MCPUIFrameList\n * resources={execution.result?._uiResources}\n * onIntent={handleIntent}\n * />\n * ```\n */\nexport interface MCPUIFrameListProps {\n /** Array of UI resources to render */\n resources?: MCPUIResource[];\n /** Callback when any UI emits an intent */\n onIntent?: (intent: MCPUIIntent, resourceIndex: number) => void;\n /** Callback when an error occurs */\n onError?: (error: Error, resourceIndex: number) => void;\n /** Additional CSS class names */\n className?: string;\n /** Class name for individual frames */\n frameClassName?: string;\n /** Gap between frames */\n gap?: \"sm\" | \"md\" | \"lg\";\n}\n\nexport function MCPUIFrameList({\n resources,\n onIntent,\n onError,\n className,\n frameClassName,\n gap = \"md\",\n}: MCPUIFrameListProps) {\n if (!resources || resources.length === 0) {\n return null;\n }\n\n const gapClasses = {\n sm: \"space-y-1\",\n md: \"space-y-2\",\n lg: \"space-y-4\",\n };\n\n return (\n <div className={cn(gapClasses[gap], className)}>\n {resources.map((resource, index) => (\n <MCPUIFrame\n key={`${resource.uri}-${index}`}\n resource={resource}\n onIntent={(intent) => onIntent?.(intent, index)}\n onError={(error) => onError?.(error, index)}\n className={frameClassName}\n testId={`mcp-ui-frame-${index}`}\n />\n ))}\n </div>\n );\n}\n\n// Note: MCPUIFrameProps is imported from mcp/ui/types\n// MCPUIFrameListProps is exported above with the component\n","\"use client\";\n\nimport React, {\n createContext,\n useContext,\n useState,\n useCallback,\n useMemo,\n} from \"react\";\nimport type { ChatMessage } from \"./types\";\n\nexport interface RegisteredAction {\n id: string;\n icon: React.ReactNode;\n tooltip: string;\n onClick: (props: { message: ChatMessage }) => void;\n hidden?: boolean | ((props: { message: ChatMessage }) => boolean);\n className?: string;\n}\n\ninterface MessageActionsContextType {\n getActions: (role: \"user\" | \"assistant\") => RegisteredAction[];\n registerActions: (\n role: \"user\" | \"assistant\",\n actions: RegisteredAction[],\n ) => void;\n clearActions: (role: \"user\" | \"assistant\") => void;\n}\n\nconst MessageActionsContext = createContext<MessageActionsContextType | null>(\n null,\n);\n\nexport function MessageActionsProvider({\n children,\n}: {\n children: React.ReactNode;\n}) {\n const [registry, setRegistry] = useState<Record<string, RegisteredAction[]>>(\n {},\n );\n\n const registerActions = useCallback(\n (role: \"user\" | \"assistant\", actions: RegisteredAction[]) => {\n setRegistry((prev) => ({ ...prev, [role]: actions }));\n },\n [],\n );\n\n const clearActions = useCallback((role: \"user\" | \"assistant\") => {\n setRegistry((prev) => {\n const next = { ...prev };\n delete next[role];\n return next;\n });\n }, []);\n\n const getActions = useCallback(\n (role: \"user\" | \"assistant\") => registry[role] ?? [],\n [registry],\n );\n\n const contextValue = useMemo(\n () => ({ getActions, registerActions, clearActions }),\n [getActions, registerActions, clearActions],\n );\n\n return (\n <MessageActionsContext.Provider value={contextValue}>\n {children}\n </MessageActionsContext.Provider>\n );\n}\n\nexport function useMessageActionsContext() {\n return useContext(MessageActionsContext);\n}\n","\"use client\";\n\nimport React, {\n useLayoutEffect,\n useMemo,\n useRef,\n createContext,\n useContext,\n} from \"react\";\nimport {\n useMessageActionsContext,\n type RegisteredAction,\n} from \"./message-actions-context\";\nimport type { ChatMessage } from \"./types\";\n\n// ─── Role sub-context ────────────────────────────────────────────────────────\n\nconst RoleContext = createContext<\"user\" | \"assistant\" | null>(null);\n\n// ─── Built-in action icons ────────────────────────────────────────────────────\n\nfunction CopyIcon() {\n return (\n <svg\n width=\"13\"\n height=\"13\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n );\n}\n\nfunction CheckIcon() {\n return (\n <svg\n width=\"13\"\n height=\"13\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M20 6L9 17l-5-5\" />\n </svg>\n );\n}\n\nfunction EditIcon() {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n <path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\" />\n </svg>\n );\n}\n\nfunction ThumbsUpIcon() {\n return (\n <svg\n width=\"13\"\n height=\"13\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M7 10v12\" />\n <path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\" />\n </svg>\n );\n}\n\nfunction ThumbsDownIcon() {\n return (\n <svg\n width=\"13\"\n height=\"13\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M17 14V2\" />\n <path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z\" />\n </svg>\n );\n}\n\n// ─── CopyAction ───────────────────────────────────────────────────────────────\n\nexport interface CopyActionProps {\n tooltip?: string;\n className?: string;\n}\n\n/** Built-in copy-to-clipboard action. Use inside CopilotChat.MessageActions. */\nexport function CopyAction({ tooltip = \"Copy\", className }: CopyActionProps) {\n return null; // declarative marker — rendered by MessageActions\n}\nCopyAction.displayName = \"CopyAction\";\n\n// ─── EditAction ───────────────────────────────────────────────────────────────\n\nexport interface EditActionProps {\n tooltip?: string;\n className?: string;\n}\n\n/** Built-in edit action for user messages. Use inside CopilotChat.MessageActions role=\"user\". */\nexport function EditAction({ tooltip = \"Edit\", className }: EditActionProps) {\n return null;\n}\nEditAction.displayName = \"EditAction\";\n\n// ─── FeedbackAction ───────────────────────────────────────────────────────────\n\nexport interface FeedbackActionProps {\n onFeedback?: (message: ChatMessage, type: \"helpful\" | \"not-helpful\") => void;\n tooltip?: string;\n className?: string;\n}\n\n/** Built-in thumbs up/down feedback action. Use inside CopilotChat.MessageActions. */\nexport function FeedbackAction({\n onFeedback,\n tooltip = \"Feedback\",\n className,\n}: FeedbackActionProps) {\n return null;\n}\nFeedbackAction.displayName = \"FeedbackAction\";\n\n// ─── Action ───────────────────────────────────────────────────────────────────\n\nexport interface ActionProps {\n id?: string;\n icon: React.ReactNode;\n tooltip: string;\n onClick: (props: { message: ChatMessage }) => void;\n hidden?: boolean | ((props: { message: ChatMessage }) => boolean);\n className?: string;\n}\n\n/** Custom action button. Use inside CopilotChat.MessageActions. */\nexport function Action({\n icon,\n tooltip,\n onClick,\n hidden,\n className,\n}: ActionProps) {\n return null;\n}\nAction.displayName = \"Action\";\n\n// ─── MessageActions ───────────────────────────────────────────────────────────\n\nexport interface MessageActionsProps {\n role: \"user\" | \"assistant\";\n children?: React.ReactNode;\n}\n\n/**\n * Registers message actions for a specific role.\n * Place inside <CopilotChat> as a direct child.\n *\n * @example\n * ```tsx\n * <CopilotChat>\n * <CopilotChat.MessageActions role=\"assistant\">\n * <CopilotChat.CopyAction />\n * <CopilotChat.FeedbackAction onFeedback={(msg, type) => log(type)} />\n * <CopilotChat.Action icon={<ShareIcon />} tooltip=\"Share\" onClick={({ message }) => share(message)} />\n * </CopilotChat.MessageActions>\n *\n * <CopilotChat.MessageActions role=\"user\">\n * <CopilotChat.EditAction />\n * </CopilotChat.MessageActions>\n * </CopilotChat>\n * ```\n */\nexport function MessageActions({ role, children }: MessageActionsProps) {\n const ctx = useMessageActionsContext();\n // Use ref so ctx is never a useLayoutEffect dependency — prevents infinite\n // loop when setRegistry fires → context value changes → useLayoutEffect\n // cleanup runs → clearActions → setRegistry → repeat.\n const ctxRef = useRef(ctx);\n ctxRef.current = ctx;\n\n // Extract action definitions from declarative children\n const actions = useMemo<RegisteredAction[]>(() => {\n const result: RegisteredAction[] = [];\n\n React.Children.forEach(children, (child) => {\n if (!React.isValidElement(child)) return;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const props = child.props as any;\n const type = child.type;\n\n if (\n type === CopyAction ||\n (child.type as { displayName?: string })?.displayName === \"CopyAction\"\n ) {\n // Copy — stateful, rendered specially in DefaultMessage\n result.push({\n id: \"copy\",\n icon: <CopyIcon />,\n tooltip: props.tooltip ?? \"Copy\",\n onClick: ({ message }) => {\n navigator.clipboard.writeText(message.content ?? \"\");\n },\n className: props.className,\n });\n } else if (\n type === EditAction ||\n (child.type as { displayName?: string })?.displayName === \"EditAction\"\n ) {\n result.push({\n id: \"edit\",\n icon: <EditIcon />,\n tooltip: props.tooltip ?? \"Edit\",\n onClick: () => {}, // handled internally by DefaultMessage via onEditMessage\n className: props.className,\n });\n } else if (\n type === FeedbackAction ||\n (child.type as { displayName?: string })?.displayName ===\n \"FeedbackAction\"\n ) {\n const onFeedback = props.onFeedback;\n result.push(\n {\n id: \"feedback-up\",\n icon: <ThumbsUpIcon />,\n tooltip: \"Helpful\",\n onClick: ({ message }) => onFeedback?.(message, \"helpful\"),\n className: props.className,\n },\n {\n id: \"feedback-down\",\n icon: <ThumbsDownIcon />,\n tooltip: \"Not helpful\",\n onClick: ({ message }) => onFeedback?.(message, \"not-helpful\"),\n className: props.className,\n },\n );\n } else if (\n type === Action ||\n (child.type as { displayName?: string })?.displayName === \"Action\"\n ) {\n result.push({\n id: props.id ?? props.tooltip,\n icon: props.icon,\n tooltip: props.tooltip,\n onClick: props.onClick,\n hidden: props.hidden,\n className: props.className,\n });\n }\n });\n\n return result;\n }, [children]);\n\n useLayoutEffect(() => {\n const c = ctxRef.current;\n if (!c) return;\n c.registerActions(role, actions);\n return () => c.clearActions(role);\n // ctx accessed via ref — NOT in deps — to prevent the setState→re-render→\n // new ctx ref→useLayoutEffect→clearActions→setState infinite loop.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [role, actions]);\n\n return null;\n}\n\n// Re-export CheckIcon for DefaultMessage copy state\nexport { CopyIcon, CheckIcon, EditIcon };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { cn } from \"../../../lib/utils\";\nimport { Message, MessageAvatar, MessageContent } from \"../../ui/message\";\nimport { SimpleReasoning } from \"../../ui/reasoning\";\nimport { ToolSteps } from \"../../ui/tool-steps\";\nimport {\n PermissionConfirmation,\n type PermissionLevel,\n} from \"../../ui/permission-confirmation\";\nimport { FollowUpQuestions, parseFollowUps } from \"../../ui/follow-up\";\nimport { Loader } from \"../../ui/loader\";\nimport { MCPUIFrameList } from \"../../ui/mcp-ui-frame\";\nimport type {\n ChatMessage,\n MessageAttachment,\n ToolRenderers,\n ToolRendererProps,\n CitationConfig,\n} from \"./types\";\nimport type { ToolDefinition, ToolRenderProps } from \"../../../../core\";\nimport CopilotSDKLogo from \"../../icons/copilot-sdk-logo\";\nimport { SourceGroup, type SourceItem } from \"../../ui/source\";\nimport { BranchNavigator } from \"../../ui/branch-navigator\";\nimport type { BranchInfo } from \"../../../../chat/branching\";\nimport { useMessageActionsContext } from \"./message-actions-context\";\nimport { CheckIcon, CopyIcon } from \"./message-actions-compound\";\n\n// ─── FloatingActions ──────────────────────────────────────────────────────────\n\nfunction FloatingActions({\n message,\n role,\n align = \"left\",\n onEdit,\n}: {\n message: ChatMessage;\n role: \"user\" | \"assistant\";\n align?: \"left\" | \"right\";\n onEdit?: () => void;\n}) {\n const ctx = useMessageActionsContext();\n const [copiedId, setCopiedId] = React.useState<string | null>(null);\n\n if (!ctx) return null;\n const actions = ctx.getActions(role);\n if (actions.length === 0) return null;\n\n return (\n <div\n className={cn(\n \"flex items-center gap-0.5 mt-1\",\n \"opacity-0 group-hover/message:opacity-100 transition-opacity duration-150\",\n align === \"right\" ? \"justify-end\" : \"justify-start\",\n )}\n >\n {actions.map((action) => {\n const isHidden =\n typeof action.hidden === \"function\"\n ? action.hidden({ message })\n : action.hidden;\n if (isHidden) return null;\n\n const isCopied = copiedId === action.id;\n\n return (\n <button\n key={action.id}\n type=\"button\"\n title={action.tooltip}\n aria-label={action.tooltip}\n className={cn(\n \"flex items-center justify-center size-6 rounded-md\",\n \"text-muted-foreground hover:text-foreground hover:bg-muted\",\n \"transition-colors\",\n action.className,\n )}\n onClick={() => {\n if (action.id === \"edit\" && onEdit) {\n onEdit();\n return;\n }\n if (action.id === \"copy\") {\n navigator.clipboard.writeText(message.content ?? \"\");\n setCopiedId(\"copy\");\n setTimeout(() => setCopiedId(null), 1500);\n return;\n }\n action.onClick({ message });\n }}\n >\n {action.id === \"copy\" && isCopied ? <CheckIcon /> : action.icon}\n </button>\n );\n })}\n </div>\n );\n}\n\ntype DefaultMessageProps = {\n message: ChatMessage;\n userAvatar: {\n src?: string;\n fallback?: string;\n component?: React.ReactNode;\n className?: string;\n };\n assistantAvatar: {\n src?: string;\n fallback?: string;\n component?: React.ReactNode;\n className?: string;\n };\n showUserAvatar?: boolean;\n userMessageClassName?: string;\n assistantMessageClassName?: string;\n /** Font size variant: 'sm' (14px), 'base' (16px), 'lg' (18px) */\n size?: \"sm\" | \"base\" | \"lg\";\n /** Whether this is the last message (for streaming state) */\n isLastMessage?: boolean;\n /** Whether the chat is currently loading/streaming */\n isLoading?: boolean;\n /** Whether waiting for server after tool completion */\n isProcessing?: boolean;\n /** Loader variant for typing indicator */\n loaderVariant?:\n | \"dots\"\n | \"typing\"\n | \"wave\"\n | \"terminal\"\n | \"text-blink\"\n | \"text-shimmer\"\n | \"loading-dots\";\n /** Registered tools (for accessing tool's render function) */\n registeredTools?: ToolDefinition[];\n /** Custom renderers for tool results (Generative UI) - fallback when tool has no render prop */\n toolRenderers?: ToolRenderers;\n /** Catch-all renderer for MCP tools (tools with source: \"mcp\") */\n mcpToolRenderer?: React.ComponentType<ToolRendererProps>;\n /** Catch-all renderer for any tool not matched by toolRenderers */\n fallbackToolRenderer?: React.ComponentType<ToolRendererProps>;\n /** Called when user approves a tool execution */\n onApproveToolExecution?: (\n executionId: string,\n extraData?: Record<string, unknown>,\n permissionLevel?: PermissionLevel,\n ) => void;\n /** Called when user rejects a tool execution */\n onRejectToolExecution?: (\n executionId: string,\n reason?: string,\n permissionLevel?: PermissionLevel,\n ) => void;\n /** Show follow-up questions (default: true) */\n showFollowUps?: boolean;\n /** Called when a follow-up question is clicked */\n onFollowUpClick?: (question: string) => void;\n /** Custom class for follow-up container */\n followUpClassName?: string;\n /** Custom class for follow-up buttons */\n followUpButtonClassName?: string;\n /** Citation/Sources configuration */\n citations?: CitationConfig;\n\n // ============================================\n // Branching\n // ============================================\n\n /**\n * Branch navigation info for this message.\n * When non-null and totalSiblings > 1, the BranchNavigator is shown.\n */\n branchInfo?: BranchInfo | null;\n /**\n * Called when the user navigates to a sibling branch.\n * Receives the message ID to switch to.\n */\n onSwitchBranch?: (messageId: string) => void;\n /**\n * Called when the user submits an edited message.\n * Triggers a new branch from the same parent as messageId.\n */\n onEditMessage?: (messageId: string, newContent: string) => void;\n};\n\nexport function DefaultMessage({\n message,\n userAvatar,\n assistantAvatar,\n showUserAvatar = false,\n userMessageClassName,\n assistantMessageClassName,\n size = \"sm\",\n isLastMessage = false,\n isLoading = false,\n isProcessing = false,\n loaderVariant = \"typing\",\n registeredTools,\n toolRenderers,\n mcpToolRenderer,\n fallbackToolRenderer,\n onApproveToolExecution,\n onRejectToolExecution,\n showFollowUps = true,\n onFollowUpClick,\n followUpClassName,\n followUpButtonClassName,\n citations = { enabled: true },\n branchInfo,\n onSwitchBranch,\n onEditMessage,\n}: DefaultMessageProps) {\n const isUser = message.role === \"user\";\n const isCompactionMarker =\n message.role === \"system\" &&\n (message.metadata as Record<string, unknown>)?.type === \"compaction-marker\";\n const isStreaming = isLastMessage && isLoading;\n\n // Inline-edit state (user messages only)\n const [isEditing, setIsEditing] = React.useState(false);\n const [editValue, setEditValue] = React.useState(message.content ?? \"\");\n const editRef = React.useRef<HTMLTextAreaElement>(null);\n\n const startEdit = React.useCallback(() => {\n setEditValue(message.content ?? \"\");\n setIsEditing(true);\n // Focus textarea on next frame\n requestAnimationFrame(() => editRef.current?.focus());\n }, [message.content]);\n\n const cancelEdit = React.useCallback(() => {\n setIsEditing(false);\n }, []);\n\n const submitEdit = React.useCallback(() => {\n const trimmed = editValue.trim();\n if (!trimmed || !onEditMessage) return;\n onEditMessage(message.id, trimmed);\n setIsEditing(false);\n }, [editValue, message.id, onEditMessage]);\n\n const handleEditKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n submitEdit();\n }\n if (e.key === \"Escape\") {\n cancelEdit();\n }\n },\n [submitEdit, cancelEdit],\n );\n\n // Whether branching UI should be shown for this message\n const showBranchNav =\n isUser && branchInfo && branchInfo.totalSiblings > 1 && onSwitchBranch;\n const showEditBtn = isUser && !!onEditMessage && !isLoading;\n\n // Render compaction marker divider\n if (isCompactionMarker) {\n const tokensSaved = (message.metadata as Record<string, unknown>)\n ?.tokensSaved as number | undefined;\n return (\n <div className=\"flex items-center gap-3 py-2 px-1 my-1\">\n <div className=\"flex-1 h-px bg-border\" />\n <span className=\"text-[11px] text-muted-foreground whitespace-nowrap flex items-center gap-1.5\">\n <svg\n className=\"size-3 opacity-60\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n {tokensSaved\n ? `Earlier conversation summarized · ~${tokensSaved.toLocaleString()} tokens saved`\n : \"Earlier conversation summarized\"}\n </span>\n <div className=\"flex-1 h-px bg-border\" />\n </div>\n );\n }\n\n // Parse follow-up questions from assistant messages\n const { cleanContent: contentWithoutFollowUps, followUps } =\n React.useMemo(() => {\n if (isUser || !message.content) {\n return { cleanContent: message.content, followUps: [] };\n }\n return parseFollowUps(message.content);\n }, [message.content, isUser]);\n\n // Strip \"Sources:\" line from AI response (we show them as chips instead)\n const cleanContent = React.useMemo(() => {\n if (!contentWithoutFollowUps) return contentWithoutFollowUps;\n // Remove lines like \"Sources: [link](url), ...\" or \"**Sources:** ...\"\n return contentWithoutFollowUps\n .replace(/\\n*\\*{0,2}Sources:?\\*{0,2}\\s*(\\[.+?\\]\\(.+?\\)[,\\s]*)+$/gi, \"\")\n .trim();\n }, [contentWithoutFollowUps]);\n\n // Only show follow-ups on the last assistant message when not loading\n const shouldShowFollowUps =\n showFollowUps &&\n !isUser &&\n isLastMessage &&\n !isLoading &&\n followUps.length > 0 &&\n onFollowUpClick;\n\n // Extract sources from web_search tool results OR native citations\n const sources = React.useMemo((): SourceItem[] => {\n if (isUser || !citations.enabled) return [];\n\n const extractedSources: SourceItem[] = [];\n\n // Helper to add source without duplicates\n const addSource = (url: string, title?: string, description?: string) => {\n if (url && !extractedSources.find((s) => s.href === url)) {\n extractedSources.push({\n href: url,\n title: title || getDomainFromUrl(url),\n description,\n });\n }\n };\n\n // 1. Check for native web search citations (from metadata.citations)\n const nativeCitations = (\n message.metadata as {\n citations?: Array<{ url: string; title?: string; citedText?: string }>;\n }\n )?.citations;\n if (nativeCitations && Array.isArray(nativeCitations)) {\n nativeCitations.forEach((citation) => {\n addSource(citation.url, citation.title, citation.citedText);\n });\n }\n\n // 2. Check tool executions for web_search results (custom tool fallback)\n message.toolExecutions?.forEach((exec) => {\n if (\n exec.name === \"web_search\" &&\n exec.status === \"completed\" &&\n exec.result\n ) {\n const result = exec.result as Record<string, unknown>;\n\n // Pattern 1: result.data.results (standard format from our providers)\n const dataObj = result.data as Record<string, unknown> | undefined;\n if (dataObj?.results && Array.isArray(dataObj.results)) {\n (\n dataObj.results as Array<{\n url: string;\n title?: string;\n content?: string;\n }>\n ).forEach((r) => {\n addSource(r.url, r.title, r.content);\n });\n }\n\n // Pattern 2: result.results directly\n if (result.results && Array.isArray(result.results)) {\n (\n result.results as Array<{\n url: string;\n title?: string;\n content?: string;\n }>\n ).forEach((r) => {\n addSource(r.url, r.title, r.content);\n });\n }\n\n // Pattern 3: result.data is WebSearchResponse (results at data level)\n if (dataObj && !dataObj.results && dataObj.query) {\n const response = dataObj as {\n results?: Array<{ url: string; title?: string; content?: string }>;\n };\n if (response.results && Array.isArray(response.results)) {\n response.results.forEach((r) => {\n addSource(r.url, r.title, r.content);\n });\n }\n }\n }\n });\n\n return extractedSources;\n }, [message.metadata, message.toolExecutions, isUser, citations.enabled]);\n\n // Helper to extract domain from URL\n function getDomainFromUrl(url: string): string {\n try {\n return new URL(url).hostname.replace(\"www.\", \"\");\n } catch {\n return url;\n }\n }\n\n const shouldShowSources = citations.enabled && sources.length > 0;\n\n // User message - right aligned, avatar optional\n if (isUser) {\n const hasAttachments =\n message.attachments && message.attachments.length > 0;\n\n return (\n <Message\n className={cn(\n \"csdk-message csdk-user-message flex gap-2 group/user-msg group/message justify-end\",\n )}\n >\n <div className=\"flex flex-col items-end max-w-[80%] min-w-0\">\n {/* Edit mode: inline textarea */}\n {isEditing ? (\n <div className=\"flex flex-col gap-1.5 w-full min-w-[200px]\">\n <textarea\n ref={editRef}\n value={editValue}\n onChange={(e) => setEditValue(e.target.value)}\n onKeyDown={handleEditKeyDown}\n rows={Math.max(2, (editValue.match(/\\n/g) || []).length + 1)}\n className={cn(\n \"csdk-edit-textarea w-full rounded-lg px-3 py-2 text-sm resize-none\",\n \"bg-primary text-primary-foreground placeholder:text-primary-foreground/50\",\n \"focus:outline-none focus:ring-2 focus:ring-primary-foreground/30\",\n userMessageClassName,\n )}\n />\n <div className=\"flex gap-1.5 justify-end\">\n <button\n type=\"button\"\n onClick={cancelEdit}\n className=\"csdk-edit-cancel px-3 py-1 text-xs rounded-md bg-muted text-muted-foreground hover:bg-muted/80 transition-colors\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={submitEdit}\n disabled={!editValue.trim()}\n className=\"csdk-edit-submit px-3 py-1 text-xs rounded-md bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 transition-colors\"\n >\n Send\n </button>\n </div>\n </div>\n ) : (\n <>\n <div className=\"relative\">\n <div\n className={cn(\n \"csdk-message-user rounded-2xl overflow-hidden bg-primary text-primary-foreground\",\n hasAttachments && \"p-[3px]\",\n hasAttachments && !message.content && \"max-w-[260px]\",\n hasAttachments && message.content && \"max-w-[280px]\",\n !hasAttachments && \"\",\n userMessageClassName,\n )}\n >\n {/* Media (images + files) */}\n {hasAttachments && (\n <MessageMedia\n attachments={message.attachments!}\n hasText={!!message.content}\n align=\"end\"\n />\n )}\n {/* Text — px-4 py-2 passed to MessageContent, tailwind-merge overrides its internal p-2 */}\n {message.content && (\n <MessageContent\n className={cn(\"px-4 py-2\")}\n markdown\n size={size}\n >\n {message.content}\n </MessageContent>\n )}\n </div>\n {/* Edit button — hover reveal */}\n {showEditBtn && (\n <button\n type=\"button\"\n onClick={startEdit}\n aria-label=\"Edit message\"\n className={cn(\n \"csdk-edit-btn absolute -left-7 top-1/2 -translate-y-1/2\",\n \"size-6 flex items-center justify-center rounded-full\",\n \"text-muted-foreground bg-background border border-border shadow-sm\",\n \"opacity-0 group-hover/user-msg:opacity-100 transition-opacity\",\n \"hover:text-foreground hover:bg-muted cursor-pointer\",\n )}\n >\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n <path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\" />\n </svg>\n </button>\n )}\n </div>\n {/* Branch Navigator */}\n {showBranchNav && (\n <BranchNavigator\n siblingIndex={branchInfo!.siblingIndex}\n totalSiblings={branchInfo!.totalSiblings}\n hasPrevious={branchInfo!.hasPrevious}\n hasNext={branchInfo!.hasNext}\n onPrevious={() =>\n onSwitchBranch!(\n branchInfo!.siblingIds[branchInfo!.siblingIndex - 1],\n )\n }\n onNext={() =>\n onSwitchBranch!(\n branchInfo!.siblingIds[branchInfo!.siblingIndex + 1],\n )\n }\n className=\"mt-1\"\n />\n )}\n {/* Floating actions for user messages */}\n <FloatingActions\n message={message}\n role=\"user\"\n align=\"right\"\n onEdit={onEditMessage ? startEdit : undefined}\n />\n </>\n )}\n </div>\n {showUserAvatar && (\n <MessageAvatar\n src={userAvatar.src}\n alt=\"User\"\n fallback={userAvatar.fallback}\n className={userAvatar.className}\n >\n {userAvatar.component}\n </MessageAvatar>\n )}\n </Message>\n );\n }\n\n // Helper: check if a tool execution is hidden (shouldn't appear in UI)\n // Checks both: 1) execution's hidden flag (from server), 2) registered tool's hidden flag\n const isToolHidden = (exec: { name: string; hidden?: boolean }): boolean => {\n // Check execution's own hidden flag first (from server's action:start event)\n if (exec.hidden === true) return true;\n // Then check registered tool definition\n const toolDef = registeredTools?.find((t) => t.name === exec.name);\n return toolDef?.hidden === true;\n };\n\n // Separate tool executions into categories (excluding hidden tools)\n const pendingApprovalTools = message.toolExecutions?.filter(\n (exec) => exec.approvalStatus === \"required\" && !isToolHidden(exec),\n );\n const completedTools = message.toolExecutions?.filter(\n (exec) => exec.approvalStatus !== \"required\" && !isToolHidden(exec),\n );\n\n // Helper: check if tool has any custom render (toolRenderers, mcpToolRenderer, fallbackToolRenderer, or tool.render)\n const hasCustomRender = (toolName: string, execSource?: string): boolean => {\n if (toolRenderers?.[toolName]) return true;\n const toolDef = registeredTools?.find((t) => t.name === toolName);\n // Check if mcpToolRenderer applies (MCP tool with catch-all renderer)\n if (mcpToolRenderer && (execSource === \"mcp\" || toolDef?.source === \"mcp\"))\n return true;\n if (fallbackToolRenderer) return true;\n if (toolDef?.render) return true;\n return false;\n };\n\n // Split completed tools: those with custom render vs default ToolSteps\n const toolsWithCustomRender = completedTools?.filter((exec) =>\n hasCustomRender(exec.name, exec.source),\n );\n const toolsWithoutCustomRender = completedTools?.filter(\n (exec) => !hasCustomRender(exec.name, exec.source),\n );\n\n // Check for native web search citations (from metadata, not custom tool)\n const hasNativeCitations = !!(message.metadata as { citations?: unknown[] })\n ?.citations?.length;\n\n // Convert tools without custom render to ToolStepData format\n // Hide web_search tool step when we have native citations (already shown as chips)\n const toolSteps = toolsWithoutCustomRender\n ?.filter((exec) => !(exec.name === \"web_search\" && hasNativeCitations))\n .map((exec) => ({\n id: exec.id,\n name: exec.name,\n args: exec.args,\n status: exec.status,\n result: exec.result,\n error: exec.error,\n }));\n\n // Assistant message - left aligned with avatar\n return (\n <Message className=\"csdk-message csdk-assistant-message flex gap-2 group/message\">\n <MessageAvatar\n src={assistantAvatar.src}\n alt=\"Assistant\"\n fallback={assistantAvatar.fallback}\n fallbackIcon={\n !assistantAvatar.src &&\n !assistantAvatar.fallback &&\n !assistantAvatar.component ? (\n <CopilotSDKLogo className=\"size-5\" />\n ) : undefined\n }\n className={cn(\"bg-muted\", assistantAvatar.className)}\n >\n {assistantAvatar.component}\n </MessageAvatar>\n <div className=\"min-w-0 max-w-[80%] w-fit\">\n {/* Reasoning/Thinking (collapsible, above content) */}\n {message.thinking && (\n <SimpleReasoning\n content={message.thinking}\n isStreaming={isStreaming}\n className=\"mb-2\"\n />\n )}\n\n {/* Show loader when processing after tool execution (only for last message with no tools yet) */}\n {isLastMessage &&\n isProcessing &&\n !completedTools?.length &&\n !pendingApprovalTools?.length ? (\n <div className=\"rounded-lg bg-muted px-4 py-2\">\n <Loader variant=\"dots\" size=\"sm\" />\n </div>\n ) : /* Show streaming loader when loading with no content and no tools */\n isLastMessage &&\n isLoading &&\n !cleanContent?.trim() &&\n !toolsWithCustomRender?.length &&\n !toolsWithoutCustomRender?.length &&\n !pendingApprovalTools?.length ? (\n <div className=\"rounded-lg bg-muted px-4 py-2\">\n <Loader variant={loaderVariant} size=\"sm\" />\n </div>\n ) : (\n <>\n {/* Message Content - show FIRST (AI's words before tool calls) */}\n {cleanContent?.trim() && (\n <MessageContent\n className={cn(\n \"csdk-message-assistant rounded-lg px-4 py-2 bg-muted\",\n assistantMessageClassName,\n )}\n markdown\n size={size}\n >\n {cleanContent}\n </MessageContent>\n )}\n\n {/* Custom Tool Renderers - Priority: tool.render > fallbackToolRenderer > toolRenderers */}\n {toolsWithCustomRender && toolsWithCustomRender.length > 0 && (\n <div className={cn(\"space-y-2\", cleanContent?.trim() && \"mt-2\")}>\n {toolsWithCustomRender.map((exec) => {\n const toolDef = registeredTools?.find(\n (t) => t.name === exec.name,\n );\n\n // PRIORITY 1: tool's own render function (defined in useTool)\n if (toolDef?.render) {\n let status: ToolRenderProps[\"status\"] = \"pending\";\n if (exec.status === \"executing\") status = \"executing\";\n else if (exec.status === \"completed\") status = \"completed\";\n else if (\n exec.status === \"error\" ||\n exec.status === \"failed\" ||\n exec.status === \"rejected\"\n )\n status = \"error\";\n\n const renderProps: ToolRenderProps = {\n status,\n args: exec.args,\n result: exec.result,\n error: exec.error,\n toolCallId: exec.id,\n toolName: exec.name,\n };\n const output = toolDef.render(\n renderProps,\n ) as React.ReactNode;\n if (output != null) {\n return (\n <React.Fragment key={exec.id}>{output}</React.Fragment>\n );\n }\n }\n\n // PRIORITY 2: mcpToolRenderer (catch-all for MCP tools)\n if (\n mcpToolRenderer &&\n (exec.source === \"mcp\" || toolDef?.source === \"mcp\")\n ) {\n const MCPRenderer = mcpToolRenderer;\n return (\n <MCPRenderer\n key={exec.id}\n execution={{\n id: exec.id,\n name: exec.name,\n args: exec.args,\n status: exec.status,\n result: exec.result,\n error: exec.error,\n source: exec.source || toolDef?.source,\n }}\n />\n );\n }\n\n // PRIORITY 3: toolRenderers map (app-level explicit renderer — static, always available)\n const Renderer = toolRenderers?.[exec.name];\n if (Renderer) {\n return (\n <Renderer\n key={exec.id}\n execution={{\n id: exec.id,\n name: exec.name,\n args: exec.args,\n status: exec.status,\n result: exec.result,\n error: exec.error,\n approvalStatus: exec.approvalStatus,\n source: exec.source,\n }}\n />\n );\n }\n\n // PRIORITY 4: fallbackToolRenderer (catch-all for any unmatched tool)\n if (fallbackToolRenderer) {\n const FallbackRenderer = fallbackToolRenderer;\n return (\n <FallbackRenderer\n key={exec.id}\n execution={{\n id: exec.id,\n name: exec.name,\n args: exec.args,\n status: exec.status,\n result: exec.result,\n error: exec.error,\n source: exec.source,\n }}\n />\n );\n }\n\n // Shouldn't reach here since we filtered, but fallback\n return null;\n })}\n </div>\n )}\n\n {/* Tool Steps (default display for tools without custom renderers) */}\n {toolSteps && toolSteps.length > 0 && (\n <div\n className={cn(\n \"rounded-lg bg-muted/50 px-3 py-2\",\n cleanContent?.trim() && \"mt-2\",\n )}\n >\n <ToolSteps steps={toolSteps} />\n </div>\n )}\n\n {/* MCP-UI Resources - Interactive components from MCP tools (excluding hidden) */}\n {message.toolExecutions\n ?.filter((exec) => !isToolHidden(exec))\n .map((exec) => {\n const uiResources = exec.result?._uiResources;\n if (!uiResources || uiResources.length === 0) return null;\n return (\n <MCPUIFrameList\n key={`${exec.id}-ui`}\n resources={uiResources}\n className=\"mt-2\"\n />\n );\n })}\n\n {/* Processing indicator below completed tools (AI is continuing after tool execution) */}\n {isLastMessage &&\n isProcessing &&\n completedTools &&\n completedTools.length > 0 && (\n <div className=\"mt-2 rounded-lg bg-muted px-4 py-2\">\n <Loader variant=\"dots\" size=\"sm\" />\n </div>\n )}\n\n {/* Tool Approval Confirmations - Priority: toolRenderers > tool.render > default */}\n {pendingApprovalTools && pendingApprovalTools.length > 0 && (\n <div className=\"mt-2 space-y-2\">\n {pendingApprovalTools.map((tool) => {\n // Approval callbacks for custom renders\n const approvalCallbacks = {\n onApprove: (extraData?: Record<string, unknown>) =>\n onApproveToolExecution?.(tool.id, extraData),\n onReject: (reason?: string) =>\n onRejectToolExecution?.(tool.id, reason),\n message: tool.approvalMessage,\n };\n\n // PRIORITY 1: toolRenderers (app-level override)\n const CustomRenderer = toolRenderers?.[tool.name];\n if (CustomRenderer) {\n return (\n <CustomRenderer\n key={tool.id}\n execution={tool}\n approval={approvalCallbacks}\n />\n );\n }\n\n // PRIORITY 2: tool's own render function\n const toolDef = registeredTools?.find(\n (t) => t.name === tool.name,\n );\n if (toolDef?.render) {\n const renderProps: ToolRenderProps = {\n status: \"approval-required\",\n args: tool.args,\n result: tool.result,\n error: tool.error,\n toolCallId: tool.id,\n toolName: tool.name,\n approval: approvalCallbacks,\n };\n const output = toolDef.render(\n renderProps,\n ) as React.ReactNode;\n return (\n <React.Fragment key={tool.id}>{output}</React.Fragment>\n );\n }\n\n // PRIORITY 3: Default PermissionConfirmation\n return (\n <PermissionConfirmation\n key={tool.id}\n state=\"pending\"\n toolName={tool.approvalTitle ?? tool.name}\n message={\n tool.approvalMessage ||\n `This tool wants to execute. Do you approve?`\n }\n onApprove={(permissionLevel) =>\n onApproveToolExecution?.(\n tool.id,\n undefined,\n permissionLevel,\n )\n }\n onReject={(permissionLevel) =>\n onRejectToolExecution?.(\n tool.id,\n undefined,\n permissionLevel,\n )\n }\n />\n );\n })}\n </div>\n )}\n\n {/* Attachments (images + files) */}\n {message.attachments && message.attachments.length > 0 && (\n <div className=\"csdk-assistant-attachments mt-2\">\n <MessageMedia\n attachments={message.attachments}\n hasText={!!message.content}\n align=\"start\"\n />\n </div>\n )}\n\n {/* Sources/Citations - Rendered below message content as chips */}\n {shouldShowSources && (\n <SourceGroup\n sources={sources}\n label={citations.label}\n showFavicon={citations.showFavicon ?? true}\n numbered={citations.numbered ?? false}\n maxVisible={citations.maxVisible ?? 6}\n className={cn(\"mt-2\", citations.className)}\n />\n )}\n\n {/* Follow-up Questions */}\n {shouldShowFollowUps && (\n <FollowUpQuestions\n questions={followUps}\n onSelect={onFollowUpClick!}\n className={followUpClassName}\n buttonClassName={followUpButtonClassName}\n />\n )}\n\n {/* Floating actions for assistant messages */}\n <FloatingActions message={message} role=\"assistant\" align=\"left\" />\n </>\n )}\n </div>\n </Message>\n );\n}\n\n// ── Attachment helpers ──────────────────────────────────────────────────────\n\nfunction getAttachmentSrc(attachment: MessageAttachment): string | null {\n if (attachment.url) return attachment.url;\n if (attachment.data) {\n return attachment.data.startsWith(\"data:\")\n ? attachment.data\n : `data:${attachment.mimeType};base64,${attachment.data}`;\n }\n return null;\n}\n\n/**\n * Image lightbox — fullscreen view with CSS animation.\n * Uses portal to render at document root for proper z-index.\n *\n * Animation: backdrop fade-in 200ms ease-out, image scale 0.92→1 + fade.\n * Exit: backdrop fade-out 180ms ease-in, image scale 1→0.95 + fade.\n * Follows: staging-dim-background, easing-entrance-ease-out, easing-exit-ease-in, duration-small-state\n */\nfunction ImageLightbox({\n src,\n alt,\n onClose,\n}: {\n src: string;\n alt: string;\n onClose: () => void;\n}) {\n const [closing, setClosing] = React.useState(false);\n const backdropRef = React.useRef<HTMLDivElement>(null);\n\n const handleClose = React.useCallback(() => {\n setClosing(true);\n // Wait for exit animation (180ms ease-in)\n setTimeout(onClose, 180);\n }, [onClose]);\n\n // Close on Escape\n React.useEffect(() => {\n const handler = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") handleClose();\n };\n document.addEventListener(\"keydown\", handler);\n return () => document.removeEventListener(\"keydown\", handler);\n }, [handleClose]);\n\n // Prevent body scroll\n React.useEffect(() => {\n const prev = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = prev;\n };\n }, []);\n\n const portal = (\n <div\n ref={backdropRef}\n className=\"csdk-lightbox csdk-lightbox-backdrop fixed inset-0 z-[9999] flex items-center justify-center cursor-zoom-out\"\n onClick={handleClose}\n style={{\n animation: closing\n ? \"csdk-lightbox-backdrop-out 180ms ease-in forwards\"\n : \"csdk-lightbox-backdrop-in 200ms ease-out forwards\",\n }}\n >\n {/* Scrim — hardcoded dark, no theme vars */}\n <div\n className=\"csdk-lightbox-scrim absolute inset-0\"\n style={{\n backgroundColor: \"rgba(0, 0, 0, 0.88)\",\n backdropFilter: \"blur(12px)\",\n WebkitBackdropFilter: \"blur(12px)\",\n animation: closing\n ? \"csdk-lightbox-fade-out 180ms ease-in forwards\"\n : \"csdk-lightbox-fade-in 200ms ease-out forwards\",\n }}\n />\n\n {/* Image */}\n <div\n className=\"csdk-lightbox-content relative z-10 max-w-[90vw] max-h-[90vh]\"\n style={{\n animation: closing\n ? \"csdk-lightbox-img-out 180ms ease-in forwards\"\n : \"csdk-lightbox-img-in 220ms cubic-bezier(0.22, 1, 0.36, 1) forwards\",\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <img\n src={src}\n alt={alt}\n className=\"csdk-lightbox-image max-w-full max-h-[90vh] object-contain rounded-xl\"\n style={{ boxShadow: \"0 25px 50px -12px rgba(0,0,0,0.5)\" }}\n draggable={false}\n />\n {/* Close button */}\n <button\n type=\"button\"\n className=\"csdk-lightbox-close absolute -top-3 -right-3 size-8 flex items-center justify-center rounded-full shadow-lg transition-[background,transform] duration-150 cursor-pointer active:scale-95\"\n style={{ backgroundColor: \"rgba(255,255,255,0.9)\" }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = \"rgba(255,255,255,1)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = \"rgba(255,255,255,0.9)\";\n }}\n onClick={handleClose}\n >\n <svg\n className=\"size-4\"\n style={{ color: \"#333\" }}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n </div>\n\n {/* Keyframe styles (injected once) */}\n <style>{`\n @keyframes csdk-lightbox-fade-in { from { opacity: 0; } to { opacity: 1; } }\n @keyframes csdk-lightbox-fade-out { from { opacity: 1; } to { opacity: 0; } }\n @keyframes csdk-lightbox-img-in { from { opacity: 0; transform: scale(0.92); } to { opacity: 1; transform: scale(1); } }\n @keyframes csdk-lightbox-img-out { from { opacity: 1; transform: scale(1); } to { opacity: 0; transform: scale(0.95); } }\n @keyframes csdk-lightbox-backdrop-in { from { opacity: 0; } to { opacity: 1; } }\n @keyframes csdk-lightbox-backdrop-out { from { opacity: 1; } to { opacity: 0; } }\n `}</style>\n </div>\n );\n\n // Portal to body\n return typeof document !== \"undefined\"\n ? ReactDOM.createPortal(portal, document.body)\n : null;\n}\n\n/**\n * Single image thumbnail — auto-sized, clickable, opens lightbox.\n * Preserves aspect ratio. Max width constrained by bubble, height auto.\n * active:scale-[0.98] for press feedback (physics-active-state).\n */\nfunction ImageThumb({\n src,\n alt,\n className,\n}: {\n src: string;\n alt: string;\n className?: string;\n}) {\n const [expanded, setExpanded] = React.useState(false);\n return (\n <>\n <button\n type=\"button\"\n onClick={() => setExpanded(true)}\n className={cn(\n \"csdk-attachment-image relative overflow-hidden cursor-zoom-in\",\n \"transition-[opacity,transform] duration-150 hover:opacity-90 active:scale-[0.98]\",\n className,\n )}\n style={{ backgroundColor: \"#000\" }}\n >\n <img\n src={src}\n alt={alt}\n className=\"w-full h-full object-cover\"\n loading=\"lazy\"\n draggable={false}\n />\n </button>\n {expanded && (\n <ImageLightbox src={src} alt={alt} onClose={() => setExpanded(false)} />\n )}\n </>\n );\n}\n\n/**\n * File attachment card — inline within message bubble.\n * Compact row: colored icon + filename + download/open button.\n * Styled to sit inside the bubble bg (slightly darker inner card).\n *\n * PDF gets red accent, audio green, video purple, generic blue.\n */\nfunction FileCard({ attachment }: { attachment: MessageAttachment }) {\n const isPdfFile = isPdf(attachment);\n const isAudio = attachment.type === \"audio\";\n const isVideo = attachment.type === \"video\";\n\n // Accent colors per type\n const accent = isPdfFile\n ? { color: \"#ef4444\", bg: \"rgba(239,68,68,0.12)\" }\n : isAudio\n ? { color: \"#10b981\", bg: \"rgba(16,185,129,0.12)\" }\n : isVideo\n ? { color: \"#8b5cf6\", bg: \"rgba(139,92,246,0.12)\" }\n : { color: \"#3b82f6\", bg: \"rgba(59,130,246,0.12)\" };\n\n const label = isPdfFile\n ? \"PDF\"\n : attachment.mimeType?.split(\"/\")[1]?.toUpperCase() ||\n attachment.type?.toUpperCase() ||\n \"FILE\";\n const filename = attachment.filename || \"Attachment\";\n const href =\n attachment.url ||\n (attachment.data?.startsWith(\"data:\") ? attachment.data : null);\n const cssClass = isPdfFile ? \"csdk-attachment-pdf\" : \"csdk-attachment-file\";\n\n return (\n <a\n href={href ?? undefined}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n download={isPdfFile ? undefined : attachment.filename}\n className={cn(\n cssClass,\n \"flex items-center gap-2 rounded-lg min-w-0 w-full\",\n \"px-2 py-1.5 cursor-pointer transition-opacity duration-150 hover:opacity-80\",\n \"no-underline\",\n )}\n style={{ backgroundColor: \"rgba(255,255,255,0.92)\", color: \"#1a1a1a\" }}\n onClick={(e) => {\n if (!href) e.preventDefault();\n }}\n >\n {/* Icon */}\n <div\n className=\"size-8 rounded-md flex items-center justify-center shrink-0\"\n style={{ backgroundColor: accent.bg }}\n >\n <svg\n className=\"size-4\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={accent.color}\n strokeWidth={1.8}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n {isPdfFile || (!isAudio && !isVideo) ? (\n <>\n <path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\" />\n <path d=\"M14 2v4a2 2 0 0 0 2 2h4\" />\n </>\n ) : isAudio ? (\n <>\n <path d=\"M9 18V5l12-2v13\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <circle cx=\"18\" cy=\"16\" r=\"3\" />\n </>\n ) : (\n <>\n <path d=\"m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.934a.5.5 0 0 0-.777-.416L16 11\" />\n <rect width=\"14\" height=\"12\" x=\"2\" y=\"6\" rx=\"2\" />\n </>\n )}\n </svg>\n </div>\n {/* Name + type */}\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-[11px] font-medium truncate leading-tight\">\n {filename}\n </p>\n <p\n className=\"text-[9px] font-semibold uppercase tracking-wider leading-tight mt-0.5\"\n style={{ color: accent.color }}\n >\n {label}\n </p>\n </div>\n {/* Download / open icon */}\n {href && (\n <div\n className=\"size-6 rounded-md flex items-center justify-center shrink-0\"\n style={{ backgroundColor: \"rgba(0,0,0,0.05)\" }}\n >\n <svg\n className=\"size-3\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{ opacity: 0.35 }}\n >\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <polyline points=\"7 10 12 15 17 10\" />\n <line x1=\"12\" x2=\"12\" y1=\"15\" y2=\"3\" />\n </svg>\n </div>\n )}\n </a>\n );\n}\n\n/** @deprecated Use FileCard which now handles all types including PDF */\nconst PdfCard = FileCard;\n\n/**\n * Image grid — WhatsApp/Telegram-style layout\n * 1 image: full width\n * 2 images: side by side\n * 3 images: 2 top + 1 bottom\n * 4+ images: 2x2 grid with +N overlay\n */\nfunction ImageGrid({\n images,\n bubbleRadius,\n}: {\n images: MessageAttachment[];\n bubbleRadius?: string;\n}) {\n const srcs = images\n .map((img) => getAttachmentSrc(img))\n .filter(Boolean) as string[];\n if (srcs.length === 0) return null;\n\n // Concentric radius: inner = outer bubble radius (16px) minus padding (2px) = 14px\n const innerRadius = bubbleRadius ? `calc(${bubbleRadius} - 2px)` : \"0.875rem\";\n\n if (srcs.length === 1) {\n return (\n <div\n className=\"csdk-attachment-grid\"\n style={{ borderRadius: innerRadius, overflow: \"hidden\" }}\n >\n <ImageThumb\n src={srcs[0]}\n alt={images[0].filename || \"Image\"}\n className=\"w-full\"\n />\n </div>\n );\n }\n\n if (srcs.length === 2) {\n return (\n <div\n className=\"csdk-attachment-grid grid grid-cols-2 gap-[2px]\"\n style={{ borderRadius: innerRadius, overflow: \"hidden\" }}\n >\n {srcs.map((src, i) => (\n <ImageThumb\n key={i}\n src={src}\n alt={images[i].filename || \"Image\"}\n className=\"aspect-square\"\n />\n ))}\n </div>\n );\n }\n\n if (srcs.length === 3) {\n return (\n <div\n className=\"csdk-attachment-grid grid grid-cols-2 gap-[2px]\"\n style={{ borderRadius: innerRadius, overflow: \"hidden\" }}\n >\n <ImageThumb\n src={srcs[0]}\n alt={images[0].filename || \"Image\"}\n className=\"col-span-2 max-h-[180px] min-h-[100px]\"\n />\n <ImageThumb\n src={srcs[1]}\n alt={images[1].filename || \"Image\"}\n className=\"aspect-square\"\n />\n <ImageThumb\n src={srcs[2]}\n alt={images[2].filename || \"Image\"}\n className=\"aspect-square\"\n />\n </div>\n );\n }\n\n // 4+ images: 2x2 grid, last cell shows +N if more\n const showOverlay = srcs.length > 4;\n const gridSrcs = srcs.slice(0, 4);\n\n return (\n <div\n className=\"csdk-attachment-grid grid grid-cols-2 gap-[2px]\"\n style={{ borderRadius: innerRadius, overflow: \"hidden\" }}\n >\n {gridSrcs.map((src, i) => (\n <div key={i} className=\"relative aspect-square\">\n <ImageThumb\n src={src}\n alt={images[i].filename || \"Image\"}\n className=\"w-full h-full\"\n />\n {i === 3 && showOverlay && (\n <div className=\"absolute inset-0 bg-black/50 flex items-center justify-center pointer-events-none\">\n <span className=\"text-white text-lg font-semibold\">\n +{srcs.length - 4}\n </span>\n </div>\n )}\n </div>\n ))}\n </div>\n );\n}\n\n/**\n * MessageMedia — renders attachments in a message bubble.\n * Handles image-only, image+text, file cards, and mixed content.\n *\n * Layout follows WhatsApp/Telegram pattern:\n * - Images at top of bubble (no padding), text below with padding\n * - Files shown as compact cards below text\n */\nfunction isPdf(a: MessageAttachment): boolean {\n return (\n a.mimeType === \"application/pdf\" ||\n a.filename?.toLowerCase().endsWith(\".pdf\") === true\n );\n}\n\nfunction MessageMedia({\n attachments,\n hasText,\n align = \"end\",\n}: {\n attachments: MessageAttachment[];\n hasText: boolean;\n align?: \"start\" | \"end\";\n}) {\n const images = attachments.filter((a) => a.type === \"image\");\n const pdfs = attachments.filter((a) => isPdf(a));\n const files = attachments.filter((a) => a.type !== \"image\" && !isPdf(a));\n\n return (\n <>\n {images.length > 0 && (\n <div className={cn(\"csdk-attachment-images\", hasText ? \"mb-0\" : \"\")}>\n <ImageGrid images={images} bubbleRadius=\"0.5rem\" />\n </div>\n )}\n {(pdfs.length > 0 || files.length > 0) && (\n <div\n className={cn(\n \"csdk-attachment-files flex flex-col gap-1\",\n hasText || images.length > 0 ? \"px-1.5 pb-1.5 pt-1\" : \"p-1.5\",\n )}\n >\n {[...pdfs, ...files].map((file, i) => (\n <FileCard key={i} attachment={file} />\n ))}\n </div>\n )}\n </>\n );\n}\n","\"use client\";\n\nimport React, { useState, useCallback, useRef, useId } from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport {\n PromptInput,\n PromptInputTextarea,\n PromptInputActions,\n PromptInputAction,\n} from \"../../ui/prompt-input\";\nimport { Button } from \"../../ui/button\";\nimport { Loader } from \"../../ui/loader\";\nimport {\n PlusIcon,\n ArrowUpIcon,\n StopIcon,\n XIcon,\n ArrowUpRightIcon,\n} from \"../../icons\";\nimport CopilotSDKLogo from \"../../icons/copilot-sdk-logo\";\nimport type {\n WelcomeConfig,\n PendingAttachment,\n MessageAttachment,\n} from \"./types\";\nimport type { Thread } from \"../../../../core/types/thread\";\n\n// Constants\nconst DEFAULT_MAX_FILE_SIZE = 5 * 1024 * 1024; // 5MB\nconst DEFAULT_ALLOWED_TYPES = [\"image/*\", \"application/pdf\"];\n\n// Default welcome config values\nconst DEFAULT_TITLE = \"How can I help you today?\";\nconst DEFAULT_SUBTITLE = \"Ask anything and get it done.\";\nconst DEFAULT_SUGGESTIONS_LABEL = \"Try AI Copilot\";\nconst DEFAULT_RECENT_CHATS_LABEL = \"Recent chats\";\nconst DEFAULT_MAX_RECENT_CHATS = 3;\nconst DEFAULT_VIEW_MORE_LABEL = \"View more..\";\n\n/**\n * Get attachment type from MIME type\n */\nfunction getAttachmentType(\n mimeType: string,\n): \"image\" | \"file\" | \"audio\" | \"video\" {\n if (mimeType.startsWith(\"image/\")) return \"image\";\n if (mimeType.startsWith(\"audio/\")) return \"audio\";\n if (mimeType.startsWith(\"video/\")) return \"video\";\n return \"file\";\n}\n\n/**\n * Convert file to base64 data URL\n */\nfunction fileToBase64(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result === \"string\") {\n resolve(reader.result);\n } else {\n reject(new Error(\"Failed to read file\"));\n }\n };\n reader.onerror = () => reject(new Error(\"Failed to read file\"));\n reader.readAsDataURL(file);\n });\n}\n\n/**\n * Generate unique attachment ID\n */\nfunction generateAttachmentId(): string {\n return `att_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n}\n\nexport interface ChatWelcomeProps {\n /** Welcome screen configuration */\n config?: WelcomeConfig;\n /** Suggestions to show */\n suggestions?: string[];\n /** Recent threads for the recent chats section */\n recentThreads?: Thread[];\n /** Called when user sends a message */\n onSendMessage: (message: string, attachments?: MessageAttachment[]) => void;\n /** Called when user selects a recent thread */\n onSelectThread?: (threadId: string) => void;\n /** Called when user deletes a recent thread */\n onDeleteThread?: (threadId: string) => void;\n /** Called when user clicks \"View more\" */\n onViewMoreThreads?: () => void;\n /** Whether AI is currently generating */\n isLoading?: boolean;\n /** Called when user stops generation */\n onStop?: () => void;\n /** Placeholder for input */\n placeholder?: string;\n /** Whether attachments are enabled */\n attachmentsEnabled?: boolean;\n /** Tooltip when attachments are disabled */\n attachmentsDisabledTooltip?: string;\n /** Maximum file size in bytes */\n maxFileSize?: number;\n /** Allowed file types */\n allowedFileTypes?: string[];\n /** Custom attachment processor */\n processAttachment?: (file: File) => Promise<MessageAttachment>;\n /** Custom class names */\n classNames?: {\n root?: string;\n hero?: string;\n input?: string;\n suggestions?: string;\n recentChats?: string;\n };\n}\n\nexport function ChatWelcome({\n config,\n suggestions = [],\n recentThreads = [],\n onSendMessage,\n onSelectThread,\n onDeleteThread,\n onViewMoreThreads,\n isLoading = false,\n onStop,\n placeholder = \"Type a message...\",\n attachmentsEnabled = true,\n attachmentsDisabledTooltip = \"Attachments not supported by this model\",\n maxFileSize = DEFAULT_MAX_FILE_SIZE,\n allowedFileTypes = DEFAULT_ALLOWED_TYPES,\n processAttachment: processAttachmentProp,\n classNames = {},\n}: ChatWelcomeProps) {\n const [input, setInput] = useState(\"\");\n const [pendingAttachments, setPendingAttachments] = useState<\n PendingAttachment[]\n >([]);\n const fileInputRef = useRef<HTMLInputElement>(null);\n const fileInputId = useId();\n\n // Extract config values with defaults\n const title = config?.title ?? DEFAULT_TITLE;\n const subtitle = config?.subtitle ?? DEFAULT_SUBTITLE;\n const logo = config?.logo;\n const suggestionsLabel =\n config?.suggestionsLabel ?? DEFAULT_SUGGESTIONS_LABEL;\n const showRecentChats = config?.showRecentChats ?? true;\n const recentChatsLabel =\n config?.recentChatsLabel ?? DEFAULT_RECENT_CHATS_LABEL;\n const maxRecentChats = config?.maxRecentChats ?? DEFAULT_MAX_RECENT_CHATS;\n const viewMoreLabel = config?.viewMoreLabel ?? DEFAULT_VIEW_MORE_LABEL;\n\n // Check if file type is allowed\n const isFileTypeAllowed = useCallback(\n (file: File): boolean => {\n for (const type of allowedFileTypes) {\n if (type.endsWith(\"/*\")) {\n const category = type.slice(0, -2);\n if (file.type.startsWith(category + \"/\")) return true;\n } else if (file.type === type) {\n return true;\n }\n }\n return false;\n },\n [allowedFileTypes],\n );\n\n // Handle file selection\n const handleFileSelect = useCallback(\n async (files: FileList | null) => {\n if (!files || !attachmentsEnabled) return;\n\n for (const file of Array.from(files)) {\n // Validate file size\n if (file.size > maxFileSize) {\n const sizeMB = (maxFileSize / (1024 * 1024)).toFixed(0);\n console.warn(`File ${file.name} exceeds ${sizeMB}MB limit`);\n continue;\n }\n\n // Validate file type\n if (!isFileTypeAllowed(file)) {\n console.warn(`File type ${file.type} is not allowed`);\n continue;\n }\n\n const id = generateAttachmentId();\n const previewUrl = URL.createObjectURL(file);\n\n // Add as processing\n setPendingAttachments((prev) => [\n ...prev,\n {\n id,\n file,\n previewUrl,\n attachment: {\n type: getAttachmentType(file.type),\n data: \"\",\n mimeType: file.type,\n filename: file.name,\n },\n status: \"processing\",\n },\n ]);\n\n // Process attachment\n try {\n let attachment: MessageAttachment;\n\n if (processAttachmentProp) {\n attachment = await processAttachmentProp(file);\n } else {\n const data = await fileToBase64(file);\n attachment = {\n type: getAttachmentType(file.type),\n data,\n mimeType: file.type,\n filename: file.name,\n };\n }\n\n setPendingAttachments((prev) =>\n prev.map((att) =>\n att.id === id\n ? { ...att, status: \"ready\" as const, attachment }\n : att,\n ),\n );\n } catch (error) {\n setPendingAttachments((prev) =>\n prev.map((att) =>\n att.id === id\n ? {\n ...att,\n status: \"error\" as const,\n error: \"Failed to process file\",\n }\n : att,\n ),\n );\n }\n }\n },\n [attachmentsEnabled, maxFileSize, isFileTypeAllowed, processAttachmentProp],\n );\n\n // Handle file input change\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n handleFileSelect(e.target.files);\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n },\n [handleFileSelect],\n );\n\n // Remove pending attachment\n const removePendingAttachment = useCallback((id: string) => {\n setPendingAttachments((prev) => {\n const att = prev.find((a) => a.id === id);\n if (att) {\n URL.revokeObjectURL(att.previewUrl);\n }\n return prev.filter((a) => a.id !== id);\n });\n }, []);\n\n const handleSubmit = useCallback(() => {\n const hasContent = input.trim();\n const hasAttachments = pendingAttachments.some(\n (att) => att.status === \"ready\",\n );\n\n if ((!hasContent && !hasAttachments) || isLoading) return;\n\n // Get ready attachments\n const attachments = pendingAttachments\n .filter((att) => att.status === \"ready\")\n .map((att) => att.attachment);\n\n onSendMessage(input, attachments.length > 0 ? attachments : undefined);\n\n // Cleanup\n pendingAttachments.forEach((att) => URL.revokeObjectURL(att.previewUrl));\n setPendingAttachments([]);\n setInput(\"\");\n }, [input, isLoading, onSendMessage, pendingAttachments]);\n\n const handleSuggestionClick = useCallback(\n (suggestion: string) => {\n onSendMessage(suggestion);\n },\n [onSendMessage],\n );\n\n // Compute accept string from allowed types\n const acceptString = allowedFileTypes.join(\",\");\n\n // Determine which threads to show\n const visibleThreads = showRecentChats\n ? recentThreads.slice(0, maxRecentChats)\n : [];\n const hasMoreThreads = recentThreads.length > maxRecentChats;\n\n return (\n <div\n className={cn(\n \"flex flex-1 flex-col items-center justify-center px-4 py-8 overflow-auto\",\n classNames.root,\n )}\n >\n {/* Hero Section */}\n <div\n className={cn(\n \"flex flex-col items-center text-center mb-8\",\n classNames.hero,\n )}\n >\n {/* Logo */}\n {logo ? (\n <img\n src={logo}\n alt=\"Logo\"\n className=\"size-12 rounded-lg object-contain mb-4\"\n />\n ) : (\n <div className=\"mb-4\">\n <CopilotSDKLogo className=\"h-12 w-auto\" />\n </div>\n )}\n {/* Title */}\n <h1 className=\"text-xl font-semibold text-foreground mb-2\">{title}</h1>\n {/* Subtitle */}\n <p className=\"text-sm text-muted-foreground\">{subtitle}</p>\n </div>\n\n {/* Input - Centered */}\n <div className={cn(\"w-full max-w-lg mb-6\", classNames.input)}>\n {/* Pending Attachments Preview */}\n {pendingAttachments.length > 0 && (\n <div className=\"flex flex-wrap gap-2 p-2 mb-2 bg-muted/30 rounded-lg\">\n {pendingAttachments.map((att) => (\n <div key={att.id} className=\"relative group\">\n {att.attachment.type === \"image\" ? (\n <img\n src={att.previewUrl}\n alt={att.file.name}\n className=\"w-16 h-16 object-cover rounded-lg border\"\n />\n ) : (\n <div className=\"w-16 h-16 bg-muted rounded-lg border flex flex-col items-center justify-center p-1\">\n <svg\n className=\"w-6 h-6 text-muted-foreground\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\n />\n </svg>\n <span className=\"text-[10px] text-muted-foreground truncate w-full text-center mt-1\">\n {att.file.name.length > 10\n ? att.file.name.slice(0, 8) + \"...\"\n : att.file.name}\n </span>\n </div>\n )}\n {/* Loading overlay */}\n {att.status === \"processing\" && (\n <div className=\"csdk-attachment-loading absolute inset-0 bg-background/80 rounded-lg flex items-center justify-center\">\n <Loader variant=\"dots\" size=\"sm\" />\n </div>\n )}\n {/* Error overlay */}\n {att.status === \"error\" && (\n <div className=\"csdk-attachment-error absolute inset-0 bg-destructive/20 rounded-lg flex items-center justify-center\">\n <span className=\"text-destructive text-xs\">Error</span>\n </div>\n )}\n {/* Remove button */}\n <button\n onClick={() => removePendingAttachment(att.id)}\n className=\"absolute -top-1.5 -right-1.5 bg-destructive text-destructive-foreground rounded-full p-0.5 opacity-0 group-hover:opacity-100 transition-opacity\"\n type=\"button\"\n >\n <XIcon className=\"w-3 h-3\" />\n </button>\n </div>\n ))}\n </div>\n )}\n\n <PromptInput\n value={input}\n onValueChange={setInput}\n isLoading={isLoading}\n onSubmit={handleSubmit}\n >\n <PromptInputTextarea placeholder={placeholder} />\n <PromptInputActions className=\"flex justify-between\">\n <div>\n <PromptInputAction\n tooltip={\n attachmentsEnabled\n ? \"Attach files\"\n : attachmentsDisabledTooltip\n }\n >\n <label\n htmlFor={fileInputId}\n className={cn(\n \"flex h-8 w-8 items-center justify-center rounded-2xl\",\n attachmentsEnabled\n ? \"hover:bg-secondary-foreground/10 cursor-pointer\"\n : \"opacity-50 cursor-not-allowed\",\n )}\n >\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n accept={acceptString}\n onChange={handleInputChange}\n className=\"hidden\"\n id={fileInputId}\n disabled={!attachmentsEnabled}\n />\n <PlusIcon className=\"text-primary size-5\" />\n </label>\n </PromptInputAction>\n </div>\n <PromptInputAction tooltip={isLoading ? \"Stop\" : \"Send\"}>\n {isLoading ? (\n <Button\n size=\"sm\"\n variant=\"destructive\"\n className=\"rounded-full size-9\"\n onClick={onStop}\n >\n <StopIcon className=\"h-4 w-4\" />\n </Button>\n ) : (\n <Button\n size=\"sm\"\n className=\"rounded-full size-9\"\n onClick={handleSubmit}\n disabled={\n !input.trim() &&\n !pendingAttachments.some((att) => att.status === \"ready\")\n }\n >\n <ArrowUpIcon className=\"h-4 w-4\" />\n </Button>\n )}\n </PromptInputAction>\n </PromptInputActions>\n </PromptInput>\n </div>\n\n {/* Suggestions */}\n {suggestions.length > 0 && (\n <div\n className={cn(\"w-full max-w-lg mb-6 px-3\", classNames.suggestions)}\n >\n <p className=\"text-xs font-medium text-muted-foreground mb-2\">\n {suggestionsLabel}\n </p>\n <div className=\"\">\n {suggestions.map((suggestion, index) => (\n <button\n key={index}\n type=\"button\"\n onClick={() => handleSuggestionClick(suggestion)}\n className=\"group w-full cursor-pointer font-medium text-left py-2 text-sm hover:text-foreground text-foreground/70 transition-colors flex items-center gap-2\"\n >\n <span>{suggestion}</span>\n <ArrowUpRightIcon className=\"size-4 opacity-0 translate-y-1 group-hover:opacity-[0.6] group-hover:translate-y-0 transition-all duration-200\" />\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React, {\n useState,\n useCallback,\n useRef,\n useId,\n createContext,\n useContext,\n} from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport {\n ChatContainerRoot,\n ChatContainerContent,\n ChatContainerScrollAnchor,\n} from \"../../ui/chat-container\";\nimport { ScrollButton } from \"../../ui/scroll-button\";\nimport {\n PromptInput,\n PromptInputTextarea,\n PromptInputActions,\n PromptInputAction,\n} from \"../../ui/prompt-input\";\nimport { Loader } from \"../../ui/loader\";\nimport { Button } from \"../../ui/button\";\nimport {\n StopIcon,\n PlusIcon,\n ArrowUpIcon,\n XIcon,\n ChevronLeftIcon,\n} from \"../../icons\";\nimport { ChatHeader } from \"./chat-header\";\nimport { Suggestions } from \"./suggestions\";\nimport { DefaultMessage } from \"./default-message\";\nimport { ChatWelcome } from \"./chat-welcome\";\nimport type { ChatProps, PendingAttachment, MessageAttachment } from \"./types\";\nimport type { ToolExecutionData } from \"../tools\";\nimport type { Thread } from \"../../../../core/types/thread\";\nimport { ThreadPicker, type ThreadPickerProps } from \"../../ui/thread-picker\";\nimport { MessageActionsProvider } from \"./message-actions-context\";\nimport {\n MessageActions,\n CopyAction,\n EditAction,\n FeedbackAction,\n Action as MessageAction,\n} from \"./message-actions-compound\";\n\n// ============================================================================\n// Internal Context for Compound Components\n// ============================================================================\n\ninterface CopilotChatInternalContext {\n view: \"home\" | \"chat\";\n send: (message: string, attachments?: MessageAttachment[]) => void;\n isLoading: boolean;\n onStop?: () => void;\n attachmentsEnabled: boolean;\n placeholder: string;\n // Messages (for Chat.MessageList primitive)\n messages: import(\"./types\").ChatMessage[];\n registeredTools?: import(\"../../../../core\").ToolDefinition[];\n // Thread management\n onNewChat?: () => void;\n threads?: Thread[];\n currentThreadId?: string | null;\n onSwitchThread?: (id: string) => void;\n onDeleteThread?: (id: string) => void;\n isThreadBusy?: boolean;\n}\n\nconst CopilotChatContext = createContext<CopilotChatInternalContext | null>(\n null,\n);\n\n/**\n * Hook to access CopilotChat internal context.\n * Must be used within CopilotChat compound components.\n */\nexport const useCopilotChatContext = () => {\n const ctx = useContext(CopilotChatContext);\n if (!ctx) {\n throw new Error(\n \"useCopilotChatContext must be used within CopilotChat. \" +\n \"Make sure you're using CopilotChat.Home, CopilotChat.Input, etc. inside <CopilotChat>\",\n );\n }\n return ctx;\n};\n\n// ============================================================================\n// Compound Components\n// ============================================================================\n\n/**\n * HomeView slot - renders only when there are no messages (home view).\n * Use this to create a custom welcome/home screen.\n */\nexport interface HomeViewProps {\n children: React.ReactNode;\n className?: string;\n}\n\nfunction HomeView({ children, className }: HomeViewProps) {\n const { view } = useCopilotChatContext();\n if (view !== \"home\") return null;\n return (\n <div\n className={cn(\n \"csdk-chat-home-view flex flex-1 flex-col overflow-auto\",\n className,\n )}\n >\n <div className=\"flex flex-col w-full\">{children}</div>\n </div>\n );\n}\n\n// Alias for backward compatibility\nexport type { HomeViewProps as HomeProps };\nconst Home = HomeView;\n\n/**\n * ChatView slot - renders only when there are messages (chat view).\n * Use this for custom chat UI layouts. If no children, renders default chat UI.\n *\n * When Header/Footer are placed inside ChatView (instead of at root level),\n * they only show in chat view - view-specific by composition!\n *\n * @example View-specific header\n * ```tsx\n * <CopilotChat.ChatView>\n * <CopilotChat.Header>Only shows in chat view!</CopilotChat.Header>\n * </CopilotChat.ChatView>\n * ```\n */\nexport interface ChatViewProps {\n children?: React.ReactNode;\n className?: string;\n}\n\nfunction ChatView({ children, className }: ChatViewProps) {\n const { view } = useCopilotChatContext();\n if (view !== \"chat\") return null;\n\n // If children provided, render them in a minimal wrapper (no flex-1, user controls layout)\n if (children) {\n return (\n <div className={cn(\"csdk-chat-view flex flex-col\", className)}>\n {children}\n </div>\n );\n }\n\n // Marker for parent to render default chat content\n return null;\n}\n\n// Internal marker to identify ChatView without children\nChatView.displayName = \"ChatView\";\n\n/**\n * Check if ChatView children consist only of Header/Footer components.\n * If so, we should still render default chat content alongside them.\n */\nfunction chatViewHasOnlyLayoutChildren(\n chatViewElement: React.ReactElement | undefined,\n): boolean {\n if (!chatViewElement?.props?.children) return false;\n\n const childArray = React.Children.toArray(chatViewElement.props.children);\n if (childArray.length === 0) return false;\n\n // Check if ALL children are Header or Footer\n return childArray.every(\n (child) =>\n React.isValidElement(child) &&\n (child.type === Header || child.type === Footer),\n );\n}\n\n/**\n * Header slot - renders header content.\n * Can be placed at root level (shows in both views) or inside HomeView/ChatView (view-specific).\n */\nexport interface HeaderProps {\n children: React.ReactNode;\n className?: string;\n}\n\nfunction Header({ children, className }: HeaderProps) {\n return <div className={cn(\"csdk-chat-header\", className)}>{children}</div>;\n}\n\n/**\n * Footer slot - renders footer content.\n * Can be placed at root level (shows in both views) or inside HomeView/ChatView (view-specific).\n */\nexport interface FooterProps {\n children: React.ReactNode;\n className?: string;\n}\n\nfunction Footer({ children, className }: FooterProps) {\n return <div className={cn(\"csdk-chat-footer\", className)}>{children}</div>;\n}\n\n/**\n * Input component that auto-connects to CopilotChat context.\n * Handles sending messages without manual wiring.\n */\nexport interface InputProps {\n placeholder?: string;\n className?: string;\n}\n\nfunction Input({ placeholder: placeholderProp, className }: InputProps) {\n const {\n send,\n isLoading,\n onStop,\n placeholder: defaultPlaceholder,\n } = useCopilotChatContext();\n const [value, setValue] = useState(\"\");\n\n const handleSubmit = useCallback(() => {\n if (value.trim() && !isLoading) {\n send(value.trim());\n setValue(\"\");\n }\n }, [value, isLoading, send]);\n\n return (\n <PromptInput\n value={value}\n onValueChange={setValue}\n isLoading={isLoading}\n onSubmit={handleSubmit}\n className={cn(\"csdk-compound-input\", className)}\n >\n <PromptInputTextarea\n placeholder={placeholderProp ?? defaultPlaceholder}\n />\n <PromptInputActions className=\"justify-end\">\n <PromptInputAction tooltip={isLoading ? \"Stop\" : \"Send\"}>\n {isLoading ? (\n <Button\n size=\"sm\"\n variant=\"destructive\"\n className=\"csdk-button-stop rounded-full size-9\"\n onClick={onStop}\n >\n <StopIcon className=\"h-4 w-4\" />\n </Button>\n ) : (\n <Button\n size=\"sm\"\n className=\"csdk-button-send rounded-full size-9\"\n onClick={handleSubmit}\n disabled={!value.trim()}\n >\n <ArrowUpIcon className=\"h-4 w-4\" />\n </Button>\n )}\n </PromptInputAction>\n </PromptInputActions>\n </PromptInput>\n );\n}\n\n/**\n * Suggestions component that auto-connects to CopilotChat context.\n * Clicking a suggestion sends it as a message.\n */\nexport interface SuggestionsCompoundProps {\n items: string[];\n label?: string;\n className?: string;\n buttonClassName?: string;\n}\n\nfunction SuggestionsCompound({\n items,\n label,\n className,\n buttonClassName,\n}: SuggestionsCompoundProps) {\n const { send } = useCopilotChatContext();\n\n if (items.length === 0) return null;\n\n return (\n <div className={cn(\"csdk-compound-suggestions\", className)}>\n {label && (\n <span className=\"text-sm text-muted-foreground mb-2 block\">\n {label}\n </span>\n )}\n <div className=\"flex flex-wrap gap-2\">\n {items.map((item, i) => (\n <button\n key={i}\n onClick={() => send(item)}\n className={cn(\n \"csdk-followup-button px-3 py-1.5 text-sm rounded-full border\",\n \"bg-background hover:bg-accent transition-colors\",\n buttonClassName,\n )}\n >\n {item}\n </button>\n ))}\n </div>\n </div>\n );\n}\n\n/**\n * BackButton component that starts a new chat and returns to home view.\n * Auto-connects to CopilotChat context for thread management.\n */\nexport interface BackButtonProps {\n className?: string;\n children?: React.ReactNode;\n /** Override disabled state (combines with isThreadBusy from context) */\n disabled?: boolean;\n /** Accessible label for screen readers */\n \"aria-label\"?: string;\n}\n\nfunction BackButton({\n className,\n children,\n disabled,\n \"aria-label\": ariaLabel = \"Start new chat\",\n}: BackButtonProps) {\n const { onNewChat, isThreadBusy } = useCopilotChatContext();\n\n if (!onNewChat) return null;\n\n return (\n <button\n type=\"button\"\n onClick={onNewChat}\n disabled={disabled || isThreadBusy}\n aria-label={ariaLabel}\n className={cn(\n \"csdk-back-button flex items-center gap-1 text-sm\",\n \"hover:bg-accent rounded px-2 py-1\",\n \"disabled:opacity-50 disabled:cursor-not-allowed\",\n className,\n )}\n >\n {children || (\n <>\n <ChevronLeftIcon className=\"h-4 w-4\" />\n <span>New Chat</span>\n </>\n )}\n </button>\n );\n}\n\n/**\n * ThreadPicker compound wrapper that auto-connects to CopilotChat context.\n * Only renders when persistence is enabled (thread functions available).\n */\nexport type ThreadPickerCompoundProps = Omit<\n ThreadPickerProps,\n | \"value\"\n | \"threads\"\n | \"onSelect\"\n | \"onNewThread\"\n | \"onDeleteThread\"\n | \"disabled\"\n>;\n\nfunction ThreadPickerCompound(props: ThreadPickerCompoundProps) {\n const {\n threads,\n currentThreadId,\n onSwitchThread,\n onNewChat,\n onDeleteThread,\n isThreadBusy,\n } = useCopilotChatContext();\n\n // Only render if persistence is enabled (thread functions available)\n if (!threads || !onSwitchThread) return null;\n\n return (\n <ThreadPicker\n {...props}\n value={currentThreadId}\n threads={threads}\n onSelect={onSwitchThread}\n onNewThread={onNewChat}\n onDeleteThread={onDeleteThread}\n disabled={isThreadBusy}\n />\n );\n}\n\n// ============================================================================\n// Helper to detect compound children\n// ============================================================================\n\nfunction hasCompoundChild(\n children: React.ReactNode,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...components: React.ComponentType<any>[]\n): boolean {\n return React.Children.toArray(children).some(\n (child) =>\n React.isValidElement(child) &&\n components.includes(child.type as React.ComponentType),\n );\n}\n\n/**\n * Find a specific compound child by type\n */\nfunction findCompoundChild(\n children: React.ReactNode,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component: React.ComponentType<any>,\n): React.ReactElement | undefined {\n return React.Children.toArray(children).find(\n (child) => React.isValidElement(child) && child.type === component,\n ) as React.ReactElement | undefined;\n}\n\n/**\n * Filter compound children by types\n */\nfunction filterCompoundChildren(\n children: React.ReactNode,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...components: React.ComponentType<any>[]\n): React.ReactElement[] {\n return React.Children.toArray(children).filter(\n (child) =>\n React.isValidElement(child) &&\n components.includes(child.type as React.ComponentType),\n ) as React.ReactElement[];\n}\n\n// Constants\nconst DEFAULT_MAX_FILE_SIZE = 5 * 1024 * 1024; // 5MB\nconst DEFAULT_ALLOWED_TYPES = [\"image/*\", \"application/pdf\"];\n\n/**\n * Get attachment type from MIME type\n */\nfunction getAttachmentType(\n mimeType: string,\n): \"image\" | \"file\" | \"audio\" | \"video\" {\n if (mimeType.startsWith(\"image/\")) return \"image\";\n if (mimeType.startsWith(\"audio/\")) return \"audio\";\n if (mimeType.startsWith(\"video/\")) return \"video\";\n return \"file\";\n}\n\n/**\n * Convert file to base64 data URL\n */\nfunction fileToBase64(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result === \"string\") {\n resolve(reader.result);\n } else {\n reject(new Error(\"Failed to read file\"));\n }\n };\n reader.onerror = () => reject(new Error(\"Failed to read file\"));\n reader.readAsDataURL(file);\n });\n}\n\n/**\n * Generate unique attachment ID\n */\nfunction generateAttachmentId(): string {\n return `att_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n}\n\nfunction ChatComponent({\n // Core\n messages = [],\n onSendMessage,\n onStop,\n isLoading = false,\n error,\n // Compound children\n children,\n // Labels\n placeholder = \"Type a message...\",\n welcomeMessage,\n title,\n // Header\n showHeader = false,\n header,\n threadPicker,\n // Deprecated header props (backwards compat)\n logo,\n name,\n onClose,\n // Appearance\n showPoweredBy = true,\n showUserAvatar = false,\n userAvatar: userAvatarProp,\n assistantAvatar: assistantAvatarProp,\n loaderVariant = \"typing\",\n fontSize = \"sm\",\n // Attachments\n maxFileSize = DEFAULT_MAX_FILE_SIZE,\n allowedFileTypes = DEFAULT_ALLOWED_TYPES,\n attachmentsEnabled = true,\n attachmentsDisabledTooltip = \"Attachments not supported by this model\",\n upload: uploadProp,\n processAttachment: deprecatedProcessAttachment,\n // Suggestions\n suggestions = [],\n onSuggestionClick,\n // Welcome Screen\n welcome,\n recentThreads = [],\n onSelectThread,\n onDeleteThread,\n onViewMoreThreads,\n // Tool Executions\n isProcessing = false,\n registeredTools,\n toolRenderers,\n mcpToolRenderer,\n fallbackToolRenderer,\n onApproveToolExecution,\n onRejectToolExecution,\n // Follow-up Questions\n showFollowUps = true,\n followUpClassName,\n followUpButtonClassName,\n // Citations/Sources\n citations,\n // Custom rendering\n messageView,\n renderMessage,\n wrapMessage,\n renderInput,\n renderHeader,\n // Avatar grouping\n groupConsecutiveMessages = false,\n // Styling\n className,\n classNames = {},\n // Thread management for compound components\n onNewChat,\n threads,\n currentThreadId,\n onSwitchThread,\n isThreadBusy,\n // Branching\n getBranchInfo,\n onSwitchBranch,\n onEditMessage,\n}: ChatProps) {\n // Merge avatar props with defaults (so user can pass partial config)\n const userAvatar = { fallback: \"U\", ...userAvatarProp };\n const assistantAvatar = { fallback: \"AI\", ...assistantAvatarProp };\n\n const [input, setInput] = useState(\"\");\n const [pendingAttachments, setPendingAttachments] = useState<\n PendingAttachment[]\n >([]);\n const [isDragging, setIsDragging] = useState(false);\n const [isDismissed, setIsDismissed] = useState(false);\n const [displayedError, setDisplayedError] = useState<Error | null>(null);\n\n // Track error changes: new error → show it; error clears → keep displayedError for exit animation\n React.useEffect(() => {\n if (error) {\n setDisplayedError(error);\n setIsDismissed(false);\n }\n }, [error]);\n\n // Banner is visible when: there's an error prop AND not dismissed\n const showErrorBanner = !!error && !isDismissed;\n const fileInputRef = useRef<HTMLInputElement>(null);\n const fileInputId = useId(); // Unique ID for this Chat instance's file input\n\n // Check if file type is allowed\n const isFileTypeAllowed = useCallback(\n (file: File): boolean => {\n for (const type of allowedFileTypes) {\n if (type.endsWith(\"/*\")) {\n const category = type.slice(0, -2);\n if (file.type.startsWith(category + \"/\")) return true;\n } else if (file.type === type) {\n return true;\n }\n }\n return false;\n },\n [allowedFileTypes],\n );\n\n // Handle file selection\n const handleFileSelect = useCallback(\n async (files: FileList | null) => {\n if (!files || !attachmentsEnabled) return;\n\n for (const file of Array.from(files)) {\n // Validate file size\n if (file.size > maxFileSize) {\n const sizeMB = (maxFileSize / (1024 * 1024)).toFixed(0);\n console.warn(`File ${file.name} exceeds ${sizeMB}MB limit`);\n continue;\n }\n\n // Validate file type\n if (!isFileTypeAllowed(file)) {\n console.warn(`File type ${file.type} is not allowed`);\n continue;\n }\n\n const id = generateAttachmentId();\n const previewUrl = URL.createObjectURL(file);\n\n // Add as processing\n setPendingAttachments((prev) => [\n ...prev,\n {\n id,\n file,\n previewUrl,\n attachment: {\n type: getAttachmentType(file.type),\n data: \"\",\n mimeType: file.type,\n filename: file.name,\n },\n status: \"processing\",\n },\n ]);\n\n // Process attachment (cloud upload or base64 conversion)\n try {\n let attachment: {\n type: \"image\" | \"file\" | \"audio\" | \"video\";\n data?: string;\n url?: string;\n mimeType: string;\n filename?: string;\n };\n\n // Resolve upload handler: upload prop > deprecated processAttachment > base64 fallback\n const uploader = uploadProp ?? deprecatedProcessAttachment;\n\n if (typeof uploader === \"function\") {\n // Function — full custom handler\n attachment = await uploader(file);\n } else if (uploader) {\n // String or object — server upload endpoint\n const config =\n typeof uploader === \"string\" ? { url: uploader } : uploader;\n const extraHeaders =\n typeof config.headers === \"function\"\n ? config.headers()\n : config.headers;\n const extraBody =\n typeof config.body === \"function\" ? config.body() : config.body;\n const data = await fileToBase64(file);\n const res = await fetch(config.url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", ...extraHeaders },\n body: JSON.stringify({\n data,\n mimeType: file.type,\n filename: file.name,\n ...extraBody,\n }),\n });\n if (!res.ok) throw new Error(`Upload failed: ${res.status}`);\n const result = await res.json();\n const url = result.url ?? result.data?.url;\n if (!url) throw new Error(\"Upload returned no URL\");\n attachment = {\n type: getAttachmentType(file.type),\n url,\n mimeType: file.type,\n filename: file.name,\n };\n } else {\n // Default: convert to base64\n const data = await fileToBase64(file);\n attachment = {\n type: getAttachmentType(file.type),\n data,\n mimeType: file.type,\n filename: file.name,\n };\n }\n\n setPendingAttachments((prev) =>\n prev.map((att) =>\n att.id === id\n ? { ...att, status: \"ready\" as const, attachment }\n : att,\n ),\n );\n } catch (error) {\n setPendingAttachments((prev) =>\n prev.map((att) =>\n att.id === id\n ? {\n ...att,\n status: \"error\" as const,\n error: \"Failed to process file\",\n }\n : att,\n ),\n );\n }\n }\n },\n [\n attachmentsEnabled,\n maxFileSize,\n isFileTypeAllowed,\n uploadProp,\n deprecatedProcessAttachment,\n ],\n );\n\n // Handle file input change\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n handleFileSelect(e.target.files);\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n },\n [handleFileSelect],\n );\n\n // Remove pending attachment\n const removePendingAttachment = useCallback((id: string) => {\n setPendingAttachments((prev) => {\n const att = prev.find((a) => a.id === id);\n if (att) {\n URL.revokeObjectURL(att.previewUrl);\n }\n return prev.filter((a) => a.id !== id);\n });\n }, []);\n\n // Drag and drop handlers\n const handleDragOver = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (attachmentsEnabled) {\n setIsDragging(true);\n }\n },\n [attachmentsEnabled],\n );\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n }, []);\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n if (attachmentsEnabled) {\n handleFileSelect(e.dataTransfer.files);\n }\n },\n [attachmentsEnabled, handleFileSelect],\n );\n\n const handleSubmit = useCallback(() => {\n const hasContent = input.trim();\n const hasAttachments = pendingAttachments.some(\n (att) => att.status === \"ready\",\n );\n\n if ((!hasContent && !hasAttachments) || isLoading) return;\n\n // Get ready attachments\n const attachments = pendingAttachments\n .filter((att) => att.status === \"ready\")\n .map((att) => att.attachment);\n\n onSendMessage?.(input, attachments.length > 0 ? attachments : undefined);\n\n // Cleanup\n pendingAttachments.forEach((att) => URL.revokeObjectURL(att.previewUrl));\n setPendingAttachments([]);\n setInput(\"\");\n }, [input, isLoading, onSendMessage, pendingAttachments]);\n\n const handleSuggestionClick = useCallback(\n (suggestion: string) => {\n if (onSuggestionClick) {\n onSuggestionClick(suggestion);\n } else {\n onSendMessage?.(suggestion);\n }\n },\n [onSuggestionClick, onSendMessage],\n );\n\n // Compute accept string from allowed types\n const acceptString = allowedFileTypes.join(\",\");\n\n // Determine view state\n const view = messages.length === 0 ? \"home\" : \"chat\";\n\n // Check if user provided custom compound components\n const hasCustomHome = hasCompoundChild(children, Home, HomeView);\n const hasCustomChatView = hasCompoundChild(children, ChatView);\n const hasCustomLayout = hasCustomHome || hasCustomChatView;\n\n // Extract root-level Header/Footer (shown in both views)\n const rootHeader = findCompoundChild(children, Header);\n const rootFooter = findCompoundChild(children, Footer);\n\n // Get view-specific children\n const viewChildren = filterCompoundChildren(\n children,\n HomeView,\n Home,\n ChatView,\n );\n\n // Behavior children: non-layout compound types (MessageActions registrars, custom hook components)\n // These always mount so their useLayoutEffect registrations run regardless of view state.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const layoutTypes: any[] = [HomeView, Home, ChatView, Header, Footer];\n const behaviorChildren = React.Children.toArray(children).filter(\n (child) =>\n React.isValidElement(child) &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n !layoutTypes.includes(child.type as any),\n ) as React.ReactElement[];\n\n // Check if ChatView has no children or only Header/Footer children (should render default)\n const chatViewElement = findCompoundChild(children, ChatView);\n const chatViewNeedsDefault =\n chatViewElement &&\n (!chatViewElement.props.children ||\n chatViewHasOnlyLayoutChildren(chatViewElement));\n\n // Determine if we should show the default welcome screen\n const showDefaultWelcome =\n view === \"home\" && !hasCustomHome && welcome !== false;\n\n // Get welcome config (could be object or undefined/true)\n const welcomeConfig = typeof welcome === \"object\" ? welcome : undefined;\n\n // Stable send function reference\n const send = useCallback(\n (message: string, attachments?: MessageAttachment[]) => {\n onSendMessage?.(message, attachments);\n },\n [onSendMessage],\n );\n\n // Context value for compound components (memoized to prevent unnecessary re-renders)\n const contextValue: CopilotChatInternalContext = React.useMemo(\n () => ({\n view,\n send,\n isLoading,\n onStop,\n attachmentsEnabled,\n placeholder,\n // Messages for Chat.MessageList primitive\n messages,\n registeredTools,\n // Thread management - passed from connected-chat\n onNewChat,\n threads,\n currentThreadId,\n onSwitchThread,\n onDeleteThread,\n isThreadBusy,\n }),\n [\n view,\n send,\n isLoading,\n onStop,\n attachmentsEnabled,\n placeholder,\n messages,\n registeredTools,\n onNewChat,\n threads,\n currentThreadId,\n onSwitchThread,\n onDeleteThread,\n isThreadBusy,\n ],\n );\n\n return (\n <MessageActionsProvider>\n <CopilotChatContext.Provider value={contextValue}>\n <div\n className={cn(\n \"flex h-full flex-col bg-background relative\",\n className,\n classNames.root,\n )}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n {/* Drag overlay — only for built-in input; custom renderInput handles its own */}\n {isDragging && !renderInput && (\n <div className=\"csdk-dropzone-overlay absolute inset-0 z-50 bg-primary/10 border-2 border-dashed border-primary flex items-center justify-center\">\n <div className=\"text-primary font-medium text-lg\">\n Drop files here\n </div>\n </div>\n )}\n {/* Built-in Header (from showHeader prop) */}\n {showHeader &&\n (renderHeader ? (\n renderHeader()\n ) : (\n <ChatHeader\n logo={header?.logo ?? logo}\n name={header?.name ?? name}\n title={title}\n threadPicker={threadPicker}\n onClose={header?.onClose ?? onClose}\n className={classNames.header}\n />\n ))}\n\n {/* Root-level custom Header (shows in both views) */}\n {rootHeader}\n\n {/* Behavior children — always mounted (MessageActions registrars, hook components) */}\n {behaviorChildren.length > 0 && behaviorChildren}\n\n {/* Custom compound children - view components self-filter based on current view */}\n {hasCustomLayout && viewChildren}\n\n {showDefaultWelcome ? (\n /* Default Welcome Screen (centered input) */\n <ChatWelcome\n config={welcomeConfig}\n suggestions={suggestions}\n recentThreads={recentThreads}\n onSendMessage={(msg, attachments) =>\n onSendMessage?.(msg, attachments)\n }\n onSelectThread={onSelectThread}\n onDeleteThread={onDeleteThread}\n onViewMoreThreads={onViewMoreThreads}\n isLoading={isLoading}\n onStop={onStop}\n placeholder={placeholder}\n attachmentsEnabled={attachmentsEnabled}\n attachmentsDisabledTooltip={attachmentsDisabledTooltip}\n maxFileSize={maxFileSize}\n allowedFileTypes={allowedFileTypes}\n processAttachment={\n typeof uploadProp === \"function\"\n ? uploadProp\n : deprecatedProcessAttachment\n }\n />\n ) : null}\n\n {/* Normal Chat UI (messages + input at bottom) - show when there are messages */}\n {/* Renders when: view is chat AND (no explicit ChatView OR ChatView needs default content) */}\n {view === \"chat\" && (!hasCustomChatView || chatViewNeedsDefault) && (\n <>\n {/* Messages wrapper - relative for scroll button positioning */}\n <div className=\"flex-1 min-h-0 flex flex-col\">\n <ChatContainerRoot\n className={cn(\"flex-1 relative\", classNames.container)}\n >\n <ChatContainerContent\n className={cn(\"gap-4 p-4\", classNames.messageList)}\n >\n {/* Welcome message */}\n {messages.length === 0 && (\n <div className=\"py-8 text-center text-muted-foreground\">\n {welcomeMessage ||\n \"Send a message to start the conversation\"}\n </div>\n )}\n\n {/* Messages */}\n {(() => {\n const messageElements = messages.map((message, index) => {\n const isLastMessage = index === messages.length - 1;\n\n const GROUP_THRESHOLD_MS = 5 * 60 * 1000;\n const shouldHideAvatar = (() => {\n if (!groupConsecutiveMessages || index === 0)\n return false;\n let prevIdx = index - 1;\n while (prevIdx >= 0) {\n const prev = messages[prevIdx];\n const isToolMsg = prev.role === \"tool\";\n const isInvisibleSystem =\n prev.role === \"system\" &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (prev.metadata as Record<string, unknown>)\n ?.type !== \"compaction-marker\";\n if (!isToolMsg && !isInvisibleSystem) break;\n prevIdx--;\n }\n if (prevIdx < 0) return false;\n const prevVisible = messages[prevIdx];\n if (prevVisible.role !== message.role) return false;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const curTs = (message as any).timestamp as\n | number\n | undefined;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const prevTs = (prevVisible as any).timestamp as\n | number\n | undefined;\n if (\n curTs &&\n prevTs &&\n curTs - prevTs > GROUP_THRESHOLD_MS\n )\n return false;\n return true;\n })();\n\n const isEmptyAssistant =\n message.role === \"assistant\" &&\n !message.content?.trim();\n\n // Check if message has tool_calls or toolExecutions\n const hasToolCalls =\n message.tool_calls && message.tool_calls.length > 0;\n const hasToolExecutions =\n message.toolExecutions &&\n message.toolExecutions.length > 0;\n\n // Check if this message has pending tool approvals\n const hasPendingApprovals =\n message.toolExecutions?.some(\n (exec) => exec.approvalStatus === \"required\",\n );\n\n // Hide empty assistant messages that aren't loading and have no content to show\n if (isEmptyAssistant) {\n const shouldShowMessage =\n hasToolCalls ||\n hasToolExecutions ||\n hasPendingApprovals ||\n (isLastMessage && (isLoading || isProcessing));\n\n if (!shouldShowMessage) {\n return null;\n }\n // Otherwise, continue to render via DefaultMessage\n }\n\n // Check for saved executions in metadata (historical)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const savedExecutions = (message as any).metadata\n ?.toolExecutions as ToolExecutionData[] | undefined;\n const messageToolExecutions =\n message.toolExecutions || savedExecutions;\n\n const messageWithExecutions = messageToolExecutions\n ? {\n ...message,\n toolExecutions: messageToolExecutions,\n }\n : message;\n\n // Handle follow-up click - use onSendMessage if available\n const handleFollowUpClick = (question: string) => {\n if (onSuggestionClick) {\n onSuggestionClick(question);\n } else {\n onSendMessage?.(question);\n }\n };\n\n if (renderMessage) {\n return (\n <React.Fragment key={message.id}>\n {renderMessage(messageWithExecutions, index)}\n </React.Fragment>\n );\n }\n\n const defaultMsg = (\n <DefaultMessage\n key={message.id}\n message={messageWithExecutions}\n userAvatar={\n shouldHideAvatar && message.role === \"user\"\n ? { ...userAvatar, className: \"invisible\" }\n : userAvatar\n }\n assistantAvatar={\n shouldHideAvatar && message.role === \"assistant\"\n ? { ...assistantAvatar, className: \"invisible\" }\n : assistantAvatar\n }\n showUserAvatar={showUserAvatar}\n userMessageClassName={classNames.userMessage}\n assistantMessageClassName={\n classNames.assistantMessage\n }\n size={fontSize}\n isLastMessage={isLastMessage}\n isLoading={isLoading}\n isProcessing={isProcessing}\n loaderVariant={loaderVariant}\n registeredTools={registeredTools}\n toolRenderers={toolRenderers}\n mcpToolRenderer={mcpToolRenderer}\n fallbackToolRenderer={fallbackToolRenderer}\n onApproveToolExecution={onApproveToolExecution}\n onRejectToolExecution={onRejectToolExecution}\n showFollowUps={showFollowUps}\n onFollowUpClick={handleFollowUpClick}\n followUpClassName={followUpClassName}\n followUpButtonClassName={followUpButtonClassName}\n citations={\n citations === false\n ? { enabled: false }\n : citations\n }\n branchInfo={\n message.role === \"user\"\n ? (getBranchInfo?.(message.id) ?? null)\n : null\n }\n onSwitchBranch={onSwitchBranch}\n onEditMessage={onEditMessage}\n />\n );\n\n return wrapMessage ? (\n <React.Fragment key={message.id}>\n {wrapMessage(\n defaultMsg,\n messageWithExecutions,\n index,\n )}\n </React.Fragment>\n ) : (\n defaultMsg\n );\n });\n return messageView?.children\n ? messageView.children({ messages, messageElements })\n : messageElements;\n })()}\n\n {/* Loading indicator for non-streaming - when last message is user and no assistant message yet */}\n {isLoading &&\n !isProcessing &&\n messages.length > 0 &&\n messages[messages.length - 1]?.role === \"user\" && (\n <DefaultMessage\n message={{\n id: \"loading-placeholder\",\n role: \"assistant\",\n content: \"\",\n }}\n userAvatar={userAvatar}\n assistantAvatar={assistantAvatar}\n showUserAvatar={false}\n size={fontSize}\n isLastMessage={true}\n isLoading={true}\n isProcessing={false}\n loaderVariant={loaderVariant}\n />\n )}\n\n <ChatContainerScrollAnchor />\n </ChatContainerContent>\n\n {/* Scroll to bottom button - inside ChatContainerRoot for context, outside ChatContainerContent so it doesn't scroll */}\n <div className=\"csdk-scroll-btn-layer absolute inset-0 pointer-events-none z-10 flex items-end justify-end p-4\">\n <ScrollButton className=\"shadow-md pointer-events-auto\" />\n </div>\n </ChatContainerRoot>\n </div>\n\n {/* Suggestions */}\n {suggestions.length > 0 && !isLoading && (\n <Suggestions\n suggestions={suggestions}\n onSuggestionClick={handleSuggestionClick}\n className={classNames.suggestions}\n />\n )}\n\n {/* Error banner — always in DOM while displayedError exists, animated via max-height/opacity */}\n {displayedError && (\n <div\n className={cn(\n \"mx-2 mb-1 overflow-hidden transition-all duration-200 ease-in-out\",\n showErrorBanner\n ? \"max-h-20 opacity-100\"\n : \"max-h-0 opacity-0 mb-0\",\n )}\n onTransitionEnd={() => {\n // Clean up displayedError after exit animation finishes\n if (!showErrorBanner) setDisplayedError(null);\n }}\n >\n <div className=\"flex items-start gap-2 rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-xs text-destructive\">\n <svg\n className=\"mt-0.5 h-3.5 w-3.5 flex-shrink-0\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 9v2m0 4h.01M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\"\n />\n </svg>\n <span className=\"flex-1 leading-relaxed\">\n {displayedError.message}\n </span>\n <button\n type=\"button\"\n onClick={() => setIsDismissed(true)}\n className=\"flex-shrink-0 opacity-60 hover:opacity-100\"\n aria-label=\"Dismiss error\"\n >\n <svg\n className=\"h-3 w-3\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n </div>\n )}\n\n {/* Input */}\n {renderInput ? (\n renderInput()\n ) : (\n <div className={cn(\"p-2 pt-0\", classNames.input)}>\n {/* Pending Attachments Preview */}\n {pendingAttachments.length > 0 && (\n <div className=\"flex flex-wrap gap-2 p-2 mb-2 bg-muted/30 rounded-lg\">\n {pendingAttachments.map((att) => (\n <div key={att.id} className=\"relative group\">\n {att.attachment.type === \"image\" ? (\n <img\n src={att.previewUrl}\n alt={att.file.name}\n className=\"w-16 h-16 object-cover rounded-lg border\"\n />\n ) : (\n <div className=\"w-16 h-16 bg-muted rounded-lg border flex flex-col items-center justify-center p-1\">\n <svg\n className=\"w-6 h-6 text-muted-foreground\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\n />\n </svg>\n <span className=\"text-[10px] text-muted-foreground truncate w-full text-center mt-1\">\n {att.file.name.length > 10\n ? att.file.name.slice(0, 8) + \"...\"\n : att.file.name}\n </span>\n </div>\n )}\n {/* Loading overlay */}\n {att.status === \"processing\" && (\n <div className=\"csdk-attachment-loading absolute inset-0 bg-background/80 rounded-lg flex items-center justify-center\">\n <Loader variant=\"dots\" size=\"sm\" />\n </div>\n )}\n {/* Error overlay */}\n {att.status === \"error\" && (\n <div className=\"csdk-attachment-error absolute inset-0 bg-destructive/20 rounded-lg flex items-center justify-center\">\n <span className=\"text-destructive text-xs\">\n Error\n </span>\n </div>\n )}\n {/* Remove button */}\n <button\n onClick={() => removePendingAttachment(att.id)}\n className=\"absolute -top-1.5 -right-1.5 bg-destructive text-destructive-foreground rounded-full p-0.5 opacity-0 group-hover:opacity-100 transition-opacity\"\n type=\"button\"\n >\n <XIcon className=\"w-3 h-3\" />\n </button>\n </div>\n ))}\n </div>\n )}\n\n <PromptInput\n value={input}\n onValueChange={setInput}\n isLoading={isLoading}\n onSubmit={handleSubmit}\n className=\"\"\n >\n <PromptInputTextarea placeholder={placeholder} />\n <PromptInputActions className=\"flex justify-between\">\n <div>\n <PromptInputAction\n tooltip={\n attachmentsEnabled\n ? \"Attach files\"\n : attachmentsDisabledTooltip\n }\n >\n <label\n htmlFor={fileInputId}\n className={cn(\n \"csdk-button-attach flex h-8 w-8 items-center justify-center rounded-2xl\",\n attachmentsEnabled\n ? \"hover:bg-secondary-foreground/10 cursor-pointer\"\n : \"opacity-50 cursor-not-allowed\",\n )}\n >\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n accept={acceptString}\n onChange={handleInputChange}\n className=\"hidden\"\n id={fileInputId}\n disabled={!attachmentsEnabled}\n />\n <PlusIcon className=\"text-primary size-5\" />\n </label>\n </PromptInputAction>\n </div>\n <PromptInputAction tooltip={isLoading ? \"Stop\" : \"Send\"}>\n {isLoading ? (\n <Button\n size=\"sm\"\n variant=\"destructive\"\n className=\"csdk-button-stop rounded-full size-9\"\n onClick={onStop}\n >\n <StopIcon className=\"h-4 w-4\" />\n </Button>\n ) : (\n <Button\n size=\"sm\"\n className=\"csdk-button-send rounded-full size-9\"\n onClick={handleSubmit}\n disabled={\n !input.trim() &&\n !pendingAttachments.some(\n (att) => att.status === \"ready\",\n )\n }\n >\n <ArrowUpIcon className=\"h-4 w-4\" />\n </Button>\n )}\n </PromptInputAction>\n </PromptInputActions>\n </PromptInput>\n </div>\n )}\n </>\n )}\n\n {/* Root-level custom Footer (shows in both views) */}\n {rootFooter}\n </div>\n </CopilotChatContext.Provider>\n </MessageActionsProvider>\n );\n}\n\n// ============================================================================\n// Attach Compound Components & Export\n// ============================================================================\n\n/**\n * Chat component with compound component pattern.\n *\n * @example Default usage (backward compatible)\n * ```tsx\n * <Chat messages={messages} onSendMessage={send} />\n * ```\n *\n * @example Custom home screen with compound components\n * ```tsx\n * <Chat messages={messages} onSendMessage={send}>\n * <Chat.Home className=\"items-center gap-6 p-8\">\n * <h1>Welcome!</h1>\n * <Chat.Input placeholder=\"Ask anything...\" />\n * <Chat.Suggestions items={[\"Help\", \"Pricing\"]} />\n * </Chat.Home>\n * </Chat>\n * ```\n *\n * @example Full layout composition (new pattern)\n * ```tsx\n * <Chat.Root messages={messages} onSendMessage={send}>\n * <Chat.Header>Custom Header</Chat.Header>\n * <Chat.HomeView className=\"gap-6 p-8\">\n * <h1>Welcome!</h1>\n * <Chat.Input />\n * </Chat.HomeView>\n * <Chat.ChatView />\n * <Chat.Footer>Custom Footer</Chat.Footer>\n * </Chat.Root>\n * ```\n *\n * @example View-specific header with navigation (new pattern)\n * ```tsx\n * <Chat.Root messages={messages} onSendMessage={send}>\n * <Chat.HomeView>\n * <h1>Welcome!</h1>\n * </Chat.HomeView>\n * <Chat.ChatView>\n * <Chat.Header className=\"flex items-center justify-between p-3 border-b\">\n * <Chat.BackButton />\n * <Chat.ThreadPicker />\n * </Chat.Header>\n * </Chat.ChatView>\n * </Chat.Root>\n * ```\n */\nexport const Chat = Object.assign(ChatComponent, {\n Root: ChatComponent, // Alias for layout composition pattern\n Home, // Backward compat alias\n HomeView, // New name\n ChatView,\n Header,\n Footer,\n Input,\n Suggestions: SuggestionsCompound,\n BackButton, // Navigation: start new chat\n ThreadPicker: ThreadPickerCompound, // Thread switching\n // Message actions compound components\n MessageActions,\n CopyAction,\n EditAction,\n FeedbackAction,\n Action: MessageAction,\n});\n\n// Re-export compound components for direct access and TypeScript declarations\nexport {\n HomeView,\n Home,\n ChatView,\n Header,\n Footer,\n Input as ChatInput,\n SuggestionsCompound as ChatSuggestions,\n BackButton,\n ThreadPickerCompound as ChatThreadPicker,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useCopilotChatContext } from \"./chat\";\nimport { DefaultMessage } from \"./default-message\";\nimport type { ChatMessage } from \"./types\";\n\nexport interface MessageListProps {\n /**\n * Render function called for each message.\n * Return your own component or fall back to <Chat.DefaultMessage />.\n *\n * @example\n * ```tsx\n * <Chat.MessageList>\n * {(message) =>\n * message.metadata?.type === \"plan\"\n * ? <PlanCard key={message.id} data={message.metadata} />\n * : <Chat.DefaultMessage key={message.id} message={message} />\n * }\n * </Chat.MessageList>\n * ```\n */\n children?: (message: ChatMessage, index: number) => React.ReactNode;\n className?: string;\n}\n\n/**\n * Chat.MessageList — renders the message list using a render-prop pattern.\n * Must be used inside <CopilotChat>.\n *\n * If no children are provided, renders all messages with the default SDK layout.\n */\nexport function MessageList({ children, className }: MessageListProps) {\n const { messages, registeredTools } = useCopilotChatContext();\n\n return (\n <div className={className}>\n {messages.map((message, index) => {\n if (children) {\n return (\n <React.Fragment key={message.id}>\n {children(message, index)}\n </React.Fragment>\n );\n }\n return (\n <DefaultMessage\n key={message.id}\n message={message}\n userAvatar={{ fallback: \"U\" }}\n assistantAvatar={{ fallback: \"AI\" }}\n registeredTools={registeredTools}\n isLastMessage={index === messages.length - 1}\n />\n );\n })}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Message, MessageAvatar } from \"../../ui/message\";\nimport { ToolSteps, type ToolStepData } from \"../../ui/tool-steps\";\nimport {\n PermissionConfirmation,\n type PermissionLevel,\n} from \"../../ui/permission-confirmation\";\nimport { MCPUIFrameList } from \"../../ui/mcp-ui-frame\";\nimport type { MCPUIIntent } from \"../../../../mcp/ui/types\";\nimport type { ToolExecutionData } from \"../tools/tool-execution-list\";\n\ninterface ToolExecutionMessageProps {\n executions: ToolExecutionData[];\n assistantAvatar?: { src?: string; fallback?: string };\n /** Called when user approves with optional extraData from custom UI */\n onApprove?: (\n executionId: string,\n extraData?: Record<string, unknown>,\n permissionLevel?: PermissionLevel,\n ) => void;\n onReject?: (\n executionId: string,\n reason?: string,\n permissionLevel?: PermissionLevel,\n ) => void;\n /** Custom tool renderers that can handle approval UI */\n toolRenderers?: Record<\n string,\n React.ComponentType<{\n execution: ToolExecutionData;\n approval?: {\n onApprove: (extraData?: Record<string, unknown>) => void;\n onReject: (reason?: string) => void;\n message?: string;\n };\n }>\n >;\n /**\n * Callback when an MCP-UI intent is received from an interactive UI component.\n * Use this with useMCPUIIntents hook to handle tool calls, actions, etc.\n */\n onUIIntent?: (\n intent: MCPUIIntent,\n context: { toolName: string; toolCallId: string },\n ) => void;\n className?: string;\n}\n\n/**\n * Standalone tool execution message shown during agentic loop\n * Displays tool calls with status, progress, and approval UI\n */\nexport function ToolExecutionMessage({\n executions,\n assistantAvatar = { fallback: \"AI\" },\n onApprove,\n onReject,\n toolRenderers,\n onUIIntent,\n className,\n}: ToolExecutionMessageProps) {\n if (!executions || executions.length === 0) return null;\n\n // Separate pending approvals from other executions\n const pendingApprovals = executions.filter(\n (exec) => exec.approvalStatus === \"required\",\n );\n const otherExecutions = executions.filter(\n (exec) => exec.approvalStatus !== \"required\",\n );\n\n // Convert to ToolStepData format\n const toolSteps: ToolStepData[] = otherExecutions.map((exec) => ({\n id: exec.id,\n name: exec.name,\n args: exec.args,\n status: exec.status,\n result: exec.result,\n error: exec.error,\n }));\n\n // Check if any tool is currently executing\n const hasExecuting = executions.some((exec) => exec.status === \"executing\");\n const hasCompleted = executions.some((exec) => exec.status === \"completed\");\n const allCompleted = executions.every(\n (exec) => exec.status === \"completed\" || exec.status === \"error\",\n );\n\n return (\n <Message className={cn(\"flex gap-2\", className)}>\n <MessageAvatar\n src={assistantAvatar.src || \"\"}\n alt=\"Assistant\"\n fallback={assistantAvatar.fallback}\n className=\"bg-primary text-primary-foreground\"\n />\n <div className=\"flex-1 min-w-0 max-w-[85%]\">\n {/* Header with status */}\n <div className=\"flex items-center gap-2 mb-2\">\n <div className=\"flex items-center gap-1.5\">\n {hasExecuting && (\n <svg\n className=\"size-3.5 animate-spin text-primary\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n )}\n {!hasExecuting && allCompleted && (\n <svg\n className=\"size-3.5 text-green-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n )}\n <span className=\"text-xs font-medium text-muted-foreground\">\n {hasExecuting\n ? \"Running tools...\"\n : allCompleted\n ? `${executions.length} tool${executions.length > 1 ? \"s\" : \"\"} completed`\n : \"Tools\"}\n </span>\n </div>\n </div>\n\n {/* Tool Approval Confirmations */}\n {pendingApprovals.length > 0 && (\n <div className=\"mb-2 space-y-2\">\n {pendingApprovals.map((tool) => {\n // Check if there's a custom renderer for this tool\n const CustomRenderer = toolRenderers?.[tool.name];\n\n if (CustomRenderer) {\n // Use custom renderer with approval callbacks\n return (\n <CustomRenderer\n key={tool.id}\n execution={tool}\n approval={{\n onApprove: (extraData) => onApprove?.(tool.id, extraData),\n onReject: (reason) => onReject?.(tool.id, reason),\n message: tool.approvalMessage,\n }}\n />\n );\n }\n\n // Default: use PermissionConfirmation\n return (\n <PermissionConfirmation\n key={tool.id}\n state=\"pending\"\n toolName={tool.name}\n message={\n tool.approvalMessage ||\n `This tool wants to execute. Do you approve?`\n }\n onApprove={(permissionLevel) =>\n onApprove?.(tool.id, undefined, permissionLevel)\n }\n onReject={(permissionLevel) =>\n onReject?.(tool.id, undefined, permissionLevel)\n }\n />\n );\n })}\n </div>\n )}\n\n {/* Tool Steps */}\n {toolSteps.length > 0 && (\n <div className=\"rounded-lg border bg-card px-3 py-2.5 shadow-sm\">\n <ToolSteps steps={toolSteps} />\n </div>\n )}\n\n {/* MCP-UI Resources - render interactive UI components from tool results */}\n {otherExecutions.map((exec) => {\n const uiResources = exec.result?._uiResources;\n if (!uiResources || uiResources.length === 0) return null;\n\n return (\n <MCPUIFrameList\n key={`${exec.id}-ui`}\n resources={uiResources}\n onIntent={(intent) =>\n onUIIntent?.(intent, {\n toolName: exec.name,\n toolCallId: exec.id,\n })\n }\n className=\"mt-2\"\n />\n );\n })}\n </div>\n </Message>\n );\n}\n","\"use client\";\n\n/**\n * useInternalThreadManager - Internal hook for CopilotChat persistence\n *\n * Uses a reducer-based state machine with clear phases:\n * idle → awaiting_server_id → creating → active\n * active → switching → active\n * active → idle (new thread)\n *\n * Handles both server-managed sessions (threadId from response) and\n * local-only threads (no server storage) with the same flow.\n */\n\nimport { useCallback, useEffect, useReducer, useRef } from \"react\";\nimport { useCopilot, type UIMessage } from \"../../react\";\nimport {\n useThreadManager,\n type UseThreadManagerConfig,\n} from \"../../react/hooks/useThreadManager\";\nimport type {\n ThreadStorageAdapter,\n AsyncThreadStorageAdapter,\n} from \"../../thread/adapters\";\n\n// ── Config & Return types ────────────────────────────────────────────────────\n\nexport interface UseInternalThreadManagerConfig {\n adapter?: ThreadStorageAdapter | AsyncThreadStorageAdapter;\n saveDebounce?: number;\n autoRestoreLastThread?: boolean;\n onThreadChange?: (threadId: string | null) => void;\n enabled?: boolean;\n}\n\nexport interface UseInternalThreadManagerReturn {\n threadManager: ReturnType<typeof useThreadManager>;\n handleSwitchThread: (threadId: string) => Promise<void>;\n handleNewThread: () => Promise<void>;\n isBusy: boolean;\n}\n\n// ── State machine ────────────────────────────────────────────────────────────\n\ntype Phase =\n | \"idle\" // No thread, waiting for first message\n | \"awaiting_server_id\" // First response complete, waiting for sdkThreadId\n | \"creating\" // Creating local thread\n | \"active\" // Thread active, syncing messages\n | \"switching\" // Switching to a different thread\n | \"restoring\"; // Auto-restoring last thread on mount\n\ninterface ThreadSyncState {\n phase: Phase;\n threadId: string | null; // Active local thread ID\n lastSnapshot: string; // Last saved message snapshot\n initialized: boolean; // Whether initial restore has run\n}\n\ntype ThreadAction =\n | { type: \"FIRST_RESPONSE_COMPLETE\" }\n | { type: \"SERVER_ID_RECEIVED\"; threadId: string }\n | { type: \"CREATE_WITH_LOCAL_ID\" }\n | { type: \"THREAD_CREATED\"; threadId: string; snapshot: string }\n | { type: \"MESSAGES_SAVED\"; snapshot: string }\n | { type: \"START_SWITCH\" }\n | { type: \"SWITCH_COMPLETE\"; threadId: string; snapshot: string }\n | { type: \"NEW_THREAD\" }\n | { type: \"RESTORE_START\" }\n | { type: \"RESTORE_COMPLETE\"; threadId: string; snapshot: string }\n | { type: \"SKIP_RESTORE\" };\n\nconst INITIAL_STATE: ThreadSyncState = {\n phase: \"idle\",\n threadId: null,\n lastSnapshot: \"\",\n initialized: false,\n};\n\nfunction threadReducer(\n state: ThreadSyncState,\n action: ThreadAction,\n): ThreadSyncState {\n switch (action.type) {\n case \"FIRST_RESPONSE_COMPLETE\":\n if (state.phase !== \"idle\") return state;\n // Mark initialized so auto-restore doesn't interfere when\n // createThread() later updates currentThread in the manager.\n return { ...state, phase: \"awaiting_server_id\", initialized: true };\n\n case \"SERVER_ID_RECEIVED\":\n if (state.phase !== \"awaiting_server_id\") return state;\n return { ...state, phase: \"creating\" };\n\n case \"CREATE_WITH_LOCAL_ID\":\n if (state.phase !== \"awaiting_server_id\") return state;\n return { ...state, phase: \"creating\" };\n\n case \"THREAD_CREATED\":\n return {\n ...state,\n phase: \"active\",\n threadId: action.threadId,\n lastSnapshot: action.snapshot,\n initialized: true,\n };\n\n case \"MESSAGES_SAVED\":\n if (state.phase !== \"active\") return state;\n return { ...state, lastSnapshot: action.snapshot };\n\n case \"START_SWITCH\":\n if (state.phase !== \"active\" && state.phase !== \"idle\") return state;\n return { ...state, phase: \"switching\" };\n\n case \"SWITCH_COMPLETE\":\n return {\n ...state,\n phase: \"active\",\n threadId: action.threadId,\n lastSnapshot: action.snapshot,\n };\n\n case \"NEW_THREAD\":\n return {\n ...INITIAL_STATE,\n initialized: true,\n };\n\n case \"RESTORE_START\":\n if (state.initialized) return state;\n if (state.phase === \"creating\" || state.phase === \"awaiting_server_id\")\n return state;\n return { ...state, phase: \"restoring\" };\n\n case \"RESTORE_COMPLETE\":\n return {\n ...state,\n phase: \"active\",\n threadId: action.threadId,\n lastSnapshot: action.snapshot,\n initialized: true,\n };\n\n case \"SKIP_RESTORE\":\n return { ...state, initialized: true };\n\n default:\n return state;\n }\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction getMessageSnapshot(msgs: UIMessage[]): string {\n return msgs\n .map((m) => {\n const preview = (m.content ?? \"\").slice(0, 20);\n return `${m.id}:${preview}:${m.content?.length ?? 0}`;\n })\n .join(\"|\");\n}\n\nfunction convertToCore(msgs: UIMessage[]) {\n return msgs.map((m) => ({\n id: m.id,\n role: m.role,\n content: m.content,\n created_at: m.createdAt,\n tool_calls: m.toolCalls,\n tool_call_id: m.toolCallId,\n parent_id: m.parentId,\n children_ids: m.childrenIds,\n metadata: {\n ...m.metadata,\n attachments: m.attachments,\n thinking: m.thinking,\n },\n }));\n}\n\nfunction coreToUI(m: any): UIMessage {\n return {\n id: m.id,\n role: m.role,\n content: m.content ?? \"\",\n createdAt: m.created_at ?? new Date(),\n toolCalls: m.tool_calls,\n toolCallId: m.tool_call_id,\n parentId: m.parent_id,\n childrenIds: m.children_ids,\n attachments: m.metadata?.attachments,\n thinking: m.metadata?.thinking as string | undefined,\n metadata: m.metadata,\n };\n}\n\n// ── Hook ─────────────────────────────────────────────────────────────────────\n\nexport function useInternalThreadManager(\n config: UseInternalThreadManagerConfig = {},\n): UseInternalThreadManagerReturn {\n const {\n adapter,\n saveDebounce = 1000,\n autoRestoreLastThread = true,\n onThreadChange,\n enabled = true,\n } = config;\n\n const [state, dispatch] = useReducer(threadReducer, INITIAL_STATE);\n const isLoadingRef = useRef(false);\n\n // Thread manager (handles localStorage / server adapter)\n const threadManager = useThreadManager({\n adapter,\n saveDebounce,\n autoRestoreLastThread,\n });\n const {\n currentThread,\n currentThreadId,\n createThread,\n switchThread,\n updateCurrentThread,\n clearCurrentThread,\n } = threadManager;\n\n // Copilot context\n const {\n messages,\n setMessages,\n status,\n isLoading,\n getAllMessages,\n switchBranch,\n threadId: sdkThreadId,\n setActiveThread,\n } = useCopilot();\n\n // ── Auto-restore on mount ──────────────────────────────────────────────\n\n useEffect(() => {\n if (!enabled || state.initialized || !currentThread) return;\n\n dispatch({ type: \"RESTORE_START\" });\n isLoadingRef.current = true;\n\n if (currentThread.messages && currentThread.messages.length > 0) {\n const uiMessages = currentThread.messages.map(coreToUI);\n const snapshot = getMessageSnapshot(uiMessages);\n setMessages(uiMessages);\n if (currentThread.activeLeafId) switchBranch(currentThread.activeLeafId);\n onThreadChange?.(currentThread.id);\n dispatch({\n type: \"RESTORE_COMPLETE\",\n threadId: currentThread.id,\n snapshot,\n });\n } else {\n onThreadChange?.(currentThread.id);\n dispatch({\n type: \"RESTORE_COMPLETE\",\n threadId: currentThread.id,\n snapshot: \"\",\n });\n }\n\n requestAnimationFrame(() => {\n isLoadingRef.current = false;\n });\n }, [\n enabled,\n currentThread,\n state.initialized,\n setMessages,\n switchBranch,\n onThreadChange,\n ]);\n\n // Mark initialized if no thread to restore\n useEffect(() => {\n if (!enabled) {\n dispatch({ type: \"SKIP_RESTORE\" });\n return;\n }\n // If autoRestore is off or no thread loaded after mount, skip\n if (!autoRestoreLastThread && !state.initialized) {\n dispatch({ type: \"SKIP_RESTORE\" });\n }\n }, [enabled, autoRestoreLastThread, state.initialized]);\n\n // ── Phase: idle → awaiting_server_id ───────────────────────────────────\n\n useEffect(() => {\n if (!enabled) return;\n if (state.phase !== \"idle\") return;\n if (isLoadingRef.current) return;\n if (status === \"streaming\" || status === \"submitted\") return;\n if (messages.length === 0) return;\n if (currentThreadId) return; // Already have a thread\n\n // First message response just completed\n dispatch({ type: \"FIRST_RESPONSE_COMPLETE\" });\n }, [enabled, state.phase, status, messages.length, currentThreadId]);\n\n // ── Phase: awaiting_server_id → creating ───────────────────────────────\n\n useEffect(() => {\n if (state.phase !== \"awaiting_server_id\") return;\n\n if (sdkThreadId) {\n // Server provided a threadId — use it\n dispatch({ type: \"SERVER_ID_RECEIVED\", threadId: sdkThreadId });\n } else {\n // No server ID available — create thread with a local ID.\n dispatch({ type: \"CREATE_WITH_LOCAL_ID\" });\n }\n }, [state.phase, sdkThreadId]);\n\n // ── Phase: creating → active ───────────────────────────────────────────\n\n useEffect(() => {\n if (state.phase !== \"creating\") return;\n\n const allUIMessages = getAllMessages();\n const coreMessages = convertToCore(\n allUIMessages.length > 0 ? allUIMessages : messages,\n );\n const activeLeafId = messages[messages.length - 1]?.id;\n const snapshot = getMessageSnapshot(messages);\n\n createThread({\n id: sdkThreadId ?? undefined,\n messages: coreMessages,\n activeLeafId,\n }).then((thread) => {\n dispatch({ type: \"THREAD_CREATED\", threadId: thread.id, snapshot });\n onThreadChange?.(thread.id);\n });\n }, [state.phase]); // eslint-disable-line react-hooks/exhaustive-deps\n\n // ── Phase: active — sync messages on change ────────────────────────────\n\n useEffect(() => {\n if (!enabled) return;\n if (state.phase !== \"active\") return;\n if (isLoadingRef.current) return;\n if (status === \"streaming\" || status === \"submitted\") return;\n if (messages.length === 0) return;\n\n const snapshot = getMessageSnapshot(messages);\n if (snapshot === state.lastSnapshot) return;\n\n // Verify we're saving to the right thread\n if (state.threadId && state.threadId !== currentThreadId) return;\n\n const allUIMessages = getAllMessages();\n const coreMessages = convertToCore(\n allUIMessages.length > 0 ? allUIMessages : messages,\n );\n const activeLeafId = messages[messages.length - 1]?.id;\n\n updateCurrentThread({ messages: coreMessages, activeLeafId });\n dispatch({ type: \"MESSAGES_SAVED\", snapshot });\n }, [\n enabled,\n state.phase,\n state.lastSnapshot,\n state.threadId,\n messages,\n status,\n currentThreadId,\n updateCurrentThread,\n getAllMessages,\n ]);\n\n // ── Switch thread ──────────────────────────────────────────────────────\n\n const handleSwitchThread = useCallback(\n async (threadId: string) => {\n dispatch({ type: \"START_SWITCH\" });\n isLoadingRef.current = true;\n\n const thread = await switchThread(threadId);\n if (thread?.messages) {\n const uiMessages = thread.messages.map(coreToUI);\n const snapshot = getMessageSnapshot(uiMessages);\n setMessages(uiMessages);\n if (thread.activeLeafId) switchBranch(thread.activeLeafId);\n onThreadChange?.(threadId);\n dispatch({ type: \"SWITCH_COMPLETE\", threadId, snapshot });\n } else {\n setMessages([]);\n onThreadChange?.(threadId);\n dispatch({ type: \"SWITCH_COMPLETE\", threadId, snapshot: \"\" });\n }\n\n requestAnimationFrame(() => {\n isLoadingRef.current = false;\n });\n },\n [switchThread, setMessages, switchBranch, onThreadChange],\n );\n\n // ── New thread ─────────────────────────────────────────────────────────\n\n const handleNewThread = useCallback(async () => {\n isLoadingRef.current = true;\n\n clearCurrentThread();\n setMessages([]);\n setActiveThread(null); // Clear SDK session so next message creates a new one\n onThreadChange?.(null);\n dispatch({ type: \"NEW_THREAD\" });\n\n requestAnimationFrame(() => {\n isLoadingRef.current = false;\n });\n }, [clearCurrentThread, setMessages, setActiveThread, onThreadChange]);\n\n // ── Return ─────────────────────────────────────────────────────────────\n\n const isBusy = isLoading || status === \"streaming\" || status === \"submitted\";\n\n return {\n threadManager,\n handleSwitchThread,\n handleNewThread,\n isBusy,\n };\n}\n","\"use client\";\n\nimport React, { useMemo } from \"react\";\nimport {\n useCopilot,\n type UIMessage,\n type ChatToolExecution,\n} from \"../../../react\";\nimport { Chat, type ChatProps } from \"./chat\";\nimport type { ToolExecutionData } from \"./tools/tool-execution-list\";\nimport { ThreadPicker } from \"../ui/thread-picker\";\nimport {\n useInternalThreadManager,\n type UseInternalThreadManagerConfig,\n} from \"../../hooks/useInternalThreadManager\";\nimport type {\n ThreadStorageAdapter,\n AsyncThreadStorageAdapter,\n} from \"../../../thread/adapters\";\nimport {\n createServerAdapter,\n createLocalStorageAdapter,\n} from \"../../../thread/adapters\";\n\n// ============================================\n// Persistence Configuration Types\n// ============================================\n\n/**\n * localStorage persistence (zero config)\n */\nexport interface LocalPersistenceConfig {\n type: \"local\";\n /** Custom localStorage key to isolate thread storage between copilot instances.\n * Default: \"copilot-sdk-store\" */\n localStorageKey?: string;\n /** Debounce delay for auto-save (ms). Default: 1000 */\n saveDebounce?: number;\n /** Whether to auto-restore the last active thread. Default: true */\n autoRestoreLastThread?: boolean;\n}\n\n/**\n * Server persistence (point to your own API routes)\n */\nexport interface ServerPersistenceConfig {\n type: \"server\";\n /**\n * Endpoint URL for your thread CRUD API\n * @example \"/api/threads\"\n */\n endpoint: string;\n /** Additional headers for requests (e.g., auth tokens) */\n headers?: Record<string, string>;\n /** Debounce delay for auto-save (ms). Default: 1000 */\n saveDebounce?: number;\n /** Whether to auto-restore the last active thread. Default: true */\n autoRestoreLastThread?: boolean;\n}\n\n/**\n * Cloud persistence (future - managed service)\n */\nexport interface CloudPersistenceConfig {\n type: \"cloud\";\n /** Copilot Cloud API key */\n apiKey: string;\n /** Custom endpoint for enterprise (optional) */\n endpoint?: string;\n}\n\n/**\n * Legacy persistence config (backward compatibility)\n */\nexport interface LegacyPersistenceConfig {\n /** Storage adapter (defaults to localStorage) */\n adapter?: ThreadStorageAdapter | AsyncThreadStorageAdapter;\n /** Debounce delay for auto-save (ms). Default: 1000 */\n saveDebounce?: number;\n /** Whether to auto-restore the last active thread on mount. Default: true */\n autoRestoreLastThread?: boolean;\n}\n\n/**\n * Persistence configuration for CopilotChat\n *\n * @example localStorage (zero config)\n * ```tsx\n * <CopilotChat persistence={true} />\n * // or explicitly:\n * <CopilotChat persistence={{ type: \"local\" }} />\n * ```\n *\n * @example Server persistence\n * ```tsx\n * <CopilotChat\n * persistence={{\n * type: \"server\",\n * threadsUrl: \"/api/threads\",\n * headers: { Authorization: `Bearer ${token}` },\n * }}\n * />\n * ```\n */\nexport type CopilotChatPersistenceConfig =\n | LocalPersistenceConfig\n | ServerPersistenceConfig\n | CloudPersistenceConfig\n | LegacyPersistenceConfig;\n\n/**\n * Extended classNames for CopilotChat including thread picker\n */\nexport interface CopilotChatClassNames {\n // Existing Chat classNames\n root?: string;\n header?: string;\n container?: string;\n messageList?: string;\n userMessage?: string;\n assistantMessage?: string;\n input?: string;\n suggestions?: string;\n footer?: string;\n // Thread picker classNames\n threadPicker?: string;\n threadPickerButton?: string;\n threadPickerDropdown?: string;\n threadPickerItem?: string;\n threadPickerNewButton?: string;\n}\n\n/**\n * Header configuration for CopilotChat\n */\nexport interface CopilotChatHeaderConfig {\n /** Logo image URL (default: YourGPT logo) */\n logo?: string;\n /** Copilot name (default: \"AI Copilot\") */\n name?: string;\n /** Called when close button is clicked */\n onClose?: () => void;\n}\n\n/**\n * Props for CopilotChat - auto-connects to CopilotProvider context\n * No need to pass messages, sendMessage, etc. - handled internally\n */\nexport type CopilotChatProps = Omit<\n ChatProps,\n | \"messages\"\n | \"onSendMessage\"\n | \"onStop\"\n | \"isLoading\"\n | \"isProcessing\"\n | \"onApproveToolExecution\"\n | \"onRejectToolExecution\"\n | \"processAttachment\"\n | \"classNames\"\n | \"header\"\n | \"threadPicker\"\n | \"recentThreads\"\n | \"onSelectThread\"\n | \"onViewMoreThreads\"\n> & {\n /**\n * Header configuration.\n * Providing this prop will automatically show the header.\n */\n header?: CopilotChatHeaderConfig;\n /**\n * Enable built-in persistence.\n * - `true`: Use localStorage with default settings\n * - `object`: Custom persistence config\n * - `undefined`: No persistence (default)\n */\n persistence?: boolean | CopilotChatPersistenceConfig;\n\n /**\n * Show thread picker in the header for switching conversations.\n * Requires `persistence` to be enabled.\n * @default false\n */\n showThreadPicker?: boolean;\n\n /**\n * Callback when the current thread changes.\n * Useful for syncing thread ID with URL or external state.\n */\n onThreadChange?: (threadId: string | null) => void;\n\n /**\n * Granular class names for sub-components including thread picker\n */\n classNames?: CopilotChatClassNames;\n\n /**\n * Allow inline editing of user messages.\n * @default false\n */\n allowEdit?: boolean;\n};\n\n/**\n * CopilotChat - Auto-connected chat component\n *\n * Automatically connects to CopilotProvider context.\n * No need to use hooks or pass messages - everything is handled internally.\n *\n * @example\n * ```tsx\n * import { CopilotProvider } from '../../react';\n * import { CopilotChat } from '@yourgpt/copilot-sdk-ui';\n *\n * function App() {\n * return (\n * <CopilotProvider runtimeUrl=\"/api/chat\">\n * <CopilotChat\n * title=\"AI Assistant\"\n * placeholder=\"Ask anything...\"\n * />\n * </CopilotProvider>\n * );\n * }\n * ```\n *\n * @example Generative UI with custom tool renderers\n * ```tsx\n * import { CopilotChat, type ToolRendererProps } from '@yourgpt/copilot-sdk-ui';\n *\n * function WeatherCard({ execution }: ToolRendererProps) {\n * if (execution.status !== 'completed') return <div>Loading...</div>;\n * return <div>{execution.result.city}: {execution.result.temperature}°</div>;\n * }\n *\n * <CopilotChat\n * toolRenderers={{\n * get_weather: WeatherCard,\n * }}\n * />\n * ```\n */\n/**\n * Parse persistence config into internal thread manager config\n */\nfunction parsePersistenceConfig(\n persistence: boolean | CopilotChatPersistenceConfig | undefined,\n onThreadChange?: (threadId: string | null) => void,\n): UseInternalThreadManagerConfig | undefined {\n // Not enabled\n if (!persistence) {\n return undefined;\n }\n\n // Boolean true = localStorage with defaults\n if (persistence === true) {\n return {\n onThreadChange,\n autoRestoreLastThread: true,\n };\n }\n\n // Type-based config\n if (\"type\" in persistence) {\n switch (persistence.type) {\n case \"local\":\n return {\n saveDebounce: persistence.saveDebounce,\n autoRestoreLastThread: persistence.autoRestoreLastThread ?? true,\n onThreadChange,\n };\n\n case \"server\":\n return {\n adapter: createServerAdapter({\n endpoint: persistence.endpoint,\n headers: persistence.headers,\n }),\n saveDebounce: persistence.saveDebounce,\n autoRestoreLastThread: persistence.autoRestoreLastThread ?? true,\n onThreadChange,\n };\n\n case \"cloud\":\n // Future: Cloud persistence not yet implemented\n console.warn(\n \"[Copilot SDK] Cloud persistence is not yet implemented. Falling back to localStorage.\",\n );\n return {\n onThreadChange,\n autoRestoreLastThread: true,\n };\n }\n }\n\n // Legacy config (has adapter property or other legacy fields)\n const legacyConfig = persistence as LegacyPersistenceConfig;\n return {\n adapter: legacyConfig.adapter,\n saveDebounce: legacyConfig.saveDebounce,\n autoRestoreLastThread: legacyConfig.autoRestoreLastThread ?? true,\n onThreadChange,\n };\n}\n\nfunction CopilotChatBase(\n props: CopilotChatProps & { children?: React.ReactNode },\n) {\n const {\n persistence,\n showThreadPicker = false,\n onThreadChange,\n classNames,\n header,\n children,\n allowEdit = false,\n ...chatProps\n } = props;\n\n // Create custom adapter once for localStorageKey (stable reference to avoid render loops)\n const localStorageKey =\n typeof persistence === \"object\" &&\n \"type\" in persistence &&\n persistence.type === \"local\"\n ? persistence.localStorageKey\n : undefined;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const customAdapter = useMemo(\n () =>\n localStorageKey\n ? createLocalStorageAdapter({ storageKey: localStorageKey })\n : undefined,\n [localStorageKey],\n );\n\n // Parse persistence config\n const persistenceConfig = parsePersistenceConfig(persistence, onThreadChange);\n // Inject memoized adapter if localStorageKey was provided\n if (persistenceConfig && customAdapter) {\n persistenceConfig.adapter = customAdapter;\n }\n\n // Use internal thread manager when persistence is enabled.\n // When persistence is disabled, pass enabled:false so no sync/restore effects\n // fire — prevents the shared singleton from being touched by a no-persistence instance\n // and avoids stale async createThread calls overwriting messages on navigation.\n const threadManagerResult = useInternalThreadManager(\n persistenceConfig ?? { autoRestoreLastThread: false, enabled: false },\n );\n\n const isPersistenceEnabled = !!persistence;\n\n // Auto-connect to context internally\n const {\n messages,\n isLoading,\n sendMessage,\n stop,\n toolExecutions: rawToolExecutions,\n approveToolExecution,\n rejectToolExecution,\n registeredTools,\n switchBranch,\n getBranchInfo,\n editMessage,\n error: chatError,\n } = useCopilot();\n\n // Convert tool executions to the expected format\n const toolExecutions: ToolExecutionData[] = rawToolExecutions.map(\n (exec: ChatToolExecution) => ({\n id: exec.id,\n name: exec.name,\n args: exec.args,\n status: exec.status,\n result: exec.result as ToolExecutionData[\"result\"],\n error: exec.error,\n timestamp: exec.startedAt ? exec.startedAt.getTime() : Date.now(),\n approvalStatus: exec.approvalStatus,\n approvalTitle: exec.approvalTitle,\n approvalMessage: exec.approvalMessage,\n hidden: exec.hidden,\n }),\n );\n\n // Build map of tool results from tool messages (for merging)\n const toolResultsMap = new Map<string, string>();\n messages\n .filter((m: UIMessage) => m.role === \"tool\" && m.toolCallId)\n .forEach((m: UIMessage) => {\n toolResultsMap.set(m.toolCallId!, m.content ?? \"\");\n });\n\n // Filter out tool messages and merge results into parent assistant messages\n // Keep compaction-markers (system messages with type='compaction-marker') visible\n const visibleMessages = messages\n .filter(\n (m: UIMessage) =>\n m.role !== \"tool\" &&\n (m.role !== \"system\" ||\n (m.metadata as Record<string, unknown>)?.type ===\n \"compaction-marker\"),\n ) // Hide tool/system messages except compaction markers\n .map((m: UIMessage) => {\n // For assistant messages with tool_calls, merge results\n let messageToolExecutions: ToolExecutionData[] | undefined;\n\n if (m.role === \"assistant\" && m.toolCalls && m.toolCalls.length > 0) {\n const toolCallIds = new Set(\n m.toolCalls.map((tc: { id: string }) => tc.id),\n );\n\n // Try live executions first (from agentLoop)\n const liveExecutions = toolExecutions.filter(\n (exec: ToolExecutionData) => toolCallIds.has(exec.id),\n );\n\n if (liveExecutions.length > 0) {\n // Enrich live executions with results from tool messages if not already present\n messageToolExecutions = liveExecutions.map(\n (exec: ToolExecutionData) => {\n if (!exec.result && toolResultsMap.has(exec.id)) {\n const resultContent = toolResultsMap.get(exec.id)!;\n try {\n return { ...exec, result: JSON.parse(resultContent) };\n } catch {\n return {\n ...exec,\n result: { success: false, message: resultContent },\n };\n }\n }\n return exec;\n },\n );\n } else {\n // Build from stored tool_calls + tool messages (historical)\n // Get hidden info from message metadata (set by handleJsonResponse)\n const toolCallsHidden = (\n m.metadata as { toolCallsHidden?: Record<string, boolean> }\n )?.toolCallsHidden;\n\n messageToolExecutions = m.toolCalls.map(\n (tc: {\n id: string;\n function: { name: string; arguments: string };\n }) => {\n const resultContent = toolResultsMap.get(tc.id);\n let result: ToolExecutionData[\"result\"] = undefined;\n if (resultContent) {\n try {\n result = JSON.parse(resultContent);\n } catch {\n result = { success: false, message: resultContent };\n }\n }\n let args: Record<string, unknown> = {};\n try {\n args = JSON.parse(tc.function.arguments || \"{}\");\n } catch {\n // Keep empty args\n }\n // Check hidden from metadata first (from server response),\n // then fall back to registeredTools\n let hidden = toolCallsHidden?.[tc.id];\n if (hidden === undefined) {\n const toolDef = registeredTools?.find(\n (t) => t.name === tc.function.name,\n );\n hidden = toolDef?.hidden;\n }\n return {\n id: tc.id,\n name: tc.function.name,\n args,\n status: (result\n ? \"completed\"\n : \"pending\") as ToolExecutionData[\"status\"],\n result,\n timestamp:\n m.createdAt instanceof Date\n ? m.createdAt.getTime()\n : Date.now(),\n hidden,\n };\n },\n );\n }\n }\n\n // Check for saved executions in metadata (for historical messages without tool_calls)\n const savedExecutions = (\n m.metadata as { toolExecutions?: ToolExecutionData[] }\n )?.toolExecutions;\n if (\n savedExecutions &&\n savedExecutions.length > 0 &&\n !messageToolExecutions\n ) {\n messageToolExecutions = savedExecutions;\n }\n\n // Filter out hidden tool executions for the message\n const visibleToolExecutions = messageToolExecutions?.filter(\n (exec) => !exec.hidden,\n );\n\n return {\n id: m.id,\n role: m.role as \"user\" | \"assistant\" | \"system\",\n content: m.content ?? \"\",\n thinking: m.thinking,\n // Include attachments (images, files)\n attachments: m.attachments,\n // Include tool_calls for assistant messages\n tool_calls: m.toolCalls,\n // Attach matched tool executions to assistant messages (only visible ones)\n toolExecutions: visibleToolExecutions,\n // Include metadata (citations from native web search, etc.)\n metadata: m.metadata,\n // Mark if this message had only hidden tools (for filtering empty bubbles)\n _hasOnlyHiddenTools:\n messageToolExecutions &&\n messageToolExecutions.length > 0 &&\n (!visibleToolExecutions || visibleToolExecutions.length === 0),\n };\n })\n // Filter out empty assistant messages that only had hidden tools\n .filter((m) => {\n if (\n m.role === \"assistant\" &&\n !m.content &&\n (m as { _hasOnlyHiddenTools?: boolean })._hasOnlyHiddenTools\n ) {\n return false;\n }\n return true;\n });\n\n // Show suggestions only when no messages\n const suggestions =\n visibleMessages.length === 0 && chatProps.suggestions?.length\n ? chatProps.suggestions\n : [];\n\n // isProcessing: Show \"Continuing...\" loader when tools finished and AI is about to respond\n const lastMessage = messages[messages.length - 1];\n\n // Find the last assistant message with tool calls (may not be the very last message\n // since tool result messages follow it)\n const lastAssistantWithTools = [...messages]\n .reverse()\n .find(\n (m) => m.role === \"assistant\" && (m as UIMessage).toolCalls?.length,\n ) as UIMessage | undefined;\n\n // In tool flow when: last msg is a tool result (tools ran, waiting for AI),\n // OR last msg is assistant with tool calls (tools still executing)\n const isInToolFlow =\n lastMessage?.role === \"tool\" ||\n (lastMessage?.role === \"assistant\" &&\n (lastMessage as UIMessage).toolCalls?.length);\n\n let isProcessingToolResults = false;\n\n if (isLoading && isInToolFlow) {\n // Last message is a tool result → all tools for this turn are done, AI is continuing\n if (lastMessage?.role === \"tool\") {\n isProcessingToolResults = true;\n } else if (lastAssistantWithTools) {\n const currentToolCallIds = new Set(\n lastAssistantWithTools.toolCalls?.map((tc: { id: string }) => tc.id) ||\n [],\n );\n const currentExecutions = toolExecutions.filter((exec) =>\n currentToolCallIds.has(exec.id),\n );\n const hasCompletedTools = currentExecutions.some(\n (exec) =>\n exec.status === \"completed\" ||\n exec.status === \"error\" ||\n exec.status === \"failed\",\n );\n const hasExecutingTools = currentExecutions.some(\n (exec) => exec.status === \"executing\" || exec.status === \"pending\",\n );\n isProcessingToolResults = hasCompletedTools && !hasExecutingTools;\n }\n }\n\n // Extract chat classNames (without thread picker classes)\n const chatClassNames = classNames\n ? {\n root: classNames.root,\n header: classNames.header,\n container: classNames.container,\n messageList: classNames.messageList,\n userMessage: classNames.userMessage,\n assistantMessage: classNames.assistantMessage,\n input: classNames.input,\n suggestions: classNames.suggestions,\n footer: classNames.footer,\n }\n : undefined;\n\n // Build thread picker element (if enabled)\n const { threadManager, handleSwitchThread, handleNewThread, isBusy } =\n threadManagerResult;\n\n // Handle delete thread\n const handleDeleteThread = React.useCallback(\n (threadId: string) => {\n const isCurrentThread = threadManager.currentThreadId === threadId;\n threadManager.deleteThread(threadId);\n\n // If deleting the current thread, clear messages and show welcome screen\n if (isCurrentThread) {\n handleNewThread();\n }\n },\n [threadManager, handleNewThread],\n );\n\n const threadPickerElement =\n isPersistenceEnabled && showThreadPicker ? (\n <ThreadPicker\n value={threadManager.currentThreadId}\n threads={threadManager.threads}\n onSelect={handleSwitchThread}\n onDeleteThread={handleDeleteThread}\n onNewThread={handleNewThread}\n loading={threadManager.isLoading}\n disabled={isBusy}\n size=\"sm\"\n className={classNames?.threadPicker}\n buttonClassName={classNames?.threadPickerButton}\n dropdownClassName={classNames?.threadPickerDropdown}\n itemClassName={classNames?.threadPickerItem}\n newButtonClassName={classNames?.threadPickerNewButton}\n />\n ) : undefined;\n\n // Auto-show header when any header element is configured\n const shouldShowHeader = !!header || showThreadPicker || chatProps.showHeader;\n\n // Only use custom renderHeader if user provided it AND we're not using built-in header features\n const useCustomHeader =\n chatProps.renderHeader && !header && !showThreadPicker;\n\n return (\n <Chat\n {...chatProps}\n messages={visibleMessages}\n onSendMessage={sendMessage}\n onStop={stop}\n isLoading={isLoading}\n error={chatError}\n showPoweredBy={chatProps.showPoweredBy ?? true}\n suggestions={suggestions}\n isProcessing={isProcessingToolResults}\n onApproveToolExecution={approveToolExecution}\n onRejectToolExecution={rejectToolExecution}\n registeredTools={registeredTools}\n classNames={chatClassNames}\n header={header}\n threadPicker={threadPickerElement}\n showHeader={shouldShowHeader}\n renderHeader={useCustomHeader ? chatProps.renderHeader : undefined}\n // Welcome screen props\n recentThreads={isPersistenceEnabled ? threadManager.threads : undefined}\n onSelectThread={isPersistenceEnabled ? handleSwitchThread : undefined}\n onDeleteThread={isPersistenceEnabled ? handleDeleteThread : undefined}\n // Thread management for compound components\n onNewChat={handleNewThread}\n threads={isPersistenceEnabled ? threadManager.threads : undefined}\n currentThreadId={threadManager.currentThreadId}\n onSwitchThread={isPersistenceEnabled ? handleSwitchThread : undefined}\n isThreadBusy={isBusy}\n // Branching (auto-wired from context)\n getBranchInfo={getBranchInfo}\n onSwitchBranch={switchBranch}\n onEditMessage={allowEdit ? editMessage : undefined}\n >\n {children}\n </Chat>\n );\n}\n\n// Attach compound components from Chat to CopilotChat\n// This allows: <CopilotChat.Root>, <CopilotChat.HomeView>, <CopilotChat.ChatView>, etc.\nexport const CopilotChat = Object.assign(CopilotChatBase, {\n Root: CopilotChatBase, // Alias for layout composition pattern\n Home: Chat.Home, // Backward compat alias\n HomeView: Chat.HomeView, // New name\n ChatView: Chat.ChatView,\n Header: Chat.Header,\n Footer: Chat.Footer,\n Input: Chat.Input,\n Suggestions: Chat.Suggestions,\n BackButton: Chat.BackButton, // Navigation: start new chat\n ThreadPicker: Chat.ThreadPicker, // Thread switching\n // Message actions compound components (alpha)\n MessageActions: Chat.MessageActions,\n CopyAction: Chat.CopyAction,\n EditAction: Chat.EditAction,\n FeedbackAction: Chat.FeedbackAction,\n Action: Chat.Action,\n});\n\n// Alias for backwards compatibility\nexport const ConnectedChat = CopilotChat;\nexport type ConnectedChatProps = CopilotChatProps;\n","\"use client\";\n\nimport { cn } from \"../../lib/utils\";\n\nexport type PoweredByProps = {\n className?: string;\n showLogo?: boolean;\n};\n\nfunction YourGPTLogo({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M12 2L2 7l10 5 10-5-10-5z\" />\n <path d=\"M2 17l10 5 10-5\" />\n <path d=\"M2 12l10 5 10-5\" />\n </svg>\n );\n}\n\nexport function PoweredBy({ className, showLogo = true }: PoweredByProps) {\n return (\n <div\n className={cn(\n \"flex items-center justify-center gap-1.5 py-2 text-xs text-muted-foreground\",\n className,\n )}\n >\n <span>Powered by</span>\n {showLogo && <YourGPTLogo className=\"h-3 w-3\" />}\n <a\n href=\"https://yourgpt.ai\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"font-medium text-foreground hover:underline\"\n >\n YourGPT\n </a>\n </div>\n );\n}\n","\"use client\";\n\n/**\n * useAttachments — Core hook for file upload management in chat inputs.\n *\n * Works with both the SDK's default input and custom user inputs.\n * Handles file validation, upload progress, cancellation, and drag-drop.\n *\n * @example\n * ```tsx\n * const { attachments, addFiles, removeAttachment, getReadyAttachments, dragHandlers } =\n * useAttachments({ upload: \"/api/copilot/upload\", maxFiles: 5 });\n * ```\n */\n\nimport { useState, useCallback, useRef, useMemo } from \"react\";\nimport type { MessageAttachment } from \"../../core/types/message\";\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport type AttachmentStatus = \"uploading\" | \"ready\" | \"error\";\n\nexport interface PendingAttachment {\n id: string;\n file: File;\n /** Object URL for image preview */\n preview?: string;\n status: AttachmentStatus;\n /** Upload progress 0-100 */\n progress: number;\n error?: string;\n /** Final attachment data when ready */\n attachment?: MessageAttachment;\n}\n\nexport type UploadConfig =\n | string\n | {\n url: string;\n headers?: Record<string, string> | (() => Record<string, string>);\n body?: Record<string, unknown> | (() => Record<string, unknown>);\n }\n | ((file: File) => Promise<MessageAttachment>);\n\nexport interface UseAttachmentsConfig {\n /** Upload handler — string (URL), object (URL+options), or function (custom) */\n upload?: UploadConfig;\n /** Maximum number of files (default: 5) */\n maxFiles?: number;\n /** Maximum file size in bytes (default: 10MB) */\n maxFileSize?: number;\n /** Allowed MIME types (default: images + PDF) */\n allowedFileTypes?: string[];\n}\n\nexport interface UseAttachmentsReturn {\n /** Current pending attachments */\n attachments: PendingAttachment[];\n /** Whether files are being dragged over the drop zone */\n isDragging: boolean;\n /** Add files (from file picker or drop) */\n addFiles: (files: FileList | File[]) => void;\n /** Remove a pending attachment */\n removeAttachment: (id: string) => void;\n /** Cancel an in-progress upload */\n cancelUpload: (id: string) => void;\n /** Retry a failed upload */\n retryUpload: (id: string) => void;\n /** Clear all attachments */\n clearAll: () => void;\n /** Get ready attachments as MessageAttachment[] for sending */\n getReadyAttachments: () => MessageAttachment[];\n /** Whether any attachments exist */\n hasAttachments: boolean;\n /** Whether any upload is in progress */\n isUploading: boolean;\n /** Whether message can be sent (has ready attachments, none still uploading) */\n canSend: boolean;\n /** Drag-drop event handlers — spread on the container element */\n dragHandlers: {\n onDragEnter: (e: React.DragEvent) => void;\n onDragOver: (e: React.DragEvent) => void;\n onDragLeave: (e: React.DragEvent) => void;\n onDrop: (e: React.DragEvent) => void;\n };\n /** Open native file picker */\n openFilePicker: () => void;\n /** Ref for hidden file input */\n fileInputRef: React.RefObject<HTMLInputElement | null>;\n /** Handler for file input change */\n onFileInputChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\n// ── Constants ──────────────────────────────────────────────────────────────\n\nconst DEFAULT_MAX_FILES = 5;\nconst DEFAULT_MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB\nconst DEFAULT_ALLOWED_TYPES = [\n \"image/*\",\n \"application/pdf\",\n \"text/csv\",\n \"text/plain\",\n \"text/markdown\",\n \"application/json\",\n \".csv\",\n \".txt\",\n \".md\",\n \".json\",\n];\n\n/** MIME types that are text-based — read as text, no upload needed */\nconst TEXT_MIME_TYPES = new Set([\n \"text/csv\",\n \"text/plain\",\n \"text/markdown\",\n \"text/x-markdown\",\n \"application/json\",\n \"application/csv\",\n]);\n\nfunction isTextFile(file: File): boolean {\n if (TEXT_MIME_TYPES.has(file.type)) return true;\n const ext = file.name.toLowerCase().split(\".\").pop();\n return ext === \"csv\" || ext === \"txt\" || ext === \"md\" || ext === \"json\";\n}\n\nfunction readFileAsText(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = () => reject(new Error(\"Failed to read file\"));\n reader.readAsText(file);\n });\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────\n\nfunction generateId(): string {\n return `att_${Date.now()}_${Math.random().toString(36).slice(2, 7)}`;\n}\n\nfunction getAttachmentType(mimeType: string): MessageAttachment[\"type\"] {\n if (mimeType.startsWith(\"image/\")) return \"image\";\n if (mimeType.startsWith(\"audio/\")) return \"audio\";\n if (mimeType.startsWith(\"video/\")) return \"video\";\n return \"file\";\n}\n\nfunction isTypeAllowed(file: File, allowedTypes: string[]): boolean {\n for (const type of allowedTypes) {\n if (type === file.type) return true;\n if (type.endsWith(\"/*\") && file.type.startsWith(type.slice(0, -1)))\n return true;\n if (type.startsWith(\".\") && file.name.toLowerCase().endsWith(type))\n return true;\n }\n return false;\n}\n\nfunction fileToBase64(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = () => reject(new Error(\"Failed to read file\"));\n reader.readAsDataURL(file);\n });\n}\n\nfunction createPreview(file: File): string | undefined {\n if (file.type.startsWith(\"image/\")) {\n return URL.createObjectURL(file);\n }\n return undefined;\n}\n\n// ── Hook ───────────────────────────────────────────────────────────────────\n\nexport function useAttachments(\n config: UseAttachmentsConfig = {},\n): UseAttachmentsReturn {\n const {\n upload,\n maxFiles = DEFAULT_MAX_FILES,\n maxFileSize = DEFAULT_MAX_FILE_SIZE,\n allowedFileTypes = DEFAULT_ALLOWED_TYPES,\n } = config;\n\n const [attachments, setAttachments] = useState<PendingAttachment[]>([]);\n const [isDragging, setIsDragging] = useState(false);\n const abortControllers = useRef(new Map<string, AbortController>());\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n const dragCounter = useRef(0);\n\n // ── Upload a single file ─────────────────────────────────────────────\n\n const uploadFile = useCallback(\n async (id: string, file: File) => {\n const updateProgress = (progress: number) => {\n setAttachments((prev) =>\n prev.map((a) => (a.id === id ? { ...a, progress } : a)),\n );\n };\n\n const markReady = (attachment: MessageAttachment) => {\n setAttachments((prev) =>\n prev.map((a) =>\n a.id === id\n ? { ...a, status: \"ready\" as const, progress: 100, attachment }\n : a,\n ),\n );\n };\n\n const markError = (error: string) => {\n setAttachments((prev) =>\n prev.map((a) =>\n a.id === id ? { ...a, status: \"error\" as const, error } : a,\n ),\n );\n };\n\n try {\n const controller = new AbortController();\n abortControllers.current.set(id, controller);\n\n let result: MessageAttachment;\n\n // Text files: read content locally, no upload needed\n if (isTextFile(file)) {\n updateProgress(50);\n const textContent = await readFileAsText(file);\n result = {\n type: \"file\",\n data: textContent,\n mimeType: file.type || \"text/plain\",\n filename: file.name,\n };\n markReady(result);\n return;\n }\n\n if (typeof upload === \"function\") {\n // Custom function — no progress tracking (user handles it)\n updateProgress(50);\n result = await upload(file);\n } else if (upload) {\n // URL string or object — upload to server with progress\n const uploadConfig =\n typeof upload === \"string\" ? { url: upload } : upload;\n const extraHeaders =\n typeof uploadConfig.headers === \"function\"\n ? uploadConfig.headers()\n : uploadConfig.headers;\n const extraBody =\n typeof uploadConfig.body === \"function\"\n ? uploadConfig.body()\n : uploadConfig.body;\n\n const base64 = await fileToBase64(file);\n updateProgress(30);\n\n const body = JSON.stringify({\n data: base64,\n mimeType: file.type,\n filename: file.name,\n ...extraBody,\n });\n\n const res = await fetch(uploadConfig.url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", ...extraHeaders },\n body,\n signal: controller.signal,\n });\n\n updateProgress(90);\n\n if (!res.ok) throw new Error(`Upload failed: ${res.status}`);\n const json = await res.json();\n const url = json.url ?? json.data?.url;\n if (!url) throw new Error(\"Upload returned no URL\");\n\n result = {\n type: getAttachmentType(file.type),\n url,\n mimeType: file.type,\n filename: file.name,\n };\n } else {\n // No upload config — fallback to base64\n updateProgress(50);\n const data = await fileToBase64(file);\n result = {\n type: getAttachmentType(file.type),\n data,\n mimeType: file.type,\n filename: file.name,\n };\n }\n\n markReady(result);\n } catch (err) {\n if ((err as Error)?.name === \"AbortError\") return; // cancelled\n markError((err as Error)?.message ?? \"Upload failed\");\n } finally {\n abortControllers.current.delete(id);\n }\n },\n [upload],\n );\n\n // ── Add files ────────────────────────────────────────────────────────\n\n const addFiles = useCallback(\n (files: FileList | File[]) => {\n const fileArray = Array.from(files);\n const remaining = maxFiles - attachments.length;\n if (remaining <= 0) return;\n\n const toAdd = fileArray.slice(0, remaining);\n\n const newAttachments: PendingAttachment[] = [];\n\n for (const file of toAdd) {\n // Validate type\n if (!isTypeAllowed(file, allowedFileTypes)) continue;\n // Validate size\n if (file.size > maxFileSize) continue;\n\n const id = generateId();\n const preview = createPreview(file);\n\n newAttachments.push({\n id,\n file,\n preview,\n status: \"uploading\",\n progress: 0,\n });\n }\n\n if (newAttachments.length === 0) return;\n\n setAttachments((prev) => [...prev, ...newAttachments]);\n\n // Start uploads\n for (const att of newAttachments) {\n uploadFile(att.id, att.file);\n }\n },\n [attachments.length, maxFiles, maxFileSize, allowedFileTypes, uploadFile],\n );\n\n // ── Remove ───────────────────────────────────────────────────────────\n\n const removeAttachment = useCallback((id: string) => {\n setAttachments((prev) => {\n const att = prev.find((a) => a.id === id);\n if (att?.preview) URL.revokeObjectURL(att.preview);\n return prev.filter((a) => a.id !== id);\n });\n // Cancel if still uploading\n const controller = abortControllers.current.get(id);\n if (controller) {\n controller.abort();\n abortControllers.current.delete(id);\n }\n }, []);\n\n // ── Cancel upload ────────────────────────────────────────────────────\n\n const cancelUpload = useCallback(\n (id: string) => {\n removeAttachment(id);\n },\n [removeAttachment],\n );\n\n // ── Retry ────────────────────────────────────────────────────────────\n\n const retryUpload = useCallback(\n (id: string) => {\n setAttachments((prev) =>\n prev.map((a) =>\n a.id === id\n ? {\n ...a,\n status: \"uploading\" as const,\n progress: 0,\n error: undefined,\n }\n : a,\n ),\n );\n const att = attachments.find((a) => a.id === id);\n if (att) uploadFile(id, att.file);\n },\n [attachments, uploadFile],\n );\n\n // ── Clear all ────────────────────────────────────────────────────────\n\n const clearAll = useCallback(() => {\n for (const att of attachments) {\n if (att.preview) URL.revokeObjectURL(att.preview);\n }\n for (const controller of abortControllers.current.values()) {\n controller.abort();\n }\n abortControllers.current.clear();\n setAttachments([]);\n }, [attachments]);\n\n // ── Get ready attachments ────────────────────────────────────────────\n\n const getReadyAttachments = useCallback((): MessageAttachment[] => {\n return attachments\n .filter((a) => a.status === \"ready\" && a.attachment)\n .map((a) => a.attachment!);\n }, [attachments]);\n\n // ── Derived state ────────────────────────────────────────────────────\n\n const hasAttachments = attachments.length > 0;\n const isUploading = attachments.some((a) => a.status === \"uploading\");\n const canSend =\n hasAttachments &&\n attachments.some((a) => a.status === \"ready\") &&\n !isUploading;\n\n // ── Drag-drop handlers ───────────────────────────────────────────────\n\n const dragHandlers = useMemo(\n () => ({\n onDragEnter: (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragCounter.current++;\n if (e.dataTransfer.types.includes(\"Files\")) {\n setIsDragging(true);\n }\n },\n onDragOver: (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n },\n onDragLeave: (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragCounter.current--;\n if (dragCounter.current === 0) {\n setIsDragging(false);\n }\n },\n onDrop: (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragCounter.current = 0;\n setIsDragging(false);\n if (e.dataTransfer.files?.length) {\n addFiles(e.dataTransfer.files);\n }\n },\n }),\n [addFiles],\n );\n\n // ── File input helpers ───────────────────────────────────────────────\n\n const openFilePicker = useCallback(() => {\n fileInputRef.current?.click();\n }, []);\n\n const onFileInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files?.length) {\n addFiles(e.target.files);\n }\n // Reset so same file can be selected again\n if (fileInputRef.current) fileInputRef.current.value = \"\";\n },\n [addFiles],\n );\n\n return {\n attachments,\n isDragging,\n addFiles,\n removeAttachment,\n cancelUpload,\n retryUpload,\n clearAll,\n getReadyAttachments,\n hasAttachments,\n isUploading,\n canSend,\n dragHandlers,\n openFilePicker,\n fileInputRef,\n onFileInputChange,\n };\n}\n","\"use client\";\n\n/**\n * AttachmentStrip — Displays pending attachments above the chat input.\n *\n * Minimal, Linear/Notion-inspired design.\n * Shows thumbnail, filename, progress, and remove/retry actions.\n */\n\nimport type { PendingAttachment } from \"../hooks/useAttachments\";\n\n// ── Inline SVG icons (Lucide) ──────────────────────────────────────────────\n\nconst svgProps = {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\" as const,\n strokeLinejoin: \"round\" as const,\n};\n\nfunction ImageIcon({ className }: { className?: string }) {\n return (\n <svg {...svgProps} className={className}>\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\" />\n <circle cx=\"9\" cy=\"9\" r=\"2\" />\n <path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\" />\n </svg>\n );\n}\nfunction FileTextIcon({ className }: { className?: string }) {\n return (\n <svg {...svgProps} className={className}>\n <path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\" />\n <path d=\"M14 2v4a2 2 0 0 0 2 2h4\" />\n <path d=\"M10 9H8\" />\n <path d=\"M16 13H8\" />\n <path d=\"M16 17H8\" />\n </svg>\n );\n}\nfunction MusicIcon({ className }: { className?: string }) {\n return (\n <svg {...svgProps} className={className}>\n <path d=\"M9 18V5l12-2v13\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <circle cx=\"18\" cy=\"16\" r=\"3\" />\n </svg>\n );\n}\nfunction VideoIcon({ className }: { className?: string }) {\n return (\n <svg {...svgProps} className={className}>\n <path d=\"m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.934a.5.5 0 0 0-.777-.416L16 11\" />\n <rect width=\"14\" height=\"12\" x=\"2\" y=\"6\" rx=\"2\" />\n </svg>\n );\n}\nfunction XIcon({ className }: { className?: string }) {\n return (\n <svg {...svgProps} className={className}>\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n );\n}\nfunction RefreshCwIcon({ className }: { className?: string }) {\n return (\n <svg {...svgProps} className={className}>\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" />\n <path d=\"M8 16H3v5\" />\n </svg>\n );\n}\nfunction Loader2Icon({ className }: { className?: string }) {\n return (\n <svg {...svgProps} className={className}>\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n );\n}\nfunction CheckIcon({ className }: { className?: string }) {\n return (\n <svg {...svgProps} className={className}>\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n );\n}\n\n// ── File type icon ─────────────────────────────────────────────────────────\n\nfunction FileTypeIcon({ mimeType }: { mimeType: string }) {\n const cls = \"size-3.5\";\n if (mimeType.startsWith(\"image/\")) return <ImageIcon className={cls} />;\n if (mimeType.startsWith(\"audio/\")) return <MusicIcon className={cls} />;\n if (mimeType.startsWith(\"video/\")) return <VideoIcon className={cls} />;\n return <FileTextIcon className={cls} />;\n}\n\n// ── Status indicator ───────────────────────────────────────────────────────\n\nfunction StatusBadge({ status }: { status: PendingAttachment[\"status\"] }) {\n if (status === \"uploading\") {\n return <Loader2Icon className=\"size-3 animate-spin text-blue-400\" />;\n }\n if (status === \"ready\") {\n return <CheckIcon className=\"size-3 text-emerald-400\" />;\n }\n return null; // error shows retry button instead\n}\n\n// ── Single attachment card ─────────────────────────────────────────────────\n\nfunction AttachmentCard({\n attachment,\n onRemove,\n onRetry,\n}: {\n attachment: PendingAttachment;\n onRemove: (id: string) => void;\n onRetry: (id: string) => void;\n}) {\n const { id, file, preview, status, progress, error } = attachment;\n const isError = status === \"error\";\n\n return (\n <div\n className={`\n csdk-attachment-card group relative flex items-center gap-1.5\n rounded-lg border px-2 py-1.5 min-w-0 max-w-[160px]\n transition-colors duration-150\n ${\n isError\n ? \"border-red-500/30 bg-red-500/5\"\n : \"border-border/60 bg-muted/40 hover:bg-muted/60\"\n }\n `}\n >\n {/* Thumbnail or icon */}\n <div className=\"size-7 rounded shrink-0 overflow-hidden bg-muted/60 flex items-center justify-center\">\n {preview ? (\n <img\n src={preview}\n alt={file.name}\n className=\"size-full object-cover\"\n />\n ) : (\n <FileTypeIcon mimeType={file.type} />\n )}\n </div>\n\n {/* Name + status */}\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-[10px] font-medium truncate leading-tight text-foreground/80\">\n {file.name}\n </p>\n <div className=\"flex items-center gap-1 mt-0.5\">\n {isError ? (\n <button\n onClick={() => onRetry(id)}\n className=\"flex items-center gap-0.5 text-[9px] text-red-400 hover:text-red-300 cursor-pointer\"\n >\n <RefreshCwIcon className=\"size-2.5\" />\n Retry\n </button>\n ) : (\n <>\n <StatusBadge status={status} />\n <span className=\"text-[9px] text-muted-foreground\">\n {status === \"uploading\"\n ? `${progress}%`\n : formatBytes(file.size)}\n </span>\n </>\n )}\n </div>\n </div>\n\n {/* Progress bar (uploading only) */}\n {status === \"uploading\" && (\n <div className=\"absolute bottom-0 left-0 right-0 h-[2px] rounded-b-lg overflow-hidden bg-muted/40\">\n <div\n className=\"h-full bg-blue-500 transition-[width] duration-300 ease-out\"\n style={{ width: `${progress}%` }}\n />\n </div>\n )}\n\n {/* Remove button */}\n <button\n onClick={() => onRemove(id)}\n className=\"\n size-4 rounded-full shrink-0 flex items-center justify-center\n text-muted-foreground/50 hover:text-foreground hover:bg-muted\n transition-colors cursor-pointer\n \"\n aria-label=\"Remove attachment\"\n >\n <XIcon className=\"size-2.5\" />\n </button>\n </div>\n );\n}\n\n// ── Bytes formatter ────────────────────────────────────────────────────────\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes}B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(0)}KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;\n}\n\n// ── Main strip ─────────────────────────────────────────────────────────────\n\nexport interface AttachmentStripProps {\n attachments: PendingAttachment[];\n onRemove: (id: string) => void;\n onRetry: (id: string) => void;\n className?: string;\n}\n\nexport function AttachmentStrip({\n attachments,\n onRemove,\n onRetry,\n className = \"\",\n}: AttachmentStripProps) {\n if (attachments.length === 0) return null;\n\n return (\n <div\n className={`csdk-attachment-strip flex gap-1.5 overflow-x-auto px-1 py-1.5 scrollbar-none ${className}`}\n >\n {attachments.map((att) => (\n <AttachmentCard\n key={att.id}\n attachment={att}\n onRemove={onRemove}\n onRetry={onRetry}\n />\n ))}\n </div>\n );\n}\n","\"use client\";\n\n/**\n * DropZoneOverlay — Shows when files are dragged over the chat area.\n */\n\nconst svgProps = {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\" as const,\n strokeLinejoin: \"round\" as const,\n};\nfunction PaperclipIcon({ className }: { className?: string }) {\n return (\n <svg {...svgProps} className={className}>\n <path d=\"m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48\" />\n </svg>\n );\n}\n\nexport interface DropZoneOverlayProps {\n isDragging: boolean;\n className?: string;\n}\n\nexport function DropZoneOverlay({\n isDragging,\n className = \"\",\n}: DropZoneOverlayProps) {\n if (!isDragging) return null;\n\n return (\n <div\n className={`\n csdk-drop-zone absolute inset-0 z-50 flex items-center justify-center\n bg-background/80 backdrop-blur-sm border-2 border-dashed border-primary/40\n rounded-xl pointer-events-none\n ${className}\n `}\n >\n <div className=\"flex flex-col items-center gap-2 text-primary/70\">\n <div className=\"size-10 rounded-xl bg-primary/10 flex items-center justify-center\">\n <PaperclipIcon className=\"size-5\" />\n </div>\n <p className=\"text-sm font-medium\">Drop files to attach</p>\n </div>\n </div>\n );\n}\n","/**\n * @yourgpt/copilot-sdk-ui\n *\n * Pre-built UI components for Copilot SDK\n */\n\n// ============================================\n// Primitives (Building Blocks)\n// ============================================\nexport { Loader } from \"./components/ui/loader\";\nexport { Markdown } from \"./components/ui/markdown\";\nexport type { LinkSafetyConfig } from \"./components/ui/markdown\";\nexport { CodeBlock } from \"./components/ui/code-block\";\nexport { Button } from \"./components/ui/button\";\nexport { FeedbackBar } from \"./components/ui/feedback-bar\";\nexport { ScrollButton } from \"./components/ui/scroll-button\";\nexport {\n Tooltip,\n TooltipProvider,\n TooltipTrigger,\n TooltipContent,\n type TooltipProps,\n type TooltipProviderProps,\n type TooltipTriggerProps,\n type TooltipContentProps,\n} from \"./components/ui/tooltip\";\n\n// Message primitives\nexport {\n Message as MessagePrimitive,\n MessageAvatar,\n MessageContent,\n} from \"./components/ui/message\";\n\n// Input primitives\nexport {\n PromptInput,\n PromptInputTextarea,\n PromptInputActions,\n PromptInputAction,\n} from \"./components/ui/prompt-input\";\n\n// Container primitives\nexport {\n ChatContainerRoot,\n ChatContainerContent,\n ChatContainerScrollAnchor,\n useChatContainer,\n} from \"./components/ui/chat-container\";\n\n// Source primitives (for citations/references)\nexport {\n Source,\n SourceTrigger,\n SourceContent,\n SourceGroup,\n SimpleSource,\n type SourceProps,\n type SourceTriggerProps,\n type SourceContentProps,\n type SourceGroupProps,\n type SourceItem,\n type SimpleSourceProps,\n} from \"./components/ui/source\";\n\n// Search results primitives (for web search tool)\nexport {\n SearchResults,\n SearchAnswer,\n SearchResultsWithAnswer,\n type SearchResultsProps,\n type SearchAnswerProps,\n type SearchResultsWithAnswerProps,\n} from \"./components/ui/search-results\";\n\n// Citation components (for displaying sources/references)\nexport {\n // Components\n CitationBadge,\n CitationSuperscript,\n SourcePill,\n SourcesBar,\n SourcesCollapsible,\n SourcesList,\n MessageWithCitations,\n // Utilities\n annotationsToCitations,\n resultsToCitations,\n // Types\n type Citation,\n type CitationsConfig,\n type CitationBadgeProps,\n type CitationSuperscriptProps,\n type SourcePillProps,\n type SourcesBarProps,\n type SourcesCollapsibleProps,\n type SourcesListProps,\n type MessageWithCitationsProps,\n} from \"./components/ui/citations\";\n\n// Reasoning primitives\nexport {\n Reasoning,\n ReasoningTrigger,\n ReasoningContent,\n SimpleReasoning,\n type ReasoningProps,\n type ReasoningTriggerProps,\n type ReasoningContentProps,\n type SimpleReasoningProps,\n} from \"./components/ui/reasoning\";\n\n// Tool steps primitives\nexport {\n ToolSteps,\n ToolStep,\n InlineToolSteps,\n type ToolStepsProps,\n type ToolStepProps,\n type InlineToolStepsProps,\n type ToolStepData,\n type ToolStepStatus,\n} from \"./components/ui/tool-steps\";\n\n// Confirmation primitives (Tool approval)\nexport {\n Confirmation,\n ConfirmationPending,\n ConfirmationApproved,\n ConfirmationRejected,\n ConfirmationMessage,\n ConfirmationActions,\n SimpleConfirmation,\n type ConfirmationProps,\n type ConfirmationState,\n type ConfirmationPendingProps,\n type ConfirmationApprovedProps,\n type ConfirmationRejectedProps,\n type ConfirmationMessageProps,\n type ConfirmationActionsProps,\n type SimpleConfirmationProps,\n} from \"./components/ui/confirmation\";\n\n// Permission confirmation primitives (with \"don't ask again\" support)\nexport {\n PermissionConfirmation,\n CompactPermissionConfirmation,\n DEFAULT_PERMISSION_OPTIONS,\n type PermissionConfirmationProps,\n type CompactPermissionConfirmationProps,\n type PermissionLevel,\n type PermissionOption,\n} from \"./components/ui/permission-confirmation\";\n\n// Follow-up questions (AI-generated suggestions)\nexport {\n FollowUpQuestions,\n parseFollowUps,\n type FollowUpProps,\n} from \"./components/ui/follow-up\";\n\n// Branch navigator (← N/M → variant navigation for branched conversations)\nexport {\n BranchNavigator,\n type BranchNavigatorProps,\n} from \"./components/ui/branch-navigator\";\n\n// DevLogger (Development debugging tool)\nexport {\n DevLogger,\n type DevLoggerProps,\n type DevLoggerState,\n} from \"./components/ui/dev-logger\";\n\n// Capability badges (Multi-provider support)\nexport {\n CapabilityBadge,\n CapabilityList,\n type CapabilityBadgeProps,\n type CapabilityListProps,\n type CapabilityType,\n} from \"./components/ui/capability-badge\";\n\n// Model selector (Multi-provider support)\nexport {\n ModelSelector,\n SimpleModelSelector,\n type ModelSelectorProps,\n type SimpleModelSelectorProps,\n type ModelOption,\n type ProviderGroup,\n} from \"./components/ui/model-selector\";\n\n// Thread management components\nexport {\n ThreadPicker,\n type ThreadPickerProps,\n} from \"./components/ui/thread-picker\";\nexport {\n ThreadList,\n ThreadCard,\n type ThreadListProps,\n type ThreadCardProps,\n} from \"./components/ui/thread-list\";\n\n// ============================================\n// Context Providers\n// ============================================\nexport {\n CopilotUIProvider,\n useCopilotUI,\n type CopilotUIConfig,\n type CopilotUIContextValue,\n type CopilotUIProviderProps,\n} from \"./context/copilot-ui-context\";\n\n// ============================================\n// Composed Components (Ready-to-use)\n// ============================================\nexport {\n Chat,\n ChatWelcome,\n CopilotChat,\n ConnectedChat, // Alias for CopilotChat (backwards compatibility)\n ToolExecutionMessage,\n PoweredBy,\n // Compound component hook\n useCopilotChatContext,\n type ChatProps,\n type ChatMessage,\n type CopilotChatProps,\n type ConnectedChatProps, // Alias for CopilotChatProps\n type PoweredByProps,\n // Compound component types (layout composition)\n type HomeViewProps,\n type HomeProps,\n type ChatViewProps,\n type HeaderProps,\n type FooterProps,\n type BackButtonProps,\n type ThreadPickerCompoundProps,\n // Generative UI types (for custom tool renderers)\n type ToolRendererProps,\n type ToolRenderers,\n // Welcome screen config\n type WelcomeConfig,\n // Citation/Sources config (web search)\n type CitationConfig,\n // Persistence types\n type CopilotChatPersistenceConfig,\n type CopilotChatClassNames,\n // Typed persistence configs\n type LocalPersistenceConfig,\n type ServerPersistenceConfig,\n type CloudPersistenceConfig,\n} from \"./components/composed\";\n\n// ============================================\n// Icons\n// ============================================\nexport {\n SendIcon,\n StopIcon,\n CloseIcon,\n ChevronDownIcon,\n ChevronUpIcon,\n ChevronLeftIcon,\n CopyIcon,\n CheckIcon,\n ThumbsUpIcon,\n ThumbsDownIcon,\n RefreshIcon,\n UserIcon,\n BotIcon,\n XIcon,\n AlertTriangleIcon,\n} from \"./components/icons\";\n\n// ============================================\n// MCP-UI Components (Interactive UI from MCP tools)\n// ============================================\nexport {\n MCPUIFrame,\n MCPUIFrameList,\n type MCPUIFrameListProps,\n} from \"./components/ui/mcp-ui-frame\";\n// MCPUIFrameProps is exported from mcp/ui module\nexport type { MCPUIFrameProps } from \"../mcp/ui/types\";\n\n// ============================================\n// Utilities\n// ============================================\nexport { cn } from \"./lib/utils\";\n\n// ============================================\n// Chat Primitives (headless composition API)\n// ============================================\nimport { DefaultMessage } from \"./components/composed/chat/default-message\";\nimport { ChatHeader } from \"./components/composed/chat/chat-header\";\nimport { ChatWelcome } from \"./components/composed/chat/chat-welcome\";\nimport { MessageList } from \"./components/composed/chat/message-list\";\nimport {\n Message,\n MessageAvatar as MsgAvatar,\n MessageContent as MsgContent,\n MessageActions,\n MessageAction,\n} from \"./components/ui/message\";\nimport { PromptInput } from \"./components/ui/prompt-input\";\nimport { Loader } from \"./components/ui/loader\";\nimport { ChatContainerScrollAnchor } from \"./components/ui/chat-container\";\n\n/**\n * ChatPrimitives — composable primitives for building custom chat layouts.\n * Must be used inside <CopilotChat>.\n *\n * @example\n * ```tsx\n * import { ChatPrimitives as Chat } from '@yourgpt/copilot-sdk-ui';\n *\n * <CopilotChat>\n * <Chat.Header />\n * <Chat.MessageList>\n * {(message) =>\n * message.metadata?.type === \"plan\"\n * ? <PlanCard key={message.id} />\n * : <Chat.DefaultMessage key={message.id} message={message} />\n * }\n * </Chat.MessageList>\n * <Chat.Input />\n * </CopilotChat>\n * ```\n */\nexport const ChatPrimitives = {\n // ── List ──────────────────────────────────────────────\n /** Renders the message list via render-prop. Falls back to DefaultMessage if no children. */\n MessageList,\n\n // ── Messages ──────────────────────────────────────────\n /** Full SDK message bubble (user + assistant + tools). Use as fallback inside MessageList. */\n DefaultMessage,\n /** Low-level message row wrapper (flex layout + avatar slot) */\n Message,\n /** Message avatar — image with fallback text/icon */\n MessageAvatar: MsgAvatar,\n /** Message content bubble — supports markdown */\n MessageContent: MsgContent,\n /** Action bar below a message (copy, feedback, etc.) */\n MessageActions,\n /** Single action button with tooltip inside MessageActions */\n MessageAction,\n\n // ── Layout ────────────────────────────────────────────\n /** Chat header bar with title and controls */\n Header: ChatHeader,\n /** Welcome screen shown when there are no messages */\n Welcome: ChatWelcome,\n /** Chat input / composer */\n Input: PromptInput,\n /** Scroll anchor — keeps the view pinned to the latest message */\n ScrollAnchor: ChatContainerScrollAnchor,\n\n // ── Indicators ────────────────────────────────────────\n /** Loading / streaming indicator (dots, wave, typing variants) */\n Loader,\n};\n\nexport type { MessageListProps } from \"./components/composed/chat/message-list\";\n\n// ============================================\n// Attachments\n// ============================================\nexport { useAttachments } from \"./hooks/useAttachments\";\nexport type {\n PendingAttachment,\n UseAttachmentsConfig,\n UseAttachmentsReturn,\n UploadConfig,\n} from \"./hooks/useAttachments\";\nexport { AttachmentStrip } from \"./components/attachment-strip\";\nexport type { AttachmentStripProps } from \"./components/attachment-strip\";\nexport { DropZoneOverlay } from \"./components/drop-zone-overlay\";\nexport type { DropZoneOverlayProps } from \"./components/drop-zone-overlay\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/ui/components/ui/markdown.tsx","../../src/ui/components/ui/code-block.tsx","../../src/ui/components/ui/button.tsx","../../src/ui/components/ui/feedback-bar.tsx","../../src/ui/components/ui/chat-container.tsx","../../src/ui/components/ui/scroll-button.tsx","../../src/ui/components/ui/tooltip.tsx","../../src/ui/components/ui/avatar.tsx","../../src/ui/components/ui/message.tsx","../../src/ui/components/ui/textarea.tsx","../../src/ui/components/ui/prompt-input.tsx","../../src/ui/components/ui/hover-card.tsx","../../src/ui/components/ui/source.tsx","../../src/ui/components/ui/search-results.tsx","../../src/ui/components/ui/citations.tsx","../../src/ui/components/ui/reasoning.tsx","../../src/ui/context/copilot-ui-context.tsx","../../src/ui/components/ui/tool-steps.tsx","../../src/ui/components/icons/index.tsx","../../src/ui/components/ui/confirmation.tsx","../../src/ui/components/ui/permission-confirmation.tsx","../../src/ui/components/ui/follow-up.tsx","../../src/ui/components/ui/branch-navigator.tsx","../../src/ui/components/ui/dev-logger.tsx","../../src/ui/components/ui/capability-badge.tsx","../../src/ui/components/ui/model-selector.tsx","../../src/ui/components/ui/popover.tsx","../../src/ui/components/ui/thread-picker.tsx","../../src/ui/components/ui/thread-list.tsx","../../src/ui/components/icons/copilot-sdk-logo.tsx","../../src/ui/components/composed/chat/chat-header.tsx","../../src/ui/components/composed/chat/suggestions.tsx","../../src/ui/components/ui/mcp-ui-frame.tsx","../../src/ui/components/composed/chat/message-actions-context.tsx","../../src/ui/components/composed/chat/message-actions-compound.tsx","../../src/ui/components/composed/chat/default-message.tsx","../../src/ui/components/composed/chat/chat-welcome.tsx","../../src/ui/components/composed/chat/chat.tsx","../../src/ui/components/composed/chat/message-list.tsx","../../src/ui/components/composed/chat/tool-execution-message.tsx","../../src/ui/hooks/useInternalThreadManager.ts","../../src/ui/components/composed/connected-chat.tsx","../../src/ui/components/composed/powered-by.tsx","../../src/ui/hooks/useAttachments.ts","../../src/ui/components/attachment-strip.tsx","../../src/ui/components/drop-zone-overlay.tsx","../../src/ui/index.ts"],"names":["jsx","Streamdown","code","memo","cn","cva","React","Slot","jsxs","StickToBottomOriginal","useStickToBottomContext","BaseTooltip","React3","AvatarPrimitive","React4","createContext","useContext","useState","useRef","useLayoutEffect","HoverCardPrimitive","React6","getDomain","getFaviconUrl","Globe","React7","ChevronUp","ChevronDown","ExternalLink","React8","React9","React10","TextShimmerLoader","ChevronDownIcon","ThumbsUpIcon","ThumbsDownIcon","XIcon","React11","Fragment","React12","BasePopover","React13","formatDate","PlusIcon","CheckIcon","React14","TrashIcon","React15","DEFAULT_MCP_UI_SANDBOX","React16","parseMCPUIMessage","Loader","useCallback","useMemo","CopyIcon","MessageActions","React19","ReactDOM","useId","DEFAULT_MAX_FILE_SIZE","DEFAULT_ALLOWED_TYPES","getAttachmentType","fileToBase64","generateAttachmentId","error","React22","useReducer","useThreadManager","useCopilot","useEffect","createServerAdapter","createLocalStorageAdapter","StatusBadge","svgProps"],"mappings":"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","file":"index.cjs","sourcesContent":["import { memo, ComponentProps } from \"react\";\nimport { Streamdown, LinkSafetyConfig } from \"streamdown\";\nimport { code } from \"@streamdown/code\";\n\nexport type MarkdownProps = {\n children: string;\n id?: string;\n className?: string;\n isStreaming?: boolean;\n /** Link safety modal configuration. Disabled by default. */\n linkSafety?: LinkSafetyConfig;\n};\n\n// Normalized heading component for chat UI (same size, just bold)\n// Ignore Streamdown's className to prevent its text-3xl etc. from overriding\nconst createHeading = (Tag: \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\") => {\n const HeadingComponent = ({\n children,\n className: _,\n ...props\n }: ComponentProps<typeof Tag>) => (\n <Tag className=\"text-[1em] font-semibold my-2 first:mt-0\" {...props}>\n {children}\n </Tag>\n );\n HeadingComponent.displayName = Tag.toUpperCase();\n return HeadingComponent;\n};\n\nconst headingComponents = {\n h1: createHeading(\"h1\"),\n h2: createHeading(\"h2\"),\n h3: createHeading(\"h3\"),\n h4: createHeading(\"h4\"),\n h5: createHeading(\"h5\"),\n h6: createHeading(\"h6\"),\n};\n\nfunction MarkdownComponent({\n children,\n className,\n isStreaming = false,\n linkSafety = { enabled: false },\n}: MarkdownProps) {\n return (\n <div className={className}>\n <Streamdown\n plugins={{ code }}\n isAnimating={isStreaming}\n components={headingComponents}\n linkSafety={linkSafety}\n >\n {children}\n </Streamdown>\n </div>\n );\n}\n\nconst Markdown = memo(MarkdownComponent);\nMarkdown.displayName = \"Markdown\";\n\nexport { Markdown };\nexport type { LinkSafetyConfig } from \"streamdown\";\n","import { cn } from \"../../lib/utils\";\nimport React from \"react\";\n\nexport type CodeBlockProps = {\n children?: React.ReactNode;\n className?: string;\n} & React.HTMLProps<HTMLDivElement>;\n\nfunction CodeBlock({ children, className, ...props }: CodeBlockProps) {\n return (\n <div\n className={cn(\n \"not-prose flex w-full flex-col overflow-clip border\",\n \"border-border bg-card text-card-foreground rounded-xl\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport type CodeBlockCodeProps = {\n code: string;\n language?: string;\n className?: string;\n} & React.HTMLProps<HTMLDivElement>;\n\nfunction CodeBlockCode({\n code,\n language = \"plaintext\",\n className,\n ...props\n}: CodeBlockCodeProps) {\n const classNames = cn(\n \"w-full overflow-x-auto text-[13px] [&>pre]:px-4 [&>pre]:py-4\",\n className,\n );\n\n return (\n <div className={classNames} {...props}>\n <pre>\n <code data-language={language}>{code}</code>\n </pre>\n </div>\n );\n}\n\nexport type CodeBlockGroupProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction CodeBlockGroup({\n children,\n className,\n ...props\n}: CodeBlockGroupProps) {\n return (\n <div\n className={cn(\"flex items-center justify-between\", className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport { CodeBlockGroup, CodeBlockCode, CodeBlock };\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst buttonVariants = cva(\n \"csdk-button inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white shadow-sm hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n lg: \"h-10 rounded-md px-8\",\n icon: \"h-9 w-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nexport interface ButtonProps\n extends\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n );\n },\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","import { cn } from \"../../lib/utils\";\n\nfunction ThumbsUpIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M7 10v12\" />\n <path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\" />\n </svg>\n );\n}\n\nfunction ThumbsDownIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M17 14V2\" />\n <path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z\" />\n </svg>\n );\n}\n\nfunction XIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\ntype FeedbackBarProps = {\n className?: string;\n title?: string;\n icon?: React.ReactNode;\n onHelpful?: () => void;\n onNotHelpful?: () => void;\n onClose?: () => void;\n};\n\nexport function FeedbackBar({\n className,\n title,\n icon,\n onHelpful,\n onNotHelpful,\n onClose,\n}: FeedbackBarProps) {\n return (\n <div\n className={cn(\n \"bg-background border-border inline-flex rounded-[12px] border text-sm\",\n className,\n )}\n >\n <div className=\"flex w-full items-center justify-between\">\n <div className=\"flex flex-1 items-center justify-start gap-4 py-3 pl-4\">\n {icon}\n <span className=\"text-foreground font-medium\">{title}</span>\n </div>\n <div className=\"flex items-center justify-center gap-0.5 px-3 py-0\">\n <button\n type=\"button\"\n className=\"text-muted-foreground hover:text-foreground flex size-8 items-center justify-center rounded-md transition-colors\"\n aria-label=\"Helpful\"\n onClick={onHelpful}\n >\n <ThumbsUpIcon className=\"size-4\" />\n </button>\n <button\n type=\"button\"\n className=\"text-muted-foreground hover:text-foreground flex size-8 items-center justify-center rounded-md transition-colors\"\n aria-label=\"Not helpful\"\n onClick={onNotHelpful}\n >\n <ThumbsDownIcon className=\"size-4\" />\n </button>\n </div>\n <div className=\"border-border flex items-center justify-center border-l\">\n <button\n type=\"button\"\n onClick={onClose}\n className=\"text-muted-foreground hover:text-foreground flex items-center justify-center rounded-md p-3\"\n aria-label=\"Close\"\n >\n <XIcon className=\"size-5\" />\n </button>\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { cn } from \"../../lib/utils\";\nimport {\n StickToBottom as StickToBottomOriginal,\n useStickToBottomContext,\n} from \"use-stick-to-bottom\";\n\n// Cast to fix React types version mismatch in monorepo\nconst StickToBottom = StickToBottomOriginal as unknown as React.FC<\n React.PropsWithChildren<{\n className?: string;\n resize?: string;\n initial?: string;\n role?: string;\n }>\n> & { Content: React.FC<React.PropsWithChildren<{ className?: string }>> };\n\n// Re-export the context hook for ScrollButton\nfunction useChatContainer() {\n const context = useStickToBottomContext();\n return {\n isAtBottom: context.isAtBottom,\n scrollToBottom: context.scrollToBottom,\n };\n}\n\nexport type ChatContainerRootProps = {\n children: React.ReactNode;\n className?: string;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nexport type ChatContainerContentProps = {\n children: React.ReactNode;\n className?: string;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nexport type ChatContainerScrollAnchorProps = {\n className?: string;\n ref?: React.RefObject<HTMLDivElement>;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nfunction ChatContainerRoot({\n children,\n className,\n ...props\n}: ChatContainerRootProps) {\n return (\n <StickToBottom\n className={cn(\"min-h-0\", className)}\n resize=\"smooth\"\n initial=\"instant\"\n role=\"log\"\n {...props}\n >\n {children}\n </StickToBottom>\n );\n}\n\nfunction ChatContainerContent({\n children,\n className,\n ...props\n}: ChatContainerContentProps) {\n return (\n <StickToBottom.Content\n className={cn(\"flex w-full flex-col\", className)}\n {...props}\n >\n {children}\n </StickToBottom.Content>\n );\n}\n\nfunction ChatContainerScrollAnchor({\n className,\n ...props\n}: ChatContainerScrollAnchorProps) {\n return (\n <div\n className={cn(\"h-px w-full shrink-0 scroll-mt-4\", className)}\n aria-hidden=\"true\"\n {...props}\n />\n );\n}\n\nexport {\n ChatContainerRoot,\n ChatContainerContent,\n ChatContainerScrollAnchor,\n useChatContainer,\n};\n","import { Button, buttonVariants } from \"./button\";\nimport { cn } from \"../../lib/utils\";\nimport { type VariantProps } from \"class-variance-authority\";\nimport { useChatContainer } from \"./chat-container\";\n\nfunction ChevronDownIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\nexport type ScrollButtonProps = {\n className?: string;\n variant?: VariantProps<typeof buttonVariants>[\"variant\"];\n size?: VariantProps<typeof buttonVariants>[\"size\"];\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nfunction ScrollButton({\n className,\n variant = \"secondary\",\n size = \"sm\",\n ...props\n}: ScrollButtonProps) {\n const { isAtBottom, scrollToBottom } = useChatContainer();\n\n return (\n <Button\n variant={variant}\n size={size}\n className={cn(\n \"h-10 w-10 rounded-full transition-all duration-150 ease-out shadow-md bg-background\",\n !isAtBottom\n ? \"translate-y-0 scale-100 opacity-100\"\n : \"pointer-events-none translate-y-4 scale-95 opacity-0\",\n className,\n )}\n onClick={() => scrollToBottom()}\n {...props}\n >\n <ChevronDownIcon className=\"h-5 w-5\" />\n </Button>\n );\n}\n\nexport { ScrollButton };\n","\"use client\";\n\nimport React from \"react\";\nimport { Tooltip as BaseTooltip } from \"@base-ui/react/tooltip\";\nimport { cn } from \"../../lib/utils\";\n\n// ============================================\n// TooltipProvider\n// ============================================\n\nexport type TooltipProviderProps = {\n children: React.ReactNode;\n delayDuration?: number;\n};\n\nfunction TooltipProvider({\n children,\n delayDuration = 300,\n}: TooltipProviderProps) {\n return (\n <BaseTooltip.Provider delay={delayDuration}>\n {children}\n </BaseTooltip.Provider>\n );\n}\n\n// ============================================\n// Tooltip (Root)\n// ============================================\n\nexport type TooltipProps = {\n children: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n};\n\nfunction Tooltip({ children, open, defaultOpen, onOpenChange }: TooltipProps) {\n return (\n <BaseTooltip.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n >\n {children}\n </BaseTooltip.Root>\n );\n}\n\n// ============================================\n// TooltipTrigger\n// ============================================\n\nexport type TooltipTriggerProps = {\n children: React.ReactNode;\n asChild?: boolean;\n disabled?: boolean;\n} & React.ComponentPropsWithoutRef<\"button\">;\n\nfunction TooltipTrigger({\n children,\n asChild,\n disabled,\n ...props\n}: TooltipTriggerProps) {\n if (asChild && React.isValidElement(children)) {\n return (\n <BaseTooltip.Trigger disabled={disabled} render={children} {...props} />\n );\n }\n\n return (\n <BaseTooltip.Trigger disabled={disabled} {...props}>\n {children}\n </BaseTooltip.Trigger>\n );\n}\n\n// ============================================\n// TooltipContent\n// ============================================\n\nexport type TooltipContentProps = {\n children: React.ReactNode;\n className?: string;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n align?: \"start\" | \"center\" | \"end\";\n sideOffset?: number;\n showArrow?: boolean;\n};\n\nfunction TooltipContent({\n children,\n className,\n side = \"top\",\n align = \"center\",\n sideOffset = 8,\n showArrow = true,\n}: TooltipContentProps) {\n return (\n <BaseTooltip.Portal>\n <BaseTooltip.Positioner side={side} align={align} sideOffset={sideOffset}>\n <BaseTooltip.Popup\n className={cn(\n \"z-50 rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground shadow-md\",\n \"animate-in fade-in-0 zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n className,\n )}\n >\n {children}\n {showArrow && <BaseTooltip.Arrow className=\"fill-primary\" />}\n </BaseTooltip.Popup>\n </BaseTooltip.Positioner>\n </BaseTooltip.Portal>\n );\n}\n\n// ============================================\n// Exports\n// ============================================\n\nexport { TooltipProvider, Tooltip, TooltipTrigger, TooltipContent };\n","import * as React from \"react\";\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst Avatar = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full\",\n className,\n )}\n {...props}\n />\n));\nAvatar.displayName = AvatarPrimitive.Root.displayName;\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn(\"aspect-square h-full w-full object-cover\", className)}\n {...props}\n />\n));\nAvatarImage.displayName = AvatarPrimitive.Image.displayName;\n\nconst AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n \"csdk-avatar-fallback flex h-full w-full items-center justify-center rounded-full bg-muted\",\n className,\n )}\n {...props}\n />\n));\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;\n\nexport { Avatar, AvatarImage, AvatarFallback };\n","import { Avatar, AvatarFallback, AvatarImage } from \"./avatar\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"./tooltip\";\nimport { cn } from \"../../lib/utils\";\nimport { Markdown } from \"./markdown\";\n\nexport type MessageProps = {\n children: React.ReactNode;\n className?: string;\n} & React.HTMLProps<HTMLDivElement>;\n\nconst Message = ({ children, className, ...props }: MessageProps) => (\n <div className={cn(\"csdk-message flex gap-3\", className)} {...props}>\n {children}\n </div>\n);\n\nexport type MessageAvatarProps = {\n /** Image source URL */\n src?: string;\n /** Alt text for the image */\n alt?: string;\n /** Text fallback (e.g. \"AI\") */\n fallback?: string;\n /** Icon/component fallback (takes precedence over text fallback when src is empty) */\n fallbackIcon?: React.ReactNode;\n /** Custom avatar component - when provided, replaces the default avatar */\n children?: React.ReactNode;\n delayMs?: number;\n className?: string;\n};\n\nconst MessageAvatar = ({\n src,\n alt = \"Avatar\",\n fallback,\n fallbackIcon,\n children,\n delayMs,\n className,\n}: MessageAvatarProps) => {\n // If custom children provided, render them in a wrapper with proper sizing\n if (children) {\n return (\n <span className={cn(\"csdk-avatar flex shrink-0 size-7\", className)}>\n {children}\n </span>\n );\n }\n\n return (\n <Avatar className={cn(\"csdk-avatar size-7 shrink-0\", className)}>\n <AvatarImage src={src} alt={alt} />\n <AvatarFallback delayMs={delayMs}>\n {fallbackIcon || fallback}\n </AvatarFallback>\n </Avatar>\n );\n};\n\nexport type MessageContentProps = {\n children: React.ReactNode;\n markdown?: boolean;\n className?: string;\n /** Font size variant: 'sm' (14px), 'base' (16px), 'lg' (18px) */\n size?: \"sm\" | \"base\" | \"lg\";\n} & React.ComponentProps<typeof Markdown> &\n Omit<React.HTMLProps<HTMLDivElement>, \"size\">;\n\nconst textSizeMap = {\n sm: \"text-sm\",\n base: \"text-base\",\n lg: \"text-lg\",\n};\n\nconst MessageContent = ({\n children,\n markdown = false,\n className,\n size = \"sm\",\n ...props\n}: MessageContentProps) => {\n const classNames = cn(\n \"csdk-message-content rounded-lg p-2 break-words whitespace-normal max-w-full overflow-x-auto overflow-y-hidden\",\n // Typography - simple Tailwind utilities (no prose)\n \"[&_p]:my-1 \",\n \"[&_ul]:my-1 [&_ul]:pl-4 [&_ul]:list-disc [&_ul]:list-outside\",\n \"[&_ol]:my-1 [&_ol]:pl-4 [&_ol]:list-decimal [&_ol]:list-outside\",\n \"[&_li]:my-0.5 [&_li]:pl-0\",\n \"[&_pre]:my-2 [&_blockquote]:my-2 [&_blockquote]:pl-3 [&_blockquote]:border-l-2 [&_blockquote]:border-current/30\",\n \"[&_code]:bg-current/10 [&_code]:px-1 [&_code]:rounded [&_code]:text-[0.9em]\",\n \"[&_a]:underline [&_a]:text-[var(--csdk-link-color)] [&_a]:[overflow-wrap:anywhere]\",\n \"[&_button[data-streamdown='link']]:underline [&_button[data-streamdown='link']]:text-[var(--csdk-link-color)] [&_button[data-streamdown='link']]:[overflow-wrap:anywhere] [&_button[data-streamdown='link']]:font-medium\",\n \"[&_.text-primary]:text-[var(--csdk-link-color)]\",\n \"[&_strong]:font-semibold\",\n textSizeMap[size],\n className,\n );\n\n return markdown ? (\n <Markdown className={classNames} {...props}>\n {children as string}\n </Markdown>\n ) : (\n <div className={classNames} {...props}>\n {children}\n </div>\n );\n};\n\nexport type MessageActionsProps = {\n children: React.ReactNode;\n className?: string;\n} & React.HTMLProps<HTMLDivElement>;\n\nconst MessageActions = ({\n children,\n className,\n ...props\n}: MessageActionsProps) => (\n <div\n className={cn(\n \"csdk-message-actions text-muted-foreground flex items-center gap-2\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n);\n\nexport type MessageActionProps = {\n className?: string;\n tooltip: React.ReactNode;\n children: React.ReactNode;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n} & React.ComponentProps<typeof Tooltip>;\n\nconst MessageAction = ({\n tooltip,\n children,\n className,\n side = \"top\",\n ...props\n}: MessageActionProps) => {\n return (\n <TooltipProvider>\n <Tooltip {...props}>\n <TooltipTrigger asChild>{children}</TooltipTrigger>\n <TooltipContent side={side} className={className}>\n {tooltip}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n};\n\nexport {\n Message,\n MessageAvatar,\n MessageContent,\n MessageActions,\n MessageAction,\n};\n","import * as React from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst Textarea = React.forwardRef<\n HTMLTextAreaElement,\n React.ComponentProps<\"textarea\">\n>(({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n});\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","\"use client\";\n\nimport React, {\n createContext,\n useContext,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\nimport { Textarea } from \"./textarea\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"./tooltip\";\nimport { cn } from \"../../lib/utils\";\n\ntype PromptInputContextType = {\n isLoading: boolean;\n value: string;\n setValue: (value: string) => void;\n maxHeight: number | string;\n onSubmit?: () => void;\n disabled?: boolean;\n textareaRef: React.MutableRefObject<HTMLTextAreaElement | null>;\n};\n\nconst PromptInputContext = createContext<PromptInputContextType>({\n isLoading: false,\n value: \"\",\n setValue: () => {},\n maxHeight: 240,\n onSubmit: undefined,\n disabled: false,\n textareaRef: { current: null },\n});\n\nfunction usePromptInput() {\n return useContext(PromptInputContext);\n}\n\nexport type PromptInputProps = {\n isLoading?: boolean;\n value?: string;\n onValueChange?: (value: string) => void;\n maxHeight?: number | string;\n onSubmit?: () => void;\n children: React.ReactNode;\n className?: string;\n disabled?: boolean;\n} & React.ComponentProps<\"div\">;\n\nfunction PromptInput({\n className,\n isLoading = false,\n maxHeight = 240,\n value,\n onValueChange,\n onSubmit,\n children,\n disabled = false,\n onClick,\n ...props\n}: PromptInputProps) {\n const [internalValue, setInternalValue] = useState(value || \"\");\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n const handleChange = (newValue: string) => {\n setInternalValue(newValue);\n onValueChange?.(newValue);\n };\n\n const handleClick: React.MouseEventHandler<HTMLDivElement> = (e) => {\n if (!disabled) textareaRef.current?.focus();\n onClick?.(e);\n };\n\n return (\n <TooltipProvider>\n <PromptInputContext.Provider\n value={{\n isLoading,\n value: value ?? internalValue,\n setValue: onValueChange ?? handleChange,\n maxHeight,\n onSubmit,\n disabled,\n textareaRef,\n }}\n >\n <div\n onClick={handleClick}\n className={cn(\n \"csdk-input border-input bg-background cursor-text rounded-3xl border p-2 shadow-xs\",\n disabled && \"cursor-not-allowed opacity-60\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </PromptInputContext.Provider>\n </TooltipProvider>\n );\n}\n\nexport type PromptInputTextareaProps = {\n disableAutosize?: boolean;\n} & React.ComponentProps<typeof Textarea>;\n\nfunction PromptInputTextarea({\n className,\n onKeyDown,\n disableAutosize = false,\n ...props\n}: PromptInputTextareaProps) {\n const { value, setValue, maxHeight, onSubmit, disabled, textareaRef } =\n usePromptInput();\n\n const adjustHeight = (el: HTMLTextAreaElement | null) => {\n if (!el || disableAutosize) return;\n\n el.style.height = \"auto\";\n\n if (typeof maxHeight === \"number\") {\n el.style.height = `${Math.min(el.scrollHeight, maxHeight)}px`;\n } else {\n el.style.height = `min(${el.scrollHeight}px, ${maxHeight})`;\n }\n };\n\n const handleRef = (el: HTMLTextAreaElement | null) => {\n textareaRef.current = el;\n adjustHeight(el);\n };\n\n useLayoutEffect(() => {\n if (!textareaRef.current || disableAutosize) return;\n\n const el = textareaRef.current;\n el.style.height = \"auto\";\n\n if (typeof maxHeight === \"number\") {\n el.style.height = `${Math.min(el.scrollHeight, maxHeight)}px`;\n } else {\n el.style.height = `min(${el.scrollHeight}px, ${maxHeight})`;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, maxHeight, disableAutosize]);\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n adjustHeight(e.target);\n setValue(e.target.value);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n onSubmit?.();\n }\n onKeyDown?.(e);\n };\n\n return (\n <Textarea\n ref={handleRef}\n value={value}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n className={cn(\n \"csdk-input-textarea text-foreground min-h-[44px] w-full resize-none border-none bg-transparent shadow-none outline-none focus-visible:ring-0 focus-visible:ring-offset-0\",\n className,\n )}\n rows={1}\n disabled={disabled}\n {...props}\n />\n );\n}\n\nexport type PromptInputActionsProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction PromptInputActions({\n children,\n className,\n ...props\n}: PromptInputActionsProps) {\n return (\n <div className={cn(\"flex items-center gap-2\", className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport type PromptInputActionProps = {\n className?: string;\n tooltip: React.ReactNode;\n children: React.ReactNode;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n};\n\nfunction PromptInputAction({\n tooltip,\n children,\n className,\n side = \"top\",\n}: PromptInputActionProps) {\n const { disabled } = usePromptInput();\n\n return (\n <Tooltip>\n <TooltipTrigger\n asChild\n disabled={disabled}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n {children}\n </TooltipTrigger>\n <TooltipContent side={side} className={className} showArrow>\n {tooltip}\n </TooltipContent>\n </Tooltip>\n );\n}\n\nexport {\n PromptInput,\n PromptInputTextarea,\n PromptInputActions,\n PromptInputAction,\n};\n","import * as React from \"react\";\nimport * as HoverCardPrimitive from \"@radix-ui/react-hover-card\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst HoverCard = HoverCardPrimitive.Root;\n\nconst HoverCardTrigger = HoverCardPrimitive.Trigger;\n\nconst HoverCardContent = React.forwardRef<\n React.ElementRef<typeof HoverCardPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof HoverCardPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <HoverCardPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n />\n));\nHoverCardContent.displayName = HoverCardPrimitive.Content.displayName;\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent };\n","\"use client\";\n\nimport { HoverCard, HoverCardContent, HoverCardTrigger } from \"./hover-card\";\nimport { cn } from \"../../lib/utils\";\nimport { createContext, useContext } from \"react\";\n\nconst SourceContext = createContext<{\n href: string;\n domain: string;\n} | null>(null);\n\nfunction useSourceContext() {\n const ctx = useContext(SourceContext);\n if (!ctx) throw new Error(\"Source.* must be used inside <Source>\");\n return ctx;\n}\n\nexport type SourceProps = {\n href: string;\n children: React.ReactNode;\n};\n\nexport function Source({ href, children }: SourceProps) {\n let domain = \"\";\n try {\n domain = new URL(href).hostname;\n } catch {\n domain = href.split(\"/\").pop() || href;\n }\n\n return (\n <SourceContext.Provider value={{ href, domain }}>\n <HoverCard openDelay={150} closeDelay={0}>\n {children}\n </HoverCard>\n </SourceContext.Provider>\n );\n}\n\nexport type SourceTriggerProps = {\n label?: string | number;\n showFavicon?: boolean;\n className?: string;\n};\n\nexport function SourceTrigger({\n label,\n showFavicon = false,\n className,\n}: SourceTriggerProps) {\n const { href, domain } = useSourceContext();\n const labelToShow = label ?? domain.replace(\"www.\", \"\");\n\n return (\n <HoverCardTrigger asChild>\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cn(\n \"inline-flex h-7 items-center gap-1.5 rounded-full border border-border/50 bg-background px-2.5 text-xs text-foreground/80 no-underline shadow-sm transition-all duration-150\",\n \"hover:bg-muted hover:border-border hover:shadow-md hover:text-foreground\",\n className,\n )}\n >\n {showFavicon && (\n <img\n src={`https://www.google.com/s2/favicons?sz=64&domain_url=${encodeURIComponent(\n href,\n )}`}\n alt=\"\"\n width={16}\n height={16}\n className=\"size-4 rounded-full\"\n />\n )}\n <span className=\"truncate max-w-28 font-medium\">{labelToShow}</span>\n </a>\n </HoverCardTrigger>\n );\n}\n\nexport type SourceContentProps = {\n title: string;\n description: string;\n className?: string;\n};\n\nexport function SourceContent({\n title,\n description,\n className,\n}: SourceContentProps) {\n const { href, domain } = useSourceContext();\n\n return (\n <HoverCardContent\n className={cn(\"w-80 p-0 shadow-lg border border-border/50\", className)}\n sideOffset={8}\n >\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex flex-col gap-2.5 p-4 hover:bg-muted/50 transition-colors rounded-lg\"\n >\n <div className=\"flex items-center gap-2\">\n <img\n src={`https://www.google.com/s2/favicons?sz=64&domain_url=${encodeURIComponent(\n href,\n )}`}\n alt=\"\"\n className=\"size-5 rounded-full\"\n width={20}\n height={20}\n />\n <div className=\"text-foreground/70 truncate text-sm\">\n {domain.replace(\"www.\", \"\")}\n </div>\n </div>\n <div className=\"line-clamp-2 text-sm font-semibold text-foreground\">\n {title}\n </div>\n {description && (\n <div className=\"text-muted-foreground line-clamp-3 text-sm leading-relaxed\">\n {description}\n </div>\n )}\n </a>\n </HoverCardContent>\n );\n}\n\n// ============================================\n// SourceGroup - Multiple sources in a row\n// ============================================\n\nexport type SourceItem = {\n href: string;\n title?: string;\n description?: string;\n};\n\nexport type SourceGroupProps = {\n /** Array of sources to display */\n sources: SourceItem[];\n /** Label text (default: \"Sources\") */\n label?: string;\n /** Maximum sources to show before \"+N more\" */\n maxVisible?: number;\n /** Show favicon for each source */\n showFavicon?: boolean;\n /** Use numbered labels (1, 2, 3...) instead of domain */\n numbered?: boolean;\n /** Additional CSS classes */\n className?: string;\n};\n\n/**\n * Display a group of sources in a horizontal layout.\n * Each source shows a hover card with details on hover.\n *\n * @example\n * ```tsx\n * <SourceGroup\n * sources={[\n * { href: \"https://example.com\", title: \"Example\", description: \"...\" },\n * ]}\n * numbered\n * showFavicon\n * />\n * ```\n */\nexport function SourceGroup({\n sources,\n label,\n maxVisible = 5,\n showFavicon = true,\n numbered = false,\n className,\n}: SourceGroupProps) {\n if (!sources || sources.length === 0) return null;\n\n const visibleSources = sources.slice(0, maxVisible);\n const hiddenCount = sources.length - maxVisible;\n\n return (\n <div className={cn(\"flex flex-wrap items-center gap-2\", className)}>\n {label && (\n <span className=\"text-muted-foreground text-xs font-medium\">\n {label}\n </span>\n )}\n {visibleSources.map((source, index) => (\n <Source key={index} href={source.href}>\n <SourceTrigger\n label={numbered ? index + 1 : undefined}\n showFavicon={showFavicon}\n />\n {(source.title || source.description) && (\n <SourceContent\n title={source.title || getDomain(source.href)}\n description={source.description || source.href}\n />\n )}\n </Source>\n ))}\n {hiddenCount > 0 && (\n <span className=\"text-muted-foreground text-xs font-medium bg-muted px-2 py-1 rounded-full\">\n +{hiddenCount} more\n </span>\n )}\n </div>\n );\n}\n\n// ============================================\n// SimpleSource - Standalone source badge (no hover)\n// ============================================\n\nexport type SimpleSourceProps = {\n /** Source URL */\n href: string;\n /** Label (number or text) */\n label?: string | number;\n /** Show favicon */\n showFavicon?: boolean;\n /** Additional CSS classes */\n className?: string;\n};\n\n/**\n * Simple source badge without hover card.\n * Use for inline citations like [1], [2], etc.\n */\nexport function SimpleSource({\n href,\n label,\n showFavicon = false,\n className,\n}: SimpleSourceProps) {\n let domain = \"\";\n try {\n domain = new URL(href).hostname.replace(\"www.\", \"\");\n } catch {\n domain = href;\n }\n\n const displayLabel = label ?? domain;\n\n return (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cn(\n \"bg-muted text-muted-foreground hover:bg-primary/20 hover:text-primary\",\n \"inline-flex h-5 items-center gap-1 rounded-full text-xs no-underline transition-colors\",\n showFavicon ? \"pr-2 pl-1\" : \"px-1.5\",\n className,\n )}\n >\n {showFavicon && (\n <img\n src={`https://www.google.com/s2/favicons?sz=64&domain_url=${encodeURIComponent(href)}`}\n alt=\"\"\n width={14}\n height={14}\n className=\"size-3.5 rounded-full\"\n />\n )}\n <span className=\"truncate tabular-nums font-normal\">{displayLabel}</span>\n </a>\n );\n}\n\n// ============================================\n// Utility Functions\n// ============================================\n\nfunction getDomain(url: string): string {\n try {\n return new URL(url).hostname.replace(\"www.\", \"\");\n } catch {\n return url;\n }\n}\n","\"use client\";\n\nimport { cn } from \"../../lib/utils\";\nimport type {\n WebSearchResult,\n WebSearchResponse,\n} from \"../../../core/tools/webSearch/types\";\n\n// ============================================\n// SearchResults Component\n// ============================================\n\nexport interface SearchResultsProps {\n /** Search results to display */\n results: WebSearchResult[];\n /** Additional CSS classes */\n className?: string;\n /** Display variant */\n variant?: \"cards\" | \"list\" | \"compact\";\n /** Maximum results to show (default: all) */\n maxResults?: number;\n /** Show relevance scores (if available) */\n showScores?: boolean;\n /** Show publication dates (if available) */\n showDates?: boolean;\n}\n\n/**\n * Display web search results with multiple layout options.\n *\n * @example\n * ```tsx\n * // Compact inline citations\n * <SearchResults results={searchResults} variant=\"compact\" />\n *\n * // Card layout with full details\n * <SearchResults results={searchResults} variant=\"cards\" />\n *\n * // List layout\n * <SearchResults results={searchResults} variant=\"list\" />\n * ```\n */\nexport function SearchResults({\n results,\n className,\n variant = \"cards\",\n maxResults,\n showScores = false,\n showDates = false,\n}: SearchResultsProps) {\n const displayResults = maxResults ? results.slice(0, maxResults) : results;\n\n if (displayResults.length === 0) {\n return (\n <div className={cn(\"text-muted-foreground text-sm\", className)}>\n No results found\n </div>\n );\n }\n\n if (variant === \"compact\") {\n return (\n <div className={cn(\"flex flex-wrap gap-2\", className)}>\n {displayResults.map((result, i) => (\n <SearchResultCompact key={i} result={result} index={i + 1} />\n ))}\n </div>\n );\n }\n\n if (variant === \"list\") {\n return (\n <div className={cn(\"space-y-2\", className)}>\n {displayResults.map((result, i) => (\n <SearchResultList\n key={i}\n result={result}\n index={i + 1}\n showScore={showScores}\n showDate={showDates}\n />\n ))}\n </div>\n );\n }\n\n // Default: cards variant\n return (\n <div className={cn(\"grid gap-2\", className)}>\n {displayResults.map((result, i) => (\n <SearchResultCard\n key={i}\n result={result}\n showScore={showScores}\n showDate={showDates}\n />\n ))}\n </div>\n );\n}\n\n// ============================================\n// Sub-components\n// ============================================\n\ninterface SearchResultCardProps {\n result: WebSearchResult;\n showScore?: boolean;\n showDate?: boolean;\n}\n\nfunction SearchResultCard({\n result,\n showScore,\n showDate,\n}: SearchResultCardProps) {\n const domain = result.domain || getDomain(result.url);\n\n return (\n <a\n href={result.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"group block p-3 border rounded-lg hover:bg-muted/50 transition-colors\"\n >\n <div className=\"flex items-start gap-3\">\n <img\n src={getFaviconUrl(result.url)}\n alt=\"\"\n className=\"w-5 h-5 mt-0.5 rounded-sm\"\n width={20}\n height={20}\n />\n <div className=\"flex-1 min-w-0\">\n <h4 className=\"font-medium text-sm group-hover:text-primary truncate\">\n {result.title}\n </h4>\n <p className=\"text-xs text-muted-foreground mt-1 line-clamp-2\">\n {result.content}\n </p>\n <div className=\"flex items-center gap-2 mt-1\">\n <span className=\"text-xs text-muted-foreground/60 truncate\">\n {domain}\n </span>\n {showDate && result.publishedDate && (\n <span className=\"text-xs text-muted-foreground/60\">\n {formatDate(result.publishedDate)}\n </span>\n )}\n {showScore && result.score !== undefined && (\n <span className=\"text-xs text-muted-foreground/60\">\n {(result.score * 100).toFixed(0)}% match\n </span>\n )}\n </div>\n </div>\n </div>\n </a>\n );\n}\n\ninterface SearchResultListProps {\n result: WebSearchResult;\n index: number;\n showScore?: boolean;\n showDate?: boolean;\n}\n\nfunction SearchResultList({\n result,\n index,\n showScore,\n showDate,\n}: SearchResultListProps) {\n const domain = result.domain || getDomain(result.url);\n\n return (\n <a\n href={result.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"group flex items-start gap-2 py-1.5 hover:bg-muted/30 rounded px-1 -mx-1 transition-colors\"\n >\n <span className=\"text-xs text-muted-foreground/60 mt-0.5 w-4 text-right flex-shrink-0\">\n {index}.\n </span>\n <img\n src={getFaviconUrl(result.url)}\n alt=\"\"\n className=\"w-4 h-4 mt-0.5 rounded-sm flex-shrink-0\"\n width={16}\n height={16}\n />\n <div className=\"flex-1 min-w-0\">\n <span className=\"text-sm group-hover:text-primary\">{result.title}</span>\n <span className=\"text-xs text-muted-foreground ml-2\">{domain}</span>\n {showDate && result.publishedDate && (\n <span className=\"text-xs text-muted-foreground/60 ml-2\">\n {formatDate(result.publishedDate)}\n </span>\n )}\n {showScore && result.score !== undefined && (\n <span className=\"text-xs text-muted-foreground/60 ml-2\">\n ({(result.score * 100).toFixed(0)}%)\n </span>\n )}\n </div>\n </a>\n );\n}\n\ninterface SearchResultCompactProps {\n result: WebSearchResult;\n index: number;\n}\n\nfunction SearchResultCompact({ result, index }: SearchResultCompactProps) {\n const domain = result.domain || getDomain(result.url);\n\n return (\n <a\n href={result.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1.5 px-2 py-1 text-xs bg-muted hover:bg-muted/80 rounded-md transition-colors\"\n title={result.title}\n >\n <img\n src={getFaviconUrl(result.url)}\n alt=\"\"\n className=\"w-3.5 h-3.5 rounded-sm\"\n width={14}\n height={14}\n />\n <span className=\"truncate max-w-[120px]\">{domain}</span>\n </a>\n );\n}\n\n// ============================================\n// SearchAnswer Component\n// ============================================\n\nexport interface SearchAnswerProps {\n /** AI-generated answer from search */\n answer: string;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Display an AI-generated answer summary from web search.\n * Useful when using providers like Tavily that generate summaries.\n */\nexport function SearchAnswer({ answer, className }: SearchAnswerProps) {\n return (\n <div\n className={cn(\n \"p-3 bg-muted/50 rounded-lg border-l-2 border-primary/50\",\n className,\n )}\n >\n <p className=\"text-sm\">{answer}</p>\n </div>\n );\n}\n\n// ============================================\n// SearchResultsWithAnswer Component\n// ============================================\n\nexport interface SearchResultsWithAnswerProps {\n /** Full web search response */\n response: WebSearchResponse;\n /** Additional CSS classes */\n className?: string;\n /** Results variant */\n variant?: \"cards\" | \"list\" | \"compact\";\n /** Show the AI answer (if available) */\n showAnswer?: boolean;\n /** Maximum results to show */\n maxResults?: number;\n}\n\n/**\n * Display complete web search response including answer and results.\n *\n * @example\n * ```tsx\n * <SearchResultsWithAnswer\n * response={webSearchResponse}\n * showAnswer={true}\n * variant=\"cards\"\n * />\n * ```\n */\nexport function SearchResultsWithAnswer({\n response,\n className,\n variant = \"cards\",\n showAnswer = true,\n maxResults,\n}: SearchResultsWithAnswerProps) {\n return (\n <div className={cn(\"space-y-3\", className)}>\n {showAnswer && response.answer && (\n <SearchAnswer answer={response.answer} />\n )}\n <SearchResults\n results={response.results}\n variant={variant}\n maxResults={maxResults}\n />\n {response.searchTime && (\n <p className=\"text-xs text-muted-foreground\">\n Found {response.results.length} results in {response.searchTime}ms\n </p>\n )}\n </div>\n );\n}\n\n// ============================================\n// Utility Functions\n// ============================================\n\nfunction getDomain(url: string): string {\n try {\n return new URL(url).hostname.replace(\"www.\", \"\");\n } catch {\n return url;\n }\n}\n\nfunction getFaviconUrl(url: string): string {\n try {\n const domain = new URL(url).hostname;\n return `https://www.google.com/s2/favicons?domain=${domain}&sz=32`;\n } catch {\n return \"\";\n }\n}\n\nfunction formatDate(dateStr: string): string {\n try {\n const date = new Date(dateStr);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n\n if (diffDays === 0) return \"Today\";\n if (diffDays === 1) return \"Yesterday\";\n if (diffDays < 7) return `${diffDays} days ago`;\n if (diffDays < 30) return `${Math.floor(diffDays / 7)} weeks ago`;\n if (diffDays < 365) return `${Math.floor(diffDays / 30)} months ago`;\n return `${Math.floor(diffDays / 365)} years ago`;\n } catch {\n return dateStr;\n }\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { ChevronDown, ChevronUp, ExternalLink, Globe } from \"lucide-react\";\n\n// ============================================\n// Types\n// ============================================\n\nexport interface Citation {\n /** Citation number (1-based) */\n index: number;\n /** Source URL */\n url: string;\n /** Source title */\n title: string;\n /** Domain name */\n domain?: string;\n /** Favicon URL */\n favicon?: string;\n}\n\nexport interface CitationsConfig {\n /** Show citations (default: true) */\n enabled?: boolean;\n /** Citation style */\n style?: \"badges\" | \"numbered\" | \"superscript\";\n /** Where to show sources */\n sourcesPosition?: \"bottom\" | \"inline\" | \"collapsible\";\n /** Max sources to show initially */\n maxVisible?: number;\n}\n\n// ============================================\n// CitationBadge - Inline numbered reference [1]\n// ============================================\n\nexport interface CitationBadgeProps {\n /** Citation number */\n index: number;\n /** Source URL for linking */\n url?: string;\n /** Hover tooltip */\n title?: string;\n /** Size variant */\n size?: \"sm\" | \"md\";\n /** Additional CSS classes */\n className?: string;\n /** Click handler */\n onClick?: () => void;\n}\n\n/**\n * Inline citation badge like [1], [2], etc.\n * Similar to Perplexity and ChatGPT citation style.\n *\n * @example\n * ```tsx\n * <CitationBadge index={1} url=\"https://example.com\" title=\"Source\" />\n * ```\n */\nexport function CitationBadge({\n index,\n url,\n title,\n size = \"sm\",\n className,\n onClick,\n}: CitationBadgeProps) {\n const sizeClasses = {\n sm: \"text-[10px] min-w-[16px] h-4 px-1\",\n md: \"text-xs min-w-[20px] h-5 px-1.5\",\n };\n\n const badge = (\n <span\n className={cn(\n \"inline-flex items-center justify-center rounded font-medium\",\n \"bg-primary/10 text-primary hover:bg-primary/20\",\n \"cursor-pointer transition-colors\",\n sizeClasses[size],\n className,\n )}\n title={title}\n onClick={onClick}\n >\n {index}\n </span>\n );\n\n if (url) {\n return (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex\"\n >\n {badge}\n </a>\n );\n }\n\n return badge;\n}\n\n// ============================================\n// CitationSuperscript - Superscript style [1]\n// ============================================\n\nexport interface CitationSuperscriptProps {\n index: number;\n url?: string;\n title?: string;\n className?: string;\n}\n\n/**\n * Superscript citation like academic papers.\n */\nexport function CitationSuperscript({\n index,\n url,\n title,\n className,\n}: CitationSuperscriptProps) {\n const sup = (\n <sup\n className={cn(\n \"text-[10px] text-primary hover:underline cursor-pointer ml-0.5\",\n className,\n )}\n title={title}\n >\n [{index}]\n </sup>\n );\n\n if (url) {\n return (\n <a href={url} target=\"_blank\" rel=\"noopener noreferrer\">\n {sup}\n </a>\n );\n }\n\n return sup;\n}\n\n// ============================================\n// SourcePill - Compact source chip\n// ============================================\n\nexport interface SourcePillProps {\n /** Citation data */\n citation: Citation;\n /** Show index number */\n showIndex?: boolean;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Compact source pill with favicon and domain.\n * Used in horizontal source bars.\n */\nexport function SourcePill({\n citation,\n showIndex = true,\n className,\n}: SourcePillProps) {\n const domain = citation.domain || getDomain(citation.url);\n const favicon = citation.favicon || getFaviconUrl(citation.url);\n\n return (\n <a\n href={citation.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n title={citation.title}\n className={cn(\n \"inline-flex items-center gap-1.5 px-2 py-1 text-xs rounded-full\",\n \"bg-muted hover:bg-muted/80 transition-colors\",\n \"text-muted-foreground hover:text-foreground\",\n className,\n )}\n >\n {showIndex && (\n <span className=\"text-[10px] font-medium text-primary\">\n {citation.index}\n </span>\n )}\n <img\n src={favicon}\n alt=\"\"\n className=\"w-3.5 h-3.5 rounded-sm\"\n width={14}\n height={14}\n onError={(e) => {\n (e.target as HTMLImageElement).style.display = \"none\";\n }}\n />\n <span className=\"truncate max-w-[100px]\">{domain}</span>\n </a>\n );\n}\n\n// ============================================\n// SourcesBar - Horizontal scrollable sources\n// ============================================\n\nexport interface SourcesBarProps {\n /** List of citations */\n citations: Citation[];\n /** Label text (default: \"Sources\") */\n label?: string;\n /** Max sources to show */\n maxVisible?: number;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Horizontal bar of source pills.\n * Similar to Perplexity's sources section.\n *\n * @example\n * ```tsx\n * <SourcesBar\n * citations={[\n * { index: 1, url: \"https://...\", title: \"Source 1\" },\n * { index: 2, url: \"https://...\", title: \"Source 2\" },\n * ]}\n * />\n * ```\n */\nexport function SourcesBar({\n citations,\n label = \"Sources\",\n maxVisible = 5,\n className,\n}: SourcesBarProps) {\n const visibleCitations = citations.slice(0, maxVisible);\n const hiddenCount = citations.length - maxVisible;\n\n if (citations.length === 0) return null;\n\n return (\n <div className={cn(\"flex items-center gap-2\", className)}>\n <span className=\"text-xs text-muted-foreground flex items-center gap-1\">\n <Globe className=\"w-3 h-3\" />\n {label}\n </span>\n <div className=\"flex items-center gap-1.5 overflow-x-auto\">\n {visibleCitations.map((citation) => (\n <SourcePill key={citation.index} citation={citation} />\n ))}\n {hiddenCount > 0 && (\n <span className=\"text-xs text-muted-foreground px-2\">\n +{hiddenCount} more\n </span>\n )}\n </div>\n </div>\n );\n}\n\n// ============================================\n// SourcesCollapsible - Expandable sources\n// ============================================\n\nexport interface SourcesCollapsibleProps {\n /** List of citations */\n citations: Citation[];\n /** Label text (default: \"Sources\") */\n label?: string;\n /** Start expanded (default: false) */\n defaultExpanded?: boolean;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Collapsible sources section that expands to show full list.\n *\n * @example\n * ```tsx\n * <SourcesCollapsible\n * citations={citations}\n * defaultExpanded={false}\n * />\n * ```\n */\nexport function SourcesCollapsible({\n citations,\n label = \"Sources\",\n defaultExpanded = false,\n className,\n}: SourcesCollapsibleProps) {\n const [expanded, setExpanded] = React.useState(defaultExpanded);\n\n if (citations.length === 0) return null;\n\n return (\n <div className={cn(\"border rounded-lg\", className)}>\n <button\n onClick={() => setExpanded(!expanded)}\n className=\"w-full flex items-center justify-between px-3 py-2 text-sm hover:bg-muted/50 transition-colors\"\n >\n <span className=\"flex items-center gap-2 text-muted-foreground\">\n <Globe className=\"w-4 h-4\" />\n {label} ({citations.length})\n </span>\n {expanded ? (\n <ChevronUp className=\"w-4 h-4 text-muted-foreground\" />\n ) : (\n <ChevronDown className=\"w-4 h-4 text-muted-foreground\" />\n )}\n </button>\n {expanded && (\n <div className=\"px-3 pb-3 space-y-2\">\n {citations.map((citation) => (\n <SourceItem key={citation.index} citation={citation} />\n ))}\n </div>\n )}\n </div>\n );\n}\n\n// ============================================\n// SourceItem - Full source row\n// ============================================\n\ninterface SourceItemProps {\n citation: Citation;\n}\n\nfunction SourceItem({ citation }: SourceItemProps) {\n const domain = citation.domain || getDomain(citation.url);\n const favicon = citation.favicon || getFaviconUrl(citation.url);\n\n return (\n <a\n href={citation.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex items-start gap-3 p-2 rounded-md hover:bg-muted/50 transition-colors group\"\n >\n <span className=\"flex items-center justify-center w-5 h-5 rounded bg-primary/10 text-primary text-xs font-medium flex-shrink-0\">\n {citation.index}\n </span>\n <img\n src={favicon}\n alt=\"\"\n className=\"w-4 h-4 mt-0.5 rounded-sm flex-shrink-0\"\n width={16}\n height={16}\n onError={(e) => {\n (e.target as HTMLImageElement).style.display = \"none\";\n }}\n />\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium group-hover:text-primary truncate\">\n {citation.title}\n </p>\n <p className=\"text-xs text-muted-foreground truncate\">{domain}</p>\n </div>\n <ExternalLink className=\"w-3.5 h-3.5 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity flex-shrink-0\" />\n </a>\n );\n}\n\n// ============================================\n// SourcesList - Simple numbered list\n// ============================================\n\nexport interface SourcesListProps {\n /** List of citations */\n citations: Citation[];\n /** Additional CSS classes */\n className?: string;\n /** Compact mode */\n compact?: boolean;\n}\n\n/**\n * Simple numbered list of sources.\n *\n * @example\n * ```tsx\n * <SourcesList citations={citations} compact />\n * ```\n */\nexport function SourcesList({\n citations,\n className,\n compact = false,\n}: SourcesListProps) {\n if (citations.length === 0) return null;\n\n if (compact) {\n return (\n <div className={cn(\"text-xs text-muted-foreground\", className)}>\n <span className=\"font-medium\">Sources: </span>\n {citations.map((c, i) => (\n <React.Fragment key={c.index}>\n <a\n href={c.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"hover:text-primary hover:underline\"\n >\n [{c.index}]\n </a>\n {i < citations.length - 1 && \" \"}\n </React.Fragment>\n ))}\n </div>\n );\n }\n\n return (\n <div className={cn(\"space-y-1\", className)}>\n {citations.map((citation) => (\n <SourceItem key={citation.index} citation={citation} />\n ))}\n </div>\n );\n}\n\n// ============================================\n// MessageWithCitations - Complete message wrapper\n// ============================================\n\nexport interface MessageWithCitationsProps {\n /** Message content (can contain citation placeholders) */\n children: React.ReactNode;\n /** Citations for this message */\n citations: Citation[];\n /** Citation display configuration */\n config?: CitationsConfig;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Wraps a message with citation support.\n * Shows sources bar or collapsible section based on config.\n *\n * @example\n * ```tsx\n * <MessageWithCitations\n * citations={[\n * { index: 1, url: \"...\", title: \"Source 1\" },\n * ]}\n * config={{ sourcesPosition: \"bottom\" }}\n * >\n * <p>According to research <CitationBadge index={1} />, ...</p>\n * </MessageWithCitations>\n * ```\n */\nexport function MessageWithCitations({\n children,\n citations,\n config = {},\n className,\n}: MessageWithCitationsProps) {\n const { enabled = true, sourcesPosition = \"bottom\", maxVisible = 5 } = config;\n\n if (!enabled || citations.length === 0) {\n return <div className={className}>{children}</div>;\n }\n\n return (\n <div className={cn(\"space-y-3\", className)}>\n <div>{children}</div>\n {sourcesPosition === \"bottom\" && (\n <SourcesBar citations={citations} maxVisible={maxVisible} />\n )}\n {sourcesPosition === \"collapsible\" && (\n <SourcesCollapsible citations={citations} />\n )}\n </div>\n );\n}\n\n// ============================================\n// Utility Functions\n// ============================================\n\nfunction getDomain(url: string): string {\n try {\n return new URL(url).hostname.replace(\"www.\", \"\");\n } catch {\n return url;\n }\n}\n\nfunction getFaviconUrl(url: string): string {\n try {\n const domain = new URL(url).hostname;\n return `https://www.google.com/s2/favicons?domain=${domain}&sz=32`;\n } catch {\n return \"\";\n }\n}\n\n/**\n * Convert OpenAI annotations to Citation format\n */\nexport function annotationsToCitations(\n annotations: Array<{\n type: string;\n url?: string;\n title?: string;\n start_index?: number;\n end_index?: number;\n }>,\n): Citation[] {\n const seen = new Set<string>();\n const citations: Citation[] = [];\n\n for (const annotation of annotations) {\n if (annotation.type === \"url_citation\" && annotation.url) {\n if (!seen.has(annotation.url)) {\n seen.add(annotation.url);\n citations.push({\n index: citations.length + 1,\n url: annotation.url,\n title: annotation.title || getDomain(annotation.url),\n domain: getDomain(annotation.url),\n });\n }\n }\n }\n\n return citations;\n}\n\n/**\n * Convert WebSearchResult array to Citation format\n */\nexport function resultsToCitations(\n results: Array<{\n url: string;\n title: string;\n domain?: string;\n }>,\n): Citation[] {\n return results.map((result, index) => ({\n index: index + 1,\n url: result.url,\n title: result.title,\n domain: result.domain || getDomain(result.url),\n }));\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Markdown } from \"./markdown\";\n\n// ============================================\n// Context for Reasoning state\n// ============================================\n\ninterface ReasoningContextValue {\n isOpen: boolean;\n setIsOpen: (open: boolean) => void;\n isStreaming: boolean;\n}\n\nconst ReasoningContext = React.createContext<ReasoningContextValue | null>(\n null,\n);\n\nfunction useReasoningContext() {\n const context = React.useContext(ReasoningContext);\n if (!context) {\n throw new Error(\n \"Reasoning components must be used within a Reasoning provider\",\n );\n }\n return context;\n}\n\n// ============================================\n// Reasoning Root\n// ============================================\n\nexport interface ReasoningProps {\n children: React.ReactNode;\n /** Whether content is currently streaming */\n isStreaming?: boolean;\n /** Controlled open state */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Default open state (uncontrolled) */\n defaultOpen?: boolean;\n /** Class name for the container */\n className?: string;\n}\n\n/**\n * Reasoning component - Collapsible container for AI thinking/reasoning content\n *\n * Auto-expands during streaming and collapses when complete.\n *\n * @example\n * ```tsx\n * <Reasoning isStreaming={isStreaming}>\n * <ReasoningTrigger>Thinking...</ReasoningTrigger>\n * <ReasoningContent>{thinkingText}</ReasoningContent>\n * </Reasoning>\n * ```\n */\nexport function Reasoning({\n children,\n isStreaming = false,\n open: controlledOpen,\n onOpenChange,\n defaultOpen = false,\n className,\n}: ReasoningProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);\n const prevStreamingRef = React.useRef(isStreaming);\n\n // Determine if controlled or uncontrolled\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : uncontrolledOpen;\n\n const setIsOpen = React.useCallback(\n (open: boolean) => {\n if (onOpenChange) {\n onOpenChange(open);\n }\n if (!isControlled) {\n setUncontrolledOpen(open);\n }\n },\n [isControlled, onOpenChange],\n );\n\n // Auto-expand when streaming starts, auto-collapse when streaming ends\n React.useEffect(() => {\n if (isStreaming && !prevStreamingRef.current) {\n // Streaming just started - expand\n setIsOpen(true);\n } else if (!isStreaming && prevStreamingRef.current) {\n // Streaming just ended - collapse\n setIsOpen(false);\n }\n prevStreamingRef.current = isStreaming;\n }, [isStreaming, setIsOpen]);\n\n return (\n <ReasoningContext.Provider value={{ isOpen, setIsOpen, isStreaming }}>\n <div className={cn(\"reasoning\", className)}>{children}</div>\n </ReasoningContext.Provider>\n );\n}\n\n// ============================================\n// Reasoning Trigger\n// ============================================\n\nexport interface ReasoningTriggerProps {\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * Clickable trigger to expand/collapse reasoning content\n */\nexport function ReasoningTrigger({\n children,\n className,\n}: ReasoningTriggerProps) {\n const { isOpen, setIsOpen, isStreaming } = useReasoningContext();\n\n return (\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n className={cn(\n \"flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground transition-colors\",\n \"py-1 px-0 bg-transparent border-none cursor-pointer\",\n className,\n )}\n aria-expanded={isOpen}\n >\n {/* Chevron icon */}\n <svg\n className={cn(\n \"size-3 transition-transform duration-200\",\n isOpen && \"rotate-90\",\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n\n {/* Streaming indicator */}\n {isStreaming && (\n <span className=\"relative flex h-2 w-2\">\n <span className=\"animate-ping absolute inline-flex h-full w-full rounded-full bg-primary opacity-75\" />\n <span className=\"relative inline-flex rounded-full h-2 w-2 bg-primary\" />\n </span>\n )}\n\n {children}\n </button>\n );\n}\n\n// ============================================\n// Reasoning Content\n// ============================================\n\nexport interface ReasoningContentProps {\n children: React.ReactNode;\n /** Render content as markdown */\n markdown?: boolean;\n /** Class name for the content */\n className?: string;\n}\n\n/**\n * Collapsible content area for reasoning text\n */\nexport function ReasoningContent({\n children,\n markdown = false,\n className,\n}: ReasoningContentProps) {\n const { isOpen } = useReasoningContext();\n const contentRef = React.useRef<HTMLDivElement>(null);\n const [height, setHeight] = React.useState<number | undefined>(0);\n\n // Measure content height for smooth animation\n React.useEffect(() => {\n if (contentRef.current) {\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n setHeight(entry.contentRect.height);\n }\n });\n resizeObserver.observe(contentRef.current);\n return () => resizeObserver.disconnect();\n }\n }, []);\n\n return (\n <div\n className={cn(\n \"overflow-hidden transition-[max-height] duration-200 ease-out\",\n isOpen ? \"opacity-100\" : \"opacity-0\",\n )}\n style={{ maxHeight: isOpen ? height : 0 }}\n aria-hidden={!isOpen}\n >\n <div\n ref={contentRef}\n className={cn(\n \"mt-1 pl-3 border-l-2 border-muted-foreground/20\",\n \"text-xs text-muted-foreground\",\n className,\n )}\n >\n {markdown && typeof children === \"string\" ? (\n <Markdown className=\"prose-xs\">{children}</Markdown>\n ) : (\n <div className=\"whitespace-pre-wrap\">{children}</div>\n )}\n </div>\n </div>\n );\n}\n\n// ============================================\n// Convenience component for simple usage\n// ============================================\n\nexport interface SimpleReasoningProps {\n /** The reasoning/thinking content */\n content: string;\n /** Whether content is streaming */\n isStreaming?: boolean;\n /** Label when streaming */\n streamingLabel?: string;\n /** Label when collapsed */\n collapsedLabel?: string;\n /** Render as markdown */\n markdown?: boolean;\n /** Class name */\n className?: string;\n}\n\n/**\n * Simple reasoning display with default trigger labels\n *\n * @example\n * ```tsx\n * <SimpleReasoning\n * content={message.thinking}\n * isStreaming={isLoading}\n * />\n * ```\n */\nexport function SimpleReasoning({\n content,\n isStreaming = false,\n streamingLabel = \"Thinking...\",\n collapsedLabel = \"View reasoning\",\n markdown = true,\n className,\n}: SimpleReasoningProps) {\n if (!content) return null;\n\n return (\n <Reasoning isStreaming={isStreaming} className={className}>\n <ReasoningTrigger>\n {isStreaming ? streamingLabel : collapsedLabel}\n </ReasoningTrigger>\n <ReasoningContent markdown={markdown}>{content}</ReasoningContent>\n </Reasoning>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\n// ============================================\n// Types\n// ============================================\n\nexport interface CopilotUIConfig {\n /**\n * Debug mode - shows JSON args/results in collapsible sections\n * @default false\n */\n debug?: boolean;\n\n /**\n * Default expanded state for debug content\n * @default false\n */\n defaultDebugExpanded?: boolean;\n}\n\nexport interface CopilotUIContextValue extends CopilotUIConfig {\n /** Computed: whether debug mode is active */\n isDebug: boolean;\n}\n\n// ============================================\n// Context\n// ============================================\n\nconst CopilotUIContext = React.createContext<CopilotUIContextValue | null>(\n null,\n);\n\n/**\n * Hook to access CopilotUI configuration\n *\n * Returns defaults if no provider is present (allows standalone component usage)\n */\nexport function useCopilotUI(): CopilotUIContextValue {\n const context = React.useContext(CopilotUIContext);\n\n // Return defaults if no provider (allows standalone usage)\n if (!context) {\n return {\n debug: false,\n defaultDebugExpanded: false,\n isDebug: false,\n };\n }\n\n return context;\n}\n\n// ============================================\n// Provider\n// ============================================\n\nexport interface CopilotUIProviderProps extends CopilotUIConfig {\n children: React.ReactNode;\n}\n\n/**\n * Provider for global UI configuration (debug mode, etc.)\n *\n * @example\n * ```tsx\n * <CopilotUIProvider debug={process.env.NODE_ENV === \"development\"}>\n * <Chat messages={messages} />\n * </CopilotUIProvider>\n * ```\n */\nexport function CopilotUIProvider({\n children,\n debug = false,\n defaultDebugExpanded = false,\n}: CopilotUIProviderProps) {\n const value = React.useMemo<CopilotUIContextValue>(\n () => ({\n debug,\n defaultDebugExpanded,\n isDebug: debug,\n }),\n [debug, defaultDebugExpanded],\n );\n\n return (\n <CopilotUIContext.Provider value={value}>\n {children}\n </CopilotUIContext.Provider>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { TextShimmerLoader } from \"./loader\";\nimport { useCopilotUI } from \"../../context/copilot-ui-context\";\n\n// ============================================\n// Types\n// ============================================\n\nexport type ToolStepStatus =\n | \"pending\"\n | \"executing\"\n | \"completed\"\n | \"error\"\n | \"failed\"\n | \"rejected\";\n\nexport interface ToolStepData {\n id: string;\n name: string;\n args?: Record<string, unknown>;\n status: ToolStepStatus;\n result?: {\n success: boolean;\n message?: string;\n error?: string;\n data?: unknown;\n };\n error?: string;\n /** Human-readable title (resolved from tool definition) */\n title?: string;\n /** Title shown while executing */\n executingTitle?: string;\n /** Title shown after completion */\n completedTitle?: string;\n}\n\n// ============================================\n// Title Utilities\n// ============================================\n\n/**\n * Convert snake_case or camelCase tool name to human-readable title\n * @example \"get_order_details\" -> \"Get order details\"\n * @example \"fetchUserData\" -> \"Fetch user data\"\n */\nfunction toolNameToTitle(name: string | undefined): string {\n if (!name) return \"Tool\";\n // Handle snake_case\n let result = name.replace(/_/g, \" \");\n // Handle camelCase\n result = result.replace(/([a-z])([A-Z])/g, \"$1 $2\");\n // Capitalize first letter, lowercase rest\n return result.charAt(0).toUpperCase() + result.slice(1).toLowerCase();\n}\n\n/**\n * Get the display title based on tool step status\n */\nfunction getDisplayTitle(step: ToolStepData): string {\n const fallbackTitle = toolNameToTitle(step.name);\n\n switch (step.status) {\n case \"pending\":\n return step.title ?? fallbackTitle;\n case \"executing\":\n if (step.executingTitle) return step.executingTitle;\n return step.title ? `${step.title}...` : `${fallbackTitle}...`;\n case \"completed\":\n return step.completedTitle ?? step.title ?? fallbackTitle;\n case \"error\":\n case \"failed\":\n case \"rejected\":\n return step.title ?? fallbackTitle;\n default:\n return fallbackTitle;\n }\n}\n\n// ============================================\n// Status Indicator\n// ============================================\n\ninterface StatusIndicatorProps {\n status: ToolStepStatus;\n className?: string;\n}\n\nfunction StatusIndicator({ status, className }: StatusIndicatorProps) {\n const baseClasses = \"flex-shrink-0\";\n\n switch (status) {\n case \"pending\":\n return (\n <div\n className={cn(\n baseClasses,\n \"size-3 flex items-center justify-center\",\n className,\n )}\n >\n <div className=\"size-1.5 rounded-full bg-muted-foreground/40\" />\n </div>\n );\n\n case \"executing\":\n // Return null - shimmer text handles the loading state\n return null;\n\n case \"completed\":\n return (\n <div\n className={cn(\n baseClasses,\n \"size-3 flex items-center justify-center\",\n className,\n )}\n >\n <svg\n className=\"size-3 text-green-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={3}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n </div>\n );\n\n case \"error\":\n case \"failed\":\n case \"rejected\":\n return (\n <div\n className={cn(\n baseClasses,\n \"size-3 flex items-center justify-center\",\n className,\n )}\n >\n <svg\n className=\"size-3 text-red-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={3}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </div>\n );\n }\n}\n\n// ============================================\n// Tool Step\n// ============================================\n\nexport interface ToolStepProps {\n step: ToolStepData;\n /** Show connecting line to next step */\n showLine?: boolean;\n /** Override debug mode from context */\n debug?: boolean;\n /** Expanded by default (for debug mode) */\n defaultExpanded?: boolean;\n className?: string;\n}\n\n/**\n * Format result for display\n */\nfunction formatResult(result: ToolStepData[\"result\"]): string {\n if (!result) return \"\";\n if (result.message) return result.message;\n if (result.error) return result.error;\n if (result.data) {\n // Don't stringify image data - it's too long\n const data = result.data as Record<string, unknown>;\n if (\n data.image &&\n typeof data.image === \"string\" &&\n (data.image as string).startsWith(\"data:image\")\n ) {\n return `Image (${data.width || \"?\"}x${data.height || \"?\"})`;\n }\n return JSON.stringify(result.data);\n }\n return result.success ? \"Success\" : \"Failed\";\n}\n\n/**\n * Check if result contains an image\n */\nfunction getResultImage(result: ToolStepData[\"result\"]): string | null {\n if (!result?.data) return null;\n const data = result.data as Record<string, unknown>;\n if (\n data.image &&\n typeof data.image === \"string\" &&\n (data.image as string).startsWith(\"data:image\")\n ) {\n return data.image as string;\n }\n return null;\n}\n\n/**\n * Individual tool step with shimmer loading, status icons, and debug mode\n */\nexport function ToolStep({\n step,\n showLine = false,\n debug: debugProp,\n defaultExpanded,\n className,\n}: ToolStepProps) {\n const { isDebug, defaultDebugExpanded } = useCopilotUI();\n const debug = debugProp ?? isDebug;\n\n const [expanded, setExpanded] = React.useState(\n defaultExpanded ?? defaultDebugExpanded ?? false,\n );\n\n const displayTitle = getDisplayTitle(step);\n const hasDebugContent =\n (step.args && Object.keys(step.args).length > 0) || step.result;\n const isExecuting = step.status === \"executing\";\n const isCompleted = step.status === \"completed\";\n const isError =\n step.status === \"error\" ||\n step.status === \"failed\" ||\n step.status === \"rejected\";\n\n return (\n <div className={cn(\"relative\", className)}>\n {/* Connecting line */}\n {showLine && (\n <div\n className=\"absolute left-[5px] top-4 bottom-0 w-px bg-border\"\n aria-hidden=\"true\"\n />\n )}\n\n {/* Step row */}\n <div className=\"flex items-center gap-2\">\n {/* Status indicator - only show for non-executing states */}\n {!isExecuting && <StatusIndicator status={step.status} />}\n\n <div className=\"flex-1 min-w-0\">\n {/* Clickable trigger */}\n <button\n type=\"button\"\n onClick={() => debug && hasDebugContent && setExpanded(!expanded)}\n disabled={!debug || !hasDebugContent}\n className={cn(\n \"flex items-center gap-2 text-left min-w-0 w-full\",\n debug &&\n hasDebugContent &&\n \"cursor-pointer hover:text-foreground\",\n !debug && \"cursor-default\",\n )}\n >\n {/* Title with shimmer for executing state */}\n {isExecuting ? (\n <TextShimmerLoader text={displayTitle} size=\"sm\" />\n ) : (\n <span\n className={cn(\n \"text-sm truncate\",\n isCompleted && \"text-foreground\",\n isError && \"text-red-500\",\n step.status === \"pending\" && \"text-muted-foreground/60\",\n )}\n >\n {displayTitle}\n </span>\n )}\n\n {/* Expand indicator - only in debug mode with content */}\n {debug && hasDebugContent && (\n <svg\n className={cn(\n \"size-3 text-muted-foreground/40 transition-transform ml-auto flex-shrink-0\",\n expanded && \"rotate-90\",\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M9 5l7 7-7 7\"\n />\n </svg>\n )}\n </button>\n\n {/* Debug: Collapsible content (args + results) */}\n {debug && expanded && hasDebugContent && (\n <div className=\"mt-1.5 space-y-1.5\">\n {/* Arguments */}\n {step.args && Object.keys(step.args).length > 0 && (\n <div className=\"text-[10px] font-mono bg-muted/50 rounded px-2 py-1 overflow-x-auto\">\n <span className=\"text-muted-foreground\">args: </span>\n {JSON.stringify(step.args)}\n </div>\n )}\n\n {/* Result */}\n {step.result && (\n <div\n className={cn(\n \"text-[10px] font-mono rounded px-2 py-1 overflow-x-auto whitespace-pre-wrap break-all\",\n step.result.success !== false\n ? \"bg-green-500/10 text-green-600 dark:text-green-400\"\n : \"bg-red-500/10 text-red-600 dark:text-red-400\",\n )}\n >\n <span className=\"text-muted-foreground\">result: </span>\n {formatResult(step.result)}\n {/* Render image if present */}\n {getResultImage(step.result) && (\n <img\n src={getResultImage(step.result)!}\n alt=\"Screenshot\"\n className=\"mt-1.5 rounded border border-border max-w-full max-h-48 object-contain\"\n />\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Error display (always visible, not just in debug) */}\n {isError && step.error && !step.result && (\n <div className=\"mt-0.5 text-[10px] font-mono bg-red-500/10 text-red-600 dark:text-red-400 rounded px-1.5 py-0.5\">\n {step.error}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\n// ============================================\n// Tool Steps Container\n// ============================================\n\nexport interface ToolStepsProps {\n steps: ToolStepData[];\n /** Override debug mode from context */\n debug?: boolean;\n /** Expand all by default (in debug mode) */\n defaultExpanded?: boolean;\n /** Class name */\n className?: string;\n}\n\n/**\n * Compact tool steps display with shimmer loading and debug mode\n *\n * @example\n * ```tsx\n * <ToolSteps\n * steps={[\n * { id: \"1\", name: \"get_weather\", status: \"completed\", title: \"Get weather\" },\n * { id: \"2\", name: \"navigate\", status: \"executing\", executingTitle: \"Navigating...\" },\n * ]}\n * debug={true}\n * />\n * ```\n */\nexport function ToolSteps({\n steps,\n debug,\n defaultExpanded = false,\n className,\n}: ToolStepsProps) {\n if (steps.length === 0) return null;\n\n return (\n <div className={cn(\"space-y-1.5\", className)}>\n {steps.map((step, index) => (\n <ToolStep\n key={step.id}\n step={step}\n showLine={index < steps.length - 1}\n debug={debug}\n defaultExpanded={defaultExpanded}\n />\n ))}\n </div>\n );\n}\n\n// ============================================\n// Inline Tool Steps (super compact, single line)\n// ============================================\n\nexport interface InlineToolStepsProps {\n steps: ToolStepData[];\n /** Max steps to show before collapsing */\n maxVisible?: number;\n className?: string;\n}\n\n/**\n * Ultra-compact inline display showing just status icons\n *\n * @example\n * ```tsx\n * <InlineToolSteps steps={toolExecutions} />\n * // Shows: ✓ ✓ ⟳ ○\n * ```\n */\nexport function InlineToolSteps({\n steps,\n maxVisible = 5,\n className,\n}: InlineToolStepsProps) {\n if (steps.length === 0) return null;\n\n const visibleSteps = steps.slice(0, maxVisible);\n const hiddenCount = steps.length - maxVisible;\n\n return (\n <div className={cn(\"flex items-center gap-1\", className)}>\n {visibleSteps.map((step) => (\n <div\n key={step.id}\n title={`${step.name}: ${step.status}`}\n className=\"flex items-center\"\n >\n <StatusIndicator status={step.status} />\n </div>\n ))}\n {hiddenCount > 0 && (\n <span className=\"text-[10px] text-muted-foreground\">\n +{hiddenCount}\n </span>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\n\nexport function SendIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m22 2-7 20-4-9-9-4Z\" />\n <path d=\"M22 2 11 13\" />\n </svg>\n );\n}\n\nexport function StopIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\" />\n </svg>\n );\n}\n\nexport function CloseIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\nexport function ChevronDownIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\nexport function ChevronUpIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m18 15-6-6-6 6\" />\n </svg>\n );\n}\n\nexport function ChevronLeftIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n );\n}\n\nexport function CopyIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" />\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\n </svg>\n );\n}\n\nexport function CheckIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n );\n}\n\nexport function ThumbsUpIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M7 10v12\" />\n <path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\" />\n </svg>\n );\n}\n\nexport function ThumbsDownIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M17 14V2\" />\n <path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z\" />\n </svg>\n );\n}\n\nexport function RefreshIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" />\n <path d=\"M8 16H3v5\" />\n </svg>\n );\n}\n\nexport function UserIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" />\n <circle cx=\"12\" cy=\"7\" r=\"4\" />\n </svg>\n );\n}\n\nexport function BotIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M12 8V4H8\" />\n <rect width=\"16\" height=\"12\" x=\"4\" y=\"8\" rx=\"2\" />\n <path d=\"M2 14h2\" />\n <path d=\"M20 14h2\" />\n <path d=\"M15 13v2\" />\n <path d=\"M9 13v2\" />\n </svg>\n );\n}\n\nexport function PlusIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M5 12h14\" />\n <path d=\"M12 5v14\" />\n </svg>\n );\n}\n\nexport function ArrowUpIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m5 12 7-7 7 7\" />\n <path d=\"M12 19V5\" />\n </svg>\n );\n}\n\nexport function XIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\nexport function AlertTriangleIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n </svg>\n );\n}\n\nexport function TrashIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M3 6h18\" />\n <path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\" />\n <path d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\" />\n </svg>\n );\n}\n\nexport function ArrowUpRightIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M7 7h10v10\" />\n <path d=\"M7 17 17 7\" />\n </svg>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { CheckIcon, XIcon, AlertTriangleIcon } from \"../icons\";\n\n// ============================================\n// Types\n// ============================================\n\nexport type ConfirmationState =\n | \"pending\" // Waiting for user decision\n | \"approved\" // User approved\n | \"rejected\"; // User rejected\n\nexport interface ConfirmationContextValue {\n state: ConfirmationState;\n message?: string;\n onApprove?: () => void;\n onReject?: () => void;\n}\n\n// ============================================\n// Context\n// ============================================\n\nconst ConfirmationContext =\n React.createContext<ConfirmationContextValue | null>(null);\n\nfunction useConfirmationContext() {\n const context = React.useContext(ConfirmationContext);\n if (!context) {\n throw new Error(\n \"Confirmation components must be used within a Confirmation provider\",\n );\n }\n return context;\n}\n\n// ============================================\n// Confirmation Root\n// ============================================\n\nexport interface ConfirmationProps {\n children?: React.ReactNode;\n /** Current approval state */\n state?: ConfirmationState;\n /** Message to display */\n message?: string;\n /** Called when user approves */\n onApprove?: () => void;\n /** Called when user rejects */\n onReject?: () => void;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * Confirmation component - Tool approval/rejection UI\n *\n * Similar to Vercel AI SDK's Confirmation component for human-in-the-loop patterns.\n *\n * @example\n * ```tsx\n * <Confirmation\n * state={execution.approvalStatus}\n * message=\"This tool wants to delete a file.\"\n * onApprove={() => approveToolExecution(execution.id)}\n * onReject={() => rejectToolExecution(execution.id)}\n * >\n * <ConfirmationPending>\n * <ConfirmationMessage />\n * <ConfirmationActions />\n * </ConfirmationPending>\n * <ConfirmationApproved />\n * <ConfirmationRejected />\n * </Confirmation>\n * ```\n */\nexport function Confirmation({\n children,\n state = \"pending\",\n message,\n onApprove,\n onReject,\n className,\n}: ConfirmationProps) {\n return (\n <ConfirmationContext.Provider\n value={{ state, message, onApprove, onReject }}\n >\n <div\n className={cn(\n \"csdk-confirm-card\",\n \"confirmation rounded-2xl overflow-hidden\",\n \"border border-border/60\",\n \"bg-card text-card-foreground shadow-sm\",\n className,\n )}\n >\n {children}\n </div>\n </ConfirmationContext.Provider>\n );\n}\n\n// ============================================\n// Conditional Rendering Components\n// ============================================\n\nexport interface ConfirmationPendingProps {\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * Renders children only when state is \"pending\"\n */\nexport function ConfirmationPending({\n children,\n className,\n}: ConfirmationPendingProps) {\n const { state } = useConfirmationContext();\n if (state !== \"pending\") return null;\n\n return <div className={cn(\"pl-5 pr-4 pt-4 pb-3\", className)}>{children}</div>;\n}\n\nexport interface ConfirmationApprovedProps {\n children?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Renders children (or default approved message) when state is \"approved\"\n */\nexport function ConfirmationApproved({\n children,\n className,\n}: ConfirmationApprovedProps) {\n const { state } = useConfirmationContext();\n if (state !== \"approved\") return null;\n\n return (\n <div\n className={cn(\n \"csdk-confirm-result\",\n \"inline-flex items-center gap-1.5 px-3 py-1.5 text-sm font-medium\",\n \"rounded-2xl border border-green-200/60 dark:border-green-800/40\",\n \"bg-green-50/80 dark:bg-green-950/20 text-green-700 dark:text-green-400\",\n className,\n )}\n >\n <CheckIcon className=\"h-3.5 w-3.5 shrink-0\" />\n {children || <span>Approved</span>}\n </div>\n );\n}\n\nexport interface ConfirmationRejectedProps {\n children?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Renders children (or default rejected message) when state is \"rejected\"\n */\nexport function ConfirmationRejected({\n children,\n className,\n}: ConfirmationRejectedProps) {\n const { state } = useConfirmationContext();\n if (state !== \"rejected\") return null;\n\n return (\n <div\n className={cn(\n \"csdk-confirm-result\",\n \"inline-flex items-center gap-1.5 px-3 py-1.5 text-sm font-medium\",\n \"rounded-2xl border border-red-200/60 dark:border-red-800/40\",\n \"bg-red-50/80 dark:bg-red-950/20 text-red-700 dark:text-red-400\",\n className,\n )}\n >\n <XIcon className=\"h-3.5 w-3.5 shrink-0\" />\n {children || <span>Rejected</span>}\n </div>\n );\n}\n\n// ============================================\n// Content Components\n// ============================================\n\nexport interface ConfirmationMessageProps {\n children?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Displays the approval message\n */\nexport function ConfirmationMessage({\n children,\n className,\n}: ConfirmationMessageProps) {\n const { message } = useConfirmationContext();\n\n return (\n <div className={cn(\"flex items-start gap-3\", className)}>\n <div className=\"mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center rounded-xl bg-amber-100 dark:bg-amber-950/50 ring-1 ring-amber-200/60 dark:ring-amber-800/40\">\n <AlertTriangleIcon className=\"h-4 w-4 text-amber-600 dark:text-amber-400\" />\n </div>\n <p className=\"flex-1 min-w-0 pt-0.5 text-sm text-foreground leading-snug\">\n {children || message || \"This action requires your approval.\"}\n </p>\n </div>\n );\n}\n\nexport interface ConfirmationActionsProps {\n children?: React.ReactNode;\n className?: string;\n /** Label for reject button */\n rejectLabel?: string;\n /** Label for approve button */\n approveLabel?: string;\n}\n\n/**\n * Renders approval/rejection action buttons\n */\nexport function ConfirmationActions({\n children,\n className,\n rejectLabel = \"Reject\",\n approveLabel = \"Approve\",\n}: ConfirmationActionsProps) {\n const { onApprove, onReject } = useConfirmationContext();\n\n // Allow custom buttons via children\n if (children) {\n return (\n <div className={cn(\"mt-3 flex justify-end gap-2\", className)}>\n {children}\n </div>\n );\n }\n\n return (\n <>\n <div className=\"mx-0 border-t border-border/40 mt-3\" />\n <div className={cn(\"flex justify-end gap-2 pt-3\", className)}>\n <button\n type=\"button\"\n onClick={onReject}\n className={cn(\n \"csdk-confirm-btn\",\n \"px-4 py-1.5 text-sm font-medium rounded-xl\",\n \"border border-border/80 bg-transparent text-muted-foreground\",\n \"hover:bg-muted/80 hover:text-foreground hover:border-border\",\n )}\n >\n {rejectLabel}\n </button>\n <button\n type=\"button\"\n onClick={onApprove}\n className={cn(\n \"csdk-confirm-btn\",\n \"px-4 py-1.5 text-sm font-medium rounded-xl\",\n \"bg-primary text-primary-foreground\",\n \"hover:bg-primary/90\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n )}\n >\n {approveLabel}\n </button>\n </div>\n </>\n );\n}\n\n// ============================================\n// Simple Confirmation (Convenience Component)\n// ============================================\n\nexport interface SimpleConfirmationProps {\n /** Current approval state */\n state: ConfirmationState;\n /** Message to display */\n message?: string;\n /** Called when user approves */\n onApprove?: () => void;\n /** Called when user rejects */\n onReject?: () => void;\n /** Label for reject button */\n rejectLabel?: string;\n /** Label for approve button */\n approveLabel?: string;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * SimpleConfirmation - Convenience wrapper with all states built-in\n *\n * @example\n * ```tsx\n * <SimpleConfirmation\n * state={execution.approvalStatus === \"required\" ? \"pending\" : execution.approvalStatus}\n * message=\"Delete file /tmp/example.txt?\"\n * onApprove={() => approveToolExecution(execution.id)}\n * onReject={() => rejectToolExecution(execution.id)}\n * />\n * ```\n */\nexport function SimpleConfirmation({\n state,\n message,\n onApprove,\n onReject,\n rejectLabel,\n approveLabel,\n className,\n}: SimpleConfirmationProps) {\n return (\n <Confirmation\n state={state}\n message={message}\n onApprove={onApprove}\n onReject={onReject}\n className={className}\n >\n <ConfirmationPending>\n <ConfirmationMessage />\n <ConfirmationActions\n rejectLabel={rejectLabel}\n approveLabel={approveLabel}\n />\n </ConfirmationPending>\n <ConfirmationApproved />\n <ConfirmationRejected />\n </Confirmation>\n );\n}\n","\"use client\";\n\nimport { cn } from \"../../lib/utils\";\nimport { CheckIcon, XIcon, AlertTriangleIcon } from \"../icons\";\n\n// ============================================\n// Types\n// ============================================\n\nexport type PermissionLevel =\n | \"ask\"\n | \"allow_always\"\n | \"deny_always\"\n | \"session\";\n\nexport interface PermissionOption {\n value: PermissionLevel;\n label: string;\n description?: string;\n}\n\nexport const DEFAULT_PERMISSION_OPTIONS: PermissionOption[] = [\n {\n value: \"ask\",\n label: \"Ask every time\",\n description: \"Always prompt before this tool runs\",\n },\n {\n value: \"allow_always\",\n label: \"Allow always\",\n description: \"Never ask again, always approve\",\n },\n {\n value: \"session\",\n label: \"Allow this session\",\n description: \"Allow until you close this page\",\n },\n {\n value: \"deny_always\",\n label: \"Deny always\",\n description: \"Never ask again, always deny\",\n },\n];\n\nexport type ConfirmationState = \"pending\" | \"approved\" | \"rejected\";\n\n// ============================================\n// PermissionConfirmation Component\n// ============================================\n\nexport interface PermissionConfirmationProps {\n state: ConfirmationState;\n toolName?: string;\n message?: string;\n onApprove?: (permissionLevel: PermissionLevel) => void;\n onReject?: (permissionLevel?: PermissionLevel) => void;\n // showPermissionOptions disabled for now — causes issues\n // showPermissionOptions?: boolean;\n // permissionOptions?: PermissionOption[];\n className?: string;\n}\n\nexport function PermissionConfirmation({\n state,\n toolName,\n message,\n onApprove,\n onReject,\n className,\n}: PermissionConfirmationProps) {\n const handleApprove = () => {\n onApprove?.(\"ask\");\n };\n\n const handleReject = () => {\n onReject?.(undefined);\n };\n\n if (state === \"approved\") {\n return (\n <div\n className={cn(\n \"csdk-confirm-result\",\n \"inline-flex items-center gap-1.5 px-3 py-1.5 text-sm font-medium\",\n \"rounded-2xl border border-green-200/60 dark:border-green-800/40\",\n \"bg-green-50/80 dark:bg-green-950/20 text-green-700 dark:text-green-400\",\n className,\n )}\n >\n <CheckIcon className=\"h-3.5 w-3.5 shrink-0\" />\n <span>Approved</span>\n </div>\n );\n }\n\n if (state === \"rejected\") {\n return (\n <div\n className={cn(\n \"csdk-confirm-result\",\n \"inline-flex items-center gap-1.5 px-3 py-1.5 text-sm font-medium\",\n \"rounded-2xl border border-red-200/60 dark:border-red-800/40\",\n \"bg-red-50/80 dark:bg-red-950/20 text-red-700 dark:text-red-400\",\n className,\n )}\n >\n <XIcon className=\"h-3.5 w-3.5 shrink-0\" />\n <span>Rejected</span>\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n \"csdk-confirm-card\",\n \"w-full rounded-2xl overflow-hidden\",\n \"border border-border/60\",\n \"bg-card text-card-foreground shadow-sm\",\n className,\n )}\n >\n {/* Body */}\n <div className=\"flex items-start gap-3 p-4 pb-3\">\n <div className=\"mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center rounded-xl bg-muted\">\n <AlertTriangleIcon className=\"h-4 w-4 text-amber-600 dark:text-amber-400\" />\n </div>\n <div className=\"flex-1 min-w-0 pt-0.5\">\n {toolName && (\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-amber-600/80 dark:text-amber-400/70 mb-1\">\n {toolName}\n </p>\n )}\n <p className=\"text-sm text-foreground leading-snug\">\n {message || \"This tool requires your approval to execute.\"}\n </p>\n </div>\n </div>\n\n {/* Divider */}\n <div className=\"mx-4 border-t border-border/40\" />\n\n {/* Actions */}\n <div className=\"flex items-center justify-end gap-2 px-4 py-3\">\n <button\n type=\"button\"\n onClick={handleReject}\n className={cn(\n \"csdk-confirm-btn\",\n \"px-4 py-1.5 text-sm font-medium rounded-xl\",\n \"border border-border/80 bg-transparent text-muted-foreground\",\n \"hover:bg-muted/80 hover:text-foreground hover:border-border\",\n )}\n >\n Deny\n </button>\n <button\n type=\"button\"\n onClick={handleApprove}\n className={cn(\n \"csdk-confirm-btn\",\n \"px-4 py-1.5 text-sm font-medium rounded-xl\",\n \"bg-primary text-primary-foreground\",\n \"hover:bg-primary/90\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n )}\n >\n Allow\n </button>\n </div>\n </div>\n );\n}\n\n// ============================================\n// CompactPermissionConfirmation Component\n// ============================================\n\nexport interface CompactPermissionConfirmationProps {\n state: ConfirmationState;\n message?: string;\n onApprove?: (permissionLevel: PermissionLevel) => void;\n onReject?: (permissionLevel?: PermissionLevel) => void;\n className?: string;\n}\n\nexport function CompactPermissionConfirmation({\n state,\n message,\n onApprove,\n onReject,\n className,\n}: CompactPermissionConfirmationProps) {\n // \"Don't ask again\" checkbox disabled for now\n // const [rememberChoice, setRememberChoice] = React.useState(false);\n\n const handleApprove = () => {\n onApprove?.(\"ask\");\n };\n\n const handleReject = () => {\n onReject?.(undefined);\n };\n\n if (state === \"approved\") {\n return (\n <div\n className={cn(\n \"csdk-confirm-result\",\n \"inline-flex items-center gap-1.5 px-3 py-1.5 text-sm font-medium\",\n \"rounded-2xl border border-green-200/60 dark:border-green-800/40\",\n \"bg-green-50/80 dark:bg-green-950/20 text-green-700 dark:text-green-400\",\n className,\n )}\n >\n <CheckIcon className=\"h-3.5 w-3.5 shrink-0\" />\n <span>Approved</span>\n </div>\n );\n }\n\n if (state === \"rejected\") {\n return (\n <div\n className={cn(\n \"csdk-confirm-result\",\n \"inline-flex items-center gap-1.5 px-3 py-1.5 text-sm font-medium\",\n \"rounded-2xl border border-red-200/60 dark:border-red-800/40\",\n \"bg-red-50/80 dark:bg-red-950/20 text-red-700 dark:text-red-400\",\n className,\n )}\n >\n <XIcon className=\"h-3.5 w-3.5 shrink-0\" />\n <span>Rejected</span>\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n \"csdk-confirm-card\",\n \"w-full rounded-2xl overflow-hidden\",\n \"border border-border/60\",\n \"bg-card text-card-foreground shadow-sm\",\n className,\n )}\n >\n <div className=\"flex items-start gap-3 p-4 pb-3\">\n <div className=\"mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center rounded-xl bg-muted\">\n <AlertTriangleIcon className=\"h-4 w-4 text-amber-600 dark:text-amber-400\" />\n </div>\n <p className=\"flex-1 min-w-0 pt-0.5 text-sm text-foreground leading-snug\">\n {message || \"This action requires your approval.\"}\n </p>\n </div>\n\n {/* Divider */}\n <div className=\"mx-4 border-t border-border/40\" />\n\n <div className=\"flex items-center justify-end gap-2 px-4 py-3\">\n <button\n type=\"button\"\n onClick={handleReject}\n className={cn(\n \"csdk-confirm-btn\",\n \"px-4 py-1.5 text-sm font-medium rounded-xl\",\n \"border border-border/80 bg-transparent text-muted-foreground\",\n \"hover:bg-muted/80 hover:text-foreground hover:border-border\",\n )}\n >\n Deny\n </button>\n <button\n type=\"button\"\n onClick={handleApprove}\n className={cn(\n \"csdk-confirm-btn\",\n \"px-4 py-1.5 text-sm font-medium rounded-xl\",\n \"bg-primary text-primary-foreground\",\n \"hover:bg-primary/90\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n )}\n >\n Allow\n </button>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport type FollowUpProps = {\n /** Follow-up questions to display */\n questions: string[];\n /** Called when a follow-up is clicked */\n onSelect: (question: string) => void;\n /** Custom class for container */\n className?: string;\n /** Custom class for buttons */\n buttonClassName?: string;\n};\n\n/**\n * Parse follow-up questions from message content\n * Format: [FOLLOWUP: question1 | question2 | question3]\n */\nexport function parseFollowUps(content: string): {\n cleanContent: string;\n followUps: string[];\n} {\n if (!content) {\n return { cleanContent: content, followUps: [] };\n }\n\n const followUpRegex = /\\[FOLLOWUP:\\s*([^\\]]+)\\]/gi;\n const matches = content.match(followUpRegex);\n\n if (!matches || matches.length === 0) {\n return { cleanContent: content, followUps: [] };\n }\n\n // Extract follow-ups from the last match\n const lastMatch = matches[matches.length - 1];\n const innerContent = lastMatch.replace(/\\[FOLLOWUP:\\s*|\\]/gi, \"\");\n const followUps = innerContent\n .split(\"|\")\n .map((q) => q.trim())\n .filter((q) => q.length > 0);\n\n // Remove ALL FOLLOWUP tags from content\n const cleanContent = content.replace(followUpRegex, \"\").trim();\n\n return { cleanContent, followUps };\n}\n\n/**\n * Follow-up questions component\n * Displays clickable chips for suggested follow-up actions\n */\nexport function FollowUpQuestions({\n questions,\n onSelect,\n className,\n buttonClassName,\n}: FollowUpProps) {\n if (!questions || questions.length === 0) {\n return null;\n }\n\n return (\n <div className={cn(\"csdk-followup flex flex-wrap gap-2 mt-2\", className)}>\n {questions.map((question, index) => (\n <button\n key={index}\n onClick={() => onSelect(question)}\n className={cn(\n \"csdk-followup-button px-3 py-1.5 text-sm rounded-full\",\n \"bg-primary/10 hover:bg-primary/20 text-primary\",\n \"border border-primary/20 hover:border-primary/40\",\n \"transition-colors duration-150\",\n \"text-left whitespace-nowrap\",\n buttonClassName,\n )}\n >\n {question}\n </button>\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\n// ============================================\n// Types\n// ============================================\n\nexport interface BranchNavigatorProps {\n /** 0-based index of the current sibling */\n siblingIndex: number;\n /** Total number of sibling variants at this fork */\n totalSiblings: number;\n /** Whether there is a previous sibling to navigate to */\n hasPrevious: boolean;\n /** Whether there is a next sibling to navigate to */\n hasNext: boolean;\n /** Navigate to the previous sibling */\n onPrevious: () => void;\n /** Navigate to the next sibling */\n onNext: () => void;\n /** Additional class names */\n className?: string;\n}\n\n// ============================================\n// BranchNavigator\n// ============================================\n\n/**\n * BranchNavigator — ← N/M → variant navigator shown below user messages\n * when a conversation has been branched (via edit or regenerate).\n *\n * Purely presentational — no SDK dependency.\n *\n * @example\n * ```tsx\n * <BranchNavigator\n * siblingIndex={1}\n * totalSiblings={3}\n * hasPrevious={true}\n * hasNext={true}\n * onPrevious={() => switchBranch(siblings[0])}\n * onNext={() => switchBranch(siblings[2])}\n * />\n * ```\n */\nexport function BranchNavigator({\n siblingIndex,\n totalSiblings,\n hasPrevious,\n hasNext,\n onPrevious,\n onNext,\n className,\n}: BranchNavigatorProps) {\n return (\n <div\n className={cn(\n \"csdk-branch-navigator flex items-center gap-1 text-xs text-muted-foreground select-none\",\n className,\n )}\n >\n {/* ← Previous */}\n <button\n type=\"button\"\n onClick={onPrevious}\n disabled={!hasPrevious}\n aria-label=\"Previous version\"\n className={cn(\n \"p-0.5 rounded transition-colors\",\n hasPrevious\n ? \"hover:text-foreground hover:bg-muted cursor-pointer\"\n : \"opacity-30 cursor-default\",\n )}\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M15 18l-6-6 6-6\" />\n </svg>\n </button>\n\n {/* N / M */}\n <span className=\"tabular-nums leading-none\">\n {siblingIndex + 1} / {totalSiblings}\n </span>\n\n {/* → Next */}\n <button\n type=\"button\"\n onClick={onNext}\n disabled={!hasNext}\n aria-label=\"Next version\"\n className={cn(\n \"p-0.5 rounded transition-colors\",\n hasNext\n ? \"hover:text-foreground hover:bg-muted cursor-pointer\"\n : \"opacity-30 cursor-default\",\n )}\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M9 18l6-6-6-6\" />\n </svg>\n </button>\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useState, useEffect } from \"react\";\nimport { cn } from \"../../lib/utils\";\n\n/**\n * SDK State for DevLogger\n */\nexport interface DevLoggerState {\n // Chat state\n chat: {\n isLoading: boolean;\n messageCount: number;\n threadId: string;\n error: string | null;\n };\n // Tools state\n tools: {\n isEnabled: boolean;\n isCapturing: boolean;\n pendingConsent: boolean;\n };\n // Agent loop state\n agentLoop: {\n toolExecutions: Array<{\n id: string;\n name: string;\n status: string;\n approvalStatus: string;\n }>;\n pendingApprovals: number;\n iteration: number;\n maxIterations: number;\n };\n // Registered items\n registered: {\n tools: Array<{ name: string; location: string }>;\n actions: Array<{ name: string }>;\n contextCount: number;\n };\n // Permissions\n permissions: {\n stored: Array<{ toolName: string; level: string }>;\n loaded: boolean;\n };\n // Config\n config: {\n runtimeUrl: string;\n };\n}\n\nexport interface DevLoggerProps {\n /** SDK state to display */\n state: DevLoggerState;\n /** Position of the floating button */\n position?: \"bottom-left\" | \"bottom-right\" | \"top-left\" | \"top-right\";\n /** Custom class name */\n className?: string;\n}\n\n/**\n * DevLogger - Floating debug panel for SDK development\n *\n * Shows a floating button that opens a modal with all SDK state\n * for debugging purposes.\n */\nexport function DevLogger({\n state,\n position = \"bottom-right\",\n className,\n}: DevLoggerProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [activeTab, setActiveTab] = useState<\n \"chat\" | \"tools\" | \"agent\" | \"config\"\n >(\"chat\");\n\n // Position classes\n const positionClasses = {\n \"bottom-left\": \"bottom-4 left-4\",\n \"bottom-right\": \"bottom-4 right-4\",\n \"top-left\": \"top-4 left-4\",\n \"top-right\": \"top-4 right-4\",\n };\n\n return (\n <>\n {/* Floating Button */}\n <button\n type=\"button\"\n onClick={() => setIsOpen(true)}\n className={cn(\n \"fixed z-[9999] flex items-center justify-center\",\n \"w-12 h-12 rounded-full shadow-lg\",\n \"bg-orange-500 hover:bg-orange-600 text-white\",\n \"transition-transform hover:scale-110\",\n positionClasses[position],\n className,\n )}\n title=\"Open SDK DevLogger\"\n >\n <svg\n className=\"w-6 h-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4\"\n />\n </svg>\n </button>\n\n {/* Modal Overlay */}\n {isOpen && (\n <div\n className=\"csdk-devlogger-backdrop fixed inset-0 z-[10000] flex items-center justify-center bg-black/50\"\n onClick={() => setIsOpen(false)}\n >\n {/* Modal Content */}\n <div\n className=\"csdk-devlogger-modal bg-background border rounded-lg shadow-xl w-[600px] max-h-[80vh] overflow-hidden\"\n onClick={(e) => e.stopPropagation()}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b bg-muted/50\">\n <div className=\"flex items-center gap-2\">\n <div className=\"w-3 h-3 rounded-full bg-orange-500\" />\n <h2 className=\"font-semibold text-sm\">Copilot SDK DevLogger</h2>\n </div>\n <button\n type=\"button\"\n onClick={() => setIsOpen(false)}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <svg\n className=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n\n {/* Tabs */}\n <div className=\"flex border-b\">\n {([\"chat\", \"tools\", \"agent\", \"config\"] as const).map((tab) => (\n <button\n key={tab}\n type=\"button\"\n onClick={() => setActiveTab(tab)}\n className={cn(\n \"px-4 py-2 text-sm font-medium capitalize\",\n activeTab === tab\n ? \"border-b-2 border-primary text-primary\"\n : \"text-muted-foreground hover:text-foreground\",\n )}\n >\n {tab}\n </button>\n ))}\n </div>\n\n {/* Content */}\n <div className=\"p-4 overflow-y-auto max-h-[60vh]\">\n {activeTab === \"chat\" && <ChatTab state={state} />}\n {activeTab === \"tools\" && <ToolsTab state={state} />}\n {activeTab === \"agent\" && <AgentTab state={state} />}\n {activeTab === \"config\" && <ConfigTab state={state} />}\n </div>\n </div>\n </div>\n )}\n </>\n );\n}\n\n/**\n * Chat Tab Content\n */\nfunction ChatTab({ state }: { state: DevLoggerState }) {\n return (\n <div className=\"space-y-4\">\n <Section title=\"Status\">\n <Row label=\"Loading\" value={state.chat.isLoading ? \"Yes\" : \"No\"} />\n <Row label=\"Message Count\" value={state.chat.messageCount} />\n <Row label=\"Thread ID\" value={state.chat.threadId} mono />\n <Row\n label=\"Error\"\n value={state.chat.error || \"None\"}\n valueClass={state.chat.error ? \"text-red-500\" : \"text-green-500\"}\n />\n </Section>\n </div>\n );\n}\n\n/**\n * Tools Tab Content\n */\nfunction ToolsTab({ state }: { state: DevLoggerState }) {\n return (\n <div className=\"space-y-4\">\n <Section title=\"Smart Context\">\n <Row label=\"Enabled\" value={state.tools.isEnabled ? \"Yes\" : \"No\"} />\n <Row label=\"Capturing\" value={state.tools.isCapturing ? \"Yes\" : \"No\"} />\n <Row\n label=\"Pending Consent\"\n value={state.tools.pendingConsent ? \"Yes\" : \"No\"}\n />\n </Section>\n\n <Section title=\"Registered Tools\">\n {state.registered.tools.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">No tools registered</p>\n ) : (\n <div className=\"space-y-1\">\n {state.registered.tools.map((tool) => (\n <div\n key={tool.name}\n className=\"flex items-center justify-between text-sm\"\n >\n <code className=\"bg-muted px-1.5 py-0.5 rounded text-xs\">\n {tool.name}\n </code>\n <span className=\"text-muted-foreground text-xs\">\n {tool.location}\n </span>\n </div>\n ))}\n </div>\n )}\n </Section>\n\n <Section title=\"Permissions\">\n <Row label=\"Loaded\" value={state.permissions.loaded ? \"Yes\" : \"No\"} />\n {state.permissions.stored.length > 0 && (\n <div className=\"mt-2 space-y-1\">\n {state.permissions.stored.map((p) => (\n <div\n key={p.toolName}\n className=\"flex items-center justify-between text-sm\"\n >\n <code className=\"bg-muted px-1.5 py-0.5 rounded text-xs\">\n {p.toolName}\n </code>\n <Badge level={p.level} />\n </div>\n ))}\n </div>\n )}\n </Section>\n </div>\n );\n}\n\n/**\n * Agent Tab Content\n */\nfunction AgentTab({ state }: { state: DevLoggerState }) {\n return (\n <div className=\"space-y-4\">\n <Section title=\"Loop State\">\n <Row\n label=\"Iteration\"\n value={`${state.agentLoop.iteration} / ${state.agentLoop.maxIterations}`}\n />\n <Row\n label=\"Pending Approvals\"\n value={state.agentLoop.pendingApprovals}\n />\n </Section>\n\n <Section title=\"Tool Executions\">\n {state.agentLoop.toolExecutions.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">No executions</p>\n ) : (\n <div className=\"space-y-2\">\n {state.agentLoop.toolExecutions.map((exec) => (\n <div\n key={exec.id}\n className=\"border rounded p-2 text-sm space-y-1\"\n >\n <div className=\"flex items-center justify-between\">\n <code className=\"font-medium\">{exec.name}</code>\n <StatusBadge status={exec.status} />\n </div>\n <div className=\"flex items-center justify-between text-xs text-muted-foreground\">\n <span>ID: {exec.id.slice(0, 12)}...</span>\n <span>Approval: {exec.approvalStatus}</span>\n </div>\n </div>\n ))}\n </div>\n )}\n </Section>\n\n <Section title=\"Registered Actions\">\n {state.registered.actions.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">No actions registered</p>\n ) : (\n <div className=\"flex flex-wrap gap-1\">\n {state.registered.actions.map((action) => (\n <code\n key={action.name}\n className=\"bg-muted px-1.5 py-0.5 rounded text-xs\"\n >\n {action.name}\n </code>\n ))}\n </div>\n )}\n </Section>\n\n <Section title=\"Context Tree\">\n <Row label=\"Context Items\" value={state.registered.contextCount} />\n </Section>\n </div>\n );\n}\n\n/**\n * Config Tab Content\n */\nfunction ConfigTab({ state }: { state: DevLoggerState }) {\n return (\n <div className=\"space-y-4\">\n <Section title=\"Runtime\">\n <Row\n label=\"Runtime URL\"\n value={state.config.runtimeUrl || \"Not set\"}\n mono\n />\n </Section>\n </div>\n );\n}\n\n// Helper Components\n\nfunction Section({\n title,\n children,\n}: {\n title: string;\n children: React.ReactNode;\n}) {\n return (\n <div>\n <h3 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\n {title}\n </h3>\n {children}\n </div>\n );\n}\n\nfunction Row({\n label,\n value,\n mono,\n valueClass,\n}: {\n label: string;\n value: string | number;\n mono?: boolean;\n valueClass?: string;\n}) {\n return (\n <div className=\"flex items-center justify-between py-1 text-sm\">\n <span className=\"text-muted-foreground\">{label}</span>\n <span\n className={cn(\n mono && \"font-mono text-xs bg-muted px-1.5 py-0.5 rounded\",\n valueClass,\n )}\n >\n {value}\n </span>\n </div>\n );\n}\n\nfunction Badge({ level }: { level: string }) {\n const colors: Record<string, string> = {\n allow_always: \"bg-green-100 text-green-800\",\n deny_always: \"bg-red-100 text-red-800\",\n session: \"bg-blue-100 text-blue-800\",\n ask: \"bg-gray-100 text-gray-800\",\n };\n\n return (\n <span\n className={cn(\n \"px-1.5 py-0.5 rounded text-xs font-medium\",\n colors[level] || colors.ask,\n )}\n >\n {level}\n </span>\n );\n}\n\nfunction StatusBadge({ status }: { status: string }) {\n const colors: Record<string, string> = {\n pending: \"bg-yellow-100 text-yellow-800\",\n executing: \"bg-blue-100 text-blue-800\",\n completed: \"bg-green-100 text-green-800\",\n error: \"bg-red-100 text-red-800\",\n };\n\n return (\n <span\n className={cn(\n \"px-1.5 py-0.5 rounded text-xs font-medium\",\n colors[status] || \"bg-gray-100 text-gray-800\",\n )}\n >\n {status}\n </span>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\n// ============================================\n// Types\n// ============================================\n\nexport type CapabilityType =\n | \"vision\"\n | \"tools\"\n | \"thinking\"\n | \"streaming\"\n | \"pdf\"\n | \"audio\"\n | \"video\"\n | \"json\";\n\nexport interface CapabilityBadgeProps {\n /** Capability type to display */\n type: CapabilityType;\n /** Whether the capability is supported */\n supported?: boolean;\n /** Show label text next to icon */\n showLabel?: boolean;\n /** Size variant */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Additional class name */\n className?: string;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nconst icons: Record<CapabilityType, React.ReactNode> = {\n vision: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n ),\n tools: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z\" />\n </svg>\n ),\n thinking: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n ),\n streaming: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M22 12h-4l-3 9L9 3l-3 9H2\" />\n </svg>\n ),\n pdf: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <polyline points=\"10 9 9 9 8 9\" />\n </svg>\n ),\n audio: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z\" />\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\" />\n <line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\" />\n </svg>\n ),\n video: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <polygon points=\"23 7 16 12 23 17 23 7\" />\n <rect x=\"1\" y=\"5\" width=\"15\" height=\"14\" rx=\"2\" ry=\"2\" />\n </svg>\n ),\n json: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M4 6h16\" />\n <path d=\"M4 12h16\" />\n <path d=\"M4 18h12\" />\n </svg>\n ),\n};\n\nconst labels: Record<CapabilityType, string> = {\n vision: \"Vision\",\n tools: \"Tools\",\n thinking: \"Thinking\",\n streaming: \"Streaming\",\n pdf: \"PDF\",\n audio: \"Audio\",\n video: \"Video\",\n json: \"JSON\",\n};\n\nconst descriptions: Record<CapabilityType, string> = {\n vision: \"Supports image inputs\",\n tools: \"Supports function calling\",\n thinking: \"Extended reasoning mode\",\n streaming: \"Real-time streaming\",\n pdf: \"Can process PDF files\",\n audio: \"Supports audio inputs\",\n video: \"Supports video inputs\",\n json: \"Structured JSON output\",\n};\n\n// ============================================\n// Component\n// ============================================\n\n/**\n * Badge showing a model capability with icon\n *\n * @example\n * ```tsx\n * <CapabilityBadge type=\"vision\" supported />\n * <CapabilityBadge type=\"audio\" supported={false} />\n * ```\n */\nexport function CapabilityBadge({\n type,\n supported = true,\n showLabel = false,\n size = \"sm\",\n className,\n}: CapabilityBadgeProps) {\n const sizeClasses = {\n sm: \"h-5 px-1.5 text-[10px]\",\n md: \"h-6 px-2 text-xs\",\n lg: \"h-7 px-2.5 text-sm\",\n };\n\n const iconSizes = {\n sm: \"w-3 h-3\",\n md: \"w-3.5 h-3.5\",\n lg: \"w-4 h-4\",\n };\n\n return (\n <div\n className={cn(\n \"inline-flex items-center gap-1 rounded-full font-medium transition-colors\",\n sizeClasses[size],\n supported\n ? \"bg-primary/10 text-primary\"\n : \"bg-muted text-muted-foreground opacity-50\",\n className,\n )}\n title={`${labels[type]}: ${descriptions[type]}`}\n >\n <span className={cn(\"flex-shrink-0\", iconSizes[size])}>\n {icons[type]}\n </span>\n {showLabel && <span>{labels[type]}</span>}\n </div>\n );\n}\n\n// ============================================\n// Capability List\n// ============================================\n\nexport interface CapabilityListProps {\n /** Capabilities object */\n capabilities: {\n supportsVision?: boolean;\n supportsTools?: boolean;\n supportsThinking?: boolean;\n supportsStreaming?: boolean;\n supportsPDF?: boolean;\n supportsAudio?: boolean;\n supportsVideo?: boolean;\n supportsJsonMode?: boolean;\n };\n /** Show labels */\n showLabels?: boolean;\n /** Only show supported capabilities */\n onlySupported?: boolean;\n /** Size variant */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Additional class name */\n className?: string;\n}\n\n/**\n * Display a list of capability badges\n *\n * @example\n * ```tsx\n * const { capabilities } = useCapabilities();\n * <CapabilityList capabilities={capabilities} />\n * ```\n */\nexport function CapabilityList({\n capabilities,\n showLabels = false,\n onlySupported = true,\n size = \"sm\",\n className,\n}: CapabilityListProps) {\n const items: Array<{ type: CapabilityType; supported: boolean }> = [\n { type: \"vision\", supported: capabilities.supportsVision ?? false },\n { type: \"tools\", supported: capabilities.supportsTools ?? false },\n { type: \"thinking\", supported: capabilities.supportsThinking ?? false },\n { type: \"streaming\", supported: capabilities.supportsStreaming ?? false },\n { type: \"pdf\", supported: capabilities.supportsPDF ?? false },\n { type: \"audio\", supported: capabilities.supportsAudio ?? false },\n { type: \"video\", supported: capabilities.supportsVideo ?? false },\n { type: \"json\", supported: capabilities.supportsJsonMode ?? false },\n ];\n\n const filteredItems = onlySupported\n ? items.filter((item) => item.supported)\n : items;\n\n if (filteredItems.length === 0) return null;\n\n return (\n <div className={cn(\"flex flex-wrap gap-1\", className)}>\n {filteredItems.map((item) => (\n <CapabilityBadge\n key={item.type}\n type={item.type}\n supported={item.supported}\n showLabel={showLabels}\n size={size}\n />\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { CapabilityList } from \"./capability-badge\";\n\n// ============================================\n// Types\n// ============================================\n\nexport interface ModelOption {\n /** Model ID */\n id: string;\n /** Display name */\n name?: string;\n /** Provider name */\n provider?: string;\n /** Model capabilities (optional, for showing badges) */\n capabilities?: {\n supportsVision?: boolean;\n supportsTools?: boolean;\n supportsThinking?: boolean;\n supportsStreaming?: boolean;\n supportsPDF?: boolean;\n supportsAudio?: boolean;\n supportsVideo?: boolean;\n supportsJsonMode?: boolean;\n };\n}\n\nexport interface ProviderGroup {\n /** Provider name */\n name: string;\n /** Provider display label */\n label?: string;\n /** Models in this provider */\n models: ModelOption[];\n}\n\nexport interface ModelSelectorProps {\n /** Currently selected model ID */\n value?: string;\n /** Called when selection changes */\n onChange?: (modelId: string, provider?: string) => void;\n /** Models grouped by provider */\n providers?: ProviderGroup[];\n /** Flat list of models (alternative to providers) */\n models?: ModelOption[];\n /** Current capabilities (for showing in header) */\n currentCapabilities?: ModelOption[\"capabilities\"];\n /** Placeholder text */\n placeholder?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Size variant */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Show capability badges */\n showCapabilities?: boolean;\n /** Additional class name */\n className?: string;\n}\n\n// ============================================\n// Component\n// ============================================\n\n/**\n * Model selector dropdown with provider grouping\n *\n * @example\n * ```tsx\n * const { provider, model, supportedModels } = useCapabilities();\n *\n * <ModelSelector\n * value={model}\n * onChange={(modelId) => console.log('Selected:', modelId)}\n * providers={[\n * {\n * name: 'openai',\n * label: 'OpenAI',\n * models: [\n * { id: 'gpt-4o', name: 'GPT-4o' },\n * { id: 'gpt-5.2', name: 'GPT-4o Mini' },\n * ],\n * },\n * ]}\n * />\n * ```\n */\nexport function ModelSelector({\n value,\n onChange,\n providers,\n models,\n currentCapabilities,\n placeholder = \"Select model...\",\n disabled = false,\n size = \"md\",\n showCapabilities = true,\n className,\n}: ModelSelectorProps) {\n const [isOpen, setIsOpen] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n // Close on outside click\n React.useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n }\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n // Find selected model info\n const selectedModel = React.useMemo(() => {\n if (!value) return null;\n\n // Check providers first\n if (providers) {\n for (const provider of providers) {\n const model = provider.models.find((m) => m.id === value);\n if (model) return { ...model, provider: provider.name };\n }\n }\n\n // Check flat models list\n if (models) {\n return models.find((m) => m.id === value) || null;\n }\n\n return null;\n }, [value, providers, models]);\n\n const sizeClasses = {\n sm: \"h-8 text-xs px-2\",\n md: \"h-9 text-sm px-3\",\n lg: \"h-10 text-base px-4\",\n };\n\n const handleSelect = (modelId: string, provider?: string) => {\n onChange?.(modelId, provider);\n setIsOpen(false);\n };\n\n return (\n <div ref={containerRef} className={cn(\"relative\", className)}>\n {/* Trigger button */}\n <button\n type=\"button\"\n onClick={() => !disabled && setIsOpen(!isOpen)}\n disabled={disabled}\n className={cn(\n \"flex items-center justify-between gap-2 w-full rounded-md border bg-background\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n sizeClasses[size],\n )}\n >\n <div className=\"flex items-center gap-2 min-w-0\">\n {selectedModel ? (\n <>\n <span className=\"truncate font-medium\">\n {selectedModel.name || selectedModel.id}\n </span>\n {selectedModel.provider && (\n <span className=\"text-muted-foreground text-[10px] uppercase\">\n {selectedModel.provider}\n </span>\n )}\n </>\n ) : (\n <span className=\"text-muted-foreground\">{placeholder}</span>\n )}\n </div>\n\n {/* Chevron */}\n <svg\n className={cn(\n \"w-4 h-4 flex-shrink-0 text-muted-foreground transition-transform\",\n isOpen && \"rotate-180\",\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </button>\n\n {/* Show capabilities below button if provided */}\n {showCapabilities && currentCapabilities && (\n <div className=\"mt-1\">\n <CapabilityList\n capabilities={currentCapabilities}\n size=\"sm\"\n onlySupported\n />\n </div>\n )}\n\n {/* Dropdown */}\n {isOpen && (\n <div\n className={cn(\n \"csdk-model-dropdown absolute z-50 top-full left-0 right-0 mt-1\",\n \"max-h-[300px] overflow-auto\",\n \"rounded-md border bg-popover text-popover-foreground shadow-md\",\n \"animate-in fade-in-0 zoom-in-95\",\n )}\n >\n {/* Providers with groups */}\n {providers?.map((provider) => (\n <div key={provider.name}>\n {/* Provider header */}\n <div className=\"px-2 py-1.5 text-[10px] font-semibold text-muted-foreground uppercase tracking-wider bg-muted/50\">\n {provider.label || provider.name}\n </div>\n\n {/* Models */}\n {provider.models.map((model) => (\n <button\n key={model.id}\n type=\"button\"\n onClick={() => handleSelect(model.id, provider.name)}\n className={cn(\n \"flex flex-col gap-0.5 w-full px-3 py-2 text-left\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:bg-accent focus:text-accent-foreground focus:outline-none\",\n value === model.id && \"bg-accent\",\n )}\n >\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium text-sm\">\n {model.name || model.id}\n </span>\n {value === model.id && (\n <svg\n className=\"w-4 h-4 text-primary\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n )}\n </div>\n {showCapabilities && model.capabilities && (\n <CapabilityList\n capabilities={model.capabilities}\n size=\"sm\"\n onlySupported\n />\n )}\n </button>\n ))}\n </div>\n ))}\n\n {/* Flat models list */}\n {models?.map((model) => (\n <button\n key={model.id}\n type=\"button\"\n onClick={() => handleSelect(model.id, model.provider)}\n className={cn(\n \"flex flex-col gap-0.5 w-full px-3 py-2 text-left\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:bg-accent focus:text-accent-foreground focus:outline-none\",\n value === model.id && \"bg-accent\",\n )}\n >\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium text-sm\">\n {model.name || model.id}\n </span>\n {model.provider && (\n <span className=\"text-muted-foreground text-[10px] uppercase\">\n {model.provider}\n </span>\n )}\n {value === model.id && (\n <svg\n className=\"w-4 h-4 text-primary ml-auto\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n )}\n </div>\n {showCapabilities && model.capabilities && (\n <CapabilityList\n capabilities={model.capabilities}\n size=\"sm\"\n onlySupported\n />\n )}\n </button>\n ))}\n\n {/* Empty state */}\n {!providers?.length && !models?.length && (\n <div className=\"px-3 py-4 text-center text-sm text-muted-foreground\">\n No models available\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\n// ============================================\n// Simple Model Selector (just a native select)\n// ============================================\n\nexport interface SimpleModelSelectorProps {\n /** Currently selected model ID */\n value?: string;\n /** Called when selection changes */\n onChange?: (modelId: string) => void;\n /** List of model IDs */\n models: string[];\n /** Disabled state */\n disabled?: boolean;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * Simple native select for model selection\n *\n * @example\n * ```tsx\n * const { model, supportedModels } = useCapabilities();\n *\n * <SimpleModelSelector\n * value={model}\n * onChange={(id) => console.log('Selected:', id)}\n * models={supportedModels}\n * />\n * ```\n */\nexport function SimpleModelSelector({\n value,\n onChange,\n models,\n disabled = false,\n className,\n}: SimpleModelSelectorProps) {\n return (\n <select\n value={value || \"\"}\n onChange={(e) => onChange?.(e.target.value)}\n disabled={disabled}\n className={cn(\n \"h-9 px-3 rounded-md border bg-background text-sm\",\n \"focus:outline-none focus:ring-2 focus:ring-ring\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n >\n <option value=\"\" disabled>\n Select model...\n </option>\n {models.map((modelId) => (\n <option key={modelId} value={modelId}>\n {modelId}\n </option>\n ))}\n </select>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Popover as BasePopover } from \"@base-ui/react/popover\";\nimport { cn } from \"../../lib/utils\";\n\n// ============================================\n// Popover (Root)\n// ============================================\n\nexport type PopoverProps = {\n children: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n};\n\nfunction Popover({ children, open, defaultOpen, onOpenChange }: PopoverProps) {\n return (\n <BasePopover.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n >\n {children}\n </BasePopover.Root>\n );\n}\n\n// ============================================\n// PopoverTrigger\n// ============================================\n\nexport type PopoverTriggerProps = {\n children: React.ReactNode;\n asChild?: boolean;\n className?: string;\n} & React.ComponentPropsWithoutRef<\"button\">;\n\nfunction PopoverTrigger({\n children,\n asChild,\n className,\n ...props\n}: PopoverTriggerProps) {\n if (asChild && React.isValidElement(children)) {\n return (\n <BasePopover.Trigger render={children} className={className} {...props} />\n );\n }\n\n return (\n <BasePopover.Trigger className={className} {...props}>\n {children}\n </BasePopover.Trigger>\n );\n}\n\n// ============================================\n// PopoverContent\n// ============================================\n\nexport type PopoverContentProps = {\n children: React.ReactNode;\n className?: string;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n align?: \"start\" | \"center\" | \"end\";\n sideOffset?: number;\n};\n\nfunction PopoverContent({\n children,\n className,\n side = \"bottom\",\n align = \"start\",\n sideOffset = 4,\n}: PopoverContentProps) {\n return (\n <BasePopover.Portal>\n <BasePopover.Positioner side={side} align={align} sideOffset={sideOffset}>\n <BasePopover.Popup\n className={cn(\n \"csdk-popover-popup\",\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none\",\n className,\n )}\n >\n {children}\n </BasePopover.Popup>\n </BasePopover.Positioner>\n </BasePopover.Portal>\n );\n}\n\n// ============================================\n// Exports\n// ============================================\n\nexport { Popover, PopoverTrigger, PopoverContent };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { Thread } from \"../../../core/types/thread\";\nimport { Popover, PopoverTrigger, PopoverContent } from \"./popover\";\n\n// ============================================\n// Helper Functions\n// ============================================\n\n/**\n * Format a date for display\n */\nfunction formatDate(date: Date): string {\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n\n // Less than 1 minute\n if (diff < 60 * 1000) {\n return \"Just now\";\n }\n\n // Less than 1 hour\n if (diff < 60 * 60 * 1000) {\n const mins = Math.floor(diff / (60 * 1000));\n return `${mins}m ago`;\n }\n\n // Less than 24 hours\n if (diff < 24 * 60 * 60 * 1000) {\n const hours = Math.floor(diff / (60 * 60 * 1000));\n return `${hours}h ago`;\n }\n\n // Less than 7 days\n if (diff < 7 * 24 * 60 * 60 * 1000) {\n const days = Math.floor(diff / (24 * 60 * 60 * 1000));\n return `${days}d ago`;\n }\n\n // Otherwise show date\n return date.toLocaleDateString();\n}\n\n// ============================================\n// Types\n// ============================================\n\nexport interface ThreadPickerProps {\n /** Currently selected thread ID */\n value?: string | null;\n /** List of threads to display */\n threads: Thread[];\n /** Called when a thread is selected */\n onSelect?: (threadId: string) => void;\n /** Called when a thread is deleted */\n onDeleteThread?: (threadId: string) => void;\n /** Called when \"New conversation\" is clicked */\n onNewThread?: () => void;\n /** Placeholder text when no thread is selected */\n placeholder?: string;\n /** Text for new conversation button */\n newThreadLabel?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Size variant */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Additional class name for root container */\n className?: string;\n /** Class name for the trigger button */\n buttonClassName?: string;\n /** Class name for the dropdown container */\n dropdownClassName?: string;\n /** Class name for thread items */\n itemClassName?: string;\n /** Class name for the new conversation button */\n newButtonClassName?: string;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction ChevronIcon({ className }: { className?: string }) {\n return (\n <svg\n className={cn(\"w-4 h-4\", className)}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n );\n}\n\nfunction PlusIcon({ className }: { className?: string }) {\n return (\n <svg\n className={cn(\"w-4 h-4\", className)}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 4v16m8-8H4\" />\n </svg>\n );\n}\n\nfunction CheckIcon({ className }: { className?: string }) {\n return (\n <svg\n className={cn(\"w-4 h-4\", className)}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n );\n}\n\nfunction TrashIcon({ className }: { className?: string }) {\n return (\n <svg\n className={cn(\"w-4 h-4\", className)}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M3 6h18\" />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\"\n />\n </svg>\n );\n}\n\n// ============================================\n// Component\n// ============================================\n\n/**\n * ThreadPicker - Dropdown for selecting conversations\n *\n * @example\n * ```tsx\n * const { threads, currentThread, switchThread, createThread } = useThreadManager();\n *\n * <ThreadPicker\n * value={currentThread?.id}\n * threads={threads}\n * onSelect={switchThread}\n * onNewThread={() => createThread()}\n * />\n * ```\n */\nexport function ThreadPicker({\n value,\n threads,\n onSelect,\n onDeleteThread,\n onNewThread,\n placeholder = \"Select conversation...\",\n newThreadLabel = \"New conversation\",\n disabled = false,\n loading = false,\n size = \"md\",\n className,\n buttonClassName,\n dropdownClassName,\n itemClassName,\n newButtonClassName,\n}: ThreadPickerProps) {\n const [isOpen, setIsOpen] = React.useState(false);\n // Optimistic local list — immediately reflects deletions without waiting for async state\n const [displayedThreads, setDisplayedThreads] = React.useState(threads);\n\n // Sync when external threads prop changes (e.g. after async store update or new thread)\n React.useEffect(() => {\n setDisplayedThreads(threads);\n }, [threads]);\n\n // Find selected thread\n const selectedThread = React.useMemo(() => {\n if (!value) return null;\n return displayedThreads.find((t) => t.id === value) ?? null;\n }, [value, displayedThreads]);\n\n const handleSelect = (threadId: string) => {\n onSelect?.(threadId);\n setIsOpen(false);\n };\n\n const handleNewThread = () => {\n onNewThread?.();\n setIsOpen(false);\n };\n\n const handleDelete = (threadId: string) => {\n // Optimistically remove from local list immediately\n setDisplayedThreads((prev) => prev.filter((t) => t.id !== threadId));\n onDeleteThread?.(threadId);\n };\n\n return (\n <div className={cn(\"relative w-44\", className)}>\n <Popover open={isOpen} onOpenChange={setIsOpen}>\n <PopoverTrigger\n disabled={disabled || loading}\n className={cn(\n \"flex items-center gap-1.5 w-full rounded-md px-1.5 py-0.5\",\n \"hover:bg-muted/70 transition-colors duration-150\",\n \"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\",\n disabled && \"opacity-50 cursor-not-allowed pointer-events-none\",\n buttonClassName,\n )}\n >\n <div className=\"flex items-center gap-1 text-xs min-w-0 flex-1\">\n {loading ? (\n <span className=\"text-muted-foreground truncate\">Loading...</span>\n ) : selectedThread ? (\n <span className=\"truncate font-medium text-muted-foreground\">\n {selectedThread.title || \"Untitled conversation\"}\n </span>\n ) : (\n <span className=\"text-muted-foreground/70 truncate\">\n {placeholder}\n </span>\n )}\n </div>\n\n <ChevronIcon\n className={cn(\n \"flex-shrink-0 size-3 text-muted-foreground/60 transition-transform duration-150\",\n isOpen && \"rotate-180\",\n )}\n />\n </PopoverTrigger>\n\n <PopoverContent\n align=\"start\"\n className={cn(\n \"p-0 w-56 max-h-[280px] overflow-auto\",\n dropdownClassName,\n )}\n >\n {/* New conversation button */}\n {onNewThread && (\n <button\n type=\"button\"\n onClick={handleNewThread}\n className={cn(\n \"flex items-center gap-2 w-full px-2.5 py-1.5 text-left\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:bg-accent focus:text-accent-foreground focus:outline-none\",\n \"border-b\",\n newButtonClassName,\n )}\n >\n <PlusIcon className=\"text-primary size-3\" />\n <span className=\"font-medium text-xs\">{newThreadLabel}</span>\n </button>\n )}\n\n {/* Thread list */}\n {displayedThreads.length > 0 ? (\n displayedThreads.map((thread) => (\n <div\n key={thread.id}\n className={cn(\n \"group flex items-center gap-1 w-full px-2.5 py-1.5\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus-within:bg-accent focus-within:text-accent-foreground\",\n value === thread.id && \"bg-accent\",\n itemClassName,\n )}\n >\n <button\n type=\"button\"\n onClick={() => handleSelect(thread.id)}\n className=\"flex-1 flex flex-col gap-0.5 text-left focus:outline-none min-w-0\"\n >\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"font-medium text-xs truncate\">\n {thread.title || \"Untitled conversation\"}\n </span>\n {value === thread.id && (\n <CheckIcon className=\"flex-shrink-0 text-primary size-3\" />\n )}\n </div>\n <div className=\"flex items-center gap-1.5 text-[11px] text-muted-foreground\">\n {thread.preview && (\n <span className=\"truncate max-w-[180px]\">\n {thread.preview}\n </span>\n )}\n {thread.preview && thread.updatedAt && (\n <span className=\"flex-shrink-0\">·</span>\n )}\n {thread.updatedAt && (\n <span className=\"flex-shrink-0\">\n {formatDate(thread.updatedAt)}\n </span>\n )}\n </div>\n </button>\n {/* Delete button - appears on hover */}\n {onDeleteThread && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n handleDelete(thread.id);\n }}\n className=\"flex-shrink-0 p-1 rounded opacity-0 group-hover:opacity-100 text-muted-foreground hover:text-destructive hover:bg-destructive/10 transition-all focus:opacity-100 focus:outline-none\"\n aria-label=\"Delete thread\"\n >\n <TrashIcon className=\"size-3\" />\n </button>\n )}\n </div>\n ))\n ) : (\n <div className=\"px-2.5 py-3 text-center text-xs text-muted-foreground\">\n No conversations yet\n </div>\n )}\n </PopoverContent>\n </Popover>\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { Thread } from \"../../../core/types/thread\";\n\n// ============================================\n// Helper Functions\n// ============================================\n\n/**\n * Format a date for display\n */\nfunction formatDate(date: Date): string {\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n\n // Less than 1 minute\n if (diff < 60 * 1000) {\n return \"Just now\";\n }\n\n // Less than 1 hour\n if (diff < 60 * 60 * 1000) {\n const mins = Math.floor(diff / (60 * 1000));\n return `${mins}m ago`;\n }\n\n // Less than 24 hours\n if (diff < 24 * 60 * 60 * 1000) {\n const hours = Math.floor(diff / (60 * 60 * 1000));\n return `${hours}h ago`;\n }\n\n // Less than 7 days\n if (diff < 7 * 24 * 60 * 60 * 1000) {\n const days = Math.floor(diff / (24 * 60 * 60 * 1000));\n return `${days}d ago`;\n }\n\n // Otherwise show date\n return date.toLocaleDateString();\n}\n\n// ============================================\n// Types\n// ============================================\n\nexport interface ThreadListProps {\n /** List of threads to display */\n threads: Thread[];\n /** Currently selected thread ID */\n selectedId?: string | null;\n /** Called when a thread is selected */\n onSelect?: (threadId: string) => void;\n /** Called when a thread's delete button is clicked */\n onDelete?: (threadId: string) => void;\n /** Called when \"New conversation\" is clicked */\n onNewThread?: () => void;\n /** Text for new conversation button */\n newThreadLabel?: string;\n /** Loading state */\n loading?: boolean;\n /** Empty state text */\n emptyText?: string;\n /** Show delete buttons */\n showDelete?: boolean;\n /** Additional class name */\n className?: string;\n}\n\nexport interface ThreadCardProps {\n /** Thread data */\n thread: Thread;\n /** Whether this thread is selected */\n selected?: boolean;\n /** Called when clicked */\n onClick?: () => void;\n /** Called when delete is clicked */\n onDelete?: () => void;\n /** Show delete button */\n showDelete?: boolean;\n /** Additional class name */\n className?: string;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction TrashIcon({ className }: { className?: string }) {\n return (\n <svg\n className={cn(\"w-4 h-4\", className)}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\"\n />\n </svg>\n );\n}\n\nfunction PlusIcon({ className }: { className?: string }) {\n return (\n <svg\n className={cn(\"w-4 h-4\", className)}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 4v16m8-8H4\" />\n </svg>\n );\n}\n\nfunction MessageIcon({ className }: { className?: string }) {\n return (\n <svg\n className={cn(\"w-4 h-4\", className)}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z\"\n />\n </svg>\n );\n}\n\n// ============================================\n// Loading Skeleton\n// ============================================\n\nfunction ThreadCardSkeleton() {\n return (\n <div className=\"p-3 rounded-lg border bg-card animate-pulse\">\n <div className=\"flex items-start gap-3\">\n <div className=\"w-8 h-8 rounded-full bg-muted\" />\n <div className=\"flex-1 space-y-2\">\n <div className=\"h-4 w-3/4 bg-muted rounded\" />\n <div className=\"h-3 w-1/2 bg-muted rounded\" />\n </div>\n </div>\n </div>\n );\n}\n\n// ============================================\n// Thread Card Component\n// ============================================\n\n/**\n * ThreadCard - Individual thread item in the list\n */\nexport function ThreadCard({\n thread,\n selected = false,\n onClick,\n onDelete,\n showDelete = true,\n className,\n}: ThreadCardProps) {\n const [isHovered, setIsHovered] = React.useState(false);\n\n const handleDelete = (e: React.MouseEvent) => {\n e.stopPropagation();\n onDelete?.();\n };\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n className={cn(\n \"w-full p-3 rounded-lg border bg-card text-left transition-colors\",\n \"hover:bg-accent hover:border-accent-foreground/20\",\n \"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n selected && \"bg-accent border-primary/50\",\n className,\n )}\n >\n <div className=\"flex items-start gap-3\">\n {/* Icon */}\n <div\n className={cn(\n \"flex-shrink-0 w-8 h-8 rounded-full flex items-center justify-center\",\n selected\n ? \"bg-primary/10 text-primary\"\n : \"bg-muted text-muted-foreground\",\n )}\n >\n <MessageIcon />\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center justify-between gap-2\">\n <h3 className=\"font-medium text-sm truncate\">\n {thread.title || \"Untitled conversation\"}\n </h3>\n {showDelete && isHovered && onDelete && (\n <button\n type=\"button\"\n onClick={handleDelete}\n className={cn(\n \"flex-shrink-0 p-1 rounded\",\n \"hover:bg-destructive/10 hover:text-destructive\",\n \"focus:outline-none focus:ring-2 focus:ring-destructive\",\n )}\n aria-label=\"Delete conversation\"\n >\n <TrashIcon className=\"w-3.5 h-3.5\" />\n </button>\n )}\n </div>\n\n {thread.preview && (\n <p className=\"text-xs text-muted-foreground truncate mt-0.5\">\n {thread.preview}\n </p>\n )}\n\n <div className=\"flex items-center gap-2 mt-1 text-xs text-muted-foreground\">\n {thread.messageCount !== undefined && thread.messageCount > 0 && (\n <span>{thread.messageCount} messages</span>\n )}\n {thread.messageCount !== undefined &&\n thread.messageCount > 0 &&\n thread.updatedAt && <span>·</span>}\n {thread.updatedAt && <span>{formatDate(thread.updatedAt)}</span>}\n </div>\n </div>\n </div>\n </button>\n );\n}\n\n// ============================================\n// Thread List Component\n// ============================================\n\n/**\n * ThreadList - Card-based list of conversations\n *\n * @example\n * ```tsx\n * const { threads, currentThread, switchThread, deleteThread, createThread } = useThreadManager();\n *\n * <ThreadList\n * threads={threads}\n * selectedId={currentThread?.id}\n * onSelect={switchThread}\n * onDelete={deleteThread}\n * onNewThread={() => createThread()}\n * />\n * ```\n */\nexport function ThreadList({\n threads,\n selectedId,\n onSelect,\n onDelete,\n onNewThread,\n newThreadLabel = \"New conversation\",\n loading = false,\n emptyText = \"No conversations yet\",\n showDelete = true,\n className,\n}: ThreadListProps) {\n return (\n <div className={cn(\"flex flex-col gap-2\", className)}>\n {/* New conversation button */}\n {onNewThread && (\n <button\n type=\"button\"\n onClick={onNewThread}\n className={cn(\n \"flex items-center gap-2 p-3 rounded-lg border border-dashed\",\n \"hover:bg-accent hover:border-accent-foreground/20\",\n \"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n \"transition-colors\",\n )}\n >\n <div className=\"flex-shrink-0 w-8 h-8 rounded-full bg-primary/10 flex items-center justify-center\">\n <PlusIcon className=\"text-primary\" />\n </div>\n <span className=\"font-medium text-sm\">{newThreadLabel}</span>\n </button>\n )}\n\n {/* Loading state */}\n {loading && (\n <>\n <ThreadCardSkeleton />\n <ThreadCardSkeleton />\n <ThreadCardSkeleton />\n </>\n )}\n\n {/* Thread list */}\n {!loading &&\n threads.length > 0 &&\n threads.map((thread) => (\n <ThreadCard\n key={thread.id}\n thread={thread}\n selected={selectedId === thread.id}\n onClick={() => onSelect?.(thread.id)}\n onDelete={() => onDelete?.(thread.id)}\n showDelete={showDelete}\n />\n ))}\n\n {/* Empty state */}\n {!loading && threads.length === 0 && (\n <div className=\"py-8 text-center text-sm text-muted-foreground\">\n {emptyText}\n </div>\n )}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nconst CopilotSDKLogo = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n width={props.width || 170}\n height={props.height || 170}\n viewBox=\"0 0 170 170\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n className={cn(\"w-auto h-[30px]\", props.className)}\n >\n <path\n opacity={0.4}\n d=\"M108.379 0C111.143 0 113.538 1.91574 114.146 4.61243L118.392 23.4631C121.492 37.2253 132.239 47.9726 146.001 51.0727L164.852 55.319C167.549 55.9265 169.465 58.3218 169.465 61.0861C169.465 63.8504 167.549 66.2457 164.852 66.8532L146.001 71.0995C132.239 74.1995 121.492 84.9467 118.392 98.7088L114.146 117.56C113.538 120.257 111.143 122.172 108.379 122.172C105.614 122.172 103.219 120.257 102.611 117.56L98.3651 98.7088C95.2651 84.9467 84.5179 74.1995 70.7558 71.0995L51.9049 66.8532C49.2082 66.2457 47.2924 63.8504 47.2924 61.0861C47.2924 58.3218 49.2082 55.9265 51.9049 55.319L70.7558 51.0727C84.5179 47.9726 95.2651 37.2253 98.3651 23.4631L102.611 4.61243C103.219 1.91574 105.614 0 108.379 0Z\"\n fill=\"#6352FF\"\n />\n <path\n d=\"M45.3219 78.8207C48.0863 78.8207 50.4816 80.736 51.089 83.4333L54.1221 96.8982C56.1931 106.092 63.3728 113.272 72.5663 115.342L86.0313 118.375C88.7285 118.983 90.6439 121.378 90.6439 124.143C90.6439 126.907 88.7285 129.302 86.0313 129.91L72.5663 132.943C63.3728 135.014 56.1931 142.193 54.1221 151.387L51.089 164.852C50.4816 167.549 48.0863 169.465 45.3219 169.465C42.5576 169.465 40.1623 167.549 39.5549 164.852L36.5218 151.387C34.4507 142.193 27.271 135.014 18.0772 132.943L4.61243 129.91C1.91574 129.302 0 126.907 0 124.143C0 121.378 1.91574 118.983 4.61243 118.375L18.0772 115.342C27.271 113.272 34.4507 106.092 36.5218 96.8982L39.5549 83.4333C40.1623 80.736 42.5576 78.8207 45.3219 78.8207Z\"\n fill=\"#523FFF\"\n />\n <line\n x1={137.266}\n y1={162.316}\n x2={83.1281}\n y2={162.316}\n stroke=\"currentColor\"\n strokeWidth={11.8231}\n />\n <line\n x1={160.188}\n y1={162.316}\n x2={140.811}\n y2={162.316}\n stroke=\"currentColor\"\n strokeOpacity={0.26}\n strokeWidth={11.8231}\n />\n </svg>\n);\nexport default CopilotSDKLogo;\n","\"use client\";\n\nimport React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { CloseIcon } from \"../../icons\";\nimport CopilotSDKLogo from \"../../icons/copilot-sdk-logo\";\n\nconst DEFAULT_NAME = \"AI Copilot\";\n\nexport type ChatHeaderProps = {\n /** Logo image URL (pass empty string to hide logo) */\n logo?: string;\n /** Copilot name */\n name?: string;\n /** @deprecated Use `name` instead */\n title?: string;\n /** Thread picker element (injected by parent) */\n threadPicker?: React.ReactNode;\n /** Called when close button is clicked */\n onClose?: () => void;\n /** Additional class names */\n className?: string;\n};\n\nexport function ChatHeader({\n logo,\n name,\n title,\n threadPicker,\n onClose,\n className,\n}: ChatHeaderProps) {\n const displayName = name || title || DEFAULT_NAME;\n // Use custom logo URL if provided, otherwise use default SDK logo\n // Pass empty string to hide logo entirely\n const showDefaultLogo = logo === undefined;\n const showCustomLogo = typeof logo === \"string\" && logo.length > 0;\n\n return (\n <div\n className={cn(\n \"flex flex-col border-b border-border bg-background\",\n className,\n )}\n >\n {/* Top row: Logo + Name + Close */}\n <div className=\"flex items-center justify-between px-4 py-2\">\n <div className=\"flex items-center gap-2.5 shrink-0\">\n {showDefaultLogo && <CopilotSDKLogo className=\"h-6 w-auto\" />}\n {showCustomLogo && (\n <img\n src={logo}\n alt={displayName}\n className=\"size-6 rounded-md object-contain\"\n />\n )}\n <div>\n <div className=\"font-semibold text-foreground text-sm mb-0.5\">\n {displayName}\n </div>\n {/* Bottom row: Thread Picker */}\n {threadPicker && <div className=\"\">{threadPicker}</div>}\n </div>\n </div>\n\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"rounded-md p-1 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground\"\n aria-label=\"Close chat\"\n >\n <CloseIcon className=\"h-5 w-5\" />\n </button>\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { cn } from \"../../../lib/utils\";\n\ntype SuggestionsProps = {\n suggestions: string[];\n onSuggestionClick?: (suggestion: string) => void;\n className?: string;\n};\n\nexport function Suggestions({\n suggestions,\n onSuggestionClick,\n className,\n}: SuggestionsProps) {\n if (!suggestions.length) return null;\n\n return (\n <div className={cn(\"flex flex-wrap gap-2 px-4 py-2\", className)}>\n {suggestions.map((suggestion, index) => (\n <button\n key={index}\n type=\"button\"\n onClick={() => onSuggestionClick?.(suggestion)}\n className=\"inline-flex items-center rounded-full border bg-background px-3 py-1.5 text-sm transition-colors hover:bg-muted\"\n >\n {suggestion}\n </button>\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type {\n MCPUIResource,\n MCPUIIntent,\n MCPUIFrameProps,\n} from \"../../../mcp/ui/types\";\nimport {\n parseMCPUIMessage,\n DEFAULT_MCP_UI_SANDBOX,\n} from \"../../../mcp/ui/types\";\nimport { Loader } from \"./loader\";\n\n/**\n * MCPUIFrame - Renders MCP-UI resources in a sandboxed iframe\n *\n * This component provides secure rendering of interactive UI components\n * returned by MCP tools. It handles:\n * - Inline HTML content (text/html)\n * - External URLs (text/uri-list)\n * - PostMessage communication for intents\n *\n * @example\n * ```tsx\n * <MCPUIFrame\n * resource={{\n * uri: \"ui://shop/product/123\",\n * mimeType: \"text/html\",\n * content: \"<div class='product'>...</div>\",\n * metadata: { height: \"300px\" }\n * }}\n * onIntent={(intent) => {\n * if (intent.type === \"tool\") {\n * callTool(intent.name, intent.arguments);\n * }\n * }}\n * />\n * ```\n */\nexport function MCPUIFrame({\n resource,\n onIntent,\n onError,\n onLoad,\n className,\n style,\n sandbox = DEFAULT_MCP_UI_SANDBOX,\n showLoading = true,\n testId,\n}: MCPUIFrameProps) {\n const iframeRef = React.useRef<HTMLIFrameElement>(null);\n const [isLoading, setIsLoading] = React.useState(true);\n const [error, setError] = React.useState<Error | null>(null);\n\n // Handle postMessage events from the iframe\n React.useEffect(() => {\n const handleMessage = (event: MessageEvent) => {\n // Validate the message source\n if (event.source !== iframeRef.current?.contentWindow) {\n return;\n }\n\n // Parse the message\n const intent = parseMCPUIMessage(event.data);\n if (intent && onIntent) {\n onIntent(intent);\n }\n };\n\n window.addEventListener(\"message\", handleMessage);\n return () => window.removeEventListener(\"message\", handleMessage);\n }, [onIntent]);\n\n // Handle iframe load\n const handleLoad = React.useCallback(() => {\n setIsLoading(false);\n onLoad?.();\n }, [onLoad]);\n\n // Handle iframe error\n const handleError = React.useCallback(() => {\n const err = new Error(\"Failed to load MCP UI content\");\n setError(err);\n setIsLoading(false);\n onError?.(err);\n }, [onError]);\n\n // Build iframe content based on MIME type\n const { srcDoc, src } = React.useMemo(() => {\n if (resource.mimeType === \"text/html\") {\n // Inline HTML content\n let content = resource.content || \"\";\n\n // If blob is provided, decode it\n if (resource.blob && !resource.content) {\n try {\n content = atob(resource.blob);\n } catch {\n setError(new Error(\"Failed to decode MCP UI blob content\"));\n }\n }\n\n // Wrap content with base styles and message posting helper\n const wrappedContent = `\n <!DOCTYPE html>\n <html>\n <head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <style>\n *, *::before, *::after { box-sizing: border-box; }\n body { margin: 0; padding: 8px; font-family: system-ui, -apple-system, sans-serif; }\n </style>\n </head>\n <body>\n ${content}\n <script>\n // Helper for sending intents to parent\n window.mcpUI = {\n sendIntent: function(intent) {\n window.parent.postMessage({ source: 'mcp-ui', intent: intent }, '*');\n },\n callTool: function(name, args) {\n this.sendIntent({ type: 'tool', name: name, arguments: args });\n },\n sendAction: function(action, data) {\n this.sendIntent({ type: 'intent', action: action, data: data });\n },\n prompt: function(text) {\n this.sendIntent({ type: 'prompt', text: text });\n },\n notify: function(message, level) {\n this.sendIntent({ type: 'notify', message: message, level: level || 'info' });\n },\n openLink: function(url, newTab) {\n this.sendIntent({ type: 'link', url: url, newTab: newTab !== false });\n }\n };\n </script>\n </body>\n </html>\n `;\n\n return { srcDoc: wrappedContent, src: undefined };\n }\n\n if (resource.mimeType === \"text/uri-list\") {\n // External URL\n return { srcDoc: undefined, src: resource.content };\n }\n\n // Remote DOM or unknown - try to use content as URL\n return { srcDoc: undefined, src: resource.content };\n }, [resource]);\n\n // Calculate dimensions\n const frameStyle: React.CSSProperties = {\n width: resource.metadata?.width || \"100%\",\n minHeight: resource.metadata?.height || \"200px\",\n ...style,\n };\n\n if (error) {\n return (\n <div\n className={cn(\n \"flex items-center justify-center rounded-lg border border-destructive/50 bg-destructive/10 p-4 text-sm text-destructive\",\n className,\n )}\n style={frameStyle}\n data-testid={testId ? `${testId}-error` : undefined}\n >\n <div className=\"flex items-center gap-2\">\n <svg\n className=\"size-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"\n />\n </svg>\n <span>Failed to load interactive content</span>\n </div>\n </div>\n );\n }\n\n return (\n <div\n className={cn(\"relative overflow-hidden rounded-lg border\", className)}\n data-testid={testId}\n >\n {/* Title bar */}\n {resource.metadata?.title && (\n <div className=\"border-b bg-muted/50 px-3 py-1.5 text-xs font-medium text-muted-foreground\">\n {resource.metadata.title}\n </div>\n )}\n\n {/* Loading overlay */}\n {showLoading && isLoading && (\n <div className=\"csdk-mcp-loading absolute inset-0 z-10 flex items-center justify-center bg-background/80\">\n <Loader variant=\"dots\" size=\"md\" />\n </div>\n )}\n\n {/* Iframe */}\n <iframe\n ref={iframeRef}\n srcDoc={srcDoc}\n src={src}\n sandbox={sandbox}\n onLoad={handleLoad}\n onError={handleError}\n className=\"block w-full border-0\"\n style={frameStyle}\n title={resource.metadata?.title || \"MCP UI Content\"}\n data-testid={testId ? `${testId}-iframe` : undefined}\n />\n </div>\n );\n}\n\n/**\n * MCPUIFrameList - Renders multiple MCP-UI resources\n *\n * Convenience component for rendering an array of UI resources.\n *\n * @example\n * ```tsx\n * <MCPUIFrameList\n * resources={execution.result?._uiResources}\n * onIntent={handleIntent}\n * />\n * ```\n */\nexport interface MCPUIFrameListProps {\n /** Array of UI resources to render */\n resources?: MCPUIResource[];\n /** Callback when any UI emits an intent */\n onIntent?: (intent: MCPUIIntent, resourceIndex: number) => void;\n /** Callback when an error occurs */\n onError?: (error: Error, resourceIndex: number) => void;\n /** Additional CSS class names */\n className?: string;\n /** Class name for individual frames */\n frameClassName?: string;\n /** Gap between frames */\n gap?: \"sm\" | \"md\" | \"lg\";\n}\n\nexport function MCPUIFrameList({\n resources,\n onIntent,\n onError,\n className,\n frameClassName,\n gap = \"md\",\n}: MCPUIFrameListProps) {\n if (!resources || resources.length === 0) {\n return null;\n }\n\n const gapClasses = {\n sm: \"space-y-1\",\n md: \"space-y-2\",\n lg: \"space-y-4\",\n };\n\n return (\n <div className={cn(gapClasses[gap], className)}>\n {resources.map((resource, index) => (\n <MCPUIFrame\n key={`${resource.uri}-${index}`}\n resource={resource}\n onIntent={(intent) => onIntent?.(intent, index)}\n onError={(error) => onError?.(error, index)}\n className={frameClassName}\n testId={`mcp-ui-frame-${index}`}\n />\n ))}\n </div>\n );\n}\n\n// Note: MCPUIFrameProps is imported from mcp/ui/types\n// MCPUIFrameListProps is exported above with the component\n","\"use client\";\n\nimport React, {\n createContext,\n useContext,\n useState,\n useCallback,\n useMemo,\n} from \"react\";\nimport type { ChatMessage } from \"./types\";\n\nexport interface RegisteredAction {\n id: string;\n icon: React.ReactNode;\n tooltip: string;\n onClick: (props: { message: ChatMessage }) => void;\n hidden?: boolean | ((props: { message: ChatMessage }) => boolean);\n className?: string;\n}\n\ninterface MessageActionsContextType {\n getActions: (role: \"user\" | \"assistant\") => RegisteredAction[];\n registerActions: (\n role: \"user\" | \"assistant\",\n actions: RegisteredAction[],\n ) => void;\n clearActions: (role: \"user\" | \"assistant\") => void;\n}\n\nconst MessageActionsContext = createContext<MessageActionsContextType | null>(\n null,\n);\n\nexport function MessageActionsProvider({\n children,\n}: {\n children: React.ReactNode;\n}) {\n const [registry, setRegistry] = useState<Record<string, RegisteredAction[]>>(\n {},\n );\n\n const registerActions = useCallback(\n (role: \"user\" | \"assistant\", actions: RegisteredAction[]) => {\n setRegistry((prev) => ({ ...prev, [role]: actions }));\n },\n [],\n );\n\n const clearActions = useCallback((role: \"user\" | \"assistant\") => {\n setRegistry((prev) => {\n const next = { ...prev };\n delete next[role];\n return next;\n });\n }, []);\n\n const getActions = useCallback(\n (role: \"user\" | \"assistant\") => registry[role] ?? [],\n [registry],\n );\n\n const contextValue = useMemo(\n () => ({ getActions, registerActions, clearActions }),\n [getActions, registerActions, clearActions],\n );\n\n return (\n <MessageActionsContext.Provider value={contextValue}>\n {children}\n </MessageActionsContext.Provider>\n );\n}\n\nexport function useMessageActionsContext() {\n return useContext(MessageActionsContext);\n}\n","\"use client\";\n\nimport React, {\n useLayoutEffect,\n useMemo,\n useRef,\n createContext,\n useContext,\n} from \"react\";\nimport {\n useMessageActionsContext,\n type RegisteredAction,\n} from \"./message-actions-context\";\nimport type { ChatMessage } from \"./types\";\n\n// ─── Role sub-context ────────────────────────────────────────────────────────\n\nconst RoleContext = createContext<\"user\" | \"assistant\" | null>(null);\n\n// ─── Built-in action icons ────────────────────────────────────────────────────\n\nfunction CopyIcon() {\n return (\n <svg\n width=\"13\"\n height=\"13\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n );\n}\n\nfunction CheckIcon() {\n return (\n <svg\n width=\"13\"\n height=\"13\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M20 6L9 17l-5-5\" />\n </svg>\n );\n}\n\nfunction EditIcon() {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n <path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\" />\n </svg>\n );\n}\n\nfunction ThumbsUpIcon() {\n return (\n <svg\n width=\"13\"\n height=\"13\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M7 10v12\" />\n <path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\" />\n </svg>\n );\n}\n\nfunction ThumbsDownIcon() {\n return (\n <svg\n width=\"13\"\n height=\"13\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M17 14V2\" />\n <path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z\" />\n </svg>\n );\n}\n\n// ─── CopyAction ───────────────────────────────────────────────────────────────\n\nexport interface CopyActionProps {\n tooltip?: string;\n className?: string;\n}\n\n/** Built-in copy-to-clipboard action. Use inside CopilotChat.MessageActions. */\nexport function CopyAction({ tooltip = \"Copy\", className }: CopyActionProps) {\n return null; // declarative marker — rendered by MessageActions\n}\nCopyAction.displayName = \"CopyAction\";\n\n// ─── EditAction ───────────────────────────────────────────────────────────────\n\nexport interface EditActionProps {\n tooltip?: string;\n className?: string;\n}\n\n/** Built-in edit action for user messages. Use inside CopilotChat.MessageActions role=\"user\". */\nexport function EditAction({ tooltip = \"Edit\", className }: EditActionProps) {\n return null;\n}\nEditAction.displayName = \"EditAction\";\n\n// ─── FeedbackAction ───────────────────────────────────────────────────────────\n\nexport interface FeedbackActionProps {\n onFeedback?: (message: ChatMessage, type: \"helpful\" | \"not-helpful\") => void;\n tooltip?: string;\n className?: string;\n}\n\n/** Built-in thumbs up/down feedback action. Use inside CopilotChat.MessageActions. */\nexport function FeedbackAction({\n onFeedback,\n tooltip = \"Feedback\",\n className,\n}: FeedbackActionProps) {\n return null;\n}\nFeedbackAction.displayName = \"FeedbackAction\";\n\n// ─── Action ───────────────────────────────────────────────────────────────────\n\nexport interface ActionProps {\n id?: string;\n icon: React.ReactNode;\n tooltip: string;\n onClick: (props: { message: ChatMessage }) => void;\n hidden?: boolean | ((props: { message: ChatMessage }) => boolean);\n className?: string;\n}\n\n/** Custom action button. Use inside CopilotChat.MessageActions. */\nexport function Action({\n icon,\n tooltip,\n onClick,\n hidden,\n className,\n}: ActionProps) {\n return null;\n}\nAction.displayName = \"Action\";\n\n// ─── MessageActions ───────────────────────────────────────────────────────────\n\nexport interface MessageActionsProps {\n role: \"user\" | \"assistant\";\n children?: React.ReactNode;\n}\n\n/**\n * Registers message actions for a specific role.\n * Place inside <CopilotChat> as a direct child.\n *\n * @example\n * ```tsx\n * <CopilotChat>\n * <CopilotChat.MessageActions role=\"assistant\">\n * <CopilotChat.CopyAction />\n * <CopilotChat.FeedbackAction onFeedback={(msg, type) => log(type)} />\n * <CopilotChat.Action icon={<ShareIcon />} tooltip=\"Share\" onClick={({ message }) => share(message)} />\n * </CopilotChat.MessageActions>\n *\n * <CopilotChat.MessageActions role=\"user\">\n * <CopilotChat.EditAction />\n * </CopilotChat.MessageActions>\n * </CopilotChat>\n * ```\n */\nexport function MessageActions({ role, children }: MessageActionsProps) {\n const ctx = useMessageActionsContext();\n // Use ref so ctx is never a useLayoutEffect dependency — prevents infinite\n // loop when setRegistry fires → context value changes → useLayoutEffect\n // cleanup runs → clearActions → setRegistry → repeat.\n const ctxRef = useRef(ctx);\n ctxRef.current = ctx;\n\n // Extract action definitions from declarative children\n const actions = useMemo<RegisteredAction[]>(() => {\n const result: RegisteredAction[] = [];\n\n React.Children.forEach(children, (child) => {\n if (!React.isValidElement(child)) return;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const props = child.props as any;\n const type = child.type;\n\n if (\n type === CopyAction ||\n (child.type as { displayName?: string })?.displayName === \"CopyAction\"\n ) {\n // Copy — stateful, rendered specially in DefaultMessage\n result.push({\n id: \"copy\",\n icon: <CopyIcon />,\n tooltip: props.tooltip ?? \"Copy\",\n onClick: ({ message }) => {\n navigator.clipboard.writeText(message.content ?? \"\");\n },\n className: props.className,\n });\n } else if (\n type === EditAction ||\n (child.type as { displayName?: string })?.displayName === \"EditAction\"\n ) {\n result.push({\n id: \"edit\",\n icon: <EditIcon />,\n tooltip: props.tooltip ?? \"Edit\",\n onClick: () => {}, // handled internally by DefaultMessage via onEditMessage\n className: props.className,\n });\n } else if (\n type === FeedbackAction ||\n (child.type as { displayName?: string })?.displayName ===\n \"FeedbackAction\"\n ) {\n const onFeedback = props.onFeedback;\n result.push(\n {\n id: \"feedback-up\",\n icon: <ThumbsUpIcon />,\n tooltip: \"Helpful\",\n onClick: ({ message }) => onFeedback?.(message, \"helpful\"),\n className: props.className,\n },\n {\n id: \"feedback-down\",\n icon: <ThumbsDownIcon />,\n tooltip: \"Not helpful\",\n onClick: ({ message }) => onFeedback?.(message, \"not-helpful\"),\n className: props.className,\n },\n );\n } else if (\n type === Action ||\n (child.type as { displayName?: string })?.displayName === \"Action\"\n ) {\n result.push({\n id: props.id ?? props.tooltip,\n icon: props.icon,\n tooltip: props.tooltip,\n onClick: props.onClick,\n hidden: props.hidden,\n className: props.className,\n });\n }\n });\n\n return result;\n }, [children]);\n\n useLayoutEffect(() => {\n const c = ctxRef.current;\n if (!c) return;\n c.registerActions(role, actions);\n return () => c.clearActions(role);\n // ctx accessed via ref — NOT in deps — to prevent the setState→re-render→\n // new ctx ref→useLayoutEffect→clearActions→setState infinite loop.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [role, actions]);\n\n return null;\n}\n\n// Re-export CheckIcon for DefaultMessage copy state\nexport { CopyIcon, CheckIcon, EditIcon };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { cn } from \"../../../lib/utils\";\nimport { Message, MessageAvatar, MessageContent } from \"../../ui/message\";\nimport { SimpleReasoning } from \"../../ui/reasoning\";\nimport { ToolSteps } from \"../../ui/tool-steps\";\nimport {\n PermissionConfirmation,\n type PermissionLevel,\n} from \"../../ui/permission-confirmation\";\nimport { FollowUpQuestions, parseFollowUps } from \"../../ui/follow-up\";\nimport { Loader } from \"../../ui/loader\";\nimport { MCPUIFrameList } from \"../../ui/mcp-ui-frame\";\nimport type {\n ChatMessage,\n MessageAttachment,\n ToolRenderers,\n ToolRendererProps,\n CitationConfig,\n} from \"./types\";\nimport type { ToolDefinition, ToolRenderProps } from \"../../../../core\";\nimport CopilotSDKLogo from \"../../icons/copilot-sdk-logo\";\nimport { SourceGroup, type SourceItem } from \"../../ui/source\";\nimport { BranchNavigator } from \"../../ui/branch-navigator\";\nimport type { BranchInfo } from \"../../../../chat/branching\";\nimport { useMessageActionsContext } from \"./message-actions-context\";\nimport { CheckIcon, CopyIcon } from \"./message-actions-compound\";\n\n// ─── FloatingActions ──────────────────────────────────────────────────────────\n\nfunction FloatingActions({\n message,\n role,\n align = \"left\",\n onEdit,\n className,\n}: {\n message: ChatMessage;\n role: \"user\" | \"assistant\";\n align?: \"left\" | \"right\";\n onEdit?: () => void;\n className?: string;\n}) {\n const ctx = useMessageActionsContext();\n const [copiedId, setCopiedId] = React.useState<string | null>(null);\n\n if (!ctx) return null;\n const actions = ctx.getActions(role);\n if (actions.length === 0) return null;\n\n return (\n <div\n className={cn(\n \"csdk-message-actions flex items-center gap-0.5\",\n \"opacity-0 group-hover/message:opacity-100 transition-opacity duration-150\",\n align === \"right\" ? \"justify-end\" : \"justify-start\",\n className,\n )}\n >\n {actions.map((action) => {\n const isHidden =\n typeof action.hidden === \"function\"\n ? action.hidden({ message })\n : action.hidden;\n if (isHidden) return null;\n\n const isCopied = copiedId === action.id;\n\n return (\n <button\n key={action.id}\n type=\"button\"\n title={action.tooltip}\n aria-label={action.tooltip}\n className={cn(\n \"csdk-message-action-btn\",\n action.id === \"copy\" && \"csdk-copy-btn\",\n \"flex items-center justify-center size-6 rounded-md cursor-pointer\",\n \"text-muted-foreground hover:text-foreground hover:bg-muted\",\n \"transition-colors\",\n action.className,\n )}\n onClick={() => {\n if (action.id === \"edit\" && onEdit) {\n onEdit();\n return;\n }\n if (action.id === \"copy\") {\n navigator.clipboard.writeText(message.content ?? \"\");\n setCopiedId(\"copy\");\n setTimeout(() => setCopiedId(null), 1500);\n return;\n }\n action.onClick({ message });\n }}\n >\n {action.id === \"copy\" && isCopied ? <CheckIcon /> : action.icon}\n </button>\n );\n })}\n </div>\n );\n}\n\ntype DefaultMessageProps = {\n message: ChatMessage;\n userAvatar: {\n src?: string;\n fallback?: string;\n component?: React.ReactNode;\n className?: string;\n };\n assistantAvatar: {\n src?: string;\n fallback?: string;\n component?: React.ReactNode;\n className?: string;\n };\n showUserAvatar?: boolean;\n userMessageClassName?: string;\n assistantMessageClassName?: string;\n /** Font size variant: 'sm' (14px), 'base' (16px), 'lg' (18px) */\n size?: \"sm\" | \"base\" | \"lg\";\n /** Whether this is the last message (for streaming state) */\n isLastMessage?: boolean;\n /** Whether the chat is currently loading/streaming */\n isLoading?: boolean;\n /** Whether waiting for server after tool completion */\n isProcessing?: boolean;\n /** Loader variant for typing indicator */\n loaderVariant?:\n | \"dots\"\n | \"typing\"\n | \"wave\"\n | \"terminal\"\n | \"text-blink\"\n | \"text-shimmer\"\n | \"loading-dots\";\n /** Registered tools (for accessing tool's render function) */\n registeredTools?: ToolDefinition[];\n /** Custom renderers for tool results (Generative UI) - fallback when tool has no render prop */\n toolRenderers?: ToolRenderers;\n /** Catch-all renderer for MCP tools (tools with source: \"mcp\") */\n mcpToolRenderer?: React.ComponentType<ToolRendererProps>;\n /** Catch-all renderer for any tool not matched by toolRenderers */\n fallbackToolRenderer?: React.ComponentType<ToolRendererProps>;\n /** Called when user approves a tool execution */\n onApproveToolExecution?: (\n executionId: string,\n extraData?: Record<string, unknown>,\n permissionLevel?: PermissionLevel,\n ) => void;\n /** Called when user rejects a tool execution */\n onRejectToolExecution?: (\n executionId: string,\n reason?: string,\n permissionLevel?: PermissionLevel,\n ) => void;\n /** Show follow-up questions (default: true) */\n showFollowUps?: boolean;\n /** Called when a follow-up question is clicked */\n onFollowUpClick?: (question: string) => void;\n /** Custom class for follow-up container */\n followUpClassName?: string;\n /** Custom class for follow-up buttons */\n followUpButtonClassName?: string;\n /** Citation/Sources configuration */\n citations?: CitationConfig;\n\n // ============================================\n // Branching\n // ============================================\n\n /**\n * Branch navigation info for this message.\n * When non-null and totalSiblings > 1, the BranchNavigator is shown.\n */\n branchInfo?: BranchInfo | null;\n /**\n * Called when the user navigates to a sibling branch.\n * Receives the message ID to switch to.\n */\n onSwitchBranch?: (messageId: string) => void;\n /**\n * Called when the user submits an edited message.\n * Triggers a new branch from the same parent as messageId.\n */\n onEditMessage?: (messageId: string, newContent: string) => void;\n};\n\nexport function DefaultMessage({\n message,\n userAvatar,\n assistantAvatar,\n showUserAvatar = false,\n userMessageClassName,\n assistantMessageClassName,\n size = \"sm\",\n isLastMessage = false,\n isLoading = false,\n isProcessing = false,\n loaderVariant = \"typing\",\n registeredTools,\n toolRenderers,\n mcpToolRenderer,\n fallbackToolRenderer,\n onApproveToolExecution,\n onRejectToolExecution,\n showFollowUps = true,\n onFollowUpClick,\n followUpClassName,\n followUpButtonClassName,\n citations = { enabled: true },\n branchInfo,\n onSwitchBranch,\n onEditMessage,\n}: DefaultMessageProps) {\n const isUser = message.role === \"user\";\n const isCompactionMarker =\n message.role === \"system\" &&\n (message.metadata as Record<string, unknown>)?.type === \"compaction-marker\";\n const isStreaming = isLastMessage && isLoading;\n\n // Inline-edit state (user messages only)\n const [isEditing, setIsEditing] = React.useState(false);\n const [editValue, setEditValue] = React.useState(message.content ?? \"\");\n const editRef = React.useRef<HTMLTextAreaElement>(null);\n\n const startEdit = React.useCallback(() => {\n setEditValue(message.content ?? \"\");\n setIsEditing(true);\n // Focus textarea on next frame\n requestAnimationFrame(() => editRef.current?.focus());\n }, [message.content]);\n\n const cancelEdit = React.useCallback(() => {\n setIsEditing(false);\n }, []);\n\n const submitEdit = React.useCallback(() => {\n const trimmed = editValue.trim();\n if (!trimmed || !onEditMessage) return;\n onEditMessage(message.id, trimmed);\n setIsEditing(false);\n }, [editValue, message.id, onEditMessage]);\n\n const handleEditKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n submitEdit();\n }\n if (e.key === \"Escape\") {\n cancelEdit();\n }\n },\n [submitEdit, cancelEdit],\n );\n\n // Whether branching UI should be shown for this message\n const showBranchNav =\n isUser && branchInfo && branchInfo.totalSiblings > 1 && onSwitchBranch;\n const showEditBtn = isUser && !!onEditMessage && !isLoading;\n\n // Render compaction marker divider\n if (isCompactionMarker) {\n const tokensSaved = (message.metadata as Record<string, unknown>)\n ?.tokensSaved as number | undefined;\n return (\n <div className=\"flex items-center gap-3 py-2 px-1 my-1\">\n <div className=\"flex-1 h-px bg-border\" />\n <span className=\"text-[11px] text-muted-foreground whitespace-nowrap flex items-center gap-1.5\">\n <svg\n className=\"size-3 opacity-60\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n {tokensSaved\n ? `Earlier conversation summarized · ~${tokensSaved.toLocaleString()} tokens saved`\n : \"Earlier conversation summarized\"}\n </span>\n <div className=\"flex-1 h-px bg-border\" />\n </div>\n );\n }\n\n // Parse follow-up questions from assistant messages\n const { cleanContent: contentWithoutFollowUps, followUps } =\n React.useMemo(() => {\n if (isUser || !message.content) {\n return { cleanContent: message.content, followUps: [] };\n }\n return parseFollowUps(message.content);\n }, [message.content, isUser]);\n\n // Strip \"Sources:\" line from AI response (we show them as chips instead)\n const cleanContent = React.useMemo(() => {\n if (!contentWithoutFollowUps) return contentWithoutFollowUps;\n // Remove lines like \"Sources: [link](url), ...\" or \"**Sources:** ...\"\n return contentWithoutFollowUps\n .replace(/\\n*\\*{0,2}Sources:?\\*{0,2}\\s*(\\[.+?\\]\\(.+?\\)[,\\s]*)+$/gi, \"\")\n .trim();\n }, [contentWithoutFollowUps]);\n\n // Only show follow-ups on the last assistant message when not loading\n const shouldShowFollowUps =\n showFollowUps &&\n !isUser &&\n isLastMessage &&\n !isLoading &&\n followUps.length > 0 &&\n onFollowUpClick;\n\n // Extract sources from web_search tool results OR native citations\n const sources = React.useMemo((): SourceItem[] => {\n if (isUser || !citations.enabled) return [];\n\n const extractedSources: SourceItem[] = [];\n\n // Helper to add source without duplicates\n const addSource = (url: string, title?: string, description?: string) => {\n if (url && !extractedSources.find((s) => s.href === url)) {\n extractedSources.push({\n href: url,\n title: title || getDomainFromUrl(url),\n description,\n });\n }\n };\n\n // 1. Check for native web search citations (from metadata.citations)\n const nativeCitations = (\n message.metadata as {\n citations?: Array<{ url: string; title?: string; citedText?: string }>;\n }\n )?.citations;\n if (nativeCitations && Array.isArray(nativeCitations)) {\n nativeCitations.forEach((citation) => {\n addSource(citation.url, citation.title, citation.citedText);\n });\n }\n\n // 2. Check tool executions for web_search results (custom tool fallback)\n message.toolExecutions?.forEach((exec) => {\n if (\n exec.name === \"web_search\" &&\n exec.status === \"completed\" &&\n exec.result\n ) {\n const result = exec.result as Record<string, unknown>;\n\n // Pattern 1: result.data.results (standard format from our providers)\n const dataObj = result.data as Record<string, unknown> | undefined;\n if (dataObj?.results && Array.isArray(dataObj.results)) {\n (\n dataObj.results as Array<{\n url: string;\n title?: string;\n content?: string;\n }>\n ).forEach((r) => {\n addSource(r.url, r.title, r.content);\n });\n }\n\n // Pattern 2: result.results directly\n if (result.results && Array.isArray(result.results)) {\n (\n result.results as Array<{\n url: string;\n title?: string;\n content?: string;\n }>\n ).forEach((r) => {\n addSource(r.url, r.title, r.content);\n });\n }\n\n // Pattern 3: result.data is WebSearchResponse (results at data level)\n if (dataObj && !dataObj.results && dataObj.query) {\n const response = dataObj as {\n results?: Array<{ url: string; title?: string; content?: string }>;\n };\n if (response.results && Array.isArray(response.results)) {\n response.results.forEach((r) => {\n addSource(r.url, r.title, r.content);\n });\n }\n }\n }\n });\n\n return extractedSources;\n }, [message.metadata, message.toolExecutions, isUser, citations.enabled]);\n\n // Helper to extract domain from URL\n function getDomainFromUrl(url: string): string {\n try {\n return new URL(url).hostname.replace(\"www.\", \"\");\n } catch {\n return url;\n }\n }\n\n const shouldShowSources = citations.enabled && sources.length > 0;\n\n // User message - right aligned, avatar optional\n if (isUser) {\n const hasAttachments =\n message.attachments && message.attachments.length > 0;\n\n return (\n <Message\n className={cn(\n \"csdk-message csdk-user-message flex gap-2 group/user-msg group/message justify-end\",\n )}\n >\n <div className=\"flex flex-col items-end max-w-[80%] min-w-0\">\n {/* Edit mode: inline textarea */}\n {isEditing ? (\n <div className=\"flex flex-col gap-1.5 w-full min-w-[200px]\">\n <textarea\n ref={editRef}\n value={editValue}\n onChange={(e) => setEditValue(e.target.value)}\n onKeyDown={handleEditKeyDown}\n rows={Math.max(2, (editValue.match(/\\n/g) || []).length + 1)}\n className={cn(\n \"csdk-edit-textarea w-full rounded-lg px-3 py-2 text-sm resize-none\",\n \"bg-primary text-primary-foreground placeholder:text-primary-foreground/50\",\n \"focus:outline-none focus:ring-2 focus:ring-primary-foreground/30\",\n userMessageClassName,\n )}\n />\n <div className=\"flex gap-1.5 justify-end\">\n <button\n type=\"button\"\n onClick={cancelEdit}\n className=\"csdk-edit-cancel px-3 py-1 text-xs rounded-md bg-muted text-muted-foreground hover:bg-muted/80 transition-colors\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={submitEdit}\n disabled={!editValue.trim()}\n className=\"csdk-edit-submit px-3 py-1 text-xs rounded-md bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 transition-colors\"\n >\n Send\n </button>\n </div>\n </div>\n ) : (\n <>\n <div className=\"relative\">\n <div\n className={cn(\n \"csdk-message-user rounded-2xl overflow-hidden bg-primary text-primary-foreground\",\n hasAttachments && \"p-[3px]\",\n hasAttachments && !message.content && \"max-w-[260px]\",\n hasAttachments && message.content && \"max-w-[280px]\",\n !hasAttachments && \"\",\n userMessageClassName,\n )}\n >\n {/* Media (images + files) */}\n {hasAttachments && (\n <MessageMedia\n attachments={message.attachments!}\n hasText={!!message.content}\n align=\"end\"\n />\n )}\n {/* Text — px-4 py-2 passed to MessageContent, tailwind-merge overrides its internal p-2 */}\n {message.content && (\n <MessageContent\n className={cn(\"px-4 py-2\")}\n markdown\n size={size}\n >\n {message.content}\n </MessageContent>\n )}\n </div>\n {/* Edit button — hover reveal */}\n {showEditBtn && (\n <button\n type=\"button\"\n onClick={startEdit}\n aria-label=\"Edit message\"\n className={cn(\n \"csdk-edit-btn absolute -left-7 top-1/2 -translate-y-1/2\",\n \"size-6 flex items-center justify-center rounded-full\",\n \"text-muted-foreground bg-background border border-border shadow-sm\",\n \"opacity-0 group-hover/user-msg:opacity-100 transition-opacity\",\n \"hover:text-foreground hover:bg-muted cursor-pointer\",\n )}\n >\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n <path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\" />\n </svg>\n </button>\n )}\n </div>\n {/* Branch Navigator */}\n {showBranchNav && (\n <BranchNavigator\n siblingIndex={branchInfo!.siblingIndex}\n totalSiblings={branchInfo!.totalSiblings}\n hasPrevious={branchInfo!.hasPrevious}\n hasNext={branchInfo!.hasNext}\n onPrevious={() =>\n onSwitchBranch!(\n branchInfo!.siblingIds[branchInfo!.siblingIndex - 1],\n )\n }\n onNext={() =>\n onSwitchBranch!(\n branchInfo!.siblingIds[branchInfo!.siblingIndex + 1],\n )\n }\n className=\"mt-1\"\n />\n )}\n {/* Floating actions for user messages */}\n <FloatingActions\n message={message}\n role=\"user\"\n align=\"right\"\n onEdit={onEditMessage ? startEdit : undefined}\n />\n </>\n )}\n </div>\n {showUserAvatar && (\n <MessageAvatar\n src={userAvatar.src}\n alt=\"User\"\n fallback={userAvatar.fallback}\n className={userAvatar.className}\n >\n {userAvatar.component}\n </MessageAvatar>\n )}\n </Message>\n );\n }\n\n // Helper: check if a tool execution is hidden (shouldn't appear in UI)\n // Checks both: 1) execution's hidden flag (from server), 2) registered tool's hidden flag\n const isToolHidden = (exec: { name: string; hidden?: boolean }): boolean => {\n // Check execution's own hidden flag first (from server's action:start event)\n if (exec.hidden === true) return true;\n // Then check registered tool definition\n const toolDef = registeredTools?.find((t) => t.name === exec.name);\n return toolDef?.hidden === true;\n };\n\n // Separate tool executions into categories (excluding hidden tools)\n const pendingApprovalTools = message.toolExecutions?.filter(\n (exec) => exec.approvalStatus === \"required\" && !isToolHidden(exec),\n );\n const completedTools = message.toolExecutions?.filter(\n (exec) => exec.approvalStatus !== \"required\" && !isToolHidden(exec),\n );\n\n // Helper: check if tool has any custom render (toolRenderers, mcpToolRenderer, fallbackToolRenderer, or tool.render)\n const hasCustomRender = (toolName: string, execSource?: string): boolean => {\n if (toolRenderers?.[toolName]) return true;\n const toolDef = registeredTools?.find((t) => t.name === toolName);\n // Check if mcpToolRenderer applies (MCP tool with catch-all renderer)\n if (mcpToolRenderer && (execSource === \"mcp\" || toolDef?.source === \"mcp\"))\n return true;\n if (fallbackToolRenderer) return true;\n if (toolDef?.render) return true;\n return false;\n };\n\n // Split completed tools: those with custom render vs default ToolSteps\n const toolsWithCustomRender = completedTools?.filter((exec) =>\n hasCustomRender(exec.name, exec.source),\n );\n const toolsWithoutCustomRender = completedTools?.filter(\n (exec) => !hasCustomRender(exec.name, exec.source),\n );\n\n // Check for native web search citations (from metadata, not custom tool)\n const hasNativeCitations = !!(message.metadata as { citations?: unknown[] })\n ?.citations?.length;\n\n // Convert tools without custom render to ToolStepData format\n // Hide web_search tool step when we have native citations (already shown as chips)\n const toolSteps = toolsWithoutCustomRender\n ?.filter((exec) => !(exec.name === \"web_search\" && hasNativeCitations))\n .map((exec) => ({\n id: exec.id,\n name: exec.name,\n args: exec.args,\n status: exec.status,\n result: exec.result,\n error: exec.error,\n }));\n\n // Assistant message - left aligned with avatar\n return (\n <Message className=\"csdk-message csdk-assistant-message flex gap-2 group/message\">\n <MessageAvatar\n src={assistantAvatar.src}\n alt=\"Assistant\"\n fallback={assistantAvatar.fallback}\n fallbackIcon={\n !assistantAvatar.src &&\n !assistantAvatar.fallback &&\n !assistantAvatar.component ? (\n <CopilotSDKLogo className=\"size-5\" />\n ) : undefined\n }\n className={cn(\"bg-muted\", assistantAvatar.className)}\n >\n {assistantAvatar.component}\n </MessageAvatar>\n <div className=\"min-w-0 max-w-[80%] w-fit\">\n {/* Reasoning/Thinking (collapsible, above content) */}\n {message.thinking && (\n <SimpleReasoning\n content={message.thinking}\n isStreaming={isStreaming}\n className=\"mb-2\"\n />\n )}\n\n {/* Show loader when processing after tool execution (only for last message with no tools yet) */}\n {isLastMessage &&\n isProcessing &&\n !completedTools?.length &&\n !pendingApprovalTools?.length ? (\n <div className=\"rounded-lg bg-muted px-4 py-2\">\n <Loader variant=\"dots\" size=\"sm\" />\n </div>\n ) : /* Show streaming loader when loading with no content and no tools */\n isLastMessage &&\n isLoading &&\n !cleanContent?.trim() &&\n !toolsWithCustomRender?.length &&\n !toolsWithoutCustomRender?.length &&\n !pendingApprovalTools?.length ? (\n <div className=\"rounded-lg bg-muted px-4 py-2\">\n <Loader variant={loaderVariant} size=\"sm\" />\n </div>\n ) : (\n <div className=\"relative\">\n {/* Message Content - show FIRST (AI's words before tool calls) */}\n {cleanContent?.trim() && (\n <MessageContent\n className={cn(\n \"csdk-message-assistant rounded-lg px-4 py-2 bg-muted\",\n assistantMessageClassName,\n )}\n markdown\n size={size}\n >\n {cleanContent}\n </MessageContent>\n )}\n\n {/* Custom Tool Renderers - Priority: tool.render > fallbackToolRenderer > toolRenderers */}\n {toolsWithCustomRender && toolsWithCustomRender.length > 0 && (\n <div className={cn(\"space-y-2\", cleanContent?.trim() && \"mt-2\")}>\n {toolsWithCustomRender.map((exec) => {\n const toolDef = registeredTools?.find(\n (t) => t.name === exec.name,\n );\n\n // PRIORITY 1: tool's own render function (defined in useTool)\n if (toolDef?.render) {\n let status: ToolRenderProps[\"status\"] = \"pending\";\n if (exec.status === \"executing\") status = \"executing\";\n else if (exec.status === \"completed\") status = \"completed\";\n else if (\n exec.status === \"error\" ||\n exec.status === \"failed\" ||\n exec.status === \"rejected\"\n )\n status = \"error\";\n\n const renderProps: ToolRenderProps = {\n status,\n args: exec.args,\n result: exec.result,\n error: exec.error,\n toolCallId: exec.id,\n toolName: exec.name,\n };\n const output = toolDef.render(\n renderProps,\n ) as React.ReactNode;\n if (output != null) {\n return (\n <React.Fragment key={exec.id}>{output}</React.Fragment>\n );\n }\n }\n\n // PRIORITY 2: mcpToolRenderer (catch-all for MCP tools)\n if (\n mcpToolRenderer &&\n (exec.source === \"mcp\" || toolDef?.source === \"mcp\")\n ) {\n const MCPRenderer = mcpToolRenderer;\n return (\n <MCPRenderer\n key={exec.id}\n execution={{\n id: exec.id,\n name: exec.name,\n args: exec.args,\n status: exec.status,\n result: exec.result,\n error: exec.error,\n source: exec.source || toolDef?.source,\n }}\n />\n );\n }\n\n // PRIORITY 3: toolRenderers map (app-level explicit renderer — static, always available)\n const Renderer = toolRenderers?.[exec.name];\n if (Renderer) {\n return (\n <Renderer\n key={exec.id}\n execution={{\n id: exec.id,\n name: exec.name,\n args: exec.args,\n status: exec.status,\n result: exec.result,\n error: exec.error,\n approvalStatus: exec.approvalStatus,\n source: exec.source,\n }}\n />\n );\n }\n\n // PRIORITY 4: fallbackToolRenderer (catch-all for any unmatched tool)\n if (fallbackToolRenderer) {\n const FallbackRenderer = fallbackToolRenderer;\n return (\n <FallbackRenderer\n key={exec.id}\n execution={{\n id: exec.id,\n name: exec.name,\n args: exec.args,\n status: exec.status,\n result: exec.result,\n error: exec.error,\n source: exec.source,\n }}\n />\n );\n }\n\n // Shouldn't reach here since we filtered, but fallback\n return null;\n })}\n </div>\n )}\n\n {/* Tool Steps (default display for tools without custom renderers) */}\n {toolSteps && toolSteps.length > 0 && (\n <div\n className={cn(\n \"rounded-lg bg-muted/50 px-3 py-2\",\n cleanContent?.trim() && \"mt-2\",\n )}\n >\n <ToolSteps steps={toolSteps} />\n </div>\n )}\n\n {/* MCP-UI Resources - Interactive components from MCP tools (excluding hidden) */}\n {message.toolExecutions\n ?.filter((exec) => !isToolHidden(exec))\n .map((exec) => {\n const uiResources = exec.result?._uiResources;\n if (!uiResources || uiResources.length === 0) return null;\n return (\n <MCPUIFrameList\n key={`${exec.id}-ui`}\n resources={uiResources}\n className=\"mt-2\"\n />\n );\n })}\n\n {/* Processing indicator below completed tools (AI is continuing after tool execution) */}\n {isLastMessage &&\n isProcessing &&\n completedTools &&\n completedTools.length > 0 && (\n <div className=\"mt-2 rounded-lg bg-muted px-4 py-2\">\n <Loader variant=\"dots\" size=\"sm\" />\n </div>\n )}\n\n {/* Tool Approval Confirmations - Priority: toolRenderers > tool.render > default */}\n {pendingApprovalTools && pendingApprovalTools.length > 0 && (\n <div className=\"mt-2 space-y-2\">\n {pendingApprovalTools.map((tool) => {\n // Approval callbacks for custom renders\n const approvalCallbacks = {\n onApprove: (extraData?: Record<string, unknown>) =>\n onApproveToolExecution?.(tool.id, extraData),\n onReject: (reason?: string) =>\n onRejectToolExecution?.(tool.id, reason),\n message: tool.approvalMessage,\n };\n\n // PRIORITY 1: toolRenderers (app-level override)\n const CustomRenderer = toolRenderers?.[tool.name];\n if (CustomRenderer) {\n return (\n <CustomRenderer\n key={tool.id}\n execution={tool}\n approval={approvalCallbacks}\n />\n );\n }\n\n // PRIORITY 2: tool's own render function\n const toolDef = registeredTools?.find(\n (t) => t.name === tool.name,\n );\n if (toolDef?.render) {\n const renderProps: ToolRenderProps = {\n status: \"approval-required\",\n args: tool.args,\n result: tool.result,\n error: tool.error,\n toolCallId: tool.id,\n toolName: tool.name,\n approval: approvalCallbacks,\n };\n const output = toolDef.render(\n renderProps,\n ) as React.ReactNode;\n return (\n <React.Fragment key={tool.id}>{output}</React.Fragment>\n );\n }\n\n // PRIORITY 3: Default PermissionConfirmation\n return (\n <PermissionConfirmation\n key={tool.id}\n state=\"pending\"\n toolName={tool.approvalTitle ?? tool.name}\n message={\n tool.approvalMessage ||\n `This tool wants to execute. Do you approve?`\n }\n onApprove={(permissionLevel) =>\n onApproveToolExecution?.(\n tool.id,\n undefined,\n permissionLevel,\n )\n }\n onReject={(permissionLevel) =>\n onRejectToolExecution?.(\n tool.id,\n undefined,\n permissionLevel,\n )\n }\n />\n );\n })}\n </div>\n )}\n\n {/* Attachments (images + files) */}\n {message.attachments && message.attachments.length > 0 && (\n <div className=\"csdk-assistant-attachments mt-2\">\n <MessageMedia\n attachments={message.attachments}\n hasText={!!message.content}\n align=\"start\"\n />\n </div>\n )}\n\n {/* Sources/Citations - Rendered below message content as chips */}\n {shouldShowSources && (\n <SourceGroup\n sources={sources}\n label={citations.label}\n showFavicon={citations.showFavicon ?? true}\n numbered={citations.numbered ?? false}\n maxVisible={citations.maxVisible ?? 6}\n className={cn(\"mt-2\", citations.className)}\n />\n )}\n\n {/* Follow-up Questions */}\n {shouldShowFollowUps && (\n <FollowUpQuestions\n questions={followUps}\n onSelect={onFollowUpClick!}\n className={followUpClassName}\n buttonClassName={followUpButtonClassName}\n />\n )}\n\n {/* Floating actions for assistant messages */}\n <FloatingActions\n message={message}\n role=\"assistant\"\n align=\"right\"\n className=\"absolute bottom-1 right-1\"\n />\n </div>\n )}\n </div>\n </Message>\n );\n}\n\n// ── Attachment helpers ──────────────────────────────────────────────────────\n\nfunction getAttachmentSrc(attachment: MessageAttachment): string | null {\n if (attachment.url) return attachment.url;\n if (attachment.data) {\n return attachment.data.startsWith(\"data:\")\n ? attachment.data\n : `data:${attachment.mimeType};base64,${attachment.data}`;\n }\n return null;\n}\n\n/**\n * Image lightbox — fullscreen view with CSS animation.\n * Uses portal to render at document root for proper z-index.\n *\n * Animation: backdrop fade-in 200ms ease-out, image scale 0.92→1 + fade.\n * Exit: backdrop fade-out 180ms ease-in, image scale 1→0.95 + fade.\n * Follows: staging-dim-background, easing-entrance-ease-out, easing-exit-ease-in, duration-small-state\n */\nfunction ImageLightbox({\n src,\n alt,\n onClose,\n}: {\n src: string;\n alt: string;\n onClose: () => void;\n}) {\n const [closing, setClosing] = React.useState(false);\n const backdropRef = React.useRef<HTMLDivElement>(null);\n\n const handleClose = React.useCallback(() => {\n setClosing(true);\n // Wait for exit animation (180ms ease-in)\n setTimeout(onClose, 180);\n }, [onClose]);\n\n // Close on Escape\n React.useEffect(() => {\n const handler = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") handleClose();\n };\n document.addEventListener(\"keydown\", handler);\n return () => document.removeEventListener(\"keydown\", handler);\n }, [handleClose]);\n\n // Prevent body scroll\n React.useEffect(() => {\n const prev = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = prev;\n };\n }, []);\n\n const portal = (\n <div\n ref={backdropRef}\n className=\"csdk-lightbox csdk-lightbox-backdrop fixed inset-0 z-[9999] flex items-center justify-center cursor-zoom-out\"\n onClick={handleClose}\n style={{\n animation: closing\n ? \"csdk-lightbox-backdrop-out 180ms ease-in forwards\"\n : \"csdk-lightbox-backdrop-in 200ms ease-out forwards\",\n }}\n >\n {/* Scrim — hardcoded dark, no theme vars */}\n <div\n className=\"csdk-lightbox-scrim absolute inset-0\"\n style={{\n backgroundColor: \"rgba(0, 0, 0, 0.88)\",\n backdropFilter: \"blur(12px)\",\n WebkitBackdropFilter: \"blur(12px)\",\n animation: closing\n ? \"csdk-lightbox-fade-out 180ms ease-in forwards\"\n : \"csdk-lightbox-fade-in 200ms ease-out forwards\",\n }}\n />\n\n {/* Image */}\n <div\n className=\"csdk-lightbox-content relative z-10 max-w-[90vw] max-h-[90vh]\"\n style={{\n animation: closing\n ? \"csdk-lightbox-img-out 180ms ease-in forwards\"\n : \"csdk-lightbox-img-in 220ms cubic-bezier(0.22, 1, 0.36, 1) forwards\",\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <img\n src={src}\n alt={alt}\n className=\"csdk-lightbox-image max-w-full max-h-[90vh] object-contain rounded-xl\"\n style={{ boxShadow: \"0 25px 50px -12px rgba(0,0,0,0.5)\" }}\n draggable={false}\n />\n {/* Close button */}\n <button\n type=\"button\"\n className=\"csdk-lightbox-close absolute -top-3 -right-3 size-8 flex items-center justify-center rounded-full shadow-lg transition-[background,transform] duration-150 cursor-pointer active:scale-95\"\n style={{ backgroundColor: \"rgba(255,255,255,0.9)\" }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = \"rgba(255,255,255,1)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = \"rgba(255,255,255,0.9)\";\n }}\n onClick={handleClose}\n >\n <svg\n className=\"size-4\"\n style={{ color: \"#333\" }}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n </div>\n\n {/* Keyframe styles (injected once) */}\n <style>{`\n @keyframes csdk-lightbox-fade-in { from { opacity: 0; } to { opacity: 1; } }\n @keyframes csdk-lightbox-fade-out { from { opacity: 1; } to { opacity: 0; } }\n @keyframes csdk-lightbox-img-in { from { opacity: 0; transform: scale(0.92); } to { opacity: 1; transform: scale(1); } }\n @keyframes csdk-lightbox-img-out { from { opacity: 1; transform: scale(1); } to { opacity: 0; transform: scale(0.95); } }\n @keyframes csdk-lightbox-backdrop-in { from { opacity: 0; } to { opacity: 1; } }\n @keyframes csdk-lightbox-backdrop-out { from { opacity: 1; } to { opacity: 0; } }\n `}</style>\n </div>\n );\n\n // Portal to body\n return typeof document !== \"undefined\"\n ? ReactDOM.createPortal(portal, document.body)\n : null;\n}\n\n/**\n * Single image thumbnail — auto-sized, clickable, opens lightbox.\n * Preserves aspect ratio. Max width constrained by bubble, height auto.\n * active:scale-[0.98] for press feedback (physics-active-state).\n */\nfunction ImageThumb({\n src,\n alt,\n className,\n}: {\n src: string;\n alt: string;\n className?: string;\n}) {\n const [expanded, setExpanded] = React.useState(false);\n return (\n <>\n <button\n type=\"button\"\n onClick={() => setExpanded(true)}\n className={cn(\n \"csdk-attachment-image relative overflow-hidden cursor-zoom-in\",\n \"transition-[opacity,transform] duration-150 hover:opacity-90 active:scale-[0.98]\",\n className,\n )}\n style={{ backgroundColor: \"#000\" }}\n >\n <img\n src={src}\n alt={alt}\n className=\"w-full h-full object-cover\"\n loading=\"lazy\"\n draggable={false}\n />\n </button>\n {expanded && (\n <ImageLightbox src={src} alt={alt} onClose={() => setExpanded(false)} />\n )}\n </>\n );\n}\n\n/**\n * File attachment card — inline within message bubble.\n * Compact row: colored icon + filename + download/open button.\n * Styled to sit inside the bubble bg (slightly darker inner card).\n *\n * PDF gets red accent, audio green, video purple, generic blue.\n */\nfunction FileCard({ attachment }: { attachment: MessageAttachment }) {\n const isPdfFile = isPdf(attachment);\n const isAudio = attachment.type === \"audio\";\n const isVideo = attachment.type === \"video\";\n\n // Accent colors per type\n const accent = isPdfFile\n ? { color: \"#ef4444\", bg: \"rgba(239,68,68,0.12)\" }\n : isAudio\n ? { color: \"#10b981\", bg: \"rgba(16,185,129,0.12)\" }\n : isVideo\n ? { color: \"#8b5cf6\", bg: \"rgba(139,92,246,0.12)\" }\n : { color: \"#3b82f6\", bg: \"rgba(59,130,246,0.12)\" };\n\n const label = isPdfFile\n ? \"PDF\"\n : attachment.mimeType?.split(\"/\")[1]?.toUpperCase() ||\n attachment.type?.toUpperCase() ||\n \"FILE\";\n const filename = attachment.filename || \"Attachment\";\n const href =\n attachment.url ||\n (attachment.data?.startsWith(\"data:\") ? attachment.data : null);\n const cssClass = isPdfFile ? \"csdk-attachment-pdf\" : \"csdk-attachment-file\";\n\n return (\n <a\n href={href ?? undefined}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n download={isPdfFile ? undefined : attachment.filename}\n className={cn(\n cssClass,\n \"flex items-center gap-2 rounded-lg min-w-0 w-full\",\n \"px-2 py-1.5 cursor-pointer transition-opacity duration-150 hover:opacity-80\",\n \"no-underline\",\n )}\n style={{ backgroundColor: \"rgba(255,255,255,0.92)\", color: \"#1a1a1a\" }}\n onClick={(e) => {\n if (!href) e.preventDefault();\n }}\n >\n {/* Icon */}\n <div\n className=\"size-8 rounded-md flex items-center justify-center shrink-0\"\n style={{ backgroundColor: accent.bg }}\n >\n <svg\n className=\"size-4\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={accent.color}\n strokeWidth={1.8}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n {isPdfFile || (!isAudio && !isVideo) ? (\n <>\n <path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\" />\n <path d=\"M14 2v4a2 2 0 0 0 2 2h4\" />\n </>\n ) : isAudio ? (\n <>\n <path d=\"M9 18V5l12-2v13\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <circle cx=\"18\" cy=\"16\" r=\"3\" />\n </>\n ) : (\n <>\n <path d=\"m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.934a.5.5 0 0 0-.777-.416L16 11\" />\n <rect width=\"14\" height=\"12\" x=\"2\" y=\"6\" rx=\"2\" />\n </>\n )}\n </svg>\n </div>\n {/* Name + type */}\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-[11px] font-medium truncate leading-tight\">\n {filename}\n </p>\n <p\n className=\"text-[9px] font-semibold uppercase tracking-wider leading-tight mt-0.5\"\n style={{ color: accent.color }}\n >\n {label}\n </p>\n </div>\n {/* Download / open icon */}\n {href && (\n <div\n className=\"size-6 rounded-md flex items-center justify-center shrink-0\"\n style={{ backgroundColor: \"rgba(0,0,0,0.05)\" }}\n >\n <svg\n className=\"size-3\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{ opacity: 0.35 }}\n >\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <polyline points=\"7 10 12 15 17 10\" />\n <line x1=\"12\" x2=\"12\" y1=\"15\" y2=\"3\" />\n </svg>\n </div>\n )}\n </a>\n );\n}\n\n/** @deprecated Use FileCard which now handles all types including PDF */\nconst PdfCard = FileCard;\n\n/**\n * Image grid — WhatsApp/Telegram-style layout\n * 1 image: full width\n * 2 images: side by side\n * 3 images: 2 top + 1 bottom\n * 4+ images: 2x2 grid with +N overlay\n */\nfunction ImageGrid({\n images,\n bubbleRadius,\n}: {\n images: MessageAttachment[];\n bubbleRadius?: string;\n}) {\n const srcs = images\n .map((img) => getAttachmentSrc(img))\n .filter(Boolean) as string[];\n if (srcs.length === 0) return null;\n\n // Concentric radius: inner = outer bubble radius (16px) minus padding (2px) = 14px\n const innerRadius = bubbleRadius ? `calc(${bubbleRadius} - 2px)` : \"0.875rem\";\n\n if (srcs.length === 1) {\n return (\n <div\n className=\"csdk-attachment-grid\"\n style={{ borderRadius: innerRadius, overflow: \"hidden\" }}\n >\n <ImageThumb\n src={srcs[0]}\n alt={images[0].filename || \"Image\"}\n className=\"w-full\"\n />\n </div>\n );\n }\n\n if (srcs.length === 2) {\n return (\n <div\n className=\"csdk-attachment-grid grid grid-cols-2 gap-[2px]\"\n style={{ borderRadius: innerRadius, overflow: \"hidden\" }}\n >\n {srcs.map((src, i) => (\n <ImageThumb\n key={i}\n src={src}\n alt={images[i].filename || \"Image\"}\n className=\"aspect-square\"\n />\n ))}\n </div>\n );\n }\n\n if (srcs.length === 3) {\n return (\n <div\n className=\"csdk-attachment-grid grid grid-cols-2 gap-[2px]\"\n style={{ borderRadius: innerRadius, overflow: \"hidden\" }}\n >\n <ImageThumb\n src={srcs[0]}\n alt={images[0].filename || \"Image\"}\n className=\"col-span-2 max-h-[180px] min-h-[100px]\"\n />\n <ImageThumb\n src={srcs[1]}\n alt={images[1].filename || \"Image\"}\n className=\"aspect-square\"\n />\n <ImageThumb\n src={srcs[2]}\n alt={images[2].filename || \"Image\"}\n className=\"aspect-square\"\n />\n </div>\n );\n }\n\n // 4+ images: 2x2 grid, last cell shows +N if more\n const showOverlay = srcs.length > 4;\n const gridSrcs = srcs.slice(0, 4);\n\n return (\n <div\n className=\"csdk-attachment-grid grid grid-cols-2 gap-[2px]\"\n style={{ borderRadius: innerRadius, overflow: \"hidden\" }}\n >\n {gridSrcs.map((src, i) => (\n <div key={i} className=\"relative aspect-square\">\n <ImageThumb\n src={src}\n alt={images[i].filename || \"Image\"}\n className=\"w-full h-full\"\n />\n {i === 3 && showOverlay && (\n <div className=\"absolute inset-0 bg-black/50 flex items-center justify-center pointer-events-none\">\n <span className=\"text-white text-lg font-semibold\">\n +{srcs.length - 4}\n </span>\n </div>\n )}\n </div>\n ))}\n </div>\n );\n}\n\n/**\n * MessageMedia — renders attachments in a message bubble.\n * Handles image-only, image+text, file cards, and mixed content.\n *\n * Layout follows WhatsApp/Telegram pattern:\n * - Images at top of bubble (no padding), text below with padding\n * - Files shown as compact cards below text\n */\nfunction isPdf(a: MessageAttachment): boolean {\n return (\n a.mimeType === \"application/pdf\" ||\n a.filename?.toLowerCase().endsWith(\".pdf\") === true\n );\n}\n\nfunction MessageMedia({\n attachments,\n hasText,\n align = \"end\",\n}: {\n attachments: MessageAttachment[];\n hasText: boolean;\n align?: \"start\" | \"end\";\n}) {\n const images = attachments.filter((a) => a.type === \"image\");\n const pdfs = attachments.filter((a) => isPdf(a));\n const files = attachments.filter((a) => a.type !== \"image\" && !isPdf(a));\n\n return (\n <>\n {images.length > 0 && (\n <div className={cn(\"csdk-attachment-images\", hasText ? \"mb-0\" : \"\")}>\n <ImageGrid images={images} bubbleRadius=\"0.5rem\" />\n </div>\n )}\n {(pdfs.length > 0 || files.length > 0) && (\n <div\n className={cn(\n \"csdk-attachment-files flex flex-col gap-1\",\n hasText || images.length > 0 ? \"px-1.5 pb-1.5 pt-1\" : \"p-1.5\",\n )}\n >\n {[...pdfs, ...files].map((file, i) => (\n <FileCard key={i} attachment={file} />\n ))}\n </div>\n )}\n </>\n );\n}\n","\"use client\";\n\nimport React, { useState, useCallback, useRef, useId } from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport {\n PromptInput,\n PromptInputTextarea,\n PromptInputActions,\n PromptInputAction,\n} from \"../../ui/prompt-input\";\nimport { Button } from \"../../ui/button\";\nimport { Loader } from \"../../ui/loader\";\nimport {\n PlusIcon,\n ArrowUpIcon,\n StopIcon,\n XIcon,\n ArrowUpRightIcon,\n} from \"../../icons\";\nimport CopilotSDKLogo from \"../../icons/copilot-sdk-logo\";\nimport type {\n WelcomeConfig,\n PendingAttachment,\n MessageAttachment,\n} from \"./types\";\nimport type { Thread } from \"../../../../core/types/thread\";\n\n// Constants\nconst DEFAULT_MAX_FILE_SIZE = 5 * 1024 * 1024; // 5MB\nconst DEFAULT_ALLOWED_TYPES = [\"image/*\", \"application/pdf\"];\n\n// Default welcome config values\nconst DEFAULT_TITLE = \"How can I help you today?\";\nconst DEFAULT_SUBTITLE = \"Ask anything and get it done.\";\nconst DEFAULT_SUGGESTIONS_LABEL = \"Try AI Copilot\";\nconst DEFAULT_RECENT_CHATS_LABEL = \"Recent chats\";\nconst DEFAULT_MAX_RECENT_CHATS = 3;\nconst DEFAULT_VIEW_MORE_LABEL = \"View more..\";\n\n/**\n * Get attachment type from MIME type\n */\nfunction getAttachmentType(\n mimeType: string,\n): \"image\" | \"file\" | \"audio\" | \"video\" {\n if (mimeType.startsWith(\"image/\")) return \"image\";\n if (mimeType.startsWith(\"audio/\")) return \"audio\";\n if (mimeType.startsWith(\"video/\")) return \"video\";\n return \"file\";\n}\n\n/**\n * Convert file to base64 data URL\n */\nfunction fileToBase64(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result === \"string\") {\n resolve(reader.result);\n } else {\n reject(new Error(\"Failed to read file\"));\n }\n };\n reader.onerror = () => reject(new Error(\"Failed to read file\"));\n reader.readAsDataURL(file);\n });\n}\n\n/**\n * Generate unique attachment ID\n */\nfunction generateAttachmentId(): string {\n return `att_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n}\n\nexport interface ChatWelcomeProps {\n /** Welcome screen configuration */\n config?: WelcomeConfig;\n /** Suggestions to show */\n suggestions?: string[];\n /** Recent threads for the recent chats section */\n recentThreads?: Thread[];\n /** Called when user sends a message */\n onSendMessage: (message: string, attachments?: MessageAttachment[]) => void;\n /** Called when user selects a recent thread */\n onSelectThread?: (threadId: string) => void;\n /** Called when user deletes a recent thread */\n onDeleteThread?: (threadId: string) => void;\n /** Called when user clicks \"View more\" */\n onViewMoreThreads?: () => void;\n /** Whether AI is currently generating */\n isLoading?: boolean;\n /** Called when user stops generation */\n onStop?: () => void;\n /** Placeholder for input */\n placeholder?: string;\n /** Whether attachments are enabled */\n attachmentsEnabled?: boolean;\n /** Tooltip when attachments are disabled */\n attachmentsDisabledTooltip?: string;\n /** Maximum file size in bytes */\n maxFileSize?: number;\n /** Allowed file types */\n allowedFileTypes?: string[];\n /** Custom attachment processor */\n processAttachment?: (file: File) => Promise<MessageAttachment>;\n /** Custom class names */\n classNames?: {\n root?: string;\n hero?: string;\n input?: string;\n suggestions?: string;\n recentChats?: string;\n };\n}\n\nexport function ChatWelcome({\n config,\n suggestions = [],\n recentThreads = [],\n onSendMessage,\n onSelectThread,\n onDeleteThread,\n onViewMoreThreads,\n isLoading = false,\n onStop,\n placeholder = \"Type a message...\",\n attachmentsEnabled = true,\n attachmentsDisabledTooltip = \"Attachments not supported by this model\",\n maxFileSize = DEFAULT_MAX_FILE_SIZE,\n allowedFileTypes = DEFAULT_ALLOWED_TYPES,\n processAttachment: processAttachmentProp,\n classNames = {},\n}: ChatWelcomeProps) {\n const [input, setInput] = useState(\"\");\n const [pendingAttachments, setPendingAttachments] = useState<\n PendingAttachment[]\n >([]);\n const fileInputRef = useRef<HTMLInputElement>(null);\n const fileInputId = useId();\n\n // Extract config values with defaults\n const title = config?.title ?? DEFAULT_TITLE;\n const subtitle = config?.subtitle ?? DEFAULT_SUBTITLE;\n const logo = config?.logo;\n const suggestionsLabel =\n config?.suggestionsLabel ?? DEFAULT_SUGGESTIONS_LABEL;\n const showRecentChats = config?.showRecentChats ?? true;\n const recentChatsLabel =\n config?.recentChatsLabel ?? DEFAULT_RECENT_CHATS_LABEL;\n const maxRecentChats = config?.maxRecentChats ?? DEFAULT_MAX_RECENT_CHATS;\n const viewMoreLabel = config?.viewMoreLabel ?? DEFAULT_VIEW_MORE_LABEL;\n\n // Check if file type is allowed\n const isFileTypeAllowed = useCallback(\n (file: File): boolean => {\n for (const type of allowedFileTypes) {\n if (type.endsWith(\"/*\")) {\n const category = type.slice(0, -2);\n if (file.type.startsWith(category + \"/\")) return true;\n } else if (file.type === type) {\n return true;\n }\n }\n return false;\n },\n [allowedFileTypes],\n );\n\n // Handle file selection\n const handleFileSelect = useCallback(\n async (files: FileList | null) => {\n if (!files || !attachmentsEnabled) return;\n\n for (const file of Array.from(files)) {\n // Validate file size\n if (file.size > maxFileSize) {\n const sizeMB = (maxFileSize / (1024 * 1024)).toFixed(0);\n console.warn(`File ${file.name} exceeds ${sizeMB}MB limit`);\n continue;\n }\n\n // Validate file type\n if (!isFileTypeAllowed(file)) {\n console.warn(`File type ${file.type} is not allowed`);\n continue;\n }\n\n const id = generateAttachmentId();\n const previewUrl = URL.createObjectURL(file);\n\n // Add as processing\n setPendingAttachments((prev) => [\n ...prev,\n {\n id,\n file,\n previewUrl,\n attachment: {\n type: getAttachmentType(file.type),\n data: \"\",\n mimeType: file.type,\n filename: file.name,\n },\n status: \"processing\",\n },\n ]);\n\n // Process attachment\n try {\n let attachment: MessageAttachment;\n\n if (processAttachmentProp) {\n attachment = await processAttachmentProp(file);\n } else {\n const data = await fileToBase64(file);\n attachment = {\n type: getAttachmentType(file.type),\n data,\n mimeType: file.type,\n filename: file.name,\n };\n }\n\n setPendingAttachments((prev) =>\n prev.map((att) =>\n att.id === id\n ? { ...att, status: \"ready\" as const, attachment }\n : att,\n ),\n );\n } catch (error) {\n setPendingAttachments((prev) =>\n prev.map((att) =>\n att.id === id\n ? {\n ...att,\n status: \"error\" as const,\n error: \"Failed to process file\",\n }\n : att,\n ),\n );\n }\n }\n },\n [attachmentsEnabled, maxFileSize, isFileTypeAllowed, processAttachmentProp],\n );\n\n // Handle file input change\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n handleFileSelect(e.target.files);\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n },\n [handleFileSelect],\n );\n\n // Remove pending attachment\n const removePendingAttachment = useCallback((id: string) => {\n setPendingAttachments((prev) => {\n const att = prev.find((a) => a.id === id);\n if (att) {\n URL.revokeObjectURL(att.previewUrl);\n }\n return prev.filter((a) => a.id !== id);\n });\n }, []);\n\n const handleSubmit = useCallback(() => {\n const hasContent = input.trim();\n const hasAttachments = pendingAttachments.some(\n (att) => att.status === \"ready\",\n );\n\n if ((!hasContent && !hasAttachments) || isLoading) return;\n\n // Get ready attachments\n const attachments = pendingAttachments\n .filter((att) => att.status === \"ready\")\n .map((att) => att.attachment);\n\n onSendMessage(input, attachments.length > 0 ? attachments : undefined);\n\n // Cleanup\n pendingAttachments.forEach((att) => URL.revokeObjectURL(att.previewUrl));\n setPendingAttachments([]);\n setInput(\"\");\n }, [input, isLoading, onSendMessage, pendingAttachments]);\n\n const handleSuggestionClick = useCallback(\n (suggestion: string) => {\n onSendMessage(suggestion);\n },\n [onSendMessage],\n );\n\n // Compute accept string from allowed types\n const acceptString = allowedFileTypes.join(\",\");\n\n // Determine which threads to show\n const visibleThreads = showRecentChats\n ? recentThreads.slice(0, maxRecentChats)\n : [];\n const hasMoreThreads = recentThreads.length > maxRecentChats;\n\n return (\n <div\n className={cn(\n \"flex flex-1 flex-col items-center justify-center px-4 py-8 overflow-auto\",\n classNames.root,\n )}\n >\n {/* Hero Section */}\n <div\n className={cn(\n \"flex flex-col items-center text-center mb-8\",\n classNames.hero,\n )}\n >\n {/* Logo */}\n {logo ? (\n <img\n src={logo}\n alt=\"Logo\"\n className=\"size-12 rounded-lg object-contain mb-4\"\n />\n ) : (\n <div className=\"mb-4\">\n <CopilotSDKLogo className=\"h-12 w-auto\" />\n </div>\n )}\n {/* Title */}\n <h1 className=\"text-xl font-semibold text-foreground mb-2\">{title}</h1>\n {/* Subtitle */}\n <p className=\"text-sm text-muted-foreground\">{subtitle}</p>\n </div>\n\n {/* Input - Centered */}\n <div className={cn(\"w-full max-w-lg mb-6\", classNames.input)}>\n {/* Pending Attachments Preview */}\n {pendingAttachments.length > 0 && (\n <div className=\"flex flex-wrap gap-2 p-2 mb-2 bg-muted/30 rounded-lg\">\n {pendingAttachments.map((att) => (\n <div key={att.id} className=\"relative group\">\n {att.attachment.type === \"image\" ? (\n <img\n src={att.previewUrl}\n alt={att.file.name}\n className=\"w-16 h-16 object-cover rounded-lg border\"\n />\n ) : (\n <div className=\"w-16 h-16 bg-muted rounded-lg border flex flex-col items-center justify-center p-1\">\n <svg\n className=\"w-6 h-6 text-muted-foreground\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\n />\n </svg>\n <span className=\"text-[10px] text-muted-foreground truncate w-full text-center mt-1\">\n {att.file.name.length > 10\n ? att.file.name.slice(0, 8) + \"...\"\n : att.file.name}\n </span>\n </div>\n )}\n {/* Loading overlay */}\n {att.status === \"processing\" && (\n <div className=\"csdk-attachment-loading absolute inset-0 bg-background/80 rounded-lg flex items-center justify-center\">\n <Loader variant=\"dots\" size=\"sm\" />\n </div>\n )}\n {/* Error overlay */}\n {att.status === \"error\" && (\n <div className=\"csdk-attachment-error absolute inset-0 bg-destructive/20 rounded-lg flex items-center justify-center\">\n <span className=\"text-destructive text-xs\">Error</span>\n </div>\n )}\n {/* Remove button */}\n <button\n onClick={() => removePendingAttachment(att.id)}\n className=\"absolute -top-1.5 -right-1.5 bg-destructive text-destructive-foreground rounded-full p-0.5 opacity-0 group-hover:opacity-100 transition-opacity\"\n type=\"button\"\n >\n <XIcon className=\"w-3 h-3\" />\n </button>\n </div>\n ))}\n </div>\n )}\n\n <PromptInput\n value={input}\n onValueChange={setInput}\n isLoading={isLoading}\n onSubmit={handleSubmit}\n >\n <PromptInputTextarea placeholder={placeholder} />\n <PromptInputActions className=\"flex justify-between\">\n <div>\n <PromptInputAction\n tooltip={\n attachmentsEnabled\n ? \"Attach files\"\n : attachmentsDisabledTooltip\n }\n >\n <label\n htmlFor={fileInputId}\n className={cn(\n \"flex h-8 w-8 items-center justify-center rounded-2xl\",\n attachmentsEnabled\n ? \"hover:bg-secondary-foreground/10 cursor-pointer\"\n : \"opacity-50 cursor-not-allowed\",\n )}\n >\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n accept={acceptString}\n onChange={handleInputChange}\n className=\"hidden\"\n id={fileInputId}\n disabled={!attachmentsEnabled}\n />\n <PlusIcon className=\"text-primary size-5\" />\n </label>\n </PromptInputAction>\n </div>\n <PromptInputAction tooltip={isLoading ? \"Stop\" : \"Send\"}>\n {isLoading ? (\n <Button\n size=\"sm\"\n variant=\"destructive\"\n className=\"rounded-full size-9\"\n onClick={onStop}\n >\n <StopIcon className=\"h-4 w-4\" />\n </Button>\n ) : (\n <Button\n size=\"sm\"\n className=\"rounded-full size-9\"\n onClick={handleSubmit}\n disabled={\n !input.trim() &&\n !pendingAttachments.some((att) => att.status === \"ready\")\n }\n >\n <ArrowUpIcon className=\"h-4 w-4\" />\n </Button>\n )}\n </PromptInputAction>\n </PromptInputActions>\n </PromptInput>\n </div>\n\n {/* Suggestions */}\n {suggestions.length > 0 && (\n <div\n className={cn(\"w-full max-w-lg mb-6 px-3\", classNames.suggestions)}\n >\n <p className=\"text-xs font-medium text-muted-foreground mb-2\">\n {suggestionsLabel}\n </p>\n <div className=\"\">\n {suggestions.map((suggestion, index) => (\n <button\n key={index}\n type=\"button\"\n onClick={() => handleSuggestionClick(suggestion)}\n className=\"group w-full cursor-pointer font-medium text-left py-2 text-sm hover:text-foreground text-foreground/70 transition-colors flex items-center gap-2\"\n >\n <span>{suggestion}</span>\n <ArrowUpRightIcon className=\"size-4 opacity-0 translate-y-1 group-hover:opacity-[0.6] group-hover:translate-y-0 transition-all duration-200\" />\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React, {\n useState,\n useCallback,\n useRef,\n useId,\n createContext,\n useContext,\n} from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport {\n ChatContainerRoot,\n ChatContainerContent,\n ChatContainerScrollAnchor,\n} from \"../../ui/chat-container\";\nimport { ScrollButton } from \"../../ui/scroll-button\";\nimport {\n PromptInput,\n PromptInputTextarea,\n PromptInputActions,\n PromptInputAction,\n} from \"../../ui/prompt-input\";\nimport { Loader } from \"../../ui/loader\";\nimport { Button } from \"../../ui/button\";\nimport {\n StopIcon,\n PlusIcon,\n ArrowUpIcon,\n XIcon,\n ChevronLeftIcon,\n} from \"../../icons\";\nimport { ChatHeader } from \"./chat-header\";\nimport { Suggestions } from \"./suggestions\";\nimport { DefaultMessage } from \"./default-message\";\nimport { ChatWelcome } from \"./chat-welcome\";\nimport type { ChatProps, PendingAttachment, MessageAttachment } from \"./types\";\nimport type { ToolExecutionData } from \"../tools\";\nimport type { Thread } from \"../../../../core/types/thread\";\nimport { ThreadPicker, type ThreadPickerProps } from \"../../ui/thread-picker\";\nimport { MessageActionsProvider } from \"./message-actions-context\";\nimport {\n MessageActions,\n CopyAction,\n EditAction,\n FeedbackAction,\n Action as MessageAction,\n} from \"./message-actions-compound\";\n\n// ============================================================================\n// Internal Context for Compound Components\n// ============================================================================\n\ninterface CopilotChatInternalContext {\n view: \"home\" | \"chat\";\n send: (message: string, attachments?: MessageAttachment[]) => void;\n isLoading: boolean;\n onStop?: () => void;\n attachmentsEnabled: boolean;\n placeholder: string;\n // Messages (for Chat.MessageList primitive)\n messages: import(\"./types\").ChatMessage[];\n registeredTools?: import(\"../../../../core\").ToolDefinition[];\n // Thread management\n onNewChat?: () => void;\n threads?: Thread[];\n currentThreadId?: string | null;\n onSwitchThread?: (id: string) => void;\n onDeleteThread?: (id: string) => void;\n isThreadBusy?: boolean;\n}\n\nconst CopilotChatContext = createContext<CopilotChatInternalContext | null>(\n null,\n);\n\n/**\n * Hook to access CopilotChat internal context.\n * Must be used within CopilotChat compound components.\n */\nexport const useCopilotChatContext = () => {\n const ctx = useContext(CopilotChatContext);\n if (!ctx) {\n throw new Error(\n \"useCopilotChatContext must be used within CopilotChat. \" +\n \"Make sure you're using CopilotChat.Home, CopilotChat.Input, etc. inside <CopilotChat>\",\n );\n }\n return ctx;\n};\n\n// ============================================================================\n// Compound Components\n// ============================================================================\n\n/**\n * HomeView slot - renders only when there are no messages (home view).\n * Use this to create a custom welcome/home screen.\n */\nexport interface HomeViewProps {\n children: React.ReactNode;\n className?: string;\n}\n\nfunction HomeView({ children, className }: HomeViewProps) {\n const { view } = useCopilotChatContext();\n if (view !== \"home\") return null;\n return (\n <div\n className={cn(\n \"csdk-chat-home-view flex flex-1 flex-col overflow-auto\",\n className,\n )}\n >\n <div className=\"flex flex-col w-full\">{children}</div>\n </div>\n );\n}\n\n// Alias for backward compatibility\nexport type { HomeViewProps as HomeProps };\nconst Home = HomeView;\n\n/**\n * ChatView slot - renders only when there are messages (chat view).\n * Use this for custom chat UI layouts. If no children, renders default chat UI.\n *\n * When Header/Footer are placed inside ChatView (instead of at root level),\n * they only show in chat view - view-specific by composition!\n *\n * @example View-specific header\n * ```tsx\n * <CopilotChat.ChatView>\n * <CopilotChat.Header>Only shows in chat view!</CopilotChat.Header>\n * </CopilotChat.ChatView>\n * ```\n */\nexport interface ChatViewProps {\n children?: React.ReactNode;\n className?: string;\n}\n\nfunction ChatView({ children, className }: ChatViewProps) {\n const { view } = useCopilotChatContext();\n if (view !== \"chat\") return null;\n\n // If children provided, render them in a minimal wrapper (no flex-1, user controls layout)\n if (children) {\n return (\n <div className={cn(\"csdk-chat-view flex flex-col\", className)}>\n {children}\n </div>\n );\n }\n\n // Marker for parent to render default chat content\n return null;\n}\n\n// Internal marker to identify ChatView without children\nChatView.displayName = \"ChatView\";\n\n/**\n * Check if ChatView children consist only of Header/Footer components.\n * If so, we should still render default chat content alongside them.\n */\nfunction chatViewHasOnlyLayoutChildren(\n chatViewElement: React.ReactElement | undefined,\n): boolean {\n if (!chatViewElement?.props?.children) return false;\n\n const childArray = React.Children.toArray(chatViewElement.props.children);\n if (childArray.length === 0) return false;\n\n // Check if ALL children are Header or Footer\n return childArray.every(\n (child) =>\n React.isValidElement(child) &&\n (child.type === Header || child.type === Footer),\n );\n}\n\n/**\n * Header slot - renders header content.\n * Can be placed at root level (shows in both views) or inside HomeView/ChatView (view-specific).\n */\nexport interface HeaderProps {\n children: React.ReactNode;\n className?: string;\n}\n\nfunction Header({ children, className }: HeaderProps) {\n return <div className={cn(\"csdk-chat-header\", className)}>{children}</div>;\n}\n\n/**\n * Footer slot - renders footer content.\n * Can be placed at root level (shows in both views) or inside HomeView/ChatView (view-specific).\n */\nexport interface FooterProps {\n children: React.ReactNode;\n className?: string;\n}\n\nfunction Footer({ children, className }: FooterProps) {\n return <div className={cn(\"csdk-chat-footer\", className)}>{children}</div>;\n}\n\n/**\n * Input component that auto-connects to CopilotChat context.\n * Handles sending messages without manual wiring.\n */\nexport interface InputProps {\n placeholder?: string;\n className?: string;\n}\n\nfunction Input({ placeholder: placeholderProp, className }: InputProps) {\n const {\n send,\n isLoading,\n onStop,\n placeholder: defaultPlaceholder,\n } = useCopilotChatContext();\n const [value, setValue] = useState(\"\");\n\n const handleSubmit = useCallback(() => {\n if (value.trim() && !isLoading) {\n send(value.trim());\n setValue(\"\");\n }\n }, [value, isLoading, send]);\n\n return (\n <PromptInput\n value={value}\n onValueChange={setValue}\n isLoading={isLoading}\n onSubmit={handleSubmit}\n className={cn(\"csdk-compound-input\", className)}\n >\n <PromptInputTextarea\n placeholder={placeholderProp ?? defaultPlaceholder}\n />\n <PromptInputActions className=\"justify-end\">\n <PromptInputAction tooltip={isLoading ? \"Stop\" : \"Send\"}>\n {isLoading ? (\n <Button\n size=\"sm\"\n variant=\"destructive\"\n className=\"csdk-button-stop rounded-full size-9\"\n onClick={onStop}\n >\n <StopIcon className=\"h-4 w-4\" />\n </Button>\n ) : (\n <Button\n size=\"sm\"\n className=\"csdk-button-send rounded-full size-9\"\n onClick={handleSubmit}\n disabled={!value.trim()}\n >\n <ArrowUpIcon className=\"h-4 w-4\" />\n </Button>\n )}\n </PromptInputAction>\n </PromptInputActions>\n </PromptInput>\n );\n}\n\n/**\n * Suggestions component that auto-connects to CopilotChat context.\n * Clicking a suggestion sends it as a message.\n */\nexport interface SuggestionsCompoundProps {\n items: string[];\n label?: string;\n className?: string;\n buttonClassName?: string;\n}\n\nfunction SuggestionsCompound({\n items,\n label,\n className,\n buttonClassName,\n}: SuggestionsCompoundProps) {\n const { send } = useCopilotChatContext();\n\n if (items.length === 0) return null;\n\n return (\n <div className={cn(\"csdk-compound-suggestions\", className)}>\n {label && (\n <span className=\"text-sm text-muted-foreground mb-2 block\">\n {label}\n </span>\n )}\n <div className=\"flex flex-wrap gap-2\">\n {items.map((item, i) => (\n <button\n key={i}\n onClick={() => send(item)}\n className={cn(\n \"csdk-followup-button px-3 py-1.5 text-sm rounded-full border\",\n \"bg-background hover:bg-accent transition-colors\",\n buttonClassName,\n )}\n >\n {item}\n </button>\n ))}\n </div>\n </div>\n );\n}\n\n/**\n * BackButton component that starts a new chat and returns to home view.\n * Auto-connects to CopilotChat context for thread management.\n */\nexport interface BackButtonProps {\n className?: string;\n children?: React.ReactNode;\n /** Override disabled state (combines with isThreadBusy from context) */\n disabled?: boolean;\n /** Accessible label for screen readers */\n \"aria-label\"?: string;\n}\n\nfunction BackButton({\n className,\n children,\n disabled,\n \"aria-label\": ariaLabel = \"Start new chat\",\n}: BackButtonProps) {\n const { onNewChat, isThreadBusy } = useCopilotChatContext();\n\n if (!onNewChat) return null;\n\n return (\n <button\n type=\"button\"\n onClick={onNewChat}\n disabled={disabled || isThreadBusy}\n aria-label={ariaLabel}\n className={cn(\n \"csdk-back-button flex items-center gap-1 text-sm\",\n \"hover:bg-accent rounded px-2 py-1\",\n \"disabled:opacity-50 disabled:cursor-not-allowed\",\n className,\n )}\n >\n {children || (\n <>\n <ChevronLeftIcon className=\"h-4 w-4\" />\n <span>New Chat</span>\n </>\n )}\n </button>\n );\n}\n\n/**\n * ThreadPicker compound wrapper that auto-connects to CopilotChat context.\n * Only renders when persistence is enabled (thread functions available).\n */\nexport type ThreadPickerCompoundProps = Omit<\n ThreadPickerProps,\n | \"value\"\n | \"threads\"\n | \"onSelect\"\n | \"onNewThread\"\n | \"onDeleteThread\"\n | \"disabled\"\n>;\n\nfunction ThreadPickerCompound(props: ThreadPickerCompoundProps) {\n const {\n threads,\n currentThreadId,\n onSwitchThread,\n onNewChat,\n onDeleteThread,\n isThreadBusy,\n } = useCopilotChatContext();\n\n // Only render if persistence is enabled (thread functions available)\n if (!threads || !onSwitchThread) return null;\n\n return (\n <ThreadPicker\n {...props}\n value={currentThreadId}\n threads={threads}\n onSelect={onSwitchThread}\n onNewThread={onNewChat}\n onDeleteThread={onDeleteThread}\n disabled={isThreadBusy}\n />\n );\n}\n\n// ============================================================================\n// Helper to detect compound children\n// ============================================================================\n\nfunction hasCompoundChild(\n children: React.ReactNode,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...components: React.ComponentType<any>[]\n): boolean {\n return React.Children.toArray(children).some(\n (child) =>\n React.isValidElement(child) &&\n components.includes(child.type as React.ComponentType),\n );\n}\n\n/**\n * Find a specific compound child by type\n */\nfunction findCompoundChild(\n children: React.ReactNode,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component: React.ComponentType<any>,\n): React.ReactElement | undefined {\n return React.Children.toArray(children).find(\n (child) => React.isValidElement(child) && child.type === component,\n ) as React.ReactElement | undefined;\n}\n\n/**\n * Filter compound children by types\n */\nfunction filterCompoundChildren(\n children: React.ReactNode,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...components: React.ComponentType<any>[]\n): React.ReactElement[] {\n return React.Children.toArray(children).filter(\n (child) =>\n React.isValidElement(child) &&\n components.includes(child.type as React.ComponentType),\n ) as React.ReactElement[];\n}\n\n// Constants\nconst DEFAULT_MAX_FILE_SIZE = 5 * 1024 * 1024; // 5MB\nconst DEFAULT_ALLOWED_TYPES = [\"image/*\", \"application/pdf\"];\n\n/**\n * Get attachment type from MIME type\n */\nfunction getAttachmentType(\n mimeType: string,\n): \"image\" | \"file\" | \"audio\" | \"video\" {\n if (mimeType.startsWith(\"image/\")) return \"image\";\n if (mimeType.startsWith(\"audio/\")) return \"audio\";\n if (mimeType.startsWith(\"video/\")) return \"video\";\n return \"file\";\n}\n\n/**\n * Convert file to base64 data URL\n */\nfunction fileToBase64(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result === \"string\") {\n resolve(reader.result);\n } else {\n reject(new Error(\"Failed to read file\"));\n }\n };\n reader.onerror = () => reject(new Error(\"Failed to read file\"));\n reader.readAsDataURL(file);\n });\n}\n\n/**\n * Generate unique attachment ID\n */\nfunction generateAttachmentId(): string {\n return `att_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n}\n\nfunction ChatComponent({\n // Core\n messages = [],\n onSendMessage,\n onStop,\n isLoading = false,\n error,\n // Compound children\n children,\n // Labels\n placeholder = \"Type a message...\",\n welcomeMessage,\n title,\n // Header\n showHeader = false,\n header,\n threadPicker,\n // Deprecated header props (backwards compat)\n logo,\n name,\n onClose,\n // Appearance\n showPoweredBy = true,\n showUserAvatar = false,\n userAvatar: userAvatarProp,\n assistantAvatar: assistantAvatarProp,\n loaderVariant = \"typing\",\n fontSize = \"sm\",\n // Attachments\n maxFileSize = DEFAULT_MAX_FILE_SIZE,\n allowedFileTypes = DEFAULT_ALLOWED_TYPES,\n attachmentsEnabled = true,\n attachmentsDisabledTooltip = \"Attachments not supported by this model\",\n upload: uploadProp,\n processAttachment: deprecatedProcessAttachment,\n // Suggestions\n suggestions = [],\n onSuggestionClick,\n // Welcome Screen\n welcome,\n recentThreads = [],\n onSelectThread,\n onDeleteThread,\n onViewMoreThreads,\n // Tool Executions\n isProcessing = false,\n registeredTools,\n toolRenderers,\n mcpToolRenderer,\n fallbackToolRenderer,\n onApproveToolExecution,\n onRejectToolExecution,\n // Follow-up Questions\n showFollowUps = true,\n followUpClassName,\n followUpButtonClassName,\n // Citations/Sources\n citations,\n // Message Actions\n allowToCopyMessage = false,\n // Custom rendering\n messageView,\n renderMessage,\n wrapMessage,\n renderInput,\n renderHeader,\n // Avatar grouping\n groupConsecutiveMessages = false,\n // Styling\n className,\n classNames = {},\n // Thread management for compound components\n onNewChat,\n threads,\n currentThreadId,\n onSwitchThread,\n isThreadBusy,\n // Branching\n getBranchInfo,\n onSwitchBranch,\n onEditMessage,\n}: ChatProps) {\n // Merge avatar props with defaults (so user can pass partial config)\n const userAvatar = { fallback: \"U\", ...userAvatarProp };\n const assistantAvatar = { fallback: \"AI\", ...assistantAvatarProp };\n\n const [input, setInput] = useState(\"\");\n const [pendingAttachments, setPendingAttachments] = useState<\n PendingAttachment[]\n >([]);\n const [isDragging, setIsDragging] = useState(false);\n const [isDismissed, setIsDismissed] = useState(false);\n const [displayedError, setDisplayedError] = useState<Error | null>(null);\n\n // Track error changes: new error → show it; error clears → keep displayedError for exit animation\n React.useEffect(() => {\n if (error) {\n setDisplayedError(error);\n setIsDismissed(false);\n }\n }, [error]);\n\n // Banner is visible when: there's an error prop AND not dismissed\n const showErrorBanner = !!error && !isDismissed;\n const fileInputRef = useRef<HTMLInputElement>(null);\n const fileInputId = useId(); // Unique ID for this Chat instance's file input\n\n // Check if file type is allowed\n const isFileTypeAllowed = useCallback(\n (file: File): boolean => {\n for (const type of allowedFileTypes) {\n if (type.endsWith(\"/*\")) {\n const category = type.slice(0, -2);\n if (file.type.startsWith(category + \"/\")) return true;\n } else if (file.type === type) {\n return true;\n }\n }\n return false;\n },\n [allowedFileTypes],\n );\n\n // Handle file selection\n const handleFileSelect = useCallback(\n async (files: FileList | null) => {\n if (!files || !attachmentsEnabled) return;\n\n for (const file of Array.from(files)) {\n // Validate file size\n if (file.size > maxFileSize) {\n const sizeMB = (maxFileSize / (1024 * 1024)).toFixed(0);\n console.warn(`File ${file.name} exceeds ${sizeMB}MB limit`);\n continue;\n }\n\n // Validate file type\n if (!isFileTypeAllowed(file)) {\n console.warn(`File type ${file.type} is not allowed`);\n continue;\n }\n\n const id = generateAttachmentId();\n const previewUrl = URL.createObjectURL(file);\n\n // Add as processing\n setPendingAttachments((prev) => [\n ...prev,\n {\n id,\n file,\n previewUrl,\n attachment: {\n type: getAttachmentType(file.type),\n data: \"\",\n mimeType: file.type,\n filename: file.name,\n },\n status: \"processing\",\n },\n ]);\n\n // Process attachment (cloud upload or base64 conversion)\n try {\n let attachment: {\n type: \"image\" | \"file\" | \"audio\" | \"video\";\n data?: string;\n url?: string;\n mimeType: string;\n filename?: string;\n };\n\n // Resolve upload handler: upload prop > deprecated processAttachment > base64 fallback\n const uploader = uploadProp ?? deprecatedProcessAttachment;\n\n if (typeof uploader === \"function\") {\n // Function — full custom handler\n attachment = await uploader(file);\n } else if (uploader) {\n // String or object — server upload endpoint\n const config =\n typeof uploader === \"string\" ? { url: uploader } : uploader;\n const extraHeaders =\n typeof config.headers === \"function\"\n ? config.headers()\n : config.headers;\n const extraBody =\n typeof config.body === \"function\" ? config.body() : config.body;\n const data = await fileToBase64(file);\n const res = await fetch(config.url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", ...extraHeaders },\n body: JSON.stringify({\n data,\n mimeType: file.type,\n filename: file.name,\n ...extraBody,\n }),\n });\n if (!res.ok) throw new Error(`Upload failed: ${res.status}`);\n const result = await res.json();\n const url = result.url ?? result.data?.url;\n if (!url) throw new Error(\"Upload returned no URL\");\n attachment = {\n type: getAttachmentType(file.type),\n url,\n mimeType: file.type,\n filename: file.name,\n };\n } else {\n // Default: convert to base64\n const data = await fileToBase64(file);\n attachment = {\n type: getAttachmentType(file.type),\n data,\n mimeType: file.type,\n filename: file.name,\n };\n }\n\n setPendingAttachments((prev) =>\n prev.map((att) =>\n att.id === id\n ? { ...att, status: \"ready\" as const, attachment }\n : att,\n ),\n );\n } catch (error) {\n setPendingAttachments((prev) =>\n prev.map((att) =>\n att.id === id\n ? {\n ...att,\n status: \"error\" as const,\n error: \"Failed to process file\",\n }\n : att,\n ),\n );\n }\n }\n },\n [\n attachmentsEnabled,\n maxFileSize,\n isFileTypeAllowed,\n uploadProp,\n deprecatedProcessAttachment,\n ],\n );\n\n // Handle file input change\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n handleFileSelect(e.target.files);\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n },\n [handleFileSelect],\n );\n\n // Remove pending attachment\n const removePendingAttachment = useCallback((id: string) => {\n setPendingAttachments((prev) => {\n const att = prev.find((a) => a.id === id);\n if (att) {\n URL.revokeObjectURL(att.previewUrl);\n }\n return prev.filter((a) => a.id !== id);\n });\n }, []);\n\n // Drag and drop handlers\n const handleDragOver = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (attachmentsEnabled) {\n setIsDragging(true);\n }\n },\n [attachmentsEnabled],\n );\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n }, []);\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n if (attachmentsEnabled) {\n handleFileSelect(e.dataTransfer.files);\n }\n },\n [attachmentsEnabled, handleFileSelect],\n );\n\n const handleSubmit = useCallback(() => {\n const hasContent = input.trim();\n const hasAttachments = pendingAttachments.some(\n (att) => att.status === \"ready\",\n );\n\n if ((!hasContent && !hasAttachments) || isLoading) return;\n\n // Get ready attachments\n const attachments = pendingAttachments\n .filter((att) => att.status === \"ready\")\n .map((att) => att.attachment);\n\n onSendMessage?.(input, attachments.length > 0 ? attachments : undefined);\n\n // Cleanup\n pendingAttachments.forEach((att) => URL.revokeObjectURL(att.previewUrl));\n setPendingAttachments([]);\n setInput(\"\");\n }, [input, isLoading, onSendMessage, pendingAttachments]);\n\n const handleSuggestionClick = useCallback(\n (suggestion: string) => {\n if (onSuggestionClick) {\n onSuggestionClick(suggestion);\n } else {\n onSendMessage?.(suggestion);\n }\n },\n [onSuggestionClick, onSendMessage],\n );\n\n // Compute accept string from allowed types\n const acceptString = allowedFileTypes.join(\",\");\n\n // Determine view state\n const view = messages.length === 0 ? \"home\" : \"chat\";\n\n // Check if user provided custom compound components\n const hasCustomHome = hasCompoundChild(children, Home, HomeView);\n const hasCustomChatView = hasCompoundChild(children, ChatView);\n const hasCustomLayout = hasCustomHome || hasCustomChatView;\n\n // Extract root-level Header/Footer (shown in both views)\n const rootHeader = findCompoundChild(children, Header);\n const rootFooter = findCompoundChild(children, Footer);\n\n // Get view-specific children\n const viewChildren = filterCompoundChildren(\n children,\n HomeView,\n Home,\n ChatView,\n );\n\n // Behavior children: non-layout compound types (MessageActions registrars, custom hook components)\n // These always mount so their useLayoutEffect registrations run regardless of view state.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const layoutTypes: any[] = [HomeView, Home, ChatView, Header, Footer];\n const behaviorChildren = React.Children.toArray(children).filter(\n (child) =>\n React.isValidElement(child) &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n !layoutTypes.includes(child.type as any),\n ) as React.ReactElement[];\n\n // Check if ChatView has no children or only Header/Footer children (should render default)\n const chatViewElement = findCompoundChild(children, ChatView);\n const chatViewNeedsDefault =\n chatViewElement &&\n (!chatViewElement.props.children ||\n chatViewHasOnlyLayoutChildren(chatViewElement));\n\n // Determine if we should show the default welcome screen\n const showDefaultWelcome =\n view === \"home\" && !hasCustomHome && welcome !== false;\n\n // Get welcome config (could be object or undefined/true)\n const welcomeConfig = typeof welcome === \"object\" ? welcome : undefined;\n\n // Stable send function reference\n const send = useCallback(\n (message: string, attachments?: MessageAttachment[]) => {\n onSendMessage?.(message, attachments);\n },\n [onSendMessage],\n );\n\n // Context value for compound components (memoized to prevent unnecessary re-renders)\n const contextValue: CopilotChatInternalContext = React.useMemo(\n () => ({\n view,\n send,\n isLoading,\n onStop,\n attachmentsEnabled,\n placeholder,\n // Messages for Chat.MessageList primitive\n messages,\n registeredTools,\n // Thread management - passed from connected-chat\n onNewChat,\n threads,\n currentThreadId,\n onSwitchThread,\n onDeleteThread,\n isThreadBusy,\n }),\n [\n view,\n send,\n isLoading,\n onStop,\n attachmentsEnabled,\n placeholder,\n messages,\n registeredTools,\n onNewChat,\n threads,\n currentThreadId,\n onSwitchThread,\n onDeleteThread,\n isThreadBusy,\n ],\n );\n\n return (\n <MessageActionsProvider>\n <CopilotChatContext.Provider value={contextValue}>\n <div\n className={cn(\n \"flex h-full flex-col bg-background relative\",\n className,\n classNames.root,\n )}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n {/* Drag overlay — only for built-in input; custom renderInput handles its own */}\n {isDragging && !renderInput && (\n <div className=\"csdk-dropzone-overlay absolute inset-0 z-50 bg-primary/10 border-2 border-dashed border-primary flex items-center justify-center\">\n <div className=\"text-primary font-medium text-lg\">\n Drop files here\n </div>\n </div>\n )}\n {/* Built-in Header (from showHeader prop) */}\n {showHeader &&\n (renderHeader ? (\n renderHeader()\n ) : (\n <ChatHeader\n logo={header?.logo ?? logo}\n name={header?.name ?? name}\n title={title}\n threadPicker={threadPicker}\n onClose={header?.onClose ?? onClose}\n className={classNames.header}\n />\n ))}\n\n {/* Root-level custom Header (shows in both views) */}\n {rootHeader}\n\n {/* Built-in copy action — auto-registered when allowToCopyMessage is true */}\n {allowToCopyMessage && (\n <MessageActions role=\"assistant\">\n <CopyAction />\n </MessageActions>\n )}\n\n {/* Behavior children — always mounted (MessageActions registrars, hook components) */}\n {behaviorChildren.length > 0 && behaviorChildren}\n\n {/* Custom compound children - view components self-filter based on current view */}\n {hasCustomLayout && viewChildren}\n\n {showDefaultWelcome ? (\n /* Default Welcome Screen (centered input) */\n <ChatWelcome\n config={welcomeConfig}\n suggestions={suggestions}\n recentThreads={recentThreads}\n onSendMessage={(msg, attachments) =>\n onSendMessage?.(msg, attachments)\n }\n onSelectThread={onSelectThread}\n onDeleteThread={onDeleteThread}\n onViewMoreThreads={onViewMoreThreads}\n isLoading={isLoading}\n onStop={onStop}\n placeholder={placeholder}\n attachmentsEnabled={attachmentsEnabled}\n attachmentsDisabledTooltip={attachmentsDisabledTooltip}\n maxFileSize={maxFileSize}\n allowedFileTypes={allowedFileTypes}\n processAttachment={\n typeof uploadProp === \"function\"\n ? uploadProp\n : deprecatedProcessAttachment\n }\n />\n ) : null}\n\n {/* Normal Chat UI (messages + input at bottom) - show when there are messages */}\n {/* Renders when: view is chat AND (no explicit ChatView OR ChatView needs default content) */}\n {view === \"chat\" && (!hasCustomChatView || chatViewNeedsDefault) && (\n <>\n {/* Messages wrapper - relative for scroll button positioning */}\n <div className=\"flex-1 min-h-0 flex flex-col\">\n <ChatContainerRoot\n className={cn(\"flex-1 relative\", classNames.container)}\n >\n <ChatContainerContent\n className={cn(\"gap-4 p-4\", classNames.messageList)}\n >\n {/* Welcome message */}\n {messages.length === 0 && (\n <div className=\"py-8 text-center text-muted-foreground\">\n {welcomeMessage ||\n \"Send a message to start the conversation\"}\n </div>\n )}\n\n {/* Messages */}\n {(() => {\n const messageElements = messages.map((message, index) => {\n const isLastMessage = index === messages.length - 1;\n\n const GROUP_THRESHOLD_MS = 5 * 60 * 1000;\n const shouldHideAvatar = (() => {\n if (!groupConsecutiveMessages || index === 0)\n return false;\n let prevIdx = index - 1;\n while (prevIdx >= 0) {\n const prev = messages[prevIdx];\n const isToolMsg = prev.role === \"tool\";\n const isInvisibleSystem =\n prev.role === \"system\" &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (prev.metadata as Record<string, unknown>)\n ?.type !== \"compaction-marker\";\n if (!isToolMsg && !isInvisibleSystem) break;\n prevIdx--;\n }\n if (prevIdx < 0) return false;\n const prevVisible = messages[prevIdx];\n if (prevVisible.role !== message.role) return false;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const curTs = (message as any).timestamp as\n | number\n | undefined;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const prevTs = (prevVisible as any).timestamp as\n | number\n | undefined;\n if (\n curTs &&\n prevTs &&\n curTs - prevTs > GROUP_THRESHOLD_MS\n )\n return false;\n return true;\n })();\n\n const isEmptyAssistant =\n message.role === \"assistant\" &&\n !message.content?.trim();\n\n // Check if message has tool_calls or toolExecutions\n const hasToolCalls =\n message.tool_calls && message.tool_calls.length > 0;\n const hasToolExecutions =\n message.toolExecutions &&\n message.toolExecutions.length > 0;\n\n // Check if this message has pending tool approvals\n const hasPendingApprovals =\n message.toolExecutions?.some(\n (exec) => exec.approvalStatus === \"required\",\n );\n\n // Hide empty assistant messages that aren't loading and have no content to show\n if (isEmptyAssistant) {\n const shouldShowMessage =\n hasToolCalls ||\n hasToolExecutions ||\n hasPendingApprovals ||\n (isLastMessage && (isLoading || isProcessing));\n\n if (!shouldShowMessage) {\n return null;\n }\n // Otherwise, continue to render via DefaultMessage\n }\n\n // Check for saved executions in metadata (historical)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const savedExecutions = (message as any).metadata\n ?.toolExecutions as ToolExecutionData[] | undefined;\n const messageToolExecutions =\n message.toolExecutions || savedExecutions;\n\n const messageWithExecutions = messageToolExecutions\n ? {\n ...message,\n toolExecutions: messageToolExecutions,\n }\n : message;\n\n // Handle follow-up click - use onSendMessage if available\n const handleFollowUpClick = (question: string) => {\n if (onSuggestionClick) {\n onSuggestionClick(question);\n } else {\n onSendMessage?.(question);\n }\n };\n\n if (renderMessage) {\n return (\n <React.Fragment key={message.id}>\n {renderMessage(messageWithExecutions, index)}\n </React.Fragment>\n );\n }\n\n const defaultMsg = (\n <DefaultMessage\n key={message.id}\n message={messageWithExecutions}\n userAvatar={\n shouldHideAvatar && message.role === \"user\"\n ? { ...userAvatar, className: \"invisible\" }\n : userAvatar\n }\n assistantAvatar={\n shouldHideAvatar && message.role === \"assistant\"\n ? { ...assistantAvatar, className: \"invisible\" }\n : assistantAvatar\n }\n showUserAvatar={showUserAvatar}\n userMessageClassName={classNames.userMessage}\n assistantMessageClassName={\n classNames.assistantMessage\n }\n size={fontSize}\n isLastMessage={isLastMessage}\n isLoading={isLoading}\n isProcessing={isProcessing}\n loaderVariant={loaderVariant}\n registeredTools={registeredTools}\n toolRenderers={toolRenderers}\n mcpToolRenderer={mcpToolRenderer}\n fallbackToolRenderer={fallbackToolRenderer}\n onApproveToolExecution={onApproveToolExecution}\n onRejectToolExecution={onRejectToolExecution}\n showFollowUps={showFollowUps}\n onFollowUpClick={handleFollowUpClick}\n followUpClassName={followUpClassName}\n followUpButtonClassName={followUpButtonClassName}\n citations={\n citations === false\n ? { enabled: false }\n : citations\n }\n branchInfo={\n message.role === \"user\"\n ? (getBranchInfo?.(message.id) ?? null)\n : null\n }\n onSwitchBranch={onSwitchBranch}\n onEditMessage={onEditMessage}\n />\n );\n\n return wrapMessage ? (\n <React.Fragment key={message.id}>\n {wrapMessage(\n defaultMsg,\n messageWithExecutions,\n index,\n )}\n </React.Fragment>\n ) : (\n defaultMsg\n );\n });\n return messageView?.children\n ? messageView.children({ messages, messageElements })\n : messageElements;\n })()}\n\n {/* Loading indicator for non-streaming - when last message is user and no assistant message yet */}\n {isLoading &&\n !isProcessing &&\n messages.length > 0 &&\n messages[messages.length - 1]?.role === \"user\" && (\n <DefaultMessage\n message={{\n id: \"loading-placeholder\",\n role: \"assistant\",\n content: \"\",\n }}\n userAvatar={userAvatar}\n assistantAvatar={assistantAvatar}\n showUserAvatar={false}\n size={fontSize}\n isLastMessage={true}\n isLoading={true}\n isProcessing={false}\n loaderVariant={loaderVariant}\n />\n )}\n\n <ChatContainerScrollAnchor />\n </ChatContainerContent>\n\n {/* Scroll to bottom button - inside ChatContainerRoot for context, outside ChatContainerContent so it doesn't scroll */}\n <div className=\"csdk-scroll-btn-layer absolute inset-0 pointer-events-none z-10 flex items-end justify-end p-4\">\n <ScrollButton className=\"shadow-md pointer-events-auto\" />\n </div>\n </ChatContainerRoot>\n </div>\n\n {/* Suggestions */}\n {suggestions.length > 0 && !isLoading && (\n <Suggestions\n suggestions={suggestions}\n onSuggestionClick={handleSuggestionClick}\n className={classNames.suggestions}\n />\n )}\n\n {/* Error banner — always in DOM while displayedError exists, animated via max-height/opacity */}\n {displayedError && (\n <div\n className={cn(\n \"mx-2 mb-1 overflow-hidden transition-all duration-200 ease-in-out\",\n showErrorBanner\n ? \"max-h-20 opacity-100\"\n : \"max-h-0 opacity-0 mb-0\",\n )}\n onTransitionEnd={() => {\n // Clean up displayedError after exit animation finishes\n if (!showErrorBanner) setDisplayedError(null);\n }}\n >\n <div className=\"flex items-start gap-2 rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-xs text-destructive\">\n <svg\n className=\"mt-0.5 h-3.5 w-3.5 flex-shrink-0\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 9v2m0 4h.01M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\"\n />\n </svg>\n <span className=\"flex-1 leading-relaxed\">\n {displayedError.message}\n </span>\n <button\n type=\"button\"\n onClick={() => setIsDismissed(true)}\n className=\"flex-shrink-0 opacity-60 hover:opacity-100\"\n aria-label=\"Dismiss error\"\n >\n <svg\n className=\"h-3 w-3\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n </div>\n )}\n\n {/* Input */}\n {renderInput ? (\n renderInput()\n ) : (\n <div className={cn(\"p-2 pt-0\", classNames.input)}>\n {/* Pending Attachments Preview */}\n {pendingAttachments.length > 0 && (\n <div className=\"flex flex-wrap gap-2 p-2 mb-2 bg-muted/30 rounded-lg\">\n {pendingAttachments.map((att) => (\n <div key={att.id} className=\"relative group\">\n {att.attachment.type === \"image\" ? (\n <img\n src={att.previewUrl}\n alt={att.file.name}\n className=\"w-16 h-16 object-cover rounded-lg border\"\n />\n ) : (\n <div className=\"w-16 h-16 bg-muted rounded-lg border flex flex-col items-center justify-center p-1\">\n <svg\n className=\"w-6 h-6 text-muted-foreground\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\n />\n </svg>\n <span className=\"text-[10px] text-muted-foreground truncate w-full text-center mt-1\">\n {att.file.name.length > 10\n ? att.file.name.slice(0, 8) + \"...\"\n : att.file.name}\n </span>\n </div>\n )}\n {/* Loading overlay */}\n {att.status === \"processing\" && (\n <div className=\"csdk-attachment-loading absolute inset-0 bg-background/80 rounded-lg flex items-center justify-center\">\n <Loader variant=\"dots\" size=\"sm\" />\n </div>\n )}\n {/* Error overlay */}\n {att.status === \"error\" && (\n <div className=\"csdk-attachment-error absolute inset-0 bg-destructive/20 rounded-lg flex items-center justify-center\">\n <span className=\"text-destructive text-xs\">\n Error\n </span>\n </div>\n )}\n {/* Remove button */}\n <button\n onClick={() => removePendingAttachment(att.id)}\n className=\"absolute -top-1.5 -right-1.5 bg-destructive text-destructive-foreground rounded-full p-0.5 opacity-0 group-hover:opacity-100 transition-opacity\"\n type=\"button\"\n >\n <XIcon className=\"w-3 h-3\" />\n </button>\n </div>\n ))}\n </div>\n )}\n\n <PromptInput\n value={input}\n onValueChange={setInput}\n isLoading={isLoading}\n onSubmit={handleSubmit}\n className=\"\"\n >\n <PromptInputTextarea placeholder={placeholder} />\n <PromptInputActions className=\"flex justify-between\">\n <div>\n <PromptInputAction\n tooltip={\n attachmentsEnabled\n ? \"Attach files\"\n : attachmentsDisabledTooltip\n }\n >\n <label\n htmlFor={fileInputId}\n className={cn(\n \"csdk-button-attach flex h-8 w-8 items-center justify-center rounded-2xl\",\n attachmentsEnabled\n ? \"hover:bg-secondary-foreground/10 cursor-pointer\"\n : \"opacity-50 cursor-not-allowed\",\n )}\n >\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n accept={acceptString}\n onChange={handleInputChange}\n className=\"hidden\"\n id={fileInputId}\n disabled={!attachmentsEnabled}\n />\n <PlusIcon className=\"text-primary size-5\" />\n </label>\n </PromptInputAction>\n </div>\n <PromptInputAction tooltip={isLoading ? \"Stop\" : \"Send\"}>\n {isLoading ? (\n <Button\n size=\"sm\"\n variant=\"destructive\"\n className=\"csdk-button-stop rounded-full size-9\"\n onClick={onStop}\n >\n <StopIcon className=\"h-4 w-4\" />\n </Button>\n ) : (\n <Button\n size=\"sm\"\n className=\"csdk-button-send rounded-full size-9\"\n onClick={handleSubmit}\n disabled={\n !input.trim() &&\n !pendingAttachments.some(\n (att) => att.status === \"ready\",\n )\n }\n >\n <ArrowUpIcon className=\"h-4 w-4\" />\n </Button>\n )}\n </PromptInputAction>\n </PromptInputActions>\n </PromptInput>\n </div>\n )}\n </>\n )}\n\n {/* Root-level custom Footer (shows in both views) */}\n {rootFooter}\n </div>\n </CopilotChatContext.Provider>\n </MessageActionsProvider>\n );\n}\n\n// ============================================================================\n// Attach Compound Components & Export\n// ============================================================================\n\n/**\n * Chat component with compound component pattern.\n *\n * @example Default usage (backward compatible)\n * ```tsx\n * <Chat messages={messages} onSendMessage={send} />\n * ```\n *\n * @example Custom home screen with compound components\n * ```tsx\n * <Chat messages={messages} onSendMessage={send}>\n * <Chat.Home className=\"items-center gap-6 p-8\">\n * <h1>Welcome!</h1>\n * <Chat.Input placeholder=\"Ask anything...\" />\n * <Chat.Suggestions items={[\"Help\", \"Pricing\"]} />\n * </Chat.Home>\n * </Chat>\n * ```\n *\n * @example Full layout composition (new pattern)\n * ```tsx\n * <Chat.Root messages={messages} onSendMessage={send}>\n * <Chat.Header>Custom Header</Chat.Header>\n * <Chat.HomeView className=\"gap-6 p-8\">\n * <h1>Welcome!</h1>\n * <Chat.Input />\n * </Chat.HomeView>\n * <Chat.ChatView />\n * <Chat.Footer>Custom Footer</Chat.Footer>\n * </Chat.Root>\n * ```\n *\n * @example View-specific header with navigation (new pattern)\n * ```tsx\n * <Chat.Root messages={messages} onSendMessage={send}>\n * <Chat.HomeView>\n * <h1>Welcome!</h1>\n * </Chat.HomeView>\n * <Chat.ChatView>\n * <Chat.Header className=\"flex items-center justify-between p-3 border-b\">\n * <Chat.BackButton />\n * <Chat.ThreadPicker />\n * </Chat.Header>\n * </Chat.ChatView>\n * </Chat.Root>\n * ```\n */\nexport const Chat = Object.assign(ChatComponent, {\n Root: ChatComponent, // Alias for layout composition pattern\n Home, // Backward compat alias\n HomeView, // New name\n ChatView,\n Header,\n Footer,\n Input,\n Suggestions: SuggestionsCompound,\n BackButton, // Navigation: start new chat\n ThreadPicker: ThreadPickerCompound, // Thread switching\n // Message actions compound components\n MessageActions,\n CopyAction,\n EditAction,\n FeedbackAction,\n Action: MessageAction,\n});\n\n// Re-export compound components for direct access and TypeScript declarations\nexport {\n HomeView,\n Home,\n ChatView,\n Header,\n Footer,\n Input as ChatInput,\n SuggestionsCompound as ChatSuggestions,\n BackButton,\n ThreadPickerCompound as ChatThreadPicker,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useCopilotChatContext } from \"./chat\";\nimport { DefaultMessage } from \"./default-message\";\nimport type { ChatMessage } from \"./types\";\n\nexport interface MessageListProps {\n /**\n * Render function called for each message.\n * Return your own component or fall back to <Chat.DefaultMessage />.\n *\n * @example\n * ```tsx\n * <Chat.MessageList>\n * {(message) =>\n * message.metadata?.type === \"plan\"\n * ? <PlanCard key={message.id} data={message.metadata} />\n * : <Chat.DefaultMessage key={message.id} message={message} />\n * }\n * </Chat.MessageList>\n * ```\n */\n children?: (message: ChatMessage, index: number) => React.ReactNode;\n className?: string;\n}\n\n/**\n * Chat.MessageList — renders the message list using a render-prop pattern.\n * Must be used inside <CopilotChat>.\n *\n * If no children are provided, renders all messages with the default SDK layout.\n */\nexport function MessageList({ children, className }: MessageListProps) {\n const { messages, registeredTools } = useCopilotChatContext();\n\n return (\n <div className={className}>\n {messages.map((message, index) => {\n if (children) {\n return (\n <React.Fragment key={message.id}>\n {children(message, index)}\n </React.Fragment>\n );\n }\n return (\n <DefaultMessage\n key={message.id}\n message={message}\n userAvatar={{ fallback: \"U\" }}\n assistantAvatar={{ fallback: \"AI\" }}\n registeredTools={registeredTools}\n isLastMessage={index === messages.length - 1}\n />\n );\n })}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Message, MessageAvatar } from \"../../ui/message\";\nimport { ToolSteps, type ToolStepData } from \"../../ui/tool-steps\";\nimport {\n PermissionConfirmation,\n type PermissionLevel,\n} from \"../../ui/permission-confirmation\";\nimport { MCPUIFrameList } from \"../../ui/mcp-ui-frame\";\nimport type { MCPUIIntent } from \"../../../../mcp/ui/types\";\nimport type { ToolExecutionData } from \"../tools/tool-execution-list\";\n\ninterface ToolExecutionMessageProps {\n executions: ToolExecutionData[];\n assistantAvatar?: { src?: string; fallback?: string };\n /** Called when user approves with optional extraData from custom UI */\n onApprove?: (\n executionId: string,\n extraData?: Record<string, unknown>,\n permissionLevel?: PermissionLevel,\n ) => void;\n onReject?: (\n executionId: string,\n reason?: string,\n permissionLevel?: PermissionLevel,\n ) => void;\n /** Custom tool renderers that can handle approval UI */\n toolRenderers?: Record<\n string,\n React.ComponentType<{\n execution: ToolExecutionData;\n approval?: {\n onApprove: (extraData?: Record<string, unknown>) => void;\n onReject: (reason?: string) => void;\n message?: string;\n };\n }>\n >;\n /**\n * Callback when an MCP-UI intent is received from an interactive UI component.\n * Use this with useMCPUIIntents hook to handle tool calls, actions, etc.\n */\n onUIIntent?: (\n intent: MCPUIIntent,\n context: { toolName: string; toolCallId: string },\n ) => void;\n className?: string;\n}\n\n/**\n * Standalone tool execution message shown during agentic loop\n * Displays tool calls with status, progress, and approval UI\n */\nexport function ToolExecutionMessage({\n executions,\n assistantAvatar = { fallback: \"AI\" },\n onApprove,\n onReject,\n toolRenderers,\n onUIIntent,\n className,\n}: ToolExecutionMessageProps) {\n if (!executions || executions.length === 0) return null;\n\n // Separate pending approvals from other executions\n const pendingApprovals = executions.filter(\n (exec) => exec.approvalStatus === \"required\",\n );\n const otherExecutions = executions.filter(\n (exec) => exec.approvalStatus !== \"required\",\n );\n\n // Convert to ToolStepData format\n const toolSteps: ToolStepData[] = otherExecutions.map((exec) => ({\n id: exec.id,\n name: exec.name,\n args: exec.args,\n status: exec.status,\n result: exec.result,\n error: exec.error,\n }));\n\n // Check if any tool is currently executing\n const hasExecuting = executions.some((exec) => exec.status === \"executing\");\n const hasCompleted = executions.some((exec) => exec.status === \"completed\");\n const allCompleted = executions.every(\n (exec) => exec.status === \"completed\" || exec.status === \"error\",\n );\n\n return (\n <Message className={cn(\"flex gap-2\", className)}>\n <MessageAvatar\n src={assistantAvatar.src || \"\"}\n alt=\"Assistant\"\n fallback={assistantAvatar.fallback}\n className=\"bg-primary text-primary-foreground\"\n />\n <div className=\"flex-1 min-w-0 max-w-[85%]\">\n {/* Header with status */}\n <div className=\"flex items-center gap-2 mb-2\">\n <div className=\"flex items-center gap-1.5\">\n {hasExecuting && (\n <svg\n className=\"size-3.5 animate-spin text-primary\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n )}\n {!hasExecuting && allCompleted && (\n <svg\n className=\"size-3.5 text-green-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n )}\n <span className=\"text-xs font-medium text-muted-foreground\">\n {hasExecuting\n ? \"Running tools...\"\n : allCompleted\n ? `${executions.length} tool${executions.length > 1 ? \"s\" : \"\"} completed`\n : \"Tools\"}\n </span>\n </div>\n </div>\n\n {/* Tool Approval Confirmations */}\n {pendingApprovals.length > 0 && (\n <div className=\"mb-2 space-y-2\">\n {pendingApprovals.map((tool) => {\n // Check if there's a custom renderer for this tool\n const CustomRenderer = toolRenderers?.[tool.name];\n\n if (CustomRenderer) {\n // Use custom renderer with approval callbacks\n return (\n <CustomRenderer\n key={tool.id}\n execution={tool}\n approval={{\n onApprove: (extraData) => onApprove?.(tool.id, extraData),\n onReject: (reason) => onReject?.(tool.id, reason),\n message: tool.approvalMessage,\n }}\n />\n );\n }\n\n // Default: use PermissionConfirmation\n return (\n <PermissionConfirmation\n key={tool.id}\n state=\"pending\"\n toolName={tool.name}\n message={\n tool.approvalMessage ||\n `This tool wants to execute. Do you approve?`\n }\n onApprove={(permissionLevel) =>\n onApprove?.(tool.id, undefined, permissionLevel)\n }\n onReject={(permissionLevel) =>\n onReject?.(tool.id, undefined, permissionLevel)\n }\n />\n );\n })}\n </div>\n )}\n\n {/* Tool Steps */}\n {toolSteps.length > 0 && (\n <div className=\"rounded-lg border bg-card px-3 py-2.5 shadow-sm\">\n <ToolSteps steps={toolSteps} />\n </div>\n )}\n\n {/* MCP-UI Resources - render interactive UI components from tool results */}\n {otherExecutions.map((exec) => {\n const uiResources = exec.result?._uiResources;\n if (!uiResources || uiResources.length === 0) return null;\n\n return (\n <MCPUIFrameList\n key={`${exec.id}-ui`}\n resources={uiResources}\n onIntent={(intent) =>\n onUIIntent?.(intent, {\n toolName: exec.name,\n toolCallId: exec.id,\n })\n }\n className=\"mt-2\"\n />\n );\n })}\n </div>\n </Message>\n );\n}\n","\"use client\";\n\n/**\n * useInternalThreadManager - Internal hook for CopilotChat persistence\n *\n * Uses a reducer-based state machine with clear phases:\n * idle → awaiting_server_id → creating → active\n * active → switching → active\n * active → idle (new thread)\n *\n * Handles both server-managed sessions (threadId from response) and\n * local-only threads (no server storage) with the same flow.\n */\n\nimport { useCallback, useEffect, useReducer, useRef } from \"react\";\nimport { useCopilot, type UIMessage } from \"../../react\";\nimport {\n useThreadManager,\n type UseThreadManagerConfig,\n} from \"../../react/hooks/useThreadManager\";\nimport type {\n ThreadStorageAdapter,\n AsyncThreadStorageAdapter,\n} from \"../../thread/adapters\";\n\n// ── Config & Return types ────────────────────────────────────────────────────\n\nexport interface UseInternalThreadManagerConfig {\n adapter?: ThreadStorageAdapter | AsyncThreadStorageAdapter;\n saveDebounce?: number;\n autoRestoreLastThread?: boolean;\n onThreadChange?: (threadId: string | null) => void;\n enabled?: boolean;\n}\n\nexport interface UseInternalThreadManagerReturn {\n threadManager: ReturnType<typeof useThreadManager>;\n handleSwitchThread: (threadId: string) => Promise<void>;\n handleNewThread: () => Promise<void>;\n isBusy: boolean;\n}\n\n// ── State machine ────────────────────────────────────────────────────────────\n\ntype Phase =\n | \"idle\" // No thread, waiting for first message\n | \"awaiting_server_id\" // First response complete, waiting for sdkThreadId\n | \"creating\" // Creating local thread\n | \"active\" // Thread active, syncing messages\n | \"switching\" // Switching to a different thread\n | \"restoring\"; // Auto-restoring last thread on mount\n\ninterface ThreadSyncState {\n phase: Phase;\n threadId: string | null; // Active local thread ID\n lastSnapshot: string; // Last saved message snapshot\n initialized: boolean; // Whether initial restore has run\n}\n\ntype ThreadAction =\n | { type: \"FIRST_RESPONSE_COMPLETE\" }\n | { type: \"SERVER_ID_RECEIVED\"; threadId: string }\n | { type: \"CREATE_WITH_LOCAL_ID\" }\n | { type: \"THREAD_CREATED\"; threadId: string; snapshot: string }\n | { type: \"MESSAGES_SAVED\"; snapshot: string }\n | { type: \"START_SWITCH\" }\n | { type: \"SWITCH_COMPLETE\"; threadId: string; snapshot: string }\n | { type: \"NEW_THREAD\" }\n | { type: \"RESTORE_START\" }\n | { type: \"RESTORE_COMPLETE\"; threadId: string; snapshot: string }\n | { type: \"SKIP_RESTORE\" };\n\nconst INITIAL_STATE: ThreadSyncState = {\n phase: \"idle\",\n threadId: null,\n lastSnapshot: \"\",\n initialized: false,\n};\n\nfunction threadReducer(\n state: ThreadSyncState,\n action: ThreadAction,\n): ThreadSyncState {\n switch (action.type) {\n case \"FIRST_RESPONSE_COMPLETE\":\n if (state.phase !== \"idle\") return state;\n // Mark initialized so auto-restore doesn't interfere when\n // createThread() later updates currentThread in the manager.\n return { ...state, phase: \"awaiting_server_id\", initialized: true };\n\n case \"SERVER_ID_RECEIVED\":\n if (state.phase !== \"awaiting_server_id\") return state;\n return { ...state, phase: \"creating\" };\n\n case \"CREATE_WITH_LOCAL_ID\":\n if (state.phase !== \"awaiting_server_id\") return state;\n return { ...state, phase: \"creating\" };\n\n case \"THREAD_CREATED\":\n return {\n ...state,\n phase: \"active\",\n threadId: action.threadId,\n lastSnapshot: action.snapshot,\n initialized: true,\n };\n\n case \"MESSAGES_SAVED\":\n if (state.phase !== \"active\") return state;\n return { ...state, lastSnapshot: action.snapshot };\n\n case \"START_SWITCH\":\n if (state.phase !== \"active\" && state.phase !== \"idle\") return state;\n return { ...state, phase: \"switching\" };\n\n case \"SWITCH_COMPLETE\":\n return {\n ...state,\n phase: \"active\",\n threadId: action.threadId,\n lastSnapshot: action.snapshot,\n };\n\n case \"NEW_THREAD\":\n return {\n ...INITIAL_STATE,\n initialized: true,\n };\n\n case \"RESTORE_START\":\n if (state.initialized) return state;\n if (state.phase === \"creating\" || state.phase === \"awaiting_server_id\")\n return state;\n return { ...state, phase: \"restoring\" };\n\n case \"RESTORE_COMPLETE\":\n return {\n ...state,\n phase: \"active\",\n threadId: action.threadId,\n lastSnapshot: action.snapshot,\n initialized: true,\n };\n\n case \"SKIP_RESTORE\":\n return { ...state, initialized: true };\n\n default:\n return state;\n }\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction getMessageSnapshot(msgs: UIMessage[]): string {\n return msgs\n .map((m) => {\n const preview = (m.content ?? \"\").slice(0, 20);\n return `${m.id}:${preview}:${m.content?.length ?? 0}`;\n })\n .join(\"|\");\n}\n\nfunction convertToCore(msgs: UIMessage[]) {\n return msgs.map((m) => ({\n id: m.id,\n role: m.role,\n content: m.content,\n created_at: m.createdAt,\n tool_calls: m.toolCalls,\n tool_call_id: m.toolCallId,\n parent_id: m.parentId,\n children_ids: m.childrenIds,\n metadata: {\n ...m.metadata,\n attachments: m.attachments,\n thinking: m.thinking,\n },\n }));\n}\n\nfunction coreToUI(m: any): UIMessage {\n return {\n id: m.id,\n role: m.role,\n content: m.content ?? \"\",\n createdAt: m.created_at ?? new Date(),\n toolCalls: m.tool_calls,\n toolCallId: m.tool_call_id,\n parentId: m.parent_id,\n childrenIds: m.children_ids,\n attachments: m.metadata?.attachments,\n thinking: m.metadata?.thinking as string | undefined,\n metadata: m.metadata,\n };\n}\n\n// ── Hook ─────────────────────────────────────────────────────────────────────\n\nexport function useInternalThreadManager(\n config: UseInternalThreadManagerConfig = {},\n): UseInternalThreadManagerReturn {\n const {\n adapter,\n saveDebounce = 1000,\n autoRestoreLastThread = true,\n onThreadChange,\n enabled = true,\n } = config;\n\n const [state, dispatch] = useReducer(threadReducer, INITIAL_STATE);\n const isLoadingRef = useRef(false);\n\n // Thread manager (handles localStorage / server adapter)\n const threadManager = useThreadManager({\n adapter,\n saveDebounce,\n autoRestoreLastThread,\n });\n const {\n currentThread,\n currentThreadId,\n createThread,\n switchThread,\n updateCurrentThread,\n clearCurrentThread,\n } = threadManager;\n\n // Copilot context\n const {\n messages,\n setMessages,\n status,\n isLoading,\n getAllMessages,\n switchBranch,\n threadId: sdkThreadId,\n setActiveThread,\n } = useCopilot();\n\n // ── Auto-restore on mount ──────────────────────────────────────────────\n\n useEffect(() => {\n if (!enabled || state.initialized || !currentThread) return;\n\n dispatch({ type: \"RESTORE_START\" });\n isLoadingRef.current = true;\n\n if (currentThread.messages && currentThread.messages.length > 0) {\n const uiMessages = currentThread.messages.map(coreToUI);\n const snapshot = getMessageSnapshot(uiMessages);\n setMessages(uiMessages);\n if (currentThread.activeLeafId) switchBranch(currentThread.activeLeafId);\n onThreadChange?.(currentThread.id);\n dispatch({\n type: \"RESTORE_COMPLETE\",\n threadId: currentThread.id,\n snapshot,\n });\n } else {\n onThreadChange?.(currentThread.id);\n dispatch({\n type: \"RESTORE_COMPLETE\",\n threadId: currentThread.id,\n snapshot: \"\",\n });\n }\n\n requestAnimationFrame(() => {\n isLoadingRef.current = false;\n });\n }, [\n enabled,\n currentThread,\n state.initialized,\n setMessages,\n switchBranch,\n onThreadChange,\n ]);\n\n // Mark initialized if no thread to restore\n useEffect(() => {\n if (!enabled) {\n dispatch({ type: \"SKIP_RESTORE\" });\n return;\n }\n // If autoRestore is off or no thread loaded after mount, skip\n if (!autoRestoreLastThread && !state.initialized) {\n dispatch({ type: \"SKIP_RESTORE\" });\n }\n }, [enabled, autoRestoreLastThread, state.initialized]);\n\n // ── Phase: idle → awaiting_server_id ───────────────────────────────────\n\n useEffect(() => {\n if (!enabled) return;\n if (state.phase !== \"idle\") return;\n if (isLoadingRef.current) return;\n if (status === \"streaming\" || status === \"submitted\") return;\n if (messages.length === 0) return;\n if (currentThreadId) return; // Already have a thread\n\n // First message response just completed\n dispatch({ type: \"FIRST_RESPONSE_COMPLETE\" });\n }, [enabled, state.phase, status, messages.length, currentThreadId]);\n\n // ── Phase: awaiting_server_id → creating ───────────────────────────────\n\n useEffect(() => {\n if (state.phase !== \"awaiting_server_id\") return;\n\n if (sdkThreadId) {\n // Server provided a threadId — use it\n dispatch({ type: \"SERVER_ID_RECEIVED\", threadId: sdkThreadId });\n } else {\n // No server ID available — create thread with a local ID.\n dispatch({ type: \"CREATE_WITH_LOCAL_ID\" });\n }\n }, [state.phase, sdkThreadId]);\n\n // ── Phase: creating → active ───────────────────────────────────────────\n\n useEffect(() => {\n if (state.phase !== \"creating\") return;\n\n const allUIMessages = getAllMessages();\n const coreMessages = convertToCore(\n allUIMessages.length > 0 ? allUIMessages : messages,\n );\n const activeLeafId = messages[messages.length - 1]?.id;\n const snapshot = getMessageSnapshot(messages);\n\n createThread({\n id: sdkThreadId ?? undefined,\n messages: coreMessages,\n activeLeafId,\n }).then((thread) => {\n dispatch({ type: \"THREAD_CREATED\", threadId: thread.id, snapshot });\n onThreadChange?.(thread.id);\n });\n }, [state.phase]); // eslint-disable-line react-hooks/exhaustive-deps\n\n // ── Phase: active — sync messages on change ────────────────────────────\n\n useEffect(() => {\n if (!enabled) return;\n if (state.phase !== \"active\") return;\n if (isLoadingRef.current) return;\n if (status === \"streaming\" || status === \"submitted\") return;\n if (messages.length === 0) return;\n\n const snapshot = getMessageSnapshot(messages);\n if (snapshot === state.lastSnapshot) return;\n\n // Verify we're saving to the right thread\n if (state.threadId && state.threadId !== currentThreadId) return;\n\n const allUIMessages = getAllMessages();\n const coreMessages = convertToCore(\n allUIMessages.length > 0 ? allUIMessages : messages,\n );\n const activeLeafId = messages[messages.length - 1]?.id;\n\n updateCurrentThread({ messages: coreMessages, activeLeafId });\n dispatch({ type: \"MESSAGES_SAVED\", snapshot });\n }, [\n enabled,\n state.phase,\n state.lastSnapshot,\n state.threadId,\n messages,\n status,\n currentThreadId,\n updateCurrentThread,\n getAllMessages,\n ]);\n\n // ── Switch thread ──────────────────────────────────────────────────────\n\n const handleSwitchThread = useCallback(\n async (threadId: string) => {\n dispatch({ type: \"START_SWITCH\" });\n isLoadingRef.current = true;\n\n const thread = await switchThread(threadId);\n if (thread?.messages) {\n const uiMessages = thread.messages.map(coreToUI);\n const snapshot = getMessageSnapshot(uiMessages);\n setMessages(uiMessages);\n if (thread.activeLeafId) switchBranch(thread.activeLeafId);\n onThreadChange?.(threadId);\n dispatch({ type: \"SWITCH_COMPLETE\", threadId, snapshot });\n } else {\n setMessages([]);\n onThreadChange?.(threadId);\n dispatch({ type: \"SWITCH_COMPLETE\", threadId, snapshot: \"\" });\n }\n\n requestAnimationFrame(() => {\n isLoadingRef.current = false;\n });\n },\n [switchThread, setMessages, switchBranch, onThreadChange],\n );\n\n // ── New thread ─────────────────────────────────────────────────────────\n\n const handleNewThread = useCallback(async () => {\n isLoadingRef.current = true;\n\n clearCurrentThread();\n setMessages([]);\n setActiveThread(null); // Clear SDK session so next message creates a new one\n onThreadChange?.(null);\n dispatch({ type: \"NEW_THREAD\" });\n\n requestAnimationFrame(() => {\n isLoadingRef.current = false;\n });\n }, [clearCurrentThread, setMessages, setActiveThread, onThreadChange]);\n\n // ── Return ─────────────────────────────────────────────────────────────\n\n const isBusy = isLoading || status === \"streaming\" || status === \"submitted\";\n\n return {\n threadManager,\n handleSwitchThread,\n handleNewThread,\n isBusy,\n };\n}\n","\"use client\";\n\nimport React, { useMemo } from \"react\";\nimport {\n useCopilot,\n type UIMessage,\n type ChatToolExecution,\n} from \"../../../react\";\nimport { Chat, type ChatProps } from \"./chat\";\nimport type { ToolExecutionData } from \"./tools/tool-execution-list\";\nimport { ThreadPicker } from \"../ui/thread-picker\";\nimport {\n useInternalThreadManager,\n type UseInternalThreadManagerConfig,\n} from \"../../hooks/useInternalThreadManager\";\nimport type {\n ThreadStorageAdapter,\n AsyncThreadStorageAdapter,\n} from \"../../../thread/adapters\";\nimport {\n createServerAdapter,\n createLocalStorageAdapter,\n} from \"../../../thread/adapters\";\n\n// ============================================\n// Persistence Configuration Types\n// ============================================\n\n/**\n * localStorage persistence (zero config)\n */\nexport interface LocalPersistenceConfig {\n type: \"local\";\n /** Custom localStorage key to isolate thread storage between copilot instances.\n * Default: \"copilot-sdk-store\" */\n localStorageKey?: string;\n /** Debounce delay for auto-save (ms). Default: 1000 */\n saveDebounce?: number;\n /** Whether to auto-restore the last active thread. Default: true */\n autoRestoreLastThread?: boolean;\n}\n\n/**\n * Server persistence (point to your own API routes)\n */\nexport interface ServerPersistenceConfig {\n type: \"server\";\n /**\n * Endpoint URL for your thread CRUD API\n * @example \"/api/threads\"\n */\n endpoint: string;\n /** Additional headers for requests (e.g., auth tokens) */\n headers?: Record<string, string>;\n /** Debounce delay for auto-save (ms). Default: 1000 */\n saveDebounce?: number;\n /** Whether to auto-restore the last active thread. Default: true */\n autoRestoreLastThread?: boolean;\n}\n\n/**\n * Cloud persistence (future - managed service)\n */\nexport interface CloudPersistenceConfig {\n type: \"cloud\";\n /** Copilot Cloud API key */\n apiKey: string;\n /** Custom endpoint for enterprise (optional) */\n endpoint?: string;\n}\n\n/**\n * Legacy persistence config (backward compatibility)\n */\nexport interface LegacyPersistenceConfig {\n /** Storage adapter (defaults to localStorage) */\n adapter?: ThreadStorageAdapter | AsyncThreadStorageAdapter;\n /** Debounce delay for auto-save (ms). Default: 1000 */\n saveDebounce?: number;\n /** Whether to auto-restore the last active thread on mount. Default: true */\n autoRestoreLastThread?: boolean;\n}\n\n/**\n * Persistence configuration for CopilotChat\n *\n * @example localStorage (zero config)\n * ```tsx\n * <CopilotChat persistence={true} />\n * // or explicitly:\n * <CopilotChat persistence={{ type: \"local\" }} />\n * ```\n *\n * @example Server persistence\n * ```tsx\n * <CopilotChat\n * persistence={{\n * type: \"server\",\n * threadsUrl: \"/api/threads\",\n * headers: { Authorization: `Bearer ${token}` },\n * }}\n * />\n * ```\n */\nexport type CopilotChatPersistenceConfig =\n | LocalPersistenceConfig\n | ServerPersistenceConfig\n | CloudPersistenceConfig\n | LegacyPersistenceConfig;\n\n/**\n * Extended classNames for CopilotChat including thread picker\n */\nexport interface CopilotChatClassNames {\n // Existing Chat classNames\n root?: string;\n header?: string;\n container?: string;\n messageList?: string;\n userMessage?: string;\n assistantMessage?: string;\n input?: string;\n suggestions?: string;\n footer?: string;\n // Thread picker classNames\n threadPicker?: string;\n threadPickerButton?: string;\n threadPickerDropdown?: string;\n threadPickerItem?: string;\n threadPickerNewButton?: string;\n}\n\n/**\n * Header configuration for CopilotChat\n */\nexport interface CopilotChatHeaderConfig {\n /** Logo image URL (default: YourGPT logo) */\n logo?: string;\n /** Copilot name (default: \"AI Copilot\") */\n name?: string;\n /** Called when close button is clicked */\n onClose?: () => void;\n}\n\n/**\n * Props for CopilotChat - auto-connects to CopilotProvider context\n * No need to pass messages, sendMessage, etc. - handled internally\n */\nexport type CopilotChatProps = Omit<\n ChatProps,\n | \"messages\"\n | \"onSendMessage\"\n | \"onStop\"\n | \"isLoading\"\n | \"isProcessing\"\n | \"onApproveToolExecution\"\n | \"onRejectToolExecution\"\n | \"processAttachment\"\n | \"classNames\"\n | \"header\"\n | \"threadPicker\"\n | \"recentThreads\"\n | \"onSelectThread\"\n | \"onViewMoreThreads\"\n> & {\n /**\n * Header configuration.\n * Providing this prop will automatically show the header.\n */\n header?: CopilotChatHeaderConfig;\n /**\n * Enable built-in persistence.\n * - `true`: Use localStorage with default settings\n * - `object`: Custom persistence config\n * - `undefined`: No persistence (default)\n */\n persistence?: boolean | CopilotChatPersistenceConfig;\n\n /**\n * Show thread picker in the header for switching conversations.\n * Requires `persistence` to be enabled.\n * @default false\n */\n showThreadPicker?: boolean;\n\n /**\n * Callback when the current thread changes.\n * Useful for syncing thread ID with URL or external state.\n */\n onThreadChange?: (threadId: string | null) => void;\n\n /**\n * Granular class names for sub-components including thread picker\n */\n classNames?: CopilotChatClassNames;\n\n /**\n * Allow inline editing of user messages.\n * @default false\n */\n allowEdit?: boolean;\n};\n\n/**\n * CopilotChat - Auto-connected chat component\n *\n * Automatically connects to CopilotProvider context.\n * No need to use hooks or pass messages - everything is handled internally.\n *\n * @example\n * ```tsx\n * import { CopilotProvider } from '../../react';\n * import { CopilotChat } from '@yourgpt/copilot-sdk-ui';\n *\n * function App() {\n * return (\n * <CopilotProvider runtimeUrl=\"/api/chat\">\n * <CopilotChat\n * title=\"AI Assistant\"\n * placeholder=\"Ask anything...\"\n * />\n * </CopilotProvider>\n * );\n * }\n * ```\n *\n * @example Generative UI with custom tool renderers\n * ```tsx\n * import { CopilotChat, type ToolRendererProps } from '@yourgpt/copilot-sdk-ui';\n *\n * function WeatherCard({ execution }: ToolRendererProps) {\n * if (execution.status !== 'completed') return <div>Loading...</div>;\n * return <div>{execution.result.city}: {execution.result.temperature}°</div>;\n * }\n *\n * <CopilotChat\n * toolRenderers={{\n * get_weather: WeatherCard,\n * }}\n * />\n * ```\n */\n/**\n * Parse persistence config into internal thread manager config\n */\nfunction parsePersistenceConfig(\n persistence: boolean | CopilotChatPersistenceConfig | undefined,\n onThreadChange?: (threadId: string | null) => void,\n): UseInternalThreadManagerConfig | undefined {\n // Not enabled\n if (!persistence) {\n return undefined;\n }\n\n // Boolean true = localStorage with defaults\n if (persistence === true) {\n return {\n onThreadChange,\n autoRestoreLastThread: true,\n };\n }\n\n // Type-based config\n if (\"type\" in persistence) {\n switch (persistence.type) {\n case \"local\":\n return {\n saveDebounce: persistence.saveDebounce,\n autoRestoreLastThread: persistence.autoRestoreLastThread ?? true,\n onThreadChange,\n };\n\n case \"server\":\n return {\n adapter: createServerAdapter({\n endpoint: persistence.endpoint,\n headers: persistence.headers,\n }),\n saveDebounce: persistence.saveDebounce,\n autoRestoreLastThread: persistence.autoRestoreLastThread ?? true,\n onThreadChange,\n };\n\n case \"cloud\":\n // Future: Cloud persistence not yet implemented\n console.warn(\n \"[Copilot SDK] Cloud persistence is not yet implemented. Falling back to localStorage.\",\n );\n return {\n onThreadChange,\n autoRestoreLastThread: true,\n };\n }\n }\n\n // Legacy config (has adapter property or other legacy fields)\n const legacyConfig = persistence as LegacyPersistenceConfig;\n return {\n adapter: legacyConfig.adapter,\n saveDebounce: legacyConfig.saveDebounce,\n autoRestoreLastThread: legacyConfig.autoRestoreLastThread ?? true,\n onThreadChange,\n };\n}\n\nfunction CopilotChatBase(\n props: CopilotChatProps & { children?: React.ReactNode },\n) {\n const {\n persistence,\n showThreadPicker = false,\n onThreadChange,\n classNames,\n header,\n children,\n allowEdit = false,\n ...chatProps\n } = props;\n\n // Create custom adapter once for localStorageKey (stable reference to avoid render loops)\n const localStorageKey =\n typeof persistence === \"object\" &&\n \"type\" in persistence &&\n persistence.type === \"local\"\n ? persistence.localStorageKey\n : undefined;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const customAdapter = useMemo(\n () =>\n localStorageKey\n ? createLocalStorageAdapter({ storageKey: localStorageKey })\n : undefined,\n [localStorageKey],\n );\n\n // Parse persistence config\n const persistenceConfig = parsePersistenceConfig(persistence, onThreadChange);\n // Inject memoized adapter if localStorageKey was provided\n if (persistenceConfig && customAdapter) {\n persistenceConfig.adapter = customAdapter;\n }\n\n // Use internal thread manager when persistence is enabled.\n // When persistence is disabled, pass enabled:false so no sync/restore effects\n // fire — prevents the shared singleton from being touched by a no-persistence instance\n // and avoids stale async createThread calls overwriting messages on navigation.\n const threadManagerResult = useInternalThreadManager(\n persistenceConfig ?? { autoRestoreLastThread: false, enabled: false },\n );\n\n const isPersistenceEnabled = !!persistence;\n\n // Auto-connect to context internally\n const {\n messages,\n isLoading,\n sendMessage,\n stop,\n toolExecutions: rawToolExecutions,\n approveToolExecution,\n rejectToolExecution,\n registeredTools,\n switchBranch,\n getBranchInfo,\n editMessage,\n error: chatError,\n } = useCopilot();\n\n // Convert tool executions to the expected format\n const toolExecutions: ToolExecutionData[] = rawToolExecutions.map(\n (exec: ChatToolExecution) => ({\n id: exec.id,\n name: exec.name,\n args: exec.args,\n status: exec.status,\n result: exec.result as ToolExecutionData[\"result\"],\n error: exec.error,\n timestamp: exec.startedAt ? exec.startedAt.getTime() : Date.now(),\n approvalStatus: exec.approvalStatus,\n approvalTitle: exec.approvalTitle,\n approvalMessage: exec.approvalMessage,\n hidden: exec.hidden,\n }),\n );\n\n // Build map of tool results from tool messages (for merging)\n const toolResultsMap = new Map<string, string>();\n messages\n .filter((m: UIMessage) => m.role === \"tool\" && m.toolCallId)\n .forEach((m: UIMessage) => {\n toolResultsMap.set(m.toolCallId!, m.content ?? \"\");\n });\n\n // Filter out tool messages and merge results into parent assistant messages\n // Keep compaction-markers (system messages with type='compaction-marker') visible\n const visibleMessages = messages\n .filter(\n (m: UIMessage) =>\n m.role !== \"tool\" &&\n (m.role !== \"system\" ||\n (m.metadata as Record<string, unknown>)?.type ===\n \"compaction-marker\"),\n ) // Hide tool/system messages except compaction markers\n .map((m: UIMessage) => {\n // For assistant messages with tool_calls, merge results\n let messageToolExecutions: ToolExecutionData[] | undefined;\n\n if (m.role === \"assistant\" && m.toolCalls && m.toolCalls.length > 0) {\n const toolCallIds = new Set(\n m.toolCalls.map((tc: { id: string }) => tc.id),\n );\n\n // Try live executions first (from agentLoop)\n const liveExecutions = toolExecutions.filter(\n (exec: ToolExecutionData) => toolCallIds.has(exec.id),\n );\n\n if (liveExecutions.length > 0) {\n // Enrich live executions with results from tool messages if not already present\n messageToolExecutions = liveExecutions.map(\n (exec: ToolExecutionData) => {\n if (!exec.result && toolResultsMap.has(exec.id)) {\n const resultContent = toolResultsMap.get(exec.id)!;\n try {\n return { ...exec, result: JSON.parse(resultContent) };\n } catch {\n return {\n ...exec,\n result: { success: false, message: resultContent },\n };\n }\n }\n return exec;\n },\n );\n } else {\n // Build from stored tool_calls + tool messages (historical)\n // Get hidden info from message metadata (set by handleJsonResponse)\n const toolCallsHidden = (\n m.metadata as { toolCallsHidden?: Record<string, boolean> }\n )?.toolCallsHidden;\n\n messageToolExecutions = m.toolCalls.map(\n (tc: {\n id: string;\n function: { name: string; arguments: string };\n }) => {\n const resultContent = toolResultsMap.get(tc.id);\n let result: ToolExecutionData[\"result\"] = undefined;\n if (resultContent) {\n try {\n result = JSON.parse(resultContent);\n } catch {\n result = { success: false, message: resultContent };\n }\n }\n let args: Record<string, unknown> = {};\n try {\n args = JSON.parse(tc.function.arguments || \"{}\");\n } catch {\n // Keep empty args\n }\n // Check hidden from metadata first (from server response),\n // then fall back to registeredTools\n let hidden = toolCallsHidden?.[tc.id];\n if (hidden === undefined) {\n const toolDef = registeredTools?.find(\n (t) => t.name === tc.function.name,\n );\n hidden = toolDef?.hidden;\n }\n return {\n id: tc.id,\n name: tc.function.name,\n args,\n status: (result\n ? \"completed\"\n : \"pending\") as ToolExecutionData[\"status\"],\n result,\n timestamp:\n m.createdAt instanceof Date\n ? m.createdAt.getTime()\n : Date.now(),\n hidden,\n };\n },\n );\n }\n }\n\n // Check for saved executions in metadata (for historical messages without tool_calls)\n const savedExecutions = (\n m.metadata as { toolExecutions?: ToolExecutionData[] }\n )?.toolExecutions;\n if (\n savedExecutions &&\n savedExecutions.length > 0 &&\n !messageToolExecutions\n ) {\n messageToolExecutions = savedExecutions;\n }\n\n // Filter out hidden tool executions for the message\n const visibleToolExecutions = messageToolExecutions?.filter(\n (exec) => !exec.hidden,\n );\n\n return {\n id: m.id,\n role: m.role as \"user\" | \"assistant\" | \"system\",\n content: m.content ?? \"\",\n thinking: m.thinking,\n // Include attachments (images, files)\n attachments: m.attachments,\n // Include tool_calls for assistant messages\n tool_calls: m.toolCalls,\n // Attach matched tool executions to assistant messages (only visible ones)\n toolExecutions: visibleToolExecutions,\n // Include metadata (citations from native web search, etc.)\n metadata: m.metadata,\n // Mark if this message had only hidden tools (for filtering empty bubbles)\n _hasOnlyHiddenTools:\n messageToolExecutions &&\n messageToolExecutions.length > 0 &&\n (!visibleToolExecutions || visibleToolExecutions.length === 0),\n };\n })\n // Filter out empty assistant messages that only had hidden tools\n .filter((m) => {\n if (\n m.role === \"assistant\" &&\n !m.content &&\n (m as { _hasOnlyHiddenTools?: boolean })._hasOnlyHiddenTools\n ) {\n return false;\n }\n return true;\n });\n\n // Show suggestions only when no messages\n const suggestions =\n visibleMessages.length === 0 && chatProps.suggestions?.length\n ? chatProps.suggestions\n : [];\n\n // isProcessing: Show \"Continuing...\" loader when tools finished and AI is about to respond\n const lastMessage = messages[messages.length - 1];\n\n // Find the last assistant message with tool calls (may not be the very last message\n // since tool result messages follow it)\n const lastAssistantWithTools = [...messages]\n .reverse()\n .find(\n (m) => m.role === \"assistant\" && (m as UIMessage).toolCalls?.length,\n ) as UIMessage | undefined;\n\n // In tool flow when: last msg is a tool result (tools ran, waiting for AI),\n // OR last msg is assistant with tool calls (tools still executing)\n const isInToolFlow =\n lastMessage?.role === \"tool\" ||\n (lastMessage?.role === \"assistant\" &&\n (lastMessage as UIMessage).toolCalls?.length);\n\n let isProcessingToolResults = false;\n\n if (isLoading && isInToolFlow) {\n // Last message is a tool result → all tools for this turn are done, AI is continuing\n if (lastMessage?.role === \"tool\") {\n isProcessingToolResults = true;\n } else if (lastAssistantWithTools) {\n const currentToolCallIds = new Set(\n lastAssistantWithTools.toolCalls?.map((tc: { id: string }) => tc.id) ||\n [],\n );\n const currentExecutions = toolExecutions.filter((exec) =>\n currentToolCallIds.has(exec.id),\n );\n const hasCompletedTools = currentExecutions.some(\n (exec) =>\n exec.status === \"completed\" ||\n exec.status === \"error\" ||\n exec.status === \"failed\",\n );\n const hasExecutingTools = currentExecutions.some(\n (exec) => exec.status === \"executing\" || exec.status === \"pending\",\n );\n isProcessingToolResults = hasCompletedTools && !hasExecutingTools;\n }\n }\n\n // Extract chat classNames (without thread picker classes)\n const chatClassNames = classNames\n ? {\n root: classNames.root,\n header: classNames.header,\n container: classNames.container,\n messageList: classNames.messageList,\n userMessage: classNames.userMessage,\n assistantMessage: classNames.assistantMessage,\n input: classNames.input,\n suggestions: classNames.suggestions,\n footer: classNames.footer,\n }\n : undefined;\n\n // Build thread picker element (if enabled)\n const { threadManager, handleSwitchThread, handleNewThread, isBusy } =\n threadManagerResult;\n\n // Handle delete thread\n const handleDeleteThread = React.useCallback(\n (threadId: string) => {\n const isCurrentThread = threadManager.currentThreadId === threadId;\n threadManager.deleteThread(threadId);\n\n // If deleting the current thread, clear messages and show welcome screen\n if (isCurrentThread) {\n handleNewThread();\n }\n },\n [threadManager, handleNewThread],\n );\n\n const threadPickerElement =\n isPersistenceEnabled && showThreadPicker ? (\n <ThreadPicker\n value={threadManager.currentThreadId}\n threads={threadManager.threads}\n onSelect={handleSwitchThread}\n onDeleteThread={handleDeleteThread}\n onNewThread={handleNewThread}\n loading={threadManager.isLoading}\n disabled={isBusy}\n size=\"sm\"\n className={classNames?.threadPicker}\n buttonClassName={classNames?.threadPickerButton}\n dropdownClassName={classNames?.threadPickerDropdown}\n itemClassName={classNames?.threadPickerItem}\n newButtonClassName={classNames?.threadPickerNewButton}\n />\n ) : undefined;\n\n // Auto-show header when any header element is configured\n const shouldShowHeader = !!header || showThreadPicker || chatProps.showHeader;\n\n // Only use custom renderHeader if user provided it AND we're not using built-in header features\n const useCustomHeader =\n chatProps.renderHeader && !header && !showThreadPicker;\n\n return (\n <Chat\n {...chatProps}\n messages={visibleMessages}\n onSendMessage={sendMessage}\n onStop={stop}\n isLoading={isLoading}\n error={chatError}\n showPoweredBy={chatProps.showPoweredBy ?? true}\n suggestions={suggestions}\n isProcessing={isProcessingToolResults}\n onApproveToolExecution={approveToolExecution}\n onRejectToolExecution={rejectToolExecution}\n registeredTools={registeredTools}\n classNames={chatClassNames}\n header={header}\n threadPicker={threadPickerElement}\n showHeader={shouldShowHeader}\n renderHeader={useCustomHeader ? chatProps.renderHeader : undefined}\n // Welcome screen props\n recentThreads={isPersistenceEnabled ? threadManager.threads : undefined}\n onSelectThread={isPersistenceEnabled ? handleSwitchThread : undefined}\n onDeleteThread={isPersistenceEnabled ? handleDeleteThread : undefined}\n // Thread management for compound components\n onNewChat={handleNewThread}\n threads={isPersistenceEnabled ? threadManager.threads : undefined}\n currentThreadId={threadManager.currentThreadId}\n onSwitchThread={isPersistenceEnabled ? handleSwitchThread : undefined}\n isThreadBusy={isBusy}\n // Branching (auto-wired from context)\n getBranchInfo={getBranchInfo}\n onSwitchBranch={switchBranch}\n onEditMessage={allowEdit ? editMessage : undefined}\n >\n {children}\n </Chat>\n );\n}\n\n// Attach compound components from Chat to CopilotChat\n// This allows: <CopilotChat.Root>, <CopilotChat.HomeView>, <CopilotChat.ChatView>, etc.\nexport const CopilotChat = Object.assign(CopilotChatBase, {\n Root: CopilotChatBase, // Alias for layout composition pattern\n Home: Chat.Home, // Backward compat alias\n HomeView: Chat.HomeView, // New name\n ChatView: Chat.ChatView,\n Header: Chat.Header,\n Footer: Chat.Footer,\n Input: Chat.Input,\n Suggestions: Chat.Suggestions,\n BackButton: Chat.BackButton, // Navigation: start new chat\n ThreadPicker: Chat.ThreadPicker, // Thread switching\n // Message actions compound components (alpha)\n MessageActions: Chat.MessageActions,\n CopyAction: Chat.CopyAction,\n EditAction: Chat.EditAction,\n FeedbackAction: Chat.FeedbackAction,\n Action: Chat.Action,\n});\n\n// Alias for backwards compatibility\nexport const ConnectedChat = CopilotChat;\nexport type ConnectedChatProps = CopilotChatProps;\n","\"use client\";\n\nimport { cn } from \"../../lib/utils\";\n\nexport type PoweredByProps = {\n className?: string;\n showLogo?: boolean;\n};\n\nfunction YourGPTLogo({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M12 2L2 7l10 5 10-5-10-5z\" />\n <path d=\"M2 17l10 5 10-5\" />\n <path d=\"M2 12l10 5 10-5\" />\n </svg>\n );\n}\n\nexport function PoweredBy({ className, showLogo = true }: PoweredByProps) {\n return (\n <div\n className={cn(\n \"flex items-center justify-center gap-1.5 py-2 text-xs text-muted-foreground\",\n className,\n )}\n >\n <span>Powered by</span>\n {showLogo && <YourGPTLogo className=\"h-3 w-3\" />}\n <a\n href=\"https://yourgpt.ai\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"font-medium text-foreground hover:underline\"\n >\n YourGPT\n </a>\n </div>\n );\n}\n","\"use client\";\n\n/**\n * useAttachments — Core hook for file upload management in chat inputs.\n *\n * Works with both the SDK's default input and custom user inputs.\n * Handles file validation, upload progress, cancellation, and drag-drop.\n *\n * @example\n * ```tsx\n * const { attachments, addFiles, removeAttachment, getReadyAttachments, dragHandlers } =\n * useAttachments({ upload: \"/api/copilot/upload\", maxFiles: 5 });\n * ```\n */\n\nimport { useState, useCallback, useRef, useMemo } from \"react\";\nimport type { MessageAttachment } from \"../../core/types/message\";\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport type AttachmentStatus = \"uploading\" | \"ready\" | \"error\";\n\nexport interface PendingAttachment {\n id: string;\n file: File;\n /** Object URL for image preview */\n preview?: string;\n status: AttachmentStatus;\n /** Upload progress 0-100 */\n progress: number;\n error?: string;\n /** Final attachment data when ready */\n attachment?: MessageAttachment;\n}\n\nexport type UploadConfig =\n | string\n | {\n url: string;\n headers?: Record<string, string> | (() => Record<string, string>);\n body?: Record<string, unknown> | (() => Record<string, unknown>);\n }\n | ((file: File) => Promise<MessageAttachment>);\n\nexport interface UseAttachmentsConfig {\n /** Upload handler — string (URL), object (URL+options), or function (custom) */\n upload?: UploadConfig;\n /** Maximum number of files (default: 5) */\n maxFiles?: number;\n /** Maximum file size in bytes (default: 10MB) */\n maxFileSize?: number;\n /** Allowed MIME types (default: images + PDF) */\n allowedFileTypes?: string[];\n}\n\nexport interface UseAttachmentsReturn {\n /** Current pending attachments */\n attachments: PendingAttachment[];\n /** Whether files are being dragged over the drop zone */\n isDragging: boolean;\n /** Add files (from file picker or drop) */\n addFiles: (files: FileList | File[]) => void;\n /** Remove a pending attachment */\n removeAttachment: (id: string) => void;\n /** Cancel an in-progress upload */\n cancelUpload: (id: string) => void;\n /** Retry a failed upload */\n retryUpload: (id: string) => void;\n /** Clear all attachments */\n clearAll: () => void;\n /** Get ready attachments as MessageAttachment[] for sending */\n getReadyAttachments: () => MessageAttachment[];\n /** Whether any attachments exist */\n hasAttachments: boolean;\n /** Whether any upload is in progress */\n isUploading: boolean;\n /** Whether message can be sent (has ready attachments, none still uploading) */\n canSend: boolean;\n /** Drag-drop event handlers — spread on the container element */\n dragHandlers: {\n onDragEnter: (e: React.DragEvent) => void;\n onDragOver: (e: React.DragEvent) => void;\n onDragLeave: (e: React.DragEvent) => void;\n onDrop: (e: React.DragEvent) => void;\n };\n /** Open native file picker */\n openFilePicker: () => void;\n /** Ref for hidden file input */\n fileInputRef: React.RefObject<HTMLInputElement | null>;\n /** Handler for file input change */\n onFileInputChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\n// ── Constants ──────────────────────────────────────────────────────────────\n\nconst DEFAULT_MAX_FILES = 5;\nconst DEFAULT_MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB\nconst DEFAULT_ALLOWED_TYPES = [\n \"image/*\",\n \"application/pdf\",\n \"text/csv\",\n \"text/plain\",\n \"text/markdown\",\n \"application/json\",\n \".csv\",\n \".txt\",\n \".md\",\n \".json\",\n];\n\n/** MIME types that are text-based — read as text, no upload needed */\nconst TEXT_MIME_TYPES = new Set([\n \"text/csv\",\n \"text/plain\",\n \"text/markdown\",\n \"text/x-markdown\",\n \"application/json\",\n \"application/csv\",\n]);\n\nfunction isTextFile(file: File): boolean {\n if (TEXT_MIME_TYPES.has(file.type)) return true;\n const ext = file.name.toLowerCase().split(\".\").pop();\n return ext === \"csv\" || ext === \"txt\" || ext === \"md\" || ext === \"json\";\n}\n\nfunction readFileAsText(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = () => reject(new Error(\"Failed to read file\"));\n reader.readAsText(file);\n });\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────\n\nfunction generateId(): string {\n return `att_${Date.now()}_${Math.random().toString(36).slice(2, 7)}`;\n}\n\nfunction getAttachmentType(mimeType: string): MessageAttachment[\"type\"] {\n if (mimeType.startsWith(\"image/\")) return \"image\";\n if (mimeType.startsWith(\"audio/\")) return \"audio\";\n if (mimeType.startsWith(\"video/\")) return \"video\";\n return \"file\";\n}\n\nfunction isTypeAllowed(file: File, allowedTypes: string[]): boolean {\n for (const type of allowedTypes) {\n if (type === file.type) return true;\n if (type.endsWith(\"/*\") && file.type.startsWith(type.slice(0, -1)))\n return true;\n if (type.startsWith(\".\") && file.name.toLowerCase().endsWith(type))\n return true;\n }\n return false;\n}\n\nfunction fileToBase64(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = () => reject(new Error(\"Failed to read file\"));\n reader.readAsDataURL(file);\n });\n}\n\nfunction createPreview(file: File): string | undefined {\n if (file.type.startsWith(\"image/\")) {\n return URL.createObjectURL(file);\n }\n return undefined;\n}\n\n// ── Hook ───────────────────────────────────────────────────────────────────\n\nexport function useAttachments(\n config: UseAttachmentsConfig = {},\n): UseAttachmentsReturn {\n const {\n upload,\n maxFiles = DEFAULT_MAX_FILES,\n maxFileSize = DEFAULT_MAX_FILE_SIZE,\n allowedFileTypes = DEFAULT_ALLOWED_TYPES,\n } = config;\n\n const [attachments, setAttachments] = useState<PendingAttachment[]>([]);\n const [isDragging, setIsDragging] = useState(false);\n const abortControllers = useRef(new Map<string, AbortController>());\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n const dragCounter = useRef(0);\n\n // ── Upload a single file ─────────────────────────────────────────────\n\n const uploadFile = useCallback(\n async (id: string, file: File) => {\n const updateProgress = (progress: number) => {\n setAttachments((prev) =>\n prev.map((a) => (a.id === id ? { ...a, progress } : a)),\n );\n };\n\n const markReady = (attachment: MessageAttachment) => {\n setAttachments((prev) =>\n prev.map((a) =>\n a.id === id\n ? { ...a, status: \"ready\" as const, progress: 100, attachment }\n : a,\n ),\n );\n };\n\n const markError = (error: string) => {\n setAttachments((prev) =>\n prev.map((a) =>\n a.id === id ? { ...a, status: \"error\" as const, error } : a,\n ),\n );\n };\n\n try {\n const controller = new AbortController();\n abortControllers.current.set(id, controller);\n\n let result: MessageAttachment;\n\n // Text files: read content locally, no upload needed\n if (isTextFile(file)) {\n updateProgress(50);\n const textContent = await readFileAsText(file);\n result = {\n type: \"file\",\n data: textContent,\n mimeType: file.type || \"text/plain\",\n filename: file.name,\n };\n markReady(result);\n return;\n }\n\n if (typeof upload === \"function\") {\n // Custom function — no progress tracking (user handles it)\n updateProgress(50);\n result = await upload(file);\n } else if (upload) {\n // URL string or object — upload to server with progress\n const uploadConfig =\n typeof upload === \"string\" ? { url: upload } : upload;\n const extraHeaders =\n typeof uploadConfig.headers === \"function\"\n ? uploadConfig.headers()\n : uploadConfig.headers;\n const extraBody =\n typeof uploadConfig.body === \"function\"\n ? uploadConfig.body()\n : uploadConfig.body;\n\n const base64 = await fileToBase64(file);\n updateProgress(30);\n\n const body = JSON.stringify({\n data: base64,\n mimeType: file.type,\n filename: file.name,\n ...extraBody,\n });\n\n const res = await fetch(uploadConfig.url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", ...extraHeaders },\n body,\n signal: controller.signal,\n });\n\n updateProgress(90);\n\n if (!res.ok) throw new Error(`Upload failed: ${res.status}`);\n const json = await res.json();\n const url = json.url ?? json.data?.url;\n if (!url) throw new Error(\"Upload returned no URL\");\n\n result = {\n type: getAttachmentType(file.type),\n url,\n mimeType: file.type,\n filename: file.name,\n };\n } else {\n // No upload config — fallback to base64\n updateProgress(50);\n const data = await fileToBase64(file);\n result = {\n type: getAttachmentType(file.type),\n data,\n mimeType: file.type,\n filename: file.name,\n };\n }\n\n markReady(result);\n } catch (err) {\n if ((err as Error)?.name === \"AbortError\") return; // cancelled\n markError((err as Error)?.message ?? \"Upload failed\");\n } finally {\n abortControllers.current.delete(id);\n }\n },\n [upload],\n );\n\n // ── Add files ────────────────────────────────────────────────────────\n\n const addFiles = useCallback(\n (files: FileList | File[]) => {\n const fileArray = Array.from(files);\n const remaining = maxFiles - attachments.length;\n if (remaining <= 0) return;\n\n const toAdd = fileArray.slice(0, remaining);\n\n const newAttachments: PendingAttachment[] = [];\n\n for (const file of toAdd) {\n // Validate type\n if (!isTypeAllowed(file, allowedFileTypes)) continue;\n // Validate size\n if (file.size > maxFileSize) continue;\n\n const id = generateId();\n const preview = createPreview(file);\n\n newAttachments.push({\n id,\n file,\n preview,\n status: \"uploading\",\n progress: 0,\n });\n }\n\n if (newAttachments.length === 0) return;\n\n setAttachments((prev) => [...prev, ...newAttachments]);\n\n // Start uploads\n for (const att of newAttachments) {\n uploadFile(att.id, att.file);\n }\n },\n [attachments.length, maxFiles, maxFileSize, allowedFileTypes, uploadFile],\n );\n\n // ── Remove ───────────────────────────────────────────────────────────\n\n const removeAttachment = useCallback((id: string) => {\n setAttachments((prev) => {\n const att = prev.find((a) => a.id === id);\n if (att?.preview) URL.revokeObjectURL(att.preview);\n return prev.filter((a) => a.id !== id);\n });\n // Cancel if still uploading\n const controller = abortControllers.current.get(id);\n if (controller) {\n controller.abort();\n abortControllers.current.delete(id);\n }\n }, []);\n\n // ── Cancel upload ────────────────────────────────────────────────────\n\n const cancelUpload = useCallback(\n (id: string) => {\n removeAttachment(id);\n },\n [removeAttachment],\n );\n\n // ── Retry ────────────────────────────────────────────────────────────\n\n const retryUpload = useCallback(\n (id: string) => {\n setAttachments((prev) =>\n prev.map((a) =>\n a.id === id\n ? {\n ...a,\n status: \"uploading\" as const,\n progress: 0,\n error: undefined,\n }\n : a,\n ),\n );\n const att = attachments.find((a) => a.id === id);\n if (att) uploadFile(id, att.file);\n },\n [attachments, uploadFile],\n );\n\n // ── Clear all ────────────────────────────────────────────────────────\n\n const clearAll = useCallback(() => {\n for (const att of attachments) {\n if (att.preview) URL.revokeObjectURL(att.preview);\n }\n for (const controller of abortControllers.current.values()) {\n controller.abort();\n }\n abortControllers.current.clear();\n setAttachments([]);\n }, [attachments]);\n\n // ── Get ready attachments ────────────────────────────────────────────\n\n const getReadyAttachments = useCallback((): MessageAttachment[] => {\n return attachments\n .filter((a) => a.status === \"ready\" && a.attachment)\n .map((a) => a.attachment!);\n }, [attachments]);\n\n // ── Derived state ────────────────────────────────────────────────────\n\n const hasAttachments = attachments.length > 0;\n const isUploading = attachments.some((a) => a.status === \"uploading\");\n const canSend =\n hasAttachments &&\n attachments.some((a) => a.status === \"ready\") &&\n !isUploading;\n\n // ── Drag-drop handlers ───────────────────────────────────────────────\n\n const dragHandlers = useMemo(\n () => ({\n onDragEnter: (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragCounter.current++;\n if (e.dataTransfer.types.includes(\"Files\")) {\n setIsDragging(true);\n }\n },\n onDragOver: (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n },\n onDragLeave: (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragCounter.current--;\n if (dragCounter.current === 0) {\n setIsDragging(false);\n }\n },\n onDrop: (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragCounter.current = 0;\n setIsDragging(false);\n if (e.dataTransfer.files?.length) {\n addFiles(e.dataTransfer.files);\n }\n },\n }),\n [addFiles],\n );\n\n // ── File input helpers ───────────────────────────────────────────────\n\n const openFilePicker = useCallback(() => {\n fileInputRef.current?.click();\n }, []);\n\n const onFileInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files?.length) {\n addFiles(e.target.files);\n }\n // Reset so same file can be selected again\n if (fileInputRef.current) fileInputRef.current.value = \"\";\n },\n [addFiles],\n );\n\n return {\n attachments,\n isDragging,\n addFiles,\n removeAttachment,\n cancelUpload,\n retryUpload,\n clearAll,\n getReadyAttachments,\n hasAttachments,\n isUploading,\n canSend,\n dragHandlers,\n openFilePicker,\n fileInputRef,\n onFileInputChange,\n };\n}\n","\"use client\";\n\n/**\n * AttachmentStrip — Displays pending attachments above the chat input.\n *\n * Minimal, Linear/Notion-inspired design.\n * Shows thumbnail, filename, progress, and remove/retry actions.\n */\n\nimport type { PendingAttachment } from \"../hooks/useAttachments\";\n\n// ── Inline SVG icons (Lucide) ──────────────────────────────────────────────\n\nconst svgProps = {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\" as const,\n strokeLinejoin: \"round\" as const,\n};\n\nfunction ImageIcon({ className }: { className?: string }) {\n return (\n <svg {...svgProps} className={className}>\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\" />\n <circle cx=\"9\" cy=\"9\" r=\"2\" />\n <path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\" />\n </svg>\n );\n}\nfunction FileTextIcon({ className }: { className?: string }) {\n return (\n <svg {...svgProps} className={className}>\n <path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\" />\n <path d=\"M14 2v4a2 2 0 0 0 2 2h4\" />\n <path d=\"M10 9H8\" />\n <path d=\"M16 13H8\" />\n <path d=\"M16 17H8\" />\n </svg>\n );\n}\nfunction MusicIcon({ className }: { className?: string }) {\n return (\n <svg {...svgProps} className={className}>\n <path d=\"M9 18V5l12-2v13\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <circle cx=\"18\" cy=\"16\" r=\"3\" />\n </svg>\n );\n}\nfunction VideoIcon({ className }: { className?: string }) {\n return (\n <svg {...svgProps} className={className}>\n <path d=\"m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.934a.5.5 0 0 0-.777-.416L16 11\" />\n <rect width=\"14\" height=\"12\" x=\"2\" y=\"6\" rx=\"2\" />\n </svg>\n );\n}\nfunction XIcon({ className }: { className?: string }) {\n return (\n <svg {...svgProps} className={className}>\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n );\n}\nfunction RefreshCwIcon({ className }: { className?: string }) {\n return (\n <svg {...svgProps} className={className}>\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" />\n <path d=\"M8 16H3v5\" />\n </svg>\n );\n}\nfunction Loader2Icon({ className }: { className?: string }) {\n return (\n <svg {...svgProps} className={className}>\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n );\n}\nfunction CheckIcon({ className }: { className?: string }) {\n return (\n <svg {...svgProps} className={className}>\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n );\n}\n\n// ── File type icon ─────────────────────────────────────────────────────────\n\nfunction FileTypeIcon({ mimeType }: { mimeType: string }) {\n const cls = \"size-3.5\";\n if (mimeType.startsWith(\"image/\")) return <ImageIcon className={cls} />;\n if (mimeType.startsWith(\"audio/\")) return <MusicIcon className={cls} />;\n if (mimeType.startsWith(\"video/\")) return <VideoIcon className={cls} />;\n return <FileTextIcon className={cls} />;\n}\n\n// ── Status indicator ───────────────────────────────────────────────────────\n\nfunction StatusBadge({ status }: { status: PendingAttachment[\"status\"] }) {\n if (status === \"uploading\") {\n return <Loader2Icon className=\"size-3 animate-spin text-blue-400\" />;\n }\n if (status === \"ready\") {\n return <CheckIcon className=\"size-3 text-emerald-400\" />;\n }\n return null; // error shows retry button instead\n}\n\n// ── Single attachment card ─────────────────────────────────────────────────\n\nfunction AttachmentCard({\n attachment,\n onRemove,\n onRetry,\n}: {\n attachment: PendingAttachment;\n onRemove: (id: string) => void;\n onRetry: (id: string) => void;\n}) {\n const { id, file, preview, status, progress, error } = attachment;\n const isError = status === \"error\";\n\n return (\n <div\n className={`\n csdk-attachment-card group relative flex items-center gap-1.5\n rounded-lg border px-2 py-1.5 min-w-0 max-w-[160px]\n transition-colors duration-150\n ${\n isError\n ? \"border-red-500/30 bg-red-500/5\"\n : \"border-border/60 bg-muted/40 hover:bg-muted/60\"\n }\n `}\n >\n {/* Thumbnail or icon */}\n <div className=\"size-7 rounded shrink-0 overflow-hidden bg-muted/60 flex items-center justify-center\">\n {preview ? (\n <img\n src={preview}\n alt={file.name}\n className=\"size-full object-cover\"\n />\n ) : (\n <FileTypeIcon mimeType={file.type} />\n )}\n </div>\n\n {/* Name + status */}\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-[10px] font-medium truncate leading-tight text-foreground/80\">\n {file.name}\n </p>\n <div className=\"flex items-center gap-1 mt-0.5\">\n {isError ? (\n <button\n onClick={() => onRetry(id)}\n className=\"flex items-center gap-0.5 text-[9px] text-red-400 hover:text-red-300 cursor-pointer\"\n >\n <RefreshCwIcon className=\"size-2.5\" />\n Retry\n </button>\n ) : (\n <>\n <StatusBadge status={status} />\n <span className=\"text-[9px] text-muted-foreground\">\n {status === \"uploading\"\n ? `${progress}%`\n : formatBytes(file.size)}\n </span>\n </>\n )}\n </div>\n </div>\n\n {/* Progress bar (uploading only) */}\n {status === \"uploading\" && (\n <div className=\"absolute bottom-0 left-0 right-0 h-[2px] rounded-b-lg overflow-hidden bg-muted/40\">\n <div\n className=\"h-full bg-blue-500 transition-[width] duration-300 ease-out\"\n style={{ width: `${progress}%` }}\n />\n </div>\n )}\n\n {/* Remove button */}\n <button\n onClick={() => onRemove(id)}\n className=\"\n size-4 rounded-full shrink-0 flex items-center justify-center\n text-muted-foreground/50 hover:text-foreground hover:bg-muted\n transition-colors cursor-pointer\n \"\n aria-label=\"Remove attachment\"\n >\n <XIcon className=\"size-2.5\" />\n </button>\n </div>\n );\n}\n\n// ── Bytes formatter ────────────────────────────────────────────────────────\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes}B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(0)}KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;\n}\n\n// ── Main strip ─────────────────────────────────────────────────────────────\n\nexport interface AttachmentStripProps {\n attachments: PendingAttachment[];\n onRemove: (id: string) => void;\n onRetry: (id: string) => void;\n className?: string;\n}\n\nexport function AttachmentStrip({\n attachments,\n onRemove,\n onRetry,\n className = \"\",\n}: AttachmentStripProps) {\n if (attachments.length === 0) return null;\n\n return (\n <div\n className={`csdk-attachment-strip flex gap-1.5 overflow-x-auto px-1 py-1.5 scrollbar-none ${className}`}\n >\n {attachments.map((att) => (\n <AttachmentCard\n key={att.id}\n attachment={att}\n onRemove={onRemove}\n onRetry={onRetry}\n />\n ))}\n </div>\n );\n}\n","\"use client\";\n\n/**\n * DropZoneOverlay — Shows when files are dragged over the chat area.\n */\n\nconst svgProps = {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\" as const,\n strokeLinejoin: \"round\" as const,\n};\nfunction PaperclipIcon({ className }: { className?: string }) {\n return (\n <svg {...svgProps} className={className}>\n <path d=\"m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48\" />\n </svg>\n );\n}\n\nexport interface DropZoneOverlayProps {\n isDragging: boolean;\n className?: string;\n}\n\nexport function DropZoneOverlay({\n isDragging,\n className = \"\",\n}: DropZoneOverlayProps) {\n if (!isDragging) return null;\n\n return (\n <div\n className={`\n csdk-drop-zone absolute inset-0 z-50 flex items-center justify-center\n bg-background/80 backdrop-blur-sm border-2 border-dashed border-primary/40\n rounded-xl pointer-events-none\n ${className}\n `}\n >\n <div className=\"flex flex-col items-center gap-2 text-primary/70\">\n <div className=\"size-10 rounded-xl bg-primary/10 flex items-center justify-center\">\n <PaperclipIcon className=\"size-5\" />\n </div>\n <p className=\"text-sm font-medium\">Drop files to attach</p>\n </div>\n </div>\n );\n}\n","/**\n * @yourgpt/copilot-sdk-ui\n *\n * Pre-built UI components for Copilot SDK\n */\n\n// ============================================\n// Primitives (Building Blocks)\n// ============================================\nexport { Loader } from \"./components/ui/loader\";\nexport { Markdown } from \"./components/ui/markdown\";\nexport type { LinkSafetyConfig } from \"./components/ui/markdown\";\nexport { CodeBlock } from \"./components/ui/code-block\";\nexport { Button } from \"./components/ui/button\";\nexport { FeedbackBar } from \"./components/ui/feedback-bar\";\nexport { ScrollButton } from \"./components/ui/scroll-button\";\nexport {\n Tooltip,\n TooltipProvider,\n TooltipTrigger,\n TooltipContent,\n type TooltipProps,\n type TooltipProviderProps,\n type TooltipTriggerProps,\n type TooltipContentProps,\n} from \"./components/ui/tooltip\";\n\n// Message primitives\nexport {\n Message as MessagePrimitive,\n MessageAvatar,\n MessageContent,\n} from \"./components/ui/message\";\n\n// Input primitives\nexport {\n PromptInput,\n PromptInputTextarea,\n PromptInputActions,\n PromptInputAction,\n} from \"./components/ui/prompt-input\";\n\n// Container primitives\nexport {\n ChatContainerRoot,\n ChatContainerContent,\n ChatContainerScrollAnchor,\n useChatContainer,\n} from \"./components/ui/chat-container\";\n\n// Source primitives (for citations/references)\nexport {\n Source,\n SourceTrigger,\n SourceContent,\n SourceGroup,\n SimpleSource,\n type SourceProps,\n type SourceTriggerProps,\n type SourceContentProps,\n type SourceGroupProps,\n type SourceItem,\n type SimpleSourceProps,\n} from \"./components/ui/source\";\n\n// Search results primitives (for web search tool)\nexport {\n SearchResults,\n SearchAnswer,\n SearchResultsWithAnswer,\n type SearchResultsProps,\n type SearchAnswerProps,\n type SearchResultsWithAnswerProps,\n} from \"./components/ui/search-results\";\n\n// Citation components (for displaying sources/references)\nexport {\n // Components\n CitationBadge,\n CitationSuperscript,\n SourcePill,\n SourcesBar,\n SourcesCollapsible,\n SourcesList,\n MessageWithCitations,\n // Utilities\n annotationsToCitations,\n resultsToCitations,\n // Types\n type Citation,\n type CitationsConfig,\n type CitationBadgeProps,\n type CitationSuperscriptProps,\n type SourcePillProps,\n type SourcesBarProps,\n type SourcesCollapsibleProps,\n type SourcesListProps,\n type MessageWithCitationsProps,\n} from \"./components/ui/citations\";\n\n// Reasoning primitives\nexport {\n Reasoning,\n ReasoningTrigger,\n ReasoningContent,\n SimpleReasoning,\n type ReasoningProps,\n type ReasoningTriggerProps,\n type ReasoningContentProps,\n type SimpleReasoningProps,\n} from \"./components/ui/reasoning\";\n\n// Tool steps primitives\nexport {\n ToolSteps,\n ToolStep,\n InlineToolSteps,\n type ToolStepsProps,\n type ToolStepProps,\n type InlineToolStepsProps,\n type ToolStepData,\n type ToolStepStatus,\n} from \"./components/ui/tool-steps\";\n\n// Confirmation primitives (Tool approval)\nexport {\n Confirmation,\n ConfirmationPending,\n ConfirmationApproved,\n ConfirmationRejected,\n ConfirmationMessage,\n ConfirmationActions,\n SimpleConfirmation,\n type ConfirmationProps,\n type ConfirmationState,\n type ConfirmationPendingProps,\n type ConfirmationApprovedProps,\n type ConfirmationRejectedProps,\n type ConfirmationMessageProps,\n type ConfirmationActionsProps,\n type SimpleConfirmationProps,\n} from \"./components/ui/confirmation\";\n\n// Permission confirmation primitives (with \"don't ask again\" support)\nexport {\n PermissionConfirmation,\n CompactPermissionConfirmation,\n DEFAULT_PERMISSION_OPTIONS,\n type PermissionConfirmationProps,\n type CompactPermissionConfirmationProps,\n type PermissionLevel,\n type PermissionOption,\n} from \"./components/ui/permission-confirmation\";\n\n// Follow-up questions (AI-generated suggestions)\nexport {\n FollowUpQuestions,\n parseFollowUps,\n type FollowUpProps,\n} from \"./components/ui/follow-up\";\n\n// Branch navigator (← N/M → variant navigation for branched conversations)\nexport {\n BranchNavigator,\n type BranchNavigatorProps,\n} from \"./components/ui/branch-navigator\";\n\n// DevLogger (Development debugging tool)\nexport {\n DevLogger,\n type DevLoggerProps,\n type DevLoggerState,\n} from \"./components/ui/dev-logger\";\n\n// Capability badges (Multi-provider support)\nexport {\n CapabilityBadge,\n CapabilityList,\n type CapabilityBadgeProps,\n type CapabilityListProps,\n type CapabilityType,\n} from \"./components/ui/capability-badge\";\n\n// Model selector (Multi-provider support)\nexport {\n ModelSelector,\n SimpleModelSelector,\n type ModelSelectorProps,\n type SimpleModelSelectorProps,\n type ModelOption,\n type ProviderGroup,\n} from \"./components/ui/model-selector\";\n\n// Thread management components\nexport {\n ThreadPicker,\n type ThreadPickerProps,\n} from \"./components/ui/thread-picker\";\nexport {\n ThreadList,\n ThreadCard,\n type ThreadListProps,\n type ThreadCardProps,\n} from \"./components/ui/thread-list\";\n\n// ============================================\n// Context Providers\n// ============================================\nexport {\n CopilotUIProvider,\n useCopilotUI,\n type CopilotUIConfig,\n type CopilotUIContextValue,\n type CopilotUIProviderProps,\n} from \"./context/copilot-ui-context\";\n\n// ============================================\n// Composed Components (Ready-to-use)\n// ============================================\nexport {\n Chat,\n ChatWelcome,\n CopilotChat,\n ConnectedChat, // Alias for CopilotChat (backwards compatibility)\n ToolExecutionMessage,\n PoweredBy,\n // Compound component hook\n useCopilotChatContext,\n type ChatProps,\n type ChatMessage,\n type CopilotChatProps,\n type ConnectedChatProps, // Alias for CopilotChatProps\n type PoweredByProps,\n // Compound component types (layout composition)\n type HomeViewProps,\n type HomeProps,\n type ChatViewProps,\n type HeaderProps,\n type FooterProps,\n type BackButtonProps,\n type ThreadPickerCompoundProps,\n // Generative UI types (for custom tool renderers)\n type ToolRendererProps,\n type ToolRenderers,\n // Welcome screen config\n type WelcomeConfig,\n // Citation/Sources config (web search)\n type CitationConfig,\n // Persistence types\n type CopilotChatPersistenceConfig,\n type CopilotChatClassNames,\n // Typed persistence configs\n type LocalPersistenceConfig,\n type ServerPersistenceConfig,\n type CloudPersistenceConfig,\n} from \"./components/composed\";\n\n// ============================================\n// Icons\n// ============================================\nexport {\n SendIcon,\n StopIcon,\n CloseIcon,\n ChevronDownIcon,\n ChevronUpIcon,\n ChevronLeftIcon,\n CopyIcon,\n CheckIcon,\n ThumbsUpIcon,\n ThumbsDownIcon,\n RefreshIcon,\n UserIcon,\n BotIcon,\n XIcon,\n AlertTriangleIcon,\n} from \"./components/icons\";\n\n// ============================================\n// MCP-UI Components (Interactive UI from MCP tools)\n// ============================================\nexport {\n MCPUIFrame,\n MCPUIFrameList,\n type MCPUIFrameListProps,\n} from \"./components/ui/mcp-ui-frame\";\n// MCPUIFrameProps is exported from mcp/ui module\nexport type { MCPUIFrameProps } from \"../mcp/ui/types\";\n\n// ============================================\n// Utilities\n// ============================================\nexport { cn } from \"./lib/utils\";\n\n// ============================================\n// Chat Primitives (headless composition API)\n// ============================================\nimport { DefaultMessage } from \"./components/composed/chat/default-message\";\nimport { ChatHeader } from \"./components/composed/chat/chat-header\";\nimport { ChatWelcome } from \"./components/composed/chat/chat-welcome\";\nimport { MessageList } from \"./components/composed/chat/message-list\";\nimport {\n Message,\n MessageAvatar as MsgAvatar,\n MessageContent as MsgContent,\n MessageActions,\n MessageAction,\n} from \"./components/ui/message\";\nimport { PromptInput } from \"./components/ui/prompt-input\";\nimport { Loader } from \"./components/ui/loader\";\nimport { ChatContainerScrollAnchor } from \"./components/ui/chat-container\";\n\n/**\n * ChatPrimitives — composable primitives for building custom chat layouts.\n * Must be used inside <CopilotChat>.\n *\n * @example\n * ```tsx\n * import { ChatPrimitives as Chat } from '@yourgpt/copilot-sdk-ui';\n *\n * <CopilotChat>\n * <Chat.Header />\n * <Chat.MessageList>\n * {(message) =>\n * message.metadata?.type === \"plan\"\n * ? <PlanCard key={message.id} />\n * : <Chat.DefaultMessage key={message.id} message={message} />\n * }\n * </Chat.MessageList>\n * <Chat.Input />\n * </CopilotChat>\n * ```\n */\nexport const ChatPrimitives = {\n // ── List ──────────────────────────────────────────────\n /** Renders the message list via render-prop. Falls back to DefaultMessage if no children. */\n MessageList,\n\n // ── Messages ──────────────────────────────────────────\n /** Full SDK message bubble (user + assistant + tools). Use as fallback inside MessageList. */\n DefaultMessage,\n /** Low-level message row wrapper (flex layout + avatar slot) */\n Message,\n /** Message avatar — image with fallback text/icon */\n MessageAvatar: MsgAvatar,\n /** Message content bubble — supports markdown */\n MessageContent: MsgContent,\n /** Action bar below a message (copy, feedback, etc.) */\n MessageActions,\n /** Single action button with tooltip inside MessageActions */\n MessageAction,\n\n // ── Layout ────────────────────────────────────────────\n /** Chat header bar with title and controls */\n Header: ChatHeader,\n /** Welcome screen shown when there are no messages */\n Welcome: ChatWelcome,\n /** Chat input / composer */\n Input: PromptInput,\n /** Scroll anchor — keeps the view pinned to the latest message */\n ScrollAnchor: ChatContainerScrollAnchor,\n\n // ── Indicators ────────────────────────────────────────\n /** Loading / streaming indicator (dots, wave, typing variants) */\n Loader,\n};\n\nexport type { MessageListProps } from \"./components/composed/chat/message-list\";\n\n// ============================================\n// Attachments\n// ============================================\nexport { useAttachments } from \"./hooks/useAttachments\";\nexport type {\n PendingAttachment,\n UseAttachmentsConfig,\n UseAttachmentsReturn,\n UploadConfig,\n} from \"./hooks/useAttachments\";\nexport { AttachmentStrip } from \"./components/attachment-strip\";\nexport type { AttachmentStripProps } from \"./components/attachment-strip\";\nexport { DropZoneOverlay } from \"./components/drop-zone-overlay\";\nexport type { DropZoneOverlayProps } from \"./components/drop-zone-overlay\";\n"]}
|