@usecrow/ui 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +2515 -506
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +685 -82
- package/dist/index.d.ts +685 -82
- package/dist/index.js +2449 -494
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +16 -11
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/CrowProvider.tsx","../src/hooks/useChat.ts","../src/components/ChatBubble.tsx","../src/components/WidgetHeader.tsx","../src/components/MessageBubble.tsx","../src/components/MessageList.tsx","../src/components/PromptInput.tsx","../src/CrowWidget.tsx","../src/CrowCopilot.tsx","../src/hooks/useIdentity.ts","../src/hooks/useConversations.ts"],"names":["createContext","useRef","CrowClient","client","useEffect","useMemo","jsx","useContext","useState","useCallback","clsx","jsxs","Fragment"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\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","/**\n * useChat - React hook for chat functionality\n */\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport { CrowClient, type Message, type StreamEvent } from '@usecrow/client';\n\ninterface UseChatOptions {\n client: CrowClient;\n onStreamEvent?: (event: StreamEvent) => void;\n}\n\ninterface UseChatReturn {\n messages: Message[];\n isLoading: boolean;\n sendMessage: (content: string) => Promise<void>;\n stop: () => void;\n clearMessages: () => void;\n}\n\n/**\n * React hook that wraps CrowClient chat functionality\n */\nexport function useChat({ client, onStreamEvent }: UseChatOptions): UseChatReturn {\n const [messages, setMessages] = useState<Message[]>(client.messages);\n const [isLoading, setIsLoading] = useState(client.isLoading);\n const onStreamEventRef = useRef(onStreamEvent);\n\n // Keep ref updated\n useEffect(() => {\n onStreamEventRef.current = onStreamEvent;\n });\n\n // Subscribe to client state changes\n useEffect(() => {\n const unsubMessages = client.onMessages(setMessages);\n const unsubLoading = client.onLoading(setIsLoading);\n\n // Sync initial state\n setMessages(client.messages);\n setIsLoading(client.isLoading);\n\n return () => {\n unsubMessages();\n unsubLoading();\n };\n }, [client]);\n\n const sendMessage = useCallback(\n async (content: string) => {\n for await (const event of client.sendMessage(content)) {\n onStreamEventRef.current?.(event);\n }\n },\n [client]\n );\n\n const stop = useCallback(() => {\n client.stop();\n }, [client]);\n\n const clearMessages = useCallback(() => {\n client.clearMessages();\n }, [client]);\n\n return {\n messages,\n isLoading,\n sendMessage,\n stop,\n clearMessages,\n };\n}\n\n","/**\n * ChatBubble - Floating action button to open/close widget\n */\n\nimport { clsx } from 'clsx';\n\ninterface ChatBubbleProps {\n isOpen: boolean;\n onClick: () => void;\n className?: string;\n}\n\nexport function ChatBubble({ isOpen, onClick, className }: ChatBubbleProps) {\n return (\n <button\n onClick={onClick}\n className={clsx(\n 'crow-fixed crow-z-[999999] crow-rounded-full',\n 'crow-w-14 crow-h-14 crow-flex crow-items-center crow-justify-center',\n 'crow-bg-crow-primary hover:crow-bg-crow-primary-dark',\n 'crow-shadow-lg hover:crow-shadow-xl crow-transition-all crow-duration-300',\n 'hover:crow-scale-110',\n className\n )}\n style={{\n right: '20px',\n bottom: '20px',\n }}\n aria-label={isOpen ? 'Close chat' : 'Open chat'}\n >\n {isOpen ? (\n <svg\n className=\"crow-w-6 crow-h-6 crow-text-white\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n ) : (\n <svg\n className=\"crow-w-6 crow-h-6 crow-text-white\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z\"\n />\n </svg>\n )}\n </button>\n );\n}\n\n","/**\n * WidgetHeader - Header bar for widget/copilot\n */\n\nimport { clsx } from 'clsx';\n\ninterface WidgetHeaderProps {\n title?: string;\n onNewChat?: () => void;\n onClose?: () => void;\n showNewChat?: boolean;\n showClose?: boolean;\n className?: string;\n}\n\nexport function WidgetHeader({\n title = 'Chat',\n onNewChat,\n onClose,\n showNewChat = true,\n showClose = false,\n className,\n}: WidgetHeaderProps) {\n return (\n <div\n className={clsx(\n 'crow-flex crow-items-center crow-justify-between crow-px-4 crow-py-3',\n 'crow-border-b crow-border-gray-200 crow-bg-white',\n className\n )}\n >\n <h2 className=\"crow-font-semibold crow-text-gray-900\">{title}</h2>\n\n <div className=\"crow-flex crow-items-center crow-gap-2\">\n {showNewChat && onNewChat && (\n <button\n onClick={onNewChat}\n className=\"crow-p-1.5 crow-rounded-lg crow-text-gray-500 hover:crow-bg-gray-100 hover:crow-text-gray-700 crow-transition-colors\"\n aria-label=\"New chat\"\n >\n <svg\n className=\"crow-w-5 crow-h-5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 4v16m8-8H4\"\n />\n </svg>\n </button>\n )}\n\n {showClose && onClose && (\n <button\n onClick={onClose}\n className=\"crow-p-1.5 crow-rounded-lg crow-text-gray-500 hover:crow-bg-gray-100 hover:crow-text-gray-700 crow-transition-colors\"\n aria-label=\"Close\"\n >\n <svg\n className=\"crow-w-5 crow-h-5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n )}\n </div>\n </div>\n );\n}\n\n","/**\n * MessageBubble - Single message display component\n */\n\nimport type { Message } from '@usecrow/client';\nimport { clsx } from 'clsx';\n\ninterface MessageBubbleProps {\n message: Message;\n isStreaming?: boolean;\n}\n\nfunction formatTime(date: Date): string {\n return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\n}\n\nexport function MessageBubble({ message, isStreaming = false }: MessageBubbleProps) {\n const isUser = message.role === 'user';\n const isWaiting = !message.content && !isUser;\n\n return (\n <div\n className={clsx(\n 'crow-flex crow-flex-col',\n isUser ? 'crow-items-end' : 'crow-items-start'\n )}\n >\n {/* Thinking indicator */}\n {message.thinking && (\n <div className=\"crow-mb-2 crow-text-xs crow-text-gray-500 crow-bg-gray-100 crow-rounded-lg crow-px-3 crow-py-2 crow-max-w-[80%]\">\n <details open={!message.thinkingComplete}>\n <summary className=\"crow-cursor-pointer crow-font-medium\">\n {message.thinkingComplete ? 'Reasoning' : 'Thinking...'}\n </summary>\n <div className=\"crow-mt-1 crow-text-gray-600 crow-whitespace-pre-wrap\">\n {message.thinking}\n </div>\n </details>\n </div>\n )}\n\n {/* Waiting indicator */}\n {isWaiting && (\n <div className=\"crow-flex crow-items-center crow-gap-1 crow-text-gray-500 crow-text-sm crow-px-3 crow-py-2\">\n <span className=\"crow-animate-pulse\">●</span>\n <span className=\"crow-animate-pulse crow-animation-delay-100\">●</span>\n <span className=\"crow-animate-pulse crow-animation-delay-200\">●</span>\n </div>\n )}\n\n {/* Message content */}\n {message.content && (\n <div\n className={clsx(\n 'crow-max-w-[80%] crow-rounded-2xl crow-px-4 crow-py-2 crow-transition-all',\n isUser\n ? 'crow-bg-crow-primary crow-text-white'\n : 'crow-bg-gray-100 crow-text-gray-900'\n )}\n >\n <div className=\"crow-text-sm crow-whitespace-pre-wrap\">\n {message.content}\n {isStreaming && (\n <span className=\"crow-inline-block crow-w-1 crow-h-4 crow-ml-0.5 crow-bg-current crow-animate-pulse\" />\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\n {/* Citations */}\n {message.citations && message.citations.length > 0 && (\n <div className=\"crow-mt-1 crow-flex crow-flex-wrap crow-gap-1\">\n {message.citations.map((citation, idx) => (\n <span\n key={idx}\n className=\"crow-text-xs crow-bg-blue-100 crow-text-blue-700 crow-px-2 crow-py-0.5 crow-rounded\"\n >\n {citation.filename}\n </span>\n ))}\n </div>\n )}\n </div>\n );\n}\n\n","/**\n * MessageList - Scrollable list of messages\n */\n\nimport { useRef, useEffect } from 'react';\nimport type { Message } from '@usecrow/client';\nimport { MessageBubble } from './MessageBubble';\n\ninterface MessageListProps {\n messages: Message[];\n isLoading?: boolean;\n className?: string;\n}\n\nexport function MessageList({ messages, isLoading = false, className }: MessageListProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Auto-scroll to bottom when new messages arrive\n useEffect(() => {\n if (containerRef.current) {\n containerRef.current.scrollTop = containerRef.current.scrollHeight;\n }\n }, [messages]);\n\n return (\n <div\n ref={containerRef}\n className={`crow-flex-1 crow-overflow-y-auto crow-px-4 crow-py-4 crow-space-y-3 ${className || ''}`}\n >\n {messages.map((message, index) => {\n const isLastBotMessage =\n message.role === 'assistant' && index === messages.length - 1;\n return (\n <MessageBubble\n key={message.id}\n message={message}\n isStreaming={isLastBotMessage && isLoading}\n />\n );\n })}\n </div>\n );\n}\n\n","/**\n * PromptInput - Chat input component with send/stop button\n */\n\nimport { useState, useRef, useEffect, useCallback } from 'react';\nimport { clsx } from 'clsx';\n\ninterface PromptInputProps {\n onSend: (message: string) => void;\n onStop?: () => void;\n isLoading?: boolean;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n}\n\nexport function PromptInput({\n onSend,\n onStop,\n isLoading = false,\n placeholder = 'Type your message...',\n disabled = false,\n className,\n}: PromptInputProps) {\n const [value, setValue] = useState('');\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n // Auto-resize textarea\n useEffect(() => {\n const textarea = textareaRef.current;\n if (textarea) {\n textarea.style.height = 'auto';\n textarea.style.height = `${Math.min(textarea.scrollHeight, 200)}px`;\n }\n }, [value]);\n\n const handleSubmit = useCallback(() => {\n if (value.trim() && !isLoading) {\n onSend(value.trim());\n setValue('');\n }\n }, [value, isLoading, onSend]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSubmit();\n }\n },\n [handleSubmit]\n );\n\n const hasContent = value.trim().length > 0;\n\n return (\n <div\n className={clsx(\n 'crow-flex crow-items-end crow-gap-2 crow-p-3 crow-border-t crow-border-gray-200 crow-bg-white',\n className\n )}\n >\n <textarea\n ref={textareaRef}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n disabled={disabled || isLoading}\n rows={1}\n className={clsx(\n 'crow-flex-1 crow-resize-none crow-border crow-border-gray-300 crow-rounded-xl crow-px-4 crow-py-2',\n 'crow-text-sm crow-text-gray-900 crow-placeholder-gray-500',\n 'focus:crow-outline-none focus:crow-ring-2 focus:crow-ring-crow-primary focus:crow-border-transparent',\n 'disabled:crow-bg-gray-50 disabled:crow-cursor-not-allowed'\n )}\n />\n\n <button\n onClick={isLoading ? onStop : handleSubmit}\n disabled={!isLoading && !hasContent}\n className={clsx(\n 'crow-flex-shrink-0 crow-w-10 crow-h-10 crow-rounded-full crow-flex crow-items-center crow-justify-center',\n 'crow-transition-all crow-duration-200',\n isLoading\n ? 'crow-bg-red-500 hover:crow-bg-red-600 crow-text-white'\n : hasContent\n ? 'crow-bg-crow-primary hover:crow-bg-crow-primary-dark crow-text-white'\n : 'crow-bg-gray-200 crow-text-gray-400 crow-cursor-not-allowed'\n )}\n aria-label={isLoading ? 'Stop generation' : 'Send message'}\n >\n {isLoading ? (\n <svg className=\"crow-w-4 crow-h-4\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\n <rect width=\"10\" height=\"10\" x=\"3\" y=\"3\" rx=\"1\" />\n </svg>\n ) : (\n <svg className=\"crow-w-4 crow-h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 12h14M12 5l7 7-7 7\" />\n </svg>\n )}\n </button>\n </div>\n );\n}\n\n","/**\n * CrowWidget - Floating chat widget (bottom-right bubble)\n *\n * This component can work standalone (creates its own client) or\n * be used within a CrowProvider (shares client with other components).\n */\n\nimport { useState, useRef, useEffect } from 'react';\nimport { CrowClient, type CrowClientConfig, type IdentifyOptions, type ToolHandlers } from '@usecrow/client';\nimport { useCrowClientOptional } from './CrowProvider';\nimport { useChat } from './hooks/useChat';\nimport { ChatBubble } from './components/ChatBubble';\nimport { WidgetHeader } from './components/WidgetHeader';\nimport { MessageList } from './components/MessageList';\nimport { PromptInput } from './components/PromptInput';\nimport { clsx } from 'clsx';\n\nexport interface CrowWidgetProps extends CrowClientConfig {\n /** Agent name shown in header */\n agentName?: string;\n /** Initial collapsed state */\n defaultCollapsed?: boolean;\n /** Callback when user needs to be identified */\n onIdentify?: (identify: (options: IdentifyOptions) => void) => void;\n /** Client-side tool handlers */\n tools?: ToolHandlers;\n /** Custom class name for the widget container */\n className?: string;\n /** Z-index for the widget (default: 999999) */\n zIndex?: number;\n}\n\nexport function CrowWidget({\n productId,\n apiUrl,\n model,\n agentName = 'Assistant',\n defaultCollapsed = true,\n onIdentify,\n tools,\n className,\n zIndex = 999999,\n}: CrowWidgetProps) {\n // Try to get client from context, or create standalone\n const contextClient = useCrowClientOptional();\n const standaloneClientRef = useRef<CrowClient | null>(null);\n\n // Create standalone client if not in provider\n if (!contextClient && !standaloneClientRef.current) {\n standaloneClientRef.current = new CrowClient({ productId, apiUrl, model });\n }\n\n const client = contextClient || standaloneClientRef.current!;\n\n // Clean up standalone client on unmount\n useEffect(() => {\n return () => {\n if (standaloneClientRef.current) {\n standaloneClientRef.current.destroy();\n }\n };\n }, []);\n\n // Register tools\n useEffect(() => {\n if (tools) {\n client.registerTools(tools);\n }\n }, [client, tools]);\n\n // Provide identify callback\n useEffect(() => {\n if (onIdentify) {\n onIdentify((options) => client.identify(options));\n }\n }, [client, onIdentify]);\n\n // UI state\n const [isCollapsed, setIsCollapsed] = useState(defaultCollapsed);\n\n // Chat hook\n const { messages, isLoading, sendMessage, stop, clearMessages } = useChat({\n client,\n });\n\n return (\n <>\n {/* Floating bubble button */}\n <ChatBubble isOpen={!isCollapsed} onClick={() => setIsCollapsed(!isCollapsed)} />\n\n {/* Widget panel */}\n {!isCollapsed && (\n <div\n className={clsx(\n 'crow-fixed crow-flex crow-flex-col',\n 'crow-bg-white crow-rounded-2xl crow-shadow-2xl',\n 'crow-border crow-border-gray-200',\n 'crow-overflow-hidden crow-animate-fade-in',\n className\n )}\n style={{\n zIndex,\n right: '20px',\n bottom: '90px',\n width: '380px',\n height: '550px',\n maxHeight: 'calc(100vh - 120px)',\n }}\n >\n {/* Header */}\n <WidgetHeader\n title={agentName}\n onNewChat={clearMessages}\n showNewChat={true}\n />\n\n {/* Messages */}\n <MessageList\n messages={messages}\n isLoading={isLoading}\n className=\"crow-flex-1\"\n />\n\n {/* Input */}\n <PromptInput\n onSend={sendMessage}\n onStop={stop}\n isLoading={isLoading}\n placeholder=\"Type your message...\"\n />\n </div>\n )}\n </>\n );\n}\n\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 with CrowProvider.\n */\n\nimport { useRef, useEffect } from 'react';\nimport { CrowClient, type CrowClientConfig, type IdentifyOptions, type ToolHandlers } from '@usecrow/client';\nimport { useCrowClientOptional } from './CrowProvider';\nimport { useChat } from './hooks/useChat';\nimport { WidgetHeader } from './components/WidgetHeader';\nimport { MessageList } from './components/MessageList';\nimport { PromptInput } from './components/PromptInput';\nimport { clsx } from 'clsx';\n\nexport interface CrowCopilotProps extends Partial<CrowClientConfig> {\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 /** Callback when user needs to be identified */\n onIdentify?: (identify: (options: IdentifyOptions) => void) => void;\n /** Client-side tool handlers */\n tools?: ToolHandlers;\n /** Custom class name */\n className?: string;\n}\n\nexport function CrowCopilot({\n productId,\n apiUrl,\n model,\n title = 'Copilot',\n position = 'right',\n width = 400,\n showClose = false,\n onClose,\n onIdentify,\n tools,\n className,\n}: CrowCopilotProps) {\n // Try to get client from context, or create standalone if config provided\n const contextClient = useCrowClientOptional();\n const standaloneClientRef = useRef<CrowClient | null>(null);\n\n // Create standalone client if not in provider AND productId is provided\n if (!contextClient && !standaloneClientRef.current && productId) {\n standaloneClientRef.current = new CrowClient({ productId, apiUrl, model });\n }\n\n const client = contextClient || standaloneClientRef.current;\n\n if (!client) {\n console.error(\n '[CrowCopilot] No client available. Either wrap in CrowProvider or provide productId prop.'\n );\n return null;\n }\n\n // Clean up standalone client on unmount\n useEffect(() => {\n return () => {\n if (standaloneClientRef.current) {\n standaloneClientRef.current.destroy();\n }\n };\n }, []);\n\n // Register tools\n useEffect(() => {\n if (tools) {\n client.registerTools(tools);\n }\n }, [client, tools]);\n\n // Provide identify callback\n useEffect(() => {\n if (onIdentify) {\n onIdentify((options) => client.identify(options));\n }\n }, [client, onIdentify]);\n\n // Chat hook\n const { messages, isLoading, sendMessage, stop, clearMessages } = useChat({\n client,\n });\n\n const widthStyle = typeof width === 'number' ? `${width}px` : width;\n\n return (\n <div\n className={clsx(\n 'crow-flex crow-flex-col crow-h-full',\n 'crow-bg-white crow-border-gray-200',\n position === 'left' ? 'crow-border-r' : 'crow-border-l',\n className\n )}\n style={{ width: widthStyle }}\n >\n {/* Header */}\n <WidgetHeader\n title={title}\n onNewChat={clearMessages}\n onClose={onClose}\n showNewChat={true}\n showClose={showClose}\n />\n\n {/* Messages */}\n <MessageList\n messages={messages}\n isLoading={isLoading}\n className=\"crow-flex-1\"\n />\n\n {/* Input */}\n <PromptInput\n onSend={sendMessage}\n onStop={stop}\n isLoading={isLoading}\n placeholder=\"Ask anything...\"\n />\n </div>\n );\n}\n\n","/**\n * useIdentity - React hook for identity management\n */\n\nimport { useState, useCallback, useEffect } from 'react';\nimport { CrowClient, type IdentifyOptions } from '@usecrow/client';\n\ninterface UseIdentityOptions {\n client: CrowClient;\n}\n\ninterface UseIdentityReturn {\n isIdentified: boolean;\n isVerified: boolean;\n identify: (options: IdentifyOptions) => void;\n resetUser: () => void;\n}\n\n/**\n * React hook for managing user identity\n */\nexport function useIdentity({ client }: UseIdentityOptions): UseIdentityReturn {\n const [isIdentified, setIsIdentified] = useState(client.isIdentified());\n const [isVerified, setIsVerified] = useState(client.isVerified());\n\n useEffect(() => {\n // Set up callback for verification status\n client.on({\n onVerificationStatus: (verified) => {\n setIsVerified(verified);\n },\n });\n\n // Sync initial state\n setIsIdentified(client.isIdentified());\n setIsVerified(client.isVerified());\n }, [client]);\n\n const identify = useCallback(\n (options: IdentifyOptions) => {\n client.identify(options);\n setIsIdentified(true);\n },\n [client]\n );\n\n const resetUser = useCallback(() => {\n client.resetUser();\n setIsIdentified(false);\n setIsVerified(false);\n }, [client]);\n\n return {\n isIdentified,\n isVerified,\n identify,\n resetUser,\n };\n}\n\n","/**\n * useConversations - React hook for conversation management\n */\n\nimport { useState, useCallback } from 'react';\nimport { CrowClient, type Conversation, type Message } from '@usecrow/client';\n\ninterface UseConversationsOptions {\n client: CrowClient;\n}\n\ninterface UseConversationsReturn {\n conversations: Conversation[];\n isLoadingConversations: boolean;\n isLoadingHistory: boolean;\n currentConversationId: string | null;\n loadConversations: () => Promise<void>;\n loadHistory: (conversationId: string) => Promise<Message[]>;\n switchConversation: (conversationId: string) => Promise<void>;\n startNewConversation: () => void;\n}\n\n/**\n * React hook for managing conversations\n */\nexport function useConversations({\n client,\n}: UseConversationsOptions): UseConversationsReturn {\n const [conversations, setConversations] = useState<Conversation[]>([]);\n const [isLoadingConversations, setIsLoadingConversations] = useState(false);\n const [isLoadingHistory, setIsLoadingHistory] = useState(false);\n\n const loadConversations = useCallback(async () => {\n setIsLoadingConversations(true);\n try {\n const convs = await client.getConversations();\n setConversations(convs);\n } finally {\n setIsLoadingConversations(false);\n }\n }, [client]);\n\n const loadHistory = useCallback(\n async (conversationId: string): Promise<Message[]> => {\n setIsLoadingHistory(true);\n try {\n return await client.loadHistory(conversationId);\n } finally {\n setIsLoadingHistory(false);\n }\n },\n [client]\n );\n\n const switchConversation = useCallback(\n async (conversationId: string) => {\n setIsLoadingHistory(true);\n try {\n await client.switchConversation(conversationId);\n } finally {\n setIsLoadingHistory(false);\n }\n },\n [client]\n );\n\n const startNewConversation = useCallback(() => {\n client.clearMessages();\n }, [client]);\n\n return {\n conversations,\n isLoadingConversations,\n isLoadingHistory,\n currentConversationId: client.conversationId,\n loadConversations,\n loadHistory,\n switchConversation,\n startNewConversation,\n };\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/widget/ChatBubble.tsx","../src/components/shared/GlassCard.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/CrowWidget.tsx","../src/CrowCopilot.tsx","../src/CrowProvider.tsx"],"names":["useState","useRef","useEffect","useCallback","styles","createContext","useMemo","jsx","useContext","useWidgetStyles","useCopilotStyles","ChevronDown","MessageCircle","forwardRef","jsxs","Plus","History","ChevronUp","Fragment","ReactMarkdown","motion","Brain","useLayoutEffect","ChevronRight","Check","AnimatePresence","Loader2","X","React","TooltipPrimitive","Square","ArrowUp","CrowClient","client"],"mappings":"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","file":"index.cjs","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 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\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 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 onToolCall?.({\n type: \"client_call\",\n toolName: parsed.tool_name,\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 return {\n messages,\n isLoading,\n activeToolCalls,\n conversationId,\n selectedModel,\n setSelectedModel,\n setConversationId,\n sendMessage,\n stopGeneration,\n resetMessages,\n loadMessages,\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.map(\n (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 }\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.map(\n (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 }\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 },\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 previewHeight: 700,\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 },\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 \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\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 * 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=\"fixed z-[999999] rounded-full flex items-center justify-center shadow-2xl hover:scale-110 transition-all duration-500 border border-gray-200/30 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 * GlassCard - Glassmorphism card component\n */\n\nimport { forwardRef } from \"react\";\nimport { cn } from \"../../utils\";\n\ninterface GlassCardProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n}\n\nexport const GlassCard = forwardRef<HTMLDivElement, GlassCardProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"bg-white/30 border border-gray-200/30 flex flex-col gap-6 rounded-2xl py-6 backdrop-blur-md\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nGlassCard.displayName = \"GlassCard\";\n","/**\n * WidgetShell - Container for widget content\n */\n\nimport { forwardRef, type ReactNode } from \"react\";\nimport { GlassCard } from \"../shared/GlassCard\";\nimport { useWidgetStyleContext } from \"../../context/StyleContext\";\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 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 };\n\n if (variant === \"embedded\") {\n return (\n <GlassCard\n ref={ref}\n className={`flex flex-col shadow-2xl gap-3 w-full h-full ${className ?? \"\"}`}\n style={{\n ...baseStyle,\n maxWidth: styles.dimensions.width,\n maxHeight: styles.dimensions.previewHeight,\n }}\n >\n {children}\n </GlassCard>\n );\n }\n\n // Floating variant\n return (\n <GlassCard\n ref={ref}\n className={`fixed z-[999999] shadow-2xl gap-3 transition-all duration-500 flex flex-col ${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 </GlassCard>\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=\"flex items-center justify-between mb-3 pb-2 border-b\"\n style={{ borderColor: styles.colors.border }}\n >\n <div className=\"flex items-center gap-2\">\n <span \n className=\"text-sm 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=\"flex items-center gap-1\">\n <button\n onClick={onNewChat}\n className=\"p-1.5 hover:bg-gray-200 rounded transition-colors\"\n aria-label=\"New Chat\"\n title=\"New Chat\"\n >\n <Plus size={18} className=\"text-gray-700\" />\n </button>\n {isVerifiedUser && (\n <button\n onClick={onToggleHistory}\n className={`p-1.5 hover:bg-gray-200 rounded transition-colors ${\n showConversationList ? \"bg-gray-200\" : \"\"\n }`}\n aria-label=\"Conversation History\"\n title=\"Conversation History\"\n >\n <History size={18} className=\"text-gray-700\" />\n </button>\n )}\n {showMinimize && onToggleMinimize && (\n <button\n onClick={onToggleMinimize}\n className=\"p-1 hover:bg-gray-200 rounded transition-colors\"\n aria-label={isMinimized ? \"Expand\" : \"Minimize\"}\n >\n {isMinimized ? (\n <ChevronUp size={18} className=\"text-gray-900\" />\n ) : (\n <ChevronDown size={18} className=\"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=\"font-bold\">{children}</strong>\n ),\n ul: ({ children }) => (\n <ul className=\"list-disc pl-5 my-1\">{children}</ul>\n ),\n ol: ({ children }) => (\n <ol className=\"list-decimal pl-5 my-1\">{children}</ol>\n ),\n li: ({ children }) => <li className=\"[&>p]:inline [&>p]:m-0\">{children}</li>,\n p: ({ children }) => <p className=\"mb-1 last:mb-0\">{children}</p>,\n a: ({ href, children }) => (\n <a\n href={href}\n className=\"underline hover: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=\"bg-gray-100 px-1 py-0.5 rounded text-sm\"\n {...props}\n >\n {children}\n </code>\n ) : (\n <code className={className} {...props}>\n {children}\n </code>\n );\n },\n pre: ({ children }) => (\n <pre className=\"bg-gray-100 p-2 rounded my-1 overflow-x-auto text-sm\">\n {children}\n </pre>\n ),\n }}\n >\n {content}\n </ReactMarkdown>\n\n {isStreaming && (\n <span\n className=\"inline-block w-0.5 h-4 ml-0.5 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=\"inline-block 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=\"flex justify-center items-center py-8\"\n >\n <div className=\"flex flex-col items-center gap-3\">\n <div className=\"flex gap-1\">\n {[0, 0.15, 0.3].map((delay, i) => (\n <motion.div\n key={i}\n className=\"w-2 h-2 bg-gray-400 rounded-full\"\n animate={{ y: [0, -8, 0] }}\n transition={{ duration: 0.6, repeat: Infinity, delay }}\n />\n ))}\n </div>\n <span className=\"text-sm 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=\"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=\"flex justify-start mb-2\">\n <div className=\"max-w-[90%] 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=\"flex items-center gap-1.5 text-xs text-gray-500\">\n <div className=\"flex items-center justify-center w-4 h-4\">\n <ShimmeringContent>\n <Brain className=\"w-3.5 h-3.5\" />\n </ShimmeringContent>\n </div>\n <span className=\"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=\"flex flex-col gap-1 text-xs\">\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n className={`flex items-center gap-1.5 select-none transition-colors ${\n isInProgress ? \"text-gray-500\" : \"text-gray-600 hover:text-gray-800\"\n } cursor-pointer`}\n >\n <div className=\"flex items-center justify-center w-4 h-4\">\n {isInProgress ? (\n <ShimmeringContent>\n <Brain className=\"w-3.5 h-3.5\" />\n </ShimmeringContent>\n ) : (\n <Brain className=\"w-3.5 h-3.5\" />\n )}\n </div>\n\n <span className=\"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=\"flex-shrink-0\"\n >\n <ChevronRight className=\"w-3 h-3\" />\n </motion.div>\n\n {isComplete && <Check className=\"w-3 h-3 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=\"overflow-hidden\"\n >\n <div className=\"border-l-2 border-gray-200 pl-3 ml-2\">\n <div\n className={`text-xs leading-relaxed whitespace-pre-wrap ${\n isComplete ? \"text-gray-500\" : \"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=\"flex flex-col gap-1 text-xs\">\n <button\n onClick={() => hasArgs && setExpanded(!expanded)}\n className={`flex items-center gap-1.5 select-none transition-colors ${\n hasArgs ? \"cursor-pointer hover:text-gray-800\" : \"cursor-default\"\n } ${isExecuting ? \"text-gray-500\" : \"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=\"w-3 h-3\" />\n </motion.div>\n )}\n\n {isExecuting && <Loader2 className=\"w-3 h-3 animate-spin text-blue-500\" />}\n {isComplete && <Check className=\"w-3 h-3 text-green-500\" />}\n {isError && <span className=\"w-3 h-3 text-red-500\">✕</span>}\n\n <span className=\"font-medium\">{toolCall.name}</span>\n\n <span className=\"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=\"overflow-hidden\"\n >\n <pre className=\"mt-1 p-2 bg-gray-100 rounded text-[10px] font-mono text-gray-700 overflow-x-auto max-h-32 overflow-y-auto 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={`flex flex-col ${message.isBot ? \"items-start\" : \"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=\"max-w-[80%] rounded-2xl px-4 py-2 transition-all 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=\"text-sm 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=\"font-bold\">{children}</strong>\n ),\n ul: ({ children }) => (\n <ul className=\"list-disc pl-5 my-1\">{children}</ul>\n ),\n ol: ({ children }) => (\n <ol className=\"list-decimal pl-5 my-1\">\n {children}\n </ol>\n ),\n li: ({ children }) => <li className=\"[&>p]:inline [&>p]:m-0\">{children}</li>,\n p: ({ children }) => <p className=\"mb-1 last:mb-0\">{children}</p>,\n a: ({ href, children }) => (\n <a\n href={href}\n className=\"underline hover: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=\"text-xs opacity-60 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 maxHeight?: number;\n}\n\nexport const MessagesContainer = forwardRef<HTMLDivElement, MessagesContainerProps>(\n ({ children, maxHeight }, 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=\"relative flex-1 min-h-0 rounded-2xl mb-3 overflow-y-auto p-4 space-y-3 pointer-events-auto\"\n style={{\n background: styles.colors.messagesBackground,\n ...(maxHeight && { maxHeight }),\n }}\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=\"mb-3 rounded-xl bg-gray-50 border border-gray-200\"\n >\n <div className=\"p-2 border-b border-gray-200 flex justify-between items-center\">\n <span className=\"text-sm font-medium text-gray-700\">\n Recent Conversations\n </span>\n <button onClick={onClose} className=\"p-1 hover:bg-gray-200 rounded\">\n <X size={14} className=\"text-gray-500\" />\n </button>\n </div>\n <div className=\"max-h-[200px] overflow-y-auto\">\n {conversations.length === 0 ? (\n <div className=\"p-4 text-center text-sm 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={`w-full p-3 text-left hover:bg-gray-100 transition-colors border-b border-gray-100 last:border-0 ${\n currentConversationId === conv.id ? \"bg-blue-50\" : \"\"\n }`}\n >\n <div className=\"text-sm font-medium text-gray-800 truncate\">\n {conv.name || \"Untitled conversation\"}\n </div>\n <div className=\"text-xs text-gray-500 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=\"mb-3 p-3 rounded-xl bg-gray-50 border border-gray-200\"\n >\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm font-medium text-gray-900 flex items-center gap-1\">\n {workflow.name}\n </span>\n <button\n onClick={onExit}\n className=\"text-xs text-gray-500 hover:text-gray-700 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=\"flex items-center justify-center gap-1.5 mb-3 text-[11px] text-gray-400\">\n {branding.showLogo && logoUrl && (\n <img\n src={logoUrl}\n alt=\"Crow\"\n width={14}\n height={14}\n className=\"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=\"relative\" ref={dropdownRef}>\n <button\n type=\"button\"\n onClick={() => !disabled && setIsOpen(!isOpen)}\n disabled={disabled}\n className={cn(\n \"flex items-center gap-1 px-2 py-1 rounded-md text-xs\",\n \"bg-transparent text-[#9CA3AF]\",\n \"hover:text-gray-700 transition-colors\",\n disabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\"\n )}\n >\n <span>{selectedModelData?.name || \"Select Model\"}</span>\n <ChevronDown\n className={cn(\n \"w-3 h-3 transition-transform\",\n isOpen ? \"rotate-180\" : \"\"\n )}\n />\n </button>\n\n {isOpen && (\n <div className=\"absolute bottom-full mb-2 left-0 min-w-[180px] bg-white border border-gray-200 rounded-xl shadow-lg z-50 overflow-hidden\">\n {Object.entries(groupedModels).map(([provider, providerModels]) => (\n <div key={provider}>\n <div className=\"px-3 py-1.5 text-xs font-medium text-gray-400 uppercase tracking-wide 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 \"w-full flex items-center justify-between px-3 py-1.5 text-sm\",\n \"hover:bg-gray-100 transition-colors\",\n model.id === selectedModel ? \"text-gray-900\" : \"text-gray-600\"\n )}\n >\n <span>{model.name}</span>\n {model.id === selectedModel && (\n <Check className=\"w-4 h-4 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// Embedded CSS for textarea scrollbar\nconst styles = `\n *:focus-visible {\n outline-offset: 0 !important;\n --ring-offset: 0 !important;\n }\n textarea::-webkit-scrollbar {\n width: 6px;\n }\n textarea::-webkit-scrollbar-track {\n background: transparent;\n }\n textarea::-webkit-scrollbar-thumb {\n background-color: #444444;\n border-radius: 3px;\n }\n textarea::-webkit-scrollbar-thumb:hover {\n background-color: #555555;\n }\n`;\n\n// Inject styles into document\nif (typeof document !== \"undefined\") {\n const styleSheet = document.createElement(\"style\");\n styleSheet.innerText = styles;\n document.head.appendChild(styleSheet);\n}\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 \"flex w-full rounded-md border-none bg-transparent px-3 py-1.5 text-base text-gray-900 placeholder:text-gray-500 focus-visible:outline-none focus-visible:ring-0 disabled:cursor-not-allowed disabled:opacity-50 min-h-[32px] 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 \"z-50 overflow-hidden rounded-md border border-[#333333] bg-[#1F2023] px-3 py-1.5 text-sm text-white shadow-md animate-in fade-in-0 zoom-in-95\",\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: \"bg-white hover:bg-white/80 text-black\",\n outline: \"border border-[#444444] bg-transparent hover:bg-[#3A3A40]\",\n ghost: \"bg-transparent hover:bg-[#3A3A40]\",\n };\n const sizeClasses = {\n default: \"h-10 px-4 py-2\",\n sm: \"h-8 px-3 text-sm\",\n lg: \"h-12 px-6\",\n icon: \"h-8 w-8 rounded-full aspect-[1/1]\",\n };\n return (\n <button\n className={cn(\n \"inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none disabled:pointer-events-none disabled: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 \"rounded-3xl border border-[#444444] bg-[#1F2023] p-1.5 shadow-[0_8px_30px_rgba(0,0,0,0.24)] transition-all duration-300\",\n isLoading && \"border-red-500/70\",\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(\"flex items-center 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 \"w-full bg-[#1F2023] border-[#444444] shadow-[0_8px_30px_rgba(0,0,0,0.24)] transition-all duration-300 ease-in-out\",\n className\n )}\n disabled={isLoading}\n ref={ref || promptBoxRef}\n >\n <div className=\"transition-all duration-300 opacity-100\">\n <PromptInputTextarea placeholder={placeholder} className=\"text-base\" />\n </div>\n\n <PromptInputActions className=\"flex items-center justify-between gap-2 p-0 pt-1\">\n {/* Model Selector - Left side */}\n <div className=\"flex 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 \"h-7 w-7 rounded-full transition-all duration-200\",\n isLoading\n ? \"!bg-red-500 hover:!bg-red-600 !text-white\"\n : hasContent\n ? \"!bg-white hover:!bg-white/80 !text-[#1F2023]\"\n : \"!bg-transparent hover:!bg-gray-600/30 !text-[#1F2023] hover:!text-[#1F2023]\"\n )}\n onClick={() => {\n if (isLoading && onStop) {\n onStop();\n } else if (hasContent) {\n handleSubmit();\n }\n }}\n >\n {isLoading ? (\n <Square className=\"h-3.5 w-3.5 fill-white text-white\" />\n ) : (\n <ArrowUp className=\"h-3.5 w-3.5 text-[#1F2023]\" />\n )}\n </Button>\n </PromptInputAction>\n </PromptInputActions>\n </PromptInput>\n );\n }\n);\n\nPromptInputBox.displayName = \"PromptInputBox\";\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 */\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 { 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 { 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// Config\nimport { DEFAULT_MODEL } from \"./constants\";\nimport type { WidgetStyleConfig } from \"./styles/types\";\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\nexport function CrowWidget({\n productId,\n apiUrl = \"\",\n variant = \"floating\",\n styles: propStyles,\n previewMode = false,\n onReady,\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 // 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 [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: (event) => {\n if (event.type === \"client_call\" && event.toolName) {\n console.log(\"[Crow Widget] 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 Widget] Tool result:\", r)).catch((e) => console.error(\"[Crow Widget] 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 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\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 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 // Render\n return (\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 <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=\"mt-auto\">\n <PoweredByBadge apiUrl={apiUrl} />\n <PromptInputBox\n onSend={handleSend}\n onStop={chat.stopGeneration}\n placeholder=\"Type your message...\"\n isLoading={chat.isLoading}\n className=\"!bg-white !border-gray-300 backdrop-blur-md\"\n />\n </div>\n </WidgetShell>\n )}\n </>\n )}\n\n {/* Embedded mode: always expanded, no bubble */}\n {variant === \"embedded\" && (\n <WidgetShell>\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=\"mt-auto\">\n <PoweredByBadge apiUrl={apiUrl} />\n <PromptInputBox\n onSend={handleSend}\n onStop={chat.stopGeneration}\n placeholder=\"Type your message...\"\n isLoading={chat.isLoading}\n className=\"!bg-white !border-gray-300 backdrop-blur-md\"\n />\n </div>\n </WidgetShell>\n )}\n </WidgetStyleProvider>\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={`flex flex-col h-full bg-white ${\n position === \"left\" ? \"border-r\" : \"border-l\"\n } border-gray-200 ${className || \"\"}`}\n style={{\n width: widthStyle,\n fontFamily: styles.typography.fontFamily,\n fontSize: styles.typography.fontSize,\n background: styles.colors.background,\n borderColor: styles.colors.border,\n }}\n >\n {/* Header */}\n <div\n className=\"flex items-center justify-between px-4 py-3 border-b\"\n style={{\n height: styles.dimensions.headerHeight,\n borderColor: styles.colors.border,\n }}\n >\n <span\n className=\"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=\"flex items-center gap-1\">\n {/* New Chat button */}\n <button\n onClick={handleNewChat}\n className=\"p-1.5 hover:bg-gray-100 rounded transition-colors\"\n aria-label=\"New Chat\"\n title=\"New Chat\"\n >\n <PlusIcon className=\"w-4 h-4 text-gray-600\" />\n </button>\n\n {/* History button - only for verified users */}\n {isVerifiedUser && (\n <button\n onClick={handleToggleHistory}\n className={`p-1.5 hover:bg-gray-100 rounded transition-colors ${\n showConversationList ? \"bg-gray-100\" : \"\"\n }`}\n aria-label=\"Conversation History\"\n title=\"Conversation History\"\n >\n <HistoryIcon className=\"w-4 h-4 text-gray-600\" />\n </button>\n )}\n\n {/* Close button */}\n {showClose && onClose && (\n <button\n onClick={onClose}\n className=\"p-1.5 hover:bg-gray-100 rounded transition-colors\"\n aria-label=\"Close\"\n >\n <CloseIcon className=\"w-4 h-4 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=\"p-3 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 className=\"!bg-white !border-gray-300\"\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"]}
|