@yourgpt/copilot-sdk 2.0.1 → 2.0.2-beta.2
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/README.md +42 -0
- package/dist/{ThreadManager-JT0sqSSD.d.ts → ThreadManager-Dkp_eLty.d.ts} +1 -1
- package/dist/{ThreadManager-CUq5Ocu2.d.cts → ThreadManager-LfFRhr4e.d.cts} +1 -1
- package/dist/anthropic-6F5GRE3B.js +4 -0
- package/dist/anthropic-6F5GRE3B.js.map +1 -0
- package/dist/anthropic-DGalr_Fw.d.cts +17 -0
- package/dist/anthropic-DkCEDYOt.d.ts +17 -0
- package/dist/anthropic-NMTRABEH.cjs +21 -0
- package/dist/anthropic-NMTRABEH.cjs.map +1 -0
- package/dist/brave-DdnWb7Gb.d.cts +17 -0
- package/dist/brave-DsI9n7Wr.d.ts +17 -0
- package/dist/brave-OYKCOZEM.cjs +21 -0
- package/dist/brave-OYKCOZEM.cjs.map +1 -0
- package/dist/brave-XSASGGH2.js +4 -0
- package/dist/brave-XSASGGH2.js.map +1 -0
- package/dist/chunk-2FAWEBZS.cjs +88 -0
- package/dist/chunk-2FAWEBZS.cjs.map +1 -0
- package/dist/chunk-53UGJNHN.js +92 -0
- package/dist/chunk-53UGJNHN.js.map +1 -0
- package/dist/chunk-6T5XXJEP.cjs +80 -0
- package/dist/chunk-6T5XXJEP.cjs.map +1 -0
- package/dist/chunk-7K7HZMP4.cjs +1170 -0
- package/dist/chunk-7K7HZMP4.cjs.map +1 -0
- package/dist/chunk-7W7QLZNC.js +72 -0
- package/dist/chunk-7W7QLZNC.js.map +1 -0
- package/dist/{chunk-JM7PB2LP.js → chunk-7XFFRV7D.js} +10 -66
- package/dist/chunk-7XFFRV7D.js.map +1 -0
- package/dist/chunk-ASV6JLYG.cjs +99 -0
- package/dist/chunk-ASV6JLYG.cjs.map +1 -0
- package/dist/chunk-BH7MNDWW.js +1152 -0
- package/dist/chunk-BH7MNDWW.js.map +1 -0
- package/dist/chunk-BKO7DSPU.js +67 -0
- package/dist/chunk-BKO7DSPU.js.map +1 -0
- package/dist/chunk-CBAHCI4R.cjs +76 -0
- package/dist/chunk-CBAHCI4R.cjs.map +1 -0
- package/dist/chunk-CEKAYA2Q.cjs +74 -0
- package/dist/chunk-CEKAYA2Q.cjs.map +1 -0
- package/dist/chunk-CEOMTQTP.js +85 -0
- package/dist/chunk-CEOMTQTP.js.map +1 -0
- package/dist/chunk-DABZYCVX.js +84 -0
- package/dist/chunk-DABZYCVX.js.map +1 -0
- package/dist/chunk-DGUM43GV.js +10 -0
- package/dist/chunk-DGUM43GV.js.map +1 -0
- package/dist/chunk-G4SF2PNQ.js +33 -0
- package/dist/chunk-G4SF2PNQ.js.map +1 -0
- package/dist/chunk-GANCV72Z.cjs +110 -0
- package/dist/chunk-GANCV72Z.cjs.map +1 -0
- package/dist/{chunk-BLSI67J6.cjs → chunk-H5XMKBBA.cjs} +425 -30
- package/dist/chunk-H5XMKBBA.cjs.map +1 -0
- package/dist/{chunk-CJ7UWN2Y.js → chunk-IXFV6AW6.js} +397 -7
- package/dist/chunk-IXFV6AW6.js.map +1 -0
- package/dist/chunk-JEQ2X3Z6.cjs +12 -0
- package/dist/chunk-JEQ2X3Z6.cjs.map +1 -0
- package/dist/chunk-JO4BHPAD.cjs +40 -0
- package/dist/chunk-JO4BHPAD.cjs.map +1 -0
- package/dist/chunk-MEBXW75C.cjs +89 -0
- package/dist/chunk-MEBXW75C.cjs.map +1 -0
- package/dist/chunk-MNDGIW47.js +76 -0
- package/dist/chunk-MNDGIW47.js.map +1 -0
- package/dist/chunk-PPFHA6IL.js +83 -0
- package/dist/chunk-PPFHA6IL.js.map +1 -0
- package/dist/chunk-RQ74USYU.js +128 -0
- package/dist/chunk-RQ74USYU.js.map +1 -0
- package/dist/chunk-TXLIY7GF.cjs +132 -0
- package/dist/chunk-TXLIY7GF.cjs.map +1 -0
- package/dist/chunk-UIWFYMAO.cjs +82 -0
- package/dist/chunk-UIWFYMAO.cjs.map +1 -0
- package/dist/{chunk-4PRWNAXQ.cjs → chunk-UOWLKFXK.cjs} +27 -89
- package/dist/chunk-UOWLKFXK.cjs.map +1 -0
- package/dist/chunk-VD74IPKB.js +106 -0
- package/dist/chunk-VD74IPKB.js.map +1 -0
- package/dist/chunk-W73FBYIH.cjs +87 -0
- package/dist/chunk-W73FBYIH.cjs.map +1 -0
- package/dist/chunk-XGITAEXU.js +93 -0
- package/dist/chunk-XGITAEXU.js.map +1 -0
- package/dist/chunk-XWOHNY3F.cjs +96 -0
- package/dist/chunk-XWOHNY3F.cjs.map +1 -0
- package/dist/chunk-ZPYQDMUX.js +79 -0
- package/dist/chunk-ZPYQDMUX.js.map +1 -0
- package/dist/core/index.cjs +156 -84
- package/dist/core/index.d.cts +16 -4
- package/dist/core/index.d.ts +16 -4
- package/dist/core/index.js +13 -1
- package/dist/exa-72KFY5A7.cjs +21 -0
- package/dist/exa-72KFY5A7.cjs.map +1 -0
- package/dist/exa-Dp9U-WTc.d.ts +17 -0
- package/dist/exa-NNVPBC2M.js +4 -0
- package/dist/exa-NNVPBC2M.js.map +1 -0
- package/dist/exa-jJSPhyUW.d.cts +17 -0
- package/dist/google-CHU2yycE.d.cts +17 -0
- package/dist/google-CTEK6SV2.js +4 -0
- package/dist/google-CTEK6SV2.js.map +1 -0
- package/dist/google-Da8IQxaI.d.ts +17 -0
- package/dist/google-IIUXFFVF.cjs +21 -0
- package/dist/google-IIUXFFVF.cjs.map +1 -0
- package/dist/index-2VtgKM8S.d.cts +206 -0
- package/dist/index-pWEH7pUE.d.ts +206 -0
- package/dist/mcp/index.cjs +670 -0
- package/dist/mcp/index.cjs.map +1 -0
- package/dist/mcp/index.d.cts +779 -0
- package/dist/mcp/index.d.ts +779 -0
- package/dist/mcp/index.js +574 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/openai-6KTCQ7PZ.cjs +21 -0
- package/dist/openai-6KTCQ7PZ.cjs.map +1 -0
- package/dist/openai-7W2PCNW5.js +4 -0
- package/dist/openai-7W2PCNW5.js.map +1 -0
- package/dist/openai-Cam8hF4f.d.ts +17 -0
- package/dist/openai-HVSCuXgO.d.cts +17 -0
- package/dist/react/index.cjs +75 -42
- package/dist/react/index.d.cts +270 -45
- package/dist/react/index.d.ts +270 -45
- package/dist/react/index.js +15 -2
- package/dist/searxng-AXLVGY7Z.js +4 -0
- package/dist/searxng-AXLVGY7Z.js.map +1 -0
- package/dist/searxng-EJKNY236.cjs +21 -0
- package/dist/searxng-EJKNY236.cjs.map +1 -0
- package/dist/searxng-K0qtY9vp.d.ts +17 -0
- package/dist/searxng-QGOte_Gq.d.cts +17 -0
- package/dist/serper-3JYJHJX6.js +4 -0
- package/dist/serper-3JYJHJX6.js.map +1 -0
- package/dist/serper-63FT4AOL.cjs +21 -0
- package/dist/serper-63FT4AOL.cjs.map +1 -0
- package/dist/serper-7Czya3PW.d.ts +17 -0
- package/dist/serper-JzdaSnS9.d.cts +17 -0
- package/dist/styles.css +38 -0
- package/dist/tavily-AWFP4RM7.cjs +21 -0
- package/dist/tavily-AWFP4RM7.cjs.map +1 -0
- package/dist/tavily-C8cXXojE.d.cts +17 -0
- package/dist/tavily-CIWAAZPH.js +4 -0
- package/dist/tavily-CIWAAZPH.js.map +1 -0
- package/dist/tavily-DdSGVgkE.d.ts +17 -0
- package/dist/themes/catppuccin.css +2 -0
- package/dist/themes/claude.css +2 -0
- package/dist/themes/linear.css +2 -0
- package/dist/themes/modern-minimal.css +2 -0
- package/dist/themes/posthog.css +2 -0
- package/dist/themes/supabase.css +2 -0
- package/dist/themes/twitter.css +2 -0
- package/dist/themes/vercel.css +2 -0
- package/dist/tools/anthropic/index.cjs +61 -0
- package/dist/tools/anthropic/index.cjs.map +1 -0
- package/dist/tools/anthropic/index.d.cts +67 -0
- package/dist/tools/anthropic/index.d.ts +67 -0
- package/dist/tools/anthropic/index.js +56 -0
- package/dist/tools/anthropic/index.js.map +1 -0
- package/dist/tools/brave/index.cjs +85 -0
- package/dist/tools/brave/index.cjs.map +1 -0
- package/dist/tools/brave/index.d.cts +91 -0
- package/dist/tools/brave/index.d.ts +91 -0
- package/dist/tools/brave/index.js +80 -0
- package/dist/tools/brave/index.js.map +1 -0
- package/dist/tools/exa/index.cjs +90 -0
- package/dist/tools/exa/index.cjs.map +1 -0
- package/dist/tools/exa/index.d.cts +92 -0
- package/dist/tools/exa/index.d.ts +92 -0
- package/dist/tools/exa/index.js +85 -0
- package/dist/tools/exa/index.js.map +1 -0
- package/dist/tools/google/index.cjs +81 -0
- package/dist/tools/google/index.cjs.map +1 -0
- package/dist/tools/google/index.d.cts +81 -0
- package/dist/tools/google/index.d.ts +81 -0
- package/dist/tools/google/index.js +76 -0
- package/dist/tools/google/index.js.map +1 -0
- package/dist/tools/openai/index.cjs +83 -0
- package/dist/tools/openai/index.cjs.map +1 -0
- package/dist/tools/openai/index.d.cts +84 -0
- package/dist/tools/openai/index.d.ts +84 -0
- package/dist/tools/openai/index.js +78 -0
- package/dist/tools/openai/index.js.map +1 -0
- package/dist/tools/searxng/index.cjs +85 -0
- package/dist/tools/searxng/index.cjs.map +1 -0
- package/dist/tools/searxng/index.d.cts +91 -0
- package/dist/tools/searxng/index.d.ts +91 -0
- package/dist/tools/searxng/index.js +80 -0
- package/dist/tools/searxng/index.js.map +1 -0
- package/dist/tools/serper/index.cjs +85 -0
- package/dist/tools/serper/index.cjs.map +1 -0
- package/dist/tools/serper/index.d.cts +91 -0
- package/dist/tools/serper/index.d.ts +91 -0
- package/dist/tools/serper/index.js +80 -0
- package/dist/tools/serper/index.js.map +1 -0
- package/dist/tools/tavily/index.cjs +91 -0
- package/dist/tools/tavily/index.cjs.map +1 -0
- package/dist/tools/tavily/index.d.cts +95 -0
- package/dist/tools/tavily/index.d.ts +95 -0
- package/dist/tools/tavily/index.js +86 -0
- package/dist/tools/tavily/index.js.map +1 -0
- package/dist/tools/web-search/index.cjs +31 -0
- package/dist/tools/web-search/index.cjs.map +1 -0
- package/dist/tools/web-search/index.d.cts +3 -0
- package/dist/tools/web-search/index.d.ts +3 -0
- package/dist/tools/web-search/index.js +14 -0
- package/dist/tools/web-search/index.js.map +1 -0
- package/dist/{types-BtAaOV07.d.cts → tools-DDWrco4h.d.cts} +43 -367
- package/dist/{types-BtAaOV07.d.ts → tools-DDWrco4h.d.ts} +43 -367
- package/dist/types-B20VCJXL.d.cts +347 -0
- package/dist/types-B20VCJXL.d.ts +347 -0
- package/dist/types-Cizh9K_f.d.ts +441 -0
- package/dist/types-DG2ya08y.d.cts +367 -0
- package/dist/types-DG2ya08y.d.ts +367 -0
- package/dist/types-DjSfYNKj.d.cts +441 -0
- package/dist/types-ZguuKEs_.d.cts +127 -0
- package/dist/types-ZguuKEs_.d.ts +127 -0
- package/dist/ui/index.cjs +1075 -148
- package/dist/ui/index.cjs.map +1 -1
- package/dist/ui/index.d.cts +410 -4
- package/dist/ui/index.d.ts +410 -4
- package/dist/ui/index.js +1007 -96
- package/dist/ui/index.js.map +1 -1
- package/package.json +52 -2
- package/dist/chunk-4PRWNAXQ.cjs.map +0 -1
- package/dist/chunk-BLSI67J6.cjs.map +0 -1
- package/dist/chunk-CJ7UWN2Y.js.map +0 -1
- package/dist/chunk-JM7PB2LP.js.map +0 -1
package/dist/ui/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ui/lib/utils.ts","../../src/ui/components/ui/loader.tsx","../../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/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/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/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/tool-execution-message.tsx","../../src/ui/hooks/useInternalThreadManager.ts","../../src/ui/components/composed/connected-chat.tsx","../../src/ui/components/composed/powered-by.tsx"],"names":["twMerge","clsx","jsxs","jsx","Streamdown","code","memo","cva","React","Slot","StickToBottomOriginal","useStickToBottomContext","BaseTooltip","React3","AvatarPrimitive","React4","createContext","useContext","useState","useRef","useLayoutEffect","HoverCardPrimitive","React6","React7","React8","React9","ChevronDownIcon","ThumbsUpIcon","ThumbsDownIcon","XIcon","React10","React11","Fragment","React12","BasePopover","React13","PlusIcon","CheckIcon","React14","formatDate","TrashIcon","React15","React16","useId","useCallback","DEFAULT_MAX_FILE_SIZE","DEFAULT_ALLOWED_TYPES","getAttachmentType","fileToBase64","generateAttachmentId","useThreadManager","useCopilot","useEffect","createServerAdapter"],"mappings":"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","file":"index.cjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { cn } from \"../../lib/utils\";\n\nexport interface LoaderProps {\n variant?:\n | \"dots\"\n | \"typing\"\n | \"wave\"\n | \"terminal\"\n | \"text-blink\"\n | \"text-shimmer\"\n | \"loading-dots\";\n size?: \"sm\" | \"md\" | \"lg\";\n text?: string;\n className?: string;\n}\n\nexport function DotsLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const dotSizes = {\n sm: \"h-1 w-1\",\n md: \"h-1.5 w-1.5\",\n lg: \"h-2 w-2\",\n };\n\n const containerSizes = {\n sm: \"h-4\",\n md: \"h-5\",\n lg: \"h-6\",\n };\n\n return (\n <div\n className={cn(\n \"flex items-center translate-y-[-2px] space-x-1\",\n containerSizes[size],\n className,\n )}\n >\n {[...Array(3)].map((_, i) => (\n <div\n key={i}\n className={cn(\n \"bg-primary csdk-loader-bounce-dots rounded-full\",\n dotSizes[size],\n )}\n style={{\n animationDelay: `${i * 160}ms`,\n }}\n />\n ))}\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function TypingLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const dotSizes = {\n sm: \"h-1 w-1\",\n md: \"h-1.5 w-1.5\",\n lg: \"h-2 w-2\",\n };\n\n const containerSizes = {\n sm: \"h-4\",\n md: \"h-5\",\n lg: \"h-6\",\n };\n\n return (\n <div\n className={cn(\n \"flex items-center space-x-1\",\n containerSizes[size],\n className,\n )}\n >\n {[...Array(3)].map((_, i) => (\n <div\n key={i}\n className={cn(\n \"bg-primary csdk-loader-typing rounded-full\",\n dotSizes[size],\n )}\n style={{\n animationDelay: `${i * 250}ms`,\n }}\n />\n ))}\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function WaveLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const barWidths = {\n sm: \"w-0.5\",\n md: \"w-0.5\",\n lg: \"w-1\",\n };\n\n const containerSizes = {\n sm: \"h-4\",\n md: \"h-5\",\n lg: \"h-6\",\n };\n\n const heights = {\n sm: [\"6px\", \"9px\", \"12px\", \"9px\", \"6px\"],\n md: [\"8px\", \"12px\", \"16px\", \"12px\", \"8px\"],\n lg: [\"10px\", \"15px\", \"20px\", \"15px\", \"10px\"],\n };\n\n return (\n <div\n className={cn(\n \"flex items-center gap-0.5\",\n containerSizes[size],\n className,\n )}\n >\n {[...Array(5)].map((_, i) => (\n <div\n key={i}\n className={cn(\n \"bg-primary csdk-loader-wave rounded-full\",\n barWidths[size],\n )}\n style={{\n animationDelay: `${i * 100}ms`,\n height: heights[size][i],\n }}\n />\n ))}\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function TerminalLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const cursorSizes = {\n sm: \"h-3 w-1.5\",\n md: \"h-4 w-2\",\n lg: \"h-5 w-2.5\",\n };\n\n const textSizes = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n };\n\n const containerSizes = {\n sm: \"h-4\",\n md: \"h-5\",\n lg: \"h-6\",\n };\n\n return (\n <div\n className={cn(\n \"flex items-center space-x-1\",\n containerSizes[size],\n className,\n )}\n >\n <span className={cn(\"text-primary font-mono\", textSizes[size])}>\n {\">\"}\n </span>\n <div className={cn(\"bg-primary csdk-loader-blink\", cursorSizes[size])} />\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function TextBlinkLoader({\n text = \"Thinking\",\n className,\n size = \"md\",\n}: {\n text?: string;\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const textSizes = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n };\n\n return (\n <div\n className={cn(\n \"csdk-loader-text-blink font-medium\",\n textSizes[size],\n className,\n )}\n >\n {text}\n </div>\n );\n}\n\nexport function TextShimmerLoader({\n text = \"Thinking\",\n className,\n size = \"md\",\n}: {\n text?: string;\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const textSizes = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n };\n\n return (\n <div\n className={cn(\n \"bg-[linear-gradient(to_right,var(--muted-foreground)_40%,var(--foreground)_60%,var(--muted-foreground)_80%)]\",\n \"bg-[length:200%_auto] bg-clip-text font-medium text-transparent\",\n \"csdk-loader-shimmer\",\n textSizes[size],\n className,\n )}\n >\n {text}\n </div>\n );\n}\n\nexport function TextDotsLoader({\n className,\n text = \"Thinking\",\n size = \"md\",\n}: {\n className?: string;\n text?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const textSizes = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n };\n\n return (\n <div className={cn(\"inline-flex items-center\", className)}>\n <span className={cn(\"text-primary font-medium\", textSizes[size])}>\n {text}\n </span>\n <span className=\"inline-flex\">\n <span\n className=\"text-primary csdk-loader-loading-dots\"\n style={{ animationDelay: \"0.2s\" }}\n >\n .\n </span>\n <span\n className=\"text-primary csdk-loader-loading-dots\"\n style={{ animationDelay: \"0.4s\" }}\n >\n .\n </span>\n <span\n className=\"text-primary csdk-loader-loading-dots\"\n style={{ animationDelay: \"0.6s\" }}\n >\n .\n </span>\n </span>\n </div>\n );\n}\n\nfunction Loader({\n variant = \"typing\",\n size = \"md\",\n text,\n className,\n}: LoaderProps) {\n switch (variant) {\n case \"dots\":\n return <DotsLoader size={size} className={className} />;\n case \"typing\":\n return <TypingLoader size={size} className={className} />;\n case \"wave\":\n return <WaveLoader size={size} className={className} />;\n case \"terminal\":\n return <TerminalLoader size={size} className={className} />;\n case \"text-blink\":\n return <TextBlinkLoader text={text} size={size} className={className} />;\n case \"text-shimmer\":\n return (\n <TextShimmerLoader text={text} size={size} className={className} />\n );\n case \"loading-dots\":\n return <TextDotsLoader text={text} size={size} className={className} />;\n default:\n return <TypingLoader size={size} className={className} />;\n }\n}\n\nexport { Loader };\n","import { memo, ComponentProps } from \"react\";\nimport { Streamdown } from \"streamdown\";\nimport { code } from \"@streamdown/code\";\n\nexport type MarkdownProps = {\n children: string;\n id?: string;\n className?: string;\n isStreaming?: boolean;\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}: MarkdownProps) {\n return (\n <div className={className}>\n <Streamdown\n plugins={{ code }}\n isAnimating={isStreaming}\n components={headingComponents}\n >\n {children}\n </Streamdown>\n </div>\n );\n}\n\nconst Markdown = memo(MarkdownComponent);\nMarkdown.displayName = \"Markdown\";\n\nexport { Markdown };\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(\"flex overflow-y-auto\", 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-none leading-relaxed\",\n // Typography - simple Tailwind utilities (no prose)\n \"[&_p]:my-1 [&_p]:leading-relaxed\",\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\",\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 origin-[--radix-hover-card-content-transform-origin]\",\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 \"bg-muted text-muted-foreground hover:bg-muted-foreground/30 hover:text-primary inline-flex h-5 max-w-32 items-center gap-1 overflow-hidden rounded-full py-0 text-xs no-underline transition-colors duration-150\",\n showFavicon ? \"pr-2 pl-1\" : \"px-1\",\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=\"favicon\"\n width={14}\n height={14}\n className=\"size-3.5 rounded-full\"\n />\n )}\n <span className=\"truncate tabular-nums text-center font-normal\">\n {labelToShow}\n </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 className={cn(\"w-80 p-0 shadow-xs\", className)}>\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex flex-col gap-2 p-3\"\n >\n <div className=\"flex items-center gap-1.5\">\n <img\n src={`https://www.google.com/s2/favicons?sz=64&domain_url=${encodeURIComponent(\n href,\n )}`}\n alt=\"favicon\"\n className=\"size-4 rounded-full\"\n width={16}\n height={16}\n />\n <div className=\"text-primary truncate text-sm\">\n {domain.replace(\"www.\", \"\")}\n </div>\n </div>\n <div className=\"line-clamp-2 text-sm font-medium\">{title}</div>\n <div className=\"text-muted-foreground line-clamp-2 text-sm\">\n {description}\n </div>\n </a>\n </HoverCardContent>\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): string {\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-start gap-2\">\n {/* Status indicator - only show for non-executing states */}\n {!isExecuting && (\n <StatusIndicator status={step.status} className=\"mt-0.5\" />\n )}\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 { Button } from \"./button\";\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 \"confirmation rounded-lg border bg-card text-card-foreground\",\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(\"p-4\", 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 \"flex items-center gap-2 px-4 py-2 text-sm text-green-600 dark:text-green-400\",\n className,\n )}\n >\n <CheckIcon className=\"h-4 w-4\" />\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 \"flex items-center gap-2 px-4 py-2 text-sm text-red-600 dark:text-red-400\",\n className,\n )}\n >\n <XIcon className=\"h-4 w-4\" />\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 <AlertTriangleIcon className=\"mt-0.5 h-5 w-5 flex-shrink-0 text-amber-500\" />\n <p className=\"text-sm text-foreground\">\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 <div className={cn(\"mt-3 flex justify-end gap-2\", className)}>\n <Button variant=\"outline\" size=\"sm\" onClick={onReject}>\n {rejectLabel}\n </Button>\n <Button variant=\"default\" size=\"sm\" onClick={onApprove}>\n {approveLabel}\n </Button>\n </div>\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 * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"./button\";\nimport { CheckIcon, XIcon, AlertTriangleIcon } from \"../icons\";\n\n// ============================================\n// Types\n// ============================================\n\n/**\n * Permission level for tool execution\n */\nexport type PermissionLevel =\n | \"ask\"\n | \"allow_always\"\n | \"deny_always\"\n | \"session\";\n\n/**\n * Permission option for dropdown/selection\n */\nexport interface PermissionOption {\n value: PermissionLevel;\n label: string;\n description?: string;\n}\n\n/**\n * Default permission options\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 /** Current state: pending, approved, or rejected */\n state: ConfirmationState;\n /** Tool name */\n toolName?: string;\n /** Message to display */\n message?: string;\n /** Called when user approves with permission level */\n onApprove?: (permissionLevel: PermissionLevel) => void;\n /** Called when user rejects with permission level */\n onReject?: (permissionLevel?: PermissionLevel) => void;\n /** Show permission options (default: true) */\n showPermissionOptions?: boolean;\n /** Available permission options */\n permissionOptions?: PermissionOption[];\n /** Additional class name */\n className?: string;\n}\n\n/**\n * PermissionConfirmation - Enhanced confirmation with permission level selection\n *\n * Shows a confirmation dialog for tool approval with options to remember the choice.\n *\n * @example\n * ```tsx\n * <PermissionConfirmation\n * state=\"pending\"\n * toolName=\"capture_screenshot\"\n * message=\"Take a screenshot of the current screen?\"\n * onApprove={(level) => approveToolExecution(tool.id, level)}\n * onReject={(level) => rejectToolExecution(tool.id, undefined, level)}\n * />\n * ```\n */\nexport function PermissionConfirmation({\n state,\n toolName,\n message,\n onApprove,\n onReject,\n showPermissionOptions = true,\n permissionOptions = DEFAULT_PERMISSION_OPTIONS,\n className,\n}: PermissionConfirmationProps) {\n const [selectedPermission, setSelectedPermission] =\n React.useState<PermissionLevel>(\"ask\");\n const [showOptions, setShowOptions] = React.useState(false);\n\n const handleApprove = () => {\n onApprove?.(selectedPermission);\n };\n\n const handleReject = () => {\n // Only pass permission level if it's \"deny_always\"\n onReject?.(\n selectedPermission === \"deny_always\" ? \"deny_always\" : undefined,\n );\n };\n\n // Approved state\n if (state === \"approved\") {\n return (\n <div\n className={cn(\n \"flex items-center gap-2 px-4 py-2 text-sm text-green-600 dark:text-green-400 rounded-lg border bg-green-50 dark:bg-green-950/20\",\n className,\n )}\n >\n <CheckIcon className=\"h-4 w-4\" />\n <span>Approved</span>\n </div>\n );\n }\n\n // Rejected state\n if (state === \"rejected\") {\n return (\n <div\n className={cn(\n \"flex items-center gap-2 px-4 py-2 text-sm text-red-600 dark:text-red-400 rounded-lg border bg-red-50 dark:bg-red-950/20\",\n className,\n )}\n >\n <XIcon className=\"h-4 w-4\" />\n <span>Rejected</span>\n </div>\n );\n }\n\n // Pending state - show confirmation UI\n return (\n <div\n className={cn(\n \"rounded-lg border bg-card text-card-foreground p-4\",\n className,\n )}\n >\n {/* Header with tool name */}\n <div className=\"flex items-start gap-3 mb-3\">\n <AlertTriangleIcon className=\"mt-0.5 h-5 w-5 flex-shrink-0 text-amber-500\" />\n <div className=\"flex-1 min-w-0\">\n {toolName && (\n <p className=\"text-sm font-medium text-foreground\">{toolName}</p>\n )}\n <p className=\"text-sm text-muted-foreground\">\n {message || \"This tool requires your approval to execute.\"}\n </p>\n </div>\n </div>\n\n {/* Permission options */}\n {showPermissionOptions && (\n <div className=\"mb-4\">\n <button\n type=\"button\"\n onClick={() => setShowOptions(!showOptions)}\n className=\"flex items-center gap-2 text-sm text-muted-foreground hover:text-foreground transition-colors\"\n >\n <span>\n {\n permissionOptions.find((o) => o.value === selectedPermission)\n ?.label\n }\n </span>\n <svg\n className={cn(\n \"h-4 w-4 transition-transform\",\n showOptions && \"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 {showOptions && (\n <div className=\"mt-2 space-y-1 pl-1\">\n {permissionOptions.map((option) => (\n <label\n key={option.value}\n className={cn(\n \"flex items-start gap-2 p-2 rounded-md cursor-pointer transition-colors\",\n selectedPermission === option.value\n ? \"bg-primary/10\"\n : \"hover:bg-muted/50\",\n )}\n >\n <input\n type=\"radio\"\n name=\"permission\"\n value={option.value}\n checked={selectedPermission === option.value}\n onChange={() => setSelectedPermission(option.value)}\n className=\"mt-0.5\"\n />\n <div>\n <div className=\"text-sm font-medium\">{option.label}</div>\n {option.description && (\n <div className=\"text-xs text-muted-foreground\">\n {option.description}\n </div>\n )}\n </div>\n </label>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* Action buttons */}\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleReject}>\n Deny\n </Button>\n <Button variant=\"default\" size=\"sm\" onClick={handleApprove}>\n Allow\n </Button>\n </div>\n </div>\n );\n}\n\n// ============================================\n// CompactPermissionConfirmation Component\n// ============================================\n\nexport interface CompactPermissionConfirmationProps {\n /** Current state: pending, approved, or rejected */\n state: ConfirmationState;\n /** Message to display */\n message?: string;\n /** Called when user approves */\n onApprove?: (permissionLevel: PermissionLevel) => void;\n /** Called when user rejects */\n onReject?: (permissionLevel?: PermissionLevel) => void;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * CompactPermissionConfirmation - Simpler version with \"Don't ask again\" checkbox\n *\n * @example\n * ```tsx\n * <CompactPermissionConfirmation\n * state=\"pending\"\n * message=\"Take a screenshot?\"\n * onApprove={(level) => approveToolExecution(tool.id, level)}\n * onReject={(level) => rejectToolExecution(tool.id, undefined, level)}\n * />\n * ```\n */\nexport function CompactPermissionConfirmation({\n state,\n message,\n onApprove,\n onReject,\n className,\n}: CompactPermissionConfirmationProps) {\n const [rememberChoice, setRememberChoice] = React.useState(false);\n\n const handleApprove = () => {\n onApprove?.(rememberChoice ? \"allow_always\" : \"ask\");\n };\n\n const handleReject = () => {\n onReject?.(rememberChoice ? \"deny_always\" : undefined);\n };\n\n // Approved state\n if (state === \"approved\") {\n return (\n <div\n className={cn(\n \"flex items-center gap-2 px-4 py-2 text-sm text-green-600 dark:text-green-400\",\n className,\n )}\n >\n <CheckIcon className=\"h-4 w-4\" />\n <span>Approved</span>\n </div>\n );\n }\n\n // Rejected state\n if (state === \"rejected\") {\n return (\n <div\n className={cn(\n \"flex items-center gap-2 px-4 py-2 text-sm text-red-600 dark:text-red-400\",\n className,\n )}\n >\n <XIcon className=\"h-4 w-4\" />\n <span>Rejected</span>\n </div>\n );\n }\n\n // Pending state\n return (\n <div\n className={cn(\n \"rounded-lg border bg-card text-card-foreground p-4\",\n className,\n )}\n >\n <div className=\"flex items-start gap-3 mb-3\">\n <AlertTriangleIcon className=\"mt-0.5 h-5 w-5 flex-shrink-0 text-amber-500\" />\n <p className=\"text-sm text-foreground\">\n {message || \"This action requires your approval.\"}\n </p>\n </div>\n\n <div className=\"flex items-center justify-between\">\n <label className=\"flex items-center gap-2 text-sm text-muted-foreground cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={rememberChoice}\n onChange={(e) => setRememberChoice(e.target.checked)}\n className=\"rounded border-gray-300\"\n />\n Don't ask again\n </label>\n\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleReject}>\n Deny\n </Button>\n <Button variant=\"default\" size=\"sm\" onClick={handleApprove}>\n Allow\n </Button>\n </div>\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 { 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=\"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=\"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 \"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 \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2\",\n \"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\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\n // Find selected thread\n const selectedThread = React.useMemo(() => {\n if (!value) return null;\n return threads.find((t) => t.id === value) ?? null;\n }, [value, threads]);\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 return (\n <Popover open={isOpen} onOpenChange={setIsOpen}>\n <PopoverTrigger\n disabled={disabled || loading}\n className={cn(\n \"flex items-center gap-1 w-full\",\n disabled && \"opacity-50 cursor-not-allowed\",\n className,\n buttonClassName,\n )}\n >\n <div className=\"flex items-center gap-1 text-xs \">\n {loading ? (\n <span className=\"text-muted-foreground\">Loading...</span>\n ) : selectedThread ? (\n <span className=\"truncate font-medium text-muted-foreground hover:text-foreground\">\n {selectedThread.title || \"Untitled conversation\"}\n </span>\n ) : (\n <span className=\"text-muted-foreground\">{placeholder}</span>\n )}\n </div>\n\n <ChevronIcon\n className={cn(\n \"flex-shrink-0 size-3 text-muted-foreground transition-transform\",\n isOpen && \"rotate-180\",\n )}\n />\n </PopoverTrigger>\n\n <PopoverContent\n align=\"start\"\n className={cn(\n \"w-[var(--anchor-width)] min-w-[250px] p-0 max-h-[300px] 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 {threads.length > 0 ? (\n threads.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 onDeleteThread(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 );\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 { 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 type { ChatMessage, MessageAttachment, ToolRenderers } from \"./types\";\nimport type { ToolDefinition, ToolRenderProps } from \"../../../../core\";\nimport CopilotSDKLogo from \"../../icons/copilot-sdk-logo\";\n\ntype DefaultMessageProps = {\n message: ChatMessage;\n userAvatar: { src?: string; fallback?: string; component?: React.ReactNode };\n assistantAvatar: {\n src?: string;\n fallback?: string;\n component?: React.ReactNode;\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) - higher priority than tool.render */\n toolRenderers?: ToolRenderers;\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};\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 onApproveToolExecution,\n onRejectToolExecution,\n showFollowUps = true,\n onFollowUpClick,\n followUpClassName,\n followUpButtonClassName,\n}: DefaultMessageProps) {\n const isUser = message.role === \"user\";\n const isStreaming = isLastMessage && isLoading;\n\n // Parse follow-up questions from assistant messages\n const { cleanContent, followUps } = 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 // 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 // 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 \"flex gap-2\",\n showUserAvatar ? \"justify-end\" : \"justify-end\",\n )}\n >\n <div className=\"flex flex-col items-end max-w-[80%]\">\n {/* Text content */}\n {message.content && (\n <MessageContent\n className={cn(\n \"csdk-message-user rounded-lg px-4 py-2 bg-primary text-primary-foreground\",\n userMessageClassName,\n )}\n markdown\n size={size}\n >\n {message.content}\n </MessageContent>\n )}\n {/* Image Attachments */}\n {hasAttachments && (\n <div className=\"mt-2 flex flex-wrap gap-2 justify-end\">\n {message.attachments!.map((attachment, index) => (\n <AttachmentPreview key={index} attachment={attachment} />\n ))}\n </div>\n )}\n </div>\n {showUserAvatar && (\n <MessageAvatar\n src={userAvatar.src}\n alt=\"User\"\n fallback={userAvatar.fallback}\n >\n {userAvatar.component}\n </MessageAvatar>\n )}\n </Message>\n );\n }\n\n // Separate tool executions into categories\n const pendingApprovalTools = message.toolExecutions?.filter(\n (exec) => exec.approvalStatus === \"required\",\n );\n const completedTools = message.toolExecutions?.filter(\n (exec) => exec.approvalStatus !== \"required\",\n );\n\n // Helper: check if tool has any custom render (toolRenderers or tool.render)\n const hasCustomRender = (toolName: string): boolean => {\n if (toolRenderers?.[toolName]) return true;\n const toolDef = registeredTools?.find((t) => t.name === toolName);\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),\n );\n const toolsWithoutCustomRender = completedTools?.filter(\n (exec) => !hasCustomRender(exec.name),\n );\n\n // Convert tools without custom render to ToolStepData format\n const toolSteps = toolsWithoutCustomRender?.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=\"flex gap-2\">\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=\"bg-muted\"\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) */}\n {isLastMessage && isProcessing ? (\n <div className=\"rounded-lg bg-muted px-4 py-2 flex items-center gap-2\">\n <Loader variant=\"dots\" size=\"sm\" />\n <span className=\"text-sm text-muted-foreground\">Continuing...</span>\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: toolRenderers > tool.render */}\n {toolsWithCustomRender && toolsWithCustomRender.length > 0 && (\n <div className=\"mt-2 space-y-2\">\n {toolsWithCustomRender.map((exec) => {\n // PRIORITY 1: toolRenderers (app-level override)\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 }}\n />\n );\n }\n\n // PRIORITY 2: tool's own render function\n const toolDef = registeredTools?.find(\n (t) => t.name === exec.name,\n );\n if (toolDef?.render) {\n // Map execution status to ToolRenderProps status\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 return (\n <React.Fragment key={exec.id}>{output}</React.Fragment>\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 className=\"mt-2 rounded-lg bg-muted/50 px-3 py-2\">\n <ToolSteps steps={toolSteps} />\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.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 {/* Image Attachments */}\n {message.attachments && message.attachments.length > 0 && (\n <div className=\"mt-2 flex flex-wrap gap-2\">\n {message.attachments.map((attachment, index) => (\n <AttachmentPreview key={index} attachment={attachment} />\n ))}\n </div>\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 )}\n </div>\n </Message>\n );\n}\n\n/**\n * Attachment preview component\n */\nfunction AttachmentPreview({ attachment }: { attachment: MessageAttachment }) {\n const [expanded, setExpanded] = React.useState(false);\n\n if (attachment.type !== \"image\") {\n // For non-image attachments, show a simple file indicator\n return (\n <div className=\"flex items-center gap-2 rounded-lg border bg-muted/50 px-3 py-2 text-sm\">\n <span className=\"text-muted-foreground\">{attachment.type}</span>\n <span>{attachment.filename || \"Attachment\"}</span>\n </div>\n );\n }\n\n // Image preview - use URL if available, otherwise use base64 data\n let src: string;\n if (attachment.url) {\n src = attachment.url;\n } else if (attachment.data) {\n src = attachment.data.startsWith(\"data:\")\n ? attachment.data\n : `data:${attachment.mimeType};base64,${attachment.data}`;\n } else {\n // No source available - shouldn't happen but handle gracefully\n return null;\n }\n\n return (\n <>\n <button\n type=\"button\"\n onClick={() => setExpanded(true)}\n className=\"relative rounded-lg overflow-hidden border bg-muted/50 hover:opacity-90 transition-opacity\"\n >\n <img\n src={src}\n alt={attachment.filename || \"Image\"}\n className=\"max-w-[200px] max-h-[150px] object-cover\"\n />\n </button>\n\n {/* Fullscreen modal */}\n {expanded && (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/80\"\n onClick={() => setExpanded(false)}\n >\n <div className=\"relative max-w-[90vw] max-h-[90vh]\">\n <img\n src={src}\n alt={attachment.filename || \"Image (expanded)\"}\n className=\"max-w-full max-h-full object-contain rounded-lg\"\n />\n <button\n type=\"button\"\n className=\"absolute top-2 right-2 bg-white/90 rounded-full p-2 hover:bg-white transition-colors\"\n onClick={(e) => {\n e.stopPropagation();\n setExpanded(false);\n }}\n >\n <svg\n className=\"w-4 h-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=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\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=\"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=\"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\";\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 // 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 // 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 processAttachment: processAttachmentProp,\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 onApproveToolExecution,\n onRejectToolExecution,\n // Follow-up Questions\n showFollowUps = true,\n followUpClassName,\n followUpButtonClassName,\n // Custom rendering\n renderMessage,\n renderInput,\n renderHeader,\n // Styling\n className,\n classNames = {},\n // Thread management for compound components\n onNewChat,\n threads,\n currentThreadId,\n onSwitchThread,\n isThreadBusy,\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 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 if (processAttachmentProp) {\n // Use provided processor (e.g., cloud storage upload)\n attachment = await processAttachmentProp(file);\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 [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 // 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 // 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 // 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 onNewChat,\n threads,\n currentThreadId,\n onSwitchThread,\n onDeleteThread,\n isThreadBusy,\n ],\n );\n\n return (\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 */}\n {isDragging && (\n <div className=\"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 {/* 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={processAttachmentProp}\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 {messages.map((message, index) => {\n const isLastMessage = index === messages.length - 1;\n const isEmptyAssistant =\n message.role === \"assistant\" && !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 = 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 ? { ...message, toolExecutions: messageToolExecutions }\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 return renderMessage ? (\n <React.Fragment key={message.id}>\n {renderMessage(messageWithExecutions, index)}\n </React.Fragment>\n ) : (\n <DefaultMessage\n key={message.id}\n message={messageWithExecutions}\n userAvatar={userAvatar}\n assistantAvatar={assistantAvatar}\n showUserAvatar={showUserAvatar}\n userMessageClassName={classNames.userMessage}\n assistantMessageClassName={classNames.assistantMessage}\n size={fontSize}\n isLastMessage={isLastMessage}\n isLoading={isLoading}\n isProcessing={isProcessing}\n loaderVariant={loaderVariant}\n registeredTools={registeredTools}\n toolRenderers={toolRenderers}\n onApproveToolExecution={onApproveToolExecution}\n onRejectToolExecution={onRejectToolExecution}\n showFollowUps={showFollowUps}\n onFollowUpClick={handleFollowUpClick}\n followUpClassName={followUpClassName}\n followUpButtonClassName={followUpButtonClassName}\n />\n );\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=\"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 {/* 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=\"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=\"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 );\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});\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 { 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 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 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 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 </div>\n </Message>\n );\n}\n","\"use client\";\n\n/**\n * useInternalThreadManager - Internal hook for CopilotChat persistence\n *\n * Encapsulates all thread management logic:\n * - Message format conversion (UIMessage ↔ Message)\n * - Auto-save on streaming complete\n * - Auto-restore last thread on mount\n * - Thread switch/create handlers\n * - Refs to prevent duplicate saves\n *\n * This is an internal hook used by CopilotChat when persistence is enabled.\n */\n\nimport { useCallback, useEffect, 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\nexport interface UseInternalThreadManagerConfig {\n /** Storage adapter for persistence */\n adapter?: ThreadStorageAdapter | AsyncThreadStorageAdapter;\n /** Debounce delay for auto-save (ms) */\n saveDebounce?: number;\n /** Whether to auto-restore the last active thread */\n autoRestoreLastThread?: boolean;\n /** Callback when thread changes */\n onThreadChange?: (threadId: string | null) => void;\n}\n\nexport interface UseInternalThreadManagerReturn {\n /** Thread manager state and actions */\n threadManager: ReturnType<typeof useThreadManager>;\n /** Handler for switching threads */\n handleSwitchThread: (threadId: string) => Promise<void>;\n /** Handler for creating new threads */\n handleNewThread: () => Promise<void>;\n /** Whether thread operations should be disabled (during streaming) */\n isBusy: boolean;\n}\n\n/**\n * Internal thread manager hook for CopilotChat\n *\n * This hook manages the synchronization between CopilotProvider's messages\n * and the thread storage system.\n */\nexport function useInternalThreadManager(\n config: UseInternalThreadManagerConfig = {},\n): UseInternalThreadManagerReturn {\n const {\n adapter,\n saveDebounce = 1000,\n autoRestoreLastThread = true,\n onThreadChange,\n } = config;\n\n // Thread management\n const threadManagerConfig: UseThreadManagerConfig = {\n adapter,\n saveDebounce,\n autoRestoreLastThread,\n };\n\n const threadManager = useThreadManager(threadManagerConfig);\n const {\n currentThread,\n currentThreadId,\n createThread,\n switchThread,\n updateCurrentThread,\n clearCurrentThread,\n refreshThreads,\n } = threadManager;\n\n // Get copilot context for setMessages and status\n const { messages, setMessages, status, isLoading } = useCopilot();\n\n // Track if we're in the middle of loading messages from a thread switch\n const isLoadingMessagesRef = useRef(false);\n // Track the thread ID we're saving to (to prevent saving to wrong thread)\n const savingToThreadRef = useRef<string | null>(null);\n // Track last saved message snapshot (IDs + content hash) to prevent duplicate saves\n const lastSavedSnapshotRef = useRef<string>(\"\");\n // Track if initial load has happened (for auto-restore)\n const hasInitializedRef = useRef(false);\n\n // Generate a snapshot key from messages for comparison\n // Uses ID + content hash to detect actual changes\n const getMessageSnapshot = useCallback((msgs: typeof messages) => {\n return msgs\n .map((m) => {\n // Simple hash: first 20 chars + length for uniqueness without full comparison\n const contentPreview = (m.content ?? \"\").slice(0, 20);\n return `${m.id}:${contentPreview}:${m.content?.length ?? 0}`;\n })\n .join(\"|\");\n }, []);\n\n // Convert UIMessage to core Message format\n const convertToCore = useCallback((msgs: typeof messages) => {\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 metadata: {\n attachments: m.attachments,\n thinking: m.thinking,\n },\n }));\n }, []);\n\n // Handle thread switch - load saved messages\n const handleSwitchThread = useCallback(\n async (threadId: string) => {\n isLoadingMessagesRef.current = true;\n\n const thread = await switchThread(threadId);\n if (thread?.messages) {\n const uiMessages: UIMessage[] = thread.messages.map((m) => ({\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 attachments: m.metadata?.attachments,\n }));\n lastSavedSnapshotRef.current = getMessageSnapshot(uiMessages);\n savingToThreadRef.current = threadId;\n setMessages(uiMessages);\n } else {\n lastSavedSnapshotRef.current = \"\";\n savingToThreadRef.current = threadId;\n setMessages([]);\n }\n\n // Notify thread change\n onThreadChange?.(threadId);\n\n // Reset loading flag after React processes the state update\n requestAnimationFrame(() => {\n isLoadingMessagesRef.current = false;\n });\n },\n [switchThread, setMessages, getMessageSnapshot, onThreadChange],\n );\n\n // Handle new thread - just clear messages, thread is created lazily on first message\n const handleNewThread = useCallback(async () => {\n isLoadingMessagesRef.current = true;\n\n // Don't create thread yet - it will be created automatically when first message is sent\n // This prevents empty threads from being created\n clearCurrentThread();\n lastSavedSnapshotRef.current = \"\";\n savingToThreadRef.current = null;\n setMessages([]);\n\n // Notify thread change (null = new unsaved thread)\n onThreadChange?.(null);\n\n requestAnimationFrame(() => {\n isLoadingMessagesRef.current = false;\n });\n }, [clearCurrentThread, setMessages, onThreadChange]);\n\n // Auto-restore: load messages when thread is restored from storage\n useEffect(() => {\n // Skip if already initialized or no thread restored yet\n if (hasInitializedRef.current || !currentThread) {\n return;\n }\n\n // Mark as initialized\n hasInitializedRef.current = true;\n\n // Load messages from the restored thread\n isLoadingMessagesRef.current = true;\n if (currentThread.messages && currentThread.messages.length > 0) {\n const uiMessages: UIMessage[] = currentThread.messages.map((m) => ({\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 attachments: m.metadata?.attachments,\n }));\n lastSavedSnapshotRef.current = getMessageSnapshot(uiMessages);\n savingToThreadRef.current = currentThread.id;\n setMessages(uiMessages);\n } else {\n lastSavedSnapshotRef.current = \"\";\n savingToThreadRef.current = currentThread.id;\n }\n\n // Notify thread change\n onThreadChange?.(currentThread.id);\n\n requestAnimationFrame(() => {\n isLoadingMessagesRef.current = false;\n });\n }, [currentThread, setMessages, getMessageSnapshot, onThreadChange]);\n\n // Sync messages to storage when streaming completes\n useEffect(() => {\n // Skip if we're loading messages from a thread switch\n if (isLoadingMessagesRef.current) {\n return;\n }\n\n // Skip if still streaming - wait for completion\n if (status === \"streaming\" || status === \"submitted\") {\n return;\n }\n\n // Skip if no messages\n if (messages.length === 0) {\n return;\n }\n\n // Check if messages actually changed\n const currentSnapshot = getMessageSnapshot(messages);\n if (currentSnapshot === lastSavedSnapshotRef.current) {\n return;\n }\n\n const coreMessages = convertToCore(messages);\n\n // If no thread exists, create one with these messages\n if (!currentThreadId && !savingToThreadRef.current) {\n // Set ref immediately to prevent race condition with rapid messages\n savingToThreadRef.current = \"creating\";\n createThread({ messages: coreMessages }).then((thread) => {\n lastSavedSnapshotRef.current = currentSnapshot;\n savingToThreadRef.current = thread.id;\n onThreadChange?.(thread.id);\n });\n return;\n }\n\n // Make sure we're saving to the correct thread\n if (\n savingToThreadRef.current &&\n savingToThreadRef.current !== currentThreadId\n ) {\n return;\n }\n\n // Update existing thread\n updateCurrentThread({ messages: coreMessages });\n lastSavedSnapshotRef.current = currentSnapshot;\n }, [\n messages,\n currentThreadId,\n status,\n updateCurrentThread,\n createThread,\n refreshThreads,\n getMessageSnapshot,\n convertToCore,\n onThreadChange,\n ]);\n\n // Check if chat is busy (disable thread switching during streaming)\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 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 { createServerAdapter } 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 /** 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/**\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 ...chatProps\n } = props;\n\n // Parse persistence config\n const persistenceConfig = parsePersistenceConfig(persistence, onThreadChange);\n\n // Use internal thread manager when persistence is enabled\n const threadManagerResult = useInternalThreadManager(\n persistenceConfig ?? { autoRestoreLastThread: 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 } = 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 }),\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 const visibleMessages = messages\n .filter((m: UIMessage) => m.role !== \"tool\") // Hide tool messages - results merged into assistant\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: true, message: resultContent },\n };\n }\n }\n return exec;\n },\n );\n } else {\n // Build from stored tool_calls + tool messages (historical)\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: true, 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 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: Date.now(), // Historical - use current time\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 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\n toolExecutions: messageToolExecutions,\n };\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 ONLY when we're in an active tool flow\n // Condition: Last message must be assistant with tool_calls (not user starting new request)\n const lastMessage = messages[messages.length - 1];\n const isInToolFlow =\n lastMessage?.role === \"assistant\" &&\n (lastMessage as UIMessage).toolCalls?.length;\n\n let isProcessingToolResults = false;\n\n if (isLoading && isInToolFlow) {\n const currentToolCallIds = new Set(\n (lastMessage as UIMessage).toolCalls?.map(\n (tc: { id: string }) => tc.id,\n ) || [],\n );\n const currentExecutions = toolExecutions.filter((exec) =>\n currentToolCallIds.has(exec.id),\n );\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\n // Show \"Continuing...\" only when tools completed and waiting for AI to continue\n isProcessingToolResults = hasCompletedTools && !hasExecutingTools;\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 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 >\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});\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"]}
|
|
1
|
+
{"version":3,"sources":["../../src/ui/lib/utils.ts","../../src/ui/components/ui/loader.tsx","../../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/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/default-message.tsx","../../src/ui/components/composed/chat/chat-welcome.tsx","../../src/ui/components/composed/chat/chat.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"],"names":["twMerge","clsx","jsxs","jsx","Streamdown","code","memo","cva","React","Slot","StickToBottomOriginal","useStickToBottomContext","BaseTooltip","React3","AvatarPrimitive","React4","createContext","useContext","useState","useRef","useLayoutEffect","HoverCardPrimitive","React6","getDomain","getFaviconUrl","Globe","React7","ChevronUp","ChevronDown","ExternalLink","React8","React9","React10","ChevronDownIcon","ThumbsUpIcon","ThumbsDownIcon","XIcon","React11","React12","Fragment","React13","BasePopover","React14","formatDate","PlusIcon","CheckIcon","React15","TrashIcon","React16","DEFAULT_MCP_UI_SANDBOX","React17","parseMCPUIMessage","React18","useId","useCallback","DEFAULT_MAX_FILE_SIZE","DEFAULT_ALLOWED_TYPES","getAttachmentType","fileToBase64","generateAttachmentId","useThreadManager","useCopilot","useEffect","createServerAdapter"],"mappings":"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","file":"index.cjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { cn } from \"../../lib/utils\";\n\nexport interface LoaderProps {\n variant?:\n | \"dots\"\n | \"typing\"\n | \"wave\"\n | \"terminal\"\n | \"text-blink\"\n | \"text-shimmer\"\n | \"loading-dots\";\n size?: \"sm\" | \"md\" | \"lg\";\n text?: string;\n className?: string;\n}\n\nexport function DotsLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const dotSizes = {\n sm: \"h-1 w-1\",\n md: \"h-1.5 w-1.5\",\n lg: \"h-2 w-2\",\n };\n\n const containerSizes = {\n sm: \"h-4\",\n md: \"h-5\",\n lg: \"h-6\",\n };\n\n return (\n <div\n className={cn(\n \"flex items-center translate-y-[-2px] space-x-1\",\n containerSizes[size],\n className,\n )}\n >\n {[...Array(3)].map((_, i) => (\n <div\n key={i}\n className={cn(\n \"bg-primary csdk-loader-bounce-dots rounded-full\",\n dotSizes[size],\n )}\n style={{\n animationDelay: `${i * 160}ms`,\n }}\n />\n ))}\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function TypingLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const dotSizes = {\n sm: \"h-1 w-1\",\n md: \"h-1.5 w-1.5\",\n lg: \"h-2 w-2\",\n };\n\n const containerSizes = {\n sm: \"h-4\",\n md: \"h-5\",\n lg: \"h-6\",\n };\n\n return (\n <div\n className={cn(\n \"flex items-center space-x-1\",\n containerSizes[size],\n className,\n )}\n >\n {[...Array(3)].map((_, i) => (\n <div\n key={i}\n className={cn(\n \"bg-primary csdk-loader-typing rounded-full\",\n dotSizes[size],\n )}\n style={{\n animationDelay: `${i * 250}ms`,\n }}\n />\n ))}\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function WaveLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const barWidths = {\n sm: \"w-0.5\",\n md: \"w-0.5\",\n lg: \"w-1\",\n };\n\n const containerSizes = {\n sm: \"h-4\",\n md: \"h-5\",\n lg: \"h-6\",\n };\n\n const heights = {\n sm: [\"6px\", \"9px\", \"12px\", \"9px\", \"6px\"],\n md: [\"8px\", \"12px\", \"16px\", \"12px\", \"8px\"],\n lg: [\"10px\", \"15px\", \"20px\", \"15px\", \"10px\"],\n };\n\n return (\n <div\n className={cn(\n \"flex items-center gap-0.5\",\n containerSizes[size],\n className,\n )}\n >\n {[...Array(5)].map((_, i) => (\n <div\n key={i}\n className={cn(\n \"bg-primary csdk-loader-wave rounded-full\",\n barWidths[size],\n )}\n style={{\n animationDelay: `${i * 100}ms`,\n height: heights[size][i],\n }}\n />\n ))}\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function TerminalLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const cursorSizes = {\n sm: \"h-3 w-1.5\",\n md: \"h-4 w-2\",\n lg: \"h-5 w-2.5\",\n };\n\n const textSizes = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n };\n\n const containerSizes = {\n sm: \"h-4\",\n md: \"h-5\",\n lg: \"h-6\",\n };\n\n return (\n <div\n className={cn(\n \"flex items-center space-x-1\",\n containerSizes[size],\n className,\n )}\n >\n <span className={cn(\"text-primary font-mono\", textSizes[size])}>\n {\">\"}\n </span>\n <div className={cn(\"bg-primary csdk-loader-blink\", cursorSizes[size])} />\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function TextBlinkLoader({\n text = \"Thinking\",\n className,\n size = \"md\",\n}: {\n text?: string;\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const textSizes = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n };\n\n return (\n <div\n className={cn(\n \"csdk-loader-text-blink font-medium\",\n textSizes[size],\n className,\n )}\n >\n {text}\n </div>\n );\n}\n\nexport function TextShimmerLoader({\n text = \"Thinking\",\n className,\n size = \"md\",\n}: {\n text?: string;\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const textSizes = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n };\n\n return (\n <div\n className={cn(\n \"bg-[linear-gradient(to_right,var(--muted-foreground)_40%,var(--foreground)_60%,var(--muted-foreground)_80%)]\",\n \"bg-[length:200%_auto] bg-clip-text font-medium text-transparent\",\n \"csdk-loader-shimmer\",\n textSizes[size],\n className,\n )}\n >\n {text}\n </div>\n );\n}\n\nexport function TextDotsLoader({\n className,\n text = \"Thinking\",\n size = \"md\",\n}: {\n className?: string;\n text?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const textSizes = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n };\n\n return (\n <div className={cn(\"inline-flex items-center\", className)}>\n <span className={cn(\"text-primary font-medium\", textSizes[size])}>\n {text}\n </span>\n <span className=\"inline-flex\">\n <span\n className=\"text-primary csdk-loader-loading-dots\"\n style={{ animationDelay: \"0.2s\" }}\n >\n .\n </span>\n <span\n className=\"text-primary csdk-loader-loading-dots\"\n style={{ animationDelay: \"0.4s\" }}\n >\n .\n </span>\n <span\n className=\"text-primary csdk-loader-loading-dots\"\n style={{ animationDelay: \"0.6s\" }}\n >\n .\n </span>\n </span>\n </div>\n );\n}\n\nfunction Loader({\n variant = \"typing\",\n size = \"md\",\n text,\n className,\n}: LoaderProps) {\n switch (variant) {\n case \"dots\":\n return <DotsLoader size={size} className={className} />;\n case \"typing\":\n return <TypingLoader size={size} className={className} />;\n case \"wave\":\n return <WaveLoader size={size} className={className} />;\n case \"terminal\":\n return <TerminalLoader size={size} className={className} />;\n case \"text-blink\":\n return <TextBlinkLoader text={text} size={size} className={className} />;\n case \"text-shimmer\":\n return (\n <TextShimmerLoader text={text} size={size} className={className} />\n );\n case \"loading-dots\":\n return <TextDotsLoader text={text} size={size} className={className} />;\n default:\n return <TypingLoader size={size} className={className} />;\n }\n}\n\nexport { Loader };\n","import { memo, ComponentProps } from \"react\";\nimport { Streamdown } from \"streamdown\";\nimport { code } from \"@streamdown/code\";\n\nexport type MarkdownProps = {\n children: string;\n id?: string;\n className?: string;\n isStreaming?: boolean;\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}: MarkdownProps) {\n return (\n <div className={className}>\n <Streamdown\n plugins={{ code }}\n isAnimating={isStreaming}\n components={headingComponents}\n >\n {children}\n </Streamdown>\n </div>\n );\n}\n\nconst Markdown = memo(MarkdownComponent);\nMarkdown.displayName = \"Markdown\";\n\nexport { Markdown };\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 leading-relaxed overflow-x-auto overflow-y-hidden\",\n // Typography - simple Tailwind utilities (no prose)\n \"[&_p]:my-1 [&_p]:leading-relaxed\",\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-start gap-2\">\n {/* Status indicator - only show for non-executing states */}\n {!isExecuting && (\n <StatusIndicator status={step.status} className=\"mt-0.5\" />\n )}\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 { Button } from \"./button\";\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 \"confirmation rounded-lg border bg-card text-card-foreground\",\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(\"p-4\", 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 \"flex items-center gap-2 px-4 py-2 text-sm text-green-600 dark:text-green-400\",\n className,\n )}\n >\n <CheckIcon className=\"h-4 w-4\" />\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 \"flex items-center gap-2 px-4 py-2 text-sm text-red-600 dark:text-red-400\",\n className,\n )}\n >\n <XIcon className=\"h-4 w-4\" />\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 <AlertTriangleIcon className=\"mt-0.5 h-5 w-5 flex-shrink-0 text-amber-500\" />\n <p className=\"text-sm text-foreground\">\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 <div className={cn(\"mt-3 flex justify-end gap-2\", className)}>\n <Button variant=\"outline\" size=\"sm\" onClick={onReject}>\n {rejectLabel}\n </Button>\n <Button variant=\"default\" size=\"sm\" onClick={onApprove}>\n {approveLabel}\n </Button>\n </div>\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 * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"./button\";\nimport { CheckIcon, XIcon, AlertTriangleIcon } from \"../icons\";\n\n// ============================================\n// Types\n// ============================================\n\n/**\n * Permission level for tool execution\n */\nexport type PermissionLevel =\n | \"ask\"\n | \"allow_always\"\n | \"deny_always\"\n | \"session\";\n\n/**\n * Permission option for dropdown/selection\n */\nexport interface PermissionOption {\n value: PermissionLevel;\n label: string;\n description?: string;\n}\n\n/**\n * Default permission options\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 /** Current state: pending, approved, or rejected */\n state: ConfirmationState;\n /** Tool name */\n toolName?: string;\n /** Message to display */\n message?: string;\n /** Called when user approves with permission level */\n onApprove?: (permissionLevel: PermissionLevel) => void;\n /** Called when user rejects with permission level */\n onReject?: (permissionLevel?: PermissionLevel) => void;\n /** Show permission options (default: true) */\n showPermissionOptions?: boolean;\n /** Available permission options */\n permissionOptions?: PermissionOption[];\n /** Additional class name */\n className?: string;\n}\n\n/**\n * PermissionConfirmation - Enhanced confirmation with permission level selection\n *\n * Shows a confirmation dialog for tool approval with options to remember the choice.\n *\n * @example\n * ```tsx\n * <PermissionConfirmation\n * state=\"pending\"\n * toolName=\"capture_screenshot\"\n * message=\"Take a screenshot of the current screen?\"\n * onApprove={(level) => approveToolExecution(tool.id, level)}\n * onReject={(level) => rejectToolExecution(tool.id, undefined, level)}\n * />\n * ```\n */\nexport function PermissionConfirmation({\n state,\n toolName,\n message,\n onApprove,\n onReject,\n showPermissionOptions = true,\n permissionOptions = DEFAULT_PERMISSION_OPTIONS,\n className,\n}: PermissionConfirmationProps) {\n const [selectedPermission, setSelectedPermission] =\n React.useState<PermissionLevel>(\"ask\");\n const [showOptions, setShowOptions] = React.useState(false);\n\n const handleApprove = () => {\n onApprove?.(selectedPermission);\n };\n\n const handleReject = () => {\n // Only pass permission level if it's \"deny_always\"\n onReject?.(\n selectedPermission === \"deny_always\" ? \"deny_always\" : undefined,\n );\n };\n\n // Approved state\n if (state === \"approved\") {\n return (\n <div\n className={cn(\n \"flex items-center gap-2 px-4 py-2 text-sm text-green-600 dark:text-green-400 rounded-lg border bg-green-50 dark:bg-green-950/20\",\n className,\n )}\n >\n <CheckIcon className=\"h-4 w-4\" />\n <span>Approved</span>\n </div>\n );\n }\n\n // Rejected state\n if (state === \"rejected\") {\n return (\n <div\n className={cn(\n \"flex items-center gap-2 px-4 py-2 text-sm text-red-600 dark:text-red-400 rounded-lg border bg-red-50 dark:bg-red-950/20\",\n className,\n )}\n >\n <XIcon className=\"h-4 w-4\" />\n <span>Rejected</span>\n </div>\n );\n }\n\n // Pending state - show confirmation UI\n return (\n <div\n className={cn(\n \"rounded-lg border bg-card text-card-foreground p-4\",\n className,\n )}\n >\n {/* Header with tool name */}\n <div className=\"flex items-start gap-3 mb-3\">\n <AlertTriangleIcon className=\"mt-0.5 h-5 w-5 flex-shrink-0 text-amber-500\" />\n <div className=\"flex-1 min-w-0\">\n {toolName && (\n <p className=\"text-sm font-medium text-foreground\">{toolName}</p>\n )}\n <p className=\"text-sm text-muted-foreground\">\n {message || \"This tool requires your approval to execute.\"}\n </p>\n </div>\n </div>\n\n {/* Permission options */}\n {showPermissionOptions && (\n <div className=\"mb-4\">\n <button\n type=\"button\"\n onClick={() => setShowOptions(!showOptions)}\n className=\"flex items-center gap-2 text-sm text-muted-foreground hover:text-foreground transition-colors\"\n >\n <span>\n {\n permissionOptions.find((o) => o.value === selectedPermission)\n ?.label\n }\n </span>\n <svg\n className={cn(\n \"h-4 w-4 transition-transform\",\n showOptions && \"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 {showOptions && (\n <div className=\"mt-2 space-y-1 pl-1\">\n {permissionOptions.map((option) => (\n <label\n key={option.value}\n className={cn(\n \"flex items-start gap-2 p-2 rounded-md cursor-pointer transition-colors\",\n selectedPermission === option.value\n ? \"bg-primary/10\"\n : \"hover:bg-muted/50\",\n )}\n >\n <input\n type=\"radio\"\n name=\"permission\"\n value={option.value}\n checked={selectedPermission === option.value}\n onChange={() => setSelectedPermission(option.value)}\n className=\"mt-0.5\"\n />\n <div>\n <div className=\"text-sm font-medium\">{option.label}</div>\n {option.description && (\n <div className=\"text-xs text-muted-foreground\">\n {option.description}\n </div>\n )}\n </div>\n </label>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* Action buttons */}\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleReject}>\n Deny\n </Button>\n <Button variant=\"default\" size=\"sm\" onClick={handleApprove}>\n Allow\n </Button>\n </div>\n </div>\n );\n}\n\n// ============================================\n// CompactPermissionConfirmation Component\n// ============================================\n\nexport interface CompactPermissionConfirmationProps {\n /** Current state: pending, approved, or rejected */\n state: ConfirmationState;\n /** Message to display */\n message?: string;\n /** Called when user approves */\n onApprove?: (permissionLevel: PermissionLevel) => void;\n /** Called when user rejects */\n onReject?: (permissionLevel?: PermissionLevel) => void;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * CompactPermissionConfirmation - Simpler version with \"Don't ask again\" checkbox\n *\n * @example\n * ```tsx\n * <CompactPermissionConfirmation\n * state=\"pending\"\n * message=\"Take a screenshot?\"\n * onApprove={(level) => approveToolExecution(tool.id, level)}\n * onReject={(level) => rejectToolExecution(tool.id, undefined, level)}\n * />\n * ```\n */\nexport function CompactPermissionConfirmation({\n state,\n message,\n onApprove,\n onReject,\n className,\n}: CompactPermissionConfirmationProps) {\n const [rememberChoice, setRememberChoice] = React.useState(false);\n\n const handleApprove = () => {\n onApprove?.(rememberChoice ? \"allow_always\" : \"ask\");\n };\n\n const handleReject = () => {\n onReject?.(rememberChoice ? \"deny_always\" : undefined);\n };\n\n // Approved state\n if (state === \"approved\") {\n return (\n <div\n className={cn(\n \"flex items-center gap-2 px-4 py-2 text-sm text-green-600 dark:text-green-400\",\n className,\n )}\n >\n <CheckIcon className=\"h-4 w-4\" />\n <span>Approved</span>\n </div>\n );\n }\n\n // Rejected state\n if (state === \"rejected\") {\n return (\n <div\n className={cn(\n \"flex items-center gap-2 px-4 py-2 text-sm text-red-600 dark:text-red-400\",\n className,\n )}\n >\n <XIcon className=\"h-4 w-4\" />\n <span>Rejected</span>\n </div>\n );\n }\n\n // Pending state\n return (\n <div\n className={cn(\n \"rounded-lg border bg-card text-card-foreground p-4\",\n className,\n )}\n >\n <div className=\"flex items-start gap-3 mb-3\">\n <AlertTriangleIcon className=\"mt-0.5 h-5 w-5 flex-shrink-0 text-amber-500\" />\n <p className=\"text-sm text-foreground\">\n {message || \"This action requires your approval.\"}\n </p>\n </div>\n\n <div className=\"flex items-center justify-between\">\n <label className=\"flex items-center gap-2 text-sm text-muted-foreground cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={rememberChoice}\n onChange={(e) => setRememberChoice(e.target.checked)}\n className=\"rounded border-gray-300\"\n />\n Don't ask again\n </label>\n\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleReject}>\n Deny\n </Button>\n <Button variant=\"default\" size=\"sm\" onClick={handleApprove}>\n Allow\n </Button>\n </div>\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 { 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=\"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=\"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 \"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 \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2\",\n \"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\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\n // Find selected thread\n const selectedThread = React.useMemo(() => {\n if (!value) return null;\n return threads.find((t) => t.id === value) ?? null;\n }, [value, threads]);\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 return (\n <Popover open={isOpen} onOpenChange={setIsOpen}>\n <PopoverTrigger\n disabled={disabled || loading}\n className={cn(\n \"flex items-center gap-1 w-full\",\n disabled && \"opacity-50 cursor-not-allowed\",\n className,\n buttonClassName,\n )}\n >\n <div className=\"flex items-center gap-1 text-xs \">\n {loading ? (\n <span className=\"text-muted-foreground\">Loading...</span>\n ) : selectedThread ? (\n <span className=\"truncate font-medium text-muted-foreground hover:text-foreground\">\n {selectedThread.title || \"Untitled conversation\"}\n </span>\n ) : (\n <span className=\"text-muted-foreground\">{placeholder}</span>\n )}\n </div>\n\n <ChevronIcon\n className={cn(\n \"flex-shrink-0 size-3 text-muted-foreground transition-transform\",\n isOpen && \"rotate-180\",\n )}\n />\n </PopoverTrigger>\n\n <PopoverContent\n align=\"start\"\n className={cn(\n \"w-[var(--anchor-width)] min-w-[250px] p-0 max-h-[300px] 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 {threads.length > 0 ? (\n threads.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 onDeleteThread(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 );\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=\"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 * as React from \"react\";\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 CitationConfig,\n} from \"./types\";\nimport type { ToolDefinition, ToolRenderProps } from \"../../../../core\";\nimport CopilotSDKLogo from \"../../icons/copilot-sdk-logo\";\nimport { SourceGroup, type SourceItem } from \"../../ui/source\";\n\ntype DefaultMessageProps = {\n message: ChatMessage;\n userAvatar: { src?: string; fallback?: string; component?: React.ReactNode };\n assistantAvatar: {\n src?: string;\n fallback?: string;\n component?: React.ReactNode;\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) - higher priority than tool.render */\n toolRenderers?: ToolRenderers;\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\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 onApproveToolExecution,\n onRejectToolExecution,\n showFollowUps = true,\n onFollowUpClick,\n followUpClassName,\n followUpButtonClassName,\n citations = { enabled: true },\n}: DefaultMessageProps) {\n const isUser = message.role === \"user\";\n const isStreaming = isLastMessage && isLoading;\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 \"flex gap-2\",\n showUserAvatar ? \"justify-end\" : \"justify-end\",\n )}\n >\n <div className=\"flex flex-col items-end max-w-[80%] min-w-0\">\n {/* Text content */}\n {message.content && (\n <MessageContent\n className={cn(\n \"csdk-message-user rounded-lg px-4 py-2 bg-primary text-primary-foreground\",\n userMessageClassName,\n )}\n markdown\n size={size}\n >\n {message.content}\n </MessageContent>\n )}\n {/* Image Attachments */}\n {hasAttachments && (\n <div className=\"mt-2 flex flex-wrap gap-2 justify-end\">\n {message.attachments!.map((attachment, index) => (\n <AttachmentPreview key={index} attachment={attachment} />\n ))}\n </div>\n )}\n </div>\n {showUserAvatar && (\n <MessageAvatar\n src={userAvatar.src}\n alt=\"User\"\n fallback={userAvatar.fallback}\n >\n {userAvatar.component}\n </MessageAvatar>\n )}\n </Message>\n );\n }\n\n // Helper: check if a tool is hidden (shouldn't appear in UI)\n const isToolHidden = (toolName: string): boolean => {\n const toolDef = registeredTools?.find((t) => t.name === toolName);\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.name),\n );\n const completedTools = message.toolExecutions?.filter(\n (exec) => exec.approvalStatus !== \"required\" && !isToolHidden(exec.name),\n );\n\n // Helper: check if tool has any custom render (toolRenderers or tool.render)\n const hasCustomRender = (toolName: string): boolean => {\n if (toolRenderers?.[toolName]) return true;\n const toolDef = registeredTools?.find((t) => t.name === toolName);\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),\n );\n const toolsWithoutCustomRender = completedTools?.filter(\n (exec) => !hasCustomRender(exec.name),\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=\"flex gap-2\">\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=\"bg-muted\"\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) */}\n {isLastMessage && isProcessing ? (\n <div className=\"rounded-lg bg-muted px-4 py-2 flex items-center gap-2\">\n <Loader variant=\"dots\" size=\"sm\" />\n <span className=\"text-sm text-muted-foreground\">Continuing...</span>\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: toolRenderers > tool.render */}\n {toolsWithCustomRender && toolsWithCustomRender.length > 0 && (\n <div className=\"mt-2 space-y-2\">\n {toolsWithCustomRender.map((exec) => {\n // PRIORITY 1: toolRenderers (app-level override)\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 }}\n />\n );\n }\n\n // PRIORITY 2: tool's own render function\n const toolDef = registeredTools?.find(\n (t) => t.name === exec.name,\n );\n if (toolDef?.render) {\n // Map execution status to ToolRenderProps status\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 return (\n <React.Fragment key={exec.id}>{output}</React.Fragment>\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 className=\"mt-2 rounded-lg bg-muted/50 px-3 py-2\">\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.name))\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 {/* 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.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 {/* Image Attachments */}\n {message.attachments && message.attachments.length > 0 && (\n <div className=\"mt-2 flex flex-wrap gap-2\">\n {message.attachments.map((attachment, index) => (\n <AttachmentPreview key={index} attachment={attachment} />\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 )}\n </div>\n </Message>\n );\n}\n\n/**\n * Attachment preview component\n */\nfunction AttachmentPreview({ attachment }: { attachment: MessageAttachment }) {\n const [expanded, setExpanded] = React.useState(false);\n\n if (attachment.type !== \"image\") {\n // For non-image attachments, show a simple file indicator\n return (\n <div className=\"flex items-center gap-2 rounded-lg border bg-muted/50 px-3 py-2 text-sm\">\n <span className=\"text-muted-foreground\">{attachment.type}</span>\n <span>{attachment.filename || \"Attachment\"}</span>\n </div>\n );\n }\n\n // Image preview - use URL if available, otherwise use base64 data\n let src: string;\n if (attachment.url) {\n src = attachment.url;\n } else if (attachment.data) {\n src = attachment.data.startsWith(\"data:\")\n ? attachment.data\n : `data:${attachment.mimeType};base64,${attachment.data}`;\n } else {\n // No source available - shouldn't happen but handle gracefully\n return null;\n }\n\n return (\n <>\n <button\n type=\"button\"\n onClick={() => setExpanded(true)}\n className=\"relative rounded-lg overflow-hidden border bg-muted/50 hover:opacity-90 transition-opacity\"\n >\n <img\n src={src}\n alt={attachment.filename || \"Image\"}\n className=\"max-w-[200px] max-h-[150px] object-cover\"\n />\n </button>\n\n {/* Fullscreen modal */}\n {expanded && (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/80\"\n onClick={() => setExpanded(false)}\n >\n <div className=\"relative max-w-[90vw] max-h-[90vh]\">\n <img\n src={src}\n alt={attachment.filename || \"Image (expanded)\"}\n className=\"max-w-full max-h-full object-contain rounded-lg\"\n />\n <button\n type=\"button\"\n className=\"absolute top-2 right-2 bg-white/90 rounded-full p-2 hover:bg-white transition-colors\"\n onClick={(e) => {\n e.stopPropagation();\n setExpanded(false);\n }}\n >\n <svg\n className=\"w-4 h-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=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\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=\"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=\"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\";\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 // 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 // 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 processAttachment: processAttachmentProp,\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 onApproveToolExecution,\n onRejectToolExecution,\n // Follow-up Questions\n showFollowUps = true,\n followUpClassName,\n followUpButtonClassName,\n // Citations/Sources\n citations,\n // Custom rendering\n renderMessage,\n renderInput,\n renderHeader,\n // Styling\n className,\n classNames = {},\n // Thread management for compound components\n onNewChat,\n threads,\n currentThreadId,\n onSwitchThread,\n isThreadBusy,\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 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 if (processAttachmentProp) {\n // Use provided processor (e.g., cloud storage upload)\n attachment = await processAttachmentProp(file);\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 [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 // 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 // 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 // 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 onNewChat,\n threads,\n currentThreadId,\n onSwitchThread,\n onDeleteThread,\n isThreadBusy,\n ],\n );\n\n return (\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 */}\n {isDragging && (\n <div className=\"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 {/* 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={processAttachmentProp}\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 {messages.map((message, index) => {\n const isLastMessage = index === messages.length - 1;\n const isEmptyAssistant =\n message.role === \"assistant\" && !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 = 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 ? { ...message, toolExecutions: messageToolExecutions }\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 return renderMessage ? (\n <React.Fragment key={message.id}>\n {renderMessage(messageWithExecutions, index)}\n </React.Fragment>\n ) : (\n <DefaultMessage\n key={message.id}\n message={messageWithExecutions}\n userAvatar={userAvatar}\n assistantAvatar={assistantAvatar}\n showUserAvatar={showUserAvatar}\n userMessageClassName={classNames.userMessage}\n assistantMessageClassName={classNames.assistantMessage}\n size={fontSize}\n isLastMessage={isLastMessage}\n isLoading={isLoading}\n isProcessing={isProcessing}\n loaderVariant={loaderVariant}\n registeredTools={registeredTools}\n toolRenderers={toolRenderers}\n onApproveToolExecution={onApproveToolExecution}\n onRejectToolExecution={onRejectToolExecution}\n showFollowUps={showFollowUps}\n onFollowUpClick={handleFollowUpClick}\n followUpClassName={followUpClassName}\n followUpButtonClassName={followUpButtonClassName}\n citations={\n citations === false ? { enabled: false } : citations\n }\n />\n );\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=\"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 {/* 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=\"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=\"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 );\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});\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 { 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 * Encapsulates all thread management logic:\n * - Message format conversion (UIMessage ↔ Message)\n * - Auto-save on streaming complete\n * - Auto-restore last thread on mount\n * - Thread switch/create handlers\n * - Refs to prevent duplicate saves\n *\n * This is an internal hook used by CopilotChat when persistence is enabled.\n */\n\nimport { useCallback, useEffect, 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\nexport interface UseInternalThreadManagerConfig {\n /** Storage adapter for persistence */\n adapter?: ThreadStorageAdapter | AsyncThreadStorageAdapter;\n /** Debounce delay for auto-save (ms) */\n saveDebounce?: number;\n /** Whether to auto-restore the last active thread */\n autoRestoreLastThread?: boolean;\n /** Callback when thread changes */\n onThreadChange?: (threadId: string | null) => void;\n}\n\nexport interface UseInternalThreadManagerReturn {\n /** Thread manager state and actions */\n threadManager: ReturnType<typeof useThreadManager>;\n /** Handler for switching threads */\n handleSwitchThread: (threadId: string) => Promise<void>;\n /** Handler for creating new threads */\n handleNewThread: () => Promise<void>;\n /** Whether thread operations should be disabled (during streaming) */\n isBusy: boolean;\n}\n\n/**\n * Internal thread manager hook for CopilotChat\n *\n * This hook manages the synchronization between CopilotProvider's messages\n * and the thread storage system.\n */\nexport function useInternalThreadManager(\n config: UseInternalThreadManagerConfig = {},\n): UseInternalThreadManagerReturn {\n const {\n adapter,\n saveDebounce = 1000,\n autoRestoreLastThread = true,\n onThreadChange,\n } = config;\n\n // Thread management\n const threadManagerConfig: UseThreadManagerConfig = {\n adapter,\n saveDebounce,\n autoRestoreLastThread,\n };\n\n const threadManager = useThreadManager(threadManagerConfig);\n const {\n currentThread,\n currentThreadId,\n createThread,\n switchThread,\n updateCurrentThread,\n clearCurrentThread,\n refreshThreads,\n } = threadManager;\n\n // Get copilot context for setMessages and status\n const { messages, setMessages, status, isLoading } = useCopilot();\n\n // Track if we're in the middle of loading messages from a thread switch\n const isLoadingMessagesRef = useRef(false);\n // Track the thread ID we're saving to (to prevent saving to wrong thread)\n const savingToThreadRef = useRef<string | null>(null);\n // Track last saved message snapshot (IDs + content hash) to prevent duplicate saves\n const lastSavedSnapshotRef = useRef<string>(\"\");\n // Track if initial load has happened (for auto-restore)\n const hasInitializedRef = useRef(false);\n\n // Generate a snapshot key from messages for comparison\n // Uses ID + content hash to detect actual changes\n const getMessageSnapshot = useCallback((msgs: typeof messages) => {\n return msgs\n .map((m) => {\n // Simple hash: first 20 chars + length for uniqueness without full comparison\n const contentPreview = (m.content ?? \"\").slice(0, 20);\n return `${m.id}:${contentPreview}:${m.content?.length ?? 0}`;\n })\n .join(\"|\");\n }, []);\n\n // Convert UIMessage to core Message format\n const convertToCore = useCallback((msgs: typeof messages) => {\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 // Preserve full metadata including citations, toolExecutions, etc.\n metadata: {\n ...m.metadata,\n attachments: m.attachments,\n thinking: m.thinking,\n },\n }));\n }, []);\n\n // Handle thread switch - load saved messages\n const handleSwitchThread = useCallback(\n async (threadId: string) => {\n isLoadingMessagesRef.current = true;\n\n const thread = await switchThread(threadId);\n if (thread?.messages) {\n const uiMessages: UIMessage[] = thread.messages.map((m) => ({\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 attachments: m.metadata?.attachments,\n }));\n lastSavedSnapshotRef.current = getMessageSnapshot(uiMessages);\n savingToThreadRef.current = threadId;\n setMessages(uiMessages);\n } else {\n lastSavedSnapshotRef.current = \"\";\n savingToThreadRef.current = threadId;\n setMessages([]);\n }\n\n // Notify thread change\n onThreadChange?.(threadId);\n\n // Reset loading flag after React processes the state update\n requestAnimationFrame(() => {\n isLoadingMessagesRef.current = false;\n });\n },\n [switchThread, setMessages, getMessageSnapshot, onThreadChange],\n );\n\n // Handle new thread - just clear messages, thread is created lazily on first message\n const handleNewThread = useCallback(async () => {\n isLoadingMessagesRef.current = true;\n\n // Don't create thread yet - it will be created automatically when first message is sent\n // This prevents empty threads from being created\n clearCurrentThread();\n lastSavedSnapshotRef.current = \"\";\n savingToThreadRef.current = null;\n setMessages([]);\n\n // Notify thread change (null = new unsaved thread)\n onThreadChange?.(null);\n\n requestAnimationFrame(() => {\n isLoadingMessagesRef.current = false;\n });\n }, [clearCurrentThread, setMessages, onThreadChange]);\n\n // Auto-restore: load messages when thread is restored from storage\n useEffect(() => {\n // Skip if no adapter (persistence not enabled)\n if (!adapter) {\n return;\n }\n\n // Skip if already initialized or no thread restored yet\n if (hasInitializedRef.current || !currentThread) {\n return;\n }\n\n // Mark as initialized\n hasInitializedRef.current = true;\n\n // Load messages from the restored thread\n isLoadingMessagesRef.current = true;\n if (currentThread.messages && currentThread.messages.length > 0) {\n const uiMessages: UIMessage[] = currentThread.messages.map((m) => ({\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 attachments: m.metadata?.attachments,\n thinking: m.metadata?.thinking as string | undefined,\n // Preserve full metadata including citations, toolExecutions, etc.\n metadata: m.metadata,\n }));\n lastSavedSnapshotRef.current = getMessageSnapshot(uiMessages);\n savingToThreadRef.current = currentThread.id;\n setMessages(uiMessages);\n } else {\n lastSavedSnapshotRef.current = \"\";\n savingToThreadRef.current = currentThread.id;\n }\n\n // Notify thread change\n onThreadChange?.(currentThread.id);\n\n requestAnimationFrame(() => {\n isLoadingMessagesRef.current = false;\n });\n }, [adapter, currentThread, setMessages, getMessageSnapshot, onThreadChange]);\n\n // Sync messages to storage when streaming completes\n useEffect(() => {\n // Skip if no adapter (persistence not enabled) - don't sync/create threads\n if (!adapter) {\n return;\n }\n\n // Skip if we're loading messages from a thread switch\n if (isLoadingMessagesRef.current) {\n return;\n }\n\n // Skip if still streaming - wait for completion\n if (status === \"streaming\" || status === \"submitted\") {\n return;\n }\n\n // Skip if no messages\n if (messages.length === 0) {\n return;\n }\n\n // Check if messages actually changed\n const currentSnapshot = getMessageSnapshot(messages);\n if (currentSnapshot === lastSavedSnapshotRef.current) {\n return;\n }\n\n const coreMessages = convertToCore(messages);\n\n // If no thread exists, create one with these messages\n if (!currentThreadId && !savingToThreadRef.current) {\n // Set ref immediately to prevent race condition with rapid messages\n savingToThreadRef.current = \"creating\";\n createThread({ messages: coreMessages }).then((thread) => {\n lastSavedSnapshotRef.current = currentSnapshot;\n savingToThreadRef.current = thread.id;\n onThreadChange?.(thread.id);\n });\n return;\n }\n\n // Make sure we're saving to the correct thread\n if (\n savingToThreadRef.current &&\n savingToThreadRef.current !== currentThreadId\n ) {\n return;\n }\n\n // Update existing thread\n updateCurrentThread({ messages: coreMessages });\n lastSavedSnapshotRef.current = currentSnapshot;\n }, [\n adapter,\n messages,\n currentThreadId,\n status,\n updateCurrentThread,\n createThread,\n refreshThreads,\n getMessageSnapshot,\n convertToCore,\n onThreadChange,\n ]);\n\n // Check if chat is busy (disable thread switching during streaming)\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 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 { createServerAdapter } 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 /** 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/**\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 ...chatProps\n } = props;\n\n // Parse persistence config\n const persistenceConfig = parsePersistenceConfig(persistence, onThreadChange);\n\n // Use internal thread manager when persistence is enabled\n const threadManagerResult = useInternalThreadManager(\n persistenceConfig ?? { autoRestoreLastThread: 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 } = 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 }),\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 const visibleMessages = messages\n .filter((m: UIMessage) => m.role !== \"tool\") // Hide tool messages - results merged into assistant\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: true, message: resultContent },\n };\n }\n }\n return exec;\n },\n );\n } else {\n // Build from stored tool_calls + tool messages (historical)\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: true, 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 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: Date.now(), // Historical - use current time\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 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\n toolExecutions: messageToolExecutions,\n // Include metadata (citations from native web search, etc.)\n metadata: m.metadata,\n };\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 ONLY when we're in an active tool flow\n // Condition: Last message must be assistant with tool_calls (not user starting new request)\n const lastMessage = messages[messages.length - 1];\n const isInToolFlow =\n lastMessage?.role === \"assistant\" &&\n (lastMessage as UIMessage).toolCalls?.length;\n\n let isProcessingToolResults = false;\n\n if (isLoading && isInToolFlow) {\n const currentToolCallIds = new Set(\n (lastMessage as UIMessage).toolCalls?.map(\n (tc: { id: string }) => tc.id,\n ) || [],\n );\n const currentExecutions = toolExecutions.filter((exec) =>\n currentToolCallIds.has(exec.id),\n );\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\n // Show \"Continuing...\" only when tools completed and waiting for AI to continue\n isProcessingToolResults = hasCompletedTools && !hasExecutingTools;\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 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 >\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});\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"]}
|