@usecrow/ui 0.1.10 → 0.1.11
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/index.cjs +140 -64
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +140 -64
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils.ts","../src/constants.ts","../src/hooks/useChat.ts","../src/hooks/useConversations.ts","../src/hooks/useWorkflow.ts","../src/hooks/useCrowAPI.ts","../src/styles/defaults.ts","../src/styles/utils.ts","../src/hooks/useWidgetStyles.ts","../src/context/StyleContext.tsx","../src/components/ShadowContainer.tsx","../src/components/widget/ChatBubble.tsx","../src/components/widget/WidgetShell.tsx","../src/components/widget/WidgetHeader.tsx","../src/components/shared/StreamingText.tsx","../src/components/shared/ThinkingIndicator.tsx","../src/components/shared/LoadingHistory.tsx","../src/components/shared/ReasoningTrace.tsx","../src/components/shared/MessageBubble.tsx","../src/components/shared/MessageList.tsx","../src/components/shared/MessagesContainer.tsx","../src/components/shared/ConversationList.tsx","../src/components/shared/WorkflowPanel.tsx","../src/components/shared/PoweredByBadge.tsx","../src/components/shared/ModelSelector.tsx","../src/components/shared/PromptInputBox.tsx","../src/styles/cssVars.ts","../src/styles/inject.ts","../src/CrowWidget.tsx","../src/CrowCopilot.tsx","../src/CrowProvider.tsx"],"names":["useState","useCallback","useRef","useEffect","useWidgetStyles","useCopilotStyles","jsx","jsxs","ChevronDown","Fragment","motion","ReactMarkdown","forwardRef","Check","React","AnimatePresence","createContext","useMemo"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Utility functions\n */\n\n/**\n * Merge class names, filtering out falsy values\n */\nexport const cn = (...classes: (string | undefined | null | false)[]): string =>\n classes.filter(Boolean).join(\" \");\n\n/**\n * Format timestamp for display\n */\nexport const formatTime = (date: Date): string =>\n date.toLocaleTimeString(\"en-US\", {\n hour: \"numeric\",\n minute: \"2-digit\",\n });\n\n/**\n * Format conversation date for display\n */\nexport const formatConversationDate = (dateStr: string): string => {\n const date = new Date(dateStr);\n const now = new Date();\n const diffDays = Math.floor(\n (now.getTime() - date.getTime()) / (1000 * 60 * 60 * 24)\n );\n\n if (diffDays === 0) return \"Today\";\n if (diffDays === 1) return \"Yesterday\";\n if (diffDays < 7) return `${diffDays} days ago`;\n return date.toLocaleDateString();\n};\n\n/**\n * Generate unique message ID\n */\nexport const generateMessageId = (prefix: \"user\" | \"bot\" | \"welcome\" | \"history\"): string =>\n `${prefix}-${Date.now()}`;\n","/**\n * Static configuration values\n */\n\nimport type { Model } from \"./types\";\n\nexport const AVAILABLE_MODELS: Model[] = [\n { id: \"gpt-4o\", name: \"GPT-4o\", provider: \"OpenAI\" },\n { id: \"gpt-5-mini\", name: \"GPT-5 Mini\", provider: \"OpenAI\" },\n { id: \"gpt-5.2\", name: \"GPT-5.2\", provider: \"OpenAI\" },\n { id: \"gpt-5.2-pro\", name: \"GPT-5.2 Pro\", provider: \"OpenAI\" },\n { id: \"claude-haiku-4-5-20251001\", name: \"Haiku 4.5\", provider: \"Anthropic\" },\n { id: \"claude-sonnet-4-5-20250929\", name: \"Sonnet 4.5\", provider: \"Anthropic\" },\n { id: \"claude-opus-4-5-20251203\", name: \"Opus 4.5\", provider: \"Anthropic\" },\n];\n\nexport const DEFAULT_MODEL = \"claude-sonnet-4-5-20250929\";\n\nexport const DEFAULT_WELCOME_MESSAGE = \"Hi! How can I help you today?\";\n\nexport const MESSAGES_CONTAINER_ID = \"crow-messages-container\";\n","/**\n * useChat - Manages chat state and streaming\n */\n\nimport { useState, useRef, useCallback, useEffect } from \"react\";\nimport type { Message, ToolCall } from \"../types\";\nimport { generateMessageId } from \"../utils\";\nimport { DEFAULT_WELCOME_MESSAGE, DEFAULT_MODEL } from \"../constants\";\n\ninterface WorkflowEvent {\n type: \"started\" | \"todo_updated\" | \"ended\" | \"complete_prompt\";\n name?: string;\n todos?: Array<{ id: string; text: string; status: \"pending\" | \"completed\" }>;\n todoId?: string;\n todoStatus?: \"pending\" | \"completed\";\n}\n\ninterface ToolCallEvent {\n type: \"start\" | \"complete\" | \"client_call\";\n toolName: string;\n toolCallId?: string; // Unique ID for client-side tool calls (to send results back)\n arguments?: Record<string, unknown>;\n success?: boolean;\n}\n\ninterface UseChatOptions {\n productId: string;\n apiUrl?: string;\n onVerificationStatus?: (isVerified: boolean) => void;\n onConversationId?: (id: string) => void;\n onWorkflowEvent?: (event: WorkflowEvent) => void;\n onToolCall?: (toolCall: ToolCallEvent) => void;\n onRestoredConversation?: (conversationId: string) => void;\n}\n\nconst getConversationStorageKey = (productId: string) => `crow_conv_${productId}`;\n\nexport function useChat({\n productId,\n apiUrl = \"\",\n onVerificationStatus,\n onConversationId,\n onWorkflowEvent,\n onToolCall,\n onRestoredConversation,\n}: UseChatOptions) {\n const [messages, setMessages] = useState<Message[]>([\n {\n id: \"welcome\",\n content: DEFAULT_WELCOME_MESSAGE,\n isBot: true,\n timestamp: new Date(),\n },\n ]);\n const [isLoading, setIsLoading] = useState(false);\n const [activeToolCalls, setActiveToolCalls] = useState<ToolCall[]>([]);\n const [conversationId, setConversationId] = useState<string | null>(() => {\n try {\n return localStorage.getItem(getConversationStorageKey(productId));\n } catch {\n return null;\n }\n });\n const [selectedModel, setSelectedModel] = useState(DEFAULT_MODEL);\n\n const abortControllerRef = useRef<AbortController | null>(null);\n const hasRestoredRef = useRef(false);\n\n useEffect(() => {\n if (conversationId && onRestoredConversation && !hasRestoredRef.current) {\n hasRestoredRef.current = true;\n onRestoredConversation(conversationId);\n }\n }, []);\n\n const streamFromBackend = useCallback(\n async (message: string, botMsgId: string) => {\n let accumulatedText = \"\";\n let firstChunk = true;\n // Queue client tool calls to execute after stream completes\n const pendingClientTools: Array<{\n toolName: string;\n toolCallId: string;\n arguments: Record<string, unknown>;\n }> = [];\n\n abortControllerRef.current = new AbortController();\n\n try {\n const identityToken = window.__crow_identity_token;\n\n const response = await fetch(`${apiUrl}/api/chat/message`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n product_id: productId,\n message,\n conversation_id: conversationId,\n identity_token: identityToken,\n model: selectedModel,\n }),\n signal: abortControllerRef.current.signal,\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const reader = response.body?.getReader();\n const decoder = new TextDecoder();\n\n if (reader) {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n const chunk = decoder.decode(value);\n const lines = chunk.split(\"\\n\");\n\n for (const line of lines) {\n if (line.startsWith(\"data: \")) {\n const data = line.slice(6).trim();\n if (data === \"[DONE]\") {\n setIsLoading(false);\n // Execute queued client tool calls after stream completes\n for (const tool of pendingClientTools) {\n onToolCall?.({\n type: \"client_call\",\n toolName: tool.toolName,\n toolCallId: tool.toolCallId,\n arguments: tool.arguments,\n });\n }\n return;\n }\n\n try {\n const parsed = JSON.parse(data);\n\n switch (parsed.type) {\n case \"verification_status\":\n onVerificationStatus?.(parsed.is_verified === true);\n break;\n\n case \"conversation_id\":\n if (parsed.conversation_id) {\n setConversationId(parsed.conversation_id);\n try {\n localStorage.setItem(\n getConversationStorageKey(productId),\n parsed.conversation_id\n );\n } catch {\n // localStorage may be unavailable\n }\n onConversationId?.(parsed.conversation_id);\n }\n break;\n\n case \"thinking\":\n if (parsed.status === \"complete\") {\n setMessages((prev) =>\n prev.map((msg) =>\n msg.id === botMsgId\n ? { ...msg, thinkingComplete: true }\n : msg\n )\n );\n }\n break;\n\n case \"thinking_token\":\n if (parsed.content) {\n setMessages((prev) =>\n prev.map((msg) =>\n msg.id === botMsgId\n ? { ...msg, thinking: (msg.thinking || \"\") + parsed.content }\n : msg\n )\n );\n }\n break;\n\n case \"content\":\n if (firstChunk) firstChunk = false;\n accumulatedText += parsed.content;\n setMessages((prev) =>\n prev.map((msg) =>\n msg.id === botMsgId\n ? { ...msg, content: accumulatedText }\n : msg\n )\n );\n break;\n\n case \"citations\":\n if (parsed.citations) {\n setMessages((prev) =>\n prev.map((msg) =>\n msg.id === botMsgId\n ? { ...msg, citations: parsed.citations }\n : msg\n )\n );\n }\n break;\n\n case \"error\":\n if (parsed.message) {\n setMessages((prev) =>\n prev.map((msg) =>\n msg.id === botMsgId\n ? { ...msg, content: parsed.message }\n : msg\n )\n );\n }\n break;\n\n case \"tool_call_start\":\n onToolCall?.({\n type: \"start\",\n toolName: parsed.tool_name,\n arguments: parsed.arguments,\n });\n setActiveToolCalls((prev) => [\n ...prev,\n {\n id: `tool-${Date.now()}`,\n name: parsed.tool_name,\n arguments: parsed.arguments || {},\n status: \"executing\",\n timestamp: new Date(),\n },\n ]);\n break;\n\n case \"tool_call_complete\":\n onToolCall?.({\n type: \"complete\",\n toolName: parsed.tool_name,\n success: parsed.success,\n });\n setActiveToolCalls((prev) =>\n prev.map((tool) =>\n tool.name === parsed.tool_name\n ? { ...tool, status: parsed.success ? \"complete\" : \"error\" }\n : tool\n )\n );\n break;\n\n case \"client_tool_call\":\n // Queue for execution after stream completes\n pendingClientTools.push({\n toolName: parsed.tool_name,\n toolCallId: parsed.tool_call_id,\n arguments: parsed.arguments,\n });\n break;\n\n case \"workflow_started\":\n onWorkflowEvent?.({\n type: \"started\",\n name: parsed.name,\n todos: parsed.todos,\n });\n break;\n\n case \"todo_updated\":\n onWorkflowEvent?.({\n type: \"todo_updated\",\n todoId: parsed.id,\n todoStatus: parsed.status,\n });\n break;\n\n case \"workflow_ended\":\n onWorkflowEvent?.({ type: \"ended\" });\n break;\n\n case \"workflow_complete_prompt\":\n onWorkflowEvent?.({ type: \"complete_prompt\" });\n break;\n }\n } catch (e) {\n console.error(\"[Crow] Parse error:\", e);\n }\n }\n }\n }\n }\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n if (accumulatedText) {\n setMessages((prev) =>\n prev.map((msg) =>\n msg.id === botMsgId ? { ...msg, content: accumulatedText } : msg\n )\n );\n } else {\n setMessages((prev) => prev.filter((msg) => msg.id !== botMsgId));\n }\n return;\n }\n\n console.error(\"[Crow] Error:\", error);\n setMessages((prev) =>\n prev.map((msg) =>\n msg.id === botMsgId\n ? { ...msg, content: \"Sorry, I encountered an error. Please try again.\" }\n : msg\n )\n );\n } finally {\n setIsLoading(false);\n abortControllerRef.current = null;\n }\n },\n [apiUrl, productId, conversationId, selectedModel, onVerificationStatus, onConversationId, onWorkflowEvent, onToolCall]\n );\n\n const sendMessage = useCallback(\n (content: string): { userMsgId: string; botMsgId: string } => {\n if (!content.trim()) {\n return { userMsgId: \"\", botMsgId: \"\" };\n }\n\n setActiveToolCalls([]);\n\n const userMsgId = generateMessageId(\"user\");\n const botMsgId = generateMessageId(\"bot\");\n\n setMessages((prev) => [\n ...prev,\n {\n id: userMsgId,\n content,\n isBot: false,\n timestamp: new Date(),\n },\n ]);\n\n setIsLoading(true);\n\n setMessages((prev) => [\n ...prev,\n {\n id: botMsgId,\n content: \"Thinking...\",\n isBot: true,\n timestamp: new Date(),\n },\n ]);\n\n streamFromBackend(content, botMsgId);\n\n return { userMsgId, botMsgId };\n },\n [streamFromBackend]\n );\n\n const stopGeneration = useCallback(() => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n setIsLoading(false);\n }\n }, []);\n\n const resetMessages = useCallback(() => {\n setMessages([\n {\n id: \"welcome\",\n content: DEFAULT_WELCOME_MESSAGE,\n isBot: true,\n timestamp: new Date(),\n },\n ]);\n setConversationId(null);\n try {\n localStorage.removeItem(getConversationStorageKey(productId));\n } catch {\n // localStorage may be unavailable\n }\n }, [productId]);\n\n const loadMessages = useCallback((historyMessages: Message[]) => {\n setMessages(historyMessages);\n }, []);\n\n /**\n * Submit the result of a client-side tool execution back to the agent.\n * The agent will receive this result and can continue the conversation.\n */\n const submitToolResult = useCallback(\n async (\n toolCallId: string,\n toolName: string,\n result: Record<string, unknown>\n ) => {\n if (!conversationId) {\n console.error(\"[Crow] Cannot submit tool result: no conversation ID\");\n return;\n }\n\n const botMsgId = generateMessageId(\"bot\");\n // Queue for any follow-up tool calls (e.g., if agent retries)\n const pendingClientTools: Array<{\n toolName: string;\n toolCallId: string;\n arguments: Record<string, unknown>;\n }> = [];\n\n // Add placeholder for agent response\n setMessages((prev) => [\n ...prev,\n {\n id: botMsgId,\n content: \"\",\n isBot: true,\n timestamp: new Date(),\n },\n ]);\n\n setIsLoading(true);\n\n try {\n const identityToken = window.__crow_identity_token;\n\n const response = await fetch(`${apiUrl}/api/chat/tool-result`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n product_id: productId,\n conversation_id: conversationId,\n tool_call_id: toolCallId,\n tool_name: toolName,\n result,\n identity_token: identityToken,\n model: selectedModel,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const reader = response.body?.getReader();\n const decoder = new TextDecoder();\n let accumulatedText = \"\";\n\n if (reader) {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n const chunk = decoder.decode(value);\n const lines = chunk.split(\"\\n\");\n\n for (const line of lines) {\n if (line.startsWith(\"data: \")) {\n const data = line.slice(6).trim();\n if (data === \"[DONE]\") {\n setIsLoading(false);\n // Execute any queued tool calls (agent retries)\n for (const tool of pendingClientTools) {\n onToolCall?.({\n type: \"client_call\",\n toolName: tool.toolName,\n toolCallId: tool.toolCallId,\n arguments: tool.arguments,\n });\n }\n return;\n }\n\n try {\n const parsed = JSON.parse(data);\n\n if (parsed.type === \"content\") {\n accumulatedText += parsed.content;\n setMessages((prev) =>\n prev.map((msg) =>\n msg.id === botMsgId\n ? { ...msg, content: accumulatedText }\n : msg\n )\n );\n } else if (parsed.type === \"client_tool_call\") {\n // Queue for execution after stream completes\n pendingClientTools.push({\n toolName: parsed.tool_name,\n toolCallId: parsed.tool_call_id,\n arguments: parsed.arguments,\n });\n }\n } catch (e) {\n console.error(\"[Crow] Parse error in tool result response:\", e);\n }\n }\n }\n }\n }\n } catch (error) {\n console.error(\"[Crow] Error submitting tool result:\", error);\n setMessages((prev) =>\n prev.map((msg) =>\n msg.id === botMsgId\n ? { ...msg, content: \"Sorry, I encountered an error processing the tool result.\" }\n : msg\n )\n );\n } finally {\n setIsLoading(false);\n }\n },\n [apiUrl, productId, conversationId, selectedModel]\n );\n\n return {\n messages,\n isLoading,\n activeToolCalls,\n conversationId,\n selectedModel,\n setSelectedModel,\n setConversationId,\n sendMessage,\n stopGeneration,\n resetMessages,\n loadMessages,\n submitToolResult,\n };\n}\n","/**\n * useConversations - Manages conversation list and history\n */\n\nimport { useState, useCallback } from \"react\";\nimport type { Conversation, Message } from \"../types\";\n\ninterface UseConversationsOptions {\n productId: string;\n apiUrl?: string;\n}\n\nexport function useConversations({ productId, apiUrl = \"\" }: UseConversationsOptions) {\n const [conversations, setConversations] = useState<Conversation[]>([]);\n const [isLoadingHistory, setIsLoadingHistory] = useState(false);\n\n const loadConversations = useCallback(async () => {\n const token = window.__crow_identity_token;\n if (!token) return;\n\n try {\n const res = await fetch(\n `${apiUrl}/api/chat/conversations?product_id=${productId}&identity_token=${encodeURIComponent(token)}`\n );\n if (res.ok) {\n const data = await res.json();\n setConversations(data.conversations || []);\n }\n } catch (error) {\n console.error(\"[Crow] Failed to load conversations:\", error);\n }\n }, [apiUrl, productId]);\n\n const loadConversationHistory = useCallback(\n async (conversationId: string): Promise<Message[]> => {\n const token = window.__crow_identity_token;\n if (!token) return [];\n\n setIsLoadingHistory(true);\n\n try {\n const res = await fetch(\n `${apiUrl}/api/chat/conversations/${conversationId}/history?product_id=${productId}&identity_token=${encodeURIComponent(token)}`\n );\n\n if (res.ok) {\n const data = await res.json();\n const historyMessages = data.messages || [];\n\n return historyMessages\n .filter((msg: { role: string; content: string }) => \n msg.role !== \"tool\" && !msg.content.startsWith(\"[Client Tool Result:\")\n )\n .map((msg: { role: string; content: string }, idx: number) => ({\n id: `history-${idx}`,\n content: msg.content,\n isBot: msg.role === \"assistant\",\n timestamp: new Date(),\n }));\n }\n } catch (error) {\n console.error(\"[Crow] Error loading conversation history:\", error);\n } finally {\n setIsLoadingHistory(false);\n }\n\n return [];\n },\n [apiUrl, productId]\n );\n\n const loadAnonymousConversationHistory = useCallback(\n async (conversationId: string): Promise<Message[]> => {\n setIsLoadingHistory(true);\n\n try {\n const res = await fetch(\n `${apiUrl}/api/chat/conversations/${conversationId}/history/anonymous?product_id=${productId}`\n );\n\n if (res.ok) {\n const data = await res.json();\n const historyMessages = data.messages || [];\n\n return historyMessages\n .filter((msg: { role: string; content: string }) => \n msg.role !== \"tool\" && !msg.content.startsWith(\"[Client Tool Result:\")\n )\n .map((msg: { role: string; content: string }, idx: number) => ({\n id: `history-${idx}`,\n content: msg.content,\n isBot: msg.role === \"assistant\",\n timestamp: new Date(),\n }));\n }\n } catch (error) {\n console.error(\"[Crow] Error loading anonymous conversation history:\", error);\n } finally {\n setIsLoadingHistory(false);\n }\n\n return [];\n },\n [apiUrl, productId]\n );\n\n return {\n conversations,\n isLoadingHistory,\n loadConversations,\n loadConversationHistory,\n loadAnonymousConversationHistory,\n };\n}\n","/**\n * useWorkflow - Manages workflow state and actions\n */\n\n//THIS IS JOURNEYS\n\nimport { useState, useCallback, useRef } from \"react\";\nimport type { ActiveWorkflow } from \"../types\";\n\ninterface UseWorkflowOptions {\n productId: string;\n apiUrl?: string;\n conversationId: string | null;\n selectedModel: string;\n onMessage?: (content: string) => void;\n}\n\nexport function useWorkflow({\n productId,\n apiUrl = \"\",\n conversationId,\n selectedModel,\n onMessage,\n}: UseWorkflowOptions) {\n const [activeWorkflow, setActiveWorkflow] = useState<ActiveWorkflow | null>(null);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n const startWorkflow = useCallback((name: string, todos: ActiveWorkflow[\"todos\"]) => {\n setActiveWorkflow({ name, todos });\n }, []);\n\n const updateTodo = useCallback((todoId: string, status: \"pending\" | \"completed\") => {\n setActiveWorkflow((prev) => {\n if (!prev) return null;\n return {\n ...prev,\n todos: prev.todos.map((todo) =>\n todo.id === todoId ? { ...todo, status } : todo\n ),\n };\n });\n }, []);\n\n const markComplete = useCallback(() => {\n setActiveWorkflow((prev) => {\n if (!prev) return null;\n return { ...prev, isComplete: true };\n });\n }, []);\n\n const endWorkflow = useCallback((delay: number = 0) => {\n if (delay > 0) {\n setTimeout(() => setActiveWorkflow(null), delay);\n } else {\n setActiveWorkflow(null);\n }\n }, []);\n\n const exitWorkflow = useCallback(async () => {\n abortControllerRef.current = new AbortController();\n\n try {\n const identityToken = window.__crow_identity_token;\n\n const response = await fetch(`${apiUrl}/api/chat/message`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n product_id: productId,\n message: \"[EXIT_WORKFLOW]\",\n conversation_id: conversationId,\n identity_token: identityToken,\n model: selectedModel,\n }),\n signal: abortControllerRef.current.signal,\n });\n\n if (!response.ok) return;\n\n const reader = response.body?.getReader();\n const decoder = new TextDecoder();\n\n if (reader) {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n const chunk = decoder.decode(value);\n const lines = chunk.split(\"\\n\");\n\n for (const line of lines) {\n if (line.startsWith(\"data: \")) {\n const data = line.slice(6).trim();\n if (data === \"[DONE]\") return;\n\n try {\n const parsed = JSON.parse(data);\n if (parsed.type === \"workflow_ended\") {\n setActiveWorkflow(null);\n }\n if (parsed.type === \"content\" && parsed.content) {\n onMessage?.(parsed.content);\n }\n } catch {\n // Ignore parse errors\n }\n }\n }\n }\n }\n } catch (error) {\n console.error(\"[Crow] Exit workflow error:\", error);\n } finally {\n abortControllerRef.current = null;\n }\n }, [apiUrl, productId, conversationId, selectedModel, onMessage]);\n\n return {\n activeWorkflow,\n startWorkflow,\n updateTodo,\n markComplete,\n endWorkflow,\n exitWorkflow,\n };\n}\n","/**\n * useCrowAPI - Sets up window.crow() API for identity and tools\n */\n\nimport { useEffect, useCallback, useRef } from \"react\";\nimport type { ClientToolHandler } from \"../types\";\n\ninterface UseCrowAPIOptions {\n onIdentified?: () => void;\n onReset?: () => void;\n}\n\nexport function useCrowAPI({ onIdentified, onReset }: UseCrowAPIOptions = {}) {\n const onIdentifiedRef = useRef(onIdentified);\n const onResetRef = useRef(onReset);\n const hasCalledInitialRef = useRef(false);\n\n useEffect(() => {\n onIdentifiedRef.current = onIdentified;\n onResetRef.current = onReset;\n });\n\n useEffect(() => {\n window.crow = function (command: string, options?: unknown) {\n const opts = options as Record<string, unknown> | undefined;\n\n switch (command) {\n case \"identify\":\n if (!opts?.token) {\n console.error(\"[Crow] identify() requires a token\");\n return;\n }\n\n window.__crow_identity_token = opts.token as string;\n\n const { token, ...metadata } = opts;\n window.__crow_public_metadata = metadata;\n\n console.log(\"[Crow] User identified\");\n window.dispatchEvent(\n new CustomEvent(\"crow:identified\", { detail: { token, metadata } })\n );\n break;\n\n case \"resetUser\":\n window.__crow_identity_token = undefined;\n window.__crow_public_metadata = undefined;\n console.log(\"[Crow] User reset\");\n window.dispatchEvent(new CustomEvent(\"crow:reset\"));\n break;\n\n case \"registerTools\":\n if (!opts || typeof opts !== \"object\") {\n console.error(\"[Crow] registerTools() requires an object\");\n return;\n }\n\n if (!window.__crow_client_tools) {\n window.__crow_client_tools = {};\n }\n\n for (const [toolName, handler] of Object.entries(opts)) {\n if (typeof handler === \"function\") {\n window.__crow_client_tools[toolName] = handler as ClientToolHandler;\n console.log(`[Crow] Registered tool: ${toolName}`);\n }\n }\n break;\n\n case \"runJourney\":\n if (!opts?.journeyId) {\n console.error(\"[Crow] runJourney() requires a journeyId\");\n return;\n }\n window.dispatchEvent(\n new CustomEvent(\"crow:runJourney\", {\n detail: { journeyId: opts.journeyId, inputs: opts.inputs || {} },\n })\n );\n break;\n\n default:\n console.warn(`[Crow] Unknown command: ${command}`);\n }\n };\n\n console.log(\"[Crow] API ready\");\n\n const handleIdentified = () => onIdentifiedRef.current?.();\n const handleReset = () => onResetRef.current?.();\n\n window.addEventListener(\"crow:identified\", handleIdentified);\n window.addEventListener(\"crow:reset\", handleReset);\n\n if (window.__crow_identity_token && !hasCalledInitialRef.current) {\n hasCalledInitialRef.current = true;\n onIdentifiedRef.current?.();\n }\n\n return () => {\n window.removeEventListener(\"crow:identified\", handleIdentified);\n window.removeEventListener(\"crow:reset\", handleReset);\n };\n }, []);\n\n const executeClientTool = useCallback(\n async (toolName: string, args: Record<string, unknown>) => {\n const handler = window.__crow_client_tools?.[toolName];\n if (handler) {\n try {\n return await handler(args);\n } catch (err) {\n console.error(`[Crow] Client tool error: ${toolName}`, err);\n return { status: \"error\", error: String(err) };\n }\n }\n console.warn(`[Crow] No handler for: ${toolName}`);\n return { status: \"error\", error: \"No handler registered\" };\n },\n []\n );\n\n return { executeClientTool };\n}\n","/**\n * Default Widget and Copilot Styles\n * \n * These are the default values used when no custom styles are provided.\n * All values can be overridden via the Supabase database or SDK props.\n */\n\nimport type { ResolvedWidgetStyles, ResolvedCopilotStyles } from './types';\n\n/**\n * Default widget styles - matches the mature widget implementation\n */\nexport const DEFAULT_WIDGET_STYLES: ResolvedWidgetStyles = {\n // ═══════════════════════════════════════════════════════════\n // COLORS\n // ═══════════════════════════════════════════════════════════\n colors: {\n // Primary accent\n primary: '#000000',\n \n // Widget container\n background: 'rgba(255, 255, 255, 0.95)',\n border: '#d1d5db',\n text: '#111827',\n\n // Bot messages\n botBubble: '#000000',\n botText: '#ffffff',\n\n // User messages\n userBubble: '#ffffff',\n userText: '#000000',\n userBorder: '#000000',\n\n // Floating chat bubble\n bubbleBackground: '#ffffff',\n bubbleBorder: '#d1d5db',\n bubbleIcon: '#111827',\n\n // Messages container\n messagesBackground: 'rgba(255, 255, 255, 0.5)',\n },\n\n // ═══════════════════════════════════════════════════════════\n // TYPOGRAPHY\n // ═══════════════════════════════════════════════════════════\n typography: {\n fontFamily: 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: 14,\n headerFontSize: 16,\n fontWeight: 400,\n lineHeight: 1.5,\n letterSpacing: 0,\n },\n\n // ═══════════════════════════════════════════════════════════\n // ANIMATIONS\n // ═══════════════════════════════════════════════════════════\n animations: {\n duration: 0.3,\n easing: 'easeInOut',\n },\n\n // ═══════════════════════════════════════════════════════════\n // DIMENSIONS\n // ═══════════════════════════════════════════════════════════\n dimensions: {\n width: 400,\n maxHeight: 600,\n messagesMaxHeight: 350,\n borderRadius: 24,\n padding: 20,\n },\n\n // ═══════════════════════════════════════════════════════════\n // POSITIONING (floating widget only)\n // ═══════════════════════════════════════════════════════════\n position: {\n right: 16,\n bottom: 80,\n bubbleRight: 16,\n bubbleBottom: 16,\n },\n\n // ═══════════════════════════════════════════════════════════\n // CHAT BUBBLE (floating button)\n // ═══════════════════════════════════════════════════════════\n bubble: {\n size: 48,\n iconSize: 24,\n },\n\n // ═══════════════════════════════════════════════════════════\n // SHADOWS\n // ═══════════════════════════════════════════════════════════\n shadows: {\n widget: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n bubble: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n },\n\n // ═══════════════════════════════════════════════════════════\n // BRANDING\n // ═══════════════════════════════════════════════════════════\n branding: {\n showPoweredBy: true,\n poweredByText: 'Powered by Crow',\n showLogo: true,\n logoUrl: '/static/crow.png',\n },\n};\n\n/**\n * Default copilot styles\n */\nexport const DEFAULT_COPILOT_STYLES: ResolvedCopilotStyles = {\n // ═══════════════════════════════════════════════════════════\n // COLORS (same as widget by default)\n // ═══════════════════════════════════════════════════════════\n colors: {\n primary: '#000000',\n background: 'rgba(255, 255, 255, 0.95)',\n border: '#d1d5db',\n text: '#111827',\n botBubble: '#000000',\n botText: '#ffffff',\n userBubble: '#ffffff',\n userText: '#000000',\n userBorder: '#000000',\n bubbleBackground: '#ffffff',\n bubbleBorder: '#d1d5db',\n bubbleIcon: '#111827',\n messagesBackground: 'rgba(255, 255, 255, 0.5)',\n },\n\n // ═══════════════════════════════════════════════════════════\n // TYPOGRAPHY\n // ═══════════════════════════════════════════════════════════\n typography: {\n fontFamily: 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: 14,\n headerFontSize: 16,\n fontWeight: 400,\n lineHeight: 1.5,\n letterSpacing: 0,\n },\n\n // ═══════════════════════════════════════════════════════════\n // ANIMATIONS\n // ═══════════════════════════════════════════════════════════\n animations: {\n duration: 0.3,\n easing: 'easeInOut',\n },\n\n // ═══════════════════════════════════════════════════════════\n // DIMENSIONS\n // ═══════════════════════════════════════════════════════════\n dimensions: {\n width: 400,\n headerHeight: 56,\n borderRadius: 16,\n padding: 16,\n },\n\n // ═══════════════════════════════════════════════════════════\n // POSITIONING\n // ═══════════════════════════════════════════════════════════\n position: {\n side: 'right',\n },\n\n // ═══════════════════════════════════════════════════════════\n // BRANDING\n // ═══════════════════════════════════════════════════════════\n branding: {\n showPoweredBy: true,\n poweredByText: 'Powered by Crow',\n },\n};\n","/**\n * Style Merging Utilities\n * \n * Functions for deep merging style configurations with proper precedence:\n * defaults < DB styles < SDK props\n */\n\nimport type {\n WidgetStyleConfig,\n CopilotStyleConfig,\n ResolvedWidgetStyles,\n ResolvedCopilotStyles,\n} from './types';\nimport { DEFAULT_WIDGET_STYLES, DEFAULT_COPILOT_STYLES } from './defaults';\n\n/**\n * Deep merge two objects, with source values taking precedence.\n * Only merges plain objects, not arrays.\n */\nfunction deepMerge<T extends Record<string, unknown>>(\n target: T,\n source: Partial<T> | undefined\n): T {\n if (!source) return target;\n\n const result = { ...target };\n\n for (const key of Object.keys(source) as Array<keyof T>) {\n const sourceValue = source[key];\n const targetValue = target[key];\n\n if (\n sourceValue !== undefined &&\n sourceValue !== null &&\n typeof sourceValue === 'object' &&\n !Array.isArray(sourceValue) &&\n typeof targetValue === 'object' &&\n !Array.isArray(targetValue)\n ) {\n // Recursively merge nested objects\n result[key] = deepMerge(\n targetValue as Record<string, unknown>,\n sourceValue as Record<string, unknown>\n ) as T[keyof T];\n } else if (sourceValue !== undefined) {\n // Override with source value\n result[key] = sourceValue as T[keyof T];\n }\n }\n\n return result;\n}\n\n/**\n * Merge widget styles with precedence: defaults < dbStyles < propStyles\n * \n * @param dbStyles - Styles fetched from the database (per product)\n * @param propStyles - Styles passed via SDK props (developer overrides)\n * @returns Fully resolved styles with all defaults applied\n * \n * @example\n * ```tsx\n * const styles = mergeWidgetStyles(\n * { colors: { primary: '#blue' } }, // from DB\n * { colors: { primary: '#red' } } // from props - wins!\n * );\n * // styles.colors.primary === '#red'\n * ```\n */\nexport function mergeWidgetStyles(\n dbStyles?: WidgetStyleConfig,\n propStyles?: WidgetStyleConfig\n): ResolvedWidgetStyles {\n // Start with defaults\n let result = { ...DEFAULT_WIDGET_STYLES };\n\n // Apply DB styles (overrides defaults)\n if (dbStyles) {\n result = {\n colors: deepMerge(result.colors, dbStyles.colors),\n typography: deepMerge(result.typography, dbStyles.typography),\n animations: deepMerge(result.animations, dbStyles.animations),\n dimensions: deepMerge(result.dimensions, dbStyles.dimensions),\n position: deepMerge(result.position, dbStyles.position),\n bubble: deepMerge(result.bubble, dbStyles.bubble),\n shadows: deepMerge(result.shadows, dbStyles.shadows),\n branding: deepMerge(result.branding, dbStyles.branding),\n };\n }\n\n // Apply prop styles (overrides DB styles)\n if (propStyles) {\n result = {\n colors: deepMerge(result.colors, propStyles.colors),\n typography: deepMerge(result.typography, propStyles.typography),\n animations: deepMerge(result.animations, propStyles.animations),\n dimensions: deepMerge(result.dimensions, propStyles.dimensions),\n position: deepMerge(result.position, propStyles.position),\n bubble: deepMerge(result.bubble, propStyles.bubble),\n shadows: deepMerge(result.shadows, propStyles.shadows),\n branding: deepMerge(result.branding, propStyles.branding),\n };\n }\n\n return result;\n}\n\n/**\n * Merge copilot styles with precedence: defaults < dbStyles < propStyles\n * \n * @param dbStyles - Styles fetched from the database (per product)\n * @param propStyles - Styles passed via SDK props (developer overrides)\n * @returns Fully resolved styles with all defaults applied\n */\nexport function mergeCopilotStyles(\n dbStyles?: CopilotStyleConfig,\n propStyles?: CopilotStyleConfig\n): ResolvedCopilotStyles {\n // Start with defaults\n let result = { ...DEFAULT_COPILOT_STYLES };\n\n // Apply DB styles (overrides defaults)\n if (dbStyles) {\n result = {\n colors: deepMerge(result.colors, dbStyles.colors),\n typography: deepMerge(result.typography, dbStyles.typography),\n animations: deepMerge(result.animations, dbStyles.animations),\n dimensions: deepMerge(result.dimensions, dbStyles.dimensions),\n position: deepMerge(result.position, dbStyles.position),\n branding: deepMerge(result.branding, dbStyles.branding),\n };\n }\n\n // Apply prop styles (overrides DB styles)\n if (propStyles) {\n result = {\n colors: deepMerge(result.colors, propStyles.colors),\n typography: deepMerge(result.typography, propStyles.typography),\n animations: deepMerge(result.animations, propStyles.animations),\n dimensions: deepMerge(result.dimensions, propStyles.dimensions),\n position: deepMerge(result.position, propStyles.position),\n branding: deepMerge(result.branding, propStyles.branding),\n };\n }\n\n return result;\n}\n\n/**\n * Convert styles to CSS custom properties for use with CSS variables\n * \n * @example\n * ```tsx\n * const cssVars = stylesToCSSVariables(styles);\n * // { '--crow-primary': '#000', '--crow-bg': '#fff', ... }\n * ```\n */\nexport function stylesToCSSVariables(\n styles: ResolvedWidgetStyles | ResolvedCopilotStyles\n): Record<string, string | number> {\n return {\n // Colors\n '--crow-color-primary': styles.colors.primary,\n '--crow-color-background': styles.colors.background,\n '--crow-color-text': styles.colors.text,\n '--crow-color-border': styles.colors.border,\n '--crow-color-bot-bubble': styles.colors.botBubble,\n '--crow-color-bot-text': styles.colors.botText,\n '--crow-color-user-bubble': styles.colors.userBubble,\n '--crow-color-user-text': styles.colors.userText,\n '--crow-color-user-border': styles.colors.userBorder,\n '--crow-color-messages-bg': styles.colors.messagesBackground,\n \n // Typography\n '--crow-font-family': styles.typography.fontFamily,\n '--crow-font-size': `${styles.typography.fontSize}px`,\n '--crow-header-font-size': `${styles.typography.headerFontSize}px`,\n '--crow-font-weight': `${styles.typography.fontWeight}`,\n '--crow-line-height': `${styles.typography.lineHeight}`,\n '--crow-letter-spacing': `${styles.typography.letterSpacing}px`,\n \n // Animations\n '--crow-animation-duration': `${styles.animations.duration}s`,\n '--crow-animation-easing': styles.animations.easing,\n };\n}\n","/**\n * useWidgetStyles Hook\n * \n * Fetches widget/copilot styles from the API and merges them with defaults and props.\n * Handles caching to avoid redundant fetches.\n */\n\nimport { useState, useEffect, useRef } from 'react';\nimport type {\n WidgetStyleConfig,\n CopilotStyleConfig,\n ResolvedWidgetStyles,\n ResolvedCopilotStyles,\n WidgetConfigResponse,\n} from '../styles/types';\nimport { mergeWidgetStyles, mergeCopilotStyles } from '../styles/utils';\n\n// Simple in-memory cache for style configs\nconst styleCache = new Map<string, WidgetConfigResponse>();\n\ninterface UseWidgetStylesOptions {\n /** Product ID to fetch styles for */\n productId: string;\n /** API URL (defaults to relative path) */\n apiUrl?: string;\n /** Styles passed via props (override DB styles) */\n propStyles?: WidgetStyleConfig;\n /** Skip fetching from API (use for preview mode) */\n skip?: boolean;\n /** Cache key override (defaults to productId) */\n cacheKey?: string;\n}\n\ninterface UseWidgetStylesResult {\n /** Fully resolved styles ready for use */\n styles: ResolvedWidgetStyles;\n /** Whether styles are currently loading */\n isLoading: boolean;\n /** Error if fetch failed */\n error: Error | null;\n /** Agent name from product config */\n agentName: string;\n /** Refetch styles from API */\n refetch: () => Promise<void>;\n}\n\ninterface UseCopilotStylesOptions {\n /** Product ID to fetch styles for */\n productId: string;\n /** API URL (defaults to relative path) */\n apiUrl?: string;\n /** Styles passed via props (override DB styles) */\n propStyles?: CopilotStyleConfig;\n /** Skip fetching from API (use for preview mode) */\n skip?: boolean;\n /** Cache key override (defaults to productId) */\n cacheKey?: string;\n}\n\ninterface UseCopilotStylesResult {\n /** Fully resolved styles ready for use */\n styles: ResolvedCopilotStyles;\n /** Whether styles are currently loading */\n isLoading: boolean;\n /** Error if fetch failed */\n error: Error | null;\n /** Agent name from product config */\n agentName: string;\n /** Refetch styles from API */\n refetch: () => Promise<void>;\n}\n\n/**\n * Fetch widget configuration from the API\n */\nasync function fetchWidgetConfig(\n productId: string,\n apiUrl?: string\n): Promise<WidgetConfigResponse> {\n const baseUrl = apiUrl || '';\n const url = `${baseUrl}/api/products/${productId}/widget-config`;\n \n const response = await fetch(url);\n \n if (!response.ok) {\n throw new Error(`Failed to fetch widget config: ${response.status} ${response.statusText}`);\n }\n \n return response.json();\n}\n\n/**\n * Hook to fetch and merge widget styles\n * \n * @example\n * ```tsx\n * const { styles, isLoading } = useWidgetStyles({\n * productId: 'my-product',\n * propStyles: { colors: { primary: '#blue' } },\n * });\n * ```\n */\nexport function useWidgetStyles({\n productId,\n apiUrl,\n propStyles,\n skip = false,\n cacheKey,\n}: UseWidgetStylesOptions): UseWidgetStylesResult {\n const key = cacheKey || productId;\n const [isLoading, setIsLoading] = useState(!skip && !styleCache.has(key));\n const [error, setError] = useState<Error | null>(null);\n const [dbStyles, setDbStyles] = useState<WidgetStyleConfig | undefined>(\n styleCache.get(key)?.widgetStyles\n );\n const [agentName, setAgentName] = useState(\n styleCache.get(key)?.agentName || 'Assistant'\n );\n \n // Track if we've already fetched\n const hasFetchedRef = useRef(false);\n \n const fetchStyles = async () => {\n if (skip) return;\n \n setIsLoading(true);\n setError(null);\n \n try {\n const config = await fetchWidgetConfig(productId, apiUrl);\n \n // Cache the result\n styleCache.set(key, config);\n \n setDbStyles(config.widgetStyles);\n setAgentName(config.agentName || 'Assistant');\n } catch (err) {\n console.error('[CrowWidget] Failed to fetch styles:', err);\n setError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setIsLoading(false);\n }\n };\n \n useEffect(() => {\n // Skip if disabled or already fetched\n if (skip || hasFetchedRef.current) return;\n \n // Check cache first\n const cached = styleCache.get(key);\n if (cached) {\n setDbStyles(cached.widgetStyles);\n setAgentName(cached.agentName || 'Assistant');\n setIsLoading(false);\n return;\n }\n \n hasFetchedRef.current = true;\n fetchStyles();\n }, [productId, apiUrl, skip, key]);\n \n // Merge styles: defaults < DB < props\n const styles = mergeWidgetStyles(dbStyles, propStyles);\n \n return {\n styles,\n isLoading,\n error,\n agentName,\n refetch: fetchStyles,\n };\n}\n\n/**\n * Hook to fetch and merge copilot styles\n * \n * @example\n * ```tsx\n * const { styles, isLoading } = useCopilotStyles({\n * productId: 'my-product',\n * propStyles: { position: { side: 'left' } },\n * });\n * ```\n */\nexport function useCopilotStyles({\n productId,\n apiUrl,\n propStyles,\n skip = false,\n cacheKey,\n}: UseCopilotStylesOptions): UseCopilotStylesResult {\n const key = cacheKey || productId;\n const [isLoading, setIsLoading] = useState(!skip && !styleCache.has(key));\n const [error, setError] = useState<Error | null>(null);\n const [dbStyles, setDbStyles] = useState<CopilotStyleConfig | undefined>(\n styleCache.get(key)?.copilotStyles\n );\n const [agentName, setAgentName] = useState(\n styleCache.get(key)?.agentName || 'Assistant'\n );\n \n // Track if we've already fetched\n const hasFetchedRef = useRef(false);\n \n const fetchStyles = async () => {\n if (skip) return;\n \n setIsLoading(true);\n setError(null);\n \n try {\n const config = await fetchWidgetConfig(productId, apiUrl);\n \n // Cache the result\n styleCache.set(key, config);\n \n setDbStyles(config.copilotStyles);\n setAgentName(config.agentName || 'Assistant');\n } catch (err) {\n console.error('[CrowCopilot] Failed to fetch styles:', err);\n setError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setIsLoading(false);\n }\n };\n \n useEffect(() => {\n // Skip if disabled or already fetched\n if (skip || hasFetchedRef.current) return;\n \n // Check cache first\n const cached = styleCache.get(key);\n if (cached) {\n setDbStyles(cached.copilotStyles);\n setAgentName(cached.agentName || 'Assistant');\n setIsLoading(false);\n return;\n }\n \n hasFetchedRef.current = true;\n fetchStyles();\n }, [productId, apiUrl, skip, key]);\n \n // Merge styles: defaults < DB < props\n const styles = mergeCopilotStyles(dbStyles, propStyles);\n \n return {\n styles,\n isLoading,\n error,\n agentName,\n refetch: fetchStyles,\n };\n}\n\n/**\n * Clear the style cache (useful for testing or forcing refetch)\n */\nexport function clearStyleCache(productId?: string): void {\n if (productId) {\n styleCache.delete(productId);\n } else {\n styleCache.clear();\n }\n}\n\n/**\n * Hook for preview mode - uses provided styles directly without fetching\n * \n * @example\n * ```tsx\n * // In dashboard style editor\n * const { styles } = usePreviewStyles({\n * styles: localEditorState,\n * });\n * ```\n */\nexport function usePreviewWidgetStyles(\n previewStyles: WidgetStyleConfig\n): { styles: ResolvedWidgetStyles } {\n return {\n styles: mergeWidgetStyles(undefined, previewStyles),\n };\n}\n\nexport function usePreviewCopilotStyles(\n previewStyles: CopilotStyleConfig\n): { styles: ResolvedCopilotStyles } {\n return {\n styles: mergeCopilotStyles(undefined, previewStyles),\n };\n}\n","/**\n * Style Context\n * \n * React context for providing resolved styles to widget/copilot components.\n * This allows components to access styles without prop drilling.\n * \n * NOTE: Layout/dimension styles are now applied via CSS custom properties\n * (see cssVars.ts). This context is still used for:\n * - agentName: Display name shown in widget header\n * - styles: For non-CSS properties like branding, Google Fonts loading, etc.\n * - variant: floating vs embedded mode\n * - isLoading: Loading state\n */\n\nimport React, { createContext, useContext, useMemo } from 'react';\nimport type { ResolvedWidgetStyles, ResolvedCopilotStyles } from '../styles/types';\nimport { DEFAULT_WIDGET_STYLES, DEFAULT_COPILOT_STYLES } from '../styles/defaults';\n\n// ============================================================================\n// WIDGET STYLE CONTEXT\n// ============================================================================\n\ninterface WidgetStyleContextValue {\n styles: ResolvedWidgetStyles;\n agentName: string;\n isLoading: boolean;\n variant: 'floating' | 'embedded';\n}\n\nconst WidgetStyleContext = createContext<WidgetStyleContextValue | null>(null);\n\ninterface WidgetStyleProviderProps {\n children: React.ReactNode;\n styles: ResolvedWidgetStyles;\n agentName?: string;\n isLoading?: boolean;\n variant?: 'floating' | 'embedded';\n}\n\n/**\n * Provider for widget styles\n */\nexport function WidgetStyleProvider({\n children,\n styles,\n agentName = 'Assistant',\n isLoading = false,\n variant = 'floating',\n}: WidgetStyleProviderProps) {\n const value = useMemo(\n () => ({ styles, agentName, isLoading, variant }),\n [styles, agentName, isLoading, variant]\n );\n\n return (\n <WidgetStyleContext.Provider value={value}>\n {children}\n </WidgetStyleContext.Provider>\n );\n}\n\n/**\n * Hook to access widget styles from context\n * \n * @throws Error if used outside of WidgetStyleProvider\n */\nexport function useWidgetStyleContext(): WidgetStyleContextValue {\n const context = useContext(WidgetStyleContext);\n \n if (!context) {\n throw new Error(\n 'useWidgetStyleContext must be used within a WidgetStyleProvider. ' +\n 'Make sure your component is wrapped with CrowWidget or WidgetStyleProvider.'\n );\n }\n \n return context;\n}\n\n/**\n * Hook to access widget styles, with fallback to defaults if not in context\n * \n * Use this in components that might be used both inside and outside the widget.\n */\nexport function useWidgetStyles(): ResolvedWidgetStyles {\n const context = useContext(WidgetStyleContext);\n return context?.styles ?? DEFAULT_WIDGET_STYLES;\n}\n\n// ============================================================================\n// COPILOT STYLE CONTEXT\n// ============================================================================\n\ninterface CopilotStyleContextValue {\n styles: ResolvedCopilotStyles;\n agentName: string;\n isLoading: boolean;\n}\n\nconst CopilotStyleContext = createContext<CopilotStyleContextValue | null>(null);\n\ninterface CopilotStyleProviderProps {\n children: React.ReactNode;\n styles: ResolvedCopilotStyles;\n agentName?: string;\n isLoading?: boolean;\n}\n\n/**\n * Provider for copilot styles\n */\nexport function CopilotStyleProvider({\n children,\n styles,\n agentName = 'Assistant',\n isLoading = false,\n}: CopilotStyleProviderProps) {\n const value = useMemo(\n () => ({ styles, agentName, isLoading }),\n [styles, agentName, isLoading]\n );\n\n return (\n <CopilotStyleContext.Provider value={value}>\n {children}\n </CopilotStyleContext.Provider>\n );\n}\n\n/**\n * Hook to access copilot styles from context\n * \n * @throws Error if used outside of CopilotStyleProvider\n */\nexport function useCopilotStyleContext(): CopilotStyleContextValue {\n const context = useContext(CopilotStyleContext);\n \n if (!context) {\n throw new Error(\n 'useCopilotStyleContext must be used within a CopilotStyleProvider. ' +\n 'Make sure your component is wrapped with CrowCopilot or CopilotStyleProvider.'\n );\n }\n \n return context;\n}\n\n/**\n * Hook to access copilot styles, with fallback to defaults if not in context\n */\nexport function useCopilotStyles(): ResolvedCopilotStyles {\n const context = useContext(CopilotStyleContext);\n return context?.styles ?? DEFAULT_COPILOT_STYLES;\n}\n","/**\n * ShadowContainer - Renders children inside a Shadow DOM boundary\n * \n * This provides complete CSS isolation:\n * - Widget styles don't leak to the host page\n * - Host page styles don't affect the widget\n */\n\nimport { useRef, useState, useEffect, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\n\ninterface ShadowContainerProps {\n /** Content to render inside the Shadow DOM */\n children: ReactNode;\n /** CSS string to inject into the Shadow DOM */\n styles: string;\n /** Optional ID for the host element */\n hostId?: string;\n /** Optional class name for the host element */\n hostClassName?: string;\n}\n\nexport function ShadowContainer({\n children,\n styles,\n hostId = \"crow-widget-host\",\n hostClassName,\n}: ShadowContainerProps) {\n const hostRef = useRef<HTMLDivElement>(null);\n const [shadowRoot, setShadowRoot] = useState<ShadowRoot | null>(null);\n\n useEffect(() => {\n if (hostRef.current && !hostRef.current.shadowRoot) {\n const shadow = hostRef.current.attachShadow({ mode: \"open\" });\n setShadowRoot(shadow);\n }\n }, []);\n\n return (\n <div ref={hostRef} id={hostId} className={hostClassName}>\n {shadowRoot &&\n createPortal(\n <>\n <style>{styles}</style>\n {children}\n </>,\n shadowRoot\n )}\n </div>\n );\n}\n\nShadowContainer.displayName = \"ShadowContainer\";\n","/**\n * ChatBubble - Floating button to toggle widget\n */\n\nimport { MessageCircle, ChevronDown } from \"lucide-react\";\nimport { useWidgetStyleContext } from \"../../context/StyleContext\";\n\ninterface ChatBubbleProps {\n isExpanded: boolean;\n onClick: () => void;\n}\n\nexport function ChatBubble({ isExpanded, onClick }: ChatBubbleProps) {\n const { styles } = useWidgetStyleContext();\n\n return (\n <button\n onClick={onClick}\n className=\"crow-fixed crow-z-[999999] crow-rounded-full crow-flex crow-items-center crow-justify-center crow-shadow-2xl hover:crow-scale-110 crow-transition-all crow-duration-500 crow-border crow-backdrop-blur-md\"\n style={{\n width: styles.bubble.size,\n height: styles.bubble.size,\n right: styles.position.bubbleRight,\n bottom: styles.position.bubbleBottom,\n background: styles.colors.bubbleBackground,\n borderColor: styles.colors.bubbleBorder,\n boxShadow: styles.shadows.bubble,\n color: styles.colors.bubbleIcon,\n }}\n aria-label={isExpanded ? \"Close Chat\" : \"Open Chat\"}\n >\n {isExpanded ? (\n <ChevronDown size={styles.bubble.iconSize} strokeWidth={2} />\n ) : (\n <MessageCircle size={styles.bubble.iconSize} strokeWidth={2} />\n )}\n </button>\n );\n}\n","/**\n * WidgetShell - Container for widget content\n */\n\nimport { forwardRef, useEffect, type ReactNode } from \"react\";\nimport { useWidgetStyleContext } from \"../../context/StyleContext\";\n\n// Map font family values to Google Fonts parameters\nconst GOOGLE_FONTS_MAP: Record<string, string> = {\n '\"Inter\", sans-serif': \"Inter:wght@300;400;500;600;700\",\n '\"Roboto\", sans-serif': \"Roboto:wght@300;400;500;700\",\n '\"Open Sans\", sans-serif': \"Open+Sans:wght@300;400;500;600;700\",\n '\"Poppins\", sans-serif': \"Poppins:wght@300;400;500;600;700\",\n '\"Montserrat\", sans-serif': \"Montserrat:wght@300;400;500;600;700\",\n};\n\ninterface WidgetShellProps {\n children: ReactNode;\n className?: string;\n}\n\nexport const WidgetShell = forwardRef<HTMLDivElement, WidgetShellProps>(\n ({ children, className }, ref) => {\n const { styles, variant } = useWidgetStyleContext();\n\n // Dynamically load Google Fonts when fontFamily changes\n useEffect(() => {\n const fontParam = GOOGLE_FONTS_MAP[styles.typography.fontFamily];\n if (!fontParam) return; // System font, no need to load\n\n const linkId = `crow-google-font-${fontParam.split(\":\")[0]}`;\n \n // Check if already loaded\n if (document.getElementById(linkId)) return;\n\n const link = document.createElement(\"link\");\n link.id = linkId;\n link.rel = \"stylesheet\";\n link.href = `https://fonts.googleapis.com/css2?family=${fontParam}&display=swap`;\n document.head.appendChild(link);\n }, [styles.typography.fontFamily]);\n\n const baseStyle = {\n borderRadius: styles.dimensions.borderRadius,\n padding: styles.dimensions.padding,\n background: styles.colors.background,\n borderColor: styles.colors.border,\n color: styles.colors.text,\n boxShadow: styles.shadows.widget,\n fontFamily: styles.typography.fontFamily,\n fontSize: styles.typography.fontSize,\n fontWeight: styles.typography.fontWeight,\n lineHeight: styles.typography.lineHeight,\n letterSpacing: styles.typography.letterSpacing,\n };\n\n if (variant === \"embedded\") {\n return (\n <div\n ref={ref}\n className={`crow-flex crow-flex-col crow-shadow-2xl crow-gap-3 crow-border crow-backdrop-blur-md crow-overflow-hidden ${className ?? \"\"}`}\n style={{\n ...baseStyle,\n width: `min(${styles.dimensions.width}px, calc(100vw - 32px))`,\n height: `min(${styles.dimensions.maxHeight}px, calc(100vh - 120px))`,\n }}\n >\n {children}\n </div>\n );\n }\n\n // Floating variant\n return (\n <div\n ref={ref}\n className={`crow-fixed crow-z-[999999] crow-shadow-2xl crow-gap-3 crow-transition-all crow-duration-500 crow-flex crow-flex-col crow-border crow-backdrop-blur-md crow-overflow-hidden ${className ?? \"\"}`}\n style={{\n ...baseStyle,\n width: `min(${styles.dimensions.width}px, calc(100vw - 32px))`,\n height: `min(${styles.dimensions.maxHeight}px, calc(100vh - 120px))`,\n right: styles.position.right,\n bottom: styles.position.bottom,\n }}\n >\n {children}\n </div>\n );\n }\n);\n\nWidgetShell.displayName = \"WidgetShell\";\n","/**\n * WidgetHeader - Header bar for widget\n */\n\nimport { Plus, History, ChevronDown, ChevronUp } from \"lucide-react\";\nimport { useWidgetStyleContext } from \"../../context/StyleContext\";\n\ninterface WidgetHeaderProps {\n isVerifiedUser: boolean;\n showConversationList: boolean;\n onNewChat: () => void;\n onToggleHistory: () => void;\n showMinimize?: boolean;\n isMinimized?: boolean;\n onToggleMinimize?: () => void;\n}\n\nexport function WidgetHeader({\n isVerifiedUser,\n showConversationList,\n onNewChat,\n onToggleHistory,\n showMinimize = false,\n isMinimized = false,\n onToggleMinimize,\n}: WidgetHeaderProps) {\n const { agentName, styles } = useWidgetStyleContext();\n\n return (\n <div \n className=\"crow-flex crow-items-center crow-justify-between crow-mb-3 crow-pb-2 crow-border-b\"\n style={{ borderColor: styles.colors.border }}\n >\n <div className=\"crow-flex crow-items-center crow-gap-2\">\n <span \n className=\"crow-text-sm crow-font-semibold\"\n style={{ \n color: styles.colors.text,\n fontSize: styles.typography.headerFontSize,\n }}\n >\n {agentName}\n </span>\n </div>\n\n <div className=\"crow-flex crow-items-center crow-gap-1\">\n <button\n onClick={onNewChat}\n className=\"crow-p-1.5 hover:crow-bg-gray-200 crow-rounded crow-transition-colors\"\n aria-label=\"New Chat\"\n title=\"New Chat\"\n >\n <Plus size={18} className=\"crow-text-gray-700\" />\n </button>\n {isVerifiedUser && (\n <button\n onClick={onToggleHistory}\n className={`crow-p-1.5 hover:crow-bg-gray-200 crow-rounded crow-transition-colors ${\n showConversationList ? \"crow-bg-gray-200\" : \"\"\n }`}\n aria-label=\"Conversation History\"\n title=\"Conversation History\"\n >\n <History size={18} className=\"crow-text-gray-700\" />\n </button>\n )}\n {showMinimize && onToggleMinimize && (\n <button\n onClick={onToggleMinimize}\n className=\"crow-p-1 hover:crow-bg-gray-200 crow-rounded crow-transition-colors\"\n aria-label={isMinimized ? \"Expand\" : \"Minimize\"}\n >\n {isMinimized ? (\n <ChevronUp size={18} className=\"crow-text-gray-900\" />\n ) : (\n <ChevronDown size={18} className=\"crow-text-gray-900\" />\n )}\n </button>\n )}\n </div>\n </div>\n );\n}\n","/**\n * StreamingText - Simple streaming text with blinking cursor\n */\n\nimport ReactMarkdown from \"react-markdown\";\n\ninterface StreamingTextProps {\n content: string;\n isStreaming?: boolean;\n}\n\nexport function StreamingText({\n content,\n isStreaming = false,\n}: StreamingTextProps) {\n return (\n <>\n <ReactMarkdown\n components={{\n strong: ({ children }) => (\n <strong className=\"crow-font-bold\">{children}</strong>\n ),\n ul: ({ children }) => (\n <ul className=\"crow-list-disc crow-pl-5 crow-my-1\">{children}</ul>\n ),\n ol: ({ children }) => (\n <ol className=\"crow-list-decimal crow-pl-5 crow-my-1\">{children}</ol>\n ),\n li: ({ children }) => <li>{children}</li>,\n p: ({ children }) => <p className=\"crow-mb-1 last:crow-mb-0\">{children}</p>,\n a: ({ href, children }) => (\n <a\n href={href}\n className=\"crow-underline hover:crow-text-blue-300\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {children}\n </a>\n ),\n code: ({ className, children, ...props }) => {\n const isInline = !className;\n return isInline ? (\n <code\n className=\"crow-bg-gray-800 crow-text-gray-200 crow-px-1.5 crow-py-0.5 crow-rounded crow-text-sm\"\n {...props}\n >\n {children}\n </code>\n ) : (\n <code className={`crow-text-gray-200 ${className || ''}`} {...props}>\n {children}\n </code>\n );\n },\n pre: ({ children }) => (\n <pre className=\"crow-bg-gray-800 crow-text-gray-200 crow-p-3 crow-rounded-lg crow-my-2 crow-overflow-x-auto crow-text-sm\">\n {children}\n </pre>\n ),\n }}\n >\n {content}\n </ReactMarkdown>\n\n {isStreaming && (\n <span\n className=\"crow-inline-block crow-w-0.5 crow-h-4 crow-ml-0.5 crow-align-text-bottom\"\n style={{\n backgroundColor: \"currentColor\",\n animation: \"cursor-blink 1s ease-in-out infinite\",\n }}\n aria-hidden=\"true\"\n />\n )}\n\n <style>{`\n @keyframes cursor-blink {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0; }\n }\n `}</style>\n </>\n );\n}\n\nexport default StreamingText;\n","/**\n * ThinkingIndicator - Shimmer effect for thinking state\n */\n\nexport function ThinkingIndicator() {\n return (\n <>\n <span\n className=\"crow-inline-block crow-font-medium\"\n style={{\n background:\n \"linear-gradient(90deg, rgba(255,255,255,0.4) 0%, rgba(255,255,255,1) 50%, rgba(255,255,255,0.4) 100%)\",\n backgroundSize: \"200% 100%\",\n WebkitBackgroundClip: \"text\",\n backgroundClip: \"text\",\n WebkitTextFillColor: \"transparent\",\n animation: \"shimmer 1.5s ease-in-out infinite\",\n }}\n >\n Thinking...\n </span>\n <style>{`\n @keyframes shimmer {\n 0% { background-position: 100% 0; }\n 100% { background-position: -100% 0; }\n }\n `}</style>\n </>\n );\n}\n","/**\n * LoadingHistory - Loading animation for conversation history\n */\n\nimport { motion } from \"framer-motion\";\n\nexport function LoadingHistory() {\n return (\n <motion.div\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n className=\"crow-flex crow-justify-center crow-items-center crow-py-8\"\n >\n <div className=\"crow-flex crow-flex-col crow-items-center crow-gap-3\">\n <div className=\"crow-flex crow-gap-1\">\n {[0, 0.15, 0.3].map((delay, i) => (\n <motion.div\n key={i}\n className=\"crow-w-2 crow-h-2 crow-bg-gray-400 crow-rounded-full\"\n animate={{ y: [0, -8, 0] }}\n transition={{ duration: 0.6, repeat: Infinity, delay }}\n />\n ))}\n </div>\n <span className=\"crow-text-sm crow-text-gray-500\">Loading conversation...</span>\n </div>\n </motion.div>\n );\n}\n","/**\n * ReasoningTrace - PostHog-inspired collapsible reasoning display\n */\n\nimport { useState, useLayoutEffect } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { ChevronRight, Brain, Check, Loader2 } from \"lucide-react\";\nimport type { ToolCall } from \"../../types\";\n\nconst THINKING_MESSAGES = [\n \"Pondering\",\n \"Analyzing\",\n \"Reasoning\",\n \"Considering\",\n \"Processing\",\n \"Evaluating\",\n \"Thinking\",\n \"Exploring\",\n \"Connecting\",\n \"Synthesizing\",\n];\n\nfunction getRandomThinkingMessage(): string {\n const idx = Math.floor(Math.random() * THINKING_MESSAGES.length);\n return THINKING_MESSAGES[idx] + \"...\";\n}\n\nfunction ShimmeringContent({ children }: { children: React.ReactNode }) {\n return (\n <span\n className=\"crow-inline-block\"\n style={{\n background:\n \"linear-gradient(90deg, rgba(100,100,100,0.6) 0%, rgba(100,100,100,1) 50%, rgba(100,100,100,0.6) 100%)\",\n backgroundSize: \"200% 100%\",\n WebkitBackgroundClip: \"text\",\n backgroundClip: \"text\",\n WebkitTextFillColor: \"transparent\",\n animation: \"shimmer 1.5s ease-in-out infinite\",\n }}\n >\n {children}\n <style>{`\n @keyframes shimmer {\n 0% { background-position: 100% 0; }\n 100% { background-position: -100% 0; }\n }\n `}</style>\n </span>\n );\n}\n\ninterface ReasoningTraceProps {\n thinking?: string;\n isComplete?: boolean;\n toolCalls?: ToolCall[];\n isWaiting?: boolean;\n}\n\nexport function ReasoningTrace({ thinking, isComplete, toolCalls = [], isWaiting = false }: ReasoningTraceProps) {\n const hasThinking = !!thinking && thinking.trim().length > 0;\n const hasToolCalls = toolCalls.length > 0;\n \n if (!isWaiting && !hasThinking && !hasToolCalls) return null;\n\n return (\n <div className=\"crow-flex crow-justify-start crow-mb-2\">\n <div className=\"crow-max-w-[90%] crow-space-y-1.5\">\n {isWaiting && !hasThinking && (\n <WaitingIndicator />\n )}\n \n {hasThinking && (\n <ThinkingBlock thinking={thinking!} isComplete={isComplete} />\n )}\n \n {toolCalls.map((tool) => (\n <ToolCallBlock key={tool.id} toolCall={tool} />\n ))}\n </div>\n </div>\n );\n}\n\nfunction WaitingIndicator() {\n return (\n <div className=\"crow-flex crow-items-center crow-gap-1.5 crow-text-xs crow-text-gray-500\">\n <div className=\"crow-flex crow-items-center crow-justify-center crow-w-4 crow-h-4\">\n <ShimmeringContent>\n <Brain className=\"crow-w-3.5 crow-h-3.5\" />\n </ShimmeringContent>\n </div>\n <span className=\"crow-font-medium\">\n <ShimmeringContent>{getRandomThinkingMessage()}</ShimmeringContent>\n </span>\n </div>\n );\n}\n\nfunction ThinkingBlock({ thinking, isComplete }: { thinking: string; isComplete?: boolean }) {\n const [isExpanded, setIsExpanded] = useState(!isComplete);\n \n useLayoutEffect(() => {\n setIsExpanded(!isComplete);\n }, [isComplete]);\n\n const isInProgress = !isComplete;\n\n return (\n <div className=\"crow-flex crow-flex-col crow-gap-1 crow-text-xs\">\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n className={`crow-flex crow-items-center crow-gap-1.5 crow-select-none crow-transition-colors ${\n isInProgress ? \"crow-text-gray-500\" : \"crow-text-gray-600 hover:crow-text-gray-800\"\n } crow-cursor-pointer`}\n >\n <div className=\"crow-flex crow-items-center crow-justify-center crow-w-4 crow-h-4\">\n {isInProgress ? (\n <ShimmeringContent>\n <Brain className=\"crow-w-3.5 crow-h-3.5\" />\n </ShimmeringContent>\n ) : (\n <Brain className=\"crow-w-3.5 crow-h-3.5\" />\n )}\n </div>\n\n <span className=\"crow-font-medium\">\n {isInProgress ? (\n <ShimmeringContent>{getRandomThinkingMessage()}</ShimmeringContent>\n ) : (\n \"Thought\"\n )}\n </span>\n\n <motion.div\n animate={{ rotate: isExpanded ? 90 : 0 }}\n transition={{ duration: 0.15 }}\n className=\"crow-flex-shrink-0\"\n >\n <ChevronRight className=\"crow-w-3 crow-h-3\" />\n </motion.div>\n\n {isComplete && <Check className=\"crow-w-3 crow-h-3 crow-text-green-500\" />}\n </button>\n\n <AnimatePresence>\n {isExpanded && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: \"auto\", opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={{ duration: 0.15 }}\n className=\"crow-overflow-hidden\"\n >\n <div className=\"crow-border-l-2 crow-border-gray-200 crow-pl-3 crow-ml-2\">\n <div\n className={`crow-text-xs crow-leading-relaxed crow-whitespace-pre-wrap ${\n isComplete ? \"crow-text-gray-500\" : \"crow-text-gray-600\"\n }`}\n >\n {thinking}\n </div>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n}\n\nfunction ToolCallBlock({ toolCall }: { toolCall: ToolCall }) {\n const [expanded, setExpanded] = useState(false);\n const hasArgs = Object.keys(toolCall.arguments || {}).length > 0;\n \n const isExecuting = toolCall.status === \"executing\";\n const isComplete = toolCall.status === \"complete\";\n const isError = toolCall.status === \"error\";\n\n return (\n <div className=\"crow-flex crow-flex-col crow-gap-1 crow-text-xs\">\n <button\n onClick={() => hasArgs && setExpanded(!expanded)}\n className={`crow-flex crow-items-center crow-gap-1.5 crow-select-none crow-transition-colors ${\n hasArgs ? \"crow-cursor-pointer hover:crow-text-gray-800\" : \"crow-cursor-default\"\n } ${isExecuting ? \"crow-text-gray-500\" : \"crow-text-gray-600\"}`}\n disabled={!hasArgs}\n >\n {hasArgs && (\n <motion.div\n animate={{ rotate: expanded ? 90 : 0 }}\n transition={{ duration: 0.15 }}\n >\n <ChevronRight className=\"crow-w-3 crow-h-3\" />\n </motion.div>\n )}\n\n {isExecuting && <Loader2 className=\"crow-w-3 crow-h-3 crow-animate-spin crow-text-blue-500\" />}\n {isComplete && <Check className=\"crow-w-3 crow-h-3 crow-text-green-500\" />}\n {isError && <span className=\"crow-w-3 crow-h-3 crow-text-red-500\">✕</span>}\n\n <span className=\"crow-font-medium\">{toolCall.name}</span>\n\n <span className=\"crow-text-gray-400\">\n {isExecuting && \"running...\"}\n {isComplete && \"done\"}\n {isError && \"failed\"}\n </span>\n </button>\n\n <AnimatePresence>\n {expanded && hasArgs && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: \"auto\", opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={{ duration: 0.15 }}\n className=\"crow-overflow-hidden\"\n >\n <pre className=\"crow-mt-1 crow-p-2 crow-bg-gray-800 crow-rounded crow-text-xs crow-font-mono crow-text-gray-200 crow-overflow-x-auto crow-max-h-32 crow-overflow-y-auto crow-ml-4\">\n {JSON.stringify(toolCall.arguments, null, 2)}\n </pre>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n}\n\nexport default ReasoningTrace;\n","/**\n * MessageBubble - Individual message display\n */\n\nimport ReactMarkdown from \"react-markdown\";\nimport { formatTime } from \"../../utils\";\nimport type { Message, ToolCall } from \"../../types\";\nimport { ReasoningTrace } from \"./ReasoningTrace\";\nimport { StreamingText } from \"./StreamingText\";\nimport { useWidgetStyles } from \"../../context/StyleContext\";\n\ninterface MessageBubbleProps {\n message: Message;\n toolCalls?: ToolCall[];\n isLoading?: boolean;\n}\n\nexport function MessageBubble({\n message,\n toolCalls = [],\n isLoading = false,\n}: MessageBubbleProps) {\n const styles = useWidgetStyles();\n\n const isWaiting =\n message.content === \"Thinking...\" ||\n (message.isBot && isLoading && !message.content);\n const hasThinking = message.isBot && message.thinking;\n const hasContent = message.content && message.content !== \"Thinking...\";\n const hasToolCalls = toolCalls.length > 0;\n\n const showReasoningTrace =\n message.isBot && (isWaiting || hasThinking || hasToolCalls);\n\n const isStreaming = Boolean(message.isBot && isLoading && hasContent);\n\n return (\n <div\n id={message.id}\n className={`crow-flex crow-flex-col ${message.isBot ? \"crow-items-start\" : \"crow-items-end\"}`}\n >\n {showReasoningTrace && (\n <ReasoningTrace\n thinking={message.thinking}\n isComplete={message.thinkingComplete}\n toolCalls={toolCalls}\n isWaiting={isWaiting && !hasThinking}\n />\n )}\n\n {hasContent && (\n <div\n className=\"crow-max-w-[80%] crow-rounded-2xl crow-px-4 crow-py-2 crow-transition-all crow-duration-150\"\n style={\n message.isBot\n ? { \n background: styles.colors.botBubble, \n color: styles.colors.botText \n }\n : {\n background: styles.colors.userBubble,\n color: styles.colors.userText,\n border: `1px solid ${styles.colors.userBorder}`,\n }\n }\n >\n <div className=\"crow-whitespace-pre-wrap\">\n {message.isBot ? (\n <StreamingText\n content={message.content}\n isStreaming={isStreaming}\n />\n ) : (\n <ReactMarkdown\n components={{\n strong: ({ children }) => (\n <strong className=\"crow-font-bold\">{children}</strong>\n ),\n ul: ({ children }) => (\n <ul className=\"crow-list-disc crow-pl-5 crow-my-1\">{children}</ul>\n ),\n ol: ({ children }) => (\n <ol className=\"crow-list-decimal crow-pl-5 crow-my-1\">\n {children}\n </ol>\n ),\n li: ({ children }) => <li>{children}</li>,\n p: ({ children }) => <p className=\"crow-mb-1 last:crow-mb-0\">{children}</p>,\n a: ({ href, children }) => (\n <a\n href={href}\n className=\"crow-underline hover:crow-text-blue-300\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {children}\n </a>\n ),\n }}\n >\n {message.content}\n </ReactMarkdown>\n )}\n </div>\n <div className=\"crow-text-xs crow-opacity-60 crow-mt-1\">\n {formatTime(message.timestamp)}\n </div>\n </div>\n )}\n </div>\n );\n}\n","/**\n * MessageList - Renders list of messages\n */\n\nimport type { Message, ToolCall } from \"../../types\";\nimport { MessageBubble } from \"./MessageBubble\";\nimport { LoadingHistory } from \"./LoadingHistory\";\n\ninterface MessageListProps {\n messages: Message[];\n activeToolCalls: ToolCall[];\n isLoadingHistory: boolean;\n isGenerating?: boolean;\n}\n\nexport function MessageList({\n messages,\n activeToolCalls,\n isLoadingHistory,\n isGenerating = false,\n}: MessageListProps) {\n if (isLoadingHistory) {\n return <LoadingHistory />;\n }\n\n const lastBotIndex = messages.reduce(\n (lastIdx, m, i) => (m.isBot ? i : lastIdx),\n -1,\n );\n\n return (\n <>\n {messages.map((msg, index) => (\n <MessageBubble\n key={msg.id}\n message={msg}\n toolCalls={index === lastBotIndex ? activeToolCalls : undefined}\n isLoading={index === lastBotIndex && isGenerating}\n />\n ))}\n </>\n );\n}\n","/**\n * MessagesContainer - Scrollable container for messages\n */\n\nimport { forwardRef, useEffect, useRef, useCallback, type ReactNode } from \"react\";\nimport { motion } from \"framer-motion\";\nimport { useWidgetStyles } from \"../../context/StyleContext\";\nimport { MESSAGES_CONTAINER_ID } from \"../../constants\";\n\ninterface MessagesContainerProps {\n children: ReactNode;\n}\n\nexport const MessagesContainer = forwardRef<HTMLDivElement, MessagesContainerProps>(\n ({ children }, ref) => {\n const styles = useWidgetStyles();\n const internalRef = useRef<HTMLDivElement>(null);\n const lastScrollHeightRef = useRef<number>(0);\n const isUserScrollingRef = useRef<boolean>(false);\n \n const containerRef = (ref as React.RefObject<HTMLDivElement>) || internalRef;\n\n const isNearBottom = useCallback(() => {\n const container = containerRef.current;\n if (!container) return true;\n const threshold = 100;\n return container.scrollHeight - container.scrollTop - container.clientHeight < threshold;\n }, [containerRef]);\n\n const scrollToBottom = useCallback(() => {\n const container = containerRef.current;\n if (!container) return;\n \n container.scrollTo({\n top: container.scrollHeight,\n behavior: \"smooth\",\n });\n }, [containerRef]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const handleScroll = () => {\n isUserScrollingRef.current = !isNearBottom();\n };\n\n container.addEventListener(\"scroll\", handleScroll, { passive: true });\n return () => container.removeEventListener(\"scroll\", handleScroll);\n }, [containerRef, isNearBottom]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const currentHeight = container.scrollHeight;\n const heightChanged = currentHeight !== lastScrollHeightRef.current;\n \n if (heightChanged) {\n lastScrollHeightRef.current = currentHeight;\n \n if (!isUserScrollingRef.current || isNearBottom()) {\n scrollToBottom();\n }\n }\n });\n\n return (\n <motion.div\n ref={containerRef}\n id={MESSAGES_CONTAINER_ID}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: styles.animations.duration }}\n className=\"crow-relative crow-flex-1 crow-min-h-0 crow-rounded-2xl crow-mb-3 crow-overflow-y-auto crow-p-4 crow-space-y-3 crow-pointer-events-auto\"\n style={{ background: styles.colors.messagesBackground }}\n >\n {children}\n </motion.div>\n );\n }\n);\n\nMessagesContainer.displayName = \"MessagesContainer\";\n","/**\n * ConversationList - Dropdown list of past conversations\n */\n\nimport { motion } from \"framer-motion\";\nimport { X } from \"lucide-react\";\nimport type { Conversation } from \"../../types\";\nimport { formatConversationDate } from \"../../utils\";\n\ninterface ConversationListProps {\n conversations: Conversation[];\n currentConversationId: string | null;\n onSelect: (id: string) => void;\n onClose: () => void;\n}\n\nexport function ConversationList({\n conversations,\n currentConversationId,\n onSelect,\n onClose,\n}: ConversationListProps) {\n return (\n <motion.div\n initial={{ opacity: 0, height: 0 }}\n animate={{ opacity: 1, height: \"auto\" }}\n exit={{ opacity: 0, height: 0 }}\n className=\"crow-mb-3 crow-rounded-xl crow-bg-gray-50 crow-border crow-border-gray-200\"\n >\n <div className=\"crow-p-2 crow-border-b crow-border-gray-200 crow-flex crow-justify-between crow-items-center\">\n <span className=\"crow-text-sm crow-font-medium crow-text-gray-700\">\n Recent Conversations\n </span>\n <button onClick={onClose} className=\"crow-p-1 hover:crow-bg-gray-200 crow-rounded\">\n <X size={14} className=\"crow-text-gray-500\" />\n </button>\n </div>\n <div className=\"crow-max-h-[200px] crow-overflow-y-auto\">\n {conversations.length === 0 ? (\n <div className=\"crow-p-4 crow-text-center crow-text-sm crow-text-gray-500\">\n No conversations yet\n </div>\n ) : (\n conversations.map((conv) => (\n <button\n key={conv.id}\n onClick={() => onSelect(conv.id)}\n className={`crow-w-full crow-p-3 crow-text-left hover:crow-bg-gray-100 crow-transition-colors crow-border-b crow-border-gray-100 last:crow-border-0 ${\n currentConversationId === conv.id ? \"crow-bg-blue-50\" : \"\"\n }`}\n >\n <div className=\"crow-text-sm crow-font-medium crow-text-gray-800 crow-truncate\">\n {conv.name || \"Untitled conversation\"}\n </div>\n <div className=\"crow-text-xs crow-text-gray-500 crow-mt-0.5\">\n {formatConversationDate(conv.updated_at)}\n </div>\n </button>\n ))\n )}\n </div>\n </motion.div>\n );\n}\n","/**\n * WorkflowPanel - Displays active workflow with todos\n */\n\nimport { motion } from \"framer-motion\";\nimport type { ActiveWorkflow } from \"../../types\";\n\ninterface WorkflowPanelProps {\n workflow: ActiveWorkflow;\n onExit: () => void;\n}\n\nexport function WorkflowPanel({ workflow, onExit }: WorkflowPanelProps) {\n return (\n <motion.div\n initial={{ opacity: 0, y: -10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -10 }}\n transition={{ duration: 0.3 }}\n className=\"crow-mb-3 crow-p-3 crow-rounded-xl crow-bg-gray-50 crow-border crow-border-gray-200\"\n >\n <div className=\"crow-flex crow-items-center crow-justify-between\">\n <span className=\"crow-text-sm crow-font-medium crow-text-gray-900 crow-flex crow-items-center crow-gap-1\">\n {workflow.name}\n </span>\n <button\n onClick={onExit}\n className=\"crow-text-xs crow-text-gray-500 hover:crow-text-gray-700 crow-underline\"\n >\n Exit\n </button>\n </div>\n </motion.div>\n );\n}\n","/**\n * PoweredByBadge - Branding badge at bottom\n */\n\nimport { useWidgetStyles } from \"../../context/StyleContext\";\n\ninterface PoweredByBadgeProps {\n apiUrl?: string;\n}\n\nexport function PoweredByBadge({ apiUrl = \"\" }: PoweredByBadgeProps) {\n const styles = useWidgetStyles();\n const branding = styles.branding;\n\n if (!branding.showPoweredBy) return null;\n\n // Construct full logo URL using apiUrl to ensure it works on third-party sites\n const logoUrl = branding.logoUrl?.startsWith(\"http\") \n ? branding.logoUrl \n : `${apiUrl}${branding.logoUrl}`;\n\n return (\n <div className=\"crow-flex crow-items-center crow-justify-center crow-gap-1.5 crow-mb-3 crow-text-xs crow-text-gray-400\">\n {branding.showLogo && logoUrl && (\n <img\n src={logoUrl}\n alt=\"Crow\"\n width={14}\n height={14}\n className=\"crow-opacity-50\"\n />\n )}\n <span>{branding.poweredByText}</span>\n </div>\n );\n}\n","/**\n * ModelSelector - Dropdown for selecting AI models\n */\n\nimport React, { useState, useRef, useEffect } from \"react\";\nimport { ChevronDown, Check } from \"lucide-react\";\nimport { cn } from \"../../utils\";\nimport type { Model } from \"../../types\";\n\ninterface ModelSelectorProps {\n models: Model[];\n selectedModel: string;\n onModelChange: (modelId: string) => void;\n disabled?: boolean;\n}\n\nexport const ModelSelector: React.FC<ModelSelectorProps> = ({\n models,\n selectedModel,\n onModelChange,\n disabled = false,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n const selectedModelData = models.find((m) => m.id === selectedModel);\n\n const groupedModels = models.reduce((acc, model) => {\n if (!acc[model.provider]) acc[model.provider] = [];\n acc[model.provider].push(model);\n return acc;\n }, {} as Record<string, Model[]>);\n\n return (\n <div className=\"crow-relative\" ref={dropdownRef}>\n <button\n type=\"button\"\n onClick={() => !disabled && setIsOpen(!isOpen)}\n disabled={disabled}\n className={cn(\n \"crow-flex crow-items-center crow-gap-1 crow-px-2 crow-py-1 crow-rounded-md crow-text-xs\",\n \"crow-bg-transparent crow-text-gray-400\",\n \"hover:crow-text-gray-700 crow-transition-colors\",\n disabled ? \"crow-opacity-50 crow-cursor-not-allowed\" : \"crow-cursor-pointer\"\n )}\n >\n <span>{selectedModelData?.name || \"Select Model\"}</span>\n <ChevronDown\n className={cn(\n \"crow-w-3 crow-h-3 crow-transition-transform\",\n isOpen ? \"crow-rotate-180\" : \"\"\n )}\n />\n </button>\n\n {isOpen && (\n <div className=\"crow-absolute crow-bottom-full crow-mb-2 crow-left-0 crow-min-w-[180px] crow-bg-white crow-border crow-border-gray-200 crow-rounded-xl crow-shadow-lg crow-z-50 crow-overflow-hidden\">\n {Object.entries(groupedModels).map(([provider, providerModels]) => (\n <div key={provider}>\n <div className=\"crow-px-3 crow-py-1.5 crow-text-xs crow-font-medium crow-text-gray-400 crow-uppercase crow-tracking-wide crow-bg-gray-50\">\n {provider}\n </div>\n {providerModels.map((model) => (\n <button\n key={model.id}\n onClick={() => {\n onModelChange(model.id);\n setIsOpen(false);\n }}\n className={cn(\n \"crow-w-full crow-flex crow-items-center crow-justify-between crow-px-3 crow-py-1.5 crow-text-sm\",\n \"hover:crow-bg-gray-100 crow-transition-colors\",\n model.id === selectedModel ? \"crow-text-gray-900\" : \"crow-text-gray-600\"\n )}\n >\n <span>{model.name}</span>\n {model.id === selectedModel && (\n <Check className=\"crow-w-4 crow-h-4 crow-text-green-500\" />\n )}\n </button>\n ))}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n};\n","/**\n * PromptInputBox - Main input component for user messages\n */\n\nimport React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { ArrowUp, Square } from \"lucide-react\";\nimport { ModelSelector } from \"./ModelSelector\";\nimport { cn } from \"../../utils\";\nimport type { Model } from \"../../types\";\n\n// Textarea Component\ninterface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n className?: string;\n}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => (\n <textarea\n className={cn(\n \"crow-flex crow-w-full crow-rounded-md crow-border-none crow-bg-transparent crow-px-3 crow-py-1.5 crow-text-base crow-text-gray-900 placeholder:crow-text-gray-500 focus-visible:crow-outline-none focus-visible:crow-ring-0 disabled:crow-cursor-not-allowed disabled:crow-opacity-50 crow-min-h-[32px] crow-resize-none\",\n className\n )}\n ref={ref}\n rows={1}\n {...props}\n />\n )\n);\nTextarea.displayName = \"Textarea\";\n\n// Tooltip Components\nconst TooltipProvider = TooltipPrimitive.Provider;\nconst Tooltip = TooltipPrimitive.Root;\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"crow-z-50 crow-overflow-hidden crow-rounded-md crow-border crow-border-gray-300 crow-bg-white crow-text-gray-900 crow-px-3 crow-py-1.5 crow-text-sm crow-shadow-md\",\n className\n )}\n {...props}\n />\n));\nTooltipContent.displayName = \"TooltipContent\";\n\n// Button Component\ninterface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: \"default\" | \"outline\" | \"ghost\";\n size?: \"default\" | \"sm\" | \"lg\" | \"icon\";\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant = \"default\", size = \"default\", ...props }, ref) => {\n const variantClasses = {\n default: \"crow-bg-black hover:crow-bg-gray-800 crow-text-white\",\n outline: \"crow-border crow-bg-transparent hover:crow-bg-gray-100\",\n ghost: \"crow-bg-transparent hover:crow-bg-gray-100\",\n };\n const sizeClasses = {\n default: \"crow-h-10 crow-px-4 crow-py-2\",\n sm: \"crow-h-8 crow-px-3 crow-text-sm\",\n lg: \"crow-h-12 crow-px-6\",\n icon: \"crow-h-8 crow-w-8 crow-rounded-full\",\n };\n return (\n <button\n className={cn(\n \"crow-inline-flex crow-items-center crow-justify-center crow-font-medium crow-transition-colors focus-visible:crow-outline-none disabled:crow-pointer-events-none disabled:crow-opacity-50\",\n variantClasses[variant],\n sizeClasses[size],\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nButton.displayName = \"Button\";\n\n// PromptInput Context\ninterface PromptInputContextType {\n isLoading: boolean;\n value: string;\n setValue: (value: string) => void;\n maxHeight: number | string;\n onSubmit?: () => void;\n disabled?: boolean;\n}\n\nconst PromptInputContext = React.createContext<PromptInputContextType>({\n isLoading: false,\n value: \"\",\n setValue: () => {},\n maxHeight: 240,\n onSubmit: undefined,\n disabled: false,\n});\n\nfunction usePromptInput() {\n const context = React.useContext(PromptInputContext);\n if (!context) {\n throw new Error(\"usePromptInput must be used within a PromptInput\");\n }\n return context;\n}\n\n// PromptInput Container\ninterface PromptInputProps {\n isLoading?: boolean;\n value?: string;\n onValueChange?: (value: string) => void;\n maxHeight?: number | string;\n onSubmit?: () => void;\n children: React.ReactNode;\n className?: string;\n disabled?: boolean;\n}\n\nconst PromptInput = React.forwardRef<HTMLDivElement, PromptInputProps>(\n (\n {\n className,\n isLoading = false,\n maxHeight = 240,\n value,\n onValueChange,\n onSubmit,\n children,\n disabled = false,\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = React.useState(value || \"\");\n\n const handleChange = (newValue: string) => {\n setInternalValue(newValue);\n onValueChange?.(newValue);\n };\n\n return (\n <TooltipProvider>\n <PromptInputContext.Provider\n value={{\n isLoading,\n value: value ?? internalValue,\n setValue: onValueChange ?? handleChange,\n maxHeight,\n onSubmit,\n disabled,\n }}\n >\n <div\n ref={ref}\n className={cn(\n \"crow-rounded-3xl crow-border crow-border-gray-300 crow-bg-white crow-p-1.5 crow-shadow-lg crow-transition-all crow-duration-300\",\n isLoading && \"crow-border-red-500\",\n className\n )}\n >\n {children}\n </div>\n </PromptInputContext.Provider>\n </TooltipProvider>\n );\n }\n);\nPromptInput.displayName = \"PromptInput\";\n\n// PromptInput Textarea\ninterface PromptInputTextareaProps {\n disableAutosize?: boolean;\n placeholder?: string;\n}\n\nconst PromptInputTextarea: React.FC<\n PromptInputTextareaProps & React.ComponentProps<typeof Textarea>\n> = ({ className, onKeyDown, disableAutosize = false, placeholder, ...props }) => {\n const { value, setValue, maxHeight, onSubmit, disabled } = usePromptInput();\n const textareaRef = React.useRef<HTMLTextAreaElement>(null);\n\n React.useEffect(() => {\n if (disableAutosize || !textareaRef.current) return;\n textareaRef.current.style.height = \"auto\";\n textareaRef.current.style.height =\n typeof maxHeight === \"number\"\n ? `${Math.min(textareaRef.current.scrollHeight, maxHeight)}px`\n : `min(${textareaRef.current.scrollHeight}px, ${maxHeight})`;\n }, [value, maxHeight, disableAutosize]);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n onSubmit?.();\n }\n onKeyDown?.(e);\n };\n\n return (\n <Textarea\n ref={textareaRef}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={handleKeyDown}\n className={cn(\"text-base\", className)}\n disabled={disabled}\n placeholder={placeholder}\n {...props}\n />\n );\n};\n\n// PromptInput Actions Container\ninterface PromptInputActionsProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst PromptInputActions: React.FC<PromptInputActionsProps> = ({\n children,\n className,\n ...props\n}) => (\n <div className={cn(\"crow-flex crow-items-center crow-gap-2\", className)} {...props}>\n {children}\n </div>\n);\n\n// PromptInput Action with Tooltip\ninterface PromptInputActionProps extends React.ComponentProps<typeof Tooltip> {\n tooltip: React.ReactNode;\n children: React.ReactNode;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n}\n\nconst PromptInputAction: React.FC<PromptInputActionProps> = ({\n tooltip,\n children,\n side = \"top\",\n ...props\n}) => {\n return (\n <Tooltip {...props}>\n <TooltipTrigger asChild>{children}</TooltipTrigger>\n <TooltipContent side={side}>{tooltip}</TooltipContent>\n </Tooltip>\n );\n};\n\n// Main PromptInputBox Component\ninterface PromptInputBoxProps {\n onSend?: (message: string) => void;\n onStop?: () => void;\n isLoading?: boolean;\n placeholder?: string;\n className?: string;\n selectedModel?: string;\n onModelChange?: (model: string) => void;\n availableModels?: Model[];\n}\n\nexport const PromptInputBox = React.forwardRef<HTMLDivElement, PromptInputBoxProps>(\n (\n {\n onSend = () => {},\n onStop,\n isLoading = false,\n placeholder = \"Type your message here...\",\n className,\n selectedModel = \"gpt-4o\",\n onModelChange,\n availableModels = [],\n },\n ref\n ) => {\n const [input, setInput] = React.useState(\"\");\n const promptBoxRef = React.useRef<HTMLDivElement>(null);\n\n const handleSubmit = () => {\n if (input.trim()) {\n onSend(input);\n setInput(\"\");\n }\n };\n\n const hasContent = input.trim() !== \"\";\n\n return (\n <PromptInput\n value={input}\n onValueChange={setInput}\n isLoading={isLoading}\n onSubmit={handleSubmit}\n className={cn(\n \"crow-w-full crow-shadow-lg crow-transition-all crow-duration-300 crow-ease-in-out\",\n className\n )}\n disabled={isLoading}\n ref={ref || promptBoxRef}\n >\n <div className=\"crow-transition-all crow-duration-300 crow-opacity-100\">\n <PromptInputTextarea placeholder={placeholder} className=\"crow-text-base\" />\n </div>\n\n <PromptInputActions className=\"crow-flex crow-items-center crow-justify-between crow-gap-2 crow-p-0 crow-pt-1\">\n {/* Model Selector - Left side */}\n <div className=\"crow-flex crow-items-center\">\n {availableModels.length > 0 && onModelChange && (\n <ModelSelector\n models={availableModels}\n selectedModel={selectedModel}\n onModelChange={onModelChange}\n disabled={isLoading}\n />\n )}\n </div>\n\n {/* Send/Stop Button - Right side */}\n <PromptInputAction\n tooltip={\n isLoading\n ? \"Stop generation\"\n : hasContent\n ? \"Send message\"\n : \"Type a message\"\n }\n >\n <Button\n variant=\"default\"\n size=\"icon\"\n className={cn(\n \"crow-h-7 crow-w-7 crow-rounded-full crow-transition-all crow-duration-200\",\n isLoading && \"crow-bg-red-500 hover:crow-bg-red-500\",\n hasContent && !isLoading && \"crow-bg-black hover:crow-bg-gray-800\",\n !hasContent && !isLoading && \"crow-bg-transparent\"\n )}\n onClick={() => {\n if (isLoading && onStop) {\n onStop();\n } else if (hasContent) {\n handleSubmit();\n }\n }}\n >\n {isLoading ? (\n <Square className=\"crow-h-3.5 crow-w-3.5 crow-text-white\" style={{ fill: \"white\" }} />\n ) : (\n <ArrowUp className={cn(\n \"crow-h-3.5 crow-w-3.5\",\n hasContent ? \"crow-text-white\" : \"crow-text-gray-400\"\n )} />\n )}\n </Button>\n </PromptInputAction>\n </PromptInputActions>\n </PromptInput>\n );\n }\n);\n\nPromptInputBox.displayName = \"PromptInputBox\";\n","/**\n * CSS Custom Properties Utility\n * \n * Converts the nested style configuration to CSS custom properties (variables).\n * These variables are applied to the widget root element and consumed by\n * component-specific CSS classes.\n */\n\nimport type { ResolvedWidgetStyles } from './types';\n\n/**\n * CSS variable names used by the widget.\n * Components reference these via var(--crow-*) in CSS.\n */\nexport const CSS_VAR_NAMES = {\n // Colors\n colors: {\n primary: '--crow-colors-primary',\n background: '--crow-colors-background',\n border: '--crow-colors-border',\n text: '--crow-colors-text',\n botBubble: '--crow-colors-bot-bubble',\n botText: '--crow-colors-bot-text',\n userBubble: '--crow-colors-user-bubble',\n userText: '--crow-colors-user-text',\n userBorder: '--crow-colors-user-border',\n messagesBackground: '--crow-colors-messages-background',\n bubbleBackground: '--crow-colors-bubble-background',\n bubbleBorder: '--crow-colors-bubble-border',\n bubbleIcon: '--crow-colors-bubble-icon',\n },\n // Dimensions\n dimensions: {\n width: '--crow-dimensions-width',\n maxHeight: '--crow-dimensions-max-height',\n messagesMaxHeight: '--crow-dimensions-messages-max-height',\n borderRadius: '--crow-dimensions-border-radius',\n padding: '--crow-dimensions-padding',\n },\n // Typography\n typography: {\n fontFamily: '--crow-typography-font-family',\n fontSize: '--crow-typography-font-size',\n headerFontSize: '--crow-typography-header-font-size',\n fontWeight: '--crow-typography-font-weight',\n lineHeight: '--crow-typography-line-height',\n letterSpacing: '--crow-typography-letter-spacing',\n },\n // Position\n position: {\n right: '--crow-position-right',\n bottom: '--crow-position-bottom',\n bubbleRight: '--crow-position-bubble-right',\n bubbleBottom: '--crow-position-bubble-bottom',\n },\n // Bubble\n bubble: {\n size: '--crow-bubble-size',\n iconSize: '--crow-bubble-icon-size',\n },\n // Shadows\n shadows: {\n widget: '--crow-shadows-widget',\n bubble: '--crow-shadows-bubble',\n },\n // Animations\n animations: {\n duration: '--crow-animations-duration',\n },\n} as const;\n\n/**\n * Convert a resolved widget style configuration to CSS custom properties.\n * \n * @param styles - The fully resolved widget styles (with all defaults applied)\n * @returns An object of CSS variable name to value, suitable for use as React inline styles\n * \n * @example\n * const cssVars = stylesToCssVars(resolvedStyles);\n * // Returns: { '--crow-colors-background': 'rgba(255,255,255,0.95)', ... }\n * <div style={cssVars}>...</div>\n */\nexport function stylesToCssVars(styles: ResolvedWidgetStyles): Record<string, string> {\n const vars: Record<string, string> = {};\n\n // Colors\n vars[CSS_VAR_NAMES.colors.primary] = styles.colors.primary;\n vars[CSS_VAR_NAMES.colors.background] = styles.colors.background;\n vars[CSS_VAR_NAMES.colors.border] = styles.colors.border;\n vars[CSS_VAR_NAMES.colors.text] = styles.colors.text;\n vars[CSS_VAR_NAMES.colors.botBubble] = styles.colors.botBubble;\n vars[CSS_VAR_NAMES.colors.botText] = styles.colors.botText;\n vars[CSS_VAR_NAMES.colors.userBubble] = styles.colors.userBubble;\n vars[CSS_VAR_NAMES.colors.userText] = styles.colors.userText;\n vars[CSS_VAR_NAMES.colors.userBorder] = styles.colors.userBorder;\n vars[CSS_VAR_NAMES.colors.messagesBackground] = styles.colors.messagesBackground;\n vars[CSS_VAR_NAMES.colors.bubbleBackground] = styles.colors.bubbleBackground;\n vars[CSS_VAR_NAMES.colors.bubbleBorder] = styles.colors.bubbleBorder;\n vars[CSS_VAR_NAMES.colors.bubbleIcon] = styles.colors.bubbleIcon;\n\n // Dimensions (add 'px' suffix for numeric values)\n vars[CSS_VAR_NAMES.dimensions.width] = `${styles.dimensions.width}px`;\n vars[CSS_VAR_NAMES.dimensions.maxHeight] = `${styles.dimensions.maxHeight}px`;\n vars[CSS_VAR_NAMES.dimensions.messagesMaxHeight] = `${styles.dimensions.messagesMaxHeight}px`;\n vars[CSS_VAR_NAMES.dimensions.borderRadius] = `${styles.dimensions.borderRadius}px`;\n vars[CSS_VAR_NAMES.dimensions.padding] = `${styles.dimensions.padding}px`;\n\n // Typography\n vars[CSS_VAR_NAMES.typography.fontFamily] = styles.typography.fontFamily;\n vars[CSS_VAR_NAMES.typography.fontSize] = `${styles.typography.fontSize}px`;\n vars[CSS_VAR_NAMES.typography.headerFontSize] = `${styles.typography.headerFontSize}px`;\n vars[CSS_VAR_NAMES.typography.fontWeight] = String(styles.typography.fontWeight);\n vars[CSS_VAR_NAMES.typography.lineHeight] = String(styles.typography.lineHeight);\n vars[CSS_VAR_NAMES.typography.letterSpacing] = `${styles.typography.letterSpacing}px`;\n\n // Position\n vars[CSS_VAR_NAMES.position.right] = `${styles.position.right}px`;\n vars[CSS_VAR_NAMES.position.bottom] = `${styles.position.bottom}px`;\n vars[CSS_VAR_NAMES.position.bubbleRight] = `${styles.position.bubbleRight}px`;\n vars[CSS_VAR_NAMES.position.bubbleBottom] = `${styles.position.bubbleBottom}px`;\n\n // Bubble\n vars[CSS_VAR_NAMES.bubble.size] = `${styles.bubble.size}px`;\n vars[CSS_VAR_NAMES.bubble.iconSize] = `${styles.bubble.iconSize}px`;\n\n // Shadows (already CSS strings)\n vars[CSS_VAR_NAMES.shadows.widget] = styles.shadows.widget;\n vars[CSS_VAR_NAMES.shadows.bubble] = styles.shadows.bubble;\n\n // Animations\n vars[CSS_VAR_NAMES.animations.duration] = `${styles.animations.duration}s`;\n\n return vars;\n}\n\n/**\n * Get a specific CSS variable value from the widget root element.\n * Useful for JavaScript that needs to read current style values.\n * \n * @param varName - The CSS variable name (e.g., '--crow-colors-primary')\n * @param element - The element to read from (defaults to document.documentElement)\n * @returns The computed value of the CSS variable\n */\nexport function getCssVar(varName: string, element: Element = document.documentElement): string {\n return getComputedStyle(element).getPropertyValue(varName).trim();\n}\n","/**\n * CSS Styles for Crow Widget\n * \n * Exports the compiled CSS as a string for Shadow DOM injection.\n * Auto-injection is disabled to prevent CSS leaking to host pages.\n * \n * DO NOT EDIT THE CSS_CONTENT - Generated by scripts/inject-css.js\n */\n\nconst STYLE_ID = 'crow-ui-styles';\n\n/**\n * Compiled CSS content including Tailwind utilities with crow- prefix\n * This should be injected into the Shadow DOM, not document.head\n */\nexport const WIDGET_CSS = `*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }\n\n/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:\"\"}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.crow-pointer-events-none{pointer-events:none}.crow-pointer-events-auto{pointer-events:auto}.crow-fixed{position:fixed}.crow-absolute{position:absolute}.crow-relative{position:relative}.crow-sticky{position:sticky}.crow-bottom-0{bottom:0}.crow-bottom-full{bottom:100%}.crow-left-0{left:0}.crow-right-0{right:0}.crow-top-0{top:0}.crow-z-50{z-index:50}.crow-z-\\\\[999999\\\\]{z-index:999999}.crow-m-0{margin:0}.crow-my-1{margin-top:.25rem;margin-bottom:.25rem}.crow-my-2{margin-top:.5rem;margin-bottom:.5rem}.crow-mb-1{margin-bottom:.25rem}.crow-mb-2{margin-bottom:.5rem}.crow-mb-3{margin-bottom:.75rem}.crow-ml-0{margin-left:0}.crow-ml-0\\\\.5{margin-left:.125rem}.crow-ml-2{margin-left:.5rem}.crow-ml-4{margin-left:1rem}.crow-mt-0{margin-top:0}.crow-mt-0\\\\.5{margin-top:.125rem}.crow-mt-1{margin-top:.25rem}.crow-mt-2{margin-top:.5rem}.crow-mt-auto{margin-top:auto}.crow-inline-block{display:inline-block}.crow-flex{display:flex}.crow-inline-flex{display:inline-flex}.crow-h-10{height:2.5rem}.crow-h-12{height:3rem}.crow-h-2{height:.5rem}.crow-h-3{height:.75rem}.crow-h-3\\\\.5{height:.875rem}.crow-h-4{height:1rem}.crow-h-7{height:1.75rem}.crow-h-8{height:2rem}.crow-h-full{height:100%}.crow-max-h-32{max-height:8rem}.crow-max-h-\\\\[200px\\\\]{max-height:200px}.crow-min-h-0{min-height:0}.crow-min-h-\\\\[32px\\\\]{min-height:32px}.crow-w-0{width:0}.crow-w-0\\\\.5{width:.125rem}.crow-w-2{width:.5rem}.crow-w-3{width:.75rem}.crow-w-3\\\\.5{width:.875rem}.crow-w-4{width:1rem}.crow-w-7{width:1.75rem}.crow-w-8{width:2rem}.crow-w-full{width:100%}.crow-min-w-0{min-width:0}.crow-min-w-\\\\[180px\\\\]{min-width:180px}.crow-max-w-\\\\[80\\\\%\\\\]{max-width:80%}.crow-max-w-\\\\[90\\\\%\\\\]{max-width:90%}.crow-max-w-full{max-width:100%}.crow-flex-1{flex:1 1 0%}.crow-flex-shrink-0{flex-shrink:0}.crow-rotate-180{--tw-rotate:180deg}.crow-rotate-180,.crow-scale-100{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.crow-scale-100{--tw-scale-x:1;--tw-scale-y:1}.crow-scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.crow-animate-fade-in{animation:crow-fadeIn .2s ease-out}.crow-animate-pulse{animation:crow-pulse 2s cubic-bezier(.4,0,.6,1) infinite}.crow-animate-slide-up{animation:crow-slideUp .3s ease-out}@keyframes crow-spin{to{transform:rotate(1turn)}}.crow-animate-spin{animation:crow-spin 1s linear infinite}.crow-cursor-default{cursor:default}.crow-cursor-not-allowed{cursor:not-allowed}.crow-cursor-pointer{cursor:pointer}.crow-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.crow-resize-none{resize:none}.crow-list-decimal{list-style-type:decimal}.crow-list-disc{list-style-type:disc}.crow-flex-row{flex-direction:row}.crow-flex-col{flex-direction:column}.crow-items-start{align-items:flex-start}.crow-items-end{align-items:flex-end}.crow-items-center{align-items:center}.crow-justify-start{justify-content:flex-start}.crow-justify-end{justify-content:flex-end}.crow-justify-center{justify-content:center}.crow-justify-between{justify-content:space-between}.crow-gap-1{gap:.25rem}.crow-gap-1\\\\.5{gap:.375rem}.crow-gap-2{gap:.5rem}.crow-gap-3{gap:.75rem}.crow-gap-4{gap:1rem}.crow-gap-6{gap:1.5rem}.crow-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.crow-space-y-1\\\\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.crow-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.crow-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.crow-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.crow-overflow-hidden{overflow:hidden}.crow-overflow-visible{overflow:visible}.crow-overflow-x-auto{overflow-x:auto}.crow-overflow-y-auto{overflow-y:auto}.crow-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.crow-whitespace-pre-wrap{white-space:pre-wrap}.crow-break-words{overflow-wrap:break-word}.crow-rounded{border-radius:.25rem}.crow-rounded-2xl{border-radius:1rem}.crow-rounded-3xl{border-radius:1.5rem}.crow-rounded-full{border-radius:9999px}.crow-rounded-lg{border-radius:.5rem}.crow-rounded-md{border-radius:.375rem}.crow-rounded-xl{border-radius:.75rem}.crow-border{border-width:1px}.crow-border-b{border-bottom-width:1px}.crow-border-l{border-left-width:1px}.crow-border-l-2{border-left-width:2px}.crow-border-r{border-right-width:1px}.crow-border-t{border-top-width:1px}.crow-border-none{border-style:none}.crow-border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}.crow-border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.crow-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.crow-border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.crow-bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.crow-bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.crow-bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.crow-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.crow-bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.crow-bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.crow-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.crow-bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.crow-bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.crow-bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.crow-bg-transparent{background-color:transparent}.crow-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.crow-p-0{padding:0}.crow-p-1{padding:.25rem}.crow-p-1\\\\.5{padding:.375rem}.crow-p-2{padding:.5rem}.crow-p-3{padding:.75rem}.crow-p-4{padding:1rem}.crow-p-6{padding:1.5rem}.crow-px-1{padding-left:.25rem;padding-right:.25rem}.crow-px-1\\\\.5{padding-left:.375rem;padding-right:.375rem}.crow-px-2{padding-left:.5rem;padding-right:.5rem}.crow-px-3{padding-left:.75rem;padding-right:.75rem}.crow-px-4{padding-left:1rem;padding-right:1rem}.crow-px-6{padding-left:1.5rem;padding-right:1.5rem}.crow-py-0{padding-top:0;padding-bottom:0}.crow-py-0\\\\.5{padding-top:.125rem;padding-bottom:.125rem}.crow-py-1{padding-top:.25rem;padding-bottom:.25rem}.crow-py-1\\\\.5{padding-top:.375rem;padding-bottom:.375rem}.crow-py-2{padding-top:.5rem;padding-bottom:.5rem}.crow-py-3{padding-top:.75rem;padding-bottom:.75rem}.crow-py-6{padding-top:1.5rem;padding-bottom:1.5rem}.crow-py-8{padding-top:2rem;padding-bottom:2rem}.crow-pb-2{padding-bottom:.5rem}.crow-pl-3{padding-left:.75rem}.crow-pl-4{padding-left:1rem}.crow-pl-5{padding-left:1.25rem}.crow-pr-4{padding-right:1rem}.crow-pt-1{padding-top:.25rem}.crow-text-left{text-align:left}.crow-text-center{text-align:center}.crow-text-right{text-align:right}.crow-align-text-bottom{vertical-align:text-bottom}.crow-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.crow-text-base{font-size:1rem;line-height:1.5rem}.crow-text-lg{font-size:1.125rem;line-height:1.75rem}.crow-text-sm{font-size:.875rem;line-height:1.25rem}.crow-text-xs{font-size:.75rem;line-height:1rem}.crow-font-bold{font-weight:700}.crow-font-medium{font-weight:500}.crow-font-semibold{font-weight:600}.crow-uppercase{text-transform:uppercase}.crow-leading-relaxed{line-height:1.625}.crow-tracking-wide{letter-spacing:.025em}.crow-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.crow-text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.crow-text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.crow-text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.crow-text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.crow-text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.crow-text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.crow-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.crow-text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.crow-text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.crow-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.crow-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.crow-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.crow-underline{text-decoration-line:underline}.crow-opacity-0{opacity:0}.crow-opacity-100{opacity:1}.crow-opacity-50{opacity:.5}.crow-opacity-60{opacity:.6}.crow-shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.crow-shadow-2xl,.crow-shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.crow-shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.crow-shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.crow-backdrop-blur-md{--tw-backdrop-blur:blur(12px)}.crow-backdrop-blur-md,.crow-backdrop-blur-sm{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.crow-backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.crow-transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-duration-150{transition-duration:.15s}.crow-duration-200{transition-duration:.2s}.crow-duration-300{transition-duration:.3s}.crow-duration-500{transition-duration:.5s}.crow-ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.crow-animate-fade-in{animation:crow-fadeIn .2s ease-out}.crow-animate-slide-up{animation:crow-slideUp .3s ease-out}.crow-animate-pulse{animation:crow-pulse 1.5s ease-in-out infinite}.crow-animation-delay-100{animation-delay:.1s}.crow-animation-delay-200{animation-delay:.2s}@keyframes crow-fadeIn{0%{opacity:0}to{opacity:1}}@keyframes crow-slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes crow-pulse{0%,to{opacity:1}50%{opacity:.4}}.crow-overflow-y-auto::-webkit-scrollbar{width:6px}.crow-overflow-y-auto::-webkit-scrollbar-track{background:transparent}.crow-overflow-y-auto::-webkit-scrollbar-thumb{background-color:#d1d5db;border-radius:3px}.crow-overflow-y-auto::-webkit-scrollbar-thumb:hover{background-color:#9ca3af}.crow-focus-visible\\\\:crow-outline-none:focus-visible{outline:none}.crow-focus-visible\\\\:crow-ring-2:focus-visible{box-shadow:0 0 0 2px var(--crow-primary,#6366f1)}:host{--crow-primary:#6366f1;--crow-primary-dark:#4f46e5;--crow-secondary:#f1f5f9;--crow-accent:#10b981}@media (prefers-color-scheme:dark){:host{--crow-primary:#818cf8;--crow-primary-dark:#6366f1}}.placeholder\\\\:crow-text-gray-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.placeholder\\\\:crow-text-gray-500::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.last\\\\:crow-mb-0:last-child{margin-bottom:0}.last\\\\:crow-border-0:last-child{border-width:0}.hover\\\\:crow-scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\\\\:crow-bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.hover\\\\:crow-bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.hover\\\\:crow-bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.hover\\\\:crow-bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.hover\\\\:crow-bg-red-500:hover{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.hover\\\\:crow-text-blue-300:hover{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.hover\\\\:crow-text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.hover\\\\:crow-text-gray-800:hover{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.hover\\\\:crow-opacity-100:hover{opacity:1}.focus\\\\:crow-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\\\:crow-ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\\\\:crow-ring-0:focus,.focus\\\\:crow-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\\\\:crow-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\\\\:crow-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus-visible\\\\:crow-outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\\\\:crow-ring-0:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.disabled\\\\:crow-pointer-events-none:disabled{pointer-events:none}.disabled\\\\:crow-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\\\:crow-opacity-50:disabled{opacity:.5}`;\n\nlet injected = false;\n\n/**\n * Inject styles into a target (document.head or ShadowRoot)\n * \n * For Shadow DOM usage, prefer passing the CSS string directly to ShadowContainer.\n * This function is kept for backwards compatibility and non-Shadow DOM use cases.\n * \n * @param target - Where to inject styles (defaults to document.head)\n */\nexport function injectStyles(target: Document | ShadowRoot = document) {\n // Only inject once per target\n if (target === document && injected) return;\n if (typeof document === 'undefined') return;\n \n // Check if already injected in this target\n const existingStyle = target === document \n ? document.getElementById(STYLE_ID)\n : (target as ShadowRoot).querySelector(`#${STYLE_ID}`);\n \n if (existingStyle) {\n if (target === document) injected = true;\n return;\n }\n \n const style = document.createElement('style');\n style.id = STYLE_ID;\n style.textContent = WIDGET_CSS;\n \n if (target === document) {\n document.head.appendChild(style);\n injected = true;\n } else {\n // For ShadowRoot, prepend the style\n (target as ShadowRoot).prepend(style);\n }\n}\n\n// NOTE: Auto-injection is DISABLED to prevent CSS leaking to host pages.\n// The widget now uses Shadow DOM for CSS isolation.\n// If you need to inject styles globally (not recommended), call injectStyles() manually.\n","/**\n * CrowWidget - Floating chat widget with bubble button\n * \n * The main widget component that supports:\n * - Floating mode (with bubble) for production\n * - Embedded mode (no bubble) for dashboard preview\n * - Custom styles from DB or props\n * - Shadow DOM encapsulation for CSS isolation\n */\n\nimport { useState, useRef, useEffect, type CSSProperties } from \"react\";\nimport { AnimatePresence } from \"framer-motion\";\n\n// Hooks\nimport { useChat } from \"./hooks/useChat\";\nimport { useConversations } from \"./hooks/useConversations\";\nimport { useWorkflow } from \"./hooks/useWorkflow\";\nimport { useCrowAPI } from \"./hooks/useCrowAPI\";\nimport { useWidgetStyles } from \"./hooks/useWidgetStyles\";\n\n// Context\nimport { WidgetStyleProvider } from \"./context/StyleContext\";\n\n// Components\nimport { ShadowContainer } from \"./components/ShadowContainer\";\nimport { ChatBubble, WidgetShell, WidgetHeader } from \"./components/widget\";\nimport {\n MessagesContainer,\n MessageList,\n ConversationList,\n WorkflowPanel,\n PoweredByBadge,\n PromptInputBox,\n} from \"./components/shared\";\n\n// Styles\nimport { WIDGET_CSS, stylesToCssVars } from \"./styles\";\n\n// Config\nimport { DEFAULT_MODEL } from \"./constants\";\nimport type { WidgetStyleConfig } from \"./styles/types\";\n\n/** Identity data passed to the identify function */\nexport interface IdentifyData {\n /** JWT token from your backend */\n token: string;\n /** User's display name */\n name?: string;\n /** Additional metadata */\n [key: string]: unknown;\n}\n\n/** Function to identify a user */\nexport type IdentifyFunction = (data: IdentifyData) => void;\n\n/** Client-side tool handler */\nexport type ToolHandler = (args: Record<string, unknown>) => Promise<unknown> | unknown;\n\n/** Map of tool names to handlers */\nexport type ToolsMap = Record<string, ToolHandler>;\n\nexport interface CrowWidgetProps {\n /** Product ID for this widget */\n productId: string;\n /** API URL (defaults to relative path) */\n apiUrl?: string;\n /** Widget variant: floating (with bubble) or embedded (for preview) */\n variant?: \"floating\" | \"embedded\";\n /** Custom styles to override DB and default styles */\n styles?: Partial<WidgetStyleConfig>;\n /** Skip fetching styles from API (use for preview mode with local state) */\n previewMode?: boolean;\n /** Callback when widget is ready */\n onReady?: () => void;\n /** \n * Callback to identify the user. Called with an identify function \n * that you should call with the user's token when available.\n */\n onIdentify?: (identify: IdentifyFunction) => void;\n /** Client-side tools the agent can call */\n tools?: ToolsMap;\n}\n\nexport function CrowWidget({\n productId,\n apiUrl = \"\",\n variant = \"floating\",\n styles: propStyles,\n previewMode = false,\n onReady,\n onIdentify,\n tools,\n}: CrowWidgetProps) {\n // Fetch and merge styles\n const { styles, isLoading: isLoadingStyles, agentName } = useWidgetStyles({\n productId,\n apiUrl,\n propStyles,\n skip: previewMode,\n });\n\n // Convert styles to CSS custom properties\n const cssVars = stylesToCssVars(styles) as CSSProperties;\n\n // Refs\n const messagesContainerRef = useRef<HTMLDivElement>(null);\n const executeClientToolRef = useRef<((toolName: string, args: Record<string, unknown>) => Promise<unknown>) | null>(null);\n const submitToolResultRef = useRef<((toolCallId: string, toolName: string, result: Record<string, unknown>) => Promise<void>) | null>(null);\n\n // UI State\n const [isCollapsed, setIsCollapsed] = useState(variant === \"floating\");\n const [showConversationList, setShowConversationList] = useState(false);\n const [isVerifiedUser, setIsVerifiedUser] = useState(false);\n\n // Workflow hook\n const {\n activeWorkflow,\n startWorkflow,\n updateTodo,\n markComplete,\n endWorkflow,\n } = useWorkflow({\n productId,\n apiUrl,\n conversationId: null,\n selectedModel: DEFAULT_MODEL,\n });\n\n // Conversations hook\n const conversations = useConversations({ productId, apiUrl });\n\n // Track if we need to restore history on mount\n const [shouldRestoreHistory, setShouldRestoreHistory] = useState(false);\n const hasRestoredHistoryRef = useRef(false);\n\n // Chat hook\n const chat = useChat({\n productId,\n apiUrl,\n onVerificationStatus: (isVerified) => {\n setIsVerifiedUser(isVerified);\n },\n onConversationId: () => {},\n onWorkflowEvent: (event) => {\n switch (event.type) {\n case \"started\":\n if (event.name && event.todos) {\n startWorkflow(event.name, event.todos);\n }\n break;\n case \"todo_updated\":\n if (event.todoId && event.todoStatus) {\n updateTodo(event.todoId, event.todoStatus);\n }\n break;\n case \"ended\":\n endWorkflow(2000);\n break;\n case \"complete_prompt\":\n markComplete();\n break;\n }\n },\n onToolCall: async (event) => {\n if (event.type === \"client_call\" && event.toolName && event.toolCallId) {\n try {\n const result = await executeClientToolRef.current?.(\n event.toolName,\n (event.arguments || {}) as Record<string, unknown>\n );\n // Send result back to agent so it can continue\n if (result && submitToolResultRef.current) {\n await submitToolResultRef.current(\n event.toolCallId,\n event.toolName,\n result as Record<string, unknown>\n );\n }\n } catch (e) {\n console.error(\"[Crow Widget] Tool error:\", e);\n if (submitToolResultRef.current) {\n await submitToolResultRef.current(\n event.toolCallId,\n event.toolName,\n { success: false, error: String(e) }\n );\n }\n }\n }\n },\n onRestoredConversation: () => {\n setShouldRestoreHistory(true);\n },\n });\n\n // Load anonymous conversation history when restored from localStorage\n useEffect(() => {\n if (shouldRestoreHistory && chat.conversationId && !hasRestoredHistoryRef.current) {\n hasRestoredHistoryRef.current = true;\n console.log(\"[Crow Widget] Restoring conversation history:\", chat.conversationId);\n conversations.loadAnonymousConversationHistory(chat.conversationId).then((historyMessages) => {\n if (historyMessages.length > 0) {\n chat.loadMessages(historyMessages);\n }\n });\n }\n }, [shouldRestoreHistory, chat.conversationId, conversations, chat]);\n\n // Workflow actions with current chat values\n const workflowActions = useWorkflow({\n productId,\n apiUrl,\n conversationId: chat.conversationId,\n selectedModel: chat.selectedModel,\n onMessage: (content) => {\n chat.loadMessages([\n ...chat.messages,\n {\n id: `bot-${Date.now()}`,\n content,\n isBot: true,\n timestamp: new Date(),\n },\n ]);\n },\n });\n\n // Crow API hook\n const { executeClientTool } = useCrowAPI({\n onIdentified: async () => {\n setIsVerifiedUser(true);\n await conversations.loadConversations();\n },\n onReset: () => {\n setIsVerifiedUser(false);\n chat.resetMessages();\n },\n });\n\n executeClientToolRef.current = executeClientTool;\n submitToolResultRef.current = chat.submitToolResult;\n\n // Notify when ready\n useEffect(() => {\n if (!isLoadingStyles) {\n onReady?.();\n }\n }, [isLoadingStyles, onReady]);\n\n // Call onIdentify with an identify function when widget is ready\n useEffect(() => {\n if (!isLoadingStyles && onIdentify) {\n const identify: IdentifyFunction = (data) => {\n if (!data.token) {\n console.error(\"[Crow] identify() requires a token\");\n return;\n }\n window.crow?.(\"identify\", data);\n };\n onIdentify(identify);\n }\n }, [isLoadingStyles, onIdentify]);\n\n // Register tools when provided\n useEffect(() => {\n if (tools && Object.keys(tools).length > 0) {\n window.crow?.(\"registerTools\", tools);\n }\n }, [tools]);\n\n // Handlers\n const handleSend = (message: string) => {\n if (!message.trim()) return;\n setIsCollapsed(false);\n chat.sendMessage(message);\n };\n\n const handleNewChat = () => {\n chat.resetMessages();\n setShowConversationList(false);\n };\n\n const handleToggleHistory = () => {\n setShowConversationList(!showConversationList);\n if (!showConversationList) {\n conversations.loadConversations();\n }\n };\n\n const handleSelectConversation = async (convId: string) => {\n const historyMessages = await conversations.loadConversationHistory(convId);\n if (historyMessages.length > 0) {\n chat.loadMessages(historyMessages);\n chat.setConversationId(convId);\n } else {\n chat.resetMessages();\n }\n setShowConversationList(false);\n };\n\n const handleCloseConversationList = () => {\n setShowConversationList(false);\n };\n\n const handleExitWorkflow = async () => {\n await workflowActions.exitWorkflow();\n };\n\n const handleBubbleClick = () => {\n setIsCollapsed(!isCollapsed);\n };\n\n // Widget content (shared between floating and embedded modes)\n const renderWidgetContent = () => (\n <>\n <WidgetHeader\n isVerifiedUser={isVerifiedUser}\n showConversationList={showConversationList}\n onNewChat={handleNewChat}\n onToggleHistory={handleToggleHistory}\n />\n\n <AnimatePresence>\n {showConversationList && isVerifiedUser && (\n <ConversationList\n conversations={conversations.conversations}\n currentConversationId={chat.conversationId}\n onSelect={handleSelectConversation}\n onClose={handleCloseConversationList}\n />\n )}\n </AnimatePresence>\n\n <AnimatePresence>\n {activeWorkflow && (\n <WorkflowPanel\n workflow={activeWorkflow}\n onExit={handleExitWorkflow}\n />\n )}\n </AnimatePresence>\n\n <AnimatePresence>\n {(chat.messages.length > 0 || conversations.isLoadingHistory) && (\n <MessagesContainer ref={messagesContainerRef}>\n <MessageList\n messages={chat.messages}\n activeToolCalls={chat.activeToolCalls}\n isLoadingHistory={conversations.isLoadingHistory}\n isGenerating={chat.isLoading}\n />\n </MessagesContainer>\n )}\n </AnimatePresence>\n\n <div className=\"crow-mt-auto crow-w-full\">\n <PoweredByBadge apiUrl={apiUrl} />\n <PromptInputBox\n onSend={handleSend}\n onStop={chat.stopGeneration}\n placeholder=\"Type your message...\"\n isLoading={chat.isLoading}\n className=\"crow-backdrop-blur-md\"\n />\n </div>\n </>\n );\n\n // Render with Shadow DOM encapsulation\n return (\n <ShadowContainer styles={WIDGET_CSS}>\n {/* Root element with CSS variables */}\n <div className=\"crow-widget-root\" style={cssVars}>\n <WidgetStyleProvider\n styles={styles}\n agentName={agentName}\n isLoading={isLoadingStyles}\n variant={variant}\n >\n {/* Floating mode: show bubble and collapsible widget */}\n {variant === \"floating\" && (\n <>\n <ChatBubble isExpanded={!isCollapsed} onClick={handleBubbleClick} />\n\n {!isCollapsed && (\n <WidgetShell>\n {renderWidgetContent()}\n </WidgetShell>\n )}\n </>\n )}\n\n {/* Embedded mode: always expanded, no bubble */}\n {variant === \"embedded\" && (\n <WidgetShell>\n {renderWidgetContent()}\n </WidgetShell>\n )}\n </WidgetStyleProvider>\n </div>\n </ShadowContainer>\n );\n}\n\nexport default CrowWidget;\n","/**\n * CrowCopilot - Sidebar chat panel\n *\n * Unlike CrowWidget, this component is designed to be mounted into\n * a user-provided container and works best as a sidebar in your app.\n * \n * Supports:\n * - Custom styles from DB or props\n * - Positioned left or right\n * - Identity verification via window.crow() API\n */\n\nimport { useState, useRef, useEffect } from \"react\";\nimport { AnimatePresence } from \"framer-motion\";\n\n// Hooks\nimport { useChat } from \"./hooks/useChat\";\nimport { useConversations } from \"./hooks/useConversations\";\nimport { useCrowAPI } from \"./hooks/useCrowAPI\";\nimport { useCopilotStyles } from \"./hooks/useWidgetStyles\";\n\n// Context\nimport { CopilotStyleProvider } from \"./context/StyleContext\";\n\n// Components\nimport {\n MessagesContainer,\n MessageList,\n ConversationList,\n PoweredByBadge,\n PromptInputBox,\n} from \"./components/shared\";\n\n// Config\nimport type { CopilotStyleConfig } from \"./styles/types\";\n\nexport interface CrowCopilotProps {\n /** Product ID for this copilot */\n productId: string;\n /** API URL (defaults to relative path) */\n apiUrl?: string;\n /** Title shown in header */\n title?: string;\n /** Position of the sidebar */\n position?: \"left\" | \"right\";\n /** Width of the sidebar */\n width?: number | string;\n /** Show close button */\n showClose?: boolean;\n /** Callback when close is clicked */\n onClose?: () => void;\n /** Custom styles to override DB and default styles */\n styles?: Partial<CopilotStyleConfig>;\n /** Skip fetching styles from API (use for preview mode) */\n previewMode?: boolean;\n /** Custom class name */\n className?: string;\n /** Callback when copilot is ready */\n onReady?: () => void;\n}\n\nexport function CrowCopilot({\n productId,\n apiUrl = \"\",\n title = \"Copilot\",\n position = \"right\",\n width = 400,\n showClose = false,\n onClose,\n styles: propStyles,\n previewMode = false,\n className,\n onReady,\n}: CrowCopilotProps) {\n // Fetch and merge styles\n const { styles, isLoading: isLoadingStyles, agentName } = useCopilotStyles({\n productId,\n apiUrl,\n propStyles,\n skip: previewMode,\n });\n\n // Refs\n const messagesContainerRef = useRef<HTMLDivElement>(null);\n const executeClientToolRef = useRef<((toolName: string, args: Record<string, unknown>) => Promise<unknown>) | null>(null);\n\n // UI State\n const [showConversationList, setShowConversationList] = useState(false);\n const [isVerifiedUser, setIsVerifiedUser] = useState(false);\n\n // Conversations hook\n const conversations = useConversations({ productId, apiUrl });\n\n // Track if we need to restore history on mount\n const [shouldRestoreHistory, setShouldRestoreHistory] = useState(false);\n const hasRestoredHistoryRef = useRef(false);\n\n // Chat hook\n const chat = useChat({\n productId,\n apiUrl,\n onVerificationStatus: (isVerified) => {\n setIsVerifiedUser(isVerified);\n },\n onConversationId: () => {},\n onToolCall: (event) => {\n if (event.type === \"client_call\" && event.toolName) {\n console.log(\"[Crow Copilot] Executing client tool:\", event.toolName, event.arguments);\n const result = executeClientToolRef.current?.(event.toolName, (event.arguments || {}) as Record<string, unknown>);\n result?.then((r) => console.log(\"[Crow Copilot] Tool result:\", r)).catch((e) => console.error(\"[Crow Copilot] Tool error:\", e));\n }\n },\n onRestoredConversation: () => {\n setShouldRestoreHistory(true);\n },\n });\n\n // Load anonymous conversation history when restored from localStorage\n useEffect(() => {\n if (shouldRestoreHistory && chat.conversationId && !hasRestoredHistoryRef.current) {\n hasRestoredHistoryRef.current = true;\n conversations.loadAnonymousConversationHistory(chat.conversationId).then((historyMessages) => {\n if (historyMessages.length > 0) {\n chat.loadMessages(historyMessages);\n }\n });\n }\n }, [shouldRestoreHistory, chat.conversationId, conversations, chat]);\n\n // Crow API hook\n const { executeClientTool } = useCrowAPI({\n onIdentified: async () => {\n setIsVerifiedUser(true);\n await conversations.loadConversations();\n },\n onReset: () => {\n setIsVerifiedUser(false);\n chat.resetMessages();\n },\n });\n\n executeClientToolRef.current = executeClientTool;\n\n // Notify when ready\n useEffect(() => {\n if (!isLoadingStyles) {\n onReady?.();\n }\n }, [isLoadingStyles, onReady]);\n\n // Handlers\n const handleSend = (message: string) => {\n if (!message.trim()) return;\n chat.sendMessage(message);\n };\n\n const handleNewChat = () => {\n chat.resetMessages();\n setShowConversationList(false);\n };\n\n const handleToggleHistory = () => {\n setShowConversationList(!showConversationList);\n if (!showConversationList) {\n conversations.loadConversations();\n }\n };\n\n const handleSelectConversation = async (convId: string) => {\n const historyMessages = await conversations.loadConversationHistory(convId);\n if (historyMessages.length > 0) {\n chat.loadMessages(historyMessages);\n chat.setConversationId(convId);\n } else {\n chat.resetMessages();\n }\n setShowConversationList(false);\n };\n\n const handleCloseConversationList = () => {\n setShowConversationList(false);\n };\n\n const widthStyle = typeof width === \"number\" ? `${width}px` : width;\n\n return (\n <CopilotStyleProvider\n styles={styles}\n agentName={agentName || title}\n isLoading={isLoadingStyles}\n >\n <div\n className={`crow-flex crow-flex-col crow-h-full ${\n position === \"left\" ? \"crow-border-r\" : \"crow-border-l\"\n } ${className || \"\"}`}\n style={{\n width: widthStyle,\n fontFamily: styles.typography.fontFamily,\n fontSize: styles.typography.fontSize,\n fontWeight: styles.typography.fontWeight,\n lineHeight: styles.typography.lineHeight,\n letterSpacing: styles.typography.letterSpacing,\n background: styles.colors.background,\n borderColor: styles.colors.border,\n }}\n >\n {/* Header */}\n <div\n className=\"crow-flex crow-items-center crow-justify-between crow-px-4 crow-py-3 crow-border-b\"\n style={{\n height: styles.dimensions.headerHeight,\n borderColor: styles.colors.border,\n }}\n >\n <span\n className=\"crow-font-semibold\"\n style={{\n color: styles.colors.text,\n fontSize: styles.typography.headerFontSize,\n }}\n >\n {agentName || title}\n </span>\n\n <div className=\"crow-flex crow-items-center crow-gap-1\">\n {/* New Chat button */}\n <button\n onClick={handleNewChat}\n className=\"crow-p-1.5 hover:crow-bg-gray-100 crow-rounded crow-transition-colors\"\n aria-label=\"New Chat\"\n title=\"New Chat\"\n >\n <PlusIcon className=\"crow-w-4 crow-h-4 crow-text-gray-600\" />\n </button>\n\n {/* History button - only for verified users */}\n {isVerifiedUser && (\n <button\n onClick={handleToggleHistory}\n className={`crow-p-1.5 hover:crow-bg-gray-100 crow-rounded crow-transition-colors ${\n showConversationList ? \"crow-bg-gray-100\" : \"\"\n }`}\n aria-label=\"Conversation History\"\n title=\"Conversation History\"\n >\n <HistoryIcon className=\"crow-w-4 crow-h-4 crow-text-gray-600\" />\n </button>\n )}\n\n {/* Close button */}\n {showClose && onClose && (\n <button\n onClick={onClose}\n className=\"crow-p-1.5 hover:crow-bg-gray-100 crow-rounded crow-transition-colors\"\n aria-label=\"Close\"\n >\n <CloseIcon className=\"crow-w-4 crow-h-4 crow-text-gray-600\" />\n </button>\n )}\n </div>\n </div>\n\n {/* Conversation List */}\n <AnimatePresence>\n {showConversationList && isVerifiedUser && (\n <ConversationList\n conversations={conversations.conversations}\n currentConversationId={chat.conversationId}\n onSelect={handleSelectConversation}\n onClose={handleCloseConversationList}\n />\n )}\n </AnimatePresence>\n\n {/* Messages */}\n <MessagesContainer ref={messagesContainerRef}>\n <MessageList\n messages={chat.messages}\n activeToolCalls={chat.activeToolCalls}\n isLoadingHistory={conversations.isLoadingHistory}\n isGenerating={chat.isLoading}\n />\n </MessagesContainer>\n\n {/* Input */}\n <div className=\"crow-p-3 crow-border-t\" style={{ borderColor: styles.colors.border }}>\n {styles.branding.showPoweredBy && (\n <PoweredByBadge apiUrl={apiUrl} />\n )}\n <PromptInputBox\n onSend={handleSend}\n onStop={chat.stopGeneration}\n placeholder=\"Ask anything...\"\n isLoading={chat.isLoading}\n />\n </div>\n </div>\n </CopilotStyleProvider>\n );\n}\n\n// Simple icon components (to avoid lucide-react import issues in some setups)\nfunction PlusIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M5 12h14\" />\n <path d=\"M12 5v14\" />\n </svg>\n );\n}\n\nfunction HistoryIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" />\n <path d=\"M3 3v5h5\" />\n <path d=\"M12 7v5l4 2\" />\n </svg>\n );\n}\n\nfunction CloseIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\nexport default CrowCopilot;\n","/**\n * CrowProvider - React context provider for sharing CrowClient\n */\n\nimport { createContext, useContext, useMemo, useEffect, useRef } from 'react';\nimport { CrowClient, type CrowClientConfig } from '@usecrow/client';\n\ninterface CrowContextValue {\n client: CrowClient;\n}\n\nconst CrowContext = createContext<CrowContextValue | null>(null);\n\nexport interface CrowProviderProps extends CrowClientConfig {\n children: React.ReactNode;\n}\n\n/**\n * Provider component that creates and shares a CrowClient instance\n */\nexport function CrowProvider({\n children,\n productId,\n apiUrl,\n model,\n}: CrowProviderProps) {\n // Create client once and keep it stable\n const clientRef = useRef<CrowClient | null>(null);\n\n if (!clientRef.current) {\n clientRef.current = new CrowClient({ productId, apiUrl, model });\n }\n\n const client = clientRef.current;\n\n // Clean up on unmount\n useEffect(() => {\n return () => {\n client.destroy();\n };\n }, [client]);\n\n const value = useMemo(() => ({ client }), [client]);\n\n return <CrowContext.Provider value={value}>{children}</CrowContext.Provider>;\n}\n\n/**\n * Hook to access the CrowClient from context\n */\nexport function useCrowClient(): CrowClient {\n const context = useContext(CrowContext);\n if (!context) {\n throw new Error('useCrowClient must be used within a CrowProvider');\n }\n return context.client;\n}\n\n/**\n * Hook to optionally access the CrowClient (returns null if not in provider)\n */\nexport function useCrowClientOptional(): CrowClient | null {\n const context = useContext(CrowContext);\n return context?.client ?? null;\n}\n\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils.ts","../src/constants.ts","../src/hooks/useChat.ts","../src/hooks/useConversations.ts","../src/hooks/useWorkflow.ts","../src/hooks/useCrowAPI.ts","../src/styles/defaults.ts","../src/styles/utils.ts","../src/hooks/useWidgetStyles.ts","../src/context/StyleContext.tsx","../src/components/ShadowContainer.tsx","../src/components/widget/ChatBubble.tsx","../src/components/widget/WidgetShell.tsx","../src/components/widget/WidgetHeader.tsx","../src/components/shared/StreamingText.tsx","../src/components/shared/ThinkingIndicator.tsx","../src/components/shared/LoadingHistory.tsx","../src/components/shared/ReasoningTrace.tsx","../src/components/shared/MessageBubble.tsx","../src/components/shared/MessageList.tsx","../src/components/shared/MessagesContainer.tsx","../src/components/shared/ConversationList.tsx","../src/components/shared/WorkflowPanel.tsx","../src/components/shared/PoweredByBadge.tsx","../src/components/shared/ModelSelector.tsx","../src/components/shared/PromptInputBox.tsx","../src/styles/cssVars.ts","../src/styles/inject.ts","../src/CrowWidget.tsx","../src/CrowCopilot.tsx","../src/CrowProvider.tsx"],"names":["useState","useCallback","useRef","useEffect","useWidgetStyles","useCopilotStyles","jsx","jsxs","ChevronDown","Fragment","motion","ReactMarkdown","forwardRef","Check","React","AnimatePresence","createContext","useMemo"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Utility functions\n */\n\n/**\n * Merge class names, filtering out falsy values\n */\nexport const cn = (...classes: (string | undefined | null | false)[]): string =>\n classes.filter(Boolean).join(\" \");\n\n/**\n * Format timestamp for display\n */\nexport const formatTime = (date: Date): string =>\n date.toLocaleTimeString(\"en-US\", {\n hour: \"numeric\",\n minute: \"2-digit\",\n });\n\n/**\n * Format conversation date for display\n */\nexport const formatConversationDate = (dateStr: string): string => {\n const date = new Date(dateStr);\n const now = new Date();\n const diffDays = Math.floor(\n (now.getTime() - date.getTime()) / (1000 * 60 * 60 * 24)\n );\n\n if (diffDays === 0) return \"Today\";\n if (diffDays === 1) return \"Yesterday\";\n if (diffDays < 7) return `${diffDays} days ago`;\n return date.toLocaleDateString();\n};\n\n/**\n * Generate unique message ID\n */\nexport const generateMessageId = (prefix: \"user\" | \"bot\" | \"welcome\" | \"history\"): string =>\n `${prefix}-${Date.now()}`;\n","/**\n * Static configuration values\n */\n\nimport type { Model } from \"./types\";\n\nexport const AVAILABLE_MODELS: Model[] = [\n { id: \"gpt-4o\", name: \"GPT-4o\", provider: \"OpenAI\" },\n { id: \"gpt-5-mini\", name: \"GPT-5 Mini\", provider: \"OpenAI\" },\n { id: \"gpt-5.2\", name: \"GPT-5.2\", provider: \"OpenAI\" },\n { id: \"gpt-5.2-pro\", name: \"GPT-5.2 Pro\", provider: \"OpenAI\" },\n { id: \"claude-haiku-4-5-20251001\", name: \"Haiku 4.5\", provider: \"Anthropic\" },\n { id: \"claude-sonnet-4-5-20250929\", name: \"Sonnet 4.5\", provider: \"Anthropic\" },\n { id: \"claude-opus-4-5-20251203\", name: \"Opus 4.5\", provider: \"Anthropic\" },\n];\n\nexport const DEFAULT_MODEL = \"claude-sonnet-4-5-20250929\";\n\nexport const DEFAULT_WELCOME_MESSAGE = \"Hi! How can I help you today?\";\n\nexport const MESSAGES_CONTAINER_ID = \"crow-messages-container\";\n","/**\n * useChat - Manages chat state and streaming\n */\n\nimport { useState, useRef, useCallback, useEffect } from \"react\";\nimport type { Message, ToolCall } from \"../types\";\nimport { generateMessageId } from \"../utils\";\nimport { DEFAULT_WELCOME_MESSAGE, DEFAULT_MODEL } from \"../constants\";\n\ninterface WorkflowEvent {\n type: \"started\" | \"todo_updated\" | \"ended\" | \"complete_prompt\";\n name?: string;\n todos?: Array<{ id: string; text: string; status: \"pending\" | \"completed\" }>;\n todoId?: string;\n todoStatus?: \"pending\" | \"completed\";\n}\n\ninterface ToolCallEvent {\n type: \"start\" | \"complete\" | \"client_call\";\n toolName: string;\n toolCallId?: string; // Unique ID for client-side tool calls (to send results back)\n arguments?: Record<string, unknown>;\n success?: boolean;\n}\n\ninterface UseChatOptions {\n productId: string;\n apiUrl?: string;\n onVerificationStatus?: (isVerified: boolean) => void;\n onConversationId?: (id: string) => void;\n onWorkflowEvent?: (event: WorkflowEvent) => void;\n onToolCall?: (toolCall: ToolCallEvent) => void;\n onRestoredConversation?: (conversationId: string) => void;\n}\n\nconst getConversationStorageKey = (productId: string) => `crow_conv_${productId}`;\n\nexport function useChat({\n productId,\n apiUrl = \"\",\n onVerificationStatus,\n onConversationId,\n onWorkflowEvent,\n onToolCall,\n onRestoredConversation,\n}: UseChatOptions) {\n const [messages, setMessages] = useState<Message[]>([\n {\n id: \"welcome\",\n content: DEFAULT_WELCOME_MESSAGE,\n isBot: true,\n timestamp: new Date(),\n },\n ]);\n const [isLoading, setIsLoading] = useState(false);\n const [activeToolCalls, setActiveToolCalls] = useState<ToolCall[]>([]);\n const [conversationId, setConversationId] = useState<string | null>(() => {\n try {\n return localStorage.getItem(getConversationStorageKey(productId));\n } catch {\n return null;\n }\n });\n const [selectedModel, setSelectedModel] = useState(DEFAULT_MODEL);\n\n const abortControllerRef = useRef<AbortController | null>(null);\n const hasRestoredRef = useRef(false);\n\n useEffect(() => {\n if (conversationId && onRestoredConversation && !hasRestoredRef.current) {\n hasRestoredRef.current = true;\n onRestoredConversation(conversationId);\n }\n }, []);\n\n const streamFromBackend = useCallback(\n async (message: string, botMsgId: string) => {\n let accumulatedText = \"\";\n let firstChunk = true;\n // Queue client tool calls to execute after stream completes\n const pendingClientTools: Array<{\n toolName: string;\n toolCallId: string;\n arguments: Record<string, unknown>;\n }> = [];\n\n abortControllerRef.current = new AbortController();\n\n try {\n const identityToken = window.__crow_identity_token;\n\n const response = await fetch(`${apiUrl}/api/chat/message`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n product_id: productId,\n message,\n conversation_id: conversationId,\n identity_token: identityToken,\n model: selectedModel,\n }),\n signal: abortControllerRef.current.signal,\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const reader = response.body?.getReader();\n const decoder = new TextDecoder();\n\n if (reader) {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n const chunk = decoder.decode(value);\n const lines = chunk.split(\"\\n\");\n\n for (const line of lines) {\n if (line.startsWith(\"data: \")) {\n const data = line.slice(6).trim();\n if (data === \"[DONE]\") {\n setIsLoading(false);\n // Execute queued client tool calls after stream completes\n for (const tool of pendingClientTools) {\n onToolCall?.({\n type: \"client_call\",\n toolName: tool.toolName,\n toolCallId: tool.toolCallId,\n arguments: tool.arguments,\n });\n }\n return;\n }\n\n try {\n const parsed = JSON.parse(data);\n\n switch (parsed.type) {\n case \"verification_status\":\n onVerificationStatus?.(parsed.is_verified === true);\n break;\n\n case \"conversation_id\":\n if (parsed.conversation_id) {\n setConversationId(parsed.conversation_id);\n try {\n localStorage.setItem(\n getConversationStorageKey(productId),\n parsed.conversation_id\n );\n } catch {\n // localStorage may be unavailable\n }\n onConversationId?.(parsed.conversation_id);\n }\n break;\n\n case \"thinking\":\n if (parsed.status === \"complete\") {\n setMessages((prev) =>\n prev.map((msg) =>\n msg.id === botMsgId\n ? { ...msg, thinkingComplete: true }\n : msg\n )\n );\n }\n break;\n\n case \"thinking_token\":\n if (parsed.content) {\n setMessages((prev) =>\n prev.map((msg) =>\n msg.id === botMsgId\n ? { ...msg, thinking: (msg.thinking || \"\") + parsed.content }\n : msg\n )\n );\n }\n break;\n\n case \"content\":\n if (firstChunk) firstChunk = false;\n accumulatedText += parsed.content;\n setMessages((prev) =>\n prev.map((msg) =>\n msg.id === botMsgId\n ? { ...msg, content: accumulatedText }\n : msg\n )\n );\n break;\n\n case \"citations\":\n if (parsed.citations) {\n setMessages((prev) =>\n prev.map((msg) =>\n msg.id === botMsgId\n ? { ...msg, citations: parsed.citations }\n : msg\n )\n );\n }\n break;\n\n case \"error\":\n if (parsed.message) {\n setMessages((prev) =>\n prev.map((msg) =>\n msg.id === botMsgId\n ? { ...msg, content: parsed.message }\n : msg\n )\n );\n }\n break;\n\n case \"tool_call_start\":\n onToolCall?.({\n type: \"start\",\n toolName: parsed.tool_name,\n arguments: parsed.arguments,\n });\n setActiveToolCalls((prev) => [\n ...prev,\n {\n id: `tool-${Date.now()}`,\n name: parsed.tool_name,\n arguments: parsed.arguments || {},\n status: \"executing\",\n timestamp: new Date(),\n },\n ]);\n break;\n\n case \"tool_call_complete\":\n onToolCall?.({\n type: \"complete\",\n toolName: parsed.tool_name,\n success: parsed.success,\n });\n setActiveToolCalls((prev) =>\n prev.map((tool) =>\n tool.name === parsed.tool_name\n ? { ...tool, status: parsed.success ? \"complete\" : \"error\" }\n : tool\n )\n );\n break;\n\n case \"client_tool_call\":\n // Queue for execution after stream completes\n pendingClientTools.push({\n toolName: parsed.tool_name,\n toolCallId: parsed.tool_call_id,\n arguments: parsed.arguments,\n });\n break;\n\n case \"workflow_started\":\n onWorkflowEvent?.({\n type: \"started\",\n name: parsed.name,\n todos: parsed.todos,\n });\n break;\n\n case \"todo_updated\":\n onWorkflowEvent?.({\n type: \"todo_updated\",\n todoId: parsed.id,\n todoStatus: parsed.status,\n });\n break;\n\n case \"workflow_ended\":\n onWorkflowEvent?.({ type: \"ended\" });\n break;\n\n case \"workflow_complete_prompt\":\n onWorkflowEvent?.({ type: \"complete_prompt\" });\n break;\n }\n } catch (e) {\n console.error(\"[Crow] Parse error:\", e);\n }\n }\n }\n }\n }\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n if (accumulatedText) {\n setMessages((prev) =>\n prev.map((msg) =>\n msg.id === botMsgId ? { ...msg, content: accumulatedText } : msg\n )\n );\n } else {\n setMessages((prev) => prev.filter((msg) => msg.id !== botMsgId));\n }\n return;\n }\n\n console.error(\"[Crow] Error:\", error);\n setMessages((prev) =>\n prev.map((msg) =>\n msg.id === botMsgId\n ? { ...msg, content: \"Sorry, I encountered an error. Please try again.\" }\n : msg\n )\n );\n } finally {\n setIsLoading(false);\n abortControllerRef.current = null;\n }\n },\n [apiUrl, productId, conversationId, selectedModel, onVerificationStatus, onConversationId, onWorkflowEvent, onToolCall]\n );\n\n const sendMessage = useCallback(\n (content: string): { userMsgId: string; botMsgId: string } => {\n if (!content.trim()) {\n return { userMsgId: \"\", botMsgId: \"\" };\n }\n\n setActiveToolCalls([]);\n\n const userMsgId = generateMessageId(\"user\");\n const botMsgId = generateMessageId(\"bot\");\n\n setMessages((prev) => [\n ...prev,\n {\n id: userMsgId,\n content,\n isBot: false,\n timestamp: new Date(),\n },\n ]);\n\n setIsLoading(true);\n\n setMessages((prev) => [\n ...prev,\n {\n id: botMsgId,\n content: \"Thinking...\",\n isBot: true,\n timestamp: new Date(),\n },\n ]);\n\n streamFromBackend(content, botMsgId);\n\n return { userMsgId, botMsgId };\n },\n [streamFromBackend]\n );\n\n const stopGeneration = useCallback(() => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n setIsLoading(false);\n }\n }, []);\n\n const resetMessages = useCallback(() => {\n setMessages([\n {\n id: \"welcome\",\n content: DEFAULT_WELCOME_MESSAGE,\n isBot: true,\n timestamp: new Date(),\n },\n ]);\n setConversationId(null);\n try {\n localStorage.removeItem(getConversationStorageKey(productId));\n } catch {\n // localStorage may be unavailable\n }\n }, [productId]);\n\n const loadMessages = useCallback((historyMessages: Message[]) => {\n setMessages(historyMessages);\n }, []);\n\n /**\n * Submit the result of a client-side tool execution back to the agent.\n * The agent will receive this result and can continue the conversation.\n */\n const submitToolResult = useCallback(\n async (\n toolCallId: string,\n toolName: string,\n result: Record<string, unknown>\n ) => {\n if (!conversationId) {\n console.error(\"[Crow] Cannot submit tool result: no conversation ID\");\n return;\n }\n\n const botMsgId = generateMessageId(\"bot\");\n // Queue for any follow-up tool calls (e.g., if agent retries)\n const pendingClientTools: Array<{\n toolName: string;\n toolCallId: string;\n arguments: Record<string, unknown>;\n }> = [];\n\n // Add placeholder for agent response\n setMessages((prev) => [\n ...prev,\n {\n id: botMsgId,\n content: \"\",\n isBot: true,\n timestamp: new Date(),\n },\n ]);\n\n setIsLoading(true);\n\n try {\n const identityToken = window.__crow_identity_token;\n\n const response = await fetch(`${apiUrl}/api/chat/tool-result`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n product_id: productId,\n conversation_id: conversationId,\n tool_call_id: toolCallId,\n tool_name: toolName,\n result,\n identity_token: identityToken,\n model: selectedModel,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const reader = response.body?.getReader();\n const decoder = new TextDecoder();\n let accumulatedText = \"\";\n\n if (reader) {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n const chunk = decoder.decode(value);\n const lines = chunk.split(\"\\n\");\n\n for (const line of lines) {\n if (line.startsWith(\"data: \")) {\n const data = line.slice(6).trim();\n if (data === \"[DONE]\") {\n setIsLoading(false);\n // Execute any queued tool calls (agent retries)\n for (const tool of pendingClientTools) {\n onToolCall?.({\n type: \"client_call\",\n toolName: tool.toolName,\n toolCallId: tool.toolCallId,\n arguments: tool.arguments,\n });\n }\n return;\n }\n\n try {\n const parsed = JSON.parse(data);\n\n if (parsed.type === \"content\") {\n accumulatedText += parsed.content;\n setMessages((prev) =>\n prev.map((msg) =>\n msg.id === botMsgId\n ? { ...msg, content: accumulatedText }\n : msg\n )\n );\n } else if (parsed.type === \"client_tool_call\") {\n // Queue for execution after stream completes\n pendingClientTools.push({\n toolName: parsed.tool_name,\n toolCallId: parsed.tool_call_id,\n arguments: parsed.arguments,\n });\n }\n } catch (e) {\n console.error(\"[Crow] Parse error in tool result response:\", e);\n }\n }\n }\n }\n }\n } catch (error) {\n console.error(\"[Crow] Error submitting tool result:\", error);\n setMessages((prev) =>\n prev.map((msg) =>\n msg.id === botMsgId\n ? { ...msg, content: \"Sorry, I encountered an error processing the tool result.\" }\n : msg\n )\n );\n } finally {\n setIsLoading(false);\n }\n },\n [apiUrl, productId, conversationId, selectedModel]\n );\n\n return {\n messages,\n isLoading,\n activeToolCalls,\n conversationId,\n selectedModel,\n setSelectedModel,\n setConversationId,\n sendMessage,\n stopGeneration,\n resetMessages,\n loadMessages,\n submitToolResult,\n };\n}\n","/**\n * useConversations - Manages conversation list and history\n */\n\nimport { useState, useCallback } from \"react\";\nimport type { Conversation, Message } from \"../types\";\n\ninterface UseConversationsOptions {\n productId: string;\n apiUrl?: string;\n}\n\nexport function useConversations({ productId, apiUrl = \"\" }: UseConversationsOptions) {\n const [conversations, setConversations] = useState<Conversation[]>([]);\n const [isLoadingHistory, setIsLoadingHistory] = useState(false);\n\n const loadConversations = useCallback(async () => {\n const token = window.__crow_identity_token;\n if (!token) return;\n\n try {\n const res = await fetch(\n `${apiUrl}/api/chat/conversations?product_id=${productId}&identity_token=${encodeURIComponent(token)}`\n );\n if (res.ok) {\n const data = await res.json();\n setConversations(data.conversations || []);\n }\n } catch (error) {\n console.error(\"[Crow] Failed to load conversations:\", error);\n }\n }, [apiUrl, productId]);\n\n const loadConversationHistory = useCallback(\n async (conversationId: string): Promise<Message[]> => {\n const token = window.__crow_identity_token;\n if (!token) return [];\n\n setIsLoadingHistory(true);\n\n try {\n const res = await fetch(\n `${apiUrl}/api/chat/conversations/${conversationId}/history?product_id=${productId}&identity_token=${encodeURIComponent(token)}`\n );\n\n if (res.ok) {\n const data = await res.json();\n const historyMessages = data.messages || [];\n\n return historyMessages\n .filter((msg: { role: string; content: string }) => \n msg.role !== \"tool\" && !msg.content.startsWith(\"[Client Tool Result:\")\n )\n .map((msg: { role: string; content: string }, idx: number) => ({\n id: `history-${idx}`,\n content: msg.content,\n isBot: msg.role === \"assistant\",\n timestamp: new Date(),\n }));\n }\n } catch (error) {\n console.error(\"[Crow] Error loading conversation history:\", error);\n } finally {\n setIsLoadingHistory(false);\n }\n\n return [];\n },\n [apiUrl, productId]\n );\n\n const loadAnonymousConversationHistory = useCallback(\n async (conversationId: string): Promise<Message[]> => {\n setIsLoadingHistory(true);\n\n try {\n const res = await fetch(\n `${apiUrl}/api/chat/conversations/${conversationId}/history/anonymous?product_id=${productId}`\n );\n\n if (res.ok) {\n const data = await res.json();\n const historyMessages = data.messages || [];\n\n return historyMessages\n .filter((msg: { role: string; content: string }) => \n msg.role !== \"tool\" && !msg.content.startsWith(\"[Client Tool Result:\")\n )\n .map((msg: { role: string; content: string }, idx: number) => ({\n id: `history-${idx}`,\n content: msg.content,\n isBot: msg.role === \"assistant\",\n timestamp: new Date(),\n }));\n }\n } catch (error) {\n console.error(\"[Crow] Error loading anonymous conversation history:\", error);\n } finally {\n setIsLoadingHistory(false);\n }\n\n return [];\n },\n [apiUrl, productId]\n );\n\n return {\n conversations,\n isLoadingHistory,\n loadConversations,\n loadConversationHistory,\n loadAnonymousConversationHistory,\n };\n}\n","/**\n * useWorkflow - Manages workflow state and actions\n */\n\n//THIS IS JOURNEYS\n\nimport { useState, useCallback, useRef } from \"react\";\nimport type { ActiveWorkflow } from \"../types\";\n\ninterface UseWorkflowOptions {\n productId: string;\n apiUrl?: string;\n conversationId: string | null;\n selectedModel: string;\n onMessage?: (content: string) => void;\n}\n\nexport function useWorkflow({\n productId,\n apiUrl = \"\",\n conversationId,\n selectedModel,\n onMessage,\n}: UseWorkflowOptions) {\n const [activeWorkflow, setActiveWorkflow] = useState<ActiveWorkflow | null>(null);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n const startWorkflow = useCallback((name: string, todos: ActiveWorkflow[\"todos\"]) => {\n setActiveWorkflow({ name, todos });\n }, []);\n\n const updateTodo = useCallback((todoId: string, status: \"pending\" | \"completed\") => {\n setActiveWorkflow((prev) => {\n if (!prev) return null;\n return {\n ...prev,\n todos: prev.todos.map((todo) =>\n todo.id === todoId ? { ...todo, status } : todo\n ),\n };\n });\n }, []);\n\n const markComplete = useCallback(() => {\n setActiveWorkflow((prev) => {\n if (!prev) return null;\n return { ...prev, isComplete: true };\n });\n }, []);\n\n const endWorkflow = useCallback((delay: number = 0) => {\n if (delay > 0) {\n setTimeout(() => setActiveWorkflow(null), delay);\n } else {\n setActiveWorkflow(null);\n }\n }, []);\n\n const exitWorkflow = useCallback(async () => {\n abortControllerRef.current = new AbortController();\n\n try {\n const identityToken = window.__crow_identity_token;\n\n const response = await fetch(`${apiUrl}/api/chat/message`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n product_id: productId,\n message: \"[EXIT_WORKFLOW]\",\n conversation_id: conversationId,\n identity_token: identityToken,\n model: selectedModel,\n }),\n signal: abortControllerRef.current.signal,\n });\n\n if (!response.ok) return;\n\n const reader = response.body?.getReader();\n const decoder = new TextDecoder();\n\n if (reader) {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n const chunk = decoder.decode(value);\n const lines = chunk.split(\"\\n\");\n\n for (const line of lines) {\n if (line.startsWith(\"data: \")) {\n const data = line.slice(6).trim();\n if (data === \"[DONE]\") return;\n\n try {\n const parsed = JSON.parse(data);\n if (parsed.type === \"workflow_ended\") {\n setActiveWorkflow(null);\n }\n if (parsed.type === \"content\" && parsed.content) {\n onMessage?.(parsed.content);\n }\n } catch {\n // Ignore parse errors\n }\n }\n }\n }\n }\n } catch (error) {\n console.error(\"[Crow] Exit workflow error:\", error);\n } finally {\n abortControllerRef.current = null;\n }\n }, [apiUrl, productId, conversationId, selectedModel, onMessage]);\n\n return {\n activeWorkflow,\n startWorkflow,\n updateTodo,\n markComplete,\n endWorkflow,\n exitWorkflow,\n };\n}\n","/**\n * useCrowAPI - Sets up window.crow() API for identity and tools\n */\n\nimport { useEffect, useCallback, useRef } from \"react\";\nimport type { ClientToolHandler } from \"../types\";\n\ninterface UseCrowAPIOptions {\n onIdentified?: () => void;\n onReset?: () => void;\n}\n\nexport function useCrowAPI({ onIdentified, onReset }: UseCrowAPIOptions = {}) {\n const onIdentifiedRef = useRef(onIdentified);\n const onResetRef = useRef(onReset);\n const hasCalledInitialRef = useRef(false);\n\n useEffect(() => {\n onIdentifiedRef.current = onIdentified;\n onResetRef.current = onReset;\n });\n\n useEffect(() => {\n window.crow = function (command: string, options?: unknown) {\n const opts = options as Record<string, unknown> | undefined;\n\n switch (command) {\n case \"identify\":\n if (!opts?.token) {\n console.error(\"[Crow] identify() requires a token\");\n return;\n }\n\n window.__crow_identity_token = opts.token as string;\n\n const { token, ...metadata } = opts;\n window.__crow_public_metadata = metadata;\n\n console.log(\"[Crow] User identified\");\n window.dispatchEvent(\n new CustomEvent(\"crow:identified\", { detail: { token, metadata } })\n );\n break;\n\n case \"resetUser\":\n window.__crow_identity_token = undefined;\n window.__crow_public_metadata = undefined;\n console.log(\"[Crow] User reset\");\n window.dispatchEvent(new CustomEvent(\"crow:reset\"));\n break;\n\n case \"registerTools\":\n if (!opts || typeof opts !== \"object\") {\n console.error(\"[Crow] registerTools() requires an object\");\n return;\n }\n\n if (!window.__crow_client_tools) {\n window.__crow_client_tools = {};\n }\n\n for (const [toolName, handler] of Object.entries(opts)) {\n if (typeof handler === \"function\") {\n window.__crow_client_tools[toolName] = handler as ClientToolHandler;\n console.log(`[Crow] Registered tool: ${toolName}`);\n }\n }\n break;\n\n case \"runJourney\":\n if (!opts?.journeyId) {\n console.error(\"[Crow] runJourney() requires a journeyId\");\n return;\n }\n window.dispatchEvent(\n new CustomEvent(\"crow:runJourney\", {\n detail: { journeyId: opts.journeyId, inputs: opts.inputs || {} },\n })\n );\n break;\n\n default:\n console.warn(`[Crow] Unknown command: ${command}`);\n }\n };\n\n console.log(\"[Crow] API ready\");\n\n const handleIdentified = () => onIdentifiedRef.current?.();\n const handleReset = () => onResetRef.current?.();\n\n window.addEventListener(\"crow:identified\", handleIdentified);\n window.addEventListener(\"crow:reset\", handleReset);\n\n if (window.__crow_identity_token && !hasCalledInitialRef.current) {\n hasCalledInitialRef.current = true;\n onIdentifiedRef.current?.();\n }\n\n return () => {\n window.removeEventListener(\"crow:identified\", handleIdentified);\n window.removeEventListener(\"crow:reset\", handleReset);\n };\n }, []);\n\n const executeClientTool = useCallback(\n async (toolName: string, args: Record<string, unknown>) => {\n const handler = window.__crow_client_tools?.[toolName];\n if (handler) {\n try {\n return await handler(args);\n } catch (err) {\n console.error(`[Crow] Client tool error: ${toolName}`, err);\n return { status: \"error\", error: String(err) };\n }\n }\n console.warn(`[Crow] No handler for: ${toolName}`);\n return { status: \"error\", error: \"No handler registered\" };\n },\n []\n );\n\n return { executeClientTool };\n}\n","/**\n * Default Widget and Copilot Styles\n * \n * These are the default values used when no custom styles are provided.\n * All values can be overridden via the Supabase database or SDK props.\n */\n\nimport type { ResolvedWidgetStyles, ResolvedCopilotStyles } from './types';\n\n/**\n * Default widget styles - matches the mature widget implementation\n */\nexport const DEFAULT_WIDGET_STYLES: ResolvedWidgetStyles = {\n // ═══════════════════════════════════════════════════════════\n // COLORS\n // ═══════════════════════════════════════════════════════════\n colors: {\n // Primary accent\n primary: '#000000',\n \n // Widget container\n background: 'rgba(255, 255, 255, 0.95)',\n border: '#d1d5db',\n text: '#111827',\n\n // Bot messages\n botBubble: '#000000',\n botText: '#ffffff',\n\n // User messages\n userBubble: '#ffffff',\n userText: '#000000',\n userBorder: '#000000',\n\n // Floating chat bubble\n bubbleBackground: '#ffffff',\n bubbleBorder: '#d1d5db',\n bubbleIcon: '#111827',\n\n // Messages container\n messagesBackground: 'rgba(255, 255, 255, 0.5)',\n },\n\n // ═══════════════════════════════════════════════════════════\n // TYPOGRAPHY\n // ═══════════════════════════════════════════════════════════\n typography: {\n fontFamily: 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: 14,\n headerFontSize: 16,\n fontWeight: 400,\n lineHeight: 1.5,\n letterSpacing: 0,\n },\n\n // ═══════════════════════════════════════════════════════════\n // ANIMATIONS\n // ═══════════════════════════════════════════════════════════\n animations: {\n duration: 0.3,\n easing: 'easeInOut',\n },\n\n // ═══════════════════════════════════════════════════════════\n // DIMENSIONS\n // ═══════════════════════════════════════════════════════════\n dimensions: {\n width: 400,\n maxHeight: 600,\n messagesMaxHeight: 350,\n borderRadius: 24,\n padding: 20,\n },\n\n // ═══════════════════════════════════════════════════════════\n // POSITIONING (floating widget only)\n // ═══════════════════════════════════════════════════════════\n position: {\n right: 16,\n bottom: 80,\n bubbleRight: 16,\n bubbleBottom: 16,\n },\n\n // ═══════════════════════════════════════════════════════════\n // CHAT BUBBLE (floating button)\n // ═══════════════════════════════════════════════════════════\n bubble: {\n size: 48,\n iconSize: 24,\n },\n\n // ═══════════════════════════════════════════════════════════\n // SHADOWS\n // ═══════════════════════════════════════════════════════════\n shadows: {\n widget: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n bubble: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n },\n\n // ═══════════════════════════════════════════════════════════\n // BRANDING\n // ═══════════════════════════════════════════════════════════\n branding: {\n showPoweredBy: true,\n poweredByText: 'Powered by Crow',\n showLogo: true,\n logoUrl: '/static/crow.png',\n },\n};\n\n/**\n * Default copilot styles\n */\nexport const DEFAULT_COPILOT_STYLES: ResolvedCopilotStyles = {\n // ═══════════════════════════════════════════════════════════\n // COLORS (same as widget by default)\n // ═══════════════════════════════════════════════════════════\n colors: {\n primary: '#000000',\n background: 'rgba(255, 255, 255, 0.95)',\n border: '#d1d5db',\n text: '#111827',\n botBubble: '#000000',\n botText: '#ffffff',\n userBubble: '#ffffff',\n userText: '#000000',\n userBorder: '#000000',\n bubbleBackground: '#ffffff',\n bubbleBorder: '#d1d5db',\n bubbleIcon: '#111827',\n messagesBackground: 'rgba(255, 255, 255, 0.5)',\n },\n\n // ═══════════════════════════════════════════════════════════\n // TYPOGRAPHY\n // ═══════════════════════════════════════════════════════════\n typography: {\n fontFamily: 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: 14,\n headerFontSize: 16,\n fontWeight: 400,\n lineHeight: 1.5,\n letterSpacing: 0,\n },\n\n // ═══════════════════════════════════════════════════════════\n // ANIMATIONS\n // ═══════════════════════════════════════════════════════════\n animations: {\n duration: 0.3,\n easing: 'easeInOut',\n },\n\n // ═══════════════════════════════════════════════════════════\n // DIMENSIONS\n // ═══════════════════════════════════════════════════════════\n dimensions: {\n width: 400,\n headerHeight: 56,\n borderRadius: 16,\n padding: 16,\n },\n\n // ═══════════════════════════════════════════════════════════\n // POSITIONING\n // ═══════════════════════════════════════════════════════════\n position: {\n side: 'right',\n },\n\n // ═══════════════════════════════════════════════════════════\n // BRANDING\n // ═══════════════════════════════════════════════════════════\n branding: {\n showPoweredBy: true,\n poweredByText: 'Powered by Crow',\n },\n};\n","/**\n * Style Merging Utilities\n * \n * Functions for deep merging style configurations with proper precedence:\n * defaults < DB styles < SDK props\n */\n\nimport type {\n WidgetStyleConfig,\n CopilotStyleConfig,\n ResolvedWidgetStyles,\n ResolvedCopilotStyles,\n} from './types';\nimport { DEFAULT_WIDGET_STYLES, DEFAULT_COPILOT_STYLES } from './defaults';\n\n/**\n * Deep merge two objects, with source values taking precedence.\n * Only merges plain objects, not arrays.\n */\nfunction deepMerge<T extends Record<string, unknown>>(\n target: T,\n source: Partial<T> | undefined\n): T {\n if (!source) return target;\n\n const result = { ...target };\n\n for (const key of Object.keys(source) as Array<keyof T>) {\n const sourceValue = source[key];\n const targetValue = target[key];\n\n if (\n sourceValue !== undefined &&\n sourceValue !== null &&\n typeof sourceValue === 'object' &&\n !Array.isArray(sourceValue) &&\n typeof targetValue === 'object' &&\n !Array.isArray(targetValue)\n ) {\n // Recursively merge nested objects\n result[key] = deepMerge(\n targetValue as Record<string, unknown>,\n sourceValue as Record<string, unknown>\n ) as T[keyof T];\n } else if (sourceValue !== undefined) {\n // Override with source value\n result[key] = sourceValue as T[keyof T];\n }\n }\n\n return result;\n}\n\n/**\n * Merge widget styles with precedence: defaults < dbStyles < propStyles\n * \n * @param dbStyles - Styles fetched from the database (per product)\n * @param propStyles - Styles passed via SDK props (developer overrides)\n * @returns Fully resolved styles with all defaults applied\n * \n * @example\n * ```tsx\n * const styles = mergeWidgetStyles(\n * { colors: { primary: '#blue' } }, // from DB\n * { colors: { primary: '#red' } } // from props - wins!\n * );\n * // styles.colors.primary === '#red'\n * ```\n */\nexport function mergeWidgetStyles(\n dbStyles?: WidgetStyleConfig,\n propStyles?: WidgetStyleConfig\n): ResolvedWidgetStyles {\n // Start with defaults\n let result = { ...DEFAULT_WIDGET_STYLES };\n\n // Apply DB styles (overrides defaults)\n if (dbStyles) {\n result = {\n colors: deepMerge(result.colors, dbStyles.colors),\n typography: deepMerge(result.typography, dbStyles.typography),\n animations: deepMerge(result.animations, dbStyles.animations),\n dimensions: deepMerge(result.dimensions, dbStyles.dimensions),\n position: deepMerge(result.position, dbStyles.position),\n bubble: deepMerge(result.bubble, dbStyles.bubble),\n shadows: deepMerge(result.shadows, dbStyles.shadows),\n branding: deepMerge(result.branding, dbStyles.branding),\n };\n }\n\n // Apply prop styles (overrides DB styles)\n if (propStyles) {\n result = {\n colors: deepMerge(result.colors, propStyles.colors),\n typography: deepMerge(result.typography, propStyles.typography),\n animations: deepMerge(result.animations, propStyles.animations),\n dimensions: deepMerge(result.dimensions, propStyles.dimensions),\n position: deepMerge(result.position, propStyles.position),\n bubble: deepMerge(result.bubble, propStyles.bubble),\n shadows: deepMerge(result.shadows, propStyles.shadows),\n branding: deepMerge(result.branding, propStyles.branding),\n };\n }\n\n return result;\n}\n\n/**\n * Merge copilot styles with precedence: defaults < dbStyles < propStyles\n * \n * @param dbStyles - Styles fetched from the database (per product)\n * @param propStyles - Styles passed via SDK props (developer overrides)\n * @returns Fully resolved styles with all defaults applied\n */\nexport function mergeCopilotStyles(\n dbStyles?: CopilotStyleConfig,\n propStyles?: CopilotStyleConfig\n): ResolvedCopilotStyles {\n // Start with defaults\n let result = { ...DEFAULT_COPILOT_STYLES };\n\n // Apply DB styles (overrides defaults)\n if (dbStyles) {\n result = {\n colors: deepMerge(result.colors, dbStyles.colors),\n typography: deepMerge(result.typography, dbStyles.typography),\n animations: deepMerge(result.animations, dbStyles.animations),\n dimensions: deepMerge(result.dimensions, dbStyles.dimensions),\n position: deepMerge(result.position, dbStyles.position),\n branding: deepMerge(result.branding, dbStyles.branding),\n };\n }\n\n // Apply prop styles (overrides DB styles)\n if (propStyles) {\n result = {\n colors: deepMerge(result.colors, propStyles.colors),\n typography: deepMerge(result.typography, propStyles.typography),\n animations: deepMerge(result.animations, propStyles.animations),\n dimensions: deepMerge(result.dimensions, propStyles.dimensions),\n position: deepMerge(result.position, propStyles.position),\n branding: deepMerge(result.branding, propStyles.branding),\n };\n }\n\n return result;\n}\n\n/**\n * Convert styles to CSS custom properties for use with CSS variables\n * \n * @example\n * ```tsx\n * const cssVars = stylesToCSSVariables(styles);\n * // { '--crow-primary': '#000', '--crow-bg': '#fff', ... }\n * ```\n */\nexport function stylesToCSSVariables(\n styles: ResolvedWidgetStyles | ResolvedCopilotStyles\n): Record<string, string | number> {\n return {\n // Colors\n '--crow-color-primary': styles.colors.primary,\n '--crow-color-background': styles.colors.background,\n '--crow-color-text': styles.colors.text,\n '--crow-color-border': styles.colors.border,\n '--crow-color-bot-bubble': styles.colors.botBubble,\n '--crow-color-bot-text': styles.colors.botText,\n '--crow-color-user-bubble': styles.colors.userBubble,\n '--crow-color-user-text': styles.colors.userText,\n '--crow-color-user-border': styles.colors.userBorder,\n '--crow-color-messages-bg': styles.colors.messagesBackground,\n \n // Typography\n '--crow-font-family': styles.typography.fontFamily,\n '--crow-font-size': `${styles.typography.fontSize}px`,\n '--crow-header-font-size': `${styles.typography.headerFontSize}px`,\n '--crow-font-weight': `${styles.typography.fontWeight}`,\n '--crow-line-height': `${styles.typography.lineHeight}`,\n '--crow-letter-spacing': `${styles.typography.letterSpacing}px`,\n \n // Animations\n '--crow-animation-duration': `${styles.animations.duration}s`,\n '--crow-animation-easing': styles.animations.easing,\n };\n}\n","/**\n * useWidgetStyles Hook\n * \n * Fetches widget/copilot styles from the API and merges them with defaults and props.\n * Handles caching to avoid redundant fetches.\n */\n\nimport { useState, useEffect, useRef } from 'react';\nimport type {\n WidgetStyleConfig,\n CopilotStyleConfig,\n ResolvedWidgetStyles,\n ResolvedCopilotStyles,\n WidgetConfigResponse,\n} from '../styles/types';\nimport { mergeWidgetStyles, mergeCopilotStyles } from '../styles/utils';\n\n// Simple in-memory cache for style configs\nconst styleCache = new Map<string, WidgetConfigResponse>();\n\ninterface UseWidgetStylesOptions {\n /** Product ID to fetch styles for */\n productId: string;\n /** API URL (defaults to relative path) */\n apiUrl?: string;\n /** Styles passed via props (override DB styles) */\n propStyles?: WidgetStyleConfig;\n /** Skip fetching from API (use for preview mode) */\n skip?: boolean;\n /** Cache key override (defaults to productId) */\n cacheKey?: string;\n}\n\ninterface UseWidgetStylesResult {\n /** Fully resolved styles ready for use */\n styles: ResolvedWidgetStyles;\n /** Whether styles are currently loading */\n isLoading: boolean;\n /** Error if fetch failed */\n error: Error | null;\n /** Agent name from product config */\n agentName: string;\n /** Refetch styles from API */\n refetch: () => Promise<void>;\n}\n\ninterface UseCopilotStylesOptions {\n /** Product ID to fetch styles for */\n productId: string;\n /** API URL (defaults to relative path) */\n apiUrl?: string;\n /** Styles passed via props (override DB styles) */\n propStyles?: CopilotStyleConfig;\n /** Skip fetching from API (use for preview mode) */\n skip?: boolean;\n /** Cache key override (defaults to productId) */\n cacheKey?: string;\n}\n\ninterface UseCopilotStylesResult {\n /** Fully resolved styles ready for use */\n styles: ResolvedCopilotStyles;\n /** Whether styles are currently loading */\n isLoading: boolean;\n /** Error if fetch failed */\n error: Error | null;\n /** Agent name from product config */\n agentName: string;\n /** Refetch styles from API */\n refetch: () => Promise<void>;\n}\n\n/**\n * Fetch widget configuration from the API\n */\nasync function fetchWidgetConfig(\n productId: string,\n apiUrl?: string\n): Promise<WidgetConfigResponse> {\n const baseUrl = apiUrl || '';\n const url = `${baseUrl}/api/products/${productId}/widget-config`;\n \n const response = await fetch(url);\n \n if (!response.ok) {\n throw new Error(`Failed to fetch widget config: ${response.status} ${response.statusText}`);\n }\n \n return response.json();\n}\n\n/**\n * Hook to fetch and merge widget styles\n * \n * @example\n * ```tsx\n * const { styles, isLoading } = useWidgetStyles({\n * productId: 'my-product',\n * propStyles: { colors: { primary: '#blue' } },\n * });\n * ```\n */\nexport function useWidgetStyles({\n productId,\n apiUrl,\n propStyles,\n skip = false,\n cacheKey,\n}: UseWidgetStylesOptions): UseWidgetStylesResult {\n const key = cacheKey || productId;\n const [isLoading, setIsLoading] = useState(!skip && !styleCache.has(key));\n const [error, setError] = useState<Error | null>(null);\n const [dbStyles, setDbStyles] = useState<WidgetStyleConfig | undefined>(\n styleCache.get(key)?.widgetStyles\n );\n const [agentName, setAgentName] = useState(\n styleCache.get(key)?.agentName || 'Assistant'\n );\n \n // Track if we've already fetched\n const hasFetchedRef = useRef(false);\n \n const fetchStyles = async () => {\n if (skip) return;\n \n setIsLoading(true);\n setError(null);\n \n try {\n const config = await fetchWidgetConfig(productId, apiUrl);\n \n // Cache the result\n styleCache.set(key, config);\n \n setDbStyles(config.widgetStyles);\n setAgentName(config.agentName || 'Assistant');\n } catch (err) {\n console.error('[CrowWidget] Failed to fetch styles:', err);\n setError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setIsLoading(false);\n }\n };\n \n useEffect(() => {\n // Skip if disabled or already fetched\n if (skip || hasFetchedRef.current) return;\n \n // Check cache first\n const cached = styleCache.get(key);\n if (cached) {\n setDbStyles(cached.widgetStyles);\n setAgentName(cached.agentName || 'Assistant');\n setIsLoading(false);\n return;\n }\n \n hasFetchedRef.current = true;\n fetchStyles();\n }, [productId, apiUrl, skip, key]);\n \n // Merge styles: defaults < DB < props\n const styles = mergeWidgetStyles(dbStyles, propStyles);\n \n return {\n styles,\n isLoading,\n error,\n agentName,\n refetch: fetchStyles,\n };\n}\n\n/**\n * Hook to fetch and merge copilot styles\n * \n * @example\n * ```tsx\n * const { styles, isLoading } = useCopilotStyles({\n * productId: 'my-product',\n * propStyles: { position: { side: 'left' } },\n * });\n * ```\n */\nexport function useCopilotStyles({\n productId,\n apiUrl,\n propStyles,\n skip = false,\n cacheKey,\n}: UseCopilotStylesOptions): UseCopilotStylesResult {\n const key = cacheKey || productId;\n const [isLoading, setIsLoading] = useState(!skip && !styleCache.has(key));\n const [error, setError] = useState<Error | null>(null);\n const [dbStyles, setDbStyles] = useState<CopilotStyleConfig | undefined>(\n styleCache.get(key)?.copilotStyles\n );\n const [agentName, setAgentName] = useState(\n styleCache.get(key)?.agentName || 'Assistant'\n );\n \n // Track if we've already fetched\n const hasFetchedRef = useRef(false);\n \n const fetchStyles = async () => {\n if (skip) return;\n \n setIsLoading(true);\n setError(null);\n \n try {\n const config = await fetchWidgetConfig(productId, apiUrl);\n \n // Cache the result\n styleCache.set(key, config);\n \n setDbStyles(config.copilotStyles);\n setAgentName(config.agentName || 'Assistant');\n } catch (err) {\n console.error('[CrowCopilot] Failed to fetch styles:', err);\n setError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setIsLoading(false);\n }\n };\n \n useEffect(() => {\n // Skip if disabled or already fetched\n if (skip || hasFetchedRef.current) return;\n \n // Check cache first\n const cached = styleCache.get(key);\n if (cached) {\n setDbStyles(cached.copilotStyles);\n setAgentName(cached.agentName || 'Assistant');\n setIsLoading(false);\n return;\n }\n \n hasFetchedRef.current = true;\n fetchStyles();\n }, [productId, apiUrl, skip, key]);\n \n // Merge styles: defaults < DB < props\n const styles = mergeCopilotStyles(dbStyles, propStyles);\n \n return {\n styles,\n isLoading,\n error,\n agentName,\n refetch: fetchStyles,\n };\n}\n\n/**\n * Clear the style cache (useful for testing or forcing refetch)\n */\nexport function clearStyleCache(productId?: string): void {\n if (productId) {\n styleCache.delete(productId);\n } else {\n styleCache.clear();\n }\n}\n\n/**\n * Hook for preview mode - uses provided styles directly without fetching\n * \n * @example\n * ```tsx\n * // In dashboard style editor\n * const { styles } = usePreviewStyles({\n * styles: localEditorState,\n * });\n * ```\n */\nexport function usePreviewWidgetStyles(\n previewStyles: WidgetStyleConfig\n): { styles: ResolvedWidgetStyles } {\n return {\n styles: mergeWidgetStyles(undefined, previewStyles),\n };\n}\n\nexport function usePreviewCopilotStyles(\n previewStyles: CopilotStyleConfig\n): { styles: ResolvedCopilotStyles } {\n return {\n styles: mergeCopilotStyles(undefined, previewStyles),\n };\n}\n","/**\n * Style Context\n *\n * React context for providing resolved styles to widget/copilot components.\n * This allows components to access styles without prop drilling.\n *\n * NOTE: Layout/dimension styles are now applied via CSS custom properties\n * (see cssVars.ts). This context is still used for:\n * - agentName: Display name shown in widget header\n * - styles: For non-CSS properties like branding, Google Fonts loading, etc.\n * - variant: floating vs embedded mode\n * - isLoading: Loading state\n */\n\nimport React, { createContext, useContext, useMemo } from \"react\";\nimport type {\n ResolvedWidgetStyles,\n ResolvedCopilotStyles,\n} from \"../styles/types\";\nimport {\n DEFAULT_WIDGET_STYLES,\n DEFAULT_COPILOT_STYLES,\n} from \"../styles/defaults\";\n\n// ============================================================================\n// WIDGET STYLE CONTEXT\n// ============================================================================\n\ninterface WidgetStyleContextValue {\n styles: ResolvedWidgetStyles;\n agentName: string;\n isLoading: boolean;\n variant: \"floating\" | \"embedded\";\n}\n\nconst WidgetStyleContext = createContext<WidgetStyleContextValue | null>(null);\n\ninterface WidgetStyleProviderProps {\n children: React.ReactNode;\n styles: ResolvedWidgetStyles;\n agentName?: string;\n isLoading?: boolean;\n variant?: \"floating\" | \"embedded\";\n}\n\n/**\n * Provider for widget styles\n */\nexport function WidgetStyleProvider({\n children,\n styles,\n agentName = \"Assistant\",\n isLoading = false,\n variant = \"floating\",\n}: WidgetStyleProviderProps) {\n const value = useMemo(\n () => ({ styles, agentName, isLoading, variant }),\n [styles, agentName, isLoading, variant],\n );\n\n return (\n <WidgetStyleContext.Provider value={value}>\n {children}\n </WidgetStyleContext.Provider>\n );\n}\n\n/**\n * Hook to access widget styles from context\n *\n * @throws Error if used outside of WidgetStyleProvider\n */\nexport function useWidgetStyleContext(): WidgetStyleContextValue {\n const context = useContext(WidgetStyleContext);\n\n if (!context) {\n throw new Error(\n \"useWidgetStyleContext must be used within a WidgetStyleProvider. \" +\n \"Make sure your component is wrapped with CrowWidget or WidgetStyleProvider.\",\n );\n }\n\n return context;\n}\n\n/**\n * Hook to access widget styles, with fallback to defaults if not in context\n *\n * Use this in components that might be used both inside and outside the widget.\n */\nexport function useWidgetStyles(): ResolvedWidgetStyles {\n const context = useContext(WidgetStyleContext);\n return context?.styles ?? DEFAULT_WIDGET_STYLES;\n}\n\n// ============================================================================\n// COPILOT STYLE CONTEXT\n// ============================================================================\n\ninterface CopilotStyleContextValue {\n styles: ResolvedCopilotStyles;\n agentName: string;\n isLoading: boolean;\n}\n\nconst CopilotStyleContext = createContext<CopilotStyleContextValue | null>(\n null,\n);\n\ninterface CopilotStyleProviderProps {\n children: React.ReactNode;\n styles: ResolvedCopilotStyles;\n agentName?: string;\n isLoading?: boolean;\n}\n\n/**\n * Provider for copilot styles\n */\nexport function CopilotStyleProvider({\n children,\n styles,\n agentName = \"Assistant\",\n isLoading = false,\n}: CopilotStyleProviderProps) {\n const value = useMemo(\n () => ({ styles, agentName, isLoading }),\n [styles, agentName, isLoading],\n );\n\n return (\n <CopilotStyleContext.Provider value={value}>\n {children}\n </CopilotStyleContext.Provider>\n );\n}\n\n/**\n * Hook to access copilot styles from context\n *\n * @throws Error if used outside of CopilotStyleProvider\n */\nexport function useCopilotStyleContext(): CopilotStyleContextValue {\n const context = useContext(CopilotStyleContext);\n\n if (!context) {\n throw new Error(\n \"useCopilotStyleContext must be used within a CopilotStyleProvider. \" +\n \"Make sure your component is wrapped with CrowCopilot or CopilotStyleProvider.\",\n );\n }\n\n return context;\n}\n\n/**\n * Hook to access copilot styles, with fallback to defaults if not in context\n */\nexport function useCopilotStyles(): ResolvedCopilotStyles {\n const context = useContext(CopilotStyleContext);\n return context?.styles ?? DEFAULT_COPILOT_STYLES;\n}\n","/**\n * ShadowContainer - Renders children inside a Shadow DOM boundary\n *\n * This provides complete CSS isolation:\n * - Widget styles don't leak to the host page\n * - Host page styles don't affect the widget\n *\n * Additionally, this component provides keyboard event isolation:\n * - Keyboard events are stopped from propagating to the host page\n * - This prevents host apps from stealing focus or intercepting keystrokes\n * - Escape and Tab keys are allowed to propagate for accessibility\n */\n\nimport { useRef, useState, useEffect, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\n\ninterface ShadowContainerProps {\n /** Content to render inside the Shadow DOM */\n children: ReactNode;\n /** CSS string to inject into the Shadow DOM */\n styles: string;\n /** Optional ID for the host element */\n hostId?: string;\n /** Optional class name for the host element */\n hostClassName?: string;\n}\n\n// Keys that should pass through to the host application\nconst PASSTHROUGH_KEYS = new Set([\"Escape\", \"Tab\"]);\n\nexport function ShadowContainer({\n children,\n styles,\n hostId = \"crow-widget-host\",\n hostClassName,\n}: ShadowContainerProps) {\n const hostRef = useRef<HTMLDivElement>(null);\n const [shadowRoot, setShadowRoot] = useState<ShadowRoot | null>(null);\n\n // Create shadow root on mount\n useEffect(() => {\n if (hostRef.current && !hostRef.current.shadowRoot) {\n const shadow = hostRef.current.attachShadow({ mode: \"open\" });\n setShadowRoot(shadow);\n }\n }, []);\n\n // Keyboard event isolation - prevents host app from stealing keystrokes\n useEffect(() => {\n if (!shadowRoot || !hostRef.current) return;\n\n const hostElement = hostRef.current;\n\n // ============================================\n // Layer 1: Stop propagation at shadow root\n // (handles bubble-phase host listeners - ~90% of cases)\n // ============================================\n const stopPropagationHandler = (e: Event) => {\n const keyEvent = e as KeyboardEvent;\n if (keyEvent.key && PASSTHROUGH_KEYS.has(keyEvent.key)) {\n return;\n }\n e.stopPropagation();\n };\n\n shadowRoot.addEventListener(\"keydown\", stopPropagationHandler);\n shadowRoot.addEventListener(\"keyup\", stopPropagationHandler);\n shadowRoot.addEventListener(\"keypress\", stopPropagationHandler);\n\n // ============================================\n // Layer 2 & 3: Focus protection\n // (handles capture-phase host listeners that steal focus)\n // ============================================\n let lastFocusedElement: HTMLElement | null = null;\n\n const trackFocus = (e: Event) => {\n lastFocusedElement = e.target as HTMLElement;\n };\n\n const protectFocus = (e: KeyboardEvent) => {\n if (e.key && PASSTHROUGH_KEYS.has(e.key)) {\n return;\n }\n\n // Check if event originated from our widget\n const path = e.composedPath();\n if (!path.includes(hostElement) && !path.includes(shadowRoot)) {\n return;\n }\n\n // Schedule focus restoration after all handlers complete\n if (lastFocusedElement) {\n const elementToRestore = lastFocusedElement;\n queueMicrotask(() => {\n const activeInShadow = shadowRoot.activeElement;\n if (!activeInShadow) {\n // Focus was stolen - restore it\n elementToRestore.focus();\n }\n });\n }\n };\n\n shadowRoot.addEventListener(\"focusin\", trackFocus as EventListener);\n document.addEventListener(\"keydown\", protectFocus, { capture: true });\n\n // ============================================\n // Cleanup\n // ============================================\n return () => {\n shadowRoot.removeEventListener(\"keydown\", stopPropagationHandler);\n shadowRoot.removeEventListener(\"keyup\", stopPropagationHandler);\n shadowRoot.removeEventListener(\"keypress\", stopPropagationHandler);\n shadowRoot.removeEventListener(\"focusin\", trackFocus as EventListener);\n document.removeEventListener(\"keydown\", protectFocus, { capture: true });\n };\n }, [shadowRoot]);\n\n return (\n <div ref={hostRef} id={hostId} className={hostClassName}>\n {shadowRoot &&\n createPortal(\n <>\n <style>{styles}</style>\n {children}\n </>,\n shadowRoot,\n )}\n </div>\n );\n}\n\nShadowContainer.displayName = \"ShadowContainer\";\n","/**\n * ChatBubble - Floating button to toggle widget\n */\n\nimport { MessageCircle, ChevronDown } from \"lucide-react\";\nimport { useWidgetStyleContext } from \"../../context/StyleContext\";\n\ninterface ChatBubbleProps {\n isExpanded: boolean;\n onClick: () => void;\n}\n\nexport function ChatBubble({ isExpanded, onClick }: ChatBubbleProps) {\n const { styles } = useWidgetStyleContext();\n\n return (\n <button\n onClick={onClick}\n className=\"crow-fixed crow-z-[999999] crow-rounded-full crow-flex crow-items-center crow-justify-center crow-shadow-2xl hover:crow-scale-110 crow-transition-all crow-duration-500 crow-border crow-backdrop-blur-md\"\n style={{\n width: styles.bubble.size,\n height: styles.bubble.size,\n right: styles.position.bubbleRight,\n bottom: styles.position.bubbleBottom,\n background: styles.colors.bubbleBackground,\n borderColor: styles.colors.bubbleBorder,\n boxShadow: styles.shadows.bubble,\n color: styles.colors.bubbleIcon,\n }}\n aria-label={isExpanded ? \"Close Chat\" : \"Open Chat\"}\n >\n {isExpanded ? (\n <ChevronDown size={styles.bubble.iconSize} strokeWidth={2} />\n ) : (\n <MessageCircle size={styles.bubble.iconSize} strokeWidth={2} />\n )}\n </button>\n );\n}\n","/**\n * WidgetShell - Container for widget content\n */\n\nimport { forwardRef, useEffect, type ReactNode } from \"react\";\nimport { useWidgetStyleContext } from \"../../context/StyleContext\";\n\n// Map font family values to Google Fonts parameters\nconst GOOGLE_FONTS_MAP: Record<string, string> = {\n '\"Inter\", sans-serif': \"Inter:wght@300;400;500;600;700\",\n '\"Roboto\", sans-serif': \"Roboto:wght@300;400;500;700\",\n '\"Open Sans\", sans-serif': \"Open+Sans:wght@300;400;500;600;700\",\n '\"Poppins\", sans-serif': \"Poppins:wght@300;400;500;600;700\",\n '\"Montserrat\", sans-serif': \"Montserrat:wght@300;400;500;600;700\",\n};\n\ninterface WidgetShellProps {\n children: ReactNode;\n className?: string;\n}\n\nexport const WidgetShell = forwardRef<HTMLDivElement, WidgetShellProps>(\n ({ children, className }, ref) => {\n const { styles, variant } = useWidgetStyleContext();\n\n // Dynamically load Google Fonts when fontFamily changes\n useEffect(() => {\n const fontParam = GOOGLE_FONTS_MAP[styles.typography.fontFamily];\n if (!fontParam) return; // System font, no need to load\n\n const linkId = `crow-google-font-${fontParam.split(\":\")[0]}`;\n\n // Check if already loaded\n if (document.getElementById(linkId)) return;\n\n const link = document.createElement(\"link\");\n link.id = linkId;\n link.rel = \"stylesheet\";\n link.href = `https://fonts.googleapis.com/css2?family=${fontParam}&display=swap`;\n document.head.appendChild(link);\n }, [styles.typography.fontFamily]);\n\n const baseStyle = {\n borderRadius: styles.dimensions.borderRadius,\n padding: styles.dimensions.padding,\n background: styles.colors.background,\n borderColor: styles.colors.border,\n color: styles.colors.text,\n boxShadow: styles.shadows.widget,\n fontFamily: styles.typography.fontFamily,\n fontSize: styles.typography.fontSize,\n fontWeight: styles.typography.fontWeight,\n lineHeight: styles.typography.lineHeight,\n letterSpacing: styles.typography.letterSpacing,\n };\n\n if (variant === \"embedded\") {\n return (\n <div\n ref={ref}\n className={`crow-flex crow-flex-col crow-shadow-2xl crow-gap-3 crow-border crow-backdrop-blur-md crow-overflow-hidden ${\n className ?? \"\"\n }`}\n style={{\n ...baseStyle,\n width: `min(${styles.dimensions.width}px, calc(100vw - 32px))`,\n height: `min(${styles.dimensions.maxHeight}px, calc(100vh - 120px))`,\n }}\n >\n {children}\n </div>\n );\n }\n\n // Floating variant\n return (\n <div\n ref={ref}\n className={`crow-fixed crow-z-[999999] crow-shadow-2xl crow-gap-3 crow-transition-all crow-duration-500 crow-flex crow-flex-col crow-border crow-backdrop-blur-md crow-overflow-hidden ${\n className ?? \"\"\n }`}\n style={{\n ...baseStyle,\n width: `min(${styles.dimensions.width}px, calc(100vw - 32px))`,\n height: `min(${styles.dimensions.maxHeight}px, calc(100vh - 120px))`,\n right: styles.position.right,\n bottom: styles.position.bottom,\n }}\n >\n {children}\n </div>\n );\n },\n);\n\nWidgetShell.displayName = \"WidgetShell\";\n","/**\n * WidgetHeader - Header bar for widget\n */\n\nimport { Plus, History, ChevronDown, ChevronUp } from \"lucide-react\";\nimport { useWidgetStyleContext } from \"../../context/StyleContext\";\n\ninterface WidgetHeaderProps {\n isVerifiedUser: boolean;\n showConversationList: boolean;\n onNewChat: () => void;\n onToggleHistory: () => void;\n showMinimize?: boolean;\n isMinimized?: boolean;\n onToggleMinimize?: () => void;\n}\n\nexport function WidgetHeader({\n isVerifiedUser,\n showConversationList,\n onNewChat,\n onToggleHistory,\n showMinimize = false,\n isMinimized = false,\n onToggleMinimize,\n}: WidgetHeaderProps) {\n const { agentName, styles } = useWidgetStyleContext();\n\n return (\n <div\n className=\"crow-flex crow-items-center crow-justify-between crow-mb-3 crow-pb-2 crow-border-b\"\n style={{ borderColor: styles.colors.border }}\n >\n <div className=\"crow-flex crow-items-center crow-gap-2\">\n <span\n className=\"crow-text-sm crow-font-semibold\"\n style={{\n color: styles.colors.text,\n fontSize: styles.typography.headerFontSize,\n }}\n >\n {agentName}\n </span>\n </div>\n\n <div className=\"crow-flex crow-items-center crow-gap-1\">\n <button\n onClick={onNewChat}\n className=\"crow-p-1.5 hover:crow-bg-gray-200 crow-rounded crow-transition-colors\"\n aria-label=\"New Chat\"\n title=\"New Chat\"\n >\n <Plus size={18} className=\"crow-text-gray-700\" />\n </button>\n {isVerifiedUser && (\n <button\n onClick={onToggleHistory}\n className={`crow-p-1.5 hover:crow-bg-gray-200 crow-rounded crow-transition-colors ${\n showConversationList ? \"crow-bg-gray-200\" : \"\"\n }`}\n aria-label=\"Conversation History\"\n title=\"Conversation History\"\n >\n <History size={18} className=\"crow-text-gray-700\" />\n </button>\n )}\n {showMinimize && onToggleMinimize && (\n <button\n onClick={onToggleMinimize}\n className=\"crow-p-1 hover:crow-bg-gray-200 crow-rounded crow-transition-colors\"\n aria-label={isMinimized ? \"Expand\" : \"Minimize\"}\n >\n {isMinimized ? (\n <ChevronUp size={18} className=\"crow-text-gray-900\" />\n ) : (\n <ChevronDown size={18} className=\"crow-text-gray-900\" />\n )}\n </button>\n )}\n </div>\n </div>\n );\n}\n","/**\n * StreamingText - Simple streaming text with blinking cursor\n */\n\nimport ReactMarkdown from \"react-markdown\";\n\ninterface StreamingTextProps {\n content: string;\n isStreaming?: boolean;\n}\n\nexport function StreamingText({\n content,\n isStreaming = false,\n}: StreamingTextProps) {\n return (\n <>\n <ReactMarkdown\n components={{\n strong: ({ children }) => (\n <strong className=\"crow-font-bold\">{children}</strong>\n ),\n ul: ({ children }) => (\n <ul className=\"crow-list-disc crow-pl-5 crow-my-1\">{children}</ul>\n ),\n ol: ({ children }) => (\n <ol className=\"crow-list-decimal crow-pl-5 crow-my-1\">{children}</ol>\n ),\n li: ({ children }) => <li>{children}</li>,\n p: ({ children }) => <p className=\"crow-mb-1 last:crow-mb-0\">{children}</p>,\n a: ({ href, children }) => (\n <a\n href={href}\n className=\"crow-underline hover:crow-text-blue-300\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {children}\n </a>\n ),\n code: ({ className, children, ...props }) => {\n const isInline = !className;\n return isInline ? (\n <code\n className=\"crow-bg-gray-800 crow-text-gray-200 crow-px-1.5 crow-py-0.5 crow-rounded crow-text-sm\"\n {...props}\n >\n {children}\n </code>\n ) : (\n <code className={`crow-text-gray-200 ${className || ''}`} {...props}>\n {children}\n </code>\n );\n },\n pre: ({ children }) => (\n <pre className=\"crow-bg-gray-800 crow-text-gray-200 crow-p-3 crow-rounded-lg crow-my-2 crow-overflow-x-auto crow-text-sm\">\n {children}\n </pre>\n ),\n }}\n >\n {content}\n </ReactMarkdown>\n\n {isStreaming && (\n <span\n className=\"crow-inline-block crow-w-0.5 crow-h-4 crow-ml-0.5 crow-align-text-bottom\"\n style={{\n backgroundColor: \"currentColor\",\n animation: \"cursor-blink 1s ease-in-out infinite\",\n }}\n aria-hidden=\"true\"\n />\n )}\n\n <style>{`\n @keyframes cursor-blink {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0; }\n }\n `}</style>\n </>\n );\n}\n\nexport default StreamingText;\n","/**\n * ThinkingIndicator - Shimmer effect for thinking state\n */\n\nexport function ThinkingIndicator() {\n return (\n <>\n <span\n className=\"crow-inline-block crow-font-medium\"\n style={{\n background:\n \"linear-gradient(90deg, rgba(255,255,255,0.4) 0%, rgba(255,255,255,1) 50%, rgba(255,255,255,0.4) 100%)\",\n backgroundSize: \"200% 100%\",\n WebkitBackgroundClip: \"text\",\n backgroundClip: \"text\",\n WebkitTextFillColor: \"transparent\",\n animation: \"shimmer 1.5s ease-in-out infinite\",\n }}\n >\n Thinking...\n </span>\n <style>{`\n @keyframes shimmer {\n 0% { background-position: 100% 0; }\n 100% { background-position: -100% 0; }\n }\n `}</style>\n </>\n );\n}\n","/**\n * LoadingHistory - Loading animation for conversation history\n */\n\nimport { motion } from \"framer-motion\";\n\nexport function LoadingHistory() {\n return (\n <motion.div\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n className=\"crow-flex crow-justify-center crow-items-center crow-py-8\"\n >\n <div className=\"crow-flex crow-flex-col crow-items-center crow-gap-3\">\n <div className=\"crow-flex crow-gap-1\">\n {[0, 0.15, 0.3].map((delay, i) => (\n <motion.div\n key={i}\n className=\"crow-w-2 crow-h-2 crow-bg-gray-400 crow-rounded-full\"\n animate={{ y: [0, -8, 0] }}\n transition={{ duration: 0.6, repeat: Infinity, delay }}\n />\n ))}\n </div>\n <span className=\"crow-text-sm crow-text-gray-500\">Loading conversation...</span>\n </div>\n </motion.div>\n );\n}\n","/**\n * ReasoningTrace - PostHog-inspired collapsible reasoning display\n */\n\nimport { useState, useLayoutEffect } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { ChevronRight, Brain, Check, Loader2 } from \"lucide-react\";\nimport type { ToolCall } from \"../../types\";\n\nconst THINKING_MESSAGES = [\n \"Pondering\",\n \"Analyzing\",\n \"Reasoning\",\n \"Considering\",\n \"Processing\",\n \"Evaluating\",\n \"Thinking\",\n \"Exploring\",\n \"Connecting\",\n \"Synthesizing\",\n];\n\nfunction getRandomThinkingMessage(): string {\n const idx = Math.floor(Math.random() * THINKING_MESSAGES.length);\n return THINKING_MESSAGES[idx] + \"...\";\n}\n\nfunction ShimmeringContent({ children }: { children: React.ReactNode }) {\n return (\n <span\n className=\"crow-inline-block\"\n style={{\n background:\n \"linear-gradient(90deg, rgba(100,100,100,0.6) 0%, rgba(100,100,100,1) 50%, rgba(100,100,100,0.6) 100%)\",\n backgroundSize: \"200% 100%\",\n WebkitBackgroundClip: \"text\",\n backgroundClip: \"text\",\n WebkitTextFillColor: \"transparent\",\n animation: \"shimmer 1.5s ease-in-out infinite\",\n }}\n >\n {children}\n <style>{`\n @keyframes shimmer {\n 0% { background-position: 100% 0; }\n 100% { background-position: -100% 0; }\n }\n `}</style>\n </span>\n );\n}\n\ninterface ReasoningTraceProps {\n thinking?: string;\n isComplete?: boolean;\n toolCalls?: ToolCall[];\n isWaiting?: boolean;\n}\n\nexport function ReasoningTrace({ thinking, isComplete, toolCalls = [], isWaiting = false }: ReasoningTraceProps) {\n const hasThinking = !!thinking && thinking.trim().length > 0;\n const hasToolCalls = toolCalls.length > 0;\n \n if (!isWaiting && !hasThinking && !hasToolCalls) return null;\n\n return (\n <div className=\"crow-flex crow-justify-start crow-mb-2\">\n <div className=\"crow-max-w-[90%] crow-space-y-1.5\">\n {isWaiting && !hasThinking && (\n <WaitingIndicator />\n )}\n \n {hasThinking && (\n <ThinkingBlock thinking={thinking!} isComplete={isComplete} />\n )}\n \n {toolCalls.map((tool) => (\n <ToolCallBlock key={tool.id} toolCall={tool} />\n ))}\n </div>\n </div>\n );\n}\n\nfunction WaitingIndicator() {\n return (\n <div className=\"crow-flex crow-items-center crow-gap-1.5 crow-text-xs crow-text-gray-500\">\n <div className=\"crow-flex crow-items-center crow-justify-center crow-w-4 crow-h-4\">\n <ShimmeringContent>\n <Brain className=\"crow-w-3.5 crow-h-3.5\" />\n </ShimmeringContent>\n </div>\n <span className=\"crow-font-medium\">\n <ShimmeringContent>{getRandomThinkingMessage()}</ShimmeringContent>\n </span>\n </div>\n );\n}\n\nfunction ThinkingBlock({ thinking, isComplete }: { thinking: string; isComplete?: boolean }) {\n const [isExpanded, setIsExpanded] = useState(!isComplete);\n \n useLayoutEffect(() => {\n setIsExpanded(!isComplete);\n }, [isComplete]);\n\n const isInProgress = !isComplete;\n\n return (\n <div className=\"crow-flex crow-flex-col crow-gap-1 crow-text-xs\">\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n className={`crow-flex crow-items-center crow-gap-1.5 crow-select-none crow-transition-colors ${\n isInProgress ? \"crow-text-gray-500\" : \"crow-text-gray-600 hover:crow-text-gray-800\"\n } crow-cursor-pointer`}\n >\n <div className=\"crow-flex crow-items-center crow-justify-center crow-w-4 crow-h-4\">\n {isInProgress ? (\n <ShimmeringContent>\n <Brain className=\"crow-w-3.5 crow-h-3.5\" />\n </ShimmeringContent>\n ) : (\n <Brain className=\"crow-w-3.5 crow-h-3.5\" />\n )}\n </div>\n\n <span className=\"crow-font-medium\">\n {isInProgress ? (\n <ShimmeringContent>{getRandomThinkingMessage()}</ShimmeringContent>\n ) : (\n \"Thought\"\n )}\n </span>\n\n <motion.div\n animate={{ rotate: isExpanded ? 90 : 0 }}\n transition={{ duration: 0.15 }}\n className=\"crow-flex-shrink-0\"\n >\n <ChevronRight className=\"crow-w-3 crow-h-3\" />\n </motion.div>\n\n {isComplete && <Check className=\"crow-w-3 crow-h-3 crow-text-green-500\" />}\n </button>\n\n <AnimatePresence>\n {isExpanded && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: \"auto\", opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={{ duration: 0.15 }}\n className=\"crow-overflow-hidden\"\n >\n <div className=\"crow-border-l-2 crow-border-gray-200 crow-pl-3 crow-ml-2\">\n <div\n className={`crow-text-xs crow-leading-relaxed crow-whitespace-pre-wrap ${\n isComplete ? \"crow-text-gray-500\" : \"crow-text-gray-600\"\n }`}\n >\n {thinking}\n </div>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n}\n\nfunction ToolCallBlock({ toolCall }: { toolCall: ToolCall }) {\n const [expanded, setExpanded] = useState(false);\n const hasArgs = Object.keys(toolCall.arguments || {}).length > 0;\n \n const isExecuting = toolCall.status === \"executing\";\n const isComplete = toolCall.status === \"complete\";\n const isError = toolCall.status === \"error\";\n\n return (\n <div className=\"crow-flex crow-flex-col crow-gap-1 crow-text-xs\">\n <button\n onClick={() => hasArgs && setExpanded(!expanded)}\n className={`crow-flex crow-items-center crow-gap-1.5 crow-select-none crow-transition-colors ${\n hasArgs ? \"crow-cursor-pointer hover:crow-text-gray-800\" : \"crow-cursor-default\"\n } ${isExecuting ? \"crow-text-gray-500\" : \"crow-text-gray-600\"}`}\n disabled={!hasArgs}\n >\n {hasArgs && (\n <motion.div\n animate={{ rotate: expanded ? 90 : 0 }}\n transition={{ duration: 0.15 }}\n >\n <ChevronRight className=\"crow-w-3 crow-h-3\" />\n </motion.div>\n )}\n\n {isExecuting && <Loader2 className=\"crow-w-3 crow-h-3 crow-animate-spin crow-text-blue-500\" />}\n {isComplete && <Check className=\"crow-w-3 crow-h-3 crow-text-green-500\" />}\n {isError && <span className=\"crow-w-3 crow-h-3 crow-text-red-500\">✕</span>}\n\n <span className=\"crow-font-medium\">{toolCall.name}</span>\n\n <span className=\"crow-text-gray-400\">\n {isExecuting && \"running...\"}\n {isComplete && \"done\"}\n {isError && \"failed\"}\n </span>\n </button>\n\n <AnimatePresence>\n {expanded && hasArgs && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: \"auto\", opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={{ duration: 0.15 }}\n className=\"crow-overflow-hidden\"\n >\n <pre className=\"crow-mt-1 crow-p-2 crow-bg-gray-800 crow-rounded crow-text-xs crow-font-mono crow-text-gray-200 crow-overflow-x-auto crow-max-h-32 crow-overflow-y-auto crow-ml-4\">\n {JSON.stringify(toolCall.arguments, null, 2)}\n </pre>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n}\n\nexport default ReasoningTrace;\n","/**\n * MessageBubble - Individual message display\n */\n\nimport ReactMarkdown from \"react-markdown\";\nimport { formatTime } from \"../../utils\";\nimport type { Message, ToolCall } from \"../../types\";\nimport { ReasoningTrace } from \"./ReasoningTrace\";\nimport { StreamingText } from \"./StreamingText\";\nimport { useWidgetStyles } from \"../../context/StyleContext\";\n\ninterface MessageBubbleProps {\n message: Message;\n toolCalls?: ToolCall[];\n isLoading?: boolean;\n}\n\nexport function MessageBubble({\n message,\n toolCalls = [],\n isLoading = false,\n}: MessageBubbleProps) {\n const styles = useWidgetStyles();\n\n const isWaiting =\n message.content === \"Thinking...\" ||\n (message.isBot && isLoading && !message.content);\n const hasThinking = message.isBot && message.thinking;\n const hasContent = message.content && message.content !== \"Thinking...\";\n const hasToolCalls = toolCalls.length > 0;\n\n const showReasoningTrace =\n message.isBot && (isWaiting || hasThinking || hasToolCalls);\n\n const isStreaming = Boolean(message.isBot && isLoading && hasContent);\n\n return (\n <div\n id={message.id}\n className={`crow-flex crow-flex-col ${\n message.isBot ? \"crow-items-start\" : \"crow-items-end\"\n }`}\n >\n {showReasoningTrace && (\n <ReasoningTrace\n thinking={message.thinking}\n isComplete={message.thinkingComplete}\n toolCalls={toolCalls}\n isWaiting={isWaiting && !hasThinking}\n />\n )}\n\n {hasContent && (\n <div\n className=\"crow-max-w-[80%] crow-rounded-2xl crow-px-4 crow-py-2 crow-transition-all crow-duration-150\"\n style={\n message.isBot\n ? {\n background: styles.colors.botBubble,\n color: styles.colors.botText,\n }\n : {\n background: styles.colors.userBubble,\n color: styles.colors.userText,\n border: `1px solid ${styles.colors.userBorder}`,\n }\n }\n >\n <div className=\"crow-whitespace-pre-wrap\">\n {message.isBot ? (\n <StreamingText\n content={message.content}\n isStreaming={isStreaming}\n />\n ) : (\n <ReactMarkdown\n components={{\n strong: ({ children }) => (\n <strong className=\"crow-font-bold\">{children}</strong>\n ),\n ul: ({ children }) => (\n <ul className=\"crow-list-disc crow-pl-5 crow-my-1\">\n {children}\n </ul>\n ),\n ol: ({ children }) => (\n <ol className=\"crow-list-decimal crow-pl-5 crow-my-1\">\n {children}\n </ol>\n ),\n li: ({ children }) => <li>{children}</li>,\n p: ({ children }) => (\n <p className=\"crow-mb-1 last:crow-mb-0\">{children}</p>\n ),\n a: ({ href, children }) => (\n <a\n href={href}\n className=\"crow-underline hover:crow-text-blue-300\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {children}\n </a>\n ),\n }}\n >\n {message.content}\n </ReactMarkdown>\n )}\n </div>\n <div className=\"crow-text-xs crow-opacity-60 crow-mt-1\">\n {formatTime(message.timestamp)}\n </div>\n </div>\n )}\n </div>\n );\n}\n","/**\n * MessageList - Renders list of messages\n */\n\nimport type { Message, ToolCall } from \"../../types\";\nimport { MessageBubble } from \"./MessageBubble\";\nimport { LoadingHistory } from \"./LoadingHistory\";\n\ninterface MessageListProps {\n messages: Message[];\n activeToolCalls: ToolCall[];\n isLoadingHistory: boolean;\n isGenerating?: boolean;\n}\n\nexport function MessageList({\n messages,\n activeToolCalls,\n isLoadingHistory,\n isGenerating = false,\n}: MessageListProps) {\n if (isLoadingHistory) {\n return <LoadingHistory />;\n }\n\n const lastBotIndex = messages.reduce(\n (lastIdx, m, i) => (m.isBot ? i : lastIdx),\n -1,\n );\n\n return (\n <>\n {messages.map((msg, index) => (\n <MessageBubble\n key={msg.id}\n message={msg}\n toolCalls={index === lastBotIndex ? activeToolCalls : undefined}\n isLoading={index === lastBotIndex && isGenerating}\n />\n ))}\n </>\n );\n}\n","/**\n * MessagesContainer - Scrollable container for messages\n */\n\nimport {\n forwardRef,\n useEffect,\n useRef,\n useCallback,\n type ReactNode,\n} from \"react\";\nimport { motion } from \"framer-motion\";\nimport { useWidgetStyles } from \"../../context/StyleContext\";\nimport { MESSAGES_CONTAINER_ID } from \"../../constants\";\n\ninterface MessagesContainerProps {\n children: ReactNode;\n}\n\nexport const MessagesContainer = forwardRef<\n HTMLDivElement,\n MessagesContainerProps\n>(({ children }, ref) => {\n const styles = useWidgetStyles();\n const internalRef = useRef<HTMLDivElement>(null);\n const lastScrollHeightRef = useRef<number>(0);\n const isUserScrollingRef = useRef<boolean>(false);\n\n const containerRef = (ref as React.RefObject<HTMLDivElement>) || internalRef;\n\n const isNearBottom = useCallback(() => {\n const container = containerRef.current;\n if (!container) return true;\n const threshold = 100;\n return (\n container.scrollHeight - container.scrollTop - container.clientHeight <\n threshold\n );\n }, [containerRef]);\n\n const scrollToBottom = useCallback(() => {\n const container = containerRef.current;\n if (!container) return;\n\n container.scrollTo({\n top: container.scrollHeight,\n behavior: \"smooth\",\n });\n }, [containerRef]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const handleScroll = () => {\n isUserScrollingRef.current = !isNearBottom();\n };\n\n container.addEventListener(\"scroll\", handleScroll, { passive: true });\n return () => container.removeEventListener(\"scroll\", handleScroll);\n }, [containerRef, isNearBottom]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const currentHeight = container.scrollHeight;\n const heightChanged = currentHeight !== lastScrollHeightRef.current;\n\n if (heightChanged) {\n lastScrollHeightRef.current = currentHeight;\n\n if (!isUserScrollingRef.current || isNearBottom()) {\n scrollToBottom();\n }\n }\n });\n\n return (\n <motion.div\n ref={containerRef}\n id={MESSAGES_CONTAINER_ID}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: styles.animations.duration }}\n className=\"crow-relative crow-flex-1 crow-min-h-0 crow-rounded-2xl crow-mb-3 crow-overflow-y-auto crow-p-4 crow-space-y-3 crow-pointer-events-auto\"\n style={{ background: styles.colors.messagesBackground }}\n >\n {children}\n </motion.div>\n );\n});\n\nMessagesContainer.displayName = \"MessagesContainer\";\n","/**\n * ConversationList - Dropdown list of past conversations\n */\n\nimport { motion } from \"framer-motion\";\nimport { X } from \"lucide-react\";\nimport type { Conversation } from \"../../types\";\nimport { formatConversationDate } from \"../../utils\";\n\ninterface ConversationListProps {\n conversations: Conversation[];\n currentConversationId: string | null;\n onSelect: (id: string) => void;\n onClose: () => void;\n}\n\nexport function ConversationList({\n conversations,\n currentConversationId,\n onSelect,\n onClose,\n}: ConversationListProps) {\n return (\n <motion.div\n initial={{ opacity: 0, height: 0 }}\n animate={{ opacity: 1, height: \"auto\" }}\n exit={{ opacity: 0, height: 0 }}\n className=\"crow-mb-3 crow-rounded-xl crow-bg-gray-50 crow-border crow-border-gray-200\"\n >\n <div className=\"crow-p-2 crow-border-b crow-border-gray-200 crow-flex crow-justify-between crow-items-center\">\n <span className=\"crow-text-sm crow-font-medium crow-text-gray-700\">\n Recent Conversations\n </span>\n <button onClick={onClose} className=\"crow-p-1 hover:crow-bg-gray-200 crow-rounded\">\n <X size={14} className=\"crow-text-gray-500\" />\n </button>\n </div>\n <div className=\"crow-max-h-[200px] crow-overflow-y-auto\">\n {conversations.length === 0 ? (\n <div className=\"crow-p-4 crow-text-center crow-text-sm crow-text-gray-500\">\n No conversations yet\n </div>\n ) : (\n conversations.map((conv) => (\n <button\n key={conv.id}\n onClick={() => onSelect(conv.id)}\n className={`crow-w-full crow-p-3 crow-text-left hover:crow-bg-gray-100 crow-transition-colors crow-border-b crow-border-gray-100 last:crow-border-0 ${\n currentConversationId === conv.id ? \"crow-bg-blue-50\" : \"\"\n }`}\n >\n <div className=\"crow-text-sm crow-font-medium crow-text-gray-800 crow-truncate\">\n {conv.name || \"Untitled conversation\"}\n </div>\n <div className=\"crow-text-xs crow-text-gray-500 crow-mt-0.5\">\n {formatConversationDate(conv.updated_at)}\n </div>\n </button>\n ))\n )}\n </div>\n </motion.div>\n );\n}\n","/**\n * WorkflowPanel - Displays active workflow with todos\n */\n\nimport { motion } from \"framer-motion\";\nimport type { ActiveWorkflow } from \"../../types\";\n\ninterface WorkflowPanelProps {\n workflow: ActiveWorkflow;\n onExit: () => void;\n}\n\nexport function WorkflowPanel({ workflow, onExit }: WorkflowPanelProps) {\n return (\n <motion.div\n initial={{ opacity: 0, y: -10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -10 }}\n transition={{ duration: 0.3 }}\n className=\"crow-mb-3 crow-p-3 crow-rounded-xl crow-bg-gray-50 crow-border crow-border-gray-200\"\n >\n <div className=\"crow-flex crow-items-center crow-justify-between\">\n <span className=\"crow-text-sm crow-font-medium crow-text-gray-900 crow-flex crow-items-center crow-gap-1\">\n {workflow.name}\n </span>\n <button\n onClick={onExit}\n className=\"crow-text-xs crow-text-gray-500 hover:crow-text-gray-700 crow-underline\"\n >\n Exit\n </button>\n </div>\n </motion.div>\n );\n}\n","/**\n * PoweredByBadge - Branding badge at bottom\n */\n\nimport { useWidgetStyles } from \"../../context/StyleContext\";\n\ninterface PoweredByBadgeProps {\n apiUrl?: string;\n}\n\nexport function PoweredByBadge({ apiUrl = \"\" }: PoweredByBadgeProps) {\n const styles = useWidgetStyles();\n const branding = styles.branding;\n\n if (!branding.showPoweredBy) return null;\n\n // Construct full logo URL using apiUrl to ensure it works on third-party sites\n const logoUrl = branding.logoUrl?.startsWith(\"http\") \n ? branding.logoUrl \n : `${apiUrl}${branding.logoUrl}`;\n\n return (\n <div className=\"crow-flex crow-items-center crow-justify-center crow-gap-1.5 crow-mb-3 crow-text-xs crow-text-gray-400\">\n {branding.showLogo && logoUrl && (\n <img\n src={logoUrl}\n alt=\"Crow\"\n width={14}\n height={14}\n className=\"crow-opacity-50\"\n />\n )}\n <span>{branding.poweredByText}</span>\n </div>\n );\n}\n","/**\n * ModelSelector - Dropdown for selecting AI models\n */\n\nimport React, { useState, useRef, useEffect } from \"react\";\nimport { ChevronDown, Check } from \"lucide-react\";\nimport { cn } from \"../../utils\";\nimport type { Model } from \"../../types\";\n\ninterface ModelSelectorProps {\n models: Model[];\n selectedModel: string;\n onModelChange: (modelId: string) => void;\n disabled?: boolean;\n}\n\nexport const ModelSelector: React.FC<ModelSelectorProps> = ({\n models,\n selectedModel,\n onModelChange,\n disabled = false,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n const selectedModelData = models.find((m) => m.id === selectedModel);\n\n const groupedModels = models.reduce((acc, model) => {\n if (!acc[model.provider]) acc[model.provider] = [];\n acc[model.provider].push(model);\n return acc;\n }, {} as Record<string, Model[]>);\n\n return (\n <div className=\"crow-relative\" ref={dropdownRef}>\n <button\n type=\"button\"\n onClick={() => !disabled && setIsOpen(!isOpen)}\n disabled={disabled}\n className={cn(\n \"crow-flex crow-items-center crow-gap-1 crow-px-2 crow-py-1 crow-rounded-md crow-text-xs\",\n \"crow-bg-transparent crow-text-gray-400\",\n \"hover:crow-text-gray-700 crow-transition-colors\",\n disabled ? \"crow-opacity-50 crow-cursor-not-allowed\" : \"crow-cursor-pointer\"\n )}\n >\n <span>{selectedModelData?.name || \"Select Model\"}</span>\n <ChevronDown\n className={cn(\n \"crow-w-3 crow-h-3 crow-transition-transform\",\n isOpen ? \"crow-rotate-180\" : \"\"\n )}\n />\n </button>\n\n {isOpen && (\n <div className=\"crow-absolute crow-bottom-full crow-mb-2 crow-left-0 crow-min-w-[180px] crow-bg-white crow-border crow-border-gray-200 crow-rounded-xl crow-shadow-lg crow-z-50 crow-overflow-hidden\">\n {Object.entries(groupedModels).map(([provider, providerModels]) => (\n <div key={provider}>\n <div className=\"crow-px-3 crow-py-1.5 crow-text-xs crow-font-medium crow-text-gray-400 crow-uppercase crow-tracking-wide crow-bg-gray-50\">\n {provider}\n </div>\n {providerModels.map((model) => (\n <button\n key={model.id}\n onClick={() => {\n onModelChange(model.id);\n setIsOpen(false);\n }}\n className={cn(\n \"crow-w-full crow-flex crow-items-center crow-justify-between crow-px-3 crow-py-1.5 crow-text-sm\",\n \"hover:crow-bg-gray-100 crow-transition-colors\",\n model.id === selectedModel ? \"crow-text-gray-900\" : \"crow-text-gray-600\"\n )}\n >\n <span>{model.name}</span>\n {model.id === selectedModel && (\n <Check className=\"crow-w-4 crow-h-4 crow-text-green-500\" />\n )}\n </button>\n ))}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n};\n","/**\n * PromptInputBox - Main input component for user messages\n */\n\nimport React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { ArrowUp, Square } from \"lucide-react\";\nimport { ModelSelector } from \"./ModelSelector\";\nimport { cn } from \"../../utils\";\nimport type { Model } from \"../../types\";\n\n// Textarea Component\ninterface TextareaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n className?: string;\n}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => (\n <textarea\n className={cn(\n \"crow-flex crow-w-full crow-rounded-md crow-border-none crow-bg-transparent crow-px-3 crow-py-1.5 crow-text-base crow-text-gray-900 placeholder:crow-text-gray-500 focus-visible:crow-outline-none focus-visible:crow-ring-0 disabled:crow-cursor-not-allowed disabled:crow-opacity-50 crow-min-h-[32px] crow-resize-none\",\n className,\n )}\n ref={ref}\n rows={1}\n {...props}\n />\n ),\n);\nTextarea.displayName = \"Textarea\";\n\n// Tooltip Components\nconst TooltipProvider = TooltipPrimitive.Provider;\nconst Tooltip = TooltipPrimitive.Root;\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"crow-z-50 crow-overflow-hidden crow-rounded-md crow-border crow-border-gray-300 crow-bg-white crow-text-gray-900 crow-px-3 crow-py-1.5 crow-text-sm crow-shadow-md\",\n className,\n )}\n {...props}\n />\n));\nTooltipContent.displayName = \"TooltipContent\";\n\n// Button Component\ninterface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: \"default\" | \"outline\" | \"ghost\";\n size?: \"default\" | \"sm\" | \"lg\" | \"icon\";\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant = \"default\", size = \"default\", ...props }, ref) => {\n const variantClasses = {\n default: \"crow-bg-black hover:crow-bg-gray-800 crow-text-white\",\n outline: \"crow-border crow-bg-transparent hover:crow-bg-gray-100\",\n ghost: \"crow-bg-transparent hover:crow-bg-gray-100\",\n };\n const sizeClasses = {\n default: \"crow-h-10 crow-px-4 crow-py-2\",\n sm: \"crow-h-8 crow-px-3 crow-text-sm\",\n lg: \"crow-h-12 crow-px-6\",\n icon: \"crow-h-8 crow-w-8 crow-rounded-full\",\n };\n return (\n <button\n className={cn(\n \"crow-inline-flex crow-items-center crow-justify-center crow-font-medium crow-transition-colors focus-visible:crow-outline-none disabled:crow-pointer-events-none disabled:crow-opacity-50\",\n variantClasses[variant],\n sizeClasses[size],\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n },\n);\nButton.displayName = \"Button\";\n\n// PromptInput Context\ninterface PromptInputContextType {\n isLoading: boolean;\n value: string;\n setValue: (value: string) => void;\n maxHeight: number | string;\n onSubmit?: () => void;\n disabled?: boolean;\n}\n\nconst PromptInputContext = React.createContext<PromptInputContextType>({\n isLoading: false,\n value: \"\",\n setValue: () => {},\n maxHeight: 240,\n onSubmit: undefined,\n disabled: false,\n});\n\nfunction usePromptInput() {\n const context = React.useContext(PromptInputContext);\n if (!context) {\n throw new Error(\"usePromptInput must be used within a PromptInput\");\n }\n return context;\n}\n\n// PromptInput Container\ninterface PromptInputProps {\n isLoading?: boolean;\n value?: string;\n onValueChange?: (value: string) => void;\n maxHeight?: number | string;\n onSubmit?: () => void;\n children: React.ReactNode;\n className?: string;\n disabled?: boolean;\n}\n\nconst PromptInput = React.forwardRef<HTMLDivElement, PromptInputProps>(\n (\n {\n className,\n isLoading = false,\n maxHeight = 240,\n value,\n onValueChange,\n onSubmit,\n children,\n disabled = false,\n },\n ref,\n ) => {\n const [internalValue, setInternalValue] = React.useState(value || \"\");\n\n const handleChange = (newValue: string) => {\n setInternalValue(newValue);\n onValueChange?.(newValue);\n };\n\n return (\n <TooltipProvider>\n <PromptInputContext.Provider\n value={{\n isLoading,\n value: value ?? internalValue,\n setValue: onValueChange ?? handleChange,\n maxHeight,\n onSubmit,\n disabled,\n }}\n >\n <div\n ref={ref}\n className={cn(\n \"crow-rounded-3xl crow-border crow-border-gray-300 crow-bg-white crow-p-1.5 crow-shadow-lg crow-transition-all crow-duration-300\",\n isLoading && \"crow-border-red-500\",\n className,\n )}\n >\n {children}\n </div>\n </PromptInputContext.Provider>\n </TooltipProvider>\n );\n },\n);\nPromptInput.displayName = \"PromptInput\";\n\n// PromptInput Textarea\ninterface PromptInputTextareaProps {\n disableAutosize?: boolean;\n placeholder?: string;\n}\n\nconst PromptInputTextarea: React.FC<\n PromptInputTextareaProps & React.ComponentProps<typeof Textarea>\n> = ({\n className,\n onKeyDown,\n disableAutosize = false,\n placeholder,\n ...props\n}) => {\n const { value, setValue, maxHeight, onSubmit, disabled } = usePromptInput();\n const textareaRef = React.useRef<HTMLTextAreaElement>(null);\n\n React.useEffect(() => {\n if (disableAutosize || !textareaRef.current) return;\n textareaRef.current.style.height = \"auto\";\n textareaRef.current.style.height =\n typeof maxHeight === \"number\"\n ? `${Math.min(textareaRef.current.scrollHeight, maxHeight)}px`\n : `min(${textareaRef.current.scrollHeight}px, ${maxHeight})`;\n }, [value, maxHeight, disableAutosize]);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n onSubmit?.();\n }\n onKeyDown?.(e);\n };\n\n return (\n <Textarea\n ref={textareaRef}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={handleKeyDown}\n className={cn(\"text-base\", className)}\n disabled={disabled}\n placeholder={placeholder}\n {...props}\n />\n );\n};\n\n// PromptInput Actions Container\ninterface PromptInputActionsProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst PromptInputActions: React.FC<PromptInputActionsProps> = ({\n children,\n className,\n ...props\n}) => (\n <div\n className={cn(\"crow-flex crow-items-center crow-gap-2\", className)}\n {...props}\n >\n {children}\n </div>\n);\n\n// PromptInput Action with Tooltip\ninterface PromptInputActionProps extends React.ComponentProps<typeof Tooltip> {\n tooltip: React.ReactNode;\n children: React.ReactNode;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n}\n\nconst PromptInputAction: React.FC<PromptInputActionProps> = ({\n tooltip,\n children,\n side = \"top\",\n ...props\n}) => {\n return (\n <Tooltip {...props}>\n <TooltipTrigger asChild>{children}</TooltipTrigger>\n <TooltipContent side={side}>{tooltip}</TooltipContent>\n </Tooltip>\n );\n};\n\n// Main PromptInputBox Component\ninterface PromptInputBoxProps {\n onSend?: (message: string) => void;\n onStop?: () => void;\n isLoading?: boolean;\n placeholder?: string;\n className?: string;\n selectedModel?: string;\n onModelChange?: (model: string) => void;\n availableModels?: Model[];\n}\n\nexport const PromptInputBox = React.forwardRef<\n HTMLDivElement,\n PromptInputBoxProps\n>(\n (\n {\n onSend = () => {},\n onStop,\n isLoading = false,\n placeholder = \"Type your message here...\",\n className,\n selectedModel = \"gpt-4o\",\n onModelChange,\n availableModels = [],\n },\n ref,\n ) => {\n const [input, setInput] = React.useState(\"\");\n const promptBoxRef = React.useRef<HTMLDivElement>(null);\n\n const handleSubmit = () => {\n if (input.trim()) {\n onSend(input);\n setInput(\"\");\n }\n };\n\n const hasContent = input.trim() !== \"\";\n\n return (\n <PromptInput\n value={input}\n onValueChange={setInput}\n isLoading={isLoading}\n onSubmit={handleSubmit}\n className={cn(\n \"crow-w-full crow-shadow-lg crow-transition-all crow-duration-300 crow-ease-in-out\",\n className,\n )}\n disabled={isLoading}\n ref={ref || promptBoxRef}\n >\n <div className=\"crow-transition-all crow-duration-300 crow-opacity-100\">\n <PromptInputTextarea\n placeholder={placeholder}\n className=\"crow-text-base\"\n />\n </div>\n\n <PromptInputActions className=\"crow-flex crow-items-center crow-justify-between crow-gap-2 crow-p-0 crow-pt-1\">\n {/* Model Selector - Left side */}\n <div className=\"crow-flex crow-items-center\">\n {availableModels.length > 0 && onModelChange && (\n <ModelSelector\n models={availableModels}\n selectedModel={selectedModel}\n onModelChange={onModelChange}\n disabled={isLoading}\n />\n )}\n </div>\n\n {/* Send/Stop Button - Right side */}\n <PromptInputAction\n tooltip={\n isLoading\n ? \"Stop generation\"\n : hasContent\n ? \"Send message\"\n : \"Type a message\"\n }\n >\n <Button\n variant=\"default\"\n size=\"icon\"\n className={cn(\n \"crow-h-7 crow-w-7 crow-rounded-full crow-transition-all crow-duration-200\",\n isLoading && \"crow-bg-red-500 hover:crow-bg-red-500\",\n hasContent &&\n !isLoading &&\n \"crow-bg-black hover:crow-bg-gray-800\",\n !hasContent && !isLoading && \"crow-bg-transparent\",\n )}\n onClick={() => {\n if (isLoading && onStop) {\n onStop();\n } else if (hasContent) {\n handleSubmit();\n }\n }}\n >\n {isLoading ? (\n <Square\n className=\"crow-h-3.5 crow-w-3.5 crow-text-white\"\n style={{ fill: \"white\" }}\n />\n ) : (\n <ArrowUp\n className={cn(\n \"crow-h-3.5 crow-w-3.5\",\n hasContent ? \"crow-text-white\" : \"crow-text-gray-400\",\n )}\n />\n )}\n </Button>\n </PromptInputAction>\n </PromptInputActions>\n </PromptInput>\n );\n },\n);\n\nPromptInputBox.displayName = \"PromptInputBox\";\n","/**\n * CSS Custom Properties Utility\n * \n * Converts the nested style configuration to CSS custom properties (variables).\n * These variables are applied to the widget root element and consumed by\n * component-specific CSS classes.\n */\n\nimport type { ResolvedWidgetStyles } from './types';\n\n/**\n * CSS variable names used by the widget.\n * Components reference these via var(--crow-*) in CSS.\n */\nexport const CSS_VAR_NAMES = {\n // Colors\n colors: {\n primary: '--crow-colors-primary',\n background: '--crow-colors-background',\n border: '--crow-colors-border',\n text: '--crow-colors-text',\n botBubble: '--crow-colors-bot-bubble',\n botText: '--crow-colors-bot-text',\n userBubble: '--crow-colors-user-bubble',\n userText: '--crow-colors-user-text',\n userBorder: '--crow-colors-user-border',\n messagesBackground: '--crow-colors-messages-background',\n bubbleBackground: '--crow-colors-bubble-background',\n bubbleBorder: '--crow-colors-bubble-border',\n bubbleIcon: '--crow-colors-bubble-icon',\n },\n // Dimensions\n dimensions: {\n width: '--crow-dimensions-width',\n maxHeight: '--crow-dimensions-max-height',\n messagesMaxHeight: '--crow-dimensions-messages-max-height',\n borderRadius: '--crow-dimensions-border-radius',\n padding: '--crow-dimensions-padding',\n },\n // Typography\n typography: {\n fontFamily: '--crow-typography-font-family',\n fontSize: '--crow-typography-font-size',\n headerFontSize: '--crow-typography-header-font-size',\n fontWeight: '--crow-typography-font-weight',\n lineHeight: '--crow-typography-line-height',\n letterSpacing: '--crow-typography-letter-spacing',\n },\n // Position\n position: {\n right: '--crow-position-right',\n bottom: '--crow-position-bottom',\n bubbleRight: '--crow-position-bubble-right',\n bubbleBottom: '--crow-position-bubble-bottom',\n },\n // Bubble\n bubble: {\n size: '--crow-bubble-size',\n iconSize: '--crow-bubble-icon-size',\n },\n // Shadows\n shadows: {\n widget: '--crow-shadows-widget',\n bubble: '--crow-shadows-bubble',\n },\n // Animations\n animations: {\n duration: '--crow-animations-duration',\n },\n} as const;\n\n/**\n * Convert a resolved widget style configuration to CSS custom properties.\n * \n * @param styles - The fully resolved widget styles (with all defaults applied)\n * @returns An object of CSS variable name to value, suitable for use as React inline styles\n * \n * @example\n * const cssVars = stylesToCssVars(resolvedStyles);\n * // Returns: { '--crow-colors-background': 'rgba(255,255,255,0.95)', ... }\n * <div style={cssVars}>...</div>\n */\nexport function stylesToCssVars(styles: ResolvedWidgetStyles): Record<string, string> {\n const vars: Record<string, string> = {};\n\n // Colors\n vars[CSS_VAR_NAMES.colors.primary] = styles.colors.primary;\n vars[CSS_VAR_NAMES.colors.background] = styles.colors.background;\n vars[CSS_VAR_NAMES.colors.border] = styles.colors.border;\n vars[CSS_VAR_NAMES.colors.text] = styles.colors.text;\n vars[CSS_VAR_NAMES.colors.botBubble] = styles.colors.botBubble;\n vars[CSS_VAR_NAMES.colors.botText] = styles.colors.botText;\n vars[CSS_VAR_NAMES.colors.userBubble] = styles.colors.userBubble;\n vars[CSS_VAR_NAMES.colors.userText] = styles.colors.userText;\n vars[CSS_VAR_NAMES.colors.userBorder] = styles.colors.userBorder;\n vars[CSS_VAR_NAMES.colors.messagesBackground] = styles.colors.messagesBackground;\n vars[CSS_VAR_NAMES.colors.bubbleBackground] = styles.colors.bubbleBackground;\n vars[CSS_VAR_NAMES.colors.bubbleBorder] = styles.colors.bubbleBorder;\n vars[CSS_VAR_NAMES.colors.bubbleIcon] = styles.colors.bubbleIcon;\n\n // Dimensions (add 'px' suffix for numeric values)\n vars[CSS_VAR_NAMES.dimensions.width] = `${styles.dimensions.width}px`;\n vars[CSS_VAR_NAMES.dimensions.maxHeight] = `${styles.dimensions.maxHeight}px`;\n vars[CSS_VAR_NAMES.dimensions.messagesMaxHeight] = `${styles.dimensions.messagesMaxHeight}px`;\n vars[CSS_VAR_NAMES.dimensions.borderRadius] = `${styles.dimensions.borderRadius}px`;\n vars[CSS_VAR_NAMES.dimensions.padding] = `${styles.dimensions.padding}px`;\n\n // Typography\n vars[CSS_VAR_NAMES.typography.fontFamily] = styles.typography.fontFamily;\n vars[CSS_VAR_NAMES.typography.fontSize] = `${styles.typography.fontSize}px`;\n vars[CSS_VAR_NAMES.typography.headerFontSize] = `${styles.typography.headerFontSize}px`;\n vars[CSS_VAR_NAMES.typography.fontWeight] = String(styles.typography.fontWeight);\n vars[CSS_VAR_NAMES.typography.lineHeight] = String(styles.typography.lineHeight);\n vars[CSS_VAR_NAMES.typography.letterSpacing] = `${styles.typography.letterSpacing}px`;\n\n // Position\n vars[CSS_VAR_NAMES.position.right] = `${styles.position.right}px`;\n vars[CSS_VAR_NAMES.position.bottom] = `${styles.position.bottom}px`;\n vars[CSS_VAR_NAMES.position.bubbleRight] = `${styles.position.bubbleRight}px`;\n vars[CSS_VAR_NAMES.position.bubbleBottom] = `${styles.position.bubbleBottom}px`;\n\n // Bubble\n vars[CSS_VAR_NAMES.bubble.size] = `${styles.bubble.size}px`;\n vars[CSS_VAR_NAMES.bubble.iconSize] = `${styles.bubble.iconSize}px`;\n\n // Shadows (already CSS strings)\n vars[CSS_VAR_NAMES.shadows.widget] = styles.shadows.widget;\n vars[CSS_VAR_NAMES.shadows.bubble] = styles.shadows.bubble;\n\n // Animations\n vars[CSS_VAR_NAMES.animations.duration] = `${styles.animations.duration}s`;\n\n return vars;\n}\n\n/**\n * Get a specific CSS variable value from the widget root element.\n * Useful for JavaScript that needs to read current style values.\n * \n * @param varName - The CSS variable name (e.g., '--crow-colors-primary')\n * @param element - The element to read from (defaults to document.documentElement)\n * @returns The computed value of the CSS variable\n */\nexport function getCssVar(varName: string, element: Element = document.documentElement): string {\n return getComputedStyle(element).getPropertyValue(varName).trim();\n}\n","/**\n * CSS Styles for Crow Widget\n * \n * Exports the compiled CSS as a string for Shadow DOM injection.\n * Auto-injection is disabled to prevent CSS leaking to host pages.\n * \n * DO NOT EDIT THE CSS_CONTENT - Generated by scripts/inject-css.js\n */\n\nconst STYLE_ID = 'crow-ui-styles';\n\n/**\n * Compiled CSS content including Tailwind utilities with crow- prefix\n * This should be injected into the Shadow DOM, not document.head\n */\nexport const WIDGET_CSS = `*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }\n\n/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:\"\"}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.crow-pointer-events-none{pointer-events:none}.crow-pointer-events-auto{pointer-events:auto}.crow-fixed{position:fixed}.crow-absolute{position:absolute}.crow-relative{position:relative}.crow-sticky{position:sticky}.crow-bottom-0{bottom:0}.crow-bottom-full{bottom:100%}.crow-left-0{left:0}.crow-right-0{right:0}.crow-top-0{top:0}.crow-z-50{z-index:50}.crow-z-\\\\[999999\\\\]{z-index:999999}.crow-m-0{margin:0}.crow-my-1{margin-top:.25rem;margin-bottom:.25rem}.crow-my-2{margin-top:.5rem;margin-bottom:.5rem}.crow-mb-1{margin-bottom:.25rem}.crow-mb-2{margin-bottom:.5rem}.crow-mb-3{margin-bottom:.75rem}.crow-ml-0{margin-left:0}.crow-ml-0\\\\.5{margin-left:.125rem}.crow-ml-2{margin-left:.5rem}.crow-ml-4{margin-left:1rem}.crow-mt-0{margin-top:0}.crow-mt-0\\\\.5{margin-top:.125rem}.crow-mt-1{margin-top:.25rem}.crow-mt-2{margin-top:.5rem}.crow-mt-auto{margin-top:auto}.crow-inline-block{display:inline-block}.crow-flex{display:flex}.crow-inline-flex{display:inline-flex}.crow-h-10{height:2.5rem}.crow-h-12{height:3rem}.crow-h-2{height:.5rem}.crow-h-3{height:.75rem}.crow-h-3\\\\.5{height:.875rem}.crow-h-4{height:1rem}.crow-h-7{height:1.75rem}.crow-h-8{height:2rem}.crow-h-full{height:100%}.crow-max-h-32{max-height:8rem}.crow-max-h-\\\\[200px\\\\]{max-height:200px}.crow-min-h-0{min-height:0}.crow-min-h-\\\\[32px\\\\]{min-height:32px}.crow-w-0{width:0}.crow-w-0\\\\.5{width:.125rem}.crow-w-2{width:.5rem}.crow-w-3{width:.75rem}.crow-w-3\\\\.5{width:.875rem}.crow-w-4{width:1rem}.crow-w-7{width:1.75rem}.crow-w-8{width:2rem}.crow-w-full{width:100%}.crow-min-w-0{min-width:0}.crow-min-w-\\\\[180px\\\\]{min-width:180px}.crow-max-w-\\\\[80\\\\%\\\\]{max-width:80%}.crow-max-w-\\\\[90\\\\%\\\\]{max-width:90%}.crow-max-w-full{max-width:100%}.crow-flex-1{flex:1 1 0%}.crow-flex-shrink-0{flex-shrink:0}.crow-rotate-180{--tw-rotate:180deg}.crow-rotate-180,.crow-scale-100{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.crow-scale-100{--tw-scale-x:1;--tw-scale-y:1}.crow-scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.crow-animate-fade-in{animation:crow-fadeIn .2s ease-out}.crow-animate-pulse{animation:crow-pulse 2s cubic-bezier(.4,0,.6,1) infinite}.crow-animate-slide-up{animation:crow-slideUp .3s ease-out}@keyframes crow-spin{to{transform:rotate(1turn)}}.crow-animate-spin{animation:crow-spin 1s linear infinite}.crow-cursor-default{cursor:default}.crow-cursor-not-allowed{cursor:not-allowed}.crow-cursor-pointer{cursor:pointer}.crow-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.crow-resize-none{resize:none}.crow-list-decimal{list-style-type:decimal}.crow-list-disc{list-style-type:disc}.crow-flex-row{flex-direction:row}.crow-flex-col{flex-direction:column}.crow-items-start{align-items:flex-start}.crow-items-end{align-items:flex-end}.crow-items-center{align-items:center}.crow-justify-start{justify-content:flex-start}.crow-justify-end{justify-content:flex-end}.crow-justify-center{justify-content:center}.crow-justify-between{justify-content:space-between}.crow-gap-1{gap:.25rem}.crow-gap-1\\\\.5{gap:.375rem}.crow-gap-2{gap:.5rem}.crow-gap-3{gap:.75rem}.crow-gap-4{gap:1rem}.crow-gap-6{gap:1.5rem}.crow-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.crow-space-y-1\\\\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.crow-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.crow-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.crow-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.crow-overflow-hidden{overflow:hidden}.crow-overflow-visible{overflow:visible}.crow-overflow-x-auto{overflow-x:auto}.crow-overflow-y-auto{overflow-y:auto}.crow-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.crow-whitespace-pre-wrap{white-space:pre-wrap}.crow-break-words{overflow-wrap:break-word}.crow-rounded{border-radius:.25rem}.crow-rounded-2xl{border-radius:1rem}.crow-rounded-3xl{border-radius:1.5rem}.crow-rounded-full{border-radius:9999px}.crow-rounded-lg{border-radius:.5rem}.crow-rounded-md{border-radius:.375rem}.crow-rounded-xl{border-radius:.75rem}.crow-border{border-width:1px}.crow-border-b{border-bottom-width:1px}.crow-border-l{border-left-width:1px}.crow-border-l-2{border-left-width:2px}.crow-border-r{border-right-width:1px}.crow-border-t{border-top-width:1px}.crow-border-none{border-style:none}.crow-border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}.crow-border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.crow-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.crow-border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.crow-bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.crow-bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.crow-bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.crow-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.crow-bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.crow-bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.crow-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.crow-bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.crow-bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.crow-bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.crow-bg-transparent{background-color:transparent}.crow-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.crow-p-0{padding:0}.crow-p-1{padding:.25rem}.crow-p-1\\\\.5{padding:.375rem}.crow-p-2{padding:.5rem}.crow-p-3{padding:.75rem}.crow-p-4{padding:1rem}.crow-p-6{padding:1.5rem}.crow-px-1{padding-left:.25rem;padding-right:.25rem}.crow-px-1\\\\.5{padding-left:.375rem;padding-right:.375rem}.crow-px-2{padding-left:.5rem;padding-right:.5rem}.crow-px-3{padding-left:.75rem;padding-right:.75rem}.crow-px-4{padding-left:1rem;padding-right:1rem}.crow-px-6{padding-left:1.5rem;padding-right:1.5rem}.crow-py-0{padding-top:0;padding-bottom:0}.crow-py-0\\\\.5{padding-top:.125rem;padding-bottom:.125rem}.crow-py-1{padding-top:.25rem;padding-bottom:.25rem}.crow-py-1\\\\.5{padding-top:.375rem;padding-bottom:.375rem}.crow-py-2{padding-top:.5rem;padding-bottom:.5rem}.crow-py-3{padding-top:.75rem;padding-bottom:.75rem}.crow-py-6{padding-top:1.5rem;padding-bottom:1.5rem}.crow-py-8{padding-top:2rem;padding-bottom:2rem}.crow-pb-2{padding-bottom:.5rem}.crow-pl-3{padding-left:.75rem}.crow-pl-4{padding-left:1rem}.crow-pl-5{padding-left:1.25rem}.crow-pr-4{padding-right:1rem}.crow-pt-1{padding-top:.25rem}.crow-text-left{text-align:left}.crow-text-center{text-align:center}.crow-text-right{text-align:right}.crow-align-text-bottom{vertical-align:text-bottom}.crow-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.crow-text-base{font-size:1rem;line-height:1.5rem}.crow-text-lg{font-size:1.125rem;line-height:1.75rem}.crow-text-sm{font-size:.875rem;line-height:1.25rem}.crow-text-xs{font-size:.75rem;line-height:1rem}.crow-font-bold{font-weight:700}.crow-font-medium{font-weight:500}.crow-font-semibold{font-weight:600}.crow-uppercase{text-transform:uppercase}.crow-leading-relaxed{line-height:1.625}.crow-tracking-wide{letter-spacing:.025em}.crow-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.crow-text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.crow-text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.crow-text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.crow-text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.crow-text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.crow-text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.crow-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.crow-text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.crow-text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.crow-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.crow-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.crow-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.crow-underline{text-decoration-line:underline}.crow-opacity-0{opacity:0}.crow-opacity-100{opacity:1}.crow-opacity-50{opacity:.5}.crow-opacity-60{opacity:.6}.crow-shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.crow-shadow-2xl,.crow-shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.crow-shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.crow-shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.crow-backdrop-blur-md{--tw-backdrop-blur:blur(12px)}.crow-backdrop-blur-md,.crow-backdrop-blur-sm{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.crow-backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.crow-transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-duration-150{transition-duration:.15s}.crow-duration-200{transition-duration:.2s}.crow-duration-300{transition-duration:.3s}.crow-duration-500{transition-duration:.5s}.crow-ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.crow-animate-fade-in{animation:crow-fadeIn .2s ease-out}.crow-animate-slide-up{animation:crow-slideUp .3s ease-out}.crow-animate-pulse{animation:crow-pulse 1.5s ease-in-out infinite}.crow-animation-delay-100{animation-delay:.1s}.crow-animation-delay-200{animation-delay:.2s}@keyframes crow-fadeIn{0%{opacity:0}to{opacity:1}}@keyframes crow-slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes crow-pulse{0%,to{opacity:1}50%{opacity:.4}}.crow-overflow-y-auto::-webkit-scrollbar{width:6px}.crow-overflow-y-auto::-webkit-scrollbar-track{background:transparent}.crow-overflow-y-auto::-webkit-scrollbar-thumb{background-color:#d1d5db;border-radius:3px}.crow-overflow-y-auto::-webkit-scrollbar-thumb:hover{background-color:#9ca3af}.crow-focus-visible\\\\:crow-outline-none:focus-visible{outline:none}.crow-focus-visible\\\\:crow-ring-2:focus-visible{box-shadow:0 0 0 2px var(--crow-primary,#6366f1)}:host{--crow-primary:#6366f1;--crow-primary-dark:#4f46e5;--crow-secondary:#f1f5f9;--crow-accent:#10b981}@media (prefers-color-scheme:dark){:host{--crow-primary:#818cf8;--crow-primary-dark:#6366f1}}.placeholder\\\\:crow-text-gray-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.placeholder\\\\:crow-text-gray-500::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.last\\\\:crow-mb-0:last-child{margin-bottom:0}.last\\\\:crow-border-0:last-child{border-width:0}.hover\\\\:crow-scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\\\\:crow-bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.hover\\\\:crow-bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.hover\\\\:crow-bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.hover\\\\:crow-bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.hover\\\\:crow-bg-red-500:hover{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.hover\\\\:crow-text-blue-300:hover{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.hover\\\\:crow-text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.hover\\\\:crow-text-gray-800:hover{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.hover\\\\:crow-opacity-100:hover{opacity:1}.focus\\\\:crow-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\\\:crow-ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\\\\:crow-ring-0:focus,.focus\\\\:crow-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\\\\:crow-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\\\\:crow-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus-visible\\\\:crow-outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\\\\:crow-ring-0:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.disabled\\\\:crow-pointer-events-none:disabled{pointer-events:none}.disabled\\\\:crow-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\\\:crow-opacity-50:disabled{opacity:.5}`;\n\nlet injected = false;\n\n/**\n * Inject styles into a target (document.head or ShadowRoot)\n * \n * For Shadow DOM usage, prefer passing the CSS string directly to ShadowContainer.\n * This function is kept for backwards compatibility and non-Shadow DOM use cases.\n * \n * @param target - Where to inject styles (defaults to document.head)\n */\nexport function injectStyles(target: Document | ShadowRoot = document) {\n // Only inject once per target\n if (target === document && injected) return;\n if (typeof document === 'undefined') return;\n \n // Check if already injected in this target\n const existingStyle = target === document \n ? document.getElementById(STYLE_ID)\n : (target as ShadowRoot).querySelector(`#${STYLE_ID}`);\n \n if (existingStyle) {\n if (target === document) injected = true;\n return;\n }\n \n const style = document.createElement('style');\n style.id = STYLE_ID;\n style.textContent = WIDGET_CSS;\n \n if (target === document) {\n document.head.appendChild(style);\n injected = true;\n } else {\n // For ShadowRoot, prepend the style\n (target as ShadowRoot).prepend(style);\n }\n}\n\n// NOTE: Auto-injection is DISABLED to prevent CSS leaking to host pages.\n// The widget now uses Shadow DOM for CSS isolation.\n// If you need to inject styles globally (not recommended), call injectStyles() manually.\n","/**\n * CrowWidget - Floating chat widget with bubble button\n * \n * The main widget component that supports:\n * - Floating mode (with bubble) for production\n * - Embedded mode (no bubble) for dashboard preview\n * - Custom styles from DB or props\n * - Shadow DOM encapsulation for CSS isolation\n */\n\nimport { useState, useRef, useEffect, type CSSProperties } from \"react\";\nimport { AnimatePresence } from \"framer-motion\";\n\n// Hooks\nimport { useChat } from \"./hooks/useChat\";\nimport { useConversations } from \"./hooks/useConversations\";\nimport { useWorkflow } from \"./hooks/useWorkflow\";\nimport { useCrowAPI } from \"./hooks/useCrowAPI\";\nimport { useWidgetStyles } from \"./hooks/useWidgetStyles\";\n\n// Context\nimport { WidgetStyleProvider } from \"./context/StyleContext\";\n\n// Components\nimport { ShadowContainer } from \"./components/ShadowContainer\";\nimport { ChatBubble, WidgetShell, WidgetHeader } from \"./components/widget\";\nimport {\n MessagesContainer,\n MessageList,\n ConversationList,\n WorkflowPanel,\n PoweredByBadge,\n PromptInputBox,\n} from \"./components/shared\";\n\n// Styles\nimport { WIDGET_CSS, stylesToCssVars } from \"./styles\";\n\n// Config\nimport { DEFAULT_MODEL } from \"./constants\";\nimport type { WidgetStyleConfig } from \"./styles/types\";\n\n/** Identity data passed to the identify function */\nexport interface IdentifyData {\n /** JWT token from your backend */\n token: string;\n /** User's display name */\n name?: string;\n /** Additional metadata */\n [key: string]: unknown;\n}\n\n/** Function to identify a user */\nexport type IdentifyFunction = (data: IdentifyData) => void;\n\n/** Client-side tool handler */\nexport type ToolHandler = (args: Record<string, unknown>) => Promise<unknown> | unknown;\n\n/** Map of tool names to handlers */\nexport type ToolsMap = Record<string, ToolHandler>;\n\nexport interface CrowWidgetProps {\n /** Product ID for this widget */\n productId: string;\n /** API URL (defaults to relative path) */\n apiUrl?: string;\n /** Widget variant: floating (with bubble) or embedded (for preview) */\n variant?: \"floating\" | \"embedded\";\n /** Custom styles to override DB and default styles */\n styles?: Partial<WidgetStyleConfig>;\n /** Skip fetching styles from API (use for preview mode with local state) */\n previewMode?: boolean;\n /** Callback when widget is ready */\n onReady?: () => void;\n /** \n * Callback to identify the user. Called with an identify function \n * that you should call with the user's token when available.\n */\n onIdentify?: (identify: IdentifyFunction) => void;\n /** Client-side tools the agent can call */\n tools?: ToolsMap;\n}\n\nexport function CrowWidget({\n productId,\n apiUrl = \"\",\n variant = \"floating\",\n styles: propStyles,\n previewMode = false,\n onReady,\n onIdentify,\n tools,\n}: CrowWidgetProps) {\n // Fetch and merge styles\n const { styles, isLoading: isLoadingStyles, agentName } = useWidgetStyles({\n productId,\n apiUrl,\n propStyles,\n skip: previewMode,\n });\n\n // Convert styles to CSS custom properties\n const cssVars = stylesToCssVars(styles) as CSSProperties;\n\n // Refs\n const messagesContainerRef = useRef<HTMLDivElement>(null);\n const executeClientToolRef = useRef<((toolName: string, args: Record<string, unknown>) => Promise<unknown>) | null>(null);\n const submitToolResultRef = useRef<((toolCallId: string, toolName: string, result: Record<string, unknown>) => Promise<void>) | null>(null);\n\n // UI State\n const [isCollapsed, setIsCollapsed] = useState(variant === \"floating\");\n const [showConversationList, setShowConversationList] = useState(false);\n const [isVerifiedUser, setIsVerifiedUser] = useState(false);\n\n // Workflow hook\n const {\n activeWorkflow,\n startWorkflow,\n updateTodo,\n markComplete,\n endWorkflow,\n } = useWorkflow({\n productId,\n apiUrl,\n conversationId: null,\n selectedModel: DEFAULT_MODEL,\n });\n\n // Conversations hook\n const conversations = useConversations({ productId, apiUrl });\n\n // Track if we need to restore history on mount\n const [shouldRestoreHistory, setShouldRestoreHistory] = useState(false);\n const hasRestoredHistoryRef = useRef(false);\n\n // Chat hook\n const chat = useChat({\n productId,\n apiUrl,\n onVerificationStatus: (isVerified) => {\n setIsVerifiedUser(isVerified);\n },\n onConversationId: () => {},\n onWorkflowEvent: (event) => {\n switch (event.type) {\n case \"started\":\n if (event.name && event.todos) {\n startWorkflow(event.name, event.todos);\n }\n break;\n case \"todo_updated\":\n if (event.todoId && event.todoStatus) {\n updateTodo(event.todoId, event.todoStatus);\n }\n break;\n case \"ended\":\n endWorkflow(2000);\n break;\n case \"complete_prompt\":\n markComplete();\n break;\n }\n },\n onToolCall: async (event) => {\n if (event.type === \"client_call\" && event.toolName && event.toolCallId) {\n try {\n const result = await executeClientToolRef.current?.(\n event.toolName,\n (event.arguments || {}) as Record<string, unknown>\n );\n // Send result back to agent so it can continue\n if (result && submitToolResultRef.current) {\n await submitToolResultRef.current(\n event.toolCallId,\n event.toolName,\n result as Record<string, unknown>\n );\n }\n } catch (e) {\n console.error(\"[Crow Widget] Tool error:\", e);\n if (submitToolResultRef.current) {\n await submitToolResultRef.current(\n event.toolCallId,\n event.toolName,\n { success: false, error: String(e) }\n );\n }\n }\n }\n },\n onRestoredConversation: () => {\n setShouldRestoreHistory(true);\n },\n });\n\n // Load anonymous conversation history when restored from localStorage\n useEffect(() => {\n if (shouldRestoreHistory && chat.conversationId && !hasRestoredHistoryRef.current) {\n hasRestoredHistoryRef.current = true;\n console.log(\"[Crow Widget] Restoring conversation history:\", chat.conversationId);\n conversations.loadAnonymousConversationHistory(chat.conversationId).then((historyMessages) => {\n if (historyMessages.length > 0) {\n chat.loadMessages(historyMessages);\n }\n });\n }\n }, [shouldRestoreHistory, chat.conversationId, conversations, chat]);\n\n // Workflow actions with current chat values\n const workflowActions = useWorkflow({\n productId,\n apiUrl,\n conversationId: chat.conversationId,\n selectedModel: chat.selectedModel,\n onMessage: (content) => {\n chat.loadMessages([\n ...chat.messages,\n {\n id: `bot-${Date.now()}`,\n content,\n isBot: true,\n timestamp: new Date(),\n },\n ]);\n },\n });\n\n // Crow API hook\n const { executeClientTool } = useCrowAPI({\n onIdentified: async () => {\n setIsVerifiedUser(true);\n await conversations.loadConversations();\n },\n onReset: () => {\n setIsVerifiedUser(false);\n chat.resetMessages();\n },\n });\n\n executeClientToolRef.current = executeClientTool;\n submitToolResultRef.current = chat.submitToolResult;\n\n // Notify when ready\n useEffect(() => {\n if (!isLoadingStyles) {\n onReady?.();\n }\n }, [isLoadingStyles, onReady]);\n\n // Call onIdentify with an identify function when widget is ready\n useEffect(() => {\n if (!isLoadingStyles && onIdentify) {\n const identify: IdentifyFunction = (data) => {\n if (!data.token) {\n console.error(\"[Crow] identify() requires a token\");\n return;\n }\n window.crow?.(\"identify\", data);\n };\n onIdentify(identify);\n }\n }, [isLoadingStyles, onIdentify]);\n\n // Register tools when provided\n useEffect(() => {\n if (tools && Object.keys(tools).length > 0) {\n window.crow?.(\"registerTools\", tools);\n }\n }, [tools]);\n\n // Handlers\n const handleSend = (message: string) => {\n if (!message.trim()) return;\n setIsCollapsed(false);\n chat.sendMessage(message);\n };\n\n const handleNewChat = () => {\n chat.resetMessages();\n setShowConversationList(false);\n };\n\n const handleToggleHistory = () => {\n setShowConversationList(!showConversationList);\n if (!showConversationList) {\n conversations.loadConversations();\n }\n };\n\n const handleSelectConversation = async (convId: string) => {\n const historyMessages = await conversations.loadConversationHistory(convId);\n if (historyMessages.length > 0) {\n chat.loadMessages(historyMessages);\n chat.setConversationId(convId);\n } else {\n chat.resetMessages();\n }\n setShowConversationList(false);\n };\n\n const handleCloseConversationList = () => {\n setShowConversationList(false);\n };\n\n const handleExitWorkflow = async () => {\n await workflowActions.exitWorkflow();\n };\n\n const handleBubbleClick = () => {\n setIsCollapsed(!isCollapsed);\n };\n\n // Widget content (shared between floating and embedded modes)\n const renderWidgetContent = () => (\n <>\n <WidgetHeader\n isVerifiedUser={isVerifiedUser}\n showConversationList={showConversationList}\n onNewChat={handleNewChat}\n onToggleHistory={handleToggleHistory}\n />\n\n <AnimatePresence>\n {showConversationList && isVerifiedUser && (\n <ConversationList\n conversations={conversations.conversations}\n currentConversationId={chat.conversationId}\n onSelect={handleSelectConversation}\n onClose={handleCloseConversationList}\n />\n )}\n </AnimatePresence>\n\n <AnimatePresence>\n {activeWorkflow && (\n <WorkflowPanel\n workflow={activeWorkflow}\n onExit={handleExitWorkflow}\n />\n )}\n </AnimatePresence>\n\n <AnimatePresence>\n {(chat.messages.length > 0 || conversations.isLoadingHistory) && (\n <MessagesContainer ref={messagesContainerRef}>\n <MessageList\n messages={chat.messages}\n activeToolCalls={chat.activeToolCalls}\n isLoadingHistory={conversations.isLoadingHistory}\n isGenerating={chat.isLoading}\n />\n </MessagesContainer>\n )}\n </AnimatePresence>\n\n <div className=\"crow-mt-auto crow-w-full\">\n <PoweredByBadge apiUrl={apiUrl} />\n <PromptInputBox\n onSend={handleSend}\n onStop={chat.stopGeneration}\n placeholder=\"Type your message...\"\n isLoading={chat.isLoading}\n className=\"crow-backdrop-blur-md\"\n />\n </div>\n </>\n );\n\n // Render with Shadow DOM encapsulation\n return (\n <ShadowContainer styles={WIDGET_CSS}>\n {/* Root element with CSS variables */}\n <div className=\"crow-widget-root\" style={cssVars}>\n <WidgetStyleProvider\n styles={styles}\n agentName={agentName}\n isLoading={isLoadingStyles}\n variant={variant}\n >\n {/* Floating mode: show bubble and collapsible widget */}\n {variant === \"floating\" && (\n <>\n <ChatBubble isExpanded={!isCollapsed} onClick={handleBubbleClick} />\n\n {!isCollapsed && (\n <WidgetShell>\n {renderWidgetContent()}\n </WidgetShell>\n )}\n </>\n )}\n\n {/* Embedded mode: always expanded, no bubble */}\n {variant === \"embedded\" && (\n <WidgetShell>\n {renderWidgetContent()}\n </WidgetShell>\n )}\n </WidgetStyleProvider>\n </div>\n </ShadowContainer>\n );\n}\n\nexport default CrowWidget;\n","/**\n * CrowCopilot - Sidebar chat panel\n *\n * Unlike CrowWidget, this component is designed to be mounted into\n * a user-provided container and works best as a sidebar in your app.\n * \n * Supports:\n * - Custom styles from DB or props\n * - Positioned left or right\n * - Identity verification via window.crow() API\n */\n\nimport { useState, useRef, useEffect } from \"react\";\nimport { AnimatePresence } from \"framer-motion\";\n\n// Hooks\nimport { useChat } from \"./hooks/useChat\";\nimport { useConversations } from \"./hooks/useConversations\";\nimport { useCrowAPI } from \"./hooks/useCrowAPI\";\nimport { useCopilotStyles } from \"./hooks/useWidgetStyles\";\n\n// Context\nimport { CopilotStyleProvider } from \"./context/StyleContext\";\n\n// Components\nimport {\n MessagesContainer,\n MessageList,\n ConversationList,\n PoweredByBadge,\n PromptInputBox,\n} from \"./components/shared\";\n\n// Config\nimport type { CopilotStyleConfig } from \"./styles/types\";\n\nexport interface CrowCopilotProps {\n /** Product ID for this copilot */\n productId: string;\n /** API URL (defaults to relative path) */\n apiUrl?: string;\n /** Title shown in header */\n title?: string;\n /** Position of the sidebar */\n position?: \"left\" | \"right\";\n /** Width of the sidebar */\n width?: number | string;\n /** Show close button */\n showClose?: boolean;\n /** Callback when close is clicked */\n onClose?: () => void;\n /** Custom styles to override DB and default styles */\n styles?: Partial<CopilotStyleConfig>;\n /** Skip fetching styles from API (use for preview mode) */\n previewMode?: boolean;\n /** Custom class name */\n className?: string;\n /** Callback when copilot is ready */\n onReady?: () => void;\n}\n\nexport function CrowCopilot({\n productId,\n apiUrl = \"\",\n title = \"Copilot\",\n position = \"right\",\n width = 400,\n showClose = false,\n onClose,\n styles: propStyles,\n previewMode = false,\n className,\n onReady,\n}: CrowCopilotProps) {\n // Fetch and merge styles\n const { styles, isLoading: isLoadingStyles, agentName } = useCopilotStyles({\n productId,\n apiUrl,\n propStyles,\n skip: previewMode,\n });\n\n // Refs\n const messagesContainerRef = useRef<HTMLDivElement>(null);\n const executeClientToolRef = useRef<((toolName: string, args: Record<string, unknown>) => Promise<unknown>) | null>(null);\n\n // UI State\n const [showConversationList, setShowConversationList] = useState(false);\n const [isVerifiedUser, setIsVerifiedUser] = useState(false);\n\n // Conversations hook\n const conversations = useConversations({ productId, apiUrl });\n\n // Track if we need to restore history on mount\n const [shouldRestoreHistory, setShouldRestoreHistory] = useState(false);\n const hasRestoredHistoryRef = useRef(false);\n\n // Chat hook\n const chat = useChat({\n productId,\n apiUrl,\n onVerificationStatus: (isVerified) => {\n setIsVerifiedUser(isVerified);\n },\n onConversationId: () => {},\n onToolCall: (event) => {\n if (event.type === \"client_call\" && event.toolName) {\n console.log(\"[Crow Copilot] Executing client tool:\", event.toolName, event.arguments);\n const result = executeClientToolRef.current?.(event.toolName, (event.arguments || {}) as Record<string, unknown>);\n result?.then((r) => console.log(\"[Crow Copilot] Tool result:\", r)).catch((e) => console.error(\"[Crow Copilot] Tool error:\", e));\n }\n },\n onRestoredConversation: () => {\n setShouldRestoreHistory(true);\n },\n });\n\n // Load anonymous conversation history when restored from localStorage\n useEffect(() => {\n if (shouldRestoreHistory && chat.conversationId && !hasRestoredHistoryRef.current) {\n hasRestoredHistoryRef.current = true;\n conversations.loadAnonymousConversationHistory(chat.conversationId).then((historyMessages) => {\n if (historyMessages.length > 0) {\n chat.loadMessages(historyMessages);\n }\n });\n }\n }, [shouldRestoreHistory, chat.conversationId, conversations, chat]);\n\n // Crow API hook\n const { executeClientTool } = useCrowAPI({\n onIdentified: async () => {\n setIsVerifiedUser(true);\n await conversations.loadConversations();\n },\n onReset: () => {\n setIsVerifiedUser(false);\n chat.resetMessages();\n },\n });\n\n executeClientToolRef.current = executeClientTool;\n\n // Notify when ready\n useEffect(() => {\n if (!isLoadingStyles) {\n onReady?.();\n }\n }, [isLoadingStyles, onReady]);\n\n // Handlers\n const handleSend = (message: string) => {\n if (!message.trim()) return;\n chat.sendMessage(message);\n };\n\n const handleNewChat = () => {\n chat.resetMessages();\n setShowConversationList(false);\n };\n\n const handleToggleHistory = () => {\n setShowConversationList(!showConversationList);\n if (!showConversationList) {\n conversations.loadConversations();\n }\n };\n\n const handleSelectConversation = async (convId: string) => {\n const historyMessages = await conversations.loadConversationHistory(convId);\n if (historyMessages.length > 0) {\n chat.loadMessages(historyMessages);\n chat.setConversationId(convId);\n } else {\n chat.resetMessages();\n }\n setShowConversationList(false);\n };\n\n const handleCloseConversationList = () => {\n setShowConversationList(false);\n };\n\n const widthStyle = typeof width === \"number\" ? `${width}px` : width;\n\n return (\n <CopilotStyleProvider\n styles={styles}\n agentName={agentName || title}\n isLoading={isLoadingStyles}\n >\n <div\n className={`crow-flex crow-flex-col crow-h-full ${\n position === \"left\" ? \"crow-border-r\" : \"crow-border-l\"\n } ${className || \"\"}`}\n style={{\n width: widthStyle,\n fontFamily: styles.typography.fontFamily,\n fontSize: styles.typography.fontSize,\n fontWeight: styles.typography.fontWeight,\n lineHeight: styles.typography.lineHeight,\n letterSpacing: styles.typography.letterSpacing,\n background: styles.colors.background,\n borderColor: styles.colors.border,\n }}\n >\n {/* Header */}\n <div\n className=\"crow-flex crow-items-center crow-justify-between crow-px-4 crow-py-3 crow-border-b\"\n style={{\n height: styles.dimensions.headerHeight,\n borderColor: styles.colors.border,\n }}\n >\n <span\n className=\"crow-font-semibold\"\n style={{\n color: styles.colors.text,\n fontSize: styles.typography.headerFontSize,\n }}\n >\n {agentName || title}\n </span>\n\n <div className=\"crow-flex crow-items-center crow-gap-1\">\n {/* New Chat button */}\n <button\n onClick={handleNewChat}\n className=\"crow-p-1.5 hover:crow-bg-gray-100 crow-rounded crow-transition-colors\"\n aria-label=\"New Chat\"\n title=\"New Chat\"\n >\n <PlusIcon className=\"crow-w-4 crow-h-4 crow-text-gray-600\" />\n </button>\n\n {/* History button - only for verified users */}\n {isVerifiedUser && (\n <button\n onClick={handleToggleHistory}\n className={`crow-p-1.5 hover:crow-bg-gray-100 crow-rounded crow-transition-colors ${\n showConversationList ? \"crow-bg-gray-100\" : \"\"\n }`}\n aria-label=\"Conversation History\"\n title=\"Conversation History\"\n >\n <HistoryIcon className=\"crow-w-4 crow-h-4 crow-text-gray-600\" />\n </button>\n )}\n\n {/* Close button */}\n {showClose && onClose && (\n <button\n onClick={onClose}\n className=\"crow-p-1.5 hover:crow-bg-gray-100 crow-rounded crow-transition-colors\"\n aria-label=\"Close\"\n >\n <CloseIcon className=\"crow-w-4 crow-h-4 crow-text-gray-600\" />\n </button>\n )}\n </div>\n </div>\n\n {/* Conversation List */}\n <AnimatePresence>\n {showConversationList && isVerifiedUser && (\n <ConversationList\n conversations={conversations.conversations}\n currentConversationId={chat.conversationId}\n onSelect={handleSelectConversation}\n onClose={handleCloseConversationList}\n />\n )}\n </AnimatePresence>\n\n {/* Messages */}\n <MessagesContainer ref={messagesContainerRef}>\n <MessageList\n messages={chat.messages}\n activeToolCalls={chat.activeToolCalls}\n isLoadingHistory={conversations.isLoadingHistory}\n isGenerating={chat.isLoading}\n />\n </MessagesContainer>\n\n {/* Input */}\n <div className=\"crow-p-3 crow-border-t\" style={{ borderColor: styles.colors.border }}>\n {styles.branding.showPoweredBy && (\n <PoweredByBadge apiUrl={apiUrl} />\n )}\n <PromptInputBox\n onSend={handleSend}\n onStop={chat.stopGeneration}\n placeholder=\"Ask anything...\"\n isLoading={chat.isLoading}\n />\n </div>\n </div>\n </CopilotStyleProvider>\n );\n}\n\n// Simple icon components (to avoid lucide-react import issues in some setups)\nfunction PlusIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M5 12h14\" />\n <path d=\"M12 5v14\" />\n </svg>\n );\n}\n\nfunction HistoryIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" />\n <path d=\"M3 3v5h5\" />\n <path d=\"M12 7v5l4 2\" />\n </svg>\n );\n}\n\nfunction CloseIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\nexport default CrowCopilot;\n","/**\n * CrowProvider - React context provider for sharing CrowClient\n */\n\nimport { createContext, useContext, useMemo, useEffect, useRef } from 'react';\nimport { CrowClient, type CrowClientConfig } from '@usecrow/client';\n\ninterface CrowContextValue {\n client: CrowClient;\n}\n\nconst CrowContext = createContext<CrowContextValue | null>(null);\n\nexport interface CrowProviderProps extends CrowClientConfig {\n children: React.ReactNode;\n}\n\n/**\n * Provider component that creates and shares a CrowClient instance\n */\nexport function CrowProvider({\n children,\n productId,\n apiUrl,\n model,\n}: CrowProviderProps) {\n // Create client once and keep it stable\n const clientRef = useRef<CrowClient | null>(null);\n\n if (!clientRef.current) {\n clientRef.current = new CrowClient({ productId, apiUrl, model });\n }\n\n const client = clientRef.current;\n\n // Clean up on unmount\n useEffect(() => {\n return () => {\n client.destroy();\n };\n }, [client]);\n\n const value = useMemo(() => ({ client }), [client]);\n\n return <CrowContext.Provider value={value}>{children}</CrowContext.Provider>;\n}\n\n/**\n * Hook to access the CrowClient from context\n */\nexport function useCrowClient(): CrowClient {\n const context = useContext(CrowContext);\n if (!context) {\n throw new Error('useCrowClient must be used within a CrowProvider');\n }\n return context.client;\n}\n\n/**\n * Hook to optionally access the CrowClient (returns null if not in provider)\n */\nexport function useCrowClientOptional(): CrowClient | null {\n const context = useContext(CrowContext);\n return context?.client ?? null;\n}\n\n"]}
|