@tinkrapp/widget 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/events.ts","../src/core/api.ts","../src/core/client.ts","../src/react/utils.ts","../src/react/components/ui/tooltip.tsx","../src/react/components/ui/button.tsx","../src/react/components/assistant-ui/tooltip-icon-button.tsx","../src/react/components/assistant-ui/tool-card.tsx","../src/react/components/assistant-ui/detailed-answer-tool.tsx","../src/react/context/message-context.tsx","../src/react/styles/theme.ts","../../../node_modules/@emotion/sheet/dist/emotion-sheet.esm.js","../../../node_modules/stylis/src/Enum.js","../../../node_modules/stylis/src/Utility.js","../../../node_modules/stylis/src/Tokenizer.js","../../../node_modules/stylis/src/Parser.js","../../../node_modules/stylis/src/Serializer.js","../../../node_modules/stylis/src/Middleware.js","../../../node_modules/@emotion/weak-memoize/dist/emotion-weak-memoize.esm.js","../../../node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../../../node_modules/@emotion/cache/dist/emotion-cache.esm.js","../src/react/styles/cache.ts","../src/react/styles/primitives.ts","../src/react/provider.tsx","../src/react/hooks/useWidget.ts","../src/react/hooks/useChat.ts","../src/react/components/ui/dialog.tsx","../src/react/components/ui/avatar.tsx","../src/react/components/assistant-ui/attachment.tsx","../src/react/components/assistant-ui/markdown-text.tsx","../src/react/components/assistant-ui/tool-fallback.tsx","../src/react/components/assistant-ui/context-pill.tsx","../src/react/components/ui/popover.tsx","../src/react/components/assistant-ui/context-mention-popover.tsx","../src/react/components/assistant-ui/mention-composer-input.tsx","../src/react/components/assistant-ui/user-message-content.tsx","../src/react/hooks/useContextMention.ts","../src/react/components/assistant-ui/thread.tsx","../src/react/components/assistant-ui/thread-list.tsx","../src/react/components/assistant-ui/artifact-tools.tsx","../src/react/components/ChatWidget.tsx","../src/react/components/ChatHistoryPopover.tsx","../src/react/components/LayoutPopover.tsx","../src/react/components/WidgetContainer.tsx","../src/react/components/assistant-ui/readonly-thread.tsx"],"names":["jsx","forwardRef","jsxs","prev","useState","CheckIcon","StyleSheet","length","character","characters","weakMemoize","identifierWithPointTracking","toRules","getRules","compat","removeLabel","prefixer","createCache","node","stylis","_stylis","_insert","theme","position","createContext","useRef","useRemoteThreadListRuntime","runtime","useEffect","useContext","useCallback","Avatar","useAssistantState","src","XIcon","remarkGfm","memo","useCopyToClipboard","CopyIcon","memoizeMarkdownComponents","FileTextIcon","TYPE_ICONS","FileIcon","VideoIcon","LinkIcon","match","useMemo","Fragment","useComposerRuntime","ComposerPrimitive","MessagePrimitive","useMessage","ChevronDownIcon","Loader2Icon","DownloadIcon","ExternalLinkIcon","makeAssistantToolUI","motion","ThreadListItem","ThreadListItemPrimitive","ThreadListPrimitive","SquareIcon","AnimatePresence","ThreadPrimitive"],"mappings":"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","file":"react.js","sourcesContent":["type EventHandler<T = unknown> = (payload: T) => void;\n\nexport class TypedEventEmitter<TEvents extends Record<string, unknown>> {\n private listeners = new Map<keyof TEvents, Set<EventHandler>>();\n\n on<K extends keyof TEvents>(\n event: K,\n handler: EventHandler<TEvents[K]>\n ): () => void {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event)!.add(handler as EventHandler);\n\n // Return unsubscribe function\n return () => this.off(event, handler);\n }\n\n off<K extends keyof TEvents>(\n event: K,\n handler: EventHandler<TEvents[K]>\n ): void {\n this.listeners.get(event)?.delete(handler as EventHandler);\n }\n\n emit<K extends keyof TEvents>(event: K, payload: TEvents[K]): void {\n this.listeners.get(event)?.forEach((handler) => {\n try {\n handler(payload);\n } catch (error) {\n console.error(`Error in ${String(event)} handler:`, error);\n }\n });\n }\n\n clear(): void {\n this.listeners.clear();\n }\n\n removeAllListeners(event?: keyof TEvents): void {\n if (event) {\n this.listeners.delete(event);\n } else {\n this.listeners.clear();\n }\n }\n}\n\n","import type { WidgetConfig, Message, ChatSession, Artifact } from './types';\n\nexport class WidgetAPI {\n private config: Required<WidgetConfig>;\n\n constructor(config: WidgetConfig) {\n this.config = {\n baseUrl: process.env.WIDGET_API_URL || 'http://localhost:3000',\n userId: '',\n debug: false,\n assistantId: config.apiKey, // Default to apiKey for backwards compatibility\n ...config,\n };\n }\n\n async createSession(): Promise<ChatSession> {\n const response = await this.request<ChatSession>('/sessions', {\n method: 'POST',\n body: JSON.stringify({\n // apiKey IS the assistantId\n assistantId: this.config.apiKey,\n userId: this.config.userId,\n }),\n });\n return response;\n }\n\n async sendMessage(sessionId: string, content: string): Promise<Message> {\n const response = await this.request<Message>(`/sessions/${sessionId}/messages`, {\n method: 'POST',\n body: JSON.stringify({ content }),\n });\n return response;\n }\n\n async getHistory(sessionId: string): Promise<Message[]> {\n return this.request<Message[]>(`/sessions/${sessionId}/messages`);\n }\n\n async getSessions(): Promise<ChatSession[]> {\n return this.request<ChatSession[]>('/sessions');\n }\n\n async getArtifacts(): Promise<Artifact[]> {\n return this.request<Artifact[]>('/artifacts');\n }\n\n async getArtifact(id: string): Promise<Artifact> {\n return this.request<Artifact>(`/artifacts/${id}`);\n }\n\n async createArtifact(artifact: Omit<Artifact, 'id' | 'createdAt' | 'updatedAt'>): Promise<Artifact> {\n return this.request<Artifact>('/artifacts', {\n method: 'POST',\n body: JSON.stringify(artifact),\n });\n }\n\n private async request<T>(\n endpoint: string,\n options: RequestInit = {}\n ): Promise<T> {\n const url = `${this.config.baseUrl}${endpoint}`;\n \n this.log('Request:', url, options);\n\n const response = await fetch(url, {\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this.config.apiKey}`,\n ...options.headers,\n },\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.message || `HTTP ${response.status}`);\n }\n\n return response.json();\n }\n\n private log(...args: unknown[]): void {\n if (this.config.debug) {\n console.log('[CourseAI]', ...args);\n }\n }\n}\n\n","import { TypedEventEmitter } from './events';\nimport { WidgetAPI } from './api';\nimport type {\n WidgetConfig,\n WidgetState,\n WidgetEvents,\n Message,\n ChatSession,\n} from './types';\n\nexport class WidgetClient {\n private config: WidgetConfig;\n private state: WidgetState = { status: 'idle' };\n private events = new TypedEventEmitter<WidgetEvents>();\n private api: WidgetAPI;\n\n constructor(config: WidgetConfig) {\n this.config = config;\n this.api = new WidgetAPI(config);\n }\n\n /**\n * Initialize the widget and create a chat session\n */\n async initialize(): Promise<void> {\n if (this.state.status !== 'idle') {\n throw new Error('Widget already initialized');\n }\n\n this.setState({ status: 'initializing' });\n\n try {\n const session = await this.api.createSession();\n this.setState({ status: 'ready', session });\n this.events.emit('session:created', { session });\n } catch (error) {\n const widgetError = {\n code: 'INIT_FAILED',\n message: error instanceof Error ? error.message : 'Unknown error',\n details: error,\n };\n this.setState({ status: 'error', error: widgetError });\n this.events.emit('error', { error: widgetError });\n throw error;\n }\n }\n\n /**\n * Send a message to the AI assistant\n */\n async sendMessage(content: string): Promise<Message> {\n if (this.state.status !== 'ready') {\n throw new Error('Widget not ready. Call initialize() first.');\n }\n\n const userMessage: Message = {\n id: crypto.randomUUID(),\n role: 'user',\n content,\n timestamp: Date.now(),\n };\n\n // Optimistically add user message\n const session = {\n ...this.state.session,\n messages: [...this.state.session.messages, userMessage],\n };\n this.setState({ status: 'ready', session });\n this.events.emit('message:sent', { message: userMessage });\n\n // Set loading state\n this.setState({ status: 'loading' });\n\n try {\n const assistantMessage = await this.api.sendMessage(\n session.id,\n content\n );\n\n const updatedSession = {\n ...session,\n messages: [...session.messages, assistantMessage],\n };\n\n this.setState({ status: 'ready', session: updatedSession });\n this.events.emit('message:received', { message: assistantMessage });\n\n return assistantMessage;\n } catch (error) {\n const widgetError = {\n code: 'SEND_MESSAGE_FAILED',\n message: error instanceof Error ? error.message : 'Failed to send message',\n details: error,\n };\n \n // Revert to previous state with user message still included\n this.setState({ status: 'ready', session });\n this.events.emit('error', { error: widgetError });\n throw error;\n }\n }\n\n /**\n * Get current state\n */\n getState(): WidgetState {\n return this.state;\n }\n\n /**\n * Get the API instance for direct calls\n */\n getAPI(): WidgetAPI {\n return this.api;\n }\n\n /**\n * Get the widget configuration\n */\n getConfig(): WidgetConfig {\n return this.config;\n }\n\n /**\n * Subscribe to events\n */\n on<K extends keyof WidgetEvents>(\n event: K,\n handler: (payload: WidgetEvents[K]) => void\n ): () => void {\n return this.events.on(event, handler);\n }\n\n /**\n * Unsubscribe from events\n */\n off<K extends keyof WidgetEvents>(\n event: K,\n handler: (payload: WidgetEvents[K]) => void\n ): void {\n this.events.off(event, handler);\n }\n\n /**\n * Clean up resources\n */\n destroy(): void {\n this.events.clear();\n this.setState({ status: 'idle' });\n }\n\n private setState(newState: WidgetState): void {\n const previous = this.state;\n this.state = newState;\n this.events.emit('state:change', { previous, current: newState });\n }\n}\n\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } from \"../../utils\"\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n )\n}\n\nfunction Tooltip({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n )\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-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 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\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 \"../../utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nconst Button = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }\n>(({ className, variant = \"default\", size = \"default\", asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n ref={ref}\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n})\n\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","\"use client\";\n\nimport { ComponentPropsWithRef, forwardRef } from \"react\";\nimport { Slottable } from \"@radix-ui/react-slot\";\n\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../ui/tooltip\";\nimport { Button } from \"../ui/button\";\nimport { cn } from \"../../utils\";\n\nexport type TooltipIconButtonProps = ComponentPropsWithRef<typeof Button> & {\n tooltip: string;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n};\n\nexport const TooltipIconButton = forwardRef<\n HTMLButtonElement,\n TooltipIconButtonProps\n>(({ children, tooltip, side = \"bottom\", className, ...rest }, ref) => {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button variant=\"ghost\" size=\"icon-sm\" {...rest} ref={ref}>\n <Slottable>{children}</Slottable>\n <span className=\"aui-sr-only sr-only\">{tooltip}</span>\n </Button>\n </TooltipTrigger>\n <TooltipContent side={side}>{tooltip}</TooltipContent>\n </Tooltip>\n );\n});\n\nTooltipIconButton.displayName = \"TooltipIconButton\";\n","\"use client\";\n\nimport { useEffect, useRef, useState, type FC, type ReactNode } from \"react\";\nimport {\n Loader2Icon,\n CheckIcon,\n XCircleIcon,\n ChevronDownIcon,\n ChevronUpIcon,\n} from \"lucide-react\";\nimport { cn } from \"../../utils\";\n\nexport interface ToolCardProps {\n /** Main title displayed in the header */\n title: string;\n /** Subtitle/label displayed above the title (e.g., \"Detailed Answer\" or \"Tool\") */\n subtitle?: string;\n /** Whether the tool is currently streaming/running */\n isStreaming: boolean;\n /** Whether the tool ended with an error */\n isError?: boolean;\n /** Custom icon to display instead of the default status icons */\n icon?: ReactNode;\n /** Content to display below the header when expanded (always visible) */\n persistentContent?: ReactNode;\n /** Collapsible content */\n children: ReactNode;\n /** Footer actions (only shown when expanded) */\n footer?: ReactNode;\n}\n\nexport const ToolCard: FC<ToolCardProps> = ({\n title,\n subtitle,\n isStreaming,\n isError = false,\n icon,\n persistentContent,\n children,\n footer,\n}) => {\n // Manual expansion state (null means \"follow automatic behavior\")\n const [manualExpanded, setManualExpanded] = useState<boolean | null>(null);\n\n // Track previous streaming state to detect completion\n const prevStreamingRef = useRef(isStreaming);\n\n // Ref for auto-scrolling content\n const contentRef = useRef<HTMLDivElement>(null);\n\n // Effective expanded state: manual override or automatic based on streaming\n const isExpanded = manualExpanded ?? isStreaming;\n\n // Reset manual state when streaming starts (new tool call)\n useEffect(() => {\n if (isStreaming && !prevStreamingRef.current) {\n // Streaming just started - reset to automatic behavior\n setManualExpanded(null);\n }\n prevStreamingRef.current = isStreaming;\n }, [isStreaming]);\n\n // Auto-scroll to bottom when streaming\n useEffect(() => {\n if (isStreaming && contentRef.current) {\n contentRef.current.scrollTop = contentRef.current.scrollHeight;\n }\n });\n\n // Determine which icon to show\n const renderIcon = () => {\n if (icon) return icon;\n\n const iconClass = cn(\"h-4 w-4\", isStreaming && \"animate-spin\");\n\n if (isStreaming) {\n return <Loader2Icon className={iconClass} />;\n }\n if (isError) {\n return <XCircleIcon className=\"h-4 w-4 text-red-400\" />;\n }\n return <CheckIcon className=\"h-4 w-4\" />;\n };\n\n const handleToggle = () => {\n // Allow manual toggle only when not streaming\n if (!isStreaming) {\n setManualExpanded((prev) => (prev === null ? true : !prev));\n }\n };\n\n return (\n <div className=\"my-2 overflow-hidden rounded-xl border border-border shadow-sm\">\n {/* Header */}\n <div\n className={cn(\n \"flex items-center gap-2 p-2 cursor-pointer transition-colors text-white bg-primary-foreground\",\n !isStreaming && \"hover:opacity-90\"\n )}\n onClick={handleToggle}\n >\n {/* Icon - 8px with transparent background */}\n <div className=\"flex items-center justify-center\">{renderIcon()}</div>\n <div className=\"flex-1 min-w-0\">\n {subtitle && (\n <p className=\"font-medium opacity-80 leading-tight text-xs text-muted-foreground\">\n {subtitle}\n </p>\n )}\n <h4 className=\"truncate font-semibold leading-tight text-sm text-muted-foreground\">\n {title}\n </h4>\n </div>\n <button\n className=\"p-1 rounded hover:bg-white/20 transition-colors\"\n aria-label={isExpanded ? \"Collapse\" : \"Expand\"}\n onClick={(e) => {\n e.stopPropagation();\n handleToggle();\n }}\n >\n {isExpanded ? (\n <ChevronUpIcon className=\"h-4 w-4\" />\n ) : (\n <ChevronDownIcon className=\"h-4 w-4\" />\n )}\n </button>\n </div>\n\n {/* Persistent content (always visible, e.g., summary) */}\n\n {persistentContent}\n\n {/* Expandable Content */}\n {isExpanded && (\n <div\n ref={contentRef}\n className=\"p-2 max-h-[400px] overflow-y-auto bg-secondary\"\n >\n {children}\n </div>\n )}\n\n {/* Footer actions (only shown when expanded) */}\n {isExpanded && footer && (\n <div className=\"flex items-center justify-end gap-2 border-t border-white/10 p-2 bg-primary-foreground/80\">\n {footer}\n </div>\n )}\n </div>\n );\n};\n","\"use client\";\n\nimport { makeAssistantToolUI } from \"@assistant-ui/react\";\nimport ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport { type FC, useState, memo } from \"react\";\nimport {\n FileTextIcon,\n CopyIcon,\n CheckIcon,\n ExternalLinkIcon,\n} from \"lucide-react\";\nimport { cn } from \"../../utils\";\nimport { TooltipIconButton } from \"./tooltip-icon-button\";\nimport { ToolCard } from \"./tool-card\";\n\n// Types for the tool\ninterface DetailedAnswerArgs {\n title: string;\n summary: string;\n content: string;\n}\n\ninterface DetailedAnswerResult {\n id: string;\n title: string;\n summary: string;\n content: string;\n createdAt: number;\n}\n\n// Custom hook for copy functionality\nconst useCopyToClipboard = ({\n copiedDuration = 3000,\n}: {\n copiedDuration?: number;\n} = {}) => {\n const [isCopied, setIsCopied] = useState<boolean>(false);\n\n const copyToClipboard = (value: string) => {\n if (!value) return;\n\n navigator.clipboard.writeText(value).then(() => {\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), copiedDuration);\n });\n };\n\n return { isCopied, copyToClipboard };\n};\n\n// Markdown content component using react-markdown directly\n// (MarkdownTextPrimitive requires text message part context which isn't available in tool UIs)\nconst MarkdownContent: FC<{ content: string }> = memo(({ content }) => {\n return (\n <div className=\"aui-md max-w-none text-white\">\n <ReactMarkdown\n remarkPlugins={[remarkGfm]}\n components={{\n h1: ({ className, ...props }) => (\n <h1\n className={cn(\n \"mb-2 font-extrabold tracking-tight last:mb-0 text-white\",\n className\n )}\n style={{ fontSize: \"12px\" }}\n {...props}\n />\n ),\n h2: ({ className, ...props }) => (\n <h2\n className={cn(\n \"mt-3 mb-1.5 font-semibold tracking-tight first:mt-0 last:mb-0 text-white\",\n className\n )}\n style={{ fontSize: \"10px\" }}\n {...props}\n />\n ),\n h3: ({ className, ...props }) => (\n <h3\n className={cn(\n \"mt-2 mb-1 font-semibold tracking-tight first:mt-0 last:mb-0 text-white\",\n className\n )}\n style={{ fontSize: \"9px\" }}\n {...props}\n />\n ),\n p: ({ className, ...props }) => (\n <p\n className={cn(\n \"mt-1.5 mb-1.5 leading-relaxed first:mt-0 last:mb-0 text-white/90\",\n className\n )}\n {...props}\n />\n ),\n ul: ({ className, ...props }) => (\n <ul\n className={cn(\n \"my-1.5 ml-3 list-disc [&>li]:mt-0.5 text-white/90\",\n className\n )}\n {...props}\n />\n ),\n ol: ({ className, ...props }) => (\n <ol\n className={cn(\n \"my-1.5 ml-3 list-decimal [&>li]:mt-0.5 text-white/90\",\n className\n )}\n {...props}\n />\n ),\n blockquote: ({ className, ...props }) => (\n <blockquote\n className={cn(\n \"border-l-2 border-white/30 pl-2 italic text-white/70\",\n className\n )}\n {...props}\n />\n ),\n pre: ({ className, ...props }) => (\n <pre\n className={cn(\n \"overflow-x-auto rounded bg-black/30 p-1.5 text-white/90 my-1.5\",\n className\n )}\n {...props}\n />\n ),\n code: ({ className, ...props }) => {\n // Check if this is an inline code or code block\n const isInline = !className?.includes(\"language-\");\n return (\n <code\n className={cn(\n isInline &&\n \"rounded bg-black/30 px-0.5 py-0.5 font-mono text-white/90\",\n className\n )}\n {...props}\n />\n );\n },\n a: ({ className, ...props }) => (\n <a\n className={cn(\n \"font-medium text-blue-300 underline underline-offset-2\",\n className\n )}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n {...props}\n />\n ),\n hr: ({ className, ...props }) => (\n <hr\n className={cn(\"my-2 border-b border-white/20\", className)}\n {...props}\n />\n ),\n }}\n >\n {content}\n </ReactMarkdown>\n </div>\n );\n});\n\nMarkdownContent.displayName = \"MarkdownContent\";\n\n// Main DetailedAnswerToolUI component\nexport const DetailedAnswerToolUI = makeAssistantToolUI<\n DetailedAnswerArgs,\n DetailedAnswerResult\n>({\n toolName: \"generateDetailedAnswer\",\n render: function DetailedAnswerUI({ args, result, status }) {\n const { isCopied, copyToClipboard } = useCopyToClipboard();\n\n const isStreaming = status.type === \"running\";\n const isError = status.type === \"incomplete\";\n const title = result?.title || args.title || \"Generating...\";\n const content = result?.content || args.content || \"\";\n const summary = result?.summary || args.summary || \"\";\n\n const handleCopy = () => {\n if (content) {\n copyToClipboard(content);\n }\n };\n\n const handleOpenFullScreen = () => {\n // Create a new window with the content\n const newWindow = window.open(\"\", \"_blank\");\n if (newWindow) {\n newWindow.document.write(`\n <!DOCTYPE html>\n <html>\n <head>\n <title>${title}</title>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <style>\n body {\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n max-width: 800px;\n margin: 0 auto;\n padding: 2rem;\n line-height: 1.6;\n color: #1a1a1a;\n }\n h1 { border-bottom: 1px solid #eee; padding-bottom: 0.5rem; }\n pre { background: #f5f5f5; padding: 1rem; overflow-x: auto; border-radius: 4px; }\n code { background: #f5f5f5; padding: 0.2em 0.4em; border-radius: 3px; font-size: 0.9em; }\n pre code { background: none; padding: 0; }\n blockquote { border-left: 4px solid #ddd; margin: 0; padding-left: 1rem; color: #666; }\n </style>\n </head>\n <body>\n <h1>${title}</h1>\n <div id=\"content\">${content\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")}</div>\n <script src=\"https://cdn.jsdelivr.net/npm/marked/marked.min.js\"></script>\n <script>\n document.getElementById('content').innerHTML = marked.parse(${JSON.stringify(\n content\n )});\n </script>\n </body>\n </html>\n `);\n newWindow.document.close();\n }\n };\n\n // Summary displayed below header but outside collapsible area\n const persistentSummary = summary ? (\n <div className=\"p-2 text-white/80 border-b border-white/10 bg-primary-foreground text-xs\">\n {summary}\n </div>\n ) : undefined;\n\n // Footer with copy/open actions (only shown when expanded)\n const footerActions = content ? (\n <>\n <TooltipIconButton\n tooltip={isCopied ? \"Copied!\" : \"Copy markdown\"}\n onClick={handleCopy}\n className=\"flex items-center justify-center rounded-md p-1.5 text-white/70 hover:bg-white/10 transition-colors\"\n >\n {isCopied ? (\n <CheckIcon className=\"h-3.5 w-3.5\" />\n ) : (\n <CopyIcon className=\"h-3.5 w-3.5\" />\n )}\n </TooltipIconButton>\n <TooltipIconButton\n tooltip=\"Open in new window\"\n onClick={handleOpenFullScreen}\n className=\"flex items-center justify-center rounded-md p-1.5 text-white/70 hover:bg-white/10 transition-colors\"\n >\n <ExternalLinkIcon className=\"h-3.5 w-3.5\" />\n </TooltipIconButton>\n </>\n ) : undefined;\n\n return (\n <ToolCard\n title={title}\n isStreaming={isStreaming}\n isError={isError}\n icon={\n !isStreaming && !isError ? (\n <FileTextIcon className=\"h-4 w-4\" />\n ) : undefined\n }\n persistentContent={persistentSummary}\n footer={footerActions}\n >\n {content ? (\n <MarkdownContent content={content} />\n ) : (\n <p className=\"text-muted-foreground italic\">Generating content...</p>\n )}\n </ToolCard>\n );\n },\n});\n","'use client'\n\nimport {\n createContext,\n useContext,\n useState,\n useCallback,\n type ReactNode,\n} from 'react'\nimport type { ContextItem } from '../hooks/useContextMention'\n\n/**\n * Context for managing message context items that will be sent with the next message\n */\ninterface MessageContextValue {\n /** Currently selected context items */\n selectedContext: ContextItem[]\n /** Add a context item */\n addContextItem: (item: ContextItem) => void\n /** Remove a context item by ID */\n removeContextItem: (id: string) => void\n /** Clear all context items */\n clearContext: () => void\n /** Set all context items at once */\n setContext: (items: ContextItem[]) => void\n /** Get context for sending and clear it */\n consumeContext: () => ContextItem[]\n}\n\nconst MessageContext = createContext<MessageContextValue | null>(null)\n\nexport function MessageContextProvider({ children }: { children: ReactNode }) {\n const [selectedContext, setSelectedContext] = useState<ContextItem[]>([])\n\n const addContextItem = useCallback((item: ContextItem) => {\n console.log('[MessageContext] Adding context item:', item.id, item.title)\n setSelectedContext((prev) => {\n // Don't add duplicates\n if (prev.some((i) => i.id === item.id)) {\n console.log('[MessageContext] Item already exists, skipping')\n return prev\n }\n console.log('[MessageContext] Context items count:', prev.length + 1)\n return [...prev, item]\n })\n }, [])\n\n const removeContextItem = useCallback((id: string) => {\n setSelectedContext((prev) => prev.filter((item) => item.id !== id))\n }, [])\n\n const clearContext = useCallback(() => {\n console.log('[MessageContext] Clearing context')\n setSelectedContext([])\n }, [])\n\n const setContext = useCallback((items: ContextItem[]) => {\n setSelectedContext(items)\n }, [])\n\n const consumeContext = useCallback(() => {\n const context = selectedContext\n console.log('[MessageContext] Consuming context:', context.length, 'items')\n // Don't clear on consume - let the UI manage clearing after successful send\n return context\n }, [selectedContext])\n\n return (\n <MessageContext.Provider\n value={{\n selectedContext,\n addContextItem,\n removeContextItem,\n clearContext,\n setContext,\n consumeContext,\n }}\n >\n {children}\n </MessageContext.Provider>\n )\n}\n\nexport function useMessageContext() {\n const context = useContext(MessageContext)\n if (!context) {\n throw new Error(\n 'useMessageContext must be used within a MessageContextProvider',\n )\n }\n return context\n}\n","export const theme = {\n colors: {\n background: {\n primary: '#1a1a1a',\n secondary: '#2a2a2a',\n tertiary: '#3a3a3a',\n },\n accent: {\n primary: '#c9a227',\n hover: '#d4af37',\n muted: 'rgba(201, 162, 39, 0.4)',\n },\n text: {\n primary: '#ffffff',\n secondary: '#888888',\n tertiary: '#cccccc',\n inverse: '#1a1a1a',\n },\n border: '#2a2a2a',\n shadow: 'rgba(0, 0, 0, 0.4)',\n },\n spacing: {\n xs: '0.25rem',\n sm: '0.5rem',\n md: '1rem',\n lg: '1.5rem',\n xl: '2rem',\n '2xl': '3rem',\n },\n radii: {\n sm: '0.5rem',\n md: '0.75rem',\n lg: '1rem',\n xl: '1.5rem',\n full: '50%',\n },\n typography: {\n fontFamily: \"system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n fontSize: {\n xs: '0.75rem',\n sm: '0.875rem',\n md: '1rem',\n lg: '1.125rem',\n xl: '1.25rem',\n '2xl': '1.5rem',\n },\n fontWeight: {\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.7,\n },\n },\n zIndex: {\n widget: 9999,\n overlay: 9998,\n },\n shadows: {\n sm: '0 2px 8px rgba(0, 0, 0, 0.2)',\n md: '0 4px 16px rgba(0, 0, 0, 0.3)',\n lg: '0 8px 32px rgba(0, 0, 0, 0.4)',\n accent: '0 4px 16px rgba(201, 162, 39, 0.4)',\n accentHover: '0 6px 20px rgba(201, 162, 39, 0.5)',\n },\n transitions: {\n fast: '0.15s ease',\n normal: '0.2s ease',\n slow: '0.3s ease',\n },\n} as const;\n\nexport type Theme = typeof theme;\n\n// Extend Emotion's theme type via module augmentation\ndeclare module '@emotion/react' {\n // eslint-disable-next-line @typescript-eslint/no-empty-interface\n export interface Theme {\n colors: typeof theme.colors;\n spacing: typeof theme.spacing;\n radii: typeof theme.radii;\n typography: typeof theme.typography;\n zIndex: typeof theme.zIndex;\n shadows: typeof theme.shadows;\n transitions: typeof theme.transitions;\n }\n}\n","var isDevelopment = false;\n\n/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n return document.styleSheets[i];\n }\n } // this function should always return with a value\n // TS can't understand it though so we make it stop complaining here\n\n\n return undefined;\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n tag.setAttribute('data-s', '');\n return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n // Using Node instead of HTMLElement since container may be a ShadowRoot\n function StyleSheet(options) {\n var _this = this;\n\n this._insertTag = function (tag) {\n var before;\n\n if (_this.tags.length === 0) {\n if (_this.insertionPoint) {\n before = _this.insertionPoint.nextSibling;\n } else if (_this.prepend) {\n before = _this.container.firstChild;\n } else {\n before = _this.before;\n }\n } else {\n before = _this.tags[_this.tags.length - 1].nextSibling;\n }\n\n _this.container.insertBefore(tag, before);\n\n _this.tags.push(tag);\n };\n\n this.isSpeedy = options.speedy === undefined ? !isDevelopment : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.prepend = options.prepend;\n this.insertionPoint = options.insertionPoint;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.hydrate = function hydrate(nodes) {\n nodes.forEach(this._insertTag);\n };\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n this._insertTag(createStyleElement(this));\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n this.tags.forEach(function (tag) {\n var _tag$parentNode;\n\n return (_tag$parentNode = tag.parentNode) == null ? void 0 : _tag$parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n };\n\n return StyleSheet;\n}();\n\nexport { StyleSheet };\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d l m s\n\t\t\t\t\t\t\t\t\tcase 100: case 108: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nexport function comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nexport function declaration (value, root, parent, length) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)\n}\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen, sizeof} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\tvar length = sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine} from './Utility.js'\nimport {copy, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\treturn serialize([copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]})], callback)\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\treturn serialize([\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]})\n\t\t\t\t\t\t\t\t\t], callback)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","var weakMemoize = function weakMemoize(func) {\n var cache = new WeakMap();\n return function (arg) {\n if (cache.has(arg)) {\n // Use non-null assertion because we just checked that the cache `has` it\n // This allows us to remove `undefined` from the return value\n return cache.get(arg);\n }\n\n var ret = func(arg);\n cache.set(arg, ret);\n return ret;\n };\n};\n\nexport { weakMemoize as default };\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport { memoize as default };\n","import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, slice, position, RULESET, combine, match, serialize, copy, replace, WEBKIT, MOZ, MS, KEYFRAMES, DECLARATION, hash, charat, strlen, indexof, stringify, rulesheet, middleware, compile } from 'stylis';\nimport weakMemoize from '@emotion/weak-memoize';\nimport memoize from '@emotion/memoize';\n\nvar isBrowser = typeof document !== 'undefined';\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n var previous = 0;\n var character = 0;\n\n while (true) {\n previous = character;\n character = peek(); // &\\f\n\n if (previous === 38 && character === 12) {\n points[index] = 1;\n }\n\n if (token(character)) {\n break;\n }\n\n next();\n }\n\n return slice(begin, position);\n};\n\nvar toRules = function toRules(parsed, points) {\n // pretend we've started with a comma\n var index = -1;\n var character = 44;\n\n do {\n switch (token(character)) {\n case 0:\n // &\\f\n if (character === 38 && peek() === 12) {\n // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n // and when it should just concatenate the outer and inner selectors\n // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n points[index] = 1;\n }\n\n parsed[index] += identifierWithPointTracking(position - 1, points, index);\n break;\n\n case 2:\n parsed[index] += delimit(character);\n break;\n\n case 4:\n // comma\n if (character === 44) {\n // colon\n parsed[++index] = peek() === 58 ? '&\\f' : '';\n points[index] = parsed[index].length;\n break;\n }\n\n // fallthrough\n\n default:\n parsed[index] += from(character);\n }\n } while (character = next());\n\n return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n // negative .length indicates that this rule has been already prefixed\n element.length < 1) {\n return;\n }\n\n var value = element.value;\n var parent = element.parent;\n var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n while (parent.type !== 'rule') {\n parent = parent.parent;\n if (!parent) return;\n } // short-circuit for the simplest case\n\n\n if (element.props.length === 1 && value.charCodeAt(0) !== 58\n /* colon */\n && !fixedElements.get(parent)) {\n return;\n } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n if (isImplicitRule) {\n return;\n }\n\n fixedElements.set(element, true);\n var points = [];\n var rules = getRules(value, points);\n var parentRules = parent.props;\n\n for (var i = 0, k = 0; i < rules.length; i++) {\n for (var j = 0; j < parentRules.length; j++, k++) {\n element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n }\n }\n};\nvar removeLabel = function removeLabel(element) {\n if (element.type === 'decl') {\n var value = element.value;\n\n if ( // charcode for l\n value.charCodeAt(0) === 108 && // charcode for b\n value.charCodeAt(2) === 98) {\n // this ignores label\n element[\"return\"] = '';\n element.value = '';\n }\n }\n};\n\n/* eslint-disable no-fallthrough */\n\nfunction prefix(value, length) {\n switch (hash(value, length)) {\n // color-adjust\n case 5103:\n return WEBKIT + 'print-' + value + value;\n // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\n case 5737:\n case 4201:\n case 3177:\n case 3433:\n case 1641:\n case 4457:\n case 2921: // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\n case 5572:\n case 6356:\n case 5844:\n case 3191:\n case 6645:\n case 3005: // mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\n case 6391:\n case 5879:\n case 5623:\n case 6135:\n case 4599:\n case 4855: // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\n case 4215:\n case 6389:\n case 5109:\n case 5365:\n case 5621:\n case 3829:\n return WEBKIT + value + value;\n // appearance, user-select, transform, hyphens, text-size-adjust\n\n case 5349:\n case 4246:\n case 4810:\n case 6968:\n case 2756:\n return WEBKIT + value + MOZ + value + MS + value + value;\n // flex, flex-direction\n\n case 6828:\n case 4268:\n return WEBKIT + value + MS + value + value;\n // order\n\n case 6165:\n return WEBKIT + value + MS + 'flex-' + value + value;\n // align-items\n\n case 5187:\n return WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value;\n // align-self\n\n case 5443:\n return WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value;\n // align-content\n\n case 4675:\n return WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value;\n // flex-shrink\n\n case 5548:\n return WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value;\n // flex-basis\n\n case 5292:\n return WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value;\n // flex-grow\n\n case 6060:\n return WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value;\n // transition\n\n case 4554:\n return WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value;\n // cursor\n\n case 6187:\n return replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value;\n // background, background-image\n\n case 5495:\n case 3959:\n return replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1');\n // justify-content\n\n case 4968:\n return replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value;\n // (margin|padding)-inline-(start|end)\n\n case 4095:\n case 3583:\n case 4068:\n case 2532:\n return replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value;\n // (min|max)?(width|height|inline-size|block-size)\n\n case 8116:\n case 7059:\n case 5753:\n case 5535:\n case 5445:\n case 5701:\n case 4933:\n case 4677:\n case 5533:\n case 5789:\n case 5021:\n case 4765:\n // stretch, max-content, min-content, fill-available\n if (strlen(value) - 1 - length > 6) switch (charat(value, length + 1)) {\n // (m)ax-content, (m)in-content\n case 109:\n // -\n if (charat(value, length + 4) !== 45) break;\n // (f)ill-available, (f)it-content\n\n case 102:\n return replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value;\n // (s)tretch\n\n case 115:\n return ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value;\n }\n break;\n // position: sticky\n\n case 4949:\n // (s)ticky?\n if (charat(value, length + 1) !== 115) break;\n // display: (flex|inline-flex)\n\n case 6444:\n switch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n // stic(k)y\n case 107:\n return replace(value, ':', ':' + WEBKIT) + value;\n // (inline-)?fl(e)x\n\n case 101:\n return replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value;\n }\n\n break;\n // writing-mode\n\n case 5936:\n switch (charat(value, length + 11)) {\n // vertical-l(r)\n case 114:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value;\n // vertical-r(l)\n\n case 108:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value;\n // horizontal(-)tb\n\n case 45:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value;\n }\n\n return WEBKIT + value + MS + value + value;\n }\n\n return value;\n}\n\nvar prefixer = function prefixer(element, index, children, callback) {\n if (element.length > -1) if (!element[\"return\"]) switch (element.type) {\n case DECLARATION:\n element[\"return\"] = prefix(element.value, element.length);\n break;\n\n case KEYFRAMES:\n return serialize([copy(element, {\n value: replace(element.value, '@', '@' + WEBKIT)\n })], callback);\n\n case RULESET:\n if (element.length) return combine(element.props, function (value) {\n switch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n // :read-(only|write)\n case ':read-only':\n case ':read-write':\n return serialize([copy(element, {\n props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]\n })], callback);\n // :placeholder\n\n case '::placeholder':\n return serialize([copy(element, {\n props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]\n }), copy(element, {\n props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]\n }), copy(element, {\n props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]\n })], callback);\n }\n\n return '';\n });\n }\n};\n\nvar getServerStylisCache = isBrowser ? undefined : weakMemoize(function () {\n return memoize(function () {\n return {};\n });\n});\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function createCache(options) {\n var key = options.key;\n\n if (isBrowser && key === 'css') {\n var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n // note this very very intentionally targets all style elements regardless of the key to ensure\n // that creating a cache works inside of render of a React component\n\n Array.prototype.forEach.call(ssrStyles, function (node) {\n // we want to only move elements which have a space in the data-emotion attribute value\n // because that indicates that it is an Emotion 11 server-side rendered style elements\n // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n // will not result in the Emotion 10 styles being destroyed\n var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n if (dataEmotionAttribute.indexOf(' ') === -1) {\n return;\n }\n\n document.head.appendChild(node);\n node.setAttribute('data-s', '');\n });\n }\n\n var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n var inserted = {};\n var container;\n var nodesToHydrate = [];\n\n if (isBrowser) {\n container = options.container || document.head;\n Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n var attrib = node.getAttribute(\"data-emotion\").split(' ');\n\n for (var i = 1; i < attrib.length; i++) {\n inserted[attrib[i]] = true;\n }\n\n nodesToHydrate.push(node);\n });\n }\n\n var _insert;\n\n var omnipresentPlugins = [compat, removeLabel];\n\n if (!getServerStylisCache) {\n var currentSheet;\n var finalizingPlugins = [stringify, rulesheet(function (rule) {\n currentSheet.insert(rule);\n })];\n var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n var stylis = function stylis(styles) {\n return serialize(compile(styles), serializer);\n };\n\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n currentSheet = sheet;\n\n stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n if (shouldCache) {\n cache.inserted[serialized.name] = true;\n }\n };\n } else {\n var _finalizingPlugins = [stringify];\n\n var _serializer = middleware(omnipresentPlugins.concat(stylisPlugins, _finalizingPlugins));\n\n var _stylis = function _stylis(styles) {\n return serialize(compile(styles), _serializer);\n };\n\n var serverStylisCache = getServerStylisCache(stylisPlugins)(key);\n\n var getRules = function getRules(selector, serialized) {\n var name = serialized.name;\n\n if (serverStylisCache[name] === undefined) {\n serverStylisCache[name] = _stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n }\n\n return serverStylisCache[name];\n };\n\n _insert = function _insert(selector, serialized, sheet, shouldCache) {\n var name = serialized.name;\n var rules = getRules(selector, serialized);\n\n if (cache.compat === undefined) {\n // in regular mode, we don't set the styles on the inserted cache\n // since we don't need to and that would be wasting memory\n // we return them so that they are rendered in a style tag\n if (shouldCache) {\n cache.inserted[name] = true;\n }\n\n return rules;\n } else {\n // in compat mode, we put the styles on the inserted cache so\n // that emotion-server can pull out the styles\n // except when we don't want to cache it which was in Global but now\n // is nowhere but we don't want to do a major right now\n // and just in case we're going to leave the case here\n // it's also not affecting client side bundle size\n // so it's really not a big deal\n if (shouldCache) {\n cache.inserted[name] = rules;\n } else {\n return rules;\n }\n }\n };\n }\n\n var cache = {\n key: key,\n sheet: new StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy,\n prepend: options.prepend,\n insertionPoint: options.insertionPoint\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n cache.sheet.hydrate(nodesToHydrate);\n return cache;\n};\n\nexport { createCache as default };\n","import createCache from '@emotion/cache';\n\n/**\n * Create an isolated Emotion cache for the widget.\n * This ensures our styles don't conflict with host website styles.\n * The 'la-widget' prefix will be added to all generated class names.\n */\nexport const createWidgetCache = (container?: HTMLElement) => {\n return createCache({\n key: 'la-widget',\n container,\n prepend: true,\n });\n};\n\n// Default cache instance for most use cases\nexport const widgetCache = createCache({\n key: 'la-widget',\n prepend: true,\n});\n\n","import styled from '@emotion/styled';\nimport { motion } from 'motion/react';\n\n// ============================================================================\n// Layout Primitives\n// ============================================================================\n\nexport const Screen = styled.div`\n display: flex;\n flex-direction: column;\n height: 100%;\n background-color: ${({ theme }) => theme.colors.background.primary};\n color: ${({ theme }) => theme.colors.text.primary};\n font-family: ${({ theme }) => theme.typography.fontFamily};\n`;\n\nexport const ScrollArea = styled.div`\n flex: 1;\n overflow-y: auto;\n padding: ${({ theme }) => theme.spacing.md};\n\n &::-webkit-scrollbar {\n width: 6px;\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n &::-webkit-scrollbar-thumb {\n background: ${({ theme }) => theme.colors.background.tertiary};\n border-radius: ${({ theme }) => theme.radii.full};\n }\n`;\n\nexport const Flex = styled.div<{\n direction?: 'row' | 'column';\n align?: 'flex-start' | 'center' | 'flex-end' | 'stretch';\n justify?: 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around';\n gap?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n wrap?: boolean;\n}>`\n display: flex;\n flex-direction: ${({ direction = 'row' }) => direction};\n align-items: ${({ align = 'stretch' }) => align};\n justify-content: ${({ justify = 'flex-start' }) => justify};\n gap: ${({ theme, gap }) => (gap ? theme.spacing[gap] : 0)};\n flex-wrap: ${({ wrap }) => (wrap ? 'wrap' : 'nowrap')};\n`;\n\nexport const Grid = styled.div<{\n columns?: number | string;\n gap?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n}>`\n display: grid;\n grid-template-columns: ${({ columns = 1 }) =>\n typeof columns === 'number' ? `repeat(${columns}, 1fr)` : columns};\n gap: ${({ theme, gap = 'md' }) => theme.spacing[gap]};\n`;\n\n// ============================================================================\n// Header Component\n// ============================================================================\n\nexport const Header = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: ${({ theme }) => theme.spacing.md};\n border-bottom: 1px solid ${({ theme }) => theme.colors.border};\n background-color: ${({ theme }) => theme.colors.background.primary};\n`;\n\nexport const HeaderTitle = styled.h2`\n margin: 0;\n font-size: ${({ theme }) => theme.typography.fontSize.md};\n font-weight: ${({ theme }) => theme.typography.fontWeight.medium};\n color: ${({ theme }) => theme.colors.text.primary};\n`;\n\n// ============================================================================\n// Button Primitives\n// ============================================================================\n\nexport const Button = styled.button<{\n variant?: 'primary' | 'secondary' | 'ghost';\n size?: 'sm' | 'md' | 'lg';\n fullWidth?: boolean;\n}>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: ${({ theme }) => theme.spacing.sm};\n padding: ${({ theme, size = 'md' }) => {\n const sizes = {\n sm: `${theme.spacing.sm} ${theme.spacing.md}`,\n md: `${theme.spacing.md} ${theme.spacing.lg}`,\n lg: `${theme.spacing.lg} ${theme.spacing.xl}`,\n };\n return sizes[size];\n }};\n width: ${({ fullWidth }) => (fullWidth ? '100%' : 'auto')};\n font-family: ${({ theme }) => theme.typography.fontFamily};\n font-size: ${({ theme }) => theme.typography.fontSize.sm};\n font-weight: ${({ theme }) => theme.typography.fontWeight.medium};\n border-radius: ${({ theme }) => theme.radii.sm};\n border: none;\n cursor: pointer;\n transition: all ${({ theme }) => theme.transitions.fast};\n\n ${({ theme, variant = 'primary' }) => {\n switch (variant) {\n case 'primary':\n return `\n background-color: ${theme.colors.accent.primary};\n color: ${theme.colors.text.inverse};\n &:hover:not(:disabled) {\n background-color: ${theme.colors.accent.hover};\n }\n `;\n case 'secondary':\n return `\n background-color: ${theme.colors.background.secondary};\n color: ${theme.colors.text.primary};\n &:hover:not(:disabled) {\n background-color: ${theme.colors.background.tertiary};\n }\n `;\n case 'ghost':\n return `\n background: none;\n color: ${theme.colors.text.secondary};\n &:hover:not(:disabled) {\n color: ${theme.colors.text.primary};\n background-color: ${theme.colors.background.secondary};\n }\n `;\n }\n }}\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nexport const IconButton = styled.button<{\n size?: 'sm' | 'md' | 'lg';\n}>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: ${({ theme }) => theme.spacing.xs};\n background: none;\n border: none;\n color: ${({ theme }) => theme.colors.text.primary};\n font-size: ${({ size = 'md' }) => {\n const sizes = { sm: '1rem', md: '1.25rem', lg: '1.5rem' };\n return sizes[size];\n }};\n cursor: pointer;\n transition: color ${({ theme }) => theme.transitions.fast};\n line-height: 1;\n\n &:hover {\n color: ${({ theme }) => theme.colors.text.secondary};\n }\n`;\n\n// ============================================================================\n// FAB Button (Floating Action Button)\n// ============================================================================\n\nexport const FAB = styled(motion.button)`\n width: 48px;\n height: 48px;\n border-radius: 50%;\n background-color: ${({ theme }) => theme.colors.background.primary};\n border: none;\n box-shadow: ${({ theme }) => theme.shadows.sm};\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.25rem;\n color: white;\n transition: box-shadow ${({ theme }) => theme.transitions.fast};\n position: relative;\n overflow: hidden;\n\n &:hover {\n box-shadow: ${({ theme }) => theme.shadows.md};\n }\n`;\n\n// ============================================================================\n// Input Primitives\n// ============================================================================\n\nexport const Input = styled.input`\n width: 100%;\n padding: ${({ theme }) => `${theme.spacing.md} ${theme.spacing.md}`};\n background-color: ${({ theme }) => theme.colors.background.secondary};\n border: none;\n border-radius: ${({ theme }) => theme.radii.sm};\n color: ${({ theme }) => theme.colors.text.primary};\n font-family: ${({ theme }) => theme.typography.fontFamily};\n font-size: ${({ theme }) => theme.typography.fontSize.sm};\n outline: none;\n transition: background-color ${({ theme }) => theme.transitions.fast};\n\n &::placeholder {\n color: ${({ theme }) => theme.colors.text.secondary};\n }\n\n &:focus {\n background-color: ${({ theme }) => theme.colors.background.tertiary};\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nexport const Textarea = styled.textarea`\n width: 100%;\n min-height: 150px;\n padding: ${({ theme }) => theme.spacing.md};\n background-color: ${({ theme }) => theme.colors.background.secondary};\n border: none;\n border-radius: ${({ theme }) => theme.radii.sm};\n color: ${({ theme }) => theme.colors.text.primary};\n font-family: ${({ theme }) => theme.typography.fontFamily};\n font-size: ${({ theme }) => theme.typography.fontSize.sm};\n line-height: ${({ theme }) => theme.typography.lineHeight.normal};\n resize: vertical;\n outline: none;\n\n &::placeholder {\n color: ${({ theme }) => theme.colors.text.secondary};\n }\n\n &:focus {\n background-color: ${({ theme }) => theme.colors.background.tertiary};\n }\n`;\n\n// ============================================================================\n// Card Primitives\n// ============================================================================\n\nexport const Card = styled.button<{\n selected?: boolean;\n interactive?: boolean;\n}>`\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme.spacing.md};\n width: 100%;\n padding: ${({ theme }) => theme.spacing.md};\n background-color: ${({ theme, selected }) =>\n selected ? theme.colors.background.tertiary : theme.colors.background.secondary};\n border: 2px solid\n ${({ theme, selected }) => (selected ? theme.colors.accent.primary : 'transparent')};\n border-radius: ${({ theme }) => theme.radii.sm};\n color: ${({ theme }) => theme.colors.text.primary};\n font-family: ${({ theme }) => theme.typography.fontFamily};\n text-align: left;\n cursor: ${({ interactive = true }) => (interactive ? 'pointer' : 'default')};\n transition: all ${({ theme }) => theme.transitions.fast};\n\n &:hover {\n background-color: ${({ theme, interactive = true }) =>\n interactive ? theme.colors.background.tertiary : theme.colors.background.secondary};\n }\n`;\n\nexport const CardContent = styled.div`\n flex: 1;\n min-width: 0;\n`;\n\nexport const CardTitle = styled.div`\n font-weight: ${({ theme }) => theme.typography.fontWeight.medium};\n margin-bottom: ${({ theme }) => theme.spacing.xs};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nexport const CardSubtitle = styled.div`\n color: ${({ theme }) => theme.colors.text.secondary};\n font-size: ${({ theme }) => theme.typography.fontSize.xs};\n`;\n\n// ============================================================================\n// Action Button (for grid items like Home screen)\n// ============================================================================\n\nexport const ActionButton = styled.button`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: ${({ theme }) => theme.spacing.md};\n background-color: ${({ theme }) => theme.colors.background.secondary};\n border: none;\n border-radius: ${({ theme }) => theme.radii.sm};\n color: ${({ theme }) => theme.colors.text.primary};\n font-family: ${({ theme }) => theme.typography.fontFamily};\n font-size: ${({ theme }) => theme.typography.fontSize.xs};\n gap: ${({ theme }) => theme.spacing.xs};\n cursor: pointer;\n transition: background-color ${({ theme }) => theme.transitions.fast};\n\n &:hover {\n background-color: ${({ theme }) => theme.colors.background.tertiary};\n }\n`;\n\nexport const ActionIcon = styled.span`\n font-size: 1.25rem;\n`;\n\n// ============================================================================\n// Avatar / Logo\n// ============================================================================\n\nexport const Avatar = styled.div<{ size?: 'sm' | 'md' | 'lg' }>`\n width: ${({ size = 'md' }) => {\n const sizes = { sm: '40px', md: '64px', lg: '80px' };\n return sizes[size];\n }};\n height: ${({ size = 'md' }) => {\n const sizes = { sm: '40px', md: '64px', lg: '80px' };\n return sizes[size];\n }};\n border-radius: ${({ theme }) => theme.radii.full};\n background-color: ${({ theme }) => theme.colors.background.secondary};\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: ${({ size = 'md' }) => {\n const sizes = { sm: '1rem', md: '1.5rem', lg: '2rem' };\n return sizes[size];\n }};\n`;\n\n// ============================================================================\n// Typography\n// ============================================================================\n\nexport const Title = styled.h1<{ size?: 'sm' | 'md' | 'lg' }>`\n margin: 0;\n font-size: ${({ theme, size = 'md' }) => {\n const sizes = {\n sm: theme.typography.fontSize.lg,\n md: theme.typography.fontSize.xl,\n lg: theme.typography.fontSize['2xl'],\n };\n return sizes[size];\n }};\n font-weight: ${({ theme }) => theme.typography.fontWeight.medium};\n color: ${({ theme }) => theme.colors.text.primary};\n`;\n\nexport const Text = styled.p<{\n color?: 'primary' | 'secondary' | 'tertiary' | 'accent';\n size?: 'xs' | 'sm' | 'md' | 'lg';\n}>`\n margin: 0;\n font-size: ${({ theme, size = 'md' }) => theme.typography.fontSize[size]};\n color: ${({ theme, color = 'primary' }) => {\n if (color === 'accent') return theme.colors.accent.primary;\n return theme.colors.text[color];\n }};\n line-height: ${({ theme }) => theme.typography.lineHeight.normal};\n`;\n\nexport const Link = styled.button`\n background: none;\n border: none;\n color: ${({ theme }) => theme.colors.text.secondary};\n font-family: ${({ theme }) => theme.typography.fontFamily};\n font-size: ${({ theme }) => theme.typography.fontSize.sm};\n text-decoration: underline;\n cursor: pointer;\n padding: 0;\n\n &:hover {\n color: ${({ theme }) => theme.colors.text.primary};\n }\n`;\n\n// ============================================================================\n// Divider\n// ============================================================================\n\nexport const Divider = styled.div`\n width: 100%;\n height: 1px;\n background-color: ${({ theme }) => theme.colors.border};\n`;\n\n// ============================================================================\n// List Item (for chats, artifacts lists)\n// ============================================================================\n\nexport const ListItem = styled.button`\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: ${({ theme }) => theme.spacing.md};\n background: transparent;\n border: none;\n border-bottom: 1px solid ${({ theme }) => theme.colors.border};\n color: ${({ theme }) => theme.colors.text.primary};\n font-family: ${({ theme }) => theme.typography.fontFamily};\n text-align: left;\n cursor: pointer;\n transition: background-color ${({ theme }) => theme.transitions.fast};\n\n &:hover {\n background-color: ${({ theme }) => theme.colors.background.secondary};\n }\n`;\n\n// ============================================================================\n// Widget Container Primitives\n// ============================================================================\n\nexport const WidgetRoot = styled.div<{ position: 'bottom-right' | 'bottom-left' }>`\n position: fixed;\n bottom: 20px;\n ${({ position }) => (position === 'bottom-right' ? 'right: 20px;' : 'left: 20px;')}\n z-index: ${({ theme }) => theme.zIndex.widget};\n font-family: ${({ theme }) => theme.typography.fontFamily};\n`;\n\nexport const WidgetPanel = styled(motion.div)`\n width: 400px;\n height: 700px;\n border-radius: ${({ theme }) => theme.radii.xl};\n overflow: hidden;\n box-shadow: ${({ theme }) => theme.shadows.lg};\n background-color: ${({ theme }) => theme.colors.background.primary};\n display: flex;\n flex-direction: column;\n`;\n\nexport const WidgetHeader = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: ${({ theme }) => `${theme.spacing.sm} ${theme.spacing.md}`};\n background-color: ${({ theme }) => theme.colors.background.primary};\n border-bottom: 1px solid ${({ theme }) => theme.colors.border};\n flex-shrink: 0;\n min-width: 0;\n gap: ${({ theme }) => theme.spacing.sm};\n`;\n\nexport const WidgetContent = styled.div`\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n`;\n\n// ============================================================================\n// Message Bubble (for chat messages)\n// ============================================================================\n\nexport const MessageBubble = styled.div<{ isUser?: boolean }>`\n max-width: 80%;\n padding: ${({ theme }) => `${theme.spacing.md} ${theme.spacing.md}`};\n border-radius: ${({ theme }) => theme.radii.md};\n background-color: ${({ theme, isUser }) =>\n isUser ? theme.colors.accent.primary : theme.colors.background.secondary};\n color: ${({ theme, isUser }) =>\n isUser ? theme.colors.text.inverse : theme.colors.text.primary};\n`;\n\nexport const MessageTimestamp = styled.span`\n font-size: ${({ theme }) => theme.typography.fontSize.xs};\n color: ${({ theme }) => theme.colors.text.secondary};\n margin-top: ${({ theme }) => theme.spacing.xs};\n`;\n\n// ============================================================================\n// Form\n// ============================================================================\n\nexport const Form = styled.form`\n display: flex;\n gap: ${({ theme }) => theme.spacing.sm};\n padding: ${({ theme }) => theme.spacing.md};\n border-top: 1px solid ${({ theme }) => theme.colors.border};\n`;\n\n// ============================================================================\n// Empty State\n// ============================================================================\n\nexport const EmptyState = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: ${({ theme }) => theme.colors.text.secondary};\n text-align: center;\n padding: ${({ theme }) => theme.spacing.xl};\n`;\n\n","'use client'\n\nimport React, {\n type ReactNode,\n createContext,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\n\nimport {\n AssistantRuntimeProvider,\n type unstable_RemoteThreadListAdapter as RemoteThreadListAdapter,\n type ThreadHistoryAdapter,\n useAssistantState,\n unstable_useRemoteThreadListRuntime as useRemoteThreadListRuntime,\n} from '@assistant-ui/react'\nimport {\n AssistantChatTransport,\n useChatRuntime,\n} from '@assistant-ui/react-ai-sdk'\nimport { CacheProvider } from '@emotion/react'\nimport { ThemeProvider } from '@emotion/react'\nimport { createAssistantStream } from 'assistant-stream'\n\nimport { WidgetClient } from '../core/client'\nimport type { WidgetConfig, WidgetState } from '../core/types'\nimport { DetailedAnswerToolUI } from './components/assistant-ui/detailed-answer-tool'\nimport { MessageContextProvider, useMessageContext } from './context/message-context'\nimport { theme, widgetCache } from './styles'\n\ninterface WidgetContextValue {\n client: WidgetClient\n state: WidgetState\n userId: string\n}\n\nexport const WidgetContext = createContext<WidgetContextValue | null>(null)\n\ninterface WidgetProviderProps {\n config: WidgetConfig\n children?: ReactNode\n autoInitialize?: boolean\n}\n\n/**\n * Generate a UUID for temporary users\n */\nfunction generateUserId(): string {\n return crypto.randomUUID()\n}\n\n/**\n * Create API headers for thread management\n */\nfunction createApiHeaders(userId: string, assistantId: string): HeadersInit {\n return {\n 'Content-Type': 'application/json',\n 'X-User-Id': userId,\n 'X-Assistant-Id': assistantId,\n }\n}\n\n/**\n * Create the thread list adapter for persistence\n */\nfunction createThreadListAdapter(\n baseUrl: string,\n userId: string,\n assistantId: string,\n): RemoteThreadListAdapter {\n const headers = createApiHeaders(userId, assistantId)\n\n return {\n // List all threads for this user\n async list() {\n try {\n const response = await fetch(`${baseUrl}/api/widget/threads`, {\n headers,\n })\n\n if (!response.ok) {\n console.error('[Threads] List failed:', response.status)\n return { threads: [] }\n }\n\n const data = await response.json()\n return { threads: data.threads || [] }\n } catch (error) {\n console.error('[Threads] List error:', error)\n return { threads: [] }\n }\n },\n\n // Fetch a single thread's details\n async fetch(remoteId: string) {\n const response = await fetch(\n `${baseUrl}/api/widget/threads/${remoteId}`,\n {\n headers,\n },\n )\n\n if (!response.ok) {\n throw new Error(`Failed to fetch thread: ${response.status}`)\n }\n\n const data = await response.json()\n return {\n remoteId: data.remoteId,\n status: data.status as 'regular' | 'archived',\n title: data.title,\n }\n },\n\n // Initialize a new thread\n async initialize(localId: string) {\n try {\n const response = await fetch(`${baseUrl}/api/widget/threads`, {\n method: 'POST',\n headers,\n body: JSON.stringify({ localId }),\n })\n\n if (!response.ok) {\n throw new Error(`Failed to create thread: ${response.status}`)\n }\n\n const data = await response.json()\n return { remoteId: data.remoteId, externalId: data.externalId }\n } catch (error) {\n console.error('[Threads] Initialize error:', error)\n throw error\n }\n },\n\n // Rename a thread\n async rename(remoteId: string, newTitle: string) {\n try {\n await fetch(`${baseUrl}/api/widget/threads/${remoteId}`, {\n method: 'PATCH',\n headers,\n body: JSON.stringify({ title: newTitle }),\n })\n } catch (error) {\n console.error('[Threads] Rename error:', error)\n }\n },\n\n // Archive a thread\n async archive(remoteId: string) {\n try {\n await fetch(`${baseUrl}/api/widget/threads/${remoteId}/archive`, {\n method: 'POST',\n headers,\n })\n } catch (error) {\n console.error('[Threads] Archive error:', error)\n }\n },\n\n // Unarchive a thread\n async unarchive(remoteId: string) {\n try {\n await fetch(`${baseUrl}/api/widget/threads/${remoteId}/unarchive`, {\n method: 'POST',\n headers,\n })\n } catch (error) {\n console.error('[Threads] Unarchive error:', error)\n }\n },\n\n // Delete a thread\n async delete(remoteId: string) {\n try {\n await fetch(`${baseUrl}/api/widget/threads/${remoteId}`, {\n method: 'DELETE',\n headers,\n })\n } catch (error) {\n console.error('[Threads] Delete error:', error)\n }\n },\n\n // Generate a title from messages\n async generateTitle(remoteId: string, messages: readonly unknown[]) {\n return createAssistantStream(async (controller) => {\n try {\n const response = await fetch(\n `${baseUrl}/api/widget/threads/${remoteId}/title`,\n {\n method: 'POST',\n headers,\n body: JSON.stringify({ messages }),\n },\n )\n\n if (!response.ok) {\n throw new Error(`Title generation failed: ${response.status}`)\n }\n\n const data = await response.json()\n controller.appendText(data.title)\n controller.close()\n } catch (error) {\n console.error('[Threads] Title generation error:', error)\n controller.appendText('New Chat')\n controller.close()\n }\n })\n },\n }\n}\n\n/**\n * Save messages to the backend\n */\nasync function saveMessages(\n baseUrl: string,\n userId: string,\n assistantId: string,\n threadId: string,\n messages: unknown[],\n) {\n try {\n const response = await fetch(\n `${baseUrl}/api/widget/threads/${threadId}/messages/sync`,\n {\n method: 'POST',\n headers: createApiHeaders(userId, assistantId),\n body: JSON.stringify({ messages }),\n },\n )\n\n if (!response.ok) {\n console.error('[Messages] Sync failed:', response.status)\n }\n } catch (error) {\n console.error('[Messages] Sync error:', error)\n }\n}\n\n/**\n * Create a history adapter for a specific thread\n */\nfunction createHistoryAdapter(\n baseUrl: string,\n userId: string,\n assistantId: string,\n remoteId: string | undefined,\n): ThreadHistoryAdapter {\n const headers = createApiHeaders(userId, assistantId)\n\n return {\n async load() {\n console.log('[History] load() called, remoteId:', remoteId)\n if (!remoteId) return { headId: null, messages: [] }\n\n try {\n const response = await fetch(\n `${baseUrl}/api/widget/threads/${remoteId}/messages`,\n { headers },\n )\n\n if (!response.ok) {\n console.error('[History] Failed to load messages:', response.status)\n return { headId: null, messages: [] }\n }\n\n const { messages } = await response.json()\n console.log('[History] Loaded messages:', messages.length)\n\n // Convert to format expected by useAISDKRuntime\n const formattedMessages = messages.map(\n (\n m: {\n id: string\n role: string\n content: unknown[]\n metadata?: { context?: Array<{ id: string; type: string; title: string }> }\n createdAt: string\n },\n index: number,\n ) => ({\n parentId: index > 0 ? messages[index - 1].id : null,\n message: {\n id: m.id,\n role: m.role as 'user' | 'assistant' | 'system',\n parts: m.content,\n metadata: m.metadata,\n createdAt: new Date(m.createdAt),\n },\n }),\n )\n\n console.log('[History] Formatted messages:', formattedMessages.length)\n\n return {\n headId: messages.length > 0 ? messages[messages.length - 1].id : null,\n messages: formattedMessages,\n }\n } catch (error) {\n console.error('[History] Load error:', error)\n return { headId: null, messages: [] }\n }\n },\n\n async append(message) {\n console.log('[History] append() called')\n // Messages are saved via onFinish, so this is a no-op\n },\n\n // Required by useExternalHistory in @assistant-ui/react-ai-sdk\n withFormat(_formatAdapter) {\n console.log('[History.withFormat] called, remoteId:', remoteId)\n return {\n async load() {\n if (!remoteId) return { headId: null, messages: [] }\n\n try {\n const response = await fetch(\n `${baseUrl}/api/widget/threads/${remoteId}/messages`,\n { headers },\n )\n\n if (!response.ok) {\n console.error('[History.withFormat] Failed:', response.status)\n return { headId: null, messages: [] }\n }\n\n const { messages } = await response.json()\n console.log('[History.withFormat] Loaded:', messages.length)\n\n const formattedMessages = messages.map(\n (\n m: {\n id: string\n role: string\n content: unknown[]\n metadata?: { context?: Array<{ id: string; type: string; title: string }> }\n createdAt: string\n },\n index: number,\n ) => ({\n parentId: index > 0 ? messages[index - 1].id : null,\n message: {\n id: m.id,\n role: m.role as 'user' | 'assistant' | 'system',\n parts: m.content,\n metadata: m.metadata,\n createdAt: new Date(m.createdAt),\n },\n }),\n )\n\n return {\n headId:\n messages.length > 0 ? messages[messages.length - 1].id : null,\n messages: formattedMessages,\n }\n } catch (error) {\n console.error('[History.withFormat] Error:', error)\n return { headId: null, messages: [] }\n }\n },\n\n async append(_item) {\n // Messages are saved via onFinish\n },\n }\n },\n }\n}\n\n/**\n * Inner provider that sets up the AssistantRuntimeProvider with thread persistence\n */\nfunction AssistantRuntimeWrapper({\n config,\n userId,\n children,\n}: {\n config: WidgetConfig\n userId: string\n children: ReactNode\n}) {\n const baseUrl = config.baseUrl || process.env.WIDGET_API_URL || 'http://localhost:3000'\n // The apiKey IS the assistantId\n const assistantId = config.apiKey\n\n // Get message context for passing context to transport\n const { consumeContext, clearContext } = useMessageContext()\n\n // Use a ref to access the current context in the transport\n const contextRef = useRef(consumeContext)\n contextRef.current = consumeContext\n\n // Ref to clear context after sending\n const clearContextRef = useRef(clearContext)\n clearContextRef.current = clearContext\n\n // Create the thread list adapter\n const threadListAdapter = useMemo(\n () => createThreadListAdapter(baseUrl, userId, assistantId),\n [baseUrl, userId, assistantId],\n )\n\n // Create the remote thread list runtime\n const runtime = useRemoteThreadListRuntime({\n runtimeHook: function useChatThreadRuntime() {\n // Get current thread ID from assistant state\n const threadId = useAssistantState(\n ({ threadListItem }) => threadListItem?.remoteId ?? undefined,\n )\n\n // Use a ref to always get the latest threadId in callbacks\n const threadIdRef = useRef(threadId)\n threadIdRef.current = threadId\n\n // Create history adapter for this specific thread\n const history = useMemo(\n () => createHistoryAdapter(baseUrl, userId, assistantId, threadId),\n [threadId],\n )\n\n // Create a transport using AssistantChatTransport with dynamic body\n const transport = useMemo(() => {\n console.log('[Widget] Creating transport for threadId:', threadId)\n return new AssistantChatTransport({\n api: `${baseUrl}/api/widget/chat`,\n headers: {\n 'X-User-Id': userId,\n 'X-Assistant-Id': assistantId,\n },\n // Use body as a function to dynamically include context\n body: () => {\n // Get current context and extract IDs\n const currentContext = contextRef.current()\n const contextIds = currentContext.map((item) => item.id)\n const contextMetadata = currentContext.map((item) => ({\n id: item.id,\n type: item.type,\n title: item.title,\n }))\n\n console.log('[Widget] Transport body - contextIds:', contextIds.length, 'threadId:', threadId)\n\n // Clear context after getting it (will be sent with this request)\n if (contextIds.length > 0) {\n // Use setTimeout to clear after the body function returns\n setTimeout(() => clearContextRef.current(), 0)\n }\n\n return {\n assistantId,\n threadId,\n ...(contextIds.length > 0 && { contextIds, contextMetadata }),\n }\n },\n })\n }, [threadId])\n\n // Use useChatRuntime which properly integrates with AI SDK\n const runtime = useChatRuntime({\n transport,\n adapters: { history },\n onFinish: ({ message, messages }) => {\n // Get the latest threadId from ref\n const currentThreadId = threadIdRef.current\n\n console.log(\n '[Widget] onFinish - threadId:',\n currentThreadId,\n 'messages:',\n messages.length,\n )\n\n // Save all messages to the backend when assistant finishes\n if (currentThreadId && messages.length > 0) {\n saveMessages(\n baseUrl,\n userId,\n assistantId,\n currentThreadId,\n messages,\n )\n }\n },\n })\n\n return runtime\n },\n adapter: threadListAdapter,\n })\n\n return (\n <AssistantRuntimeProvider runtime={runtime}>\n <DetailedAnswerToolUI />\n {children}\n </AssistantRuntimeProvider>\n )\n}\n\nexport function WidgetProvider({\n config,\n children,\n autoInitialize = true,\n}: WidgetProviderProps) {\n // Generate or use provided userId\n const [userId] = useState(() => config.userId || generateUserId())\n\n const [client] = useState(() => new WidgetClient(config))\n const [state, setState] = useState<WidgetState>(client.getState())\n\n useEffect(() => {\n // Subscribe to state changes\n const unsubscribe = client.on('state:change', ({ current }) => {\n setState(current)\n })\n\n // Auto-initialize if enabled\n if (autoInitialize && state.status === 'idle') {\n client.initialize().catch(console.error)\n }\n\n return () => {\n unsubscribe()\n client.destroy()\n }\n }, [client, autoInitialize, state.status])\n\n const contextValue = useMemo(\n () => ({ client, state, userId }),\n [client, state, userId],\n )\n\n return (\n <CacheProvider value={widgetCache}>\n <ThemeProvider theme={theme}>\n <WidgetContext.Provider value={contextValue}>\n <MessageContextProvider>\n <AssistantRuntimeWrapper config={config} userId={userId}>\n {children}\n </AssistantRuntimeWrapper>\n </MessageContextProvider>\n </WidgetContext.Provider>\n </ThemeProvider>\n </CacheProvider>\n )\n}\n","import { useContext, useCallback } from 'react';\nimport { WidgetContext } from '../provider';\nimport type { Message } from '../../core/types';\n\nexport function useWidget() {\n const context = useContext(WidgetContext);\n\n if (!context) {\n throw new Error('useWidget must be used within a WidgetProvider');\n }\n\n const { client, state } = context;\n\n const initialize = useCallback(async () => {\n if (state.status === 'idle') {\n await client.initialize();\n }\n }, [client, state.status]);\n\n const sendMessage = useCallback(\n async (content: string): Promise<Message> => {\n return client.sendMessage(content);\n },\n [client]\n );\n\n return {\n state,\n client,\n isIdle: state.status === 'idle',\n isInitializing: state.status === 'initializing',\n isReady: state.status === 'ready',\n isLoading: state.status === 'loading',\n isError: state.status === 'error',\n messages: state.status === 'ready' ? state.session.messages : [],\n error: state.status === 'error' ? state.error : null,\n initialize,\n sendMessage,\n };\n}\n\n","import { useState, useCallback } from 'react';\nimport { useWidget } from './useWidget';\n\nexport function useChat() {\n const { sendMessage, messages, isLoading, isReady } = useWidget();\n const [input, setInput] = useState('');\n\n const handleSubmit = useCallback(\n async (e?: React.FormEvent) => {\n e?.preventDefault();\n \n if (!input.trim() || !isReady || isLoading) {\n return;\n }\n\n const message = input.trim();\n setInput('');\n\n try {\n await sendMessage(message);\n } catch (error) {\n console.error('Failed to send message:', error);\n // Restore input on error\n setInput(message);\n }\n },\n [input, isReady, isLoading, sendMessage]\n );\n\n return {\n input,\n setInput,\n handleSubmit,\n messages,\n isLoading,\n canSubmit: isReady && !isLoading && input.trim().length > 0,\n };\n}\n\n","import * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from \"../../utils\"\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"bg-background 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 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 outline-none sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","import * as React from \"react\"\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\"\n\nimport { cn } from \"../../utils\"\n\nfunction Avatar({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root>) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n className={cn(\n \"relative flex size-8 shrink-0 overflow-hidden rounded-full\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarImage({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn(\"aspect-square size-full\", className)}\n {...props}\n />\n )\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n \"bg-muted flex size-full items-center justify-center rounded-full\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Avatar, AvatarImage, AvatarFallback }\n","\"use client\";\n\nimport { PropsWithChildren, useEffect, useState, type FC } from \"react\";\nimport { XIcon, PaperclipIcon, FileText } from \"lucide-react\";\nimport {\n AttachmentPrimitive,\n ComposerPrimitive,\n MessagePrimitive,\n useAssistantState,\n useAssistantApi,\n} from \"@assistant-ui/react\";\nimport { useShallow } from \"zustand/shallow\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../ui/tooltip\";\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogTrigger,\n} from \"../ui/dialog\";\nimport { Avatar, AvatarImage, AvatarFallback } from \"../ui/avatar\";\nimport { TooltipIconButton } from \"./tooltip-icon-button\";\nimport { cn } from \"../../utils\";\n\nconst useFileSrc = (file: File | undefined) => {\n const [src, setSrc] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n if (!file) {\n setSrc(undefined);\n return;\n }\n\n const objectUrl = URL.createObjectURL(file);\n setSrc(objectUrl);\n\n return () => {\n URL.revokeObjectURL(objectUrl);\n };\n }, [file]);\n\n return src;\n};\n\nconst useAttachmentSrc = () => {\n const { file, src } = useAssistantState(\n useShallow(({ attachment }): { file?: File; src?: string } => {\n if (attachment.type !== \"image\") return {};\n if (attachment.file) return { file: attachment.file };\n const src = attachment.content?.filter((c) => c.type === \"image\")[0]\n ?.image;\n if (!src) return {};\n return { src };\n })\n );\n\n return useFileSrc(file) ?? src;\n};\n\ntype AttachmentPreviewProps = {\n src: string;\n};\n\nconst AttachmentPreview: FC<AttachmentPreviewProps> = ({ src }) => {\n return (\n <img\n src={src}\n alt=\"Image Preview\"\n className=\"aui-attachment-preview-image-loaded block h-auto max-h-[80vh] w-auto max-w-full object-contain\"\n />\n );\n};\n\nconst AttachmentPreviewDialog: FC<PropsWithChildren> = ({ children }) => {\n const src = useAttachmentSrc();\n\n if (!src) return children;\n\n return (\n <Dialog>\n <DialogTrigger\n className=\"aui-attachment-preview-trigger cursor-pointer transition-colors hover:bg-accent/50\"\n asChild\n >\n {children}\n </DialogTrigger>\n <DialogContent className=\"aui-attachment-preview-dialog-content p-2 sm:max-w-3xl [&>button]:rounded-full [&>button]:bg-foreground/60 [&>button]:p-1 [&>button]:opacity-100 [&>button]:ring-0! [&_svg]:text-background [&>button]:hover:[&_svg]:text-destructive\">\n <DialogTitle className=\"aui-sr-only sr-only\">\n Image Attachment Preview\n </DialogTitle>\n <div className=\"aui-attachment-preview relative mx-auto flex max-h-[80dvh] w-full items-center justify-center overflow-hidden bg-background\">\n <AttachmentPreview src={src} />\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n\nconst AttachmentThumb: FC = () => {\n const isImage = useAssistantState(\n ({ attachment }) => attachment.type === \"image\"\n );\n const src = useAttachmentSrc();\n\n return (\n <Avatar className=\"aui-attachment-tile-avatar h-full w-full rounded-none\">\n <AvatarImage\n src={src}\n alt=\"Attachment preview\"\n className=\"aui-attachment-tile-image object-cover\"\n />\n <AvatarFallback delayMs={isImage ? 200 : 0}>\n <FileText className=\"aui-attachment-tile-fallback-icon size-8 text-muted-foreground\" />\n </AvatarFallback>\n </Avatar>\n );\n};\n\nconst AttachmentUI: FC = () => {\n const api = useAssistantApi();\n const isComposer = api.attachment.source === \"composer\";\n\n const isImage = useAssistantState(\n ({ attachment }) => attachment.type === \"image\"\n );\n const typeLabel = useAssistantState(({ attachment }) => {\n const type = attachment.type;\n switch (type) {\n case \"image\":\n return \"Image\";\n case \"document\":\n return \"Document\";\n case \"file\":\n return \"File\";\n default:\n return \"File\";\n }\n });\n\n return (\n <Tooltip>\n <AttachmentPrimitive.Root\n className={cn(\n \"aui-attachment-root relative\",\n isImage &&\n \"aui-attachment-root-composer only:[&>#attachment-tile]:size-24\"\n )}\n >\n <AttachmentPreviewDialog>\n <TooltipTrigger asChild>\n <div\n className={cn(\n \"aui-attachment-tile size-14 cursor-pointer overflow-hidden rounded-[14px] border bg-muted transition-opacity hover:opacity-75\",\n isComposer &&\n \"aui-attachment-tile-composer border-foreground/20\"\n )}\n role=\"button\"\n id=\"attachment-tile\"\n aria-label={`${typeLabel} attachment`}\n >\n <AttachmentThumb />\n </div>\n </TooltipTrigger>\n </AttachmentPreviewDialog>\n {isComposer && <AttachmentRemove />}\n </AttachmentPrimitive.Root>\n <TooltipContent side=\"top\">\n <AttachmentPrimitive.Name />\n </TooltipContent>\n </Tooltip>\n );\n};\n\nconst AttachmentRemove: FC = () => {\n return (\n <AttachmentPrimitive.Remove asChild>\n <TooltipIconButton\n tooltip=\"Remove file\"\n className=\"aui-attachment-tile-remove absolute top-1.5 right-1.5 size-3.5 rounded-full bg-white text-muted-foreground opacity-100 shadow-sm hover:bg-white! [&_svg]:text-black hover:[&_svg]:text-destructive\"\n side=\"top\"\n >\n <XIcon className=\"aui-attachment-remove-icon size-3 dark:stroke-[2.5px]\" />\n </TooltipIconButton>\n </AttachmentPrimitive.Remove>\n );\n};\n\nexport const UserMessageAttachments: FC = () => {\n return (\n <div className=\"aui-user-message-attachments-end col-span-full col-start-1 row-start-1 flex w-full flex-row justify-end gap-2\">\n <MessagePrimitive.Attachments components={{ Attachment: AttachmentUI }} />\n </div>\n );\n};\n\nexport const ComposerAttachments: FC = () => {\n return (\n <div className=\"aui-composer-attachments mb-2 flex w-full flex-row items-center gap-2 overflow-x-auto px-1.5 pt-0.5 pb-1 empty:hidden\">\n <ComposerPrimitive.Attachments\n components={{ Attachment: AttachmentUI }}\n />\n </div>\n );\n};\n\nexport const ComposerAddAttachment: FC = () => {\n return (\n <ComposerPrimitive.AddAttachment asChild>\n <TooltipIconButton\n tooltip=\"Add Attachment\"\n side=\"bottom\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"aui-composer-add-attachment size-[34px] rounded-full p-1 font-semibold text-xs hover:bg-muted-foreground/15 dark:border-muted-foreground/15 dark:hover:bg-muted-foreground/30\"\n aria-label=\"Add Attachment\"\n >\n <PaperclipIcon className=\"aui-attachment-add-icon size-5 stroke-[1.5px]\" />\n </TooltipIconButton>\n </ComposerPrimitive.AddAttachment>\n );\n};\n","\"use client\";\n\nimport \"@assistant-ui/react-markdown/styles/dot.css\";\n\nimport {\n type CodeHeaderProps,\n MarkdownTextPrimitive,\n unstable_memoizeMarkdownComponents as memoizeMarkdownComponents,\n useIsMarkdownCodeBlock,\n} from \"@assistant-ui/react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport { type FC, memo, useState } from \"react\";\nimport { CheckIcon, CopyIcon } from \"lucide-react\";\n\nimport { TooltipIconButton } from \"./tooltip-icon-button\";\nimport { cn } from \"../../utils\";\n\nconst MarkdownTextImpl = () => {\n return (\n <MarkdownTextPrimitive\n remarkPlugins={[remarkGfm]}\n className=\"aui-md\"\n components={defaultComponents}\n />\n );\n};\n\nexport const MarkdownText = memo(MarkdownTextImpl);\n\nconst CodeHeader: FC<CodeHeaderProps> = ({ language, code }) => {\n const { isCopied, copyToClipboard } = useCopyToClipboard();\n const onCopy = () => {\n if (!code || isCopied) return;\n copyToClipboard(code);\n };\n\n return (\n <div className=\"aui-code-header-root mt-4 flex items-center justify-between gap-4 rounded-t-lg bg-muted-foreground/15 px-4 py-2 font-semibold text-foreground text-sm dark:bg-muted-foreground/20\">\n <span className=\"aui-code-header-language lowercase [&>span]:text-xs\">\n {language}\n </span>\n <TooltipIconButton tooltip=\"Copy\" onClick={onCopy}>\n {!isCopied && <CopyIcon />}\n {isCopied && <CheckIcon />}\n </TooltipIconButton>\n </div>\n );\n};\n\nconst useCopyToClipboard = ({\n copiedDuration = 3000,\n}: {\n copiedDuration?: number;\n} = {}) => {\n const [isCopied, setIsCopied] = useState<boolean>(false);\n\n const copyToClipboard = (value: string) => {\n if (!value) return;\n\n navigator.clipboard.writeText(value).then(() => {\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), copiedDuration);\n });\n };\n\n return { isCopied, copyToClipboard };\n};\n\nconst defaultComponents = memoizeMarkdownComponents({\n h1: ({ className, ...props }) => (\n <h1\n className={cn(\n \"aui-md-h1 mb-8 scroll-m-20 font-extrabold text-4xl tracking-tight last:mb-0\",\n className,\n )}\n {...props}\n />\n ),\n h2: ({ className, ...props }) => (\n <h2\n className={cn(\n \"aui-md-h2 mt-8 mb-4 scroll-m-20 font-semibold text-3xl tracking-tight first:mt-0 last:mb-0\",\n className,\n )}\n {...props}\n />\n ),\n h3: ({ className, ...props }) => (\n <h3\n className={cn(\n \"aui-md-h3 mt-6 mb-4 scroll-m-20 font-semibold text-2xl tracking-tight first:mt-0 last:mb-0\",\n className,\n )}\n {...props}\n />\n ),\n h4: ({ className, ...props }) => (\n <h4\n className={cn(\n \"aui-md-h4 mt-6 mb-4 scroll-m-20 font-semibold text-xl tracking-tight first:mt-0 last:mb-0\",\n className,\n )}\n {...props}\n />\n ),\n h5: ({ className, ...props }) => (\n <h5\n className={cn(\n \"aui-md-h5 my-4 font-semibold text-lg first:mt-0 last:mb-0\",\n className,\n )}\n {...props}\n />\n ),\n h6: ({ className, ...props }) => (\n <h6\n className={cn(\n \"aui-md-h6 my-4 font-semibold first:mt-0 last:mb-0\",\n className,\n )}\n {...props}\n />\n ),\n p: ({ className, ...props }) => (\n <p\n className={cn(\n \"aui-md-p mt-5 mb-5 leading-7 first:mt-0 last:mb-0\",\n className,\n )}\n {...props}\n />\n ),\n a: ({ className, ...props }) => (\n <a\n className={cn(\n \"aui-md-a font-medium text-primary underline underline-offset-4\",\n className,\n )}\n {...props}\n />\n ),\n blockquote: ({ className, ...props }) => (\n <blockquote\n className={cn(\"aui-md-blockquote border-l-2 pl-6 italic\", className)}\n {...props}\n />\n ),\n ul: ({ className, ...props }) => (\n <ul\n className={cn(\"aui-md-ul my-5 ml-6 list-disc [&>li]:mt-2\", className)}\n {...props}\n />\n ),\n ol: ({ className, ...props }) => (\n <ol\n className={cn(\"aui-md-ol my-5 ml-6 list-decimal [&>li]:mt-2\", className)}\n {...props}\n />\n ),\n hr: ({ className, ...props }) => (\n <hr className={cn(\"aui-md-hr my-5 border-b\", className)} {...props} />\n ),\n table: ({ className, ...props }) => (\n <table\n className={cn(\n \"aui-md-table my-5 w-full border-separate border-spacing-0 overflow-y-auto\",\n className,\n )}\n {...props}\n />\n ),\n th: ({ className, ...props }) => (\n <th\n className={cn(\n \"aui-md-th bg-muted px-4 py-2 text-left font-bold first:rounded-tl-lg last:rounded-tr-lg [[align=center]]:text-center [[align=right]]:text-right\",\n className,\n )}\n {...props}\n />\n ),\n td: ({ className, ...props }) => (\n <td\n className={cn(\n \"aui-md-td border-b border-l px-4 py-2 text-left last:border-r [[align=center]]:text-center [[align=right]]:text-right\",\n className,\n )}\n {...props}\n />\n ),\n tr: ({ className, ...props }) => (\n <tr\n className={cn(\n \"aui-md-tr m-0 border-b p-0 first:border-t [&:last-child>td:first-child]:rounded-bl-lg [&:last-child>td:last-child]:rounded-br-lg\",\n className,\n )}\n {...props}\n />\n ),\n sup: ({ className, ...props }) => (\n <sup\n className={cn(\"aui-md-sup [&>a]:text-xs [&>a]:no-underline\", className)}\n {...props}\n />\n ),\n pre: ({ className, ...props }) => (\n <pre\n className={cn(\n \"aui-md-pre overflow-x-auto rounded-t-none! rounded-b-lg bg-black p-4 text-white\",\n className,\n )}\n {...props}\n />\n ),\n code: function Code({ className, ...props }) {\n const isCodeBlock = useIsMarkdownCodeBlock();\n return (\n <code\n className={cn(\n !isCodeBlock &&\n \"aui-md-inline-code rounded border bg-muted font-semibold\",\n className,\n )}\n {...props}\n />\n );\n },\n CodeHeader,\n});\n","import type { ToolCallMessagePartComponent } from \"@assistant-ui/react\";\nimport { ToolCard } from \"./tool-card\";\nimport { cn } from \"../../utils\";\n\nexport const ToolFallback: ToolCallMessagePartComponent = ({\n toolName,\n argsText,\n result,\n status,\n}) => {\n const isStreaming = status?.type === \"running\";\n const isError = status?.type === \"incomplete\";\n const isCancelled =\n status?.type === \"incomplete\" && status.reason === \"cancelled\";\n\n const cancelledReason =\n isCancelled && status.error\n ? typeof status.error === \"string\"\n ? status.error\n : JSON.stringify(status.error)\n : null;\n\n // Build title with appropriate prefix\n const titlePrefix = isCancelled\n ? \"Cancelled: \"\n : isStreaming\n ? \"Running: \"\n : \"\";\n\n return (\n <ToolCard\n title={`${titlePrefix}${toolName}`}\n isStreaming={isStreaming}\n isError={isError}\n >\n <div className=\"flex flex-col gap-2 text-white\">\n {/* Cancelled reason */}\n {cancelledReason && (\n <div>\n <p className=\"font-semibold text-white/70 mb-0.5\">\n Cancelled reason:\n </p>\n <p className=\"text-white/60\">{cancelledReason}</p>\n </div>\n )}\n\n {/* Arguments */}\n <div className={cn(isCancelled && \"opacity-60\")}>\n <p className=\"font-semibold text-white/70 mb-0.5\">Arguments:</p>\n <pre className=\"whitespace-pre-wrap bg-black/20 p-1.5 rounded text-white/80\">\n {argsText}\n </pre>\n </div>\n\n {/* Result */}\n {!isCancelled && result !== undefined && (\n <div className=\"border-t border-white/10 pt-2\">\n <p className=\"font-semibold text-white/70 mb-0.5\">Result:</p>\n <pre className=\"whitespace-pre-wrap bg-black/20 p-1.5 rounded text-white/80\">\n {typeof result === \"string\"\n ? result\n : JSON.stringify(result, null, 2)}\n </pre>\n </div>\n )}\n </div>\n </ToolCard>\n );\n};\n","import { XIcon } from \"lucide-react\";\nimport type { FC } from \"react\";\nimport { cn } from \"../../utils\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../ui/tooltip\";\n\ninterface ContextPillProps {\n label: string;\n onRemove?: () => void;\n /** When true, hides the remove button (for historical messages) */\n readonly?: boolean;\n className?: string;\n}\n\nexport const ContextPill: FC<ContextPillProps> = ({\n label,\n onRemove,\n readonly = false,\n className,\n}) => {\n const showRemoveButton = !readonly && onRemove;\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <div\n className={cn(\n \"group flex items-center gap-1 rounded-md border border-muted-foreground py-1 px-1.5 text-xs\",\n \"max-w-[200px] cursor-default\",\n className\n )}\n >\n {showRemoveButton && (\n <button\n onClick={onRemove}\n aria-label={`Remove ${label}`}\n className=\"shrink-0 hover:text-destructive transition-colors\"\n >\n <XIcon className=\"size-3\" />\n </button>\n )}\n <span className=\"truncate\">{label}</span>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"top\" sideOffset={4}>\n {label}\n </TooltipContent>\n </Tooltip>\n );\n};\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cn } from \"../../utils\";\nimport { theme } from \"../../styles/theme\";\n\nfunction Popover({\n modal = false,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root modal={modal} {...props} />;\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger {...props} />;\n}\n\nfunction PopoverContent({\n className,\n align = \"start\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-[10000] w-72 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 style={{\n zIndex: 10000,\n borderColor: theme.colors.border,\n ...props.style,\n }}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n}\n\nexport { Popover, PopoverTrigger, PopoverContent };\n\n","import type { FC } from 'react'\nimport { useEffect, useRef } from 'react'\nimport {\n FileIcon,\n FileTextIcon,\n VideoIcon,\n LinkIcon,\n LoaderIcon,\n} from 'lucide-react'\nimport { Popover, PopoverContent, PopoverTrigger } from '../ui/popover'\nimport { cn } from '../../utils'\nimport type { ContextItem, ContextCategory } from '../../hooks/useContextMention'\n\n/**\n * Icon mapping for context item types\n */\nconst TYPE_ICONS: Record<string, FC<{ className?: string }>> = {\n attachment: FileIcon,\n description: FileTextIcon,\n caption: VideoIcon,\n link: LinkIcon,\n}\n\ninterface ContextMentionPopoverProps {\n isOpen: boolean\n onOpenChange: (open: boolean) => void\n categories: ContextCategory[]\n isLoading: boolean\n activeIndex: number\n flattenedItems: ContextItem[]\n onSelectItem: (item: ContextItem) => void\n onActiveIndexChange: (index: number) => void\n getCategoryLabel: (type: string) => string\n trigger: React.ReactNode\n searchTerm: string\n}\n\nexport const ContextMentionPopover: FC<ContextMentionPopoverProps> = ({\n isOpen,\n onOpenChange,\n categories,\n isLoading,\n activeIndex,\n flattenedItems,\n onSelectItem,\n onActiveIndexChange,\n getCategoryLabel,\n trigger,\n searchTerm,\n}) => {\n const activeItemRef = useRef<HTMLButtonElement>(null)\n\n // Scroll active item into view\n useEffect(() => {\n if (isOpen && activeItemRef.current) {\n activeItemRef.current.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n })\n }\n }, [activeIndex, isOpen])\n\n // Calculate the flattened index for an item\n const getFlattenedIndex = (categoryIndex: number, itemIndex: number) => {\n let index = 0\n for (let i = 0; i < categoryIndex; i++) {\n index += categories[i].items.length\n }\n return index + itemIndex\n }\n\n const hasNoResults = !isLoading && flattenedItems.length === 0\n\n return (\n <Popover open={isOpen} onOpenChange={onOpenChange} modal={false}>\n <PopoverTrigger asChild>{trigger}</PopoverTrigger>\n <PopoverContent\n className=\"w-72 max-h-80 overflow-y-auto p-0\"\n align=\"start\"\n side=\"top\"\n sideOffset={8}\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <div className=\"flex flex-col\">\n {/* Header */}\n <div className=\"sticky top-0 z-10 border-b border-border bg-popover px-3 py-2\">\n <p className=\"text-xs font-medium text-muted-foreground\">\n {searchTerm\n ? `Searching for \"${searchTerm}\"`\n : 'Select context to focus on'}\n </p>\n </div>\n\n {/* Loading State */}\n {isLoading && (\n <div className=\"flex items-center justify-center py-8\">\n <LoaderIcon className=\"size-5 animate-spin text-muted-foreground\" />\n </div>\n )}\n\n {/* Empty State */}\n {hasNoResults && (\n <div className=\"px-3 py-8 text-center text-sm text-muted-foreground\">\n No context items found\n {searchTerm && (\n <span className=\"block text-xs mt-1\">\n Try a different search term\n </span>\n )}\n </div>\n )}\n\n {/* Categories */}\n {!isLoading &&\n categories.map((category, categoryIndex) => {\n if (category.items.length === 0) return null\n\n const Icon = TYPE_ICONS[category.type] || FileIcon\n\n return (\n <div key={category.type} className=\"py-1\">\n {/* Category Header */}\n <div className=\"flex items-center gap-2 px-3 py-1.5\">\n <Icon className=\"size-3.5 text-muted-foreground\" />\n <span className=\"text-xs font-medium text-muted-foreground\">\n {getCategoryLabel(category.type)}\n </span>\n <span className=\"text-xs text-muted-foreground/60\">\n ({category.items.length})\n </span>\n </div>\n\n {/* Category Items */}\n <div className=\"flex flex-col\">\n {category.items.map((item, itemIndex) => {\n const flatIndex = getFlattenedIndex(\n categoryIndex,\n itemIndex,\n )\n const isActive = flatIndex === activeIndex\n\n return (\n <button\n key={item.id}\n ref={isActive ? activeItemRef : null}\n type=\"button\"\n className={cn(\n 'flex flex-col items-start px-3 py-2 text-left text-sm transition-colors',\n 'hover:bg-accent/10',\n isActive && 'bg-accent/20',\n )}\n onClick={() => onSelectItem(item)}\n onMouseEnter={() => onActiveIndexChange(flatIndex)}\n >\n <span className=\"truncate w-full font-medium text-foreground\">\n {item.title}\n </span>\n {(item.lessonTitle || item.chapterTitle) && (\n <span className=\"truncate w-full text-xs text-muted-foreground\">\n {item.chapterTitle && item.lessonTitle\n ? `${item.chapterTitle} > ${item.lessonTitle}`\n : item.lessonTitle || item.chapterTitle}\n </span>\n )}\n </button>\n )\n })}\n </div>\n </div>\n )\n })}\n </div>\n </PopoverContent>\n </Popover>\n )\n}\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n type KeyboardEvent,\n} from \"react\";\nimport { useComposerRuntime } from \"@assistant-ui/react\";\nimport { cn } from \"../../utils\";\n\n// SVG icons for different context types (lucide icons as SVG strings)\nconst TYPE_ICON_SVGS: Record<string, string> = {\n attachment: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\"/><path d=\"M14 2v4a2 2 0 0 0 2 2h4\"/></svg>',\n description: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\"/><path d=\"M14 2v4a2 2 0 0 0 2 2h4\"/><path d=\"M10 9H8\"/><path d=\"M16 13H8\"/><path d=\"M16 17H8\"/></svg>',\n caption: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5\"/><rect x=\"2\" y=\"6\" width=\"14\" height=\"12\" rx=\"2\"/></svg>',\n link: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"/><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"/></svg>',\n};\n\n/**\n * Get SVG icon string for a context type\n */\nfunction getTypeIconSvg(type: string): string {\n return TYPE_ICON_SVGS[type] || TYPE_ICON_SVGS.attachment;\n}\n\nexport interface InlineMention {\n id: string;\n title: string;\n icon?: string;\n type?: 'attachment' | 'description' | 'caption' | 'link';\n}\n\nexport interface MentionComposerInputRef {\n focus: () => void;\n getValue: () => string;\n insertMention: (mention: InlineMention) => void;\n getInlineMentions: () => InlineMention[];\n}\n\ninterface MentionComposerInputProps {\n placeholder?: string;\n className?: string;\n autoFocus?: boolean;\n onInput?: (e: { text: string; cursorPosition: number }) => void;\n onKeyDown?: (e: KeyboardEvent<HTMLDivElement>) => void;\n /** Called when a mention is removed via backspace */\n onMentionRemove?: (mentionId: string) => void;\n /** Called when @ is detected */\n onTriggerDetected?: (searchTerm: string, triggerStart: number) => void;\n /** Called when @ trigger is dismissed */\n onTriggerDismissed?: () => void;\n /** Called when Enter is pressed (without Shift) to submit the message */\n onSubmit?: () => void;\n}\n\n// Zero-width space for cursor positioning around mentions\nconst ZERO_WIDTH_SPACE = \"\\u200B\";\n\nexport const MentionComposerInput = forwardRef<\n MentionComposerInputRef,\n MentionComposerInputProps\n>(\n (\n {\n placeholder = \"Ask, search, or make anything...\",\n className,\n autoFocus = false,\n onInput,\n onKeyDown,\n onMentionRemove,\n onTriggerDetected,\n onTriggerDismissed,\n onSubmit,\n },\n ref\n ) => {\n const editorRef = useRef<HTMLDivElement>(null);\n const composerRuntime = useComposerRuntime();\n const [isEmpty, setIsEmpty] = useState(true);\n const [inlineMentions, setInlineMentions] = useState<InlineMention[]>([]);\n const triggerPositionRef = useRef<number | null>(null);\n\n // Get plain text from editor (excluding mention pill text, using placeholders)\n const getPlainText = useCallback(() => {\n const editor = editorRef.current;\n if (!editor) return \"\";\n\n let text = \"\";\n const walkNodes = (node: Node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n // Filter out zero-width spaces\n const nodeText = node.textContent || \"\";\n text += nodeText.replace(/\\u200B/g, \"\");\n } else if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n if (element.dataset.mentionId) {\n // For mentions, add a placeholder that includes the title\n const title = element.dataset.mentionTitle || \"\";\n text += `[${title}]`;\n } else if (element.tagName === \"BR\") {\n text += \"\\n\";\n } else {\n node.childNodes.forEach(walkNodes);\n }\n }\n };\n\n editor.childNodes.forEach(walkNodes);\n return text.trim();\n }, []);\n\n // Get cursor position relative to text content\n const getCursorPosition = useCallback(() => {\n const selection = window.getSelection();\n if (!selection || !selection.rangeCount) return 0;\n\n const range = selection.getRangeAt(0);\n const preCaretRange = range.cloneRange();\n preCaretRange.selectNodeContents(editorRef.current!);\n preCaretRange.setEnd(range.endContainer, range.endOffset);\n\n // Count characters up to cursor\n let position = 0;\n const walkNodes = (node: Node): boolean => {\n if (node === range.endContainer) {\n if (node.nodeType === Node.TEXT_NODE) {\n position += range.endOffset;\n }\n return true;\n }\n\n if (node.nodeType === Node.TEXT_NODE) {\n const text = (node.textContent || \"\").replace(/\\u200B/g, \"\");\n position += text.length;\n } else if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n if (element.dataset.mentionId) {\n // Mention counts as its title length in brackets\n const title = element.dataset.mentionTitle || \"\";\n position += title.length + 2; // +2 for []\n } else if (element.tagName === \"BR\") {\n position += 1;\n } else {\n for (const child of Array.from(node.childNodes)) {\n if (walkNodes(child)) return true;\n }\n }\n }\n return false;\n };\n\n if (editorRef.current) {\n for (const child of Array.from(editorRef.current.childNodes)) {\n if (walkNodes(child)) break;\n }\n }\n\n return position;\n }, []);\n\n // Sync text to composer runtime\n const syncToRuntime = useCallback(() => {\n const text = getPlainText();\n composerRuntime.setText(text);\n setIsEmpty(text.length === 0);\n }, [composerRuntime, getPlainText]);\n\n // Handle input changes\n const handleInput = useCallback(() => {\n syncToRuntime();\n\n const text = getPlainText();\n const cursorPos = getCursorPosition();\n\n onInput?.({ text, cursorPosition: cursorPos });\n\n // Detect @ trigger\n const editor = editorRef.current;\n if (!editor) return;\n\n // Get text content up to cursor for @ detection\n const selection = window.getSelection();\n if (!selection || !selection.rangeCount) return;\n\n const range = selection.getRangeAt(0);\n let textBeforeCursor = \"\";\n let charCount = 0;\n\n const walkForText = (node: Node): boolean => {\n if (node === range.endContainer) {\n if (node.nodeType === Node.TEXT_NODE) {\n textBeforeCursor += (node.textContent || \"\").slice(0, range.endOffset);\n }\n return true;\n }\n\n if (node.nodeType === Node.TEXT_NODE) {\n textBeforeCursor += node.textContent || \"\";\n charCount += (node.textContent || \"\").length;\n } else if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n if (element.dataset.mentionId) {\n textBeforeCursor += \" \"; // Treat mention as space for @ detection\n charCount += 1;\n } else {\n for (const child of Array.from(node.childNodes)) {\n if (walkForText(child)) return true;\n }\n }\n }\n return false;\n };\n\n for (const child of Array.from(editor.childNodes)) {\n if (walkForText(child)) break;\n }\n\n // Find last @ before cursor\n const lastAtIndex = textBeforeCursor.lastIndexOf(\"@\");\n\n if (lastAtIndex !== -1) {\n const charBeforeAt = lastAtIndex > 0 ? textBeforeCursor[lastAtIndex - 1] : \" \";\n if (charBeforeAt === \" \" || charBeforeAt === \"\\n\" || charBeforeAt === ZERO_WIDTH_SPACE || lastAtIndex === 0) {\n const searchText = textBeforeCursor.slice(lastAtIndex + 1);\n if (!searchText.includes(\" \")) {\n triggerPositionRef.current = lastAtIndex;\n onTriggerDetected?.(searchText, lastAtIndex);\n return;\n }\n }\n }\n\n // No valid trigger\n if (triggerPositionRef.current !== null) {\n triggerPositionRef.current = null;\n onTriggerDismissed?.();\n }\n }, [syncToRuntime, getPlainText, getCursorPosition, onInput, onTriggerDetected, onTriggerDismissed]);\n\n // Handle keydown for backspace (delete whole mentions) and Enter (submit)\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n // Handle Enter key to submit (without Shift for newline)\n if (e.key === \"Enter\" && !e.shiftKey) {\n // Check if the parent onKeyDown handler wants to handle this (e.g., for autocomplete)\n // If so, let it handle and don't submit\n if (onKeyDown) {\n // Pass to parent first - it will call preventDefault if handling\n onKeyDown(e);\n if (e.defaultPrevented) {\n return;\n }\n }\n \n // Submit the message\n e.preventDefault();\n const text = getPlainText();\n if (text.trim()) {\n onSubmit?.();\n }\n return;\n }\n\n if (e.key === \"Backspace\") {\n const selection = window.getSelection();\n if (!selection || !selection.rangeCount) return;\n\n const range = selection.getRangeAt(0);\n\n // Check if we're at the edge of a mention\n if (range.collapsed) {\n const container = range.startContainer;\n const offset = range.startOffset;\n\n // Check previous sibling if at start of text node\n if (container.nodeType === Node.TEXT_NODE && offset === 0) {\n let prevSibling = container.previousSibling;\n if (!prevSibling && container.parentElement !== editorRef.current) {\n prevSibling = container.parentElement?.previousSibling || null;\n }\n\n if (prevSibling && (prevSibling as HTMLElement).dataset?.mentionId) {\n e.preventDefault();\n const mentionId = (prevSibling as HTMLElement).dataset.mentionId!;\n prevSibling.parentNode?.removeChild(prevSibling);\n setInlineMentions((prev) => prev.filter((m) => m.id !== mentionId));\n onMentionRemove?.(mentionId);\n syncToRuntime();\n return;\n }\n }\n\n // Check if cursor is right after a mention element\n if (container.nodeType === Node.ELEMENT_NODE) {\n const element = container as HTMLElement;\n const childAtOffset = element.childNodes[offset - 1];\n if (childAtOffset && (childAtOffset as HTMLElement).dataset?.mentionId) {\n e.preventDefault();\n const mentionId = (childAtOffset as HTMLElement).dataset.mentionId!;\n childAtOffset.parentNode?.removeChild(childAtOffset);\n setInlineMentions((prev) => prev.filter((m) => m.id !== mentionId));\n onMentionRemove?.(mentionId);\n syncToRuntime();\n return;\n }\n }\n }\n }\n\n // Pass through to parent handler for other keys\n onKeyDown?.(e);\n },\n [onKeyDown, onMentionRemove, syncToRuntime, onSubmit, getPlainText]\n );\n\n // Insert a mention at the current cursor position\n const insertMention = useCallback(\n (mention: InlineMention) => {\n const editor = editorRef.current;\n if (!editor) return;\n\n const selection = window.getSelection();\n if (!selection || !selection.rangeCount) return;\n\n // Find and remove the @ trigger text\n const range = selection.getRangeAt(0);\n\n if (triggerPositionRef.current !== null) {\n // We need to find the @ and remove from there to cursor\n // Walk through nodes to find the @ position\n let currentPos = 0;\n let foundNode: Text | null = null;\n let foundOffset = 0;\n\n const findAtPosition = (node: Node): boolean => {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent || \"\";\n const targetPosInNode = triggerPositionRef.current! - currentPos;\n\n if (targetPosInNode >= 0 && targetPosInNode < text.length) {\n foundNode = node as Text;\n foundOffset = targetPosInNode;\n return true;\n }\n currentPos += text.length;\n } else if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n if (element.dataset.mentionId) {\n currentPos += 1; // Mention counts as 1 char for positioning\n } else {\n for (const child of Array.from(node.childNodes)) {\n if (findAtPosition(child)) return true;\n }\n }\n }\n return false;\n };\n\n for (const child of Array.from(editor.childNodes)) {\n if (findAtPosition(child)) break;\n }\n\n if (foundNode) {\n // Delete from @ to current cursor\n const deleteRange = document.createRange();\n deleteRange.setStart(foundNode, foundOffset);\n deleteRange.setEnd(range.endContainer, range.endOffset);\n deleteRange.deleteContents();\n }\n }\n\n // Create mention element\n const mentionEl = document.createElement(\"span\");\n mentionEl.className =\n \"inline-flex items-center gap-1 rounded-md border border-muted-foreground py-0.5 px-1.5 text-xs mx-0.5 cursor-default select-none bg-muted/50 max-w-[350px]\";\n mentionEl.contentEditable = \"false\";\n mentionEl.dataset.mentionId = mention.id;\n mentionEl.dataset.mentionTitle = mention.title;\n\n // Add icon if present, otherwise use type-based icon\n if (mention.icon) {\n const iconImg = document.createElement(\"img\");\n iconImg.src = mention.icon;\n iconImg.className = \"size-3.5 rounded-sm shrink-0\";\n iconImg.alt = \"\";\n mentionEl.appendChild(iconImg);\n } else if (mention.type) {\n // Add type-based SVG icon\n const iconSpan = document.createElement(\"span\");\n iconSpan.className = \"size-3.5 shrink-0 flex items-center justify-center\";\n iconSpan.innerHTML = getTypeIconSvg(mention.type);\n mentionEl.appendChild(iconSpan);\n }\n\n // Add title\n const titleSpan = document.createElement(\"span\");\n titleSpan.className = \"truncate\";\n titleSpan.textContent = mention.title;\n mentionEl.appendChild(titleSpan);\n\n // Insert mention at current position\n const insertRange = selection.getRangeAt(0);\n insertRange.insertNode(mentionEl);\n\n // Add a space after for continued typing\n const spaceNode = document.createTextNode(\" \");\n mentionEl.after(spaceNode);\n\n // Move cursor after the space\n const newRange = document.createRange();\n newRange.setStartAfter(spaceNode);\n newRange.collapse(true);\n selection.removeAllRanges();\n selection.addRange(newRange);\n\n // Update state\n setInlineMentions((prev) => [...prev, mention]);\n triggerPositionRef.current = null;\n syncToRuntime();\n\n // Ensure focus stays on the editor\n setTimeout(() => {\n editorRef.current?.focus();\n }, 10);\n },\n [syncToRuntime]\n );\n\n // Expose methods via ref\n useImperativeHandle(\n ref,\n () => ({\n focus: () => editorRef.current?.focus(),\n getValue: getPlainText,\n insertMention,\n getInlineMentions: () => inlineMentions,\n }),\n [getPlainText, insertMention, inlineMentions]\n );\n\n // Auto focus on mount\n useEffect(() => {\n if (autoFocus) {\n editorRef.current?.focus();\n }\n }, [autoFocus]);\n\n // Clear editor when message is sent (composer text becomes empty)\n useEffect(() => {\n const unsubscribe = composerRuntime.subscribe(() => {\n const composerState = composerRuntime.getState();\n if (composerState.text === \"\" && editorRef.current) {\n // Clear the editor content\n editorRef.current.innerHTML = \"\";\n setInlineMentions([]);\n setIsEmpty(true);\n }\n });\n return unsubscribe;\n }, [composerRuntime]);\n\n // Prevent default paste - paste as plain text only\n const handlePaste = useCallback((e: React.ClipboardEvent) => {\n e.preventDefault();\n const text = e.clipboardData.getData(\"text/plain\");\n document.execCommand(\"insertText\", false, text);\n }, []);\n\n return (\n <div className=\"relative\">\n <div\n ref={editorRef}\n contentEditable\n role=\"textbox\"\n aria-label=\"Message input\"\n data-placeholder={placeholder}\n className={cn(\n \"aui-composer-input mb-1 max-h-32 min-h-14 w-full resize-none bg-transparent px-4 pt-2 pb-3 text-sm outline-none\",\n \"overflow-y-auto whitespace-pre-wrap wrap-break-word\",\n \"focus:outline-none focus-visible:ring-0\",\n // Placeholder styling using data attribute\n \"empty:before:content-[attr(data-placeholder)] empty:before:text-muted-foreground empty:before:pointer-events-none\",\n className\n )}\n onInput={handleInput}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n suppressContentEditableWarning\n />\n </div>\n );\n }\n);\n\nMentionComposerInput.displayName = \"MentionComposerInput\";\n","import { type FC, useMemo } from \"react\";\nimport { useMessage } from \"@assistant-ui/react\";\nimport { cn } from \"../../utils\";\nimport {\n FileIcon,\n FileTextIcon,\n VideoIcon,\n LinkIcon,\n} from \"lucide-react\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../ui/tooltip\";\n\n/**\n * Icon mapping for context item types\n */\nconst TYPE_ICONS: Record<string, FC<{ className?: string }>> = {\n attachment: FileIcon,\n description: FileTextIcon,\n caption: VideoIcon,\n link: LinkIcon,\n};\n\ninterface InlineContextPillProps {\n title: string;\n type?: string;\n className?: string;\n}\n\n/**\n * Inline context pill component for displaying context items in message history\n * Similar to ContextPill but without the remove button and slightly different styling\n */\nconst InlineContextPill: FC<InlineContextPillProps> = ({\n title,\n type = \"attachment\",\n className,\n}) => {\n const Icon = TYPE_ICONS[type] || FileIcon;\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n className={cn(\n \"inline-flex items-center gap-1 rounded-md border border-muted-foreground/50 py-0.5 px-1.5 text-xs mx-0.5\",\n \"max-w-[350px] cursor-default bg-muted/30 align-middle\",\n className\n )}\n >\n <Icon className=\"size-3 shrink-0\" />\n <span className=\"truncate\">{title}</span>\n </span>\n </TooltipTrigger>\n <TooltipContent side=\"top\" sideOffset={4}>\n {title}\n </TooltipContent>\n </Tooltip>\n );\n};\n\n/**\n * Parse message text and extract context mentions in [title] format\n * Returns an array of text segments and context mentions\n */\ninterface ContentPart {\n type: \"text\" | \"context\";\n content: string;\n}\n\nfunction parseMessageContent(text: string): ContentPart[] {\n const parts: ContentPart[] = [];\n const regex = /\\[([^\\]]+)\\]/g;\n let lastIndex = 0;\n let match;\n\n while ((match = regex.exec(text)) !== null) {\n // Add text before the match\n if (match.index > lastIndex) {\n parts.push({\n type: \"text\",\n content: text.slice(lastIndex, match.index),\n });\n }\n\n // Add the context mention\n parts.push({\n type: \"context\",\n content: match[1], // The title inside brackets\n });\n\n lastIndex = match.index + match[0].length;\n }\n\n // Add remaining text after last match\n if (lastIndex < text.length) {\n parts.push({\n type: \"text\",\n content: text.slice(lastIndex),\n });\n }\n\n return parts;\n}\n\n/**\n * Custom user message content component that renders context mentions as pills\n */\nexport const UserMessageContent: FC = () => {\n const message = useMessage();\n\n const renderedContent = useMemo(() => {\n // Get the text content from the message\n const textParts = message.content?.filter(\n (part) => part.type === \"text\"\n ) as Array<{ type: \"text\"; text: string }> | undefined;\n\n if (!textParts || textParts.length === 0) {\n return null;\n }\n\n // Combine all text parts\n const fullText = textParts.map((part) => part.text).join(\"\");\n\n // Parse and render with context pills\n const parsed = parseMessageContent(fullText);\n\n return parsed.map((part, index) => {\n if (part.type === \"context\") {\n return (\n <InlineContextPill\n key={`context-${index}`}\n title={part.content}\n />\n );\n }\n return <span key={`text-${index}`}>{part.content}</span>;\n });\n }, [message.content]);\n\n return <>{renderedContent}</>;\n};\n","import { useState, useCallback, useContext, useMemo } from 'react'\nimport { WidgetContext } from '../provider'\nimport { useMessageContext } from '../context/message-context'\n\n/**\n * Represents a single context item that can be selected\n */\nexport interface ContextItem {\n id: string\n type: 'attachment' | 'description' | 'caption' | 'link'\n title: string\n lessonTitle?: string\n chapterTitle?: string\n /** Optional icon URL for the item */\n icon?: string\n}\n\n/**\n * Represents a category of context items\n */\nexport interface ContextCategory {\n type: 'attachment' | 'description' | 'caption' | 'link'\n label: string\n items: ContextItem[]\n}\n\n/**\n * Response from the context API\n */\ninterface ContextApiResponse {\n categories: ContextCategory[]\n hasMore: boolean\n}\n\n/**\n * Category type to label mapping\n */\nconst CATEGORY_LABELS: Record<string, string> = {\n attachment: 'Attachments',\n description: 'Description',\n caption: 'Video',\n link: 'Links',\n}\n\n/**\n * Options for the useContextMention hook\n */\ninterface UseContextMentionOptions {\n /**\n * Callback to insert the selected item as an inline mention\n * @param item - The full context item to insert\n */\n onInsertMention?: (item: ContextItem) => void\n}\n\n/**\n * Hook for managing context mentions in the composer\n */\nexport function useContextMention(options: UseContextMentionOptions = {}) {\n const { onInsertMention } = options\n const widgetContext = useContext(WidgetContext)\n\n if (!widgetContext) {\n throw new Error('useContextMention must be used within a WidgetProvider')\n }\n\n const { client } = widgetContext\n\n // Use message context for selected items (shared with provider)\n const { selectedContext: selectedItems, addContextItem, removeContextItem, clearContext } = useMessageContext()\n\n // Popover state\n const [isOpen, setIsOpen] = useState(false)\n\n // Search/filter term (text after @)\n const [searchTerm, setSearchTerm] = useState('')\n\n // Keyboard navigation index\n const [activeIndex, setActiveIndex] = useState(0)\n\n // Loading state for API calls\n const [isLoading, setIsLoading] = useState(false)\n\n // Available context items from API\n const [categories, setCategories] = useState<ContextCategory[]>([])\n\n // Whether there are more items to load\n const [hasMore, setHasMore] = useState(false)\n\n // Get config from client\n const config = client.getConfig()\n const baseUrl = config.baseUrl || 'http://localhost:3000'\n const assistantId = config.apiKey\n\n /**\n * Fetch context items from the API\n */\n const fetchContextItems = useCallback(\n async (search: string = '', limit: number = 10) => {\n setIsLoading(true)\n try {\n const params = new URLSearchParams({\n limit: limit.toString(),\n })\n if (search) {\n params.set('search', search)\n }\n\n const response = await fetch(\n `${baseUrl}/api/widget/context?${params.toString()}`,\n {\n headers: {\n 'Content-Type': 'application/json',\n 'X-Assistant-Id': assistantId,\n },\n },\n )\n\n if (!response.ok) {\n console.error('[ContextMention] Failed to fetch context:', response.status)\n return\n }\n\n const data: ContextApiResponse = await response.json()\n setCategories(data.categories)\n setHasMore(data.hasMore)\n } catch (error) {\n console.error('[ContextMention] Error fetching context:', error)\n } finally {\n setIsLoading(false)\n }\n },\n [baseUrl, assistantId],\n )\n\n /**\n * Open the popover and fetch initial items\n */\n const openPopover = useCallback(() => {\n setIsOpen(true)\n setSearchTerm('')\n setActiveIndex(0)\n fetchContextItems()\n }, [fetchContextItems])\n\n /**\n * Close the popover\n */\n const closePopover = useCallback(() => {\n setIsOpen(false)\n setSearchTerm('')\n setActiveIndex(0)\n }, [])\n\n /**\n * Update search term and fetch filtered items\n */\n const updateSearch = useCallback(\n (term: string) => {\n setSearchTerm(term)\n setActiveIndex(0)\n fetchContextItems(term)\n },\n [fetchContextItems],\n )\n\n /**\n * Flattened list of all items for keyboard navigation\n */\n const flattenedItems = useMemo(() => {\n return categories.flatMap((category) => category.items)\n }, [categories])\n\n /**\n * Move to next item in the list\n */\n const navigateDown = useCallback(() => {\n setActiveIndex((prev) =>\n prev < flattenedItems.length - 1 ? prev + 1 : prev,\n )\n }, [flattenedItems.length])\n\n /**\n * Move to previous item in the list\n */\n const navigateUp = useCallback(() => {\n setActiveIndex((prev) => (prev > 0 ? prev - 1 : 0))\n }, [])\n\n /**\n * Select the currently active item\n */\n const selectActiveItem = useCallback(() => {\n const item = flattenedItems[activeIndex]\n if (item) {\n addContextItem(item)\n closePopover()\n // Insert the item as an inline mention\n onInsertMention?.(item)\n }\n }, [flattenedItems, activeIndex, addContextItem, closePopover, onInsertMention])\n\n /**\n * Select a specific item\n */\n const selectItem = useCallback(\n (item: ContextItem) => {\n addContextItem(item)\n closePopover()\n // Insert the item as an inline mention\n onInsertMention?.(item)\n },\n [addContextItem, closePopover, onInsertMention],\n )\n\n /**\n * Remove a selected item\n */\n const removeItem = useCallback((itemId: string) => {\n removeContextItem(itemId)\n }, [removeContextItem])\n\n /**\n * Clear all selected items\n */\n const clearAll = useCallback(() => {\n clearContext()\n }, [clearContext])\n\n /**\n * Handle keyboard events for navigation\n */\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (!isOpen) return\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n navigateDown()\n break\n case 'ArrowUp':\n event.preventDefault()\n navigateUp()\n break\n case 'Enter':\n event.preventDefault()\n selectActiveItem()\n break\n case 'Escape':\n event.preventDefault()\n closePopover()\n break\n }\n },\n [isOpen, navigateDown, navigateUp, selectActiveItem, closePopover],\n )\n\n /**\n * Get the label for a category type\n */\n const getCategoryLabel = useCallback((type: string) => {\n return CATEGORY_LABELS[type] || type\n }, [])\n\n return {\n // Selected items\n selectedItems,\n selectItem,\n removeItem,\n clearAll,\n\n // Popover state\n isOpen,\n openPopover,\n closePopover,\n\n // Search\n searchTerm,\n updateSearch,\n\n // Navigation\n activeIndex,\n setActiveIndex,\n navigateUp,\n navigateDown,\n selectActiveItem,\n handleKeyDown,\n\n // Data\n categories,\n flattenedItems,\n isLoading,\n hasMore,\n\n // Utilities\n getCategoryLabel,\n }\n}\n","import {\n ComposerAddAttachment,\n ComposerAttachments,\n UserMessageAttachments,\n} from \"./attachment\";\nimport { MarkdownText } from \"./markdown-text\";\nimport { ToolFallback } from \"./tool-fallback\";\nimport { TooltipIconButton } from \"./tooltip-icon-button\";\nimport { Button } from \"../ui/button\";\nimport { BotAvatar } from \"./bot-avatar\";\nimport { ContextPill } from \"./context-pill\";\nimport { ContextMentionPopover } from \"./context-mention-popover\";\nimport { MentionComposerInput, type MentionComposerInputRef } from \"./mention-composer-input\";\nimport { UserMessageContent } from \"./user-message-content\";\nimport { cn } from \"../../utils\";\nimport { useContextMention, type ContextItem } from \"../../hooks/useContextMention\";\nimport { useMessageContext } from \"../../context/message-context\";\nimport {\n ActionBarPrimitive,\n AssistantIf,\n BranchPickerPrimitive,\n ComposerPrimitive,\n ErrorPrimitive,\n MessagePrimitive,\n ThreadPrimitive,\n useMessage,\n useComposerRuntime,\n} from \"@assistant-ui/react\";\nimport {\n ArrowDownIcon,\n ArrowUpIcon,\n CheckIcon,\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n CopyIcon,\n DownloadIcon,\n PencilIcon,\n RefreshCwIcon,\n SquareIcon,\n WalletCardsIcon,\n BadgeQuestionMarkIcon,\n PodcastIcon,\n GlobeIcon,\n MessageSquareTextIcon,\n AtSignIcon,\n} from \"lucide-react\";\nimport { type FC, useCallback, useRef, useState } from \"react\";\n\nexport const Thread: FC = () => {\n return (\n <ThreadPrimitive.Root\n className=\"aui-thread-root @container flex h-full flex-col bg-background\"\n style={{\n [\"--thread-max-width\" as string]: \"44rem\",\n }}\n >\n <ThreadPrimitive.Viewport\n className=\"aui-thread-viewport relative flex flex-1 flex-col overflow-x-auto overflow-y-scroll scroll-smooth px-4 pt-4\"\n >\n <AssistantIf condition={({ thread }) => thread.isEmpty}>\n <ThreadWelcome />\n </AssistantIf>\n\n <ThreadPrimitive.Messages\n components={{\n UserMessage,\n EditComposer,\n AssistantMessage,\n }}\n />\n\n <ThreadPrimitive.ViewportFooter className=\"aui-thread-viewport-footer sticky bottom-0 mx-auto mt-auto flex w-full max-w-(--thread-max-width) flex-col gap-4 overflow-visible rounded-t-3xl bg-background pb-4\">\n <ThreadScrollToBottom />\n <Composer />\n </ThreadPrimitive.ViewportFooter>\n </ThreadPrimitive.Viewport>\n </ThreadPrimitive.Root>\n );\n};\n\nconst ThreadScrollToBottom: FC = () => {\n return (\n <ThreadPrimitive.ScrollToBottom asChild>\n <TooltipIconButton\n tooltip=\"Scroll to bottom\"\n variant=\"outline\"\n className=\"aui-thread-scroll-to-bottom absolute -top-12 z-10 self-center rounded-full p-4 disabled:invisible dark:bg-background dark:hover:bg-accent\"\n >\n <ArrowDownIcon />\n </TooltipIconButton>\n </ThreadPrimitive.ScrollToBottom>\n );\n};\n\nconst getGreeting = () => {\n const hour = new Date().getHours();\n if (hour < 12) return \"Good morning\";\n if (hour < 18) return \"Good afternoon\";\n return \"Good evening\";\n};\n\nconst STATIC_SUGGESTIONS = [\n {\n label: \"Explain this concept in detail\",\n icon: MessageSquareTextIcon,\n prompt: \"Explain this concept to me by drawing comparisons\",\n },\n {\n label: \"Generate a podcast\",\n icon: PodcastIcon,\n prompt: \"/audio\",\n },\n {\n label: \"Quiz me\",\n icon: BadgeQuestionMarkIcon,\n prompt: \"/quiz\",\n },\n {\n label: \"Generate flashcards\",\n icon: WalletCardsIcon,\n prompt: \"/flashcards\",\n },\n] as const;\n\nconst ThreadWelcome: FC = () => {\n return (\n <div className=\"aui-thread-welcome-root mx-auto flex w-full max-w-(--thread-max-width) flex-col gap-4\">\n <div className=\"aui-thread-welcome-center flex w-full grow flex-col items-center justify-center\">\n <div className=\"aui-thread-welcome-message flex size-full flex-col justify-center px-4\">\n <h1\n className=\"aui-thread-welcome-message-inner fade-in slide-in-from-bottom-1 animate-in font-semibold text-2xl duration-200\"\n style={{\n color: \"var(--color-primary)\",\n }}\n >\n {getGreeting()}\n </h1>\n <p className=\"aui-thread-welcome-message-inner fade-in slide-in-from-bottom-1 animate-in text-muted-foreground text-xl delay-75 duration-200\">\n How may I be of service?\n </p>\n </div>\n </div>\n <ThreadSuggestions />\n </div>\n );\n};\n\nconst ThreadSuggestions: FC = () => {\n return (\n <div className=\"aui-thread-welcome-suggestions flex w-full flex-col gap-2\">\n {STATIC_SUGGESTIONS.map((suggestion, index) => {\n const Icon = suggestion.icon;\n return (\n <div\n key={suggestion.prompt}\n className=\"fade-in slide-in-from-bottom-2 animate-in fill-mode-both duration-200\"\n style={{ animationDelay: `${200 + index * 50}ms` }}\n >\n <ThreadPrimitive.Suggestion prompt={suggestion.prompt} send asChild>\n <Button\n variant=\"ghost\"\n className=\"aui-thread-welcome-suggestion h-auto w-full @md:flex-col flex-wrap items-start justify-start gap-1 rounded-2xl border text-left text-sm transition-colors hover:bg-muted hover:text-primary\"\n aria-label={suggestion.label}\n style={{\n borderWidth: 0,\n padding: 8,\n }}\n >\n <div className=\"flex items-center gap-2\">\n <Icon className=\"size-4 shrink-0\" />\n <span>{suggestion.label}</span>\n </div>\n </Button>\n </ThreadPrimitive.Suggestion>\n </div>\n );\n })}\n </div>\n );\n};\n\nconst Composer: FC = () => {\n const inputRef = useRef<MentionComposerInputRef>(null);\n const composerRuntime = useComposerRuntime();\n\n // Handle submitting the message\n const handleSubmit = useCallback(() => {\n composerRuntime.send();\n }, [composerRuntime]);\n\n // Handle inserting a mention into the input\n const handleInsertMention = useCallback((item: ContextItem) => {\n inputRef.current?.insertMention({\n id: item.id,\n title: item.title,\n icon: item.icon,\n type: item.type,\n });\n // Return focus to the input after context item is added\n setTimeout(() => {\n inputRef.current?.focus();\n }, 0);\n }, []);\n\n const {\n isOpen,\n openPopover,\n closePopover,\n categories,\n isLoading,\n activeIndex,\n flattenedItems,\n selectItem,\n setActiveIndex,\n handleKeyDown,\n getCategoryLabel,\n searchTerm,\n updateSearch,\n } = useContextMention({ onInsertMention: handleInsertMention });\n\n const { selectedContext, removeContextItem } = useMessageContext();\n\n // Handle @ trigger detection from the mention input\n const handleTriggerDetected = useCallback(\n (searchText: string) => {\n if (!isOpen) {\n openPopover();\n }\n updateSearch(searchText);\n },\n [isOpen, openPopover, updateSearch]\n );\n\n // Handle @ trigger dismissal\n const handleTriggerDismissed = useCallback(() => {\n if (isOpen) {\n closePopover();\n }\n }, [isOpen, closePopover]);\n\n // Handle keyboard events for popover navigation\n const handleComposerKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (isOpen) {\n if ([\"ArrowUp\", \"ArrowDown\", \"Enter\", \"Escape\"].includes(e.key)) {\n e.preventDefault();\n handleKeyDown(e as unknown as React.KeyboardEvent);\n \n // When Escape is pressed, ensure focus returns to input\n if (e.key === \"Escape\") {\n setTimeout(() => {\n inputRef.current?.focus();\n }, 0);\n }\n }\n }\n },\n [isOpen, handleKeyDown]\n );\n\n // Handle mention removal (when user backspaces over an inline mention)\n const handleMentionRemove = useCallback(\n (mentionId: string) => {\n removeContextItem(mentionId);\n },\n [removeContextItem]\n );\n\n return (\n <ComposerPrimitive.Root className=\"aui-composer-root relative flex w-full flex-col\">\n <ComposerPrimitive.AttachmentDropzone className=\"aui-composer-attachment-dropzone flex w-full flex-col rounded-2xl border border-input bg-background px-1 pt-2 outline-none transition-shadow has-[[contenteditable]:focus-visible]:border-ring has-[[contenteditable]:focus-visible]:ring-2 has-[[contenteditable]:focus-visible]:ring-ring/20 data-[dragging=true]:border-ring data-[dragging=true]:border-dashed data-[dragging=true]:bg-accent/50\">\n {/* Context UI */}\n <ComposerContextUI\n isOpen={isOpen}\n onOpenChange={(open) => (open ? openPopover() : closePopover())}\n categories={categories}\n isLoading={isLoading}\n activeIndex={activeIndex}\n flattenedItems={flattenedItems}\n onSelectItem={selectItem}\n onActiveIndexChange={setActiveIndex}\n getCategoryLabel={getCategoryLabel}\n searchTerm={searchTerm}\n selectedItems={selectedContext}\n onRemoveItem={removeContextItem}\n />\n <ComposerAttachments />\n <MentionComposerInput\n ref={inputRef}\n placeholder=\"Ask, search, or make anything...\"\n autoFocus\n onTriggerDetected={handleTriggerDetected}\n onTriggerDismissed={handleTriggerDismissed}\n onKeyDown={handleComposerKeyDown}\n onMentionRemove={handleMentionRemove}\n onSubmit={handleSubmit}\n />\n <ComposerAction />\n </ComposerPrimitive.AttachmentDropzone>\n </ComposerPrimitive.Root>\n );\n};\n\ninterface ComposerContextUIProps {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n categories: ReturnType<typeof useContextMention>[\"categories\"];\n isLoading: boolean;\n activeIndex: number;\n flattenedItems: ReturnType<typeof useContextMention>[\"flattenedItems\"];\n onSelectItem: ReturnType<typeof useContextMention>[\"selectItem\"];\n onActiveIndexChange: (index: number) => void;\n getCategoryLabel: (type: string) => string;\n searchTerm: string;\n selectedItems: ReturnType<typeof useMessageContext>[\"selectedContext\"];\n onRemoveItem: (id: string) => void;\n}\n\nconst ComposerContextUI: FC<ComposerContextUIProps> = ({\n isOpen,\n onOpenChange,\n categories,\n isLoading,\n activeIndex,\n flattenedItems,\n onSelectItem,\n onActiveIndexChange,\n getCategoryLabel,\n searchTerm,\n selectedItems,\n onRemoveItem,\n}) => {\n return (\n <div className=\"aui-composer-context mb-2 flex items-center gap-2 overflow-x-auto px-1.5 pt-0.5 pb-1\">\n <ContextMentionPopover\n isOpen={isOpen}\n onOpenChange={onOpenChange}\n categories={categories}\n isLoading={isLoading}\n activeIndex={activeIndex}\n flattenedItems={flattenedItems}\n onSelectItem={onSelectItem}\n onActiveIndexChange={onActiveIndexChange}\n getCategoryLabel={getCategoryLabel}\n searchTerm={searchTerm}\n trigger={\n <TooltipIconButton\n tooltip=\"Add context (@)\"\n side=\"bottom\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"aui-composer-add-context size-[34px] rounded-full p-1 font-semibold text-xs hover:bg-muted-foreground/15 dark:border-muted-foreground/15 dark:hover:bg-muted-foreground/30\"\n aria-label=\"Add context (@)\"\n >\n <AtSignIcon className=\"size-5 stroke-[1.5px]\" />\n </TooltipIconButton>\n }\n />\n {selectedItems.length > 0 && (\n <div className=\"flex items-center gap-1.5 overflow-x-auto\">\n {selectedItems.map((item) => (\n <ContextPill\n key={item.id}\n label={item.title}\n onRemove={() => onRemoveItem(item.id)}\n />\n ))}\n </div>\n )}\n </div>\n );\n};\n\nconst ComposerAction: FC = () => {\n return (\n <div className=\"aui-composer-action-wrapper relative mx-2 mb-2 flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <ComposerAddAttachment />\n <TooltipIconButton\n tooltip=\"All sources\"\n side=\"bottom\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"aui-composer-all-sources size-[34px] rounded-full p-1 font-semibold text-xs hover:bg-muted-foreground/15 dark:border-muted-foreground/15 dark:hover:bg-muted-foreground/30\"\n aria-label=\"All sources\"\n >\n <GlobeIcon className=\"size-5 stroke-[1.5px]\" />\n </TooltipIconButton>\n </div>\n\n <AssistantIf condition={({ thread }) => !thread.isRunning}>\n <ComposerPrimitive.Send asChild>\n <TooltipIconButton\n tooltip=\"Send message\"\n side=\"bottom\"\n type=\"submit\"\n variant=\"default\"\n className=\"aui-composer-send size-8 rounded-full\"\n aria-label=\"Send message\"\n >\n <ArrowUpIcon className=\"aui-composer-send-icon size-4\" />\n </TooltipIconButton>\n </ComposerPrimitive.Send>\n </AssistantIf>\n\n <AssistantIf condition={({ thread }) => thread.isRunning}>\n <ComposerPrimitive.Cancel asChild>\n <Button\n type=\"button\"\n variant=\"default\"\n size=\"icon\"\n className=\"aui-composer-cancel size-8 rounded-full\"\n aria-label=\"Stop generating\"\n >\n <SquareIcon className=\"aui-composer-cancel-icon size-3 fill-current\" />\n </Button>\n </ComposerPrimitive.Cancel>\n </AssistantIf>\n </div>\n );\n};\n\nconst MessageError: FC = () => {\n return (\n <MessagePrimitive.Error>\n <ErrorPrimitive.Root className=\"aui-message-error-root mt-2 rounded-md border border-destructive bg-destructive/10 p-3 text-destructive text-sm dark:bg-destructive/5 dark:text-red-200\">\n <ErrorPrimitive.Message className=\"aui-message-error-message line-clamp-2\" />\n </ErrorPrimitive.Root>\n </MessagePrimitive.Error>\n );\n};\n\nconst AssistantMessage: FC = () => {\n return (\n <MessagePrimitive.Root\n className=\"aui-assistant-message-root fade-in slide-in-from-bottom-1 relative mx-auto w-full max-w-(--thread-max-width) animate-in py-3 duration-150\"\n data-role=\"assistant\"\n >\n <div className=\"aui-assistant-message-content wrap-break-word px-2 text-foreground leading-relaxed\">\n <MessagePrimitive.Parts\n components={{\n Text: MarkdownText,\n tools: { Fallback: ToolFallback },\n }}\n />\n <MessageError />\n </div>\n\n <div className=\"aui-assistant-message-footer mt-1 ml-2 flex\">\n <BranchPicker />\n <AssistantActionBar />\n </div>\n </MessagePrimitive.Root>\n );\n};\n\nconst AssistantActionBar: FC = () => {\n return (\n <ActionBarPrimitive.Root\n hideWhenRunning\n autohide=\"not-last\"\n autohideFloat=\"single-branch\"\n className=\"aui-assistant-action-bar-root col-start-3 row-start-2 -ml-1 flex gap-1 text-muted-foreground data-floating:absolute data-floating:rounded-md data-floating:border data-floating:bg-background data-floating:p-1 data-floating:shadow-sm\"\n >\n <ActionBarPrimitive.Copy asChild>\n <TooltipIconButton tooltip=\"Copy\">\n <AssistantIf condition={({ message }) => message.isCopied}>\n <CheckIcon />\n </AssistantIf>\n <AssistantIf condition={({ message }) => !message.isCopied}>\n <CopyIcon />\n </AssistantIf>\n </TooltipIconButton>\n </ActionBarPrimitive.Copy>\n <ActionBarPrimitive.ExportMarkdown asChild>\n <TooltipIconButton tooltip=\"Export as Markdown\">\n <DownloadIcon />\n </TooltipIconButton>\n </ActionBarPrimitive.ExportMarkdown>\n <ActionBarPrimitive.Reload asChild>\n <TooltipIconButton tooltip=\"Refresh\">\n <RefreshCwIcon />\n </TooltipIconButton>\n </ActionBarPrimitive.Reload>\n </ActionBarPrimitive.Root>\n );\n};\n\n/**\n * Context indicator for user messages that used context\n */\ninterface ContextMetadataItem {\n id: string;\n type: string;\n title: string;\n}\n\nconst MessageContextIndicator: FC = () => {\n const [isExpanded, setIsExpanded] = useState(false);\n \n // Access message metadata using useMessage hook\n const contextItems = useMessage((state) => {\n // Debug: log the full message state to see the structure\n console.log('[MessageContextIndicator] Message state:', state);\n \n // The metadata might be in different locations depending on how it's stored\n // Try direct access first, then nested in custom\n const metadata = state.metadata as { \n context?: ContextMetadataItem[];\n custom?: { context?: ContextMetadataItem[] };\n } | undefined;\n \n const context = metadata?.context || metadata?.custom?.context;\n console.log('[MessageContextIndicator] Context:', context);\n return context;\n });\n\n if (!contextItems || contextItems.length === 0) {\n return null;\n }\n\n return (\n <div className=\"col-start-2 mb-1 flex flex-col items-end\">\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground transition-colors\"\n >\n <span>{contextItems.length} Context</span>\n <ChevronDownIcon \n className={cn(\n \"size-3.5 transition-transform duration-200\",\n isExpanded && \"rotate-180\"\n )} \n />\n </button>\n {isExpanded && (\n <div className=\"mt-1 flex flex-wrap gap-1 justify-end\">\n {contextItems.map((item) => (\n <span \n key={item.id}\n className=\"rounded-full bg-muted px-2 py-0.5 text-xs text-muted-foreground\"\n >\n {item.title}\n </span>\n ))}\n </div>\n )}\n </div>\n );\n};\n\nconst UserMessage: FC = () => {\n return (\n <MessagePrimitive.Root\n className=\"aui-user-message-root fade-in slide-in-from-bottom-1 mx-auto grid w-full max-w-(--thread-max-width) animate-in auto-rows-auto grid-cols-[minmax(72px,1fr)_auto] content-start gap-y-2 px-2 py-3 duration-150 [&:where(>*)]:col-start-2\"\n data-role=\"user\"\n >\n {/* Show context indicator for messages that used context */}\n <MessageContextIndicator />\n \n <UserMessageAttachments />\n\n <div className=\"aui-user-message-content-wrapper relative col-start-2 min-w-0\">\n <div className=\"aui-user-message-content wrap-break-word rounded-2xl bg-muted px-4 py-2.5 text-foreground\">\n <UserMessageContent />\n </div>\n <div className=\"aui-user-action-bar-wrapper absolute top-1/2 left-0 -translate-x-full -translate-y-1/2 pr-2\">\n <UserActionBar />\n </div>\n </div>\n\n <BranchPicker className=\"aui-user-branch-picker col-span-full col-start-1 row-start-3 -mr-1 justify-end\" />\n </MessagePrimitive.Root>\n );\n};\n\nconst UserActionBar: FC = () => {\n return (\n <ActionBarPrimitive.Root\n hideWhenRunning\n autohide=\"not-last\"\n className=\"aui-user-action-bar-root flex flex-col items-end\"\n >\n <ActionBarPrimitive.Edit asChild>\n <TooltipIconButton tooltip=\"Edit\" className=\"aui-user-action-edit p-4\">\n <PencilIcon />\n </TooltipIconButton>\n </ActionBarPrimitive.Edit>\n </ActionBarPrimitive.Root>\n );\n};\n\nconst EditComposer: FC = () => {\n return (\n <MessagePrimitive.Root className=\"aui-edit-composer-wrapper mx-auto flex w-full max-w-(--thread-max-width) flex-col px-2 py-3\">\n <ComposerPrimitive.Root className=\"aui-edit-composer-root ml-auto flex w-full max-w-[85%] flex-col rounded-2xl bg-muted\">\n <ComposerPrimitive.Input\n className=\"aui-edit-composer-input min-h-14 w-full resize-none bg-transparent p-4 text-foreground text-sm outline-none\"\n autoFocus\n />\n <div className=\"aui-edit-composer-footer mx-3 mb-3 flex items-center gap-2 self-end\">\n <ComposerPrimitive.Cancel asChild>\n <Button variant=\"ghost\" size=\"sm\">\n Cancel\n </Button>\n </ComposerPrimitive.Cancel>\n <ComposerPrimitive.Send asChild>\n <Button size=\"sm\">Update</Button>\n </ComposerPrimitive.Send>\n </div>\n </ComposerPrimitive.Root>\n </MessagePrimitive.Root>\n );\n};\n\nconst BranchPicker: FC<BranchPickerPrimitive.Root.Props> = ({\n className,\n ...rest\n}) => {\n return (\n <BranchPickerPrimitive.Root\n hideWhenSingleBranch\n className={cn(\n \"aui-branch-picker-root mr-2 -ml-2 inline-flex items-center text-muted-foreground text-xs\",\n className\n )}\n {...rest}\n >\n <BranchPickerPrimitive.Previous asChild>\n <TooltipIconButton tooltip=\"Previous\">\n <ChevronLeftIcon />\n </TooltipIconButton>\n </BranchPickerPrimitive.Previous>\n <span className=\"aui-branch-picker-state font-medium\">\n <BranchPickerPrimitive.Number /> / <BranchPickerPrimitive.Count />\n </span>\n <BranchPickerPrimitive.Next asChild>\n <TooltipIconButton tooltip=\"Next\">\n <ChevronRightIcon />\n </TooltipIconButton>\n </BranchPickerPrimitive.Next>\n </BranchPickerPrimitive.Root>\n );\n};\n","import {\n ThreadListPrimitive,\n ThreadListItemPrimitive,\n} from \"@assistant-ui/react\";\nimport { TooltipIconButton } from \"./tooltip-icon-button\";\nimport {\n PlusIcon,\n ArchiveIcon,\n Trash2Icon,\n ArchiveRestoreIcon,\n MessageSquareIcon,\n} from \"lucide-react\";\nimport type { FC } from \"react\";\n\nexport const ThreadList: FC = () => {\n return (\n <ThreadListPrimitive.Root className=\"aui-thread-list-root flex flex-col\">\n {/* Header */}\n <div className=\"flex items-center justify-between border-b border-border px-3 py-2\">\n <span className=\"text-sm font-medium text-foreground\">Chats</span>\n <ThreadListPrimitive.New asChild>\n <TooltipIconButton\n tooltip=\"New chat\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-7 w-7\"\n >\n <PlusIcon className=\"h-4 w-4\" />\n </TooltipIconButton>\n </ThreadListPrimitive.New>\n </div>\n\n {/* Thread List */}\n <div className=\"flex-1 overflow-y-auto\">\n {/* Regular threads */}\n <ThreadListPrimitive.Items\n components={{\n ThreadListItem: ThreadListItem,\n }}\n />\n\n {/* Archived threads section */}\n <div className=\"px-3 py-2\">\n <span className=\"text-xs font-medium text-muted-foreground\">\n Archived\n </span>\n </div>\n <ThreadListPrimitive.Items\n archived\n components={{\n ThreadListItem: ArchivedThreadListItem,\n }}\n />\n </div>\n </ThreadListPrimitive.Root>\n );\n};\n\nconst ThreadListItem: FC = () => {\n return (\n <ThreadListItemPrimitive.Root className=\"aui-thread-list-item group relative flex items-center gap-2 px-3 py-2 hover:bg-muted/50 data-[active]:bg-muted cursor-pointer transition-colors\">\n <ThreadListItemPrimitive.Trigger className=\"flex flex-1 items-center gap-2 min-w-0\">\n <MessageSquareIcon className=\"h-4 w-4 flex-shrink-0 text-muted-foreground\" />\n <div className=\"flex flex-1 flex-col min-w-0\">\n <span className=\"truncate text-sm font-medium text-foreground\">\n <ThreadListItemPrimitive.Title fallback=\"New Chat\" />\n </span>\n </div>\n </ThreadListItemPrimitive.Trigger>\n\n {/* Actions - visible on hover */}\n <div className=\"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\n <ThreadListItemPrimitive.Archive asChild>\n <TooltipIconButton\n tooltip=\"Archive\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6\"\n >\n <ArchiveIcon className=\"h-3.5 w-3.5\" />\n </TooltipIconButton>\n </ThreadListItemPrimitive.Archive>\n <ThreadListItemPrimitive.Delete asChild>\n <TooltipIconButton\n tooltip=\"Delete\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6 text-destructive hover:text-destructive\"\n >\n <Trash2Icon className=\"h-3.5 w-3.5\" />\n </TooltipIconButton>\n </ThreadListItemPrimitive.Delete>\n </div>\n </ThreadListItemPrimitive.Root>\n );\n};\n\nconst ArchivedThreadListItem: FC = () => {\n return (\n <ThreadListItemPrimitive.Root className=\"aui-thread-list-item-archived group relative flex items-center gap-2 px-3 py-2 hover:bg-muted/50 data-[active]:bg-muted cursor-pointer transition-colors opacity-70\">\n <ThreadListItemPrimitive.Trigger className=\"flex flex-1 items-center gap-2 min-w-0\">\n <ArchiveIcon className=\"h-4 w-4 flex-shrink-0 text-muted-foreground\" />\n <div className=\"flex flex-1 flex-col min-w-0\">\n <span className=\"truncate text-sm text-foreground\">\n <ThreadListItemPrimitive.Title fallback=\"Archived Chat\" />\n </span>\n </div>\n </ThreadListItemPrimitive.Trigger>\n\n {/* Actions - visible on hover */}\n <div className=\"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\n <ThreadListItemPrimitive.Unarchive asChild>\n <TooltipIconButton\n tooltip=\"Unarchive\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6\"\n >\n <ArchiveRestoreIcon className=\"h-3.5 w-3.5\" />\n </TooltipIconButton>\n </ThreadListItemPrimitive.Unarchive>\n <ThreadListItemPrimitive.Delete asChild>\n <TooltipIconButton\n tooltip=\"Delete\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6 text-destructive hover:text-destructive\"\n >\n <Trash2Icon className=\"h-3.5 w-3.5\" />\n </TooltipIconButton>\n </ThreadListItemPrimitive.Delete>\n </div>\n </ThreadListItemPrimitive.Root>\n );\n};\n","import { makeAssistantToolUI } from \"@assistant-ui/react\";\nimport type { ArtifactCategory } from \"../../../core/types\";\nimport { cn } from \"../../utils\";\nimport {\n HeadphonesIcon,\n VideoIcon,\n NetworkIcon,\n FileTextIcon,\n LayersIcon,\n HelpCircleIcon,\n PresentationIcon,\n BarChart3Icon,\n Loader2Icon,\n ExternalLinkIcon,\n DownloadIcon,\n} from \"lucide-react\";\nimport type { FC, ReactNode } from \"react\";\n\n// Base artifact args that all artifact tools share\ninterface BaseArtifactArgs {\n title: string;\n content: string;\n}\n\n// Result type for artifacts\ninterface ArtifactResult {\n id: string;\n title: string;\n category: ArtifactCategory;\n content: string;\n createdAt: number;\n updatedAt: number;\n}\n\n// Icon mapping for artifact categories\nconst categoryIcons: Record<ArtifactCategory, FC<{ className?: string }>> = {\n audio: HeadphonesIcon,\n \"audio-overview\": HeadphonesIcon,\n \"video-overview\": VideoIcon,\n \"mind-map\": NetworkIcon,\n reports: FileTextIcon,\n flashcards: LayersIcon,\n quiz: HelpCircleIcon,\n \"slide-deck\": PresentationIcon,\n infographic: BarChart3Icon,\n};\n\n// Color mapping for artifact categories\nconst categoryColors: Record<ArtifactCategory, string> = {\n audio: \"bg-purple-100 text-purple-700 dark:bg-purple-900/30 dark:text-purple-300\",\n \"audio-overview\": \"bg-purple-100 text-purple-700 dark:bg-purple-900/30 dark:text-purple-300\",\n \"video-overview\": \"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-300\",\n \"mind-map\": \"bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-300\",\n reports: \"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-300\",\n flashcards: \"bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-300\",\n quiz: \"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-300\",\n \"slide-deck\": \"bg-indigo-100 text-indigo-700 dark:bg-indigo-900/30 dark:text-indigo-300\",\n infographic: \"bg-teal-100 text-teal-700 dark:bg-teal-900/30 dark:text-teal-300\",\n};\n\n// Labels for artifact categories\nconst categoryLabels: Record<ArtifactCategory, string> = {\n audio: \"Audio\",\n \"audio-overview\": \"Audio Overview\",\n \"video-overview\": \"Video Overview\",\n \"mind-map\": \"Mind Map\",\n reports: \"Report\",\n flashcards: \"Flashcards\",\n quiz: \"Quiz\",\n \"slide-deck\": \"Slide Deck\",\n infographic: \"Infographic\",\n};\n\n// Base artifact card component\ninterface ArtifactCardProps {\n category: ArtifactCategory;\n title: string;\n content?: string;\n isLoading?: boolean;\n children?: ReactNode;\n}\n\nconst ArtifactCard: FC<ArtifactCardProps> = ({\n category,\n title,\n content,\n isLoading,\n children,\n}) => {\n const Icon = categoryIcons[category];\n const colorClass = categoryColors[category];\n const label = categoryLabels[category];\n\n return (\n <div className=\"my-3 overflow-hidden rounded-xl border border-border bg-card shadow-sm\">\n {/* Header */}\n <div className={cn(\"flex items-center gap-3 px-4 py-3\", colorClass)}>\n <div className=\"flex h-8 w-8 items-center justify-center rounded-lg bg-white/50 dark:bg-black/20\">\n {isLoading ? (\n <Loader2Icon className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Icon className=\"h-4 w-4\" />\n )}\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-xs font-medium opacity-80\">{label}</p>\n <h4 className=\"truncate font-semibold text-sm\">{title}</h4>\n </div>\n </div>\n\n {/* Content */}\n {content && (\n <div className=\"px-4 py-3 text-sm text-muted-foreground\">\n <div className=\"line-clamp-4 whitespace-pre-wrap\">{content}</div>\n </div>\n )}\n\n {/* Custom children / actions */}\n {children}\n\n {/* Footer actions */}\n {!isLoading && (\n <div className=\"flex items-center justify-end gap-2 border-t border-border px-4 py-2\">\n <button className=\"flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium text-muted-foreground hover:bg-muted transition-colors\">\n <DownloadIcon className=\"h-3 w-3\" />\n Export\n </button>\n <button className=\"flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium text-muted-foreground hover:bg-muted transition-colors\">\n <ExternalLinkIcon className=\"h-3 w-3\" />\n Open\n </button>\n </div>\n )}\n </div>\n );\n};\n\n// Create tool UI for each artifact category\nfunction createArtifactToolUI(category: ArtifactCategory) {\n return makeAssistantToolUI<BaseArtifactArgs, ArtifactResult>({\n toolName: `create_${category.replace(/-/g, \"_\")}`,\n render: ({ args, result, status }) => {\n const isLoading = status.type === \"running\";\n\n return (\n <ArtifactCard\n category={category}\n title={args.title || \"Generating...\"}\n content={result?.content || args.content}\n isLoading={isLoading}\n />\n );\n },\n });\n}\n\n// Export individual tool UIs\nexport const AudioOverviewToolUI = createArtifactToolUI(\"audio-overview\");\nexport const VideoOverviewToolUI = createArtifactToolUI(\"video-overview\");\nexport const MindMapToolUI = createArtifactToolUI(\"mind-map\");\nexport const ReportsToolUI = createArtifactToolUI(\"reports\");\nexport const FlashcardsToolUI = createArtifactToolUI(\"flashcards\");\nexport const QuizToolUI = createArtifactToolUI(\"quiz\");\nexport const SlideDeckToolUI = createArtifactToolUI(\"slide-deck\");\nexport const InfographicToolUI = createArtifactToolUI(\"infographic\");\n\n// Component that registers all artifact tool UIs\nexport const ArtifactToolUIs: FC = () => {\n return (\n <>\n <AudioOverviewToolUI />\n <VideoOverviewToolUI />\n <MindMapToolUI />\n <ReportsToolUI />\n <FlashcardsToolUI />\n <QuizToolUI />\n <SlideDeckToolUI />\n <InfographicToolUI />\n </>\n );\n};\n\n","import React, { type FC } from \"react\";\nimport { Thread } from \"./assistant-ui/thread\";\nimport { ThreadList } from \"./assistant-ui/thread-list\";\nimport { ArtifactToolUIs } from \"./assistant-ui/artifact-tools\";\nimport { cn } from \"../utils\";\nimport { AnimatePresence, motion } from \"motion/react\";\n\ninterface ChatWidgetProps {\n sidebarOpen?: boolean;\n onSidebarClose?: () => void;\n}\n\nexport const ChatWidget: FC<ChatWidgetProps> = ({\n sidebarOpen = false,\n onSidebarClose,\n}) => {\n return (\n <div className=\"relative flex flex-1 h-full w-full overflow-hidden bg-background\">\n {/* Register artifact tool UIs */}\n <ArtifactToolUIs />\n\n {/* Main Chat Area */}\n <div className=\"flex flex-1 flex-col min-w-0\">\n {/* Thread - fills entire space */}\n <div className=\"flex-1 overflow-hidden relative\">\n <Thread />\n </div>\n </div>\n\n {/* Overlay */}\n <AnimatePresence>\n {sidebarOpen && (\n <>\n {/* Dark overlay */}\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n className=\"absolute inset-0 bg-black/50 z-40\"\n onClick={onSidebarClose}\n />\n\n {/* Sidebar - overlays on top */}\n <motion.div\n initial={{ x: -256 }}\n animate={{ x: 0 }}\n exit={{ x: -256 }}\n transition={{ duration: 0.2, ease: [0.4, 0, 0.2, 1] }}\n className={cn(\n \"absolute left-0 top-0 bottom-0 w-64 bg-background z-50 overflow-hidden shadow-lg\"\n )}\n >\n <ThreadList />\n </motion.div>\n </>\n )}\n </AnimatePresence>\n </div>\n );\n};\n","import React from \"react\";\nimport {\n ThreadListPrimitive,\n ThreadListItemPrimitive,\n} from \"@assistant-ui/react\";\nimport { MessageSquareIcon } from \"lucide-react\";\nimport { cn } from \"../utils\";\nimport { Text } from \"../styles\";\n\ninterface ChatHistoryPopoverProps {\n onSelectThread?: () => void;\n}\n\nconst ThreadListItem: React.FC = () => {\n return (\n <ThreadListItemPrimitive.Root className=\"group relative flex items-center gap-2 px-2 py-1.5 hover:bg-muted/50 data-[active]:bg-muted cursor-pointer transition-colors rounded-sm\">\n <ThreadListItemPrimitive.Trigger className=\"flex flex-1 items-center gap-2 min-w-0\">\n <span className=\"truncate text-sm text-foreground\">\n <ThreadListItemPrimitive.Title fallback=\"New Chat\" />\n </span>\n </ThreadListItemPrimitive.Trigger>\n </ThreadListItemPrimitive.Root>\n );\n};\n\nexport const ChatHistoryPopover: React.FC<ChatHistoryPopoverProps> = ({\n onSelectThread,\n}) => {\n const handleThreadSelect = () => {\n onSelectThread?.();\n };\n\n return (\n <div className=\"flex flex-col\" onClick={handleThreadSelect}>\n {/* Static heading */}\n <div className=\"px-2 py-1.5\">\n <Text size=\"xs\" style={{ color: \"hsl(var(--muted-foreground))\" }}>\n Previous 7 days\n </Text>\n </div>\n\n {/* Thread List - Only show regular (non-archived) threads */}\n <div className=\"max-h-[300px] overflow-y-auto\">\n <ThreadListPrimitive.Items\n components={{\n ThreadListItem: ThreadListItem,\n }}\n />\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport {\n CheckIcon,\n PanelLeftIcon,\n SquareIcon,\n Maximize2Icon,\n} from \"lucide-react\";\nimport { cn } from \"../utils\";\nimport { Text } from \"../styles\";\n\nexport type LayoutMode = \"floating\" | \"fullscreen\" | \"sidebar\";\n\ninterface LayoutPopoverProps {\n currentLayout: LayoutMode;\n onLayoutChange: (layout: LayoutMode) => void;\n}\n\ninterface LayoutOption {\n value: LayoutMode;\n label: string;\n icon: React.ReactNode;\n}\n\nconst layoutOptions: LayoutOption[] = [\n {\n value: \"sidebar\",\n label: \"Sidebar\",\n icon: <PanelLeftIcon className=\"h-4 w-4\" />,\n },\n {\n value: \"floating\",\n label: \"Floating\",\n icon: <SquareIcon className=\"h-4 w-4\" />,\n },\n {\n value: \"fullscreen\",\n label: \"Full Screen\",\n icon: <Maximize2Icon className=\"h-4 w-4\" />,\n },\n];\n\nexport const LayoutPopover: React.FC<LayoutPopoverProps> = ({\n currentLayout,\n onLayoutChange,\n}) => {\n return (\n <div className=\"flex flex-col gap-1\">\n {layoutOptions.map((option) => {\n const isSelected = currentLayout === option.value;\n return (\n <button\n key={option.value}\n onClick={() => onLayoutChange(option.value)}\n className={cn(\n \"flex items-center gap-2 px-2 py-1.5 rounded-sm hover:bg-muted/50 transition-colors cursor-pointer w-full text-left\",\n isSelected && \"bg-muted/30\"\n )}\n >\n <div className=\"flex items-center justify-center w-4 h-4\">\n {option.icon}\n </div>\n <Text size=\"sm\" style={{ flex: 1 }}>\n {option.label}\n </Text>\n {isSelected && (\n <CheckIcon className=\"h-4 w-4 text-foreground\" />\n )}\n </button>\n );\n })}\n </div>\n );\n};\n\n","import React, { useState, useEffect } from \"react\";\nimport { AnimatePresence } from \"motion/react\";\nimport {\n BotIcon,\n ChevronDownIcon,\n Minimize2Icon,\n LayoutIcon,\n EditIcon,\n} from \"lucide-react\";\nimport { useAssistantState, ThreadListPrimitive } from \"@assistant-ui/react\";\nimport { ChatWidget } from \"./ChatWidget\";\nimport { Popover, PopoverTrigger, PopoverContent } from \"./ui/popover\";\nimport { ChatHistoryPopover } from \"./ChatHistoryPopover\";\nimport { LayoutPopover, type LayoutMode } from \"./LayoutPopover\";\nimport {\n WidgetRoot,\n WidgetPanel,\n WidgetHeader,\n WidgetContent,\n FAB,\n Flex,\n IconButton,\n Text,\n} from \"../styles\";\n\ninterface WidgetContainerProps {\n defaultOpen?: boolean;\n position?: \"bottom-right\" | \"bottom-left\";\n}\n\nconst LAYOUT_STORAGE_KEY = \"learn-alchemy-widget-layout\";\n\nexport function WidgetContainer({\n defaultOpen = false,\n position = \"bottom-right\",\n}: WidgetContainerProps) {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n const [sidebarOpen, setSidebarOpen] = useState(false);\n const [chatHistoryOpen, setChatHistoryOpen] = useState(false);\n const [layoutOpen, setLayoutOpen] = useState(false);\n const [layout, setLayout] = useState<LayoutMode>(\"floating\");\n\n // Load layout preference from localStorage on mount\n useEffect(() => {\n const savedLayout = localStorage.getItem(LAYOUT_STORAGE_KEY) as LayoutMode;\n if (\n savedLayout &&\n [\"floating\", \"fullscreen\", \"sidebar\"].includes(savedLayout)\n ) {\n setLayout(savedLayout);\n }\n }, []);\n\n // Save layout preference to localStorage\n const handleLayoutChange = (newLayout: LayoutMode) => {\n setLayout(newLayout);\n localStorage.setItem(LAYOUT_STORAGE_KEY, newLayout);\n setLayoutOpen(false);\n };\n\n // Get current thread title\n const threadTitle = useAssistantState(\n ({ threadListItem }) => threadListItem?.title ?? \"New AI chat\"\n );\n\n const handleMinimize = () => {\n setIsOpen(false);\n };\n\n const handleChatHistorySelect = () => {\n setChatHistoryOpen(false);\n };\n\n // Calculate widget styles based on layout mode\n const getWidgetStyles = (): React.CSSProperties => {\n const baseStyle: React.CSSProperties = {\n transformOrigin:\n position === \"bottom-right\" ? \"bottom right\" : \"bottom left\",\n };\n\n switch (layout) {\n case \"fullscreen\":\n return {\n ...baseStyle,\n position: \"fixed\",\n width: \"100vw\",\n height: \"100vh\",\n maxWidth: \"100vw\",\n maxHeight: \"100vh\",\n borderRadius: 0,\n bottom: 0,\n right: 0,\n left: 0,\n top: 0,\n margin: 0,\n };\n case \"sidebar\":\n return {\n ...baseStyle,\n position: \"fixed\",\n width: \"400px\",\n height: \"100vh\",\n maxHeight: \"100vh\",\n bottom: 0,\n top: 0,\n right: position === \"bottom-right\" ? 0 : \"auto\",\n left: position === \"bottom-left\" ? 0 : \"auto\",\n borderRadius: 0,\n margin: 0,\n };\n case \"floating\":\n default:\n return baseStyle;\n }\n };\n\n return (\n <WidgetRoot position={position}>\n {/* Widget Panel */}\n <AnimatePresence>\n {isOpen && (\n <WidgetPanel\n initial={{ opacity: 0, scale: 0, y: 0 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0, y: 0 }}\n transition={{ duration: 0.2, ease: [0.4, 0, 0.2, 1] }}\n style={getWidgetStyles()}\n >\n {/* Header */}\n <WidgetHeader>\n {/* Left side: Chat title with dropdown */}\n <Popover open={chatHistoryOpen} onOpenChange={setChatHistoryOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n style={{\n cursor: \"pointer\",\n background: \"none\",\n border: \"none\",\n padding: 0,\n display: \"flex\",\n alignItems: \"center\",\n minWidth: 0,\n flex: 1,\n }}\n >\n <Flex\n align=\"center\"\n gap=\"xs\"\n style={{ minWidth: 0, flex: 1 }}\n >\n <Text\n size=\"sm\"\n style={{\n fontWeight: 500,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n minWidth: 0,\n }}\n >\n {threadTitle}\n </Text>\n <ChevronDownIcon size={16} style={{ flexShrink: 0 }} />\n </Flex>\n </button>\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n side=\"bottom\"\n sideOffset={8}\n className=\"w-64 p-0\"\n >\n <ChatHistoryPopover\n onSelectThread={handleChatHistorySelect}\n />\n </PopoverContent>\n </Popover>\n\n {/* Right side: Action buttons */}\n <Flex align=\"center\" gap=\"xs\" style={{ flexShrink: 0 }}>\n {/* Edit icon - Start new chat */}\n <ThreadListPrimitive.New asChild>\n <IconButton aria-label=\"New chat\">\n <EditIcon size={18} />\n </IconButton>\n </ThreadListPrimitive.New>\n\n {/* Layout icon */}\n <Popover open={layoutOpen} onOpenChange={setLayoutOpen}>\n <PopoverTrigger asChild>\n <IconButton\n aria-label=\"Layout options\"\n style={{\n backgroundColor: layoutOpen\n ? \"hsl(var(--muted))\"\n : \"transparent\",\n }}\n >\n <LayoutIcon size={18} />\n </IconButton>\n </PopoverTrigger>\n <PopoverContent\n align=\"end\"\n side=\"bottom\"\n sideOffset={8}\n className=\"w-48 p-2\"\n >\n <LayoutPopover\n currentLayout={layout}\n onLayoutChange={handleLayoutChange}\n />\n </PopoverContent>\n </Popover>\n\n {/* Minimize icon */}\n <IconButton\n onClick={handleMinimize}\n aria-label=\"Minimize widget\"\n >\n <Minimize2Icon size={18} />\n </IconButton>\n </Flex>\n </WidgetHeader>\n\n {/* Chat Widget Content */}\n <WidgetContent>\n <ChatWidget\n sidebarOpen={sidebarOpen}\n onSidebarClose={() => setSidebarOpen(false)}\n />\n </WidgetContent>\n </WidgetPanel>\n )}\n </AnimatePresence>\n\n {/* FAB Button - Only visible when widget is closed */}\n <AnimatePresence>\n {!isOpen && (\n <Flex\n justify={position === \"bottom-right\" ? \"flex-end\" : \"flex-start\"}\n >\n <FAB\n onClick={() => setIsOpen(true)}\n initial={{ opacity: 0, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: 20 }}\n transition={{ duration: 0.2, ease: [0.4, 0, 0.2, 1] }}\n whileHover={{ scale: 1.1 }}\n whileTap={{ scale: 0.9 }}\n aria-label=\"Open chat\"\n >\n <BotIcon size={24} strokeWidth={2} />\n </FAB>\n </Flex>\n )}\n </AnimatePresence>\n </WidgetRoot>\n );\n}\n","/**\n * ReadOnlyThread component for displaying chat history without interactive elements.\n * Used by content creators to view student conversations.\n */\n\nimport { MarkdownText } from \"./markdown-text\";\nimport { ToolFallback } from \"./tool-fallback\";\nimport { UserMessageContent } from \"./user-message-content\";\nimport {\n MessagePrimitive,\n ThreadPrimitive,\n} from \"@assistant-ui/react\";\nimport type { FC } from \"react\";\nimport { UserMessageAttachments } from \"./attachment\";\n\nexport const ReadOnlyThread: FC = () => {\n return (\n <ThreadPrimitive.Root\n className=\"aui-thread-root @container flex h-full flex-col bg-background\"\n style={{\n [\"--thread-max-width\" as string]: \"44rem\",\n }}\n >\n <ThreadPrimitive.Viewport\n turnAnchor=\"top\"\n className=\"aui-thread-viewport relative flex flex-1 flex-col overflow-x-auto overflow-y-scroll scroll-smooth px-4 pt-4 pb-4\"\n >\n <ThreadPrimitive.Messages\n components={{\n UserMessage: ReadOnlyUserMessage,\n EditComposer: ReadOnlyUserMessage, // Disable edit mode\n AssistantMessage: ReadOnlyAssistantMessage,\n }}\n />\n \n <ThreadPrimitive.Empty>\n <div className=\"flex h-full items-center justify-center text-muted-foreground\">\n No messages in this conversation.\n </div>\n </ThreadPrimitive.Empty>\n </ThreadPrimitive.Viewport>\n </ThreadPrimitive.Root>\n );\n};\n\nconst ReadOnlyAssistantMessage: FC = () => {\n return (\n <MessagePrimitive.Root\n className=\"aui-assistant-message-root fade-in slide-in-from-bottom-1 relative mx-auto w-full max-w-(--thread-max-width) animate-in py-3 duration-150\"\n data-role=\"assistant\"\n >\n <div className=\"aui-assistant-message-content wrap-break-word px-2 text-foreground leading-relaxed\">\n <MessagePrimitive.Parts\n components={{\n Text: MarkdownText,\n tools: { Fallback: ToolFallback },\n }}\n />\n <MessagePrimitive.Error>\n <div className=\"mt-2 rounded-md border border-destructive bg-destructive/10 p-3 text-destructive text-sm\">\n <MessagePrimitive.Error />\n </div>\n </MessagePrimitive.Error>\n </div>\n </MessagePrimitive.Root>\n );\n};\n\nconst ReadOnlyUserMessage: FC = () => {\n return (\n <MessagePrimitive.Root\n className=\"aui-user-message-root fade-in slide-in-from-bottom-1 mx-auto grid w-full max-w-(--thread-max-width) animate-in auto-rows-auto grid-cols-[minmax(72px,1fr)_auto] content-start gap-y-2 px-2 py-3 duration-150 [&:where(>*)]:col-start-2\"\n data-role=\"user\"\n >\n <UserMessageAttachments />\n\n <div className=\"aui-user-message-content-wrapper relative col-start-2 min-w-0\">\n <div className=\"aui-user-message-content wrap-break-word rounded-2xl bg-muted px-4 py-2.5 text-foreground\">\n <UserMessageContent />\n </div>\n </div>\n </MessagePrimitive.Root>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/core/events.ts","../src/core/api.ts","../src/core/client.ts","../src/react/utils.ts","../src/react/components/ui/tooltip.tsx","../src/react/components/ui/button.tsx","../src/react/components/assistant-ui/tooltip-icon-button.tsx","../src/react/components/assistant-ui/tool-card.tsx","../src/react/components/assistant-ui/detailed-answer-tool.tsx","../src/react/context/message-context.tsx","../src/react/styles/theme.ts","../../../node_modules/@emotion/sheet/dist/emotion-sheet.esm.js","../../../node_modules/stylis/src/Enum.js","../../../node_modules/stylis/src/Utility.js","../../../node_modules/stylis/src/Tokenizer.js","../../../node_modules/stylis/src/Parser.js","../../../node_modules/stylis/src/Serializer.js","../../../node_modules/stylis/src/Middleware.js","../../../node_modules/@emotion/weak-memoize/dist/emotion-weak-memoize.esm.js","../../../node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../../../node_modules/@emotion/cache/dist/emotion-cache.esm.js","../src/react/styles/cache.ts","../src/react/styles/primitives.ts","../src/react/provider.tsx","../src/react/hooks/useWidget.ts","../src/react/hooks/useChat.ts","../src/react/components/ChatHistoryPopover.tsx","../src/react/components/ui/dialog.tsx","../src/react/components/ui/avatar.tsx","../src/react/components/assistant-ui/attachment.tsx","../src/react/components/assistant-ui/markdown-text.tsx","../src/react/components/assistant-ui/tool-fallback.tsx","../src/react/components/assistant-ui/context-pill.tsx","../src/react/components/ui/popover.tsx","../src/react/components/assistant-ui/context-mention-popover.tsx","../src/react/components/assistant-ui/mention-composer-input.tsx","../src/react/components/assistant-ui/user-message-content.tsx","../src/react/hooks/useContextMention.ts","../src/react/components/assistant-ui/thread.tsx","../src/react/components/assistant-ui/thread-list.tsx","../src/react/components/assistant-ui/artifact-tools.tsx","../src/react/components/ChatWidget.tsx","../src/react/components/LayoutPopover.tsx","../src/react/components/WidgetContainer.tsx","../src/react/components/assistant-ui/readonly-thread.tsx"],"names":["jsx","forwardRef","jsxs","prev","useState","CheckIcon","StyleSheet","length","character","characters","weakMemoize","identifierWithPointTracking","toRules","getRules","compat","removeLabel","prefixer","createCache","node","stylis","_stylis","_insert","theme","position","createContext","useRef","useRemoteThreadListRuntime","runtime","useEffect","useContext","useCallback","Avatar","useAssistantState","src","XIcon","remarkGfm","memo","useCopyToClipboard","CopyIcon","memoizeMarkdownComponents","FileTextIcon","TYPE_ICONS","FileIcon","VideoIcon","LinkIcon","match","useMemo","Fragment","useComposerRuntime","ComposerPrimitive","MessagePrimitive","useMessage","ChevronDownIcon","ThreadListPrimitive","ThreadListItem","ThreadListItemPrimitive","Loader2Icon","DownloadIcon","ExternalLinkIcon","makeAssistantToolUI","motion","SquareIcon","AnimatePresence","ThreadPrimitive"],"mappings":"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","file":"react.js","sourcesContent":["type EventHandler<T = unknown> = (payload: T) => void;\n\nexport class TypedEventEmitter<TEvents extends Record<string, unknown>> {\n private listeners = new Map<keyof TEvents, Set<EventHandler>>();\n\n on<K extends keyof TEvents>(\n event: K,\n handler: EventHandler<TEvents[K]>\n ): () => void {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event)!.add(handler as EventHandler);\n\n // Return unsubscribe function\n return () => this.off(event, handler);\n }\n\n off<K extends keyof TEvents>(\n event: K,\n handler: EventHandler<TEvents[K]>\n ): void {\n this.listeners.get(event)?.delete(handler as EventHandler);\n }\n\n emit<K extends keyof TEvents>(event: K, payload: TEvents[K]): void {\n this.listeners.get(event)?.forEach((handler) => {\n try {\n handler(payload);\n } catch (error) {\n console.error(`Error in ${String(event)} handler:`, error);\n }\n });\n }\n\n clear(): void {\n this.listeners.clear();\n }\n\n removeAllListeners(event?: keyof TEvents): void {\n if (event) {\n this.listeners.delete(event);\n } else {\n this.listeners.clear();\n }\n }\n}\n\n","import type { WidgetConfig, Message, ChatSession, Artifact } from './types';\n\nexport class WidgetAPI {\n private config: Required<WidgetConfig>;\n\n constructor(config: WidgetConfig) {\n this.config = {\n baseUrl: process.env.WIDGET_API_URL || 'http://localhost:3000',\n userId: '',\n debug: false,\n assistantId: config.apiKey, // Default to apiKey for backwards compatibility\n ...config,\n };\n }\n\n async createSession(): Promise<ChatSession> {\n const response = await this.request<ChatSession>('/sessions', {\n method: 'POST',\n body: JSON.stringify({\n // apiKey IS the assistantId\n assistantId: this.config.apiKey,\n userId: this.config.userId,\n }),\n });\n return response;\n }\n\n async sendMessage(sessionId: string, content: string): Promise<Message> {\n const response = await this.request<Message>(`/sessions/${sessionId}/messages`, {\n method: 'POST',\n body: JSON.stringify({ content }),\n });\n return response;\n }\n\n async getHistory(sessionId: string): Promise<Message[]> {\n return this.request<Message[]>(`/sessions/${sessionId}/messages`);\n }\n\n async getSessions(): Promise<ChatSession[]> {\n return this.request<ChatSession[]>('/sessions');\n }\n\n async getArtifacts(): Promise<Artifact[]> {\n return this.request<Artifact[]>('/artifacts');\n }\n\n async getArtifact(id: string): Promise<Artifact> {\n return this.request<Artifact>(`/artifacts/${id}`);\n }\n\n async createArtifact(artifact: Omit<Artifact, 'id' | 'createdAt' | 'updatedAt'>): Promise<Artifact> {\n return this.request<Artifact>('/artifacts', {\n method: 'POST',\n body: JSON.stringify(artifact),\n });\n }\n\n private async request<T>(\n endpoint: string,\n options: RequestInit = {}\n ): Promise<T> {\n const url = `${this.config.baseUrl}${endpoint}`;\n \n this.log('Request:', url, options);\n\n const response = await fetch(url, {\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this.config.apiKey}`,\n ...options.headers,\n },\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.message || `HTTP ${response.status}`);\n }\n\n return response.json();\n }\n\n private log(...args: unknown[]): void {\n if (this.config.debug) {\n console.log('[CourseAI]', ...args);\n }\n }\n}\n\n","import { TypedEventEmitter } from './events';\nimport { WidgetAPI } from './api';\nimport type {\n WidgetConfig,\n WidgetState,\n WidgetEvents,\n Message,\n ChatSession,\n} from './types';\n\nexport class WidgetClient {\n private config: WidgetConfig;\n private state: WidgetState = { status: 'idle' };\n private events = new TypedEventEmitter<WidgetEvents>();\n private api: WidgetAPI;\n\n constructor(config: WidgetConfig) {\n this.config = config;\n this.api = new WidgetAPI(config);\n }\n\n /**\n * Initialize the widget and create a chat session\n */\n async initialize(): Promise<void> {\n if (this.state.status !== 'idle') {\n throw new Error('Widget already initialized');\n }\n\n this.setState({ status: 'initializing' });\n\n try {\n const session = await this.api.createSession();\n this.setState({ status: 'ready', session });\n this.events.emit('session:created', { session });\n } catch (error) {\n const widgetError = {\n code: 'INIT_FAILED',\n message: error instanceof Error ? error.message : 'Unknown error',\n details: error,\n };\n this.setState({ status: 'error', error: widgetError });\n this.events.emit('error', { error: widgetError });\n throw error;\n }\n }\n\n /**\n * Send a message to the AI assistant\n */\n async sendMessage(content: string): Promise<Message> {\n if (this.state.status !== 'ready') {\n throw new Error('Widget not ready. Call initialize() first.');\n }\n\n const userMessage: Message = {\n id: crypto.randomUUID(),\n role: 'user',\n content,\n timestamp: Date.now(),\n };\n\n // Optimistically add user message\n const session = {\n ...this.state.session,\n messages: [...this.state.session.messages, userMessage],\n };\n this.setState({ status: 'ready', session });\n this.events.emit('message:sent', { message: userMessage });\n\n // Set loading state\n this.setState({ status: 'loading' });\n\n try {\n const assistantMessage = await this.api.sendMessage(\n session.id,\n content\n );\n\n const updatedSession = {\n ...session,\n messages: [...session.messages, assistantMessage],\n };\n\n this.setState({ status: 'ready', session: updatedSession });\n this.events.emit('message:received', { message: assistantMessage });\n\n return assistantMessage;\n } catch (error) {\n const widgetError = {\n code: 'SEND_MESSAGE_FAILED',\n message: error instanceof Error ? error.message : 'Failed to send message',\n details: error,\n };\n \n // Revert to previous state with user message still included\n this.setState({ status: 'ready', session });\n this.events.emit('error', { error: widgetError });\n throw error;\n }\n }\n\n /**\n * Get current state\n */\n getState(): WidgetState {\n return this.state;\n }\n\n /**\n * Get the API instance for direct calls\n */\n getAPI(): WidgetAPI {\n return this.api;\n }\n\n /**\n * Get the widget configuration\n */\n getConfig(): WidgetConfig {\n return this.config;\n }\n\n /**\n * Subscribe to events\n */\n on<K extends keyof WidgetEvents>(\n event: K,\n handler: (payload: WidgetEvents[K]) => void\n ): () => void {\n return this.events.on(event, handler);\n }\n\n /**\n * Unsubscribe from events\n */\n off<K extends keyof WidgetEvents>(\n event: K,\n handler: (payload: WidgetEvents[K]) => void\n ): void {\n this.events.off(event, handler);\n }\n\n /**\n * Clean up resources\n */\n destroy(): void {\n this.events.clear();\n this.setState({ status: 'idle' });\n }\n\n private setState(newState: WidgetState): void {\n const previous = this.state;\n this.state = newState;\n this.events.emit('state:change', { previous, current: newState });\n }\n}\n\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } from \"../../utils\"\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n )\n}\n\nfunction Tooltip({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n )\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-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 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\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 \"../../utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nconst Button = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }\n>(({ className, variant = \"default\", size = \"default\", asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n ref={ref}\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n})\n\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","\"use client\";\n\nimport { ComponentPropsWithRef, forwardRef } from \"react\";\nimport { Slottable } from \"@radix-ui/react-slot\";\n\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../ui/tooltip\";\nimport { Button } from \"../ui/button\";\nimport { cn } from \"../../utils\";\n\nexport type TooltipIconButtonProps = ComponentPropsWithRef<typeof Button> & {\n tooltip: string;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n};\n\nexport const TooltipIconButton = forwardRef<\n HTMLButtonElement,\n TooltipIconButtonProps\n>(({ children, tooltip, side = \"bottom\", className, ...rest }, ref) => {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button variant=\"ghost\" size=\"icon-sm\" {...rest} ref={ref}>\n <Slottable>{children}</Slottable>\n <span className=\"aui-sr-only sr-only\">{tooltip}</span>\n </Button>\n </TooltipTrigger>\n <TooltipContent side={side}>{tooltip}</TooltipContent>\n </Tooltip>\n );\n});\n\nTooltipIconButton.displayName = \"TooltipIconButton\";\n","\"use client\";\n\nimport { useEffect, useRef, useState, type FC, type ReactNode } from \"react\";\nimport {\n Loader2Icon,\n CheckIcon,\n XCircleIcon,\n ChevronDownIcon,\n ChevronUpIcon,\n} from \"lucide-react\";\nimport { cn } from \"../../utils\";\n\nexport interface ToolCardProps {\n /** Main title displayed in the header */\n title: string;\n /** Subtitle/label displayed above the title (e.g., \"Detailed Answer\" or \"Tool\") */\n subtitle?: string;\n /** Whether the tool is currently streaming/running */\n isStreaming: boolean;\n /** Whether the tool ended with an error */\n isError?: boolean;\n /** Custom icon to display instead of the default status icons */\n icon?: ReactNode;\n /** Content to display below the header when expanded (always visible) */\n persistentContent?: ReactNode;\n /** Collapsible content */\n children: ReactNode;\n /** Footer actions (only shown when expanded) */\n footer?: ReactNode;\n}\n\nexport const ToolCard: FC<ToolCardProps> = ({\n title,\n subtitle,\n isStreaming,\n isError = false,\n icon,\n persistentContent,\n children,\n footer,\n}) => {\n // Manual expansion state (null means \"follow automatic behavior\")\n const [manualExpanded, setManualExpanded] = useState<boolean | null>(null);\n\n // Track previous streaming state to detect completion\n const prevStreamingRef = useRef(isStreaming);\n\n // Ref for auto-scrolling content\n const contentRef = useRef<HTMLDivElement>(null);\n\n // Effective expanded state: manual override or automatic based on streaming\n const isExpanded = manualExpanded ?? isStreaming;\n\n // Reset manual state when streaming starts (new tool call)\n useEffect(() => {\n if (isStreaming && !prevStreamingRef.current) {\n // Streaming just started - reset to automatic behavior\n setManualExpanded(null);\n }\n prevStreamingRef.current = isStreaming;\n }, [isStreaming]);\n\n // Auto-scroll to bottom when streaming\n useEffect(() => {\n if (isStreaming && contentRef.current) {\n contentRef.current.scrollTop = contentRef.current.scrollHeight;\n }\n });\n\n // Determine which icon to show\n const renderIcon = () => {\n if (icon) return icon;\n\n const iconClass = cn(\"h-4 w-4\", isStreaming && \"animate-spin\");\n\n if (isStreaming) {\n return <Loader2Icon className={iconClass} />;\n }\n if (isError) {\n return <XCircleIcon className=\"h-4 w-4 text-red-400\" />;\n }\n return <CheckIcon className=\"h-4 w-4\" />;\n };\n\n const handleToggle = () => {\n // Allow manual toggle only when not streaming\n if (!isStreaming) {\n setManualExpanded((prev) => (prev === null ? true : !prev));\n }\n };\n\n return (\n <div className=\"my-2 overflow-hidden rounded-xl border border-border shadow-sm\">\n {/* Header */}\n <div\n className={cn(\n \"flex items-center gap-2 p-2 cursor-pointer transition-colors text-white bg-primary-foreground\",\n !isStreaming && \"hover:opacity-90\"\n )}\n onClick={handleToggle}\n >\n {/* Icon - 8px with transparent background */}\n <div className=\"flex items-center justify-center\">{renderIcon()}</div>\n <div className=\"flex-1 min-w-0\">\n {subtitle && (\n <p className=\"font-medium opacity-80 leading-tight text-xs text-muted-foreground\">\n {subtitle}\n </p>\n )}\n <h4 className=\"truncate font-semibold leading-tight text-sm text-muted-foreground\">\n {title}\n </h4>\n </div>\n <button\n className=\"p-1 rounded hover:bg-white/20 transition-colors\"\n aria-label={isExpanded ? \"Collapse\" : \"Expand\"}\n onClick={(e) => {\n e.stopPropagation();\n handleToggle();\n }}\n >\n {isExpanded ? (\n <ChevronUpIcon className=\"h-4 w-4\" />\n ) : (\n <ChevronDownIcon className=\"h-4 w-4\" />\n )}\n </button>\n </div>\n\n {/* Persistent content (always visible, e.g., summary) */}\n\n {persistentContent}\n\n {/* Expandable Content */}\n {isExpanded && (\n <div\n ref={contentRef}\n className=\"p-2 max-h-[400px] overflow-y-auto bg-secondary\"\n >\n {children}\n </div>\n )}\n\n {/* Footer actions (only shown when expanded) */}\n {isExpanded && footer && (\n <div className=\"flex items-center justify-end gap-2 border-t border-white/10 p-2 bg-primary-foreground/80\">\n {footer}\n </div>\n )}\n </div>\n );\n};\n","\"use client\";\n\nimport { makeAssistantToolUI } from \"@assistant-ui/react\";\nimport ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport { type FC, useState, memo } from \"react\";\nimport {\n FileTextIcon,\n CopyIcon,\n CheckIcon,\n ExternalLinkIcon,\n} from \"lucide-react\";\nimport { cn } from \"../../utils\";\nimport { TooltipIconButton } from \"./tooltip-icon-button\";\nimport { ToolCard } from \"./tool-card\";\n\n// Types for the tool\ninterface DetailedAnswerArgs {\n title: string;\n summary: string;\n content: string;\n}\n\ninterface DetailedAnswerResult {\n id: string;\n title: string;\n summary: string;\n content: string;\n createdAt: number;\n}\n\n// Custom hook for copy functionality\nconst useCopyToClipboard = ({\n copiedDuration = 3000,\n}: {\n copiedDuration?: number;\n} = {}) => {\n const [isCopied, setIsCopied] = useState<boolean>(false);\n\n const copyToClipboard = (value: string) => {\n if (!value) return;\n\n navigator.clipboard.writeText(value).then(() => {\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), copiedDuration);\n });\n };\n\n return { isCopied, copyToClipboard };\n};\n\n// Markdown content component using react-markdown directly\n// (MarkdownTextPrimitive requires text message part context which isn't available in tool UIs)\nconst MarkdownContent: FC<{ content: string }> = memo(({ content }) => {\n return (\n <div className=\"aui-md max-w-none text-white\">\n <ReactMarkdown\n remarkPlugins={[remarkGfm]}\n components={{\n h1: ({ className, ...props }) => (\n <h1\n className={cn(\n \"mb-2 font-extrabold tracking-tight last:mb-0 text-white\",\n className\n )}\n style={{ fontSize: \"12px\" }}\n {...props}\n />\n ),\n h2: ({ className, ...props }) => (\n <h2\n className={cn(\n \"mt-3 mb-1.5 font-semibold tracking-tight first:mt-0 last:mb-0 text-white\",\n className\n )}\n style={{ fontSize: \"10px\" }}\n {...props}\n />\n ),\n h3: ({ className, ...props }) => (\n <h3\n className={cn(\n \"mt-2 mb-1 font-semibold tracking-tight first:mt-0 last:mb-0 text-white\",\n className\n )}\n style={{ fontSize: \"9px\" }}\n {...props}\n />\n ),\n p: ({ className, ...props }) => (\n <p\n className={cn(\n \"mt-1.5 mb-1.5 leading-relaxed first:mt-0 last:mb-0 text-white/90\",\n className\n )}\n {...props}\n />\n ),\n ul: ({ className, ...props }) => (\n <ul\n className={cn(\n \"my-1.5 ml-3 list-disc [&>li]:mt-0.5 text-white/90\",\n className\n )}\n {...props}\n />\n ),\n ol: ({ className, ...props }) => (\n <ol\n className={cn(\n \"my-1.5 ml-3 list-decimal [&>li]:mt-0.5 text-white/90\",\n className\n )}\n {...props}\n />\n ),\n blockquote: ({ className, ...props }) => (\n <blockquote\n className={cn(\n \"border-l-2 border-white/30 pl-2 italic text-white/70\",\n className\n )}\n {...props}\n />\n ),\n pre: ({ className, ...props }) => (\n <pre\n className={cn(\n \"overflow-x-auto rounded bg-black/30 p-1.5 text-white/90 my-1.5\",\n className\n )}\n {...props}\n />\n ),\n code: ({ className, ...props }) => {\n // Check if this is an inline code or code block\n const isInline = !className?.includes(\"language-\");\n return (\n <code\n className={cn(\n isInline &&\n \"rounded bg-black/30 px-0.5 py-0.5 font-mono text-white/90\",\n className\n )}\n {...props}\n />\n );\n },\n a: ({ className, ...props }) => (\n <a\n className={cn(\n \"font-medium text-blue-300 underline underline-offset-2\",\n className\n )}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n {...props}\n />\n ),\n hr: ({ className, ...props }) => (\n <hr\n className={cn(\"my-2 border-b border-white/20\", className)}\n {...props}\n />\n ),\n }}\n >\n {content}\n </ReactMarkdown>\n </div>\n );\n});\n\nMarkdownContent.displayName = \"MarkdownContent\";\n\n// Main DetailedAnswerToolUI component\nexport const DetailedAnswerToolUI = makeAssistantToolUI<\n DetailedAnswerArgs,\n DetailedAnswerResult\n>({\n toolName: \"generateDetailedAnswer\",\n render: function DetailedAnswerUI({ args, result, status }) {\n const { isCopied, copyToClipboard } = useCopyToClipboard();\n\n const isStreaming = status.type === \"running\";\n const isError = status.type === \"incomplete\";\n const title = result?.title || args.title || \"Generating...\";\n const content = result?.content || args.content || \"\";\n const summary = result?.summary || args.summary || \"\";\n\n const handleCopy = () => {\n if (content) {\n copyToClipboard(content);\n }\n };\n\n const handleOpenFullScreen = () => {\n // Create a new window with the content\n const newWindow = window.open(\"\", \"_blank\");\n if (newWindow) {\n newWindow.document.write(`\n <!DOCTYPE html>\n <html>\n <head>\n <title>${title}</title>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <style>\n body {\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n max-width: 800px;\n margin: 0 auto;\n padding: 2rem;\n line-height: 1.6;\n color: #1a1a1a;\n }\n h1 { border-bottom: 1px solid #eee; padding-bottom: 0.5rem; }\n pre { background: #f5f5f5; padding: 1rem; overflow-x: auto; border-radius: 4px; }\n code { background: #f5f5f5; padding: 0.2em 0.4em; border-radius: 3px; font-size: 0.9em; }\n pre code { background: none; padding: 0; }\n blockquote { border-left: 4px solid #ddd; margin: 0; padding-left: 1rem; color: #666; }\n </style>\n </head>\n <body>\n <h1>${title}</h1>\n <div id=\"content\">${content\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")}</div>\n <script src=\"https://cdn.jsdelivr.net/npm/marked/marked.min.js\"></script>\n <script>\n document.getElementById('content').innerHTML = marked.parse(${JSON.stringify(\n content\n )});\n </script>\n </body>\n </html>\n `);\n newWindow.document.close();\n }\n };\n\n // Summary displayed below header but outside collapsible area\n const persistentSummary = summary ? (\n <div className=\"p-2 text-white/80 border-b border-white/10 bg-primary-foreground text-xs\">\n {summary}\n </div>\n ) : undefined;\n\n // Footer with copy/open actions (only shown when expanded)\n const footerActions = content ? (\n <>\n <TooltipIconButton\n tooltip={isCopied ? \"Copied!\" : \"Copy markdown\"}\n onClick={handleCopy}\n className=\"flex items-center justify-center rounded-md p-1.5 text-white/70 hover:bg-white/10 transition-colors\"\n >\n {isCopied ? (\n <CheckIcon className=\"h-3.5 w-3.5\" />\n ) : (\n <CopyIcon className=\"h-3.5 w-3.5\" />\n )}\n </TooltipIconButton>\n <TooltipIconButton\n tooltip=\"Open in new window\"\n onClick={handleOpenFullScreen}\n className=\"flex items-center justify-center rounded-md p-1.5 text-white/70 hover:bg-white/10 transition-colors\"\n >\n <ExternalLinkIcon className=\"h-3.5 w-3.5\" />\n </TooltipIconButton>\n </>\n ) : undefined;\n\n return (\n <ToolCard\n title={title}\n isStreaming={isStreaming}\n isError={isError}\n icon={\n !isStreaming && !isError ? (\n <FileTextIcon className=\"h-4 w-4\" />\n ) : undefined\n }\n persistentContent={persistentSummary}\n footer={footerActions}\n >\n {content ? (\n <MarkdownContent content={content} />\n ) : (\n <p className=\"text-muted-foreground italic\">Generating content...</p>\n )}\n </ToolCard>\n );\n },\n});\n","'use client'\n\nimport {\n createContext,\n useContext,\n useState,\n useCallback,\n type ReactNode,\n} from 'react'\nimport type { ContextItem } from '../hooks/useContextMention'\n\n/**\n * Context for managing message context items that will be sent with the next message\n */\ninterface MessageContextValue {\n /** Currently selected context items */\n selectedContext: ContextItem[]\n /** Add a context item */\n addContextItem: (item: ContextItem) => void\n /** Remove a context item by ID */\n removeContextItem: (id: string) => void\n /** Clear all context items */\n clearContext: () => void\n /** Set all context items at once */\n setContext: (items: ContextItem[]) => void\n /** Get context for sending and clear it */\n consumeContext: () => ContextItem[]\n}\n\nconst MessageContext = createContext<MessageContextValue | null>(null)\n\nexport function MessageContextProvider({ children }: { children: ReactNode }) {\n const [selectedContext, setSelectedContext] = useState<ContextItem[]>([])\n\n const addContextItem = useCallback((item: ContextItem) => {\n console.log('[MessageContext] Adding context item:', item.id, item.title)\n setSelectedContext((prev) => {\n // Don't add duplicates\n if (prev.some((i) => i.id === item.id)) {\n console.log('[MessageContext] Item already exists, skipping')\n return prev\n }\n console.log('[MessageContext] Context items count:', prev.length + 1)\n return [...prev, item]\n })\n }, [])\n\n const removeContextItem = useCallback((id: string) => {\n setSelectedContext((prev) => prev.filter((item) => item.id !== id))\n }, [])\n\n const clearContext = useCallback(() => {\n console.log('[MessageContext] Clearing context')\n setSelectedContext([])\n }, [])\n\n const setContext = useCallback((items: ContextItem[]) => {\n setSelectedContext(items)\n }, [])\n\n const consumeContext = useCallback(() => {\n const context = selectedContext\n console.log('[MessageContext] Consuming context:', context.length, 'items')\n // Don't clear on consume - let the UI manage clearing after successful send\n return context\n }, [selectedContext])\n\n return (\n <MessageContext.Provider\n value={{\n selectedContext,\n addContextItem,\n removeContextItem,\n clearContext,\n setContext,\n consumeContext,\n }}\n >\n {children}\n </MessageContext.Provider>\n )\n}\n\nexport function useMessageContext() {\n const context = useContext(MessageContext)\n if (!context) {\n throw new Error(\n 'useMessageContext must be used within a MessageContextProvider',\n )\n }\n return context\n}\n","export const theme = {\n colors: {\n background: {\n primary: '#1a1a1a',\n secondary: '#2a2a2a',\n tertiary: '#3a3a3a',\n },\n accent: {\n primary: '#c9a227',\n hover: '#d4af37',\n muted: 'rgba(201, 162, 39, 0.4)',\n },\n text: {\n primary: '#ffffff',\n secondary: '#888888',\n tertiary: '#cccccc',\n inverse: '#1a1a1a',\n },\n border: '#2a2a2a',\n shadow: 'rgba(0, 0, 0, 0.4)',\n },\n spacing: {\n xs: '0.25rem',\n sm: '0.5rem',\n md: '1rem',\n lg: '1.5rem',\n xl: '2rem',\n '2xl': '3rem',\n },\n radii: {\n sm: '0.5rem',\n md: '0.75rem',\n lg: '1rem',\n xl: '1.5rem',\n full: '50%',\n },\n typography: {\n fontFamily: \"system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n fontSize: {\n xs: '0.75rem',\n sm: '0.875rem',\n md: '1rem',\n lg: '1.125rem',\n xl: '1.25rem',\n '2xl': '1.5rem',\n },\n fontWeight: {\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.7,\n },\n },\n zIndex: {\n widget: 9999,\n overlay: 9998,\n },\n shadows: {\n sm: '0 2px 8px rgba(0, 0, 0, 0.2)',\n md: '0 4px 16px rgba(0, 0, 0, 0.3)',\n lg: '0 8px 32px rgba(0, 0, 0, 0.4)',\n accent: '0 4px 16px rgba(201, 162, 39, 0.4)',\n accentHover: '0 6px 20px rgba(201, 162, 39, 0.5)',\n },\n transitions: {\n fast: '0.15s ease',\n normal: '0.2s ease',\n slow: '0.3s ease',\n },\n} as const;\n\nexport type Theme = typeof theme;\n\n// Extend Emotion's theme type via module augmentation\ndeclare module '@emotion/react' {\n // eslint-disable-next-line @typescript-eslint/no-empty-interface\n export interface Theme {\n colors: typeof theme.colors;\n spacing: typeof theme.spacing;\n radii: typeof theme.radii;\n typography: typeof theme.typography;\n zIndex: typeof theme.zIndex;\n shadows: typeof theme.shadows;\n transitions: typeof theme.transitions;\n }\n}\n","var isDevelopment = false;\n\n/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n return document.styleSheets[i];\n }\n } // this function should always return with a value\n // TS can't understand it though so we make it stop complaining here\n\n\n return undefined;\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n tag.setAttribute('data-s', '');\n return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n // Using Node instead of HTMLElement since container may be a ShadowRoot\n function StyleSheet(options) {\n var _this = this;\n\n this._insertTag = function (tag) {\n var before;\n\n if (_this.tags.length === 0) {\n if (_this.insertionPoint) {\n before = _this.insertionPoint.nextSibling;\n } else if (_this.prepend) {\n before = _this.container.firstChild;\n } else {\n before = _this.before;\n }\n } else {\n before = _this.tags[_this.tags.length - 1].nextSibling;\n }\n\n _this.container.insertBefore(tag, before);\n\n _this.tags.push(tag);\n };\n\n this.isSpeedy = options.speedy === undefined ? !isDevelopment : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.prepend = options.prepend;\n this.insertionPoint = options.insertionPoint;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.hydrate = function hydrate(nodes) {\n nodes.forEach(this._insertTag);\n };\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n this._insertTag(createStyleElement(this));\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n this.tags.forEach(function (tag) {\n var _tag$parentNode;\n\n return (_tag$parentNode = tag.parentNode) == null ? void 0 : _tag$parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n };\n\n return StyleSheet;\n}();\n\nexport { StyleSheet };\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d l m s\n\t\t\t\t\t\t\t\t\tcase 100: case 108: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nexport function comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nexport function declaration (value, root, parent, length) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)\n}\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen, sizeof} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\tvar length = sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine} from './Utility.js'\nimport {copy, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\treturn serialize([copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]})], callback)\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\treturn serialize([\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]})\n\t\t\t\t\t\t\t\t\t], callback)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","var weakMemoize = function weakMemoize(func) {\n var cache = new WeakMap();\n return function (arg) {\n if (cache.has(arg)) {\n // Use non-null assertion because we just checked that the cache `has` it\n // This allows us to remove `undefined` from the return value\n return cache.get(arg);\n }\n\n var ret = func(arg);\n cache.set(arg, ret);\n return ret;\n };\n};\n\nexport { weakMemoize as default };\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport { memoize as default };\n","import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, slice, position, RULESET, combine, match, serialize, copy, replace, WEBKIT, MOZ, MS, KEYFRAMES, DECLARATION, hash, charat, strlen, indexof, stringify, rulesheet, middleware, compile } from 'stylis';\nimport weakMemoize from '@emotion/weak-memoize';\nimport memoize from '@emotion/memoize';\n\nvar isBrowser = typeof document !== 'undefined';\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n var previous = 0;\n var character = 0;\n\n while (true) {\n previous = character;\n character = peek(); // &\\f\n\n if (previous === 38 && character === 12) {\n points[index] = 1;\n }\n\n if (token(character)) {\n break;\n }\n\n next();\n }\n\n return slice(begin, position);\n};\n\nvar toRules = function toRules(parsed, points) {\n // pretend we've started with a comma\n var index = -1;\n var character = 44;\n\n do {\n switch (token(character)) {\n case 0:\n // &\\f\n if (character === 38 && peek() === 12) {\n // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n // and when it should just concatenate the outer and inner selectors\n // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n points[index] = 1;\n }\n\n parsed[index] += identifierWithPointTracking(position - 1, points, index);\n break;\n\n case 2:\n parsed[index] += delimit(character);\n break;\n\n case 4:\n // comma\n if (character === 44) {\n // colon\n parsed[++index] = peek() === 58 ? '&\\f' : '';\n points[index] = parsed[index].length;\n break;\n }\n\n // fallthrough\n\n default:\n parsed[index] += from(character);\n }\n } while (character = next());\n\n return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n // negative .length indicates that this rule has been already prefixed\n element.length < 1) {\n return;\n }\n\n var value = element.value;\n var parent = element.parent;\n var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n while (parent.type !== 'rule') {\n parent = parent.parent;\n if (!parent) return;\n } // short-circuit for the simplest case\n\n\n if (element.props.length === 1 && value.charCodeAt(0) !== 58\n /* colon */\n && !fixedElements.get(parent)) {\n return;\n } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n if (isImplicitRule) {\n return;\n }\n\n fixedElements.set(element, true);\n var points = [];\n var rules = getRules(value, points);\n var parentRules = parent.props;\n\n for (var i = 0, k = 0; i < rules.length; i++) {\n for (var j = 0; j < parentRules.length; j++, k++) {\n element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n }\n }\n};\nvar removeLabel = function removeLabel(element) {\n if (element.type === 'decl') {\n var value = element.value;\n\n if ( // charcode for l\n value.charCodeAt(0) === 108 && // charcode for b\n value.charCodeAt(2) === 98) {\n // this ignores label\n element[\"return\"] = '';\n element.value = '';\n }\n }\n};\n\n/* eslint-disable no-fallthrough */\n\nfunction prefix(value, length) {\n switch (hash(value, length)) {\n // color-adjust\n case 5103:\n return WEBKIT + 'print-' + value + value;\n // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\n case 5737:\n case 4201:\n case 3177:\n case 3433:\n case 1641:\n case 4457:\n case 2921: // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\n case 5572:\n case 6356:\n case 5844:\n case 3191:\n case 6645:\n case 3005: // mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\n case 6391:\n case 5879:\n case 5623:\n case 6135:\n case 4599:\n case 4855: // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\n case 4215:\n case 6389:\n case 5109:\n case 5365:\n case 5621:\n case 3829:\n return WEBKIT + value + value;\n // appearance, user-select, transform, hyphens, text-size-adjust\n\n case 5349:\n case 4246:\n case 4810:\n case 6968:\n case 2756:\n return WEBKIT + value + MOZ + value + MS + value + value;\n // flex, flex-direction\n\n case 6828:\n case 4268:\n return WEBKIT + value + MS + value + value;\n // order\n\n case 6165:\n return WEBKIT + value + MS + 'flex-' + value + value;\n // align-items\n\n case 5187:\n return WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value;\n // align-self\n\n case 5443:\n return WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value;\n // align-content\n\n case 4675:\n return WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value;\n // flex-shrink\n\n case 5548:\n return WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value;\n // flex-basis\n\n case 5292:\n return WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value;\n // flex-grow\n\n case 6060:\n return WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value;\n // transition\n\n case 4554:\n return WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value;\n // cursor\n\n case 6187:\n return replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value;\n // background, background-image\n\n case 5495:\n case 3959:\n return replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1');\n // justify-content\n\n case 4968:\n return replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value;\n // (margin|padding)-inline-(start|end)\n\n case 4095:\n case 3583:\n case 4068:\n case 2532:\n return replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value;\n // (min|max)?(width|height|inline-size|block-size)\n\n case 8116:\n case 7059:\n case 5753:\n case 5535:\n case 5445:\n case 5701:\n case 4933:\n case 4677:\n case 5533:\n case 5789:\n case 5021:\n case 4765:\n // stretch, max-content, min-content, fill-available\n if (strlen(value) - 1 - length > 6) switch (charat(value, length + 1)) {\n // (m)ax-content, (m)in-content\n case 109:\n // -\n if (charat(value, length + 4) !== 45) break;\n // (f)ill-available, (f)it-content\n\n case 102:\n return replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value;\n // (s)tretch\n\n case 115:\n return ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value;\n }\n break;\n // position: sticky\n\n case 4949:\n // (s)ticky?\n if (charat(value, length + 1) !== 115) break;\n // display: (flex|inline-flex)\n\n case 6444:\n switch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n // stic(k)y\n case 107:\n return replace(value, ':', ':' + WEBKIT) + value;\n // (inline-)?fl(e)x\n\n case 101:\n return replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value;\n }\n\n break;\n // writing-mode\n\n case 5936:\n switch (charat(value, length + 11)) {\n // vertical-l(r)\n case 114:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value;\n // vertical-r(l)\n\n case 108:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value;\n // horizontal(-)tb\n\n case 45:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value;\n }\n\n return WEBKIT + value + MS + value + value;\n }\n\n return value;\n}\n\nvar prefixer = function prefixer(element, index, children, callback) {\n if (element.length > -1) if (!element[\"return\"]) switch (element.type) {\n case DECLARATION:\n element[\"return\"] = prefix(element.value, element.length);\n break;\n\n case KEYFRAMES:\n return serialize([copy(element, {\n value: replace(element.value, '@', '@' + WEBKIT)\n })], callback);\n\n case RULESET:\n if (element.length) return combine(element.props, function (value) {\n switch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n // :read-(only|write)\n case ':read-only':\n case ':read-write':\n return serialize([copy(element, {\n props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]\n })], callback);\n // :placeholder\n\n case '::placeholder':\n return serialize([copy(element, {\n props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]\n }), copy(element, {\n props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]\n }), copy(element, {\n props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]\n })], callback);\n }\n\n return '';\n });\n }\n};\n\nvar getServerStylisCache = isBrowser ? undefined : weakMemoize(function () {\n return memoize(function () {\n return {};\n });\n});\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function createCache(options) {\n var key = options.key;\n\n if (isBrowser && key === 'css') {\n var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n // note this very very intentionally targets all style elements regardless of the key to ensure\n // that creating a cache works inside of render of a React component\n\n Array.prototype.forEach.call(ssrStyles, function (node) {\n // we want to only move elements which have a space in the data-emotion attribute value\n // because that indicates that it is an Emotion 11 server-side rendered style elements\n // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n // will not result in the Emotion 10 styles being destroyed\n var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n if (dataEmotionAttribute.indexOf(' ') === -1) {\n return;\n }\n\n document.head.appendChild(node);\n node.setAttribute('data-s', '');\n });\n }\n\n var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n var inserted = {};\n var container;\n var nodesToHydrate = [];\n\n if (isBrowser) {\n container = options.container || document.head;\n Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n var attrib = node.getAttribute(\"data-emotion\").split(' ');\n\n for (var i = 1; i < attrib.length; i++) {\n inserted[attrib[i]] = true;\n }\n\n nodesToHydrate.push(node);\n });\n }\n\n var _insert;\n\n var omnipresentPlugins = [compat, removeLabel];\n\n if (!getServerStylisCache) {\n var currentSheet;\n var finalizingPlugins = [stringify, rulesheet(function (rule) {\n currentSheet.insert(rule);\n })];\n var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n var stylis = function stylis(styles) {\n return serialize(compile(styles), serializer);\n };\n\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n currentSheet = sheet;\n\n stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n if (shouldCache) {\n cache.inserted[serialized.name] = true;\n }\n };\n } else {\n var _finalizingPlugins = [stringify];\n\n var _serializer = middleware(omnipresentPlugins.concat(stylisPlugins, _finalizingPlugins));\n\n var _stylis = function _stylis(styles) {\n return serialize(compile(styles), _serializer);\n };\n\n var serverStylisCache = getServerStylisCache(stylisPlugins)(key);\n\n var getRules = function getRules(selector, serialized) {\n var name = serialized.name;\n\n if (serverStylisCache[name] === undefined) {\n serverStylisCache[name] = _stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n }\n\n return serverStylisCache[name];\n };\n\n _insert = function _insert(selector, serialized, sheet, shouldCache) {\n var name = serialized.name;\n var rules = getRules(selector, serialized);\n\n if (cache.compat === undefined) {\n // in regular mode, we don't set the styles on the inserted cache\n // since we don't need to and that would be wasting memory\n // we return them so that they are rendered in a style tag\n if (shouldCache) {\n cache.inserted[name] = true;\n }\n\n return rules;\n } else {\n // in compat mode, we put the styles on the inserted cache so\n // that emotion-server can pull out the styles\n // except when we don't want to cache it which was in Global but now\n // is nowhere but we don't want to do a major right now\n // and just in case we're going to leave the case here\n // it's also not affecting client side bundle size\n // so it's really not a big deal\n if (shouldCache) {\n cache.inserted[name] = rules;\n } else {\n return rules;\n }\n }\n };\n }\n\n var cache = {\n key: key,\n sheet: new StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy,\n prepend: options.prepend,\n insertionPoint: options.insertionPoint\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n cache.sheet.hydrate(nodesToHydrate);\n return cache;\n};\n\nexport { createCache as default };\n","import createCache from '@emotion/cache';\n\n/**\n * Create an isolated Emotion cache for the widget.\n * This ensures our styles don't conflict with host website styles.\n * The 'la-widget' prefix will be added to all generated class names.\n */\nexport const createWidgetCache = (container?: HTMLElement) => {\n return createCache({\n key: 'la-widget',\n container,\n prepend: true,\n });\n};\n\n// Default cache instance for most use cases\nexport const widgetCache = createCache({\n key: 'la-widget',\n prepend: true,\n});\n\n","import styled from '@emotion/styled';\nimport { motion } from 'motion/react';\n\n// ============================================================================\n// Layout Primitives\n// ============================================================================\n\nexport const Screen = styled.div`\n display: flex;\n flex-direction: column;\n height: 100%;\n background-color: ${({ theme }) => theme.colors.background.primary};\n color: ${({ theme }) => theme.colors.text.primary};\n font-family: ${({ theme }) => theme.typography.fontFamily};\n`;\n\nexport const ScrollArea = styled.div`\n flex: 1;\n overflow-y: auto;\n padding: ${({ theme }) => theme.spacing.md};\n\n &::-webkit-scrollbar {\n width: 6px;\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n &::-webkit-scrollbar-thumb {\n background: ${({ theme }) => theme.colors.background.tertiary};\n border-radius: ${({ theme }) => theme.radii.full};\n }\n`;\n\nexport const Flex = styled.div<{\n direction?: 'row' | 'column';\n align?: 'flex-start' | 'center' | 'flex-end' | 'stretch';\n justify?: 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around';\n gap?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n wrap?: boolean;\n}>`\n display: flex;\n flex-direction: ${({ direction = 'row' }) => direction};\n align-items: ${({ align = 'stretch' }) => align};\n justify-content: ${({ justify = 'flex-start' }) => justify};\n gap: ${({ theme, gap }) => (gap ? theme.spacing[gap] : 0)};\n flex-wrap: ${({ wrap }) => (wrap ? 'wrap' : 'nowrap')};\n`;\n\nexport const Grid = styled.div<{\n columns?: number | string;\n gap?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n}>`\n display: grid;\n grid-template-columns: ${({ columns = 1 }) =>\n typeof columns === 'number' ? `repeat(${columns}, 1fr)` : columns};\n gap: ${({ theme, gap = 'md' }) => theme.spacing[gap]};\n`;\n\n// ============================================================================\n// Header Component\n// ============================================================================\n\nexport const Header = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: ${({ theme }) => theme.spacing.md};\n border-bottom: 1px solid ${({ theme }) => theme.colors.border};\n background-color: ${({ theme }) => theme.colors.background.primary};\n`;\n\nexport const HeaderTitle = styled.h2`\n margin: 0;\n font-size: ${({ theme }) => theme.typography.fontSize.md};\n font-weight: ${({ theme }) => theme.typography.fontWeight.medium};\n color: ${({ theme }) => theme.colors.text.primary};\n`;\n\n// ============================================================================\n// Button Primitives\n// ============================================================================\n\nexport const Button = styled.button<{\n variant?: 'primary' | 'secondary' | 'ghost';\n size?: 'sm' | 'md' | 'lg';\n fullWidth?: boolean;\n}>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: ${({ theme }) => theme.spacing.sm};\n padding: ${({ theme, size = 'md' }) => {\n const sizes = {\n sm: `${theme.spacing.sm} ${theme.spacing.md}`,\n md: `${theme.spacing.md} ${theme.spacing.lg}`,\n lg: `${theme.spacing.lg} ${theme.spacing.xl}`,\n };\n return sizes[size];\n }};\n width: ${({ fullWidth }) => (fullWidth ? '100%' : 'auto')};\n font-family: ${({ theme }) => theme.typography.fontFamily};\n font-size: ${({ theme }) => theme.typography.fontSize.sm};\n font-weight: ${({ theme }) => theme.typography.fontWeight.medium};\n border-radius: ${({ theme }) => theme.radii.sm};\n border: none;\n cursor: pointer;\n transition: all ${({ theme }) => theme.transitions.fast};\n\n ${({ theme, variant = 'primary' }) => {\n switch (variant) {\n case 'primary':\n return `\n background-color: ${theme.colors.accent.primary};\n color: ${theme.colors.text.inverse};\n &:hover:not(:disabled) {\n background-color: ${theme.colors.accent.hover};\n }\n `;\n case 'secondary':\n return `\n background-color: ${theme.colors.background.secondary};\n color: ${theme.colors.text.primary};\n &:hover:not(:disabled) {\n background-color: ${theme.colors.background.tertiary};\n }\n `;\n case 'ghost':\n return `\n background: none;\n color: ${theme.colors.text.secondary};\n &:hover:not(:disabled) {\n color: ${theme.colors.text.primary};\n background-color: ${theme.colors.background.secondary};\n }\n `;\n }\n }}\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nexport const IconButton = styled.button<{\n size?: 'sm' | 'md' | 'lg';\n}>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: ${({ theme }) => theme.spacing.xs};\n background: none;\n border: none;\n color: ${({ theme }) => theme.colors.text.primary};\n font-size: ${({ size = 'md' }) => {\n const sizes = { sm: '1rem', md: '1.25rem', lg: '1.5rem' };\n return sizes[size];\n }};\n cursor: pointer;\n transition: color ${({ theme }) => theme.transitions.fast};\n line-height: 1;\n\n &:hover {\n color: ${({ theme }) => theme.colors.text.secondary};\n }\n`;\n\n// ============================================================================\n// FAB Button (Floating Action Button)\n// ============================================================================\n\nexport const FAB = styled(motion.button)`\n width: 48px;\n height: 48px;\n border-radius: 50%;\n background-color: ${({ theme }) => theme.colors.background.primary};\n border: none;\n box-shadow: ${({ theme }) => theme.shadows.sm};\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.25rem;\n color: white;\n transition: box-shadow ${({ theme }) => theme.transitions.fast};\n position: relative;\n overflow: hidden;\n\n &:hover {\n box-shadow: ${({ theme }) => theme.shadows.md};\n }\n`;\n\n// ============================================================================\n// Input Primitives\n// ============================================================================\n\nexport const Input = styled.input`\n width: 100%;\n padding: ${({ theme }) => `${theme.spacing.md} ${theme.spacing.md}`};\n background-color: ${({ theme }) => theme.colors.background.secondary};\n border: none;\n border-radius: ${({ theme }) => theme.radii.sm};\n color: ${({ theme }) => theme.colors.text.primary};\n font-family: ${({ theme }) => theme.typography.fontFamily};\n font-size: ${({ theme }) => theme.typography.fontSize.sm};\n outline: none;\n transition: background-color ${({ theme }) => theme.transitions.fast};\n\n &::placeholder {\n color: ${({ theme }) => theme.colors.text.secondary};\n }\n\n &:focus {\n background-color: ${({ theme }) => theme.colors.background.tertiary};\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nexport const Textarea = styled.textarea`\n width: 100%;\n min-height: 150px;\n padding: ${({ theme }) => theme.spacing.md};\n background-color: ${({ theme }) => theme.colors.background.secondary};\n border: none;\n border-radius: ${({ theme }) => theme.radii.sm};\n color: ${({ theme }) => theme.colors.text.primary};\n font-family: ${({ theme }) => theme.typography.fontFamily};\n font-size: ${({ theme }) => theme.typography.fontSize.sm};\n line-height: ${({ theme }) => theme.typography.lineHeight.normal};\n resize: vertical;\n outline: none;\n\n &::placeholder {\n color: ${({ theme }) => theme.colors.text.secondary};\n }\n\n &:focus {\n background-color: ${({ theme }) => theme.colors.background.tertiary};\n }\n`;\n\n// ============================================================================\n// Card Primitives\n// ============================================================================\n\nexport const Card = styled.button<{\n selected?: boolean;\n interactive?: boolean;\n}>`\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme.spacing.md};\n width: 100%;\n padding: ${({ theme }) => theme.spacing.md};\n background-color: ${({ theme, selected }) =>\n selected ? theme.colors.background.tertiary : theme.colors.background.secondary};\n border: 2px solid\n ${({ theme, selected }) => (selected ? theme.colors.accent.primary : 'transparent')};\n border-radius: ${({ theme }) => theme.radii.sm};\n color: ${({ theme }) => theme.colors.text.primary};\n font-family: ${({ theme }) => theme.typography.fontFamily};\n text-align: left;\n cursor: ${({ interactive = true }) => (interactive ? 'pointer' : 'default')};\n transition: all ${({ theme }) => theme.transitions.fast};\n\n &:hover {\n background-color: ${({ theme, interactive = true }) =>\n interactive ? theme.colors.background.tertiary : theme.colors.background.secondary};\n }\n`;\n\nexport const CardContent = styled.div`\n flex: 1;\n min-width: 0;\n`;\n\nexport const CardTitle = styled.div`\n font-weight: ${({ theme }) => theme.typography.fontWeight.medium};\n margin-bottom: ${({ theme }) => theme.spacing.xs};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nexport const CardSubtitle = styled.div`\n color: ${({ theme }) => theme.colors.text.secondary};\n font-size: ${({ theme }) => theme.typography.fontSize.xs};\n`;\n\n// ============================================================================\n// Action Button (for grid items like Home screen)\n// ============================================================================\n\nexport const ActionButton = styled.button`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: ${({ theme }) => theme.spacing.md};\n background-color: ${({ theme }) => theme.colors.background.secondary};\n border: none;\n border-radius: ${({ theme }) => theme.radii.sm};\n color: ${({ theme }) => theme.colors.text.primary};\n font-family: ${({ theme }) => theme.typography.fontFamily};\n font-size: ${({ theme }) => theme.typography.fontSize.xs};\n gap: ${({ theme }) => theme.spacing.xs};\n cursor: pointer;\n transition: background-color ${({ theme }) => theme.transitions.fast};\n\n &:hover {\n background-color: ${({ theme }) => theme.colors.background.tertiary};\n }\n`;\n\nexport const ActionIcon = styled.span`\n font-size: 1.25rem;\n`;\n\n// ============================================================================\n// Avatar / Logo\n// ============================================================================\n\nexport const Avatar = styled.div<{ size?: 'sm' | 'md' | 'lg' }>`\n width: ${({ size = 'md' }) => {\n const sizes = { sm: '40px', md: '64px', lg: '80px' };\n return sizes[size];\n }};\n height: ${({ size = 'md' }) => {\n const sizes = { sm: '40px', md: '64px', lg: '80px' };\n return sizes[size];\n }};\n border-radius: ${({ theme }) => theme.radii.full};\n background-color: ${({ theme }) => theme.colors.background.secondary};\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: ${({ size = 'md' }) => {\n const sizes = { sm: '1rem', md: '1.5rem', lg: '2rem' };\n return sizes[size];\n }};\n`;\n\n// ============================================================================\n// Typography\n// ============================================================================\n\nexport const Title = styled.h1<{ size?: 'sm' | 'md' | 'lg' }>`\n margin: 0;\n font-size: ${({ theme, size = 'md' }) => {\n const sizes = {\n sm: theme.typography.fontSize.lg,\n md: theme.typography.fontSize.xl,\n lg: theme.typography.fontSize['2xl'],\n };\n return sizes[size];\n }};\n font-weight: ${({ theme }) => theme.typography.fontWeight.medium};\n color: ${({ theme }) => theme.colors.text.primary};\n`;\n\nexport const Text = styled.p<{\n color?: 'primary' | 'secondary' | 'tertiary' | 'accent';\n size?: 'xs' | 'sm' | 'md' | 'lg';\n}>`\n margin: 0;\n font-size: ${({ theme, size = 'md' }) => theme.typography.fontSize[size]};\n color: ${({ theme, color = 'primary' }) => {\n if (color === 'accent') return theme.colors.accent.primary;\n return theme.colors.text[color];\n }};\n line-height: ${({ theme }) => theme.typography.lineHeight.normal};\n`;\n\nexport const Link = styled.button`\n background: none;\n border: none;\n color: ${({ theme }) => theme.colors.text.secondary};\n font-family: ${({ theme }) => theme.typography.fontFamily};\n font-size: ${({ theme }) => theme.typography.fontSize.sm};\n text-decoration: underline;\n cursor: pointer;\n padding: 0;\n\n &:hover {\n color: ${({ theme }) => theme.colors.text.primary};\n }\n`;\n\n// ============================================================================\n// Divider\n// ============================================================================\n\nexport const Divider = styled.div`\n width: 100%;\n height: 1px;\n background-color: ${({ theme }) => theme.colors.border};\n`;\n\n// ============================================================================\n// List Item (for chats, artifacts lists)\n// ============================================================================\n\nexport const ListItem = styled.button`\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: ${({ theme }) => theme.spacing.md};\n background: transparent;\n border: none;\n border-bottom: 1px solid ${({ theme }) => theme.colors.border};\n color: ${({ theme }) => theme.colors.text.primary};\n font-family: ${({ theme }) => theme.typography.fontFamily};\n text-align: left;\n cursor: pointer;\n transition: background-color ${({ theme }) => theme.transitions.fast};\n\n &:hover {\n background-color: ${({ theme }) => theme.colors.background.secondary};\n }\n`;\n\n// ============================================================================\n// Widget Container Primitives\n// ============================================================================\n\nexport const WidgetRoot = styled.div<{ position: 'bottom-right' | 'bottom-left' }>`\n position: fixed;\n bottom: 20px;\n ${({ position }) => (position === 'bottom-right' ? 'right: 20px;' : 'left: 20px;')}\n z-index: ${({ theme }) => theme.zIndex.widget};\n font-family: ${({ theme }) => theme.typography.fontFamily};\n`;\n\nexport const WidgetPanel = styled(motion.div)`\n width: 400px;\n height: 700px;\n border-radius: ${({ theme }) => theme.radii.xl};\n overflow: hidden;\n box-shadow: ${({ theme }) => theme.shadows.lg};\n background-color: ${({ theme }) => theme.colors.background.primary};\n display: flex;\n flex-direction: column;\n`;\n\nexport const WidgetHeader = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: ${({ theme }) => `${theme.spacing.sm} ${theme.spacing.md}`};\n background-color: ${({ theme }) => theme.colors.background.primary};\n border-bottom: 1px solid ${({ theme }) => theme.colors.border};\n flex-shrink: 0;\n min-width: 0;\n gap: ${({ theme }) => theme.spacing.sm};\n`;\n\nexport const WidgetContent = styled.div`\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n`;\n\n// ============================================================================\n// Message Bubble (for chat messages)\n// ============================================================================\n\nexport const MessageBubble = styled.div<{ isUser?: boolean }>`\n max-width: 80%;\n padding: ${({ theme }) => `${theme.spacing.md} ${theme.spacing.md}`};\n border-radius: ${({ theme }) => theme.radii.md};\n background-color: ${({ theme, isUser }) =>\n isUser ? theme.colors.accent.primary : theme.colors.background.secondary};\n color: ${({ theme, isUser }) =>\n isUser ? theme.colors.text.inverse : theme.colors.text.primary};\n`;\n\nexport const MessageTimestamp = styled.span`\n font-size: ${({ theme }) => theme.typography.fontSize.xs};\n color: ${({ theme }) => theme.colors.text.secondary};\n margin-top: ${({ theme }) => theme.spacing.xs};\n`;\n\n// ============================================================================\n// Form\n// ============================================================================\n\nexport const Form = styled.form`\n display: flex;\n gap: ${({ theme }) => theme.spacing.sm};\n padding: ${({ theme }) => theme.spacing.md};\n border-top: 1px solid ${({ theme }) => theme.colors.border};\n`;\n\n// ============================================================================\n// Empty State\n// ============================================================================\n\nexport const EmptyState = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: ${({ theme }) => theme.colors.text.secondary};\n text-align: center;\n padding: ${({ theme }) => theme.spacing.xl};\n`;\n\n","'use client'\n\nimport React, {\n type ReactNode,\n createContext,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\n\nimport {\n AssistantRuntimeProvider,\n type unstable_RemoteThreadListAdapter as RemoteThreadListAdapter,\n type ThreadHistoryAdapter,\n useAssistantState,\n unstable_useRemoteThreadListRuntime as useRemoteThreadListRuntime,\n} from '@assistant-ui/react'\nimport {\n AssistantChatTransport,\n useChatRuntime,\n} from '@assistant-ui/react-ai-sdk'\nimport { CacheProvider } from '@emotion/react'\nimport { ThemeProvider } from '@emotion/react'\nimport { createAssistantStream } from 'assistant-stream'\n\nimport { WidgetClient } from '../core/client'\nimport type { WidgetConfig, WidgetState } from '../core/types'\nimport { DetailedAnswerToolUI } from './components/assistant-ui/detailed-answer-tool'\nimport { MessageContextProvider, useMessageContext } from './context/message-context'\nimport { theme, widgetCache } from './styles'\n\ninterface WidgetContextValue {\n client: WidgetClient\n state: WidgetState\n userId: string\n}\n\nexport const WidgetContext = createContext<WidgetContextValue | null>(null)\n\ninterface WidgetProviderProps {\n config: WidgetConfig\n children?: ReactNode\n autoInitialize?: boolean\n}\n\n/**\n * Generate a UUID for temporary users\n */\nfunction generateUserId(): string {\n return crypto.randomUUID()\n}\n\n/**\n * Create API headers for thread management\n */\nfunction createApiHeaders(userId: string, assistantId: string): HeadersInit {\n return {\n 'Content-Type': 'application/json',\n 'X-User-Id': userId,\n 'X-Assistant-Id': assistantId,\n }\n}\n\n/**\n * Create the thread list adapter for persistence\n */\nfunction createThreadListAdapter(\n baseUrl: string,\n userId: string,\n assistantId: string,\n): RemoteThreadListAdapter {\n const headers = createApiHeaders(userId, assistantId)\n\n return {\n // List all threads for this user\n async list() {\n try {\n const response = await fetch(`${baseUrl}/api/widget/threads`, {\n headers,\n })\n\n if (!response.ok) {\n console.error('[Threads] List failed:', response.status)\n return { threads: [] }\n }\n\n const data = await response.json()\n return { threads: data.threads || [] }\n } catch (error) {\n console.error('[Threads] List error:', error)\n return { threads: [] }\n }\n },\n\n // Fetch a single thread's details\n async fetch(remoteId: string) {\n const response = await fetch(\n `${baseUrl}/api/widget/threads/${remoteId}`,\n {\n headers,\n },\n )\n\n if (!response.ok) {\n throw new Error(`Failed to fetch thread: ${response.status}`)\n }\n\n const data = await response.json()\n return {\n remoteId: data.remoteId,\n status: data.status as 'regular' | 'archived',\n title: data.title,\n }\n },\n\n // Initialize a new thread\n async initialize(localId: string) {\n try {\n const response = await fetch(`${baseUrl}/api/widget/threads`, {\n method: 'POST',\n headers,\n body: JSON.stringify({ localId }),\n })\n\n if (!response.ok) {\n throw new Error(`Failed to create thread: ${response.status}`)\n }\n\n const data = await response.json()\n return { remoteId: data.remoteId, externalId: data.externalId }\n } catch (error) {\n console.error('[Threads] Initialize error:', error)\n throw error\n }\n },\n\n // Rename a thread\n async rename(remoteId: string, newTitle: string) {\n try {\n await fetch(`${baseUrl}/api/widget/threads/${remoteId}`, {\n method: 'PATCH',\n headers,\n body: JSON.stringify({ title: newTitle }),\n })\n } catch (error) {\n console.error('[Threads] Rename error:', error)\n }\n },\n\n // Archive a thread\n async archive(remoteId: string) {\n try {\n await fetch(`${baseUrl}/api/widget/threads/${remoteId}/archive`, {\n method: 'POST',\n headers,\n })\n } catch (error) {\n console.error('[Threads] Archive error:', error)\n }\n },\n\n // Unarchive a thread\n async unarchive(remoteId: string) {\n try {\n await fetch(`${baseUrl}/api/widget/threads/${remoteId}/unarchive`, {\n method: 'POST',\n headers,\n })\n } catch (error) {\n console.error('[Threads] Unarchive error:', error)\n }\n },\n\n // Delete a thread\n async delete(remoteId: string) {\n try {\n await fetch(`${baseUrl}/api/widget/threads/${remoteId}`, {\n method: 'DELETE',\n headers,\n })\n } catch (error) {\n console.error('[Threads] Delete error:', error)\n }\n },\n\n // Generate a title from messages\n async generateTitle(remoteId: string, messages: readonly unknown[]) {\n return createAssistantStream(async (controller) => {\n try {\n const response = await fetch(\n `${baseUrl}/api/widget/threads/${remoteId}/title`,\n {\n method: 'POST',\n headers,\n body: JSON.stringify({ messages }),\n },\n )\n\n if (!response.ok) {\n throw new Error(`Title generation failed: ${response.status}`)\n }\n\n const data = await response.json()\n controller.appendText(data.title)\n controller.close()\n } catch (error) {\n console.error('[Threads] Title generation error:', error)\n controller.appendText('New Chat')\n controller.close()\n }\n })\n },\n }\n}\n\n/**\n * Save messages to the backend\n */\nasync function saveMessages(\n baseUrl: string,\n userId: string,\n assistantId: string,\n threadId: string,\n messages: unknown[],\n) {\n try {\n const response = await fetch(\n `${baseUrl}/api/widget/threads/${threadId}/messages/sync`,\n {\n method: 'POST',\n headers: createApiHeaders(userId, assistantId),\n body: JSON.stringify({ messages }),\n },\n )\n\n if (!response.ok) {\n console.error('[Messages] Sync failed:', response.status)\n }\n } catch (error) {\n console.error('[Messages] Sync error:', error)\n }\n}\n\n/**\n * Create a history adapter for a specific thread\n */\nfunction createHistoryAdapter(\n baseUrl: string,\n userId: string,\n assistantId: string,\n remoteId: string | undefined,\n): ThreadHistoryAdapter {\n const headers = createApiHeaders(userId, assistantId)\n\n return {\n async load() {\n console.log('[History] load() called, remoteId:', remoteId)\n if (!remoteId) return { headId: null, messages: [] }\n\n try {\n const response = await fetch(\n `${baseUrl}/api/widget/threads/${remoteId}/messages`,\n { headers },\n )\n\n if (!response.ok) {\n console.error('[History] Failed to load messages:', response.status)\n return { headId: null, messages: [] }\n }\n\n const { messages } = await response.json()\n console.log('[History] Loaded messages:', messages.length)\n\n // Convert to format expected by useAISDKRuntime\n const formattedMessages = messages.map(\n (\n m: {\n id: string\n role: string\n content: unknown[]\n metadata?: { context?: Array<{ id: string; type: string; title: string }> }\n createdAt: string\n },\n index: number,\n ) => ({\n parentId: index > 0 ? messages[index - 1].id : null,\n message: {\n id: m.id,\n role: m.role as 'user' | 'assistant' | 'system',\n parts: m.content,\n metadata: m.metadata,\n createdAt: new Date(m.createdAt),\n },\n }),\n )\n\n console.log('[History] Formatted messages:', formattedMessages.length)\n\n return {\n headId: messages.length > 0 ? messages[messages.length - 1].id : null,\n messages: formattedMessages,\n }\n } catch (error) {\n console.error('[History] Load error:', error)\n return { headId: null, messages: [] }\n }\n },\n\n async append(message) {\n console.log('[History] append() called')\n // Messages are saved via onFinish, so this is a no-op\n },\n\n // Required by useExternalHistory in @assistant-ui/react-ai-sdk\n withFormat(_formatAdapter) {\n console.log('[History.withFormat] called, remoteId:', remoteId)\n return {\n async load() {\n if (!remoteId) return { headId: null, messages: [] }\n\n try {\n const response = await fetch(\n `${baseUrl}/api/widget/threads/${remoteId}/messages`,\n { headers },\n )\n\n if (!response.ok) {\n console.error('[History.withFormat] Failed:', response.status)\n return { headId: null, messages: [] }\n }\n\n const { messages } = await response.json()\n console.log('[History.withFormat] Loaded:', messages.length)\n\n const formattedMessages = messages.map(\n (\n m: {\n id: string\n role: string\n content: unknown[]\n metadata?: { context?: Array<{ id: string; type: string; title: string }> }\n createdAt: string\n },\n index: number,\n ) => ({\n parentId: index > 0 ? messages[index - 1].id : null,\n message: {\n id: m.id,\n role: m.role as 'user' | 'assistant' | 'system',\n parts: m.content,\n metadata: m.metadata,\n createdAt: new Date(m.createdAt),\n },\n }),\n )\n\n return {\n headId:\n messages.length > 0 ? messages[messages.length - 1].id : null,\n messages: formattedMessages,\n }\n } catch (error) {\n console.error('[History.withFormat] Error:', error)\n return { headId: null, messages: [] }\n }\n },\n\n async append(_item) {\n // Messages are saved via onFinish\n },\n }\n },\n }\n}\n\n/**\n * Inner provider that sets up the AssistantRuntimeProvider with thread persistence\n */\nfunction AssistantRuntimeWrapper({\n config,\n userId,\n children,\n}: {\n config: WidgetConfig\n userId: string\n children: ReactNode\n}) {\n const baseUrl = config.baseUrl || process.env.WIDGET_API_URL || 'http://localhost:3000'\n // The apiKey IS the assistantId\n const assistantId = config.apiKey\n\n // Get message context for passing context to transport\n const { consumeContext, clearContext } = useMessageContext()\n\n // Use a ref to access the current context in the transport\n const contextRef = useRef(consumeContext)\n contextRef.current = consumeContext\n\n // Ref to clear context after sending\n const clearContextRef = useRef(clearContext)\n clearContextRef.current = clearContext\n\n // Create the thread list adapter\n const threadListAdapter = useMemo(\n () => createThreadListAdapter(baseUrl, userId, assistantId),\n [baseUrl, userId, assistantId],\n )\n\n // Create the remote thread list runtime\n const runtime = useRemoteThreadListRuntime({\n runtimeHook: function useChatThreadRuntime() {\n // Get current thread ID from assistant state\n const threadId = useAssistantState(\n ({ threadListItem }) => threadListItem?.remoteId ?? undefined,\n )\n\n // Use a ref to always get the latest threadId in callbacks\n const threadIdRef = useRef(threadId)\n threadIdRef.current = threadId\n\n // Create history adapter for this specific thread\n const history = useMemo(\n () => createHistoryAdapter(baseUrl, userId, assistantId, threadId),\n [threadId],\n )\n\n // Create a transport using AssistantChatTransport with dynamic body\n const transport = useMemo(() => {\n console.log('[Widget] Creating transport for threadId:', threadId)\n return new AssistantChatTransport({\n api: `${baseUrl}/api/widget/chat`,\n headers: {\n 'X-User-Id': userId,\n 'X-Assistant-Id': assistantId,\n },\n // Use body as a function to dynamically include context\n body: () => {\n // Get current context and extract IDs\n const currentContext = contextRef.current()\n const contextIds = currentContext.map((item) => item.id)\n const contextMetadata = currentContext.map((item) => ({\n id: item.id,\n type: item.type,\n title: item.title,\n }))\n\n console.log('[Widget] Transport body - contextIds:', contextIds.length, 'threadId:', threadId)\n\n // Clear context after getting it (will be sent with this request)\n if (contextIds.length > 0) {\n // Use setTimeout to clear after the body function returns\n setTimeout(() => clearContextRef.current(), 0)\n }\n\n return {\n assistantId,\n threadId,\n ...(contextIds.length > 0 && { contextIds, contextMetadata }),\n }\n },\n })\n }, [threadId])\n\n // Use useChatRuntime which properly integrates with AI SDK\n const runtime = useChatRuntime({\n transport,\n adapters: { history },\n onFinish: ({ message, messages }) => {\n // Get the latest threadId from ref\n const currentThreadId = threadIdRef.current\n\n console.log(\n '[Widget] onFinish - threadId:',\n currentThreadId,\n 'messages:',\n messages.length,\n )\n\n // Save all messages to the backend when assistant finishes\n if (currentThreadId && messages.length > 0) {\n saveMessages(\n baseUrl,\n userId,\n assistantId,\n currentThreadId,\n messages,\n )\n }\n },\n })\n\n return runtime\n },\n adapter: threadListAdapter,\n })\n\n return (\n <AssistantRuntimeProvider runtime={runtime}>\n <DetailedAnswerToolUI />\n {children}\n </AssistantRuntimeProvider>\n )\n}\n\nexport function WidgetProvider({\n config,\n children,\n autoInitialize = true,\n}: WidgetProviderProps) {\n // Generate or use provided userId\n const [userId] = useState(() => config.userId || generateUserId())\n\n const [client] = useState(() => new WidgetClient(config))\n const [state, setState] = useState<WidgetState>(client.getState())\n\n useEffect(() => {\n // Subscribe to state changes\n const unsubscribe = client.on('state:change', ({ current }) => {\n setState(current)\n })\n\n // Auto-initialize if enabled\n if (autoInitialize && state.status === 'idle') {\n client.initialize().catch(console.error)\n }\n\n return () => {\n unsubscribe()\n client.destroy()\n }\n }, [client, autoInitialize, state.status])\n\n const contextValue = useMemo(\n () => ({ client, state, userId }),\n [client, state, userId],\n )\n\n return (\n <CacheProvider value={widgetCache}>\n <ThemeProvider theme={theme}>\n <WidgetContext.Provider value={contextValue}>\n <MessageContextProvider>\n <AssistantRuntimeWrapper config={config} userId={userId}>\n {children}\n </AssistantRuntimeWrapper>\n </MessageContextProvider>\n </WidgetContext.Provider>\n </ThemeProvider>\n </CacheProvider>\n )\n}\n","import { useContext, useCallback } from 'react';\nimport { WidgetContext } from '../provider';\nimport type { Message } from '../../core/types';\n\nexport function useWidget() {\n const context = useContext(WidgetContext);\n\n if (!context) {\n throw new Error('useWidget must be used within a WidgetProvider');\n }\n\n const { client, state } = context;\n\n const initialize = useCallback(async () => {\n if (state.status === 'idle') {\n await client.initialize();\n }\n }, [client, state.status]);\n\n const sendMessage = useCallback(\n async (content: string): Promise<Message> => {\n return client.sendMessage(content);\n },\n [client]\n );\n\n return {\n state,\n client,\n isIdle: state.status === 'idle',\n isInitializing: state.status === 'initializing',\n isReady: state.status === 'ready',\n isLoading: state.status === 'loading',\n isError: state.status === 'error',\n messages: state.status === 'ready' ? state.session.messages : [],\n error: state.status === 'error' ? state.error : null,\n initialize,\n sendMessage,\n };\n}\n\n","import { useState, useCallback } from 'react';\nimport { useWidget } from './useWidget';\n\nexport function useChat() {\n const { sendMessage, messages, isLoading, isReady } = useWidget();\n const [input, setInput] = useState('');\n\n const handleSubmit = useCallback(\n async (e?: React.FormEvent) => {\n e?.preventDefault();\n \n if (!input.trim() || !isReady || isLoading) {\n return;\n }\n\n const message = input.trim();\n setInput('');\n\n try {\n await sendMessage(message);\n } catch (error) {\n console.error('Failed to send message:', error);\n // Restore input on error\n setInput(message);\n }\n },\n [input, isReady, isLoading, sendMessage]\n );\n\n return {\n input,\n setInput,\n handleSubmit,\n messages,\n isLoading,\n canSubmit: isReady && !isLoading && input.trim().length > 0,\n };\n}\n\n","import React from \"react\";\nimport {\n ThreadListPrimitive,\n ThreadListItemPrimitive,\n} from \"@assistant-ui/react\";\nimport { MessageSquareIcon } from \"lucide-react\";\nimport { cn } from \"../utils\";\nimport { Text } from \"../styles\";\n\ninterface ChatHistoryPopoverProps {\n onSelectThread?: () => void;\n}\n\nconst ThreadListItem: React.FC = () => {\n return (\n <ThreadListItemPrimitive.Root className=\"group relative flex items-center gap-2 px-2 py-1.5 hover:bg-muted/50 data-[active]:bg-muted cursor-pointer transition-colors rounded-sm\">\n <ThreadListItemPrimitive.Trigger className=\"flex flex-1 items-center gap-2 min-w-0\">\n <span className=\"truncate text-sm text-foreground\">\n <ThreadListItemPrimitive.Title fallback=\"New Chat\" />\n </span>\n </ThreadListItemPrimitive.Trigger>\n </ThreadListItemPrimitive.Root>\n );\n};\n\nexport const ChatHistoryPopover: React.FC<ChatHistoryPopoverProps> = ({\n onSelectThread,\n}) => {\n const handleThreadSelect = () => {\n onSelectThread?.();\n };\n\n return (\n <div className=\"flex flex-col\" onClick={handleThreadSelect}>\n {/* Static heading */}\n <div className=\"px-2 py-1.5\">\n <Text size=\"xs\" style={{ color: \"hsl(var(--muted-foreground))\" }}>\n Previous 7 days\n </Text>\n </div>\n\n {/* Thread List - Only show regular (non-archived) threads */}\n <div className=\"max-h-[300px] overflow-y-auto\">\n <ThreadListPrimitive.Items\n components={{\n ThreadListItem: ThreadListItem,\n }}\n />\n </div>\n </div>\n );\n};\n","import * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from \"../../utils\"\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"bg-background 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 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 outline-none sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","import * as React from \"react\"\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\"\n\nimport { cn } from \"../../utils\"\n\nfunction Avatar({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root>) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n className={cn(\n \"relative flex size-8 shrink-0 overflow-hidden rounded-full\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarImage({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn(\"aspect-square size-full\", className)}\n {...props}\n />\n )\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n \"bg-muted flex size-full items-center justify-center rounded-full\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Avatar, AvatarImage, AvatarFallback }\n","\"use client\";\n\nimport { PropsWithChildren, useEffect, useState, type FC } from \"react\";\nimport { XIcon, PaperclipIcon, FileText } from \"lucide-react\";\nimport {\n AttachmentPrimitive,\n ComposerPrimitive,\n MessagePrimitive,\n useAssistantState,\n useAssistantApi,\n} from \"@assistant-ui/react\";\nimport { useShallow } from \"zustand/shallow\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../ui/tooltip\";\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogTrigger,\n} from \"../ui/dialog\";\nimport { Avatar, AvatarImage, AvatarFallback } from \"../ui/avatar\";\nimport { TooltipIconButton } from \"./tooltip-icon-button\";\nimport { cn } from \"../../utils\";\n\nconst useFileSrc = (file: File | undefined) => {\n const [src, setSrc] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n if (!file) {\n setSrc(undefined);\n return;\n }\n\n const objectUrl = URL.createObjectURL(file);\n setSrc(objectUrl);\n\n return () => {\n URL.revokeObjectURL(objectUrl);\n };\n }, [file]);\n\n return src;\n};\n\nconst useAttachmentSrc = () => {\n const { file, src } = useAssistantState(\n useShallow(({ attachment }): { file?: File; src?: string } => {\n if (attachment.type !== \"image\") return {};\n if (attachment.file) return { file: attachment.file };\n const src = attachment.content?.filter((c) => c.type === \"image\")[0]\n ?.image;\n if (!src) return {};\n return { src };\n })\n );\n\n return useFileSrc(file) ?? src;\n};\n\ntype AttachmentPreviewProps = {\n src: string;\n};\n\nconst AttachmentPreview: FC<AttachmentPreviewProps> = ({ src }) => {\n return (\n <img\n src={src}\n alt=\"Image Preview\"\n className=\"aui-attachment-preview-image-loaded block h-auto max-h-[80vh] w-auto max-w-full object-contain\"\n />\n );\n};\n\nconst AttachmentPreviewDialog: FC<PropsWithChildren> = ({ children }) => {\n const src = useAttachmentSrc();\n\n if (!src) return children;\n\n return (\n <Dialog>\n <DialogTrigger\n className=\"aui-attachment-preview-trigger cursor-pointer transition-colors hover:bg-accent/50\"\n asChild\n >\n {children}\n </DialogTrigger>\n <DialogContent className=\"aui-attachment-preview-dialog-content p-2 sm:max-w-3xl [&>button]:rounded-full [&>button]:bg-foreground/60 [&>button]:p-1 [&>button]:opacity-100 [&>button]:ring-0! [&_svg]:text-background [&>button]:hover:[&_svg]:text-destructive\">\n <DialogTitle className=\"aui-sr-only sr-only\">\n Image Attachment Preview\n </DialogTitle>\n <div className=\"aui-attachment-preview relative mx-auto flex max-h-[80dvh] w-full items-center justify-center overflow-hidden bg-background\">\n <AttachmentPreview src={src} />\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n\nconst AttachmentThumb: FC = () => {\n const isImage = useAssistantState(\n ({ attachment }) => attachment.type === \"image\"\n );\n const src = useAttachmentSrc();\n\n return (\n <Avatar className=\"aui-attachment-tile-avatar h-full w-full rounded-none\">\n <AvatarImage\n src={src}\n alt=\"Attachment preview\"\n className=\"aui-attachment-tile-image object-cover\"\n />\n <AvatarFallback delayMs={isImage ? 200 : 0}>\n <FileText className=\"aui-attachment-tile-fallback-icon size-8 text-muted-foreground\" />\n </AvatarFallback>\n </Avatar>\n );\n};\n\nconst AttachmentUI: FC = () => {\n const api = useAssistantApi();\n const isComposer = api.attachment.source === \"composer\";\n\n const isImage = useAssistantState(\n ({ attachment }) => attachment.type === \"image\"\n );\n const typeLabel = useAssistantState(({ attachment }) => {\n const type = attachment.type;\n switch (type) {\n case \"image\":\n return \"Image\";\n case \"document\":\n return \"Document\";\n case \"file\":\n return \"File\";\n default:\n return \"File\";\n }\n });\n\n return (\n <Tooltip>\n <AttachmentPrimitive.Root\n className={cn(\n \"aui-attachment-root relative\",\n isImage &&\n \"aui-attachment-root-composer only:[&>#attachment-tile]:size-24\"\n )}\n >\n <AttachmentPreviewDialog>\n <TooltipTrigger asChild>\n <div\n className={cn(\n \"aui-attachment-tile size-14 cursor-pointer overflow-hidden rounded-[14px] border bg-muted transition-opacity hover:opacity-75\",\n isComposer &&\n \"aui-attachment-tile-composer border-foreground/20\"\n )}\n role=\"button\"\n id=\"attachment-tile\"\n aria-label={`${typeLabel} attachment`}\n >\n <AttachmentThumb />\n </div>\n </TooltipTrigger>\n </AttachmentPreviewDialog>\n {isComposer && <AttachmentRemove />}\n </AttachmentPrimitive.Root>\n <TooltipContent side=\"top\">\n <AttachmentPrimitive.Name />\n </TooltipContent>\n </Tooltip>\n );\n};\n\nconst AttachmentRemove: FC = () => {\n return (\n <AttachmentPrimitive.Remove asChild>\n <TooltipIconButton\n tooltip=\"Remove file\"\n className=\"aui-attachment-tile-remove absolute top-1.5 right-1.5 size-3.5 rounded-full bg-white text-muted-foreground opacity-100 shadow-sm hover:bg-white! [&_svg]:text-black hover:[&_svg]:text-destructive\"\n side=\"top\"\n >\n <XIcon className=\"aui-attachment-remove-icon size-3 dark:stroke-[2.5px]\" />\n </TooltipIconButton>\n </AttachmentPrimitive.Remove>\n );\n};\n\nexport const UserMessageAttachments: FC = () => {\n return (\n <div className=\"aui-user-message-attachments-end col-span-full col-start-1 row-start-1 flex w-full flex-row justify-end gap-2\">\n <MessagePrimitive.Attachments components={{ Attachment: AttachmentUI }} />\n </div>\n );\n};\n\nexport const ComposerAttachments: FC = () => {\n return (\n <div className=\"aui-composer-attachments mb-2 flex w-full flex-row items-center gap-2 overflow-x-auto px-1.5 pt-0.5 pb-1 empty:hidden\">\n <ComposerPrimitive.Attachments\n components={{ Attachment: AttachmentUI }}\n />\n </div>\n );\n};\n\nexport const ComposerAddAttachment: FC = () => {\n return (\n <ComposerPrimitive.AddAttachment asChild>\n <TooltipIconButton\n tooltip=\"Add Attachment\"\n side=\"bottom\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"aui-composer-add-attachment size-[34px] rounded-full p-1 font-semibold text-xs hover:bg-muted-foreground/15 dark:border-muted-foreground/15 dark:hover:bg-muted-foreground/30\"\n aria-label=\"Add Attachment\"\n >\n <PaperclipIcon className=\"aui-attachment-add-icon size-5 stroke-[1.5px]\" />\n </TooltipIconButton>\n </ComposerPrimitive.AddAttachment>\n );\n};\n","\"use client\";\n\nimport \"@assistant-ui/react-markdown/styles/dot.css\";\n\nimport {\n type CodeHeaderProps,\n MarkdownTextPrimitive,\n unstable_memoizeMarkdownComponents as memoizeMarkdownComponents,\n useIsMarkdownCodeBlock,\n} from \"@assistant-ui/react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport { type FC, memo, useState } from \"react\";\nimport { CheckIcon, CopyIcon } from \"lucide-react\";\n\nimport { TooltipIconButton } from \"./tooltip-icon-button\";\nimport { cn } from \"../../utils\";\n\nconst MarkdownTextImpl = () => {\n return (\n <MarkdownTextPrimitive\n remarkPlugins={[remarkGfm]}\n className=\"aui-md\"\n components={defaultComponents}\n />\n );\n};\n\nexport const MarkdownText = memo(MarkdownTextImpl);\n\nconst CodeHeader: FC<CodeHeaderProps> = ({ language, code }) => {\n const { isCopied, copyToClipboard } = useCopyToClipboard();\n const onCopy = () => {\n if (!code || isCopied) return;\n copyToClipboard(code);\n };\n\n return (\n <div className=\"aui-code-header-root mt-4 flex items-center justify-between gap-4 rounded-t-lg bg-muted-foreground/15 px-4 py-2 font-semibold text-foreground text-sm dark:bg-muted-foreground/20\">\n <span className=\"aui-code-header-language lowercase [&>span]:text-xs\">\n {language}\n </span>\n <TooltipIconButton tooltip=\"Copy\" onClick={onCopy}>\n {!isCopied && <CopyIcon />}\n {isCopied && <CheckIcon />}\n </TooltipIconButton>\n </div>\n );\n};\n\nconst useCopyToClipboard = ({\n copiedDuration = 3000,\n}: {\n copiedDuration?: number;\n} = {}) => {\n const [isCopied, setIsCopied] = useState<boolean>(false);\n\n const copyToClipboard = (value: string) => {\n if (!value) return;\n\n navigator.clipboard.writeText(value).then(() => {\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), copiedDuration);\n });\n };\n\n return { isCopied, copyToClipboard };\n};\n\nconst defaultComponents = memoizeMarkdownComponents({\n h1: ({ className, ...props }) => (\n <h1\n className={cn(\n \"aui-md-h1 mb-8 scroll-m-20 font-extrabold text-4xl tracking-tight last:mb-0\",\n className,\n )}\n {...props}\n />\n ),\n h2: ({ className, ...props }) => (\n <h2\n className={cn(\n \"aui-md-h2 mt-8 mb-4 scroll-m-20 font-semibold text-3xl tracking-tight first:mt-0 last:mb-0\",\n className,\n )}\n {...props}\n />\n ),\n h3: ({ className, ...props }) => (\n <h3\n className={cn(\n \"aui-md-h3 mt-6 mb-4 scroll-m-20 font-semibold text-2xl tracking-tight first:mt-0 last:mb-0\",\n className,\n )}\n {...props}\n />\n ),\n h4: ({ className, ...props }) => (\n <h4\n className={cn(\n \"aui-md-h4 mt-6 mb-4 scroll-m-20 font-semibold text-xl tracking-tight first:mt-0 last:mb-0\",\n className,\n )}\n {...props}\n />\n ),\n h5: ({ className, ...props }) => (\n <h5\n className={cn(\n \"aui-md-h5 my-4 font-semibold text-lg first:mt-0 last:mb-0\",\n className,\n )}\n {...props}\n />\n ),\n h6: ({ className, ...props }) => (\n <h6\n className={cn(\n \"aui-md-h6 my-4 font-semibold first:mt-0 last:mb-0\",\n className,\n )}\n {...props}\n />\n ),\n p: ({ className, ...props }) => (\n <p\n className={cn(\n \"aui-md-p mt-5 mb-5 leading-7 first:mt-0 last:mb-0\",\n className,\n )}\n {...props}\n />\n ),\n a: ({ className, ...props }) => (\n <a\n className={cn(\n \"aui-md-a font-medium text-primary underline underline-offset-4\",\n className,\n )}\n {...props}\n />\n ),\n blockquote: ({ className, ...props }) => (\n <blockquote\n className={cn(\"aui-md-blockquote border-l-2 pl-6 italic\", className)}\n {...props}\n />\n ),\n ul: ({ className, ...props }) => (\n <ul\n className={cn(\"aui-md-ul my-5 ml-6 list-disc [&>li]:mt-2\", className)}\n {...props}\n />\n ),\n ol: ({ className, ...props }) => (\n <ol\n className={cn(\"aui-md-ol my-5 ml-6 list-decimal [&>li]:mt-2\", className)}\n {...props}\n />\n ),\n hr: ({ className, ...props }) => (\n <hr className={cn(\"aui-md-hr my-5 border-b\", className)} {...props} />\n ),\n table: ({ className, ...props }) => (\n <table\n className={cn(\n \"aui-md-table my-5 w-full border-separate border-spacing-0 overflow-y-auto\",\n className,\n )}\n {...props}\n />\n ),\n th: ({ className, ...props }) => (\n <th\n className={cn(\n \"aui-md-th bg-muted px-4 py-2 text-left font-bold first:rounded-tl-lg last:rounded-tr-lg [[align=center]]:text-center [[align=right]]:text-right\",\n className,\n )}\n {...props}\n />\n ),\n td: ({ className, ...props }) => (\n <td\n className={cn(\n \"aui-md-td border-b border-l px-4 py-2 text-left last:border-r [[align=center]]:text-center [[align=right]]:text-right\",\n className,\n )}\n {...props}\n />\n ),\n tr: ({ className, ...props }) => (\n <tr\n className={cn(\n \"aui-md-tr m-0 border-b p-0 first:border-t [&:last-child>td:first-child]:rounded-bl-lg [&:last-child>td:last-child]:rounded-br-lg\",\n className,\n )}\n {...props}\n />\n ),\n sup: ({ className, ...props }) => (\n <sup\n className={cn(\"aui-md-sup [&>a]:text-xs [&>a]:no-underline\", className)}\n {...props}\n />\n ),\n pre: ({ className, ...props }) => (\n <pre\n className={cn(\n \"aui-md-pre overflow-x-auto rounded-t-none! rounded-b-lg bg-black p-4 text-white\",\n className,\n )}\n {...props}\n />\n ),\n code: function Code({ className, ...props }) {\n const isCodeBlock = useIsMarkdownCodeBlock();\n return (\n <code\n className={cn(\n !isCodeBlock &&\n \"aui-md-inline-code rounded border bg-muted font-semibold\",\n className,\n )}\n {...props}\n />\n );\n },\n CodeHeader,\n});\n","import type { ToolCallMessagePartComponent } from \"@assistant-ui/react\";\nimport { ToolCard } from \"./tool-card\";\nimport { cn } from \"../../utils\";\n\nexport const ToolFallback: ToolCallMessagePartComponent = ({\n toolName,\n argsText,\n result,\n status,\n}) => {\n const isStreaming = status?.type === \"running\";\n const isError = status?.type === \"incomplete\";\n const isCancelled =\n status?.type === \"incomplete\" && status.reason === \"cancelled\";\n\n const cancelledReason =\n isCancelled && status.error\n ? typeof status.error === \"string\"\n ? status.error\n : JSON.stringify(status.error)\n : null;\n\n // Build title with appropriate prefix\n const titlePrefix = isCancelled\n ? \"Cancelled: \"\n : isStreaming\n ? \"Running: \"\n : \"\";\n\n return (\n <ToolCard\n title={`${titlePrefix}${toolName}`}\n isStreaming={isStreaming}\n isError={isError}\n >\n <div className=\"flex flex-col gap-2 text-white\">\n {/* Cancelled reason */}\n {cancelledReason && (\n <div>\n <p className=\"font-semibold text-white/70 mb-0.5\">\n Cancelled reason:\n </p>\n <p className=\"text-white/60\">{cancelledReason}</p>\n </div>\n )}\n\n {/* Arguments */}\n <div className={cn(isCancelled && \"opacity-60\")}>\n <p className=\"font-semibold text-white/70 mb-0.5\">Arguments:</p>\n <pre className=\"whitespace-pre-wrap bg-black/20 p-1.5 rounded text-white/80\">\n {argsText}\n </pre>\n </div>\n\n {/* Result */}\n {!isCancelled && result !== undefined && (\n <div className=\"border-t border-white/10 pt-2\">\n <p className=\"font-semibold text-white/70 mb-0.5\">Result:</p>\n <pre className=\"whitespace-pre-wrap bg-black/20 p-1.5 rounded text-white/80\">\n {typeof result === \"string\"\n ? result\n : JSON.stringify(result, null, 2)}\n </pre>\n </div>\n )}\n </div>\n </ToolCard>\n );\n};\n","import { XIcon } from \"lucide-react\";\nimport type { FC } from \"react\";\nimport { cn } from \"../../utils\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../ui/tooltip\";\n\ninterface ContextPillProps {\n label: string;\n onRemove?: () => void;\n /** When true, hides the remove button (for historical messages) */\n readonly?: boolean;\n className?: string;\n}\n\nexport const ContextPill: FC<ContextPillProps> = ({\n label,\n onRemove,\n readonly = false,\n className,\n}) => {\n const showRemoveButton = !readonly && onRemove;\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <div\n className={cn(\n \"group flex items-center gap-1 rounded-md border border-muted-foreground py-1 px-1.5 text-xs\",\n \"max-w-[200px] cursor-default\",\n className\n )}\n >\n {showRemoveButton && (\n <button\n onClick={onRemove}\n aria-label={`Remove ${label}`}\n className=\"shrink-0 hover:text-destructive transition-colors\"\n >\n <XIcon className=\"size-3\" />\n </button>\n )}\n <span className=\"truncate\">{label}</span>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"top\" sideOffset={4}>\n {label}\n </TooltipContent>\n </Tooltip>\n );\n};\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cn } from \"../../utils\";\nimport { theme } from \"../../styles/theme\";\n\nfunction Popover({\n modal = false,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root modal={modal} {...props} />;\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger {...props} />;\n}\n\nfunction PopoverContent({\n className,\n align = \"start\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-[10000] w-72 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 style={{\n zIndex: 10000,\n borderColor: theme.colors.border,\n ...props.style,\n }}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n}\n\nexport { Popover, PopoverTrigger, PopoverContent };\n\n","import type { FC } from 'react'\nimport { useEffect, useRef } from 'react'\nimport {\n FileIcon,\n FileTextIcon,\n VideoIcon,\n LinkIcon,\n LoaderIcon,\n} from 'lucide-react'\nimport { Popover, PopoverContent, PopoverTrigger } from '../ui/popover'\nimport { cn } from '../../utils'\nimport type { ContextItem, ContextCategory } from '../../hooks/useContextMention'\n\n/**\n * Icon mapping for context item types\n */\nconst TYPE_ICONS: Record<string, FC<{ className?: string }>> = {\n attachment: FileIcon,\n description: FileTextIcon,\n caption: VideoIcon,\n link: LinkIcon,\n}\n\ninterface ContextMentionPopoverProps {\n isOpen: boolean\n onOpenChange: (open: boolean) => void\n categories: ContextCategory[]\n isLoading: boolean\n activeIndex: number\n flattenedItems: ContextItem[]\n onSelectItem: (item: ContextItem) => void\n onActiveIndexChange: (index: number) => void\n getCategoryLabel: (type: string) => string\n trigger: React.ReactNode\n searchTerm: string\n}\n\nexport const ContextMentionPopover: FC<ContextMentionPopoverProps> = ({\n isOpen,\n onOpenChange,\n categories,\n isLoading,\n activeIndex,\n flattenedItems,\n onSelectItem,\n onActiveIndexChange,\n getCategoryLabel,\n trigger,\n searchTerm,\n}) => {\n const activeItemRef = useRef<HTMLButtonElement>(null)\n\n // Scroll active item into view\n useEffect(() => {\n if (isOpen && activeItemRef.current) {\n activeItemRef.current.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n })\n }\n }, [activeIndex, isOpen])\n\n // Calculate the flattened index for an item\n const getFlattenedIndex = (categoryIndex: number, itemIndex: number) => {\n let index = 0\n for (let i = 0; i < categoryIndex; i++) {\n index += categories[i].items.length\n }\n return index + itemIndex\n }\n\n const hasNoResults = !isLoading && flattenedItems.length === 0\n\n return (\n <Popover open={isOpen} onOpenChange={onOpenChange} modal={false}>\n <PopoverTrigger asChild>{trigger}</PopoverTrigger>\n <PopoverContent\n className=\"w-72 max-h-80 overflow-y-auto p-0\"\n align=\"start\"\n side=\"top\"\n sideOffset={8}\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <div className=\"flex flex-col\">\n {/* Header */}\n <div className=\"sticky top-0 z-10 border-b border-border bg-popover px-3 py-2\">\n <p className=\"text-xs font-medium text-muted-foreground\">\n {searchTerm\n ? `Searching for \"${searchTerm}\"`\n : 'Select context to focus on'}\n </p>\n </div>\n\n {/* Loading State */}\n {isLoading && (\n <div className=\"flex items-center justify-center py-8\">\n <LoaderIcon className=\"size-5 animate-spin text-muted-foreground\" />\n </div>\n )}\n\n {/* Empty State */}\n {hasNoResults && (\n <div className=\"px-3 py-8 text-center text-sm text-muted-foreground\">\n No context items found\n {searchTerm && (\n <span className=\"block text-xs mt-1\">\n Try a different search term\n </span>\n )}\n </div>\n )}\n\n {/* Categories */}\n {!isLoading &&\n categories.map((category, categoryIndex) => {\n if (category.items.length === 0) return null\n\n const Icon = TYPE_ICONS[category.type] || FileIcon\n\n return (\n <div key={category.type} className=\"py-1\">\n {/* Category Header */}\n <div className=\"flex items-center gap-2 px-3 py-1.5\">\n <Icon className=\"size-3.5 text-muted-foreground\" />\n <span className=\"text-xs font-medium text-muted-foreground\">\n {getCategoryLabel(category.type)}\n </span>\n <span className=\"text-xs text-muted-foreground/60\">\n ({category.items.length})\n </span>\n </div>\n\n {/* Category Items */}\n <div className=\"flex flex-col\">\n {category.items.map((item, itemIndex) => {\n const flatIndex = getFlattenedIndex(\n categoryIndex,\n itemIndex,\n )\n const isActive = flatIndex === activeIndex\n\n return (\n <button\n key={item.id}\n ref={isActive ? activeItemRef : null}\n type=\"button\"\n className={cn(\n 'flex flex-col items-start px-3 py-2 text-left text-sm transition-colors',\n 'hover:bg-accent/10',\n isActive && 'bg-accent/20',\n )}\n onClick={() => onSelectItem(item)}\n onMouseEnter={() => onActiveIndexChange(flatIndex)}\n >\n <span className=\"truncate w-full font-medium text-foreground\">\n {item.title}\n </span>\n {(item.lessonTitle || item.chapterTitle) && (\n <span className=\"truncate w-full text-xs text-muted-foreground\">\n {item.chapterTitle && item.lessonTitle\n ? `${item.chapterTitle} > ${item.lessonTitle}`\n : item.lessonTitle || item.chapterTitle}\n </span>\n )}\n </button>\n )\n })}\n </div>\n </div>\n )\n })}\n </div>\n </PopoverContent>\n </Popover>\n )\n}\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n type KeyboardEvent,\n} from \"react\";\nimport { useComposerRuntime } from \"@assistant-ui/react\";\nimport { cn } from \"../../utils\";\n\n// SVG icons for different context types (lucide icons as SVG strings)\nconst TYPE_ICON_SVGS: Record<string, string> = {\n attachment: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\"/><path d=\"M14 2v4a2 2 0 0 0 2 2h4\"/></svg>',\n description: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\"/><path d=\"M14 2v4a2 2 0 0 0 2 2h4\"/><path d=\"M10 9H8\"/><path d=\"M16 13H8\"/><path d=\"M16 17H8\"/></svg>',\n caption: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5\"/><rect x=\"2\" y=\"6\" width=\"14\" height=\"12\" rx=\"2\"/></svg>',\n link: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"/><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"/></svg>',\n};\n\n/**\n * Get SVG icon string for a context type\n */\nfunction getTypeIconSvg(type: string): string {\n return TYPE_ICON_SVGS[type] || TYPE_ICON_SVGS.attachment;\n}\n\nexport interface InlineMention {\n id: string;\n title: string;\n icon?: string;\n type?: 'attachment' | 'description' | 'caption' | 'link';\n}\n\nexport interface MentionComposerInputRef {\n focus: () => void;\n getValue: () => string;\n insertMention: (mention: InlineMention) => void;\n getInlineMentions: () => InlineMention[];\n}\n\ninterface MentionComposerInputProps {\n placeholder?: string;\n className?: string;\n autoFocus?: boolean;\n onInput?: (e: { text: string; cursorPosition: number }) => void;\n onKeyDown?: (e: KeyboardEvent<HTMLDivElement>) => void;\n /** Called when a mention is removed via backspace */\n onMentionRemove?: (mentionId: string) => void;\n /** Called when @ is detected */\n onTriggerDetected?: (searchTerm: string, triggerStart: number) => void;\n /** Called when @ trigger is dismissed */\n onTriggerDismissed?: () => void;\n /** Called when Enter is pressed (without Shift) to submit the message */\n onSubmit?: () => void;\n}\n\n// Zero-width space for cursor positioning around mentions\nconst ZERO_WIDTH_SPACE = \"\\u200B\";\n\nexport const MentionComposerInput = forwardRef<\n MentionComposerInputRef,\n MentionComposerInputProps\n>(\n (\n {\n placeholder = \"Ask, search, or make anything...\",\n className,\n autoFocus = false,\n onInput,\n onKeyDown,\n onMentionRemove,\n onTriggerDetected,\n onTriggerDismissed,\n onSubmit,\n },\n ref\n ) => {\n const editorRef = useRef<HTMLDivElement>(null);\n const composerRuntime = useComposerRuntime();\n const [isEmpty, setIsEmpty] = useState(true);\n const [inlineMentions, setInlineMentions] = useState<InlineMention[]>([]);\n const triggerPositionRef = useRef<number | null>(null);\n\n // Get plain text from editor (excluding mention pill text, using placeholders)\n const getPlainText = useCallback(() => {\n const editor = editorRef.current;\n if (!editor) return \"\";\n\n let text = \"\";\n const walkNodes = (node: Node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n // Filter out zero-width spaces\n const nodeText = node.textContent || \"\";\n text += nodeText.replace(/\\u200B/g, \"\");\n } else if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n if (element.dataset.mentionId) {\n // For mentions, add a placeholder that includes the title\n const title = element.dataset.mentionTitle || \"\";\n text += `[${title}]`;\n } else if (element.tagName === \"BR\") {\n text += \"\\n\";\n } else {\n node.childNodes.forEach(walkNodes);\n }\n }\n };\n\n editor.childNodes.forEach(walkNodes);\n return text.trim();\n }, []);\n\n // Get cursor position relative to text content\n const getCursorPosition = useCallback(() => {\n const selection = window.getSelection();\n if (!selection || !selection.rangeCount) return 0;\n\n const range = selection.getRangeAt(0);\n const preCaretRange = range.cloneRange();\n preCaretRange.selectNodeContents(editorRef.current!);\n preCaretRange.setEnd(range.endContainer, range.endOffset);\n\n // Count characters up to cursor\n let position = 0;\n const walkNodes = (node: Node): boolean => {\n if (node === range.endContainer) {\n if (node.nodeType === Node.TEXT_NODE) {\n position += range.endOffset;\n }\n return true;\n }\n\n if (node.nodeType === Node.TEXT_NODE) {\n const text = (node.textContent || \"\").replace(/\\u200B/g, \"\");\n position += text.length;\n } else if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n if (element.dataset.mentionId) {\n // Mention counts as its title length in brackets\n const title = element.dataset.mentionTitle || \"\";\n position += title.length + 2; // +2 for []\n } else if (element.tagName === \"BR\") {\n position += 1;\n } else {\n for (const child of Array.from(node.childNodes)) {\n if (walkNodes(child)) return true;\n }\n }\n }\n return false;\n };\n\n if (editorRef.current) {\n for (const child of Array.from(editorRef.current.childNodes)) {\n if (walkNodes(child)) break;\n }\n }\n\n return position;\n }, []);\n\n // Sync text to composer runtime\n const syncToRuntime = useCallback(() => {\n const text = getPlainText();\n composerRuntime.setText(text);\n setIsEmpty(text.length === 0);\n }, [composerRuntime, getPlainText]);\n\n // Handle input changes\n const handleInput = useCallback(() => {\n syncToRuntime();\n\n const text = getPlainText();\n const cursorPos = getCursorPosition();\n\n onInput?.({ text, cursorPosition: cursorPos });\n\n // Detect @ trigger\n const editor = editorRef.current;\n if (!editor) return;\n\n // Get text content up to cursor for @ detection\n const selection = window.getSelection();\n if (!selection || !selection.rangeCount) return;\n\n const range = selection.getRangeAt(0);\n let textBeforeCursor = \"\";\n let charCount = 0;\n\n const walkForText = (node: Node): boolean => {\n if (node === range.endContainer) {\n if (node.nodeType === Node.TEXT_NODE) {\n textBeforeCursor += (node.textContent || \"\").slice(0, range.endOffset);\n }\n return true;\n }\n\n if (node.nodeType === Node.TEXT_NODE) {\n textBeforeCursor += node.textContent || \"\";\n charCount += (node.textContent || \"\").length;\n } else if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n if (element.dataset.mentionId) {\n textBeforeCursor += \" \"; // Treat mention as space for @ detection\n charCount += 1;\n } else {\n for (const child of Array.from(node.childNodes)) {\n if (walkForText(child)) return true;\n }\n }\n }\n return false;\n };\n\n for (const child of Array.from(editor.childNodes)) {\n if (walkForText(child)) break;\n }\n\n // Find last @ before cursor\n const lastAtIndex = textBeforeCursor.lastIndexOf(\"@\");\n\n if (lastAtIndex !== -1) {\n const charBeforeAt = lastAtIndex > 0 ? textBeforeCursor[lastAtIndex - 1] : \" \";\n if (charBeforeAt === \" \" || charBeforeAt === \"\\n\" || charBeforeAt === ZERO_WIDTH_SPACE || lastAtIndex === 0) {\n const searchText = textBeforeCursor.slice(lastAtIndex + 1);\n if (!searchText.includes(\" \")) {\n triggerPositionRef.current = lastAtIndex;\n onTriggerDetected?.(searchText, lastAtIndex);\n return;\n }\n }\n }\n\n // No valid trigger\n if (triggerPositionRef.current !== null) {\n triggerPositionRef.current = null;\n onTriggerDismissed?.();\n }\n }, [syncToRuntime, getPlainText, getCursorPosition, onInput, onTriggerDetected, onTriggerDismissed]);\n\n // Handle keydown for backspace (delete whole mentions) and Enter (submit)\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n // Handle Enter key to submit (without Shift for newline)\n if (e.key === \"Enter\" && !e.shiftKey) {\n // Check if the parent onKeyDown handler wants to handle this (e.g., for autocomplete)\n // If so, let it handle and don't submit\n if (onKeyDown) {\n // Pass to parent first - it will call preventDefault if handling\n onKeyDown(e);\n if (e.defaultPrevented) {\n return;\n }\n }\n \n // Submit the message\n e.preventDefault();\n const text = getPlainText();\n if (text.trim()) {\n onSubmit?.();\n }\n return;\n }\n\n if (e.key === \"Backspace\") {\n const selection = window.getSelection();\n if (!selection || !selection.rangeCount) return;\n\n const range = selection.getRangeAt(0);\n\n // Check if we're at the edge of a mention\n if (range.collapsed) {\n const container = range.startContainer;\n const offset = range.startOffset;\n\n // Check previous sibling if at start of text node\n if (container.nodeType === Node.TEXT_NODE && offset === 0) {\n let prevSibling = container.previousSibling;\n if (!prevSibling && container.parentElement !== editorRef.current) {\n prevSibling = container.parentElement?.previousSibling || null;\n }\n\n if (prevSibling && (prevSibling as HTMLElement).dataset?.mentionId) {\n e.preventDefault();\n const mentionId = (prevSibling as HTMLElement).dataset.mentionId!;\n prevSibling.parentNode?.removeChild(prevSibling);\n setInlineMentions((prev) => prev.filter((m) => m.id !== mentionId));\n onMentionRemove?.(mentionId);\n syncToRuntime();\n return;\n }\n }\n\n // Check if cursor is right after a mention element\n if (container.nodeType === Node.ELEMENT_NODE) {\n const element = container as HTMLElement;\n const childAtOffset = element.childNodes[offset - 1];\n if (childAtOffset && (childAtOffset as HTMLElement).dataset?.mentionId) {\n e.preventDefault();\n const mentionId = (childAtOffset as HTMLElement).dataset.mentionId!;\n childAtOffset.parentNode?.removeChild(childAtOffset);\n setInlineMentions((prev) => prev.filter((m) => m.id !== mentionId));\n onMentionRemove?.(mentionId);\n syncToRuntime();\n return;\n }\n }\n }\n }\n\n // Pass through to parent handler for other keys\n onKeyDown?.(e);\n },\n [onKeyDown, onMentionRemove, syncToRuntime, onSubmit, getPlainText]\n );\n\n // Insert a mention at the current cursor position\n const insertMention = useCallback(\n (mention: InlineMention) => {\n const editor = editorRef.current;\n if (!editor) return;\n\n const selection = window.getSelection();\n if (!selection || !selection.rangeCount) return;\n\n // Find and remove the @ trigger text\n const range = selection.getRangeAt(0);\n\n if (triggerPositionRef.current !== null) {\n // We need to find the @ and remove from there to cursor\n // Walk through nodes to find the @ position\n let currentPos = 0;\n let foundNode: Text | null = null;\n let foundOffset = 0;\n\n const findAtPosition = (node: Node): boolean => {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent || \"\";\n const targetPosInNode = triggerPositionRef.current! - currentPos;\n\n if (targetPosInNode >= 0 && targetPosInNode < text.length) {\n foundNode = node as Text;\n foundOffset = targetPosInNode;\n return true;\n }\n currentPos += text.length;\n } else if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n if (element.dataset.mentionId) {\n currentPos += 1; // Mention counts as 1 char for positioning\n } else {\n for (const child of Array.from(node.childNodes)) {\n if (findAtPosition(child)) return true;\n }\n }\n }\n return false;\n };\n\n for (const child of Array.from(editor.childNodes)) {\n if (findAtPosition(child)) break;\n }\n\n if (foundNode) {\n // Delete from @ to current cursor\n const deleteRange = document.createRange();\n deleteRange.setStart(foundNode, foundOffset);\n deleteRange.setEnd(range.endContainer, range.endOffset);\n deleteRange.deleteContents();\n }\n }\n\n // Create mention element\n const mentionEl = document.createElement(\"span\");\n mentionEl.className =\n \"inline-flex items-center gap-1 rounded-md border border-muted-foreground py-0.5 px-1.5 text-xs mx-0.5 cursor-default select-none bg-muted/50 max-w-[350px]\";\n mentionEl.contentEditable = \"false\";\n mentionEl.dataset.mentionId = mention.id;\n mentionEl.dataset.mentionTitle = mention.title;\n\n // Add icon if present, otherwise use type-based icon\n if (mention.icon) {\n const iconImg = document.createElement(\"img\");\n iconImg.src = mention.icon;\n iconImg.className = \"size-3.5 rounded-sm shrink-0\";\n iconImg.alt = \"\";\n mentionEl.appendChild(iconImg);\n } else if (mention.type) {\n // Add type-based SVG icon\n const iconSpan = document.createElement(\"span\");\n iconSpan.className = \"size-3.5 shrink-0 flex items-center justify-center\";\n iconSpan.innerHTML = getTypeIconSvg(mention.type);\n mentionEl.appendChild(iconSpan);\n }\n\n // Add title\n const titleSpan = document.createElement(\"span\");\n titleSpan.className = \"truncate\";\n titleSpan.textContent = mention.title;\n mentionEl.appendChild(titleSpan);\n\n // Insert mention at current position\n const insertRange = selection.getRangeAt(0);\n insertRange.insertNode(mentionEl);\n\n // Add a space after for continued typing\n const spaceNode = document.createTextNode(\" \");\n mentionEl.after(spaceNode);\n\n // Move cursor after the space\n const newRange = document.createRange();\n newRange.setStartAfter(spaceNode);\n newRange.collapse(true);\n selection.removeAllRanges();\n selection.addRange(newRange);\n\n // Update state\n setInlineMentions((prev) => [...prev, mention]);\n triggerPositionRef.current = null;\n syncToRuntime();\n\n // Ensure focus stays on the editor\n setTimeout(() => {\n editorRef.current?.focus();\n }, 10);\n },\n [syncToRuntime]\n );\n\n // Expose methods via ref\n useImperativeHandle(\n ref,\n () => ({\n focus: () => editorRef.current?.focus(),\n getValue: getPlainText,\n insertMention,\n getInlineMentions: () => inlineMentions,\n }),\n [getPlainText, insertMention, inlineMentions]\n );\n\n // Auto focus on mount\n useEffect(() => {\n if (autoFocus) {\n editorRef.current?.focus();\n }\n }, [autoFocus]);\n\n // Clear editor when message is sent (composer text becomes empty)\n useEffect(() => {\n const unsubscribe = composerRuntime.subscribe(() => {\n const composerState = composerRuntime.getState();\n if (composerState.text === \"\" && editorRef.current) {\n // Clear the editor content\n editorRef.current.innerHTML = \"\";\n setInlineMentions([]);\n setIsEmpty(true);\n }\n });\n return unsubscribe;\n }, [composerRuntime]);\n\n // Prevent default paste - paste as plain text only\n const handlePaste = useCallback((e: React.ClipboardEvent) => {\n e.preventDefault();\n const text = e.clipboardData.getData(\"text/plain\");\n document.execCommand(\"insertText\", false, text);\n }, []);\n\n return (\n <div className=\"relative\">\n <div\n ref={editorRef}\n contentEditable\n role=\"textbox\"\n aria-label=\"Message input\"\n data-placeholder={placeholder}\n className={cn(\n \"aui-composer-input mb-1 max-h-32 min-h-14 w-full resize-none bg-transparent px-4 pt-2 pb-3 text-sm outline-none\",\n \"overflow-y-auto whitespace-pre-wrap wrap-break-word\",\n \"focus:outline-none focus-visible:ring-0\",\n // Placeholder styling using data attribute\n \"empty:before:content-[attr(data-placeholder)] empty:before:text-muted-foreground empty:before:pointer-events-none\",\n className\n )}\n onInput={handleInput}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n suppressContentEditableWarning\n />\n </div>\n );\n }\n);\n\nMentionComposerInput.displayName = \"MentionComposerInput\";\n","import { type FC, useMemo } from \"react\";\nimport { useMessage } from \"@assistant-ui/react\";\nimport { cn } from \"../../utils\";\nimport {\n FileIcon,\n FileTextIcon,\n VideoIcon,\n LinkIcon,\n} from \"lucide-react\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../ui/tooltip\";\n\n/**\n * Icon mapping for context item types\n */\nconst TYPE_ICONS: Record<string, FC<{ className?: string }>> = {\n attachment: FileIcon,\n description: FileTextIcon,\n caption: VideoIcon,\n link: LinkIcon,\n};\n\ninterface InlineContextPillProps {\n title: string;\n type?: string;\n className?: string;\n}\n\n/**\n * Inline context pill component for displaying context items in message history\n * Similar to ContextPill but without the remove button and slightly different styling\n */\nconst InlineContextPill: FC<InlineContextPillProps> = ({\n title,\n type = \"attachment\",\n className,\n}) => {\n const Icon = TYPE_ICONS[type] || FileIcon;\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n className={cn(\n \"inline-flex items-center gap-1 rounded-md border border-muted-foreground/50 py-0.5 px-1.5 text-xs mx-0.5\",\n \"max-w-[350px] cursor-default bg-muted/30 align-middle\",\n className\n )}\n >\n <Icon className=\"size-3 shrink-0\" />\n <span className=\"truncate\">{title}</span>\n </span>\n </TooltipTrigger>\n <TooltipContent side=\"top\" sideOffset={4}>\n {title}\n </TooltipContent>\n </Tooltip>\n );\n};\n\n/**\n * Parse message text and extract context mentions in [title] format\n * Returns an array of text segments and context mentions\n */\ninterface ContentPart {\n type: \"text\" | \"context\";\n content: string;\n}\n\nfunction parseMessageContent(text: string): ContentPart[] {\n const parts: ContentPart[] = [];\n const regex = /\\[([^\\]]+)\\]/g;\n let lastIndex = 0;\n let match;\n\n while ((match = regex.exec(text)) !== null) {\n // Add text before the match\n if (match.index > lastIndex) {\n parts.push({\n type: \"text\",\n content: text.slice(lastIndex, match.index),\n });\n }\n\n // Add the context mention\n parts.push({\n type: \"context\",\n content: match[1], // The title inside brackets\n });\n\n lastIndex = match.index + match[0].length;\n }\n\n // Add remaining text after last match\n if (lastIndex < text.length) {\n parts.push({\n type: \"text\",\n content: text.slice(lastIndex),\n });\n }\n\n return parts;\n}\n\n/**\n * Custom user message content component that renders context mentions as pills\n */\nexport const UserMessageContent: FC = () => {\n const message = useMessage();\n\n const renderedContent = useMemo(() => {\n // Get the text content from the message\n const textParts = message.content?.filter(\n (part) => part.type === \"text\"\n ) as Array<{ type: \"text\"; text: string }> | undefined;\n\n if (!textParts || textParts.length === 0) {\n return null;\n }\n\n // Combine all text parts\n const fullText = textParts.map((part) => part.text).join(\"\");\n\n // Parse and render with context pills\n const parsed = parseMessageContent(fullText);\n\n return parsed.map((part, index) => {\n if (part.type === \"context\") {\n return (\n <InlineContextPill\n key={`context-${index}`}\n title={part.content}\n />\n );\n }\n return <span key={`text-${index}`}>{part.content}</span>;\n });\n }, [message.content]);\n\n return <>{renderedContent}</>;\n};\n","import { useState, useCallback, useContext, useMemo } from 'react'\nimport { WidgetContext } from '../provider'\nimport { useMessageContext } from '../context/message-context'\n\n/**\n * Represents a single context item that can be selected\n */\nexport interface ContextItem {\n id: string\n type: 'attachment' | 'description' | 'caption' | 'link'\n title: string\n lessonTitle?: string\n chapterTitle?: string\n /** Optional icon URL for the item */\n icon?: string\n}\n\n/**\n * Represents a category of context items\n */\nexport interface ContextCategory {\n type: 'attachment' | 'description' | 'caption' | 'link'\n label: string\n items: ContextItem[]\n}\n\n/**\n * Response from the context API\n */\ninterface ContextApiResponse {\n categories: ContextCategory[]\n hasMore: boolean\n}\n\n/**\n * Category type to label mapping\n */\nconst CATEGORY_LABELS: Record<string, string> = {\n attachment: 'Attachments',\n description: 'Description',\n caption: 'Video',\n link: 'Links',\n}\n\n/**\n * Options for the useContextMention hook\n */\ninterface UseContextMentionOptions {\n /**\n * Callback to insert the selected item as an inline mention\n * @param item - The full context item to insert\n */\n onInsertMention?: (item: ContextItem) => void\n}\n\n/**\n * Hook for managing context mentions in the composer\n */\nexport function useContextMention(options: UseContextMentionOptions = {}) {\n const { onInsertMention } = options\n const widgetContext = useContext(WidgetContext)\n\n if (!widgetContext) {\n throw new Error('useContextMention must be used within a WidgetProvider')\n }\n\n const { client } = widgetContext\n\n // Use message context for selected items (shared with provider)\n const { selectedContext: selectedItems, addContextItem, removeContextItem, clearContext } = useMessageContext()\n\n // Popover state\n const [isOpen, setIsOpen] = useState(false)\n\n // Search/filter term (text after @)\n const [searchTerm, setSearchTerm] = useState('')\n\n // Keyboard navigation index\n const [activeIndex, setActiveIndex] = useState(0)\n\n // Loading state for API calls\n const [isLoading, setIsLoading] = useState(false)\n\n // Available context items from API\n const [categories, setCategories] = useState<ContextCategory[]>([])\n\n // Whether there are more items to load\n const [hasMore, setHasMore] = useState(false)\n\n // Get config from client\n const config = client.getConfig()\n const baseUrl = config.baseUrl || 'http://localhost:3000'\n const assistantId = config.apiKey\n\n /**\n * Fetch context items from the API\n */\n const fetchContextItems = useCallback(\n async (search: string = '', limit: number = 10) => {\n setIsLoading(true)\n try {\n const params = new URLSearchParams({\n limit: limit.toString(),\n })\n if (search) {\n params.set('search', search)\n }\n\n const response = await fetch(\n `${baseUrl}/api/widget/context?${params.toString()}`,\n {\n headers: {\n 'Content-Type': 'application/json',\n 'X-Assistant-Id': assistantId,\n },\n },\n )\n\n if (!response.ok) {\n console.error('[ContextMention] Failed to fetch context:', response.status)\n return\n }\n\n const data: ContextApiResponse = await response.json()\n setCategories(data.categories)\n setHasMore(data.hasMore)\n } catch (error) {\n console.error('[ContextMention] Error fetching context:', error)\n } finally {\n setIsLoading(false)\n }\n },\n [baseUrl, assistantId],\n )\n\n /**\n * Open the popover and fetch initial items\n */\n const openPopover = useCallback(() => {\n setIsOpen(true)\n setSearchTerm('')\n setActiveIndex(0)\n fetchContextItems()\n }, [fetchContextItems])\n\n /**\n * Close the popover\n */\n const closePopover = useCallback(() => {\n setIsOpen(false)\n setSearchTerm('')\n setActiveIndex(0)\n }, [])\n\n /**\n * Update search term and fetch filtered items\n */\n const updateSearch = useCallback(\n (term: string) => {\n setSearchTerm(term)\n setActiveIndex(0)\n fetchContextItems(term)\n },\n [fetchContextItems],\n )\n\n /**\n * Flattened list of all items for keyboard navigation\n */\n const flattenedItems = useMemo(() => {\n return categories.flatMap((category) => category.items)\n }, [categories])\n\n /**\n * Move to next item in the list\n */\n const navigateDown = useCallback(() => {\n setActiveIndex((prev) =>\n prev < flattenedItems.length - 1 ? prev + 1 : prev,\n )\n }, [flattenedItems.length])\n\n /**\n * Move to previous item in the list\n */\n const navigateUp = useCallback(() => {\n setActiveIndex((prev) => (prev > 0 ? prev - 1 : 0))\n }, [])\n\n /**\n * Select the currently active item\n */\n const selectActiveItem = useCallback(() => {\n const item = flattenedItems[activeIndex]\n if (item) {\n addContextItem(item)\n closePopover()\n // Insert the item as an inline mention\n onInsertMention?.(item)\n }\n }, [flattenedItems, activeIndex, addContextItem, closePopover, onInsertMention])\n\n /**\n * Select a specific item\n */\n const selectItem = useCallback(\n (item: ContextItem) => {\n addContextItem(item)\n closePopover()\n // Insert the item as an inline mention\n onInsertMention?.(item)\n },\n [addContextItem, closePopover, onInsertMention],\n )\n\n /**\n * Remove a selected item\n */\n const removeItem = useCallback((itemId: string) => {\n removeContextItem(itemId)\n }, [removeContextItem])\n\n /**\n * Clear all selected items\n */\n const clearAll = useCallback(() => {\n clearContext()\n }, [clearContext])\n\n /**\n * Handle keyboard events for navigation\n */\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (!isOpen) return\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n navigateDown()\n break\n case 'ArrowUp':\n event.preventDefault()\n navigateUp()\n break\n case 'Enter':\n event.preventDefault()\n selectActiveItem()\n break\n case 'Escape':\n event.preventDefault()\n closePopover()\n break\n }\n },\n [isOpen, navigateDown, navigateUp, selectActiveItem, closePopover],\n )\n\n /**\n * Get the label for a category type\n */\n const getCategoryLabel = useCallback((type: string) => {\n return CATEGORY_LABELS[type] || type\n }, [])\n\n return {\n // Selected items\n selectedItems,\n selectItem,\n removeItem,\n clearAll,\n\n // Popover state\n isOpen,\n openPopover,\n closePopover,\n\n // Search\n searchTerm,\n updateSearch,\n\n // Navigation\n activeIndex,\n setActiveIndex,\n navigateUp,\n navigateDown,\n selectActiveItem,\n handleKeyDown,\n\n // Data\n categories,\n flattenedItems,\n isLoading,\n hasMore,\n\n // Utilities\n getCategoryLabel,\n }\n}\n","import {\n ComposerAddAttachment,\n ComposerAttachments,\n UserMessageAttachments,\n} from \"./attachment\";\nimport { MarkdownText } from \"./markdown-text\";\nimport { ToolFallback } from \"./tool-fallback\";\nimport { TooltipIconButton } from \"./tooltip-icon-button\";\nimport { Button } from \"../ui/button\";\nimport { BotAvatar } from \"./bot-avatar\";\nimport { ContextPill } from \"./context-pill\";\nimport { ContextMentionPopover } from \"./context-mention-popover\";\nimport { MentionComposerInput, type MentionComposerInputRef } from \"./mention-composer-input\";\nimport { UserMessageContent } from \"./user-message-content\";\nimport { cn } from \"../../utils\";\nimport { useContextMention, type ContextItem } from \"../../hooks/useContextMention\";\nimport { useMessageContext } from \"../../context/message-context\";\nimport {\n ActionBarPrimitive,\n AssistantIf,\n BranchPickerPrimitive,\n ComposerPrimitive,\n ErrorPrimitive,\n MessagePrimitive,\n ThreadPrimitive,\n useMessage,\n useComposerRuntime,\n} from \"@assistant-ui/react\";\nimport {\n ArrowDownIcon,\n ArrowUpIcon,\n CheckIcon,\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n CopyIcon,\n DownloadIcon,\n PencilIcon,\n RefreshCwIcon,\n SquareIcon,\n WalletCardsIcon,\n BadgeQuestionMarkIcon,\n PodcastIcon,\n GlobeIcon,\n MessageSquareTextIcon,\n AtSignIcon,\n} from \"lucide-react\";\nimport { type FC, useCallback, useRef, useState } from \"react\";\n\nexport const Thread: FC = () => {\n return (\n <ThreadPrimitive.Root\n className=\"aui-thread-root @container flex h-full flex-col bg-background\"\n style={{\n [\"--thread-max-width\" as string]: \"44rem\",\n }}\n >\n <ThreadPrimitive.Viewport\n className=\"aui-thread-viewport relative flex flex-1 flex-col overflow-x-auto overflow-y-scroll scroll-smooth px-4 pt-4\"\n >\n <AssistantIf condition={({ thread }) => thread.isEmpty}>\n <ThreadWelcome />\n </AssistantIf>\n\n <ThreadPrimitive.Messages\n components={{\n UserMessage,\n EditComposer,\n AssistantMessage,\n }}\n />\n\n <ThreadPrimitive.ViewportFooter className=\"aui-thread-viewport-footer sticky bottom-0 mx-auto mt-auto flex w-full max-w-(--thread-max-width) flex-col gap-4 overflow-visible rounded-t-3xl bg-background pb-4\">\n <ThreadScrollToBottom />\n <Composer />\n </ThreadPrimitive.ViewportFooter>\n </ThreadPrimitive.Viewport>\n </ThreadPrimitive.Root>\n );\n};\n\nconst ThreadScrollToBottom: FC = () => {\n return (\n <ThreadPrimitive.ScrollToBottom asChild>\n <TooltipIconButton\n tooltip=\"Scroll to bottom\"\n variant=\"outline\"\n className=\"aui-thread-scroll-to-bottom absolute -top-12 z-10 self-center rounded-full p-4 disabled:invisible dark:bg-background dark:hover:bg-accent\"\n >\n <ArrowDownIcon />\n </TooltipIconButton>\n </ThreadPrimitive.ScrollToBottom>\n );\n};\n\nconst getGreeting = () => {\n const hour = new Date().getHours();\n if (hour < 12) return \"Good morning\";\n if (hour < 18) return \"Good afternoon\";\n return \"Good evening\";\n};\n\nconst STATIC_SUGGESTIONS = [\n {\n label: \"Explain this concept in detail\",\n icon: MessageSquareTextIcon,\n prompt: \"Explain this concept to me by drawing comparisons\",\n },\n {\n label: \"Generate a podcast\",\n icon: PodcastIcon,\n prompt: \"/audio\",\n },\n {\n label: \"Quiz me\",\n icon: BadgeQuestionMarkIcon,\n prompt: \"/quiz\",\n },\n {\n label: \"Generate flashcards\",\n icon: WalletCardsIcon,\n prompt: \"/flashcards\",\n },\n] as const;\n\nconst ThreadWelcome: FC = () => {\n return (\n <div className=\"aui-thread-welcome-root mx-auto flex w-full max-w-(--thread-max-width) flex-col gap-4\">\n <div className=\"aui-thread-welcome-center flex w-full grow flex-col items-center justify-center\">\n <div className=\"aui-thread-welcome-message flex size-full flex-col justify-center px-4\">\n <h1\n className=\"aui-thread-welcome-message-inner fade-in slide-in-from-bottom-1 animate-in font-semibold text-2xl duration-200\"\n style={{\n color: \"var(--color-primary)\",\n }}\n >\n {getGreeting()}\n </h1>\n <p className=\"aui-thread-welcome-message-inner fade-in slide-in-from-bottom-1 animate-in text-muted-foreground text-xl delay-75 duration-200\">\n How may I be of service?\n </p>\n </div>\n </div>\n <ThreadSuggestions />\n </div>\n );\n};\n\nconst ThreadSuggestions: FC = () => {\n return (\n <div className=\"aui-thread-welcome-suggestions flex w-full flex-col gap-2\">\n {STATIC_SUGGESTIONS.map((suggestion, index) => {\n const Icon = suggestion.icon;\n return (\n <div\n key={suggestion.prompt}\n className=\"fade-in slide-in-from-bottom-2 animate-in fill-mode-both duration-200\"\n style={{ animationDelay: `${200 + index * 50}ms` }}\n >\n <ThreadPrimitive.Suggestion prompt={suggestion.prompt} send asChild>\n <Button\n variant=\"ghost\"\n className=\"aui-thread-welcome-suggestion h-auto w-full @md:flex-col flex-wrap items-start justify-start gap-1 rounded-2xl border text-left text-sm transition-colors hover:bg-muted hover:text-primary\"\n aria-label={suggestion.label}\n style={{\n borderWidth: 0,\n padding: 8,\n }}\n >\n <div className=\"flex items-center gap-2\">\n <Icon className=\"size-4 shrink-0\" />\n <span>{suggestion.label}</span>\n </div>\n </Button>\n </ThreadPrimitive.Suggestion>\n </div>\n );\n })}\n </div>\n );\n};\n\nconst Composer: FC = () => {\n const inputRef = useRef<MentionComposerInputRef>(null);\n const composerRuntime = useComposerRuntime();\n\n // Handle submitting the message\n const handleSubmit = useCallback(() => {\n composerRuntime.send();\n }, [composerRuntime]);\n\n // Handle inserting a mention into the input\n const handleInsertMention = useCallback((item: ContextItem) => {\n inputRef.current?.insertMention({\n id: item.id,\n title: item.title,\n icon: item.icon,\n type: item.type,\n });\n // Return focus to the input after context item is added\n setTimeout(() => {\n inputRef.current?.focus();\n }, 0);\n }, []);\n\n const {\n isOpen,\n openPopover,\n closePopover,\n categories,\n isLoading,\n activeIndex,\n flattenedItems,\n selectItem,\n setActiveIndex,\n handleKeyDown,\n getCategoryLabel,\n searchTerm,\n updateSearch,\n } = useContextMention({ onInsertMention: handleInsertMention });\n\n const { selectedContext, removeContextItem } = useMessageContext();\n\n // Handle @ trigger detection from the mention input\n const handleTriggerDetected = useCallback(\n (searchText: string) => {\n if (!isOpen) {\n openPopover();\n }\n updateSearch(searchText);\n },\n [isOpen, openPopover, updateSearch]\n );\n\n // Handle @ trigger dismissal\n const handleTriggerDismissed = useCallback(() => {\n if (isOpen) {\n closePopover();\n }\n }, [isOpen, closePopover]);\n\n // Handle keyboard events for popover navigation\n const handleComposerKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (isOpen) {\n if ([\"ArrowUp\", \"ArrowDown\", \"Enter\", \"Escape\"].includes(e.key)) {\n e.preventDefault();\n handleKeyDown(e as unknown as React.KeyboardEvent);\n \n // When Escape is pressed, ensure focus returns to input\n if (e.key === \"Escape\") {\n setTimeout(() => {\n inputRef.current?.focus();\n }, 0);\n }\n }\n }\n },\n [isOpen, handleKeyDown]\n );\n\n // Handle mention removal (when user backspaces over an inline mention)\n const handleMentionRemove = useCallback(\n (mentionId: string) => {\n removeContextItem(mentionId);\n },\n [removeContextItem]\n );\n\n return (\n <ComposerPrimitive.Root className=\"aui-composer-root relative flex w-full flex-col\">\n <ComposerPrimitive.AttachmentDropzone className=\"aui-composer-attachment-dropzone flex w-full flex-col rounded-2xl border border-input bg-background px-1 pt-2 outline-none transition-shadow has-[[contenteditable]:focus-visible]:border-ring has-[[contenteditable]:focus-visible]:ring-2 has-[[contenteditable]:focus-visible]:ring-ring/20 data-[dragging=true]:border-ring data-[dragging=true]:border-dashed data-[dragging=true]:bg-accent/50\">\n {/* Context UI */}\n <ComposerContextUI\n isOpen={isOpen}\n onOpenChange={(open) => (open ? openPopover() : closePopover())}\n categories={categories}\n isLoading={isLoading}\n activeIndex={activeIndex}\n flattenedItems={flattenedItems}\n onSelectItem={selectItem}\n onActiveIndexChange={setActiveIndex}\n getCategoryLabel={getCategoryLabel}\n searchTerm={searchTerm}\n selectedItems={selectedContext}\n onRemoveItem={removeContextItem}\n />\n <ComposerAttachments />\n <MentionComposerInput\n ref={inputRef}\n placeholder=\"Ask, search, or make anything...\"\n autoFocus\n onTriggerDetected={handleTriggerDetected}\n onTriggerDismissed={handleTriggerDismissed}\n onKeyDown={handleComposerKeyDown}\n onMentionRemove={handleMentionRemove}\n onSubmit={handleSubmit}\n />\n <ComposerAction />\n </ComposerPrimitive.AttachmentDropzone>\n </ComposerPrimitive.Root>\n );\n};\n\ninterface ComposerContextUIProps {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n categories: ReturnType<typeof useContextMention>[\"categories\"];\n isLoading: boolean;\n activeIndex: number;\n flattenedItems: ReturnType<typeof useContextMention>[\"flattenedItems\"];\n onSelectItem: ReturnType<typeof useContextMention>[\"selectItem\"];\n onActiveIndexChange: (index: number) => void;\n getCategoryLabel: (type: string) => string;\n searchTerm: string;\n selectedItems: ReturnType<typeof useMessageContext>[\"selectedContext\"];\n onRemoveItem: (id: string) => void;\n}\n\nconst ComposerContextUI: FC<ComposerContextUIProps> = ({\n isOpen,\n onOpenChange,\n categories,\n isLoading,\n activeIndex,\n flattenedItems,\n onSelectItem,\n onActiveIndexChange,\n getCategoryLabel,\n searchTerm,\n selectedItems,\n onRemoveItem,\n}) => {\n return (\n <div className=\"aui-composer-context mb-2 flex items-center gap-2 overflow-x-auto px-1.5 pt-0.5 pb-1\">\n <ContextMentionPopover\n isOpen={isOpen}\n onOpenChange={onOpenChange}\n categories={categories}\n isLoading={isLoading}\n activeIndex={activeIndex}\n flattenedItems={flattenedItems}\n onSelectItem={onSelectItem}\n onActiveIndexChange={onActiveIndexChange}\n getCategoryLabel={getCategoryLabel}\n searchTerm={searchTerm}\n trigger={\n <TooltipIconButton\n tooltip=\"Add context (@)\"\n side=\"bottom\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"aui-composer-add-context size-[34px] rounded-full p-1 font-semibold text-xs hover:bg-muted-foreground/15 dark:border-muted-foreground/15 dark:hover:bg-muted-foreground/30\"\n aria-label=\"Add context (@)\"\n >\n <AtSignIcon className=\"size-5 stroke-[1.5px]\" />\n </TooltipIconButton>\n }\n />\n {selectedItems.length > 0 && (\n <div className=\"flex items-center gap-1.5 overflow-x-auto\">\n {selectedItems.map((item) => (\n <ContextPill\n key={item.id}\n label={item.title}\n onRemove={() => onRemoveItem(item.id)}\n />\n ))}\n </div>\n )}\n </div>\n );\n};\n\nconst ComposerAction: FC = () => {\n return (\n <div className=\"aui-composer-action-wrapper relative mx-2 mb-2 flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <ComposerAddAttachment />\n <TooltipIconButton\n tooltip=\"All sources\"\n side=\"bottom\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"aui-composer-all-sources size-[34px] rounded-full p-1 font-semibold text-xs hover:bg-muted-foreground/15 dark:border-muted-foreground/15 dark:hover:bg-muted-foreground/30\"\n aria-label=\"All sources\"\n >\n <GlobeIcon className=\"size-5 stroke-[1.5px]\" />\n </TooltipIconButton>\n </div>\n\n <AssistantIf condition={({ thread }) => !thread.isRunning}>\n <ComposerPrimitive.Send asChild>\n <TooltipIconButton\n tooltip=\"Send message\"\n side=\"bottom\"\n type=\"submit\"\n variant=\"default\"\n className=\"aui-composer-send size-8 rounded-full\"\n aria-label=\"Send message\"\n >\n <ArrowUpIcon className=\"aui-composer-send-icon size-4\" />\n </TooltipIconButton>\n </ComposerPrimitive.Send>\n </AssistantIf>\n\n <AssistantIf condition={({ thread }) => thread.isRunning}>\n <ComposerPrimitive.Cancel asChild>\n <Button\n type=\"button\"\n variant=\"default\"\n size=\"icon\"\n className=\"aui-composer-cancel size-8 rounded-full\"\n aria-label=\"Stop generating\"\n >\n <SquareIcon className=\"aui-composer-cancel-icon size-3 fill-current\" />\n </Button>\n </ComposerPrimitive.Cancel>\n </AssistantIf>\n </div>\n );\n};\n\nconst MessageError: FC = () => {\n return (\n <MessagePrimitive.Error>\n <ErrorPrimitive.Root className=\"aui-message-error-root mt-2 rounded-md border border-destructive bg-destructive/10 p-3 text-destructive text-sm dark:bg-destructive/5 dark:text-red-200\">\n <ErrorPrimitive.Message className=\"aui-message-error-message line-clamp-2\" />\n </ErrorPrimitive.Root>\n </MessagePrimitive.Error>\n );\n};\n\nconst AssistantMessage: FC = () => {\n return (\n <MessagePrimitive.Root\n className=\"aui-assistant-message-root fade-in slide-in-from-bottom-1 relative mx-auto w-full max-w-(--thread-max-width) animate-in py-3 duration-150\"\n data-role=\"assistant\"\n >\n <div className=\"aui-assistant-message-content wrap-break-word px-2 text-foreground leading-relaxed\">\n <MessagePrimitive.Parts\n components={{\n Text: MarkdownText,\n tools: { Fallback: ToolFallback },\n }}\n />\n <MessageError />\n </div>\n\n <div className=\"aui-assistant-message-footer mt-1 ml-2 flex\">\n <BranchPicker />\n <AssistantActionBar />\n </div>\n </MessagePrimitive.Root>\n );\n};\n\nconst AssistantActionBar: FC = () => {\n return (\n <ActionBarPrimitive.Root\n hideWhenRunning\n autohide=\"not-last\"\n autohideFloat=\"single-branch\"\n className=\"aui-assistant-action-bar-root col-start-3 row-start-2 -ml-1 flex gap-1 text-muted-foreground data-floating:absolute data-floating:rounded-md data-floating:border data-floating:bg-background data-floating:p-1 data-floating:shadow-sm\"\n >\n <ActionBarPrimitive.Copy asChild>\n <TooltipIconButton tooltip=\"Copy\">\n <AssistantIf condition={({ message }) => message.isCopied}>\n <CheckIcon />\n </AssistantIf>\n <AssistantIf condition={({ message }) => !message.isCopied}>\n <CopyIcon />\n </AssistantIf>\n </TooltipIconButton>\n </ActionBarPrimitive.Copy>\n <ActionBarPrimitive.ExportMarkdown asChild>\n <TooltipIconButton tooltip=\"Export as Markdown\">\n <DownloadIcon />\n </TooltipIconButton>\n </ActionBarPrimitive.ExportMarkdown>\n <ActionBarPrimitive.Reload asChild>\n <TooltipIconButton tooltip=\"Refresh\">\n <RefreshCwIcon />\n </TooltipIconButton>\n </ActionBarPrimitive.Reload>\n </ActionBarPrimitive.Root>\n );\n};\n\n/**\n * Context indicator for user messages that used context\n */\ninterface ContextMetadataItem {\n id: string;\n type: string;\n title: string;\n}\n\nconst MessageContextIndicator: FC = () => {\n const [isExpanded, setIsExpanded] = useState(false);\n \n // Access message metadata using useMessage hook\n const contextItems = useMessage((state) => {\n // Debug: log the full message state to see the structure\n console.log('[MessageContextIndicator] Message state:', state);\n \n // The metadata might be in different locations depending on how it's stored\n // Try direct access first, then nested in custom\n const metadata = state.metadata as { \n context?: ContextMetadataItem[];\n custom?: { context?: ContextMetadataItem[] };\n } | undefined;\n \n const context = metadata?.context || metadata?.custom?.context;\n console.log('[MessageContextIndicator] Context:', context);\n return context;\n });\n\n if (!contextItems || contextItems.length === 0) {\n return null;\n }\n\n return (\n <div className=\"col-start-2 mb-1 flex flex-col items-end\">\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground transition-colors\"\n >\n <span>{contextItems.length} Context</span>\n <ChevronDownIcon \n className={cn(\n \"size-3.5 transition-transform duration-200\",\n isExpanded && \"rotate-180\"\n )} \n />\n </button>\n {isExpanded && (\n <div className=\"mt-1 flex flex-wrap gap-1 justify-end\">\n {contextItems.map((item) => (\n <span \n key={item.id}\n className=\"rounded-full bg-muted px-2 py-0.5 text-xs text-muted-foreground\"\n >\n {item.title}\n </span>\n ))}\n </div>\n )}\n </div>\n );\n};\n\nconst UserMessage: FC = () => {\n return (\n <MessagePrimitive.Root\n className=\"aui-user-message-root fade-in slide-in-from-bottom-1 mx-auto grid w-full max-w-(--thread-max-width) animate-in auto-rows-auto grid-cols-[minmax(72px,1fr)_auto] content-start gap-y-2 px-2 py-3 duration-150 [&:where(>*)]:col-start-2\"\n data-role=\"user\"\n >\n {/* Show context indicator for messages that used context */}\n <MessageContextIndicator />\n \n <UserMessageAttachments />\n\n <div className=\"aui-user-message-content-wrapper relative col-start-2 min-w-0\">\n <div className=\"aui-user-message-content wrap-break-word rounded-2xl bg-muted px-4 py-2.5 text-foreground\">\n <UserMessageContent />\n </div>\n <div className=\"aui-user-action-bar-wrapper absolute top-1/2 left-0 -translate-x-full -translate-y-1/2 pr-2\">\n <UserActionBar />\n </div>\n </div>\n\n <BranchPicker className=\"aui-user-branch-picker col-span-full col-start-1 row-start-3 -mr-1 justify-end\" />\n </MessagePrimitive.Root>\n );\n};\n\nconst UserActionBar: FC = () => {\n return (\n <ActionBarPrimitive.Root\n hideWhenRunning\n autohide=\"not-last\"\n className=\"aui-user-action-bar-root flex flex-col items-end\"\n >\n <ActionBarPrimitive.Edit asChild>\n <TooltipIconButton tooltip=\"Edit\" className=\"aui-user-action-edit p-4\">\n <PencilIcon />\n </TooltipIconButton>\n </ActionBarPrimitive.Edit>\n </ActionBarPrimitive.Root>\n );\n};\n\nconst EditComposer: FC = () => {\n return (\n <MessagePrimitive.Root className=\"aui-edit-composer-wrapper mx-auto flex w-full max-w-(--thread-max-width) flex-col px-2 py-3\">\n <ComposerPrimitive.Root className=\"aui-edit-composer-root ml-auto flex w-full max-w-[85%] flex-col rounded-2xl bg-muted\">\n <ComposerPrimitive.Input\n className=\"aui-edit-composer-input min-h-14 w-full resize-none bg-transparent p-4 text-foreground text-sm outline-none\"\n autoFocus\n />\n <div className=\"aui-edit-composer-footer mx-3 mb-3 flex items-center gap-2 self-end\">\n <ComposerPrimitive.Cancel asChild>\n <Button variant=\"ghost\" size=\"sm\">\n Cancel\n </Button>\n </ComposerPrimitive.Cancel>\n <ComposerPrimitive.Send asChild>\n <Button size=\"sm\">Update</Button>\n </ComposerPrimitive.Send>\n </div>\n </ComposerPrimitive.Root>\n </MessagePrimitive.Root>\n );\n};\n\nconst BranchPicker: FC<BranchPickerPrimitive.Root.Props> = ({\n className,\n ...rest\n}) => {\n return (\n <BranchPickerPrimitive.Root\n hideWhenSingleBranch\n className={cn(\n \"aui-branch-picker-root mr-2 -ml-2 inline-flex items-center text-muted-foreground text-xs\",\n className\n )}\n {...rest}\n >\n <BranchPickerPrimitive.Previous asChild>\n <TooltipIconButton tooltip=\"Previous\">\n <ChevronLeftIcon />\n </TooltipIconButton>\n </BranchPickerPrimitive.Previous>\n <span className=\"aui-branch-picker-state font-medium\">\n <BranchPickerPrimitive.Number /> / <BranchPickerPrimitive.Count />\n </span>\n <BranchPickerPrimitive.Next asChild>\n <TooltipIconButton tooltip=\"Next\">\n <ChevronRightIcon />\n </TooltipIconButton>\n </BranchPickerPrimitive.Next>\n </BranchPickerPrimitive.Root>\n );\n};\n","import {\n ThreadListPrimitive,\n ThreadListItemPrimitive,\n} from \"@assistant-ui/react\";\nimport { TooltipIconButton } from \"./tooltip-icon-button\";\nimport {\n PlusIcon,\n ArchiveIcon,\n Trash2Icon,\n ArchiveRestoreIcon,\n MessageSquareIcon,\n} from \"lucide-react\";\nimport type { FC } from \"react\";\n\nexport const ThreadList: FC = () => {\n return (\n <ThreadListPrimitive.Root className=\"aui-thread-list-root flex flex-col\">\n {/* Header */}\n <div className=\"flex items-center justify-between border-b border-border px-3 py-2\">\n <span className=\"text-sm font-medium text-foreground\">Chats</span>\n <ThreadListPrimitive.New asChild>\n <TooltipIconButton\n tooltip=\"New chat\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-7 w-7\"\n >\n <PlusIcon className=\"h-4 w-4\" />\n </TooltipIconButton>\n </ThreadListPrimitive.New>\n </div>\n\n {/* Thread List */}\n <div className=\"flex-1 overflow-y-auto\">\n {/* Regular threads */}\n <ThreadListPrimitive.Items\n components={{\n ThreadListItem: ThreadListItem,\n }}\n />\n\n {/* Archived threads section */}\n <div className=\"px-3 py-2\">\n <span className=\"text-xs font-medium text-muted-foreground\">\n Archived\n </span>\n </div>\n <ThreadListPrimitive.Items\n archived\n components={{\n ThreadListItem: ArchivedThreadListItem,\n }}\n />\n </div>\n </ThreadListPrimitive.Root>\n );\n};\n\nconst ThreadListItem: FC = () => {\n return (\n <ThreadListItemPrimitive.Root className=\"aui-thread-list-item group relative flex items-center gap-2 px-3 py-2 hover:bg-muted/50 data-[active]:bg-muted cursor-pointer transition-colors\">\n <ThreadListItemPrimitive.Trigger className=\"flex flex-1 items-center gap-2 min-w-0\">\n <MessageSquareIcon className=\"h-4 w-4 flex-shrink-0 text-muted-foreground\" />\n <div className=\"flex flex-1 flex-col min-w-0\">\n <span className=\"truncate text-sm font-medium text-foreground\">\n <ThreadListItemPrimitive.Title fallback=\"New Chat\" />\n </span>\n </div>\n </ThreadListItemPrimitive.Trigger>\n\n {/* Actions - visible on hover */}\n <div className=\"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\n <ThreadListItemPrimitive.Archive asChild>\n <TooltipIconButton\n tooltip=\"Archive\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6\"\n >\n <ArchiveIcon className=\"h-3.5 w-3.5\" />\n </TooltipIconButton>\n </ThreadListItemPrimitive.Archive>\n <ThreadListItemPrimitive.Delete asChild>\n <TooltipIconButton\n tooltip=\"Delete\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6 text-destructive hover:text-destructive\"\n >\n <Trash2Icon className=\"h-3.5 w-3.5\" />\n </TooltipIconButton>\n </ThreadListItemPrimitive.Delete>\n </div>\n </ThreadListItemPrimitive.Root>\n );\n};\n\nconst ArchivedThreadListItem: FC = () => {\n return (\n <ThreadListItemPrimitive.Root className=\"aui-thread-list-item-archived group relative flex items-center gap-2 px-3 py-2 hover:bg-muted/50 data-[active]:bg-muted cursor-pointer transition-colors opacity-70\">\n <ThreadListItemPrimitive.Trigger className=\"flex flex-1 items-center gap-2 min-w-0\">\n <ArchiveIcon className=\"h-4 w-4 flex-shrink-0 text-muted-foreground\" />\n <div className=\"flex flex-1 flex-col min-w-0\">\n <span className=\"truncate text-sm text-foreground\">\n <ThreadListItemPrimitive.Title fallback=\"Archived Chat\" />\n </span>\n </div>\n </ThreadListItemPrimitive.Trigger>\n\n {/* Actions - visible on hover */}\n <div className=\"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\n <ThreadListItemPrimitive.Unarchive asChild>\n <TooltipIconButton\n tooltip=\"Unarchive\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6\"\n >\n <ArchiveRestoreIcon className=\"h-3.5 w-3.5\" />\n </TooltipIconButton>\n </ThreadListItemPrimitive.Unarchive>\n <ThreadListItemPrimitive.Delete asChild>\n <TooltipIconButton\n tooltip=\"Delete\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6 text-destructive hover:text-destructive\"\n >\n <Trash2Icon className=\"h-3.5 w-3.5\" />\n </TooltipIconButton>\n </ThreadListItemPrimitive.Delete>\n </div>\n </ThreadListItemPrimitive.Root>\n );\n};\n","import { makeAssistantToolUI } from \"@assistant-ui/react\";\nimport type { ArtifactCategory } from \"../../../core/types\";\nimport { cn } from \"../../utils\";\nimport {\n HeadphonesIcon,\n VideoIcon,\n NetworkIcon,\n FileTextIcon,\n LayersIcon,\n HelpCircleIcon,\n PresentationIcon,\n BarChart3Icon,\n Loader2Icon,\n ExternalLinkIcon,\n DownloadIcon,\n} from \"lucide-react\";\nimport type { FC, ReactNode } from \"react\";\n\n// Base artifact args that all artifact tools share\ninterface BaseArtifactArgs {\n title: string;\n content: string;\n}\n\n// Result type for artifacts\ninterface ArtifactResult {\n id: string;\n title: string;\n category: ArtifactCategory;\n content: string;\n createdAt: number;\n updatedAt: number;\n}\n\n// Icon mapping for artifact categories\nconst categoryIcons: Record<ArtifactCategory, FC<{ className?: string }>> = {\n audio: HeadphonesIcon,\n \"audio-overview\": HeadphonesIcon,\n \"video-overview\": VideoIcon,\n \"mind-map\": NetworkIcon,\n reports: FileTextIcon,\n flashcards: LayersIcon,\n quiz: HelpCircleIcon,\n \"slide-deck\": PresentationIcon,\n infographic: BarChart3Icon,\n};\n\n// Color mapping for artifact categories\nconst categoryColors: Record<ArtifactCategory, string> = {\n audio: \"bg-purple-100 text-purple-700 dark:bg-purple-900/30 dark:text-purple-300\",\n \"audio-overview\": \"bg-purple-100 text-purple-700 dark:bg-purple-900/30 dark:text-purple-300\",\n \"video-overview\": \"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-300\",\n \"mind-map\": \"bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-300\",\n reports: \"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-300\",\n flashcards: \"bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-300\",\n quiz: \"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-300\",\n \"slide-deck\": \"bg-indigo-100 text-indigo-700 dark:bg-indigo-900/30 dark:text-indigo-300\",\n infographic: \"bg-teal-100 text-teal-700 dark:bg-teal-900/30 dark:text-teal-300\",\n};\n\n// Labels for artifact categories\nconst categoryLabels: Record<ArtifactCategory, string> = {\n audio: \"Audio\",\n \"audio-overview\": \"Audio Overview\",\n \"video-overview\": \"Video Overview\",\n \"mind-map\": \"Mind Map\",\n reports: \"Report\",\n flashcards: \"Flashcards\",\n quiz: \"Quiz\",\n \"slide-deck\": \"Slide Deck\",\n infographic: \"Infographic\",\n};\n\n// Base artifact card component\ninterface ArtifactCardProps {\n category: ArtifactCategory;\n title: string;\n content?: string;\n isLoading?: boolean;\n children?: ReactNode;\n}\n\nconst ArtifactCard: FC<ArtifactCardProps> = ({\n category,\n title,\n content,\n isLoading,\n children,\n}) => {\n const Icon = categoryIcons[category];\n const colorClass = categoryColors[category];\n const label = categoryLabels[category];\n\n return (\n <div className=\"my-3 overflow-hidden rounded-xl border border-border bg-card shadow-sm\">\n {/* Header */}\n <div className={cn(\"flex items-center gap-3 px-4 py-3\", colorClass)}>\n <div className=\"flex h-8 w-8 items-center justify-center rounded-lg bg-white/50 dark:bg-black/20\">\n {isLoading ? (\n <Loader2Icon className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Icon className=\"h-4 w-4\" />\n )}\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-xs font-medium opacity-80\">{label}</p>\n <h4 className=\"truncate font-semibold text-sm\">{title}</h4>\n </div>\n </div>\n\n {/* Content */}\n {content && (\n <div className=\"px-4 py-3 text-sm text-muted-foreground\">\n <div className=\"line-clamp-4 whitespace-pre-wrap\">{content}</div>\n </div>\n )}\n\n {/* Custom children / actions */}\n {children}\n\n {/* Footer actions */}\n {!isLoading && (\n <div className=\"flex items-center justify-end gap-2 border-t border-border px-4 py-2\">\n <button className=\"flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium text-muted-foreground hover:bg-muted transition-colors\">\n <DownloadIcon className=\"h-3 w-3\" />\n Export\n </button>\n <button className=\"flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium text-muted-foreground hover:bg-muted transition-colors\">\n <ExternalLinkIcon className=\"h-3 w-3\" />\n Open\n </button>\n </div>\n )}\n </div>\n );\n};\n\n// Create tool UI for each artifact category\nfunction createArtifactToolUI(category: ArtifactCategory) {\n return makeAssistantToolUI<BaseArtifactArgs, ArtifactResult>({\n toolName: `create_${category.replace(/-/g, \"_\")}`,\n render: ({ args, result, status }) => {\n const isLoading = status.type === \"running\";\n\n return (\n <ArtifactCard\n category={category}\n title={args.title || \"Generating...\"}\n content={result?.content || args.content}\n isLoading={isLoading}\n />\n );\n },\n });\n}\n\n// Export individual tool UIs\nexport const AudioOverviewToolUI = createArtifactToolUI(\"audio-overview\");\nexport const VideoOverviewToolUI = createArtifactToolUI(\"video-overview\");\nexport const MindMapToolUI = createArtifactToolUI(\"mind-map\");\nexport const ReportsToolUI = createArtifactToolUI(\"reports\");\nexport const FlashcardsToolUI = createArtifactToolUI(\"flashcards\");\nexport const QuizToolUI = createArtifactToolUI(\"quiz\");\nexport const SlideDeckToolUI = createArtifactToolUI(\"slide-deck\");\nexport const InfographicToolUI = createArtifactToolUI(\"infographic\");\n\n// Component that registers all artifact tool UIs\nexport const ArtifactToolUIs: FC = () => {\n return (\n <>\n <AudioOverviewToolUI />\n <VideoOverviewToolUI />\n <MindMapToolUI />\n <ReportsToolUI />\n <FlashcardsToolUI />\n <QuizToolUI />\n <SlideDeckToolUI />\n <InfographicToolUI />\n </>\n );\n};\n\n","import React, { type FC } from \"react\";\nimport { Thread } from \"./assistant-ui/thread\";\nimport { ThreadList } from \"./assistant-ui/thread-list\";\nimport { ArtifactToolUIs } from \"./assistant-ui/artifact-tools\";\nimport { cn } from \"../utils\";\nimport { AnimatePresence, motion } from \"motion/react\";\n\ninterface ChatWidgetProps {\n sidebarOpen?: boolean;\n onSidebarClose?: () => void;\n}\n\nexport const ChatWidget: FC<ChatWidgetProps> = ({\n sidebarOpen = false,\n onSidebarClose,\n}) => {\n return (\n <div className=\"relative flex flex-1 h-full w-full overflow-hidden bg-background\">\n {/* Register artifact tool UIs */}\n <ArtifactToolUIs />\n\n {/* Main Chat Area */}\n <div className=\"flex flex-1 flex-col min-w-0\">\n {/* Thread - fills entire space */}\n <div className=\"flex-1 overflow-hidden relative\">\n <Thread />\n </div>\n </div>\n\n {/* Overlay */}\n <AnimatePresence>\n {sidebarOpen && (\n <>\n {/* Dark overlay */}\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n className=\"absolute inset-0 bg-black/50 z-40\"\n onClick={onSidebarClose}\n />\n\n {/* Sidebar - overlays on top */}\n <motion.div\n initial={{ x: -256 }}\n animate={{ x: 0 }}\n exit={{ x: -256 }}\n transition={{ duration: 0.2, ease: [0.4, 0, 0.2, 1] }}\n className={cn(\n \"absolute left-0 top-0 bottom-0 w-64 bg-background z-50 overflow-hidden shadow-lg\"\n )}\n >\n <ThreadList />\n </motion.div>\n </>\n )}\n </AnimatePresence>\n </div>\n );\n};\n","import React from \"react\";\nimport {\n CheckIcon,\n PanelLeftIcon,\n SquareIcon,\n Maximize2Icon,\n} from \"lucide-react\";\nimport { cn } from \"../utils\";\nimport { Text } from \"../styles\";\n\nexport type LayoutMode = \"floating\" | \"fullscreen\" | \"sidebar\";\n\ninterface LayoutPopoverProps {\n currentLayout: LayoutMode;\n onLayoutChange: (layout: LayoutMode) => void;\n}\n\ninterface LayoutOption {\n value: LayoutMode;\n label: string;\n icon: React.ReactNode;\n}\n\nconst layoutOptions: LayoutOption[] = [\n {\n value: \"sidebar\",\n label: \"Sidebar\",\n icon: <PanelLeftIcon className=\"h-4 w-4\" />,\n },\n {\n value: \"floating\",\n label: \"Floating\",\n icon: <SquareIcon className=\"h-4 w-4\" />,\n },\n {\n value: \"fullscreen\",\n label: \"Full Screen\",\n icon: <Maximize2Icon className=\"h-4 w-4\" />,\n },\n];\n\nexport const LayoutPopover: React.FC<LayoutPopoverProps> = ({\n currentLayout,\n onLayoutChange,\n}) => {\n return (\n <div className=\"flex flex-col gap-1\">\n {layoutOptions.map((option) => {\n const isSelected = currentLayout === option.value;\n return (\n <button\n key={option.value}\n onClick={() => onLayoutChange(option.value)}\n className={cn(\n \"flex items-center gap-2 px-2 py-1.5 rounded-sm hover:bg-muted/50 transition-colors cursor-pointer w-full text-left\",\n isSelected && \"bg-muted/30\"\n )}\n >\n <div className=\"flex items-center justify-center w-4 h-4\">\n {option.icon}\n </div>\n <Text size=\"sm\" style={{ flex: 1 }}>\n {option.label}\n </Text>\n {isSelected && (\n <CheckIcon className=\"h-4 w-4 text-foreground\" />\n )}\n </button>\n );\n })}\n </div>\n );\n};\n\n","import React, { useEffect, useState } from 'react'\n\nimport { ThreadListPrimitive, useAssistantState } from '@assistant-ui/react'\nimport {\n BotIcon,\n ChevronDownIcon,\n EditIcon,\n LayoutIcon,\n Minimize2Icon,\n} from 'lucide-react'\nimport { AnimatePresence } from 'motion/react'\n\nimport {\n FAB,\n Flex,\n IconButton,\n Text,\n WidgetContent,\n WidgetHeader,\n WidgetPanel,\n WidgetRoot,\n} from '../styles'\nimport { ChatHistoryPopover } from './ChatHistoryPopover'\nimport { ChatWidget } from './ChatWidget'\nimport { type LayoutMode, LayoutPopover } from './LayoutPopover'\nimport { Popover, PopoverContent, PopoverTrigger } from './ui/popover'\n\ninterface WidgetContainerProps {\n defaultOpen?: boolean\n position?: 'bottom-right' | 'bottom-left'\n}\n\nconst LAYOUT_STORAGE_KEY = 'learn-alchemy-widget-layout'\n\nexport function WidgetContainer({\n defaultOpen = false,\n position = 'bottom-right',\n}: WidgetContainerProps) {\n const [isOpen, setIsOpen] = useState(defaultOpen)\n const [sidebarOpen, setSidebarOpen] = useState(false)\n const [chatHistoryOpen, setChatHistoryOpen] = useState(false)\n const [layoutOpen, setLayoutOpen] = useState(false)\n const [layout, setLayout] = useState<LayoutMode>('floating')\n\n // Load layout preference from localStorage on mount\n useEffect(() => {\n const savedLayout = localStorage.getItem(LAYOUT_STORAGE_KEY) as LayoutMode\n if (\n savedLayout &&\n ['floating', 'fullscreen', 'sidebar'].includes(savedLayout)\n ) {\n setLayout(savedLayout)\n }\n }, [])\n\n // Save layout preference to localStorage\n const handleLayoutChange = (newLayout: LayoutMode) => {\n setLayout(newLayout)\n localStorage.setItem(LAYOUT_STORAGE_KEY, newLayout)\n setLayoutOpen(false)\n }\n\n // Get current thread title\n const threadTitle = useAssistantState(\n ({ threadListItem }) => threadListItem?.title ?? 'New AI chat',\n )\n\n const handleMinimize = () => {\n setIsOpen(false)\n }\n\n const handleChatHistorySelect = () => {\n setChatHistoryOpen(false)\n }\n\n // Calculate widget styles based on layout mode\n const getWidgetStyles = (): React.CSSProperties => {\n const baseStyle: React.CSSProperties = {\n transformOrigin:\n position === 'bottom-right' ? 'bottom right' : 'bottom left',\n }\n\n switch (layout) {\n case 'fullscreen':\n return {\n ...baseStyle,\n position: 'fixed',\n width: '100vw',\n height: '100vh',\n maxWidth: '100vw',\n maxHeight: '100vh',\n borderRadius: 0,\n bottom: 0,\n right: 0,\n left: 0,\n top: 0,\n margin: 0,\n }\n case 'sidebar':\n return {\n ...baseStyle,\n position: 'fixed',\n width: '400px',\n height: '100vh',\n maxHeight: '100vh',\n bottom: 0,\n top: 0,\n right: position === 'bottom-right' ? 0 : 'auto',\n left: position === 'bottom-left' ? 0 : 'auto',\n borderRadius: 0,\n margin: 0,\n }\n case 'floating':\n default:\n return baseStyle\n }\n }\n\n return (\n <WidgetRoot position={position}>\n {/* Widget Panel */}\n <AnimatePresence>\n {isOpen && (\n <WidgetPanel\n initial={{ opacity: 0, scale: 0, y: 0 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0, y: 0 }}\n transition={{ duration: 0.2, ease: [0.4, 0, 0.2, 1] }}\n style={getWidgetStyles()}\n >\n {/* Header */}\n <WidgetHeader>\n {/* Left side: Chat title with dropdown */}\n <Popover open={chatHistoryOpen} onOpenChange={setChatHistoryOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n style={{\n cursor: 'pointer',\n background: 'none',\n border: 'none',\n padding: 0,\n display: 'flex',\n alignItems: 'center',\n minWidth: 0,\n flex: 1,\n }}\n >\n <Flex\n align=\"center\"\n gap=\"xs\"\n style={{ minWidth: 0, flex: 1 }}\n >\n <Text\n size=\"sm\"\n style={{\n fontWeight: 500,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n minWidth: 0,\n }}\n >\n {threadTitle}\n </Text>\n <ChevronDownIcon size={16} style={{ flexShrink: 0 }} />\n </Flex>\n </button>\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n side=\"bottom\"\n sideOffset={8}\n className=\"w-64 p-0\"\n >\n <ChatHistoryPopover\n onSelectThread={handleChatHistorySelect}\n />\n </PopoverContent>\n </Popover>\n\n {/* Right side: Action buttons */}\n <Flex align=\"center\" gap=\"xs\" style={{ flexShrink: 0 }}>\n {/* Edit icon - Start new chat */}\n <ThreadListPrimitive.New asChild>\n <IconButton aria-label=\"New chat\">\n <EditIcon size={18} />\n </IconButton>\n </ThreadListPrimitive.New>\n\n {/* Layout icon */}\n <Popover open={layoutOpen} onOpenChange={setLayoutOpen}>\n <PopoverTrigger asChild>\n <IconButton\n aria-label=\"Layout options\"\n style={{\n backgroundColor: layoutOpen\n ? 'hsl(var(--muted))'\n : 'transparent',\n }}\n >\n <LayoutIcon size={18} />\n </IconButton>\n </PopoverTrigger>\n <PopoverContent\n align=\"end\"\n side=\"bottom\"\n sideOffset={8}\n className=\"w-48 p-2\"\n >\n <LayoutPopover\n currentLayout={layout}\n onLayoutChange={handleLayoutChange}\n />\n </PopoverContent>\n </Popover>\n\n {/* Minimize icon */}\n <IconButton\n onClick={handleMinimize}\n aria-label=\"Minimize widget\"\n >\n <Minimize2Icon size={18} />\n </IconButton>\n </Flex>\n </WidgetHeader>\n\n {/* Chat Widget Content */}\n <WidgetContent>\n <ChatWidget\n sidebarOpen={sidebarOpen}\n onSidebarClose={() => setSidebarOpen(false)}\n />\n </WidgetContent>\n </WidgetPanel>\n )}\n </AnimatePresence>\n\n {/* FAB Button - Only visible when widget is closed */}\n <AnimatePresence>\n {!isOpen && (\n <Flex\n justify={position === 'bottom-right' ? 'flex-end' : 'flex-start'}\n >\n <FAB\n onClick={() => setIsOpen(true)}\n initial={{ opacity: 0, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: 20 }}\n transition={{ duration: 0.2, ease: [0.4, 0, 0.2, 1] }}\n whileHover={{ scale: 1.1 }}\n whileTap={{ scale: 0.9 }}\n aria-label=\"Open chat\"\n >\n <BotIcon size={24} strokeWidth={2} />\n </FAB>\n </Flex>\n )}\n </AnimatePresence>\n </WidgetRoot>\n )\n}\n","/**\n * ReadOnlyThread component for displaying chat history without interactive elements.\n * Used by content creators to view student conversations.\n */\n\nimport { MarkdownText } from \"./markdown-text\";\nimport { ToolFallback } from \"./tool-fallback\";\nimport { UserMessageContent } from \"./user-message-content\";\nimport {\n MessagePrimitive,\n ThreadPrimitive,\n} from \"@assistant-ui/react\";\nimport type { FC } from \"react\";\nimport { UserMessageAttachments } from \"./attachment\";\n\nexport const ReadOnlyThread: FC = () => {\n return (\n <ThreadPrimitive.Root\n className=\"aui-thread-root @container flex h-full flex-col bg-background\"\n style={{\n [\"--thread-max-width\" as string]: \"44rem\",\n }}\n >\n <ThreadPrimitive.Viewport\n turnAnchor=\"top\"\n className=\"aui-thread-viewport relative flex flex-1 flex-col overflow-x-auto overflow-y-scroll scroll-smooth px-4 pt-4 pb-4\"\n >\n <ThreadPrimitive.Messages\n components={{\n UserMessage: ReadOnlyUserMessage,\n EditComposer: ReadOnlyUserMessage, // Disable edit mode\n AssistantMessage: ReadOnlyAssistantMessage,\n }}\n />\n \n <ThreadPrimitive.Empty>\n <div className=\"flex h-full items-center justify-center text-muted-foreground\">\n No messages in this conversation.\n </div>\n </ThreadPrimitive.Empty>\n </ThreadPrimitive.Viewport>\n </ThreadPrimitive.Root>\n );\n};\n\nconst ReadOnlyAssistantMessage: FC = () => {\n return (\n <MessagePrimitive.Root\n className=\"aui-assistant-message-root fade-in slide-in-from-bottom-1 relative mx-auto w-full max-w-(--thread-max-width) animate-in py-3 duration-150\"\n data-role=\"assistant\"\n >\n <div className=\"aui-assistant-message-content wrap-break-word px-2 text-foreground leading-relaxed\">\n <MessagePrimitive.Parts\n components={{\n Text: MarkdownText,\n tools: { Fallback: ToolFallback },\n }}\n />\n <MessagePrimitive.Error>\n <div className=\"mt-2 rounded-md border border-destructive bg-destructive/10 p-3 text-destructive text-sm\">\n <MessagePrimitive.Error />\n </div>\n </MessagePrimitive.Error>\n </div>\n </MessagePrimitive.Root>\n );\n};\n\nconst ReadOnlyUserMessage: FC = () => {\n return (\n <MessagePrimitive.Root\n className=\"aui-user-message-root fade-in slide-in-from-bottom-1 mx-auto grid w-full max-w-(--thread-max-width) animate-in auto-rows-auto grid-cols-[minmax(72px,1fr)_auto] content-start gap-y-2 px-2 py-3 duration-150 [&:where(>*)]:col-start-2\"\n data-role=\"user\"\n >\n <UserMessageAttachments />\n\n <div className=\"aui-user-message-content-wrapper relative col-start-2 min-w-0\">\n <div className=\"aui-user-message-content wrap-break-word rounded-2xl bg-muted px-4 py-2.5 text-foreground\">\n <UserMessageContent />\n </div>\n </div>\n </MessagePrimitive.Root>\n );\n};\n"]}