@hsafa/ui-sdk 0.1.1 → 0.1.3
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 +51 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +51 -10
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Button.module.css","../src/components/Button.tsx","../src/hooks/useToggle.ts","../src/hooks/useAutoScroll.ts","../src/providers/HsafaProvider.tsx","../src/hooks/useHsafaAction.ts","../src/hooks/useHsafaComponent.ts","../src/components/HsafaChat.tsx"],"names":["Button_default","Button","variant","size","loading","disabled","children","className","props","buttonClasses","jsxs","jsx","useToggle","initial","on","setOn","useState","toggle","useCallback","prev","setTrue","setFalse","useAutoScroll","ref","useRef","useEffect","el","observer","HsafaContext","createContext","HsafaProvider","baseUrl","actions","setActions","components","setComponents","registerAction","name","handler","next","existing","unregisterAction","registerComponent","component","unregisterComponent","value","useMemo","useHsafa","ctx","useContext","useHsafaAction","handlerRef","params","meta","useHsafaComponent","componentRef","timeAgo","ts","diff","s","m","h","d","w","months","joinUrl","path","a","themeColors","HsafaChat","agentId","theme","primaryColor","backgroundColor","borderColor","textColor","accentColor","width","maxWidth","height","expandable","alwaysOpen","defaultOpen","dir","floatingButtonPosition","enableBorderAnimation","enableContentPadding","borderRadius","enableContentBorder","placeholder","title","chatContainerClassName","LS_PREFIX","chatsIndexKey","chatKey","id","currentChatKey","showChatKey","setValue","showChat","setShowChat","savedShow","submitEdit_impl","messageId","newText","userText","setError","setStreaming","idx","messages","base","updatedUser","assistantId","genId","newMessages","setMessages","setEditingMessageId","history","payload","currentChatId","res","t","reader","decoder","buffer","done","idxNew","line","evt","actionExecMapRef","assistantMsgIdRef","calledFinalActionsRef","actionParamsHistoryRef","actionExecutionStatusRef","setActionStatuses","setCurrentChatId","hasChatRecordRef","firstUser","pendingFirstTitleRef","now","upsertChatMeta","saveChat","chunk","val","processActions","tokens","e","localId","streaming","error","abortControllerRef","historyOpen","setHistoryOpen","historySearch","setHistorySearch","historyTick","setHistoryTick","maximized","setMaximized","editingMessageId","editingMessageText","setEditingMessageText","textareaRef","scrollAnchorRef","scrollContainerRef","isAtBottom","setIsAtBottom","suppressNextScrollRef","historyBtnRef","historyPopupRef","actionStatuses","hasActionParamsStabilized","actionKey","currentParams","stringifiedParams","lastTwo","items","trigger","it","executeOnStream","key","isStabilized","currentStatus","loadChatsIndex","raw","saveChatsIndex","list","loadChat","data","x","deleteChatMeta","deleteChatData","deleteChat","savedCurrent","cd","handleStop","handleSend","userId","newUser","newAssistant","renderAssistantItems","resolvedColors","status","compName","Comp","themeColorScheme","containerStyles","chatPanelStyles","floatingButtonStyles","contentBorderRadius","componentId","IconArrowsMaximize","IconPlus","o","IconHistory","modalContent","Fragment","q","index","IconTrash","createPortal","IconChevronRight","atBottom","i","lines","finalLine","IconPaperclip","IconLink","IconPlayerStop","IconArrowUp","IconMessage"],"mappings":"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","file":"index.cjs","sourcesContent":["/* Base button styles */\n.button {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n border: 1px solid transparent;\n border-radius: 0.75rem;\n font-weight: 600;\n font-family: inherit;\n cursor: pointer;\n transition: all 0.2s ease-in-out;\n text-decoration: none;\n white-space: nowrap;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n\n.button:disabled {\n cursor: not-allowed;\n opacity: 0.6;\n}\n\n/* Size variants */\n.sm {\n padding: 0.375rem 0.75rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n\n.md {\n padding: 0.5rem 1rem;\n font-size: 1rem;\n line-height: 1.5rem;\n}\n\n.lg {\n padding: 0.75rem 1.5rem;\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n\n/* Color variants */\n.primary {\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n border-color: transparent;\n}\n\n.primary:hover:not(:disabled) {\n background: linear-gradient(135deg, #5a67d8 0%, #6b46c1 100%);\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);\n}\n\n.secondary {\n background-color: #f7fafc;\n color: #2d3748;\n border-color: #e2e8f0;\n}\n\n.secondary:hover:not(:disabled) {\n background-color: #edf2f7;\n border-color: #cbd5e0;\n}\n\n.outline {\n background-color: transparent;\n color: #667eea;\n border-color: #667eea;\n}\n\n.outline:hover:not(:disabled) {\n background-color: #667eea;\n color: white;\n}\n\n.ghost {\n background-color: transparent;\n color: #4a5568;\n border-color: transparent;\n}\n\n.ghost:hover:not(:disabled) {\n background-color: #f7fafc;\n color: #2d3748;\n}\n\n/* Loading state */\n.loading {\n pointer-events: none;\n}\n\n.hiddenText {\n opacity: 0;\n}\n\n.spinner {\n position: absolute;\n width: 1rem;\n height: 1rem;\n border: 2px solid transparent;\n border-top: 2px solid currentColor;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n","import React from \"react\";\nimport styles from \"./Button.module.css\";\n\n/**\n * Props for the Button component\n */\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Visual style variant of the button */\n variant?: \"primary\" | \"secondary\" | \"outline\" | \"ghost\";\n /** Size of the button */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Whether the button is in a loading state */\n loading?: boolean;\n /** Content to be displayed inside the button */\n children: React.ReactNode;\n}\n\n/**\n * A versatile button component with multiple variants, sizes, and states.\n * \n * @example\n * ```tsx\n * // Basic usage\n * <Button>Click me</Button>\n * \n * // With variant and size\n * <Button variant=\"secondary\" size=\"lg\">Large Secondary Button</Button>\n * \n * // Loading state\n * <Button loading>Processing...</Button>\n * \n * // With click handler\n * <Button onClick={() => console.log('Clicked!')}>Click me</Button>\n * ```\n */\nexport const Button: React.FC<ButtonProps> = ({\n variant = \"primary\",\n size = \"md\",\n loading = false,\n disabled,\n children,\n className,\n ...props\n}) => {\n const buttonClasses = [\n styles.button,\n styles[variant],\n styles[size],\n loading && styles.loading,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <button\n className={buttonClasses}\n disabled={disabled || loading}\n {...props}\n >\n {loading && <span className={styles.spinner} />}\n <span className={loading ? styles.hiddenText : undefined}>\n {children}\n </span>\n </button>\n );\n};\n","import { useCallback, useState } from \"react\";\n\nexport interface UseToggleReturn {\n /** Current toggle state */\n on: boolean;\n /** Toggle the state */\n toggle: () => void;\n /** Set the state directly */\n setOn: (value: boolean | ((prev: boolean) => boolean)) => void;\n /** Set state to true */\n setTrue: () => void;\n /** Set state to false */\n setFalse: () => void;\n}\n\n/**\n * A hook for managing boolean toggle state\n * @param initial - Initial state value (default: false)\n * @returns Object with toggle state and control functions\n */\nexport function useToggle(initial = false): UseToggleReturn {\n const [on, setOn] = useState(initial);\n \n const toggle = useCallback(() => setOn(prev => !prev), []);\n const setTrue = useCallback(() => setOn(true), []);\n const setFalse = useCallback(() => setOn(false), []);\n\n return { \n on, \n toggle, \n setOn, \n setTrue, \n setFalse \n };\n}\n","import { useEffect, useRef } from \"react\";\n\nexport function useAutoScroll<T extends HTMLElement>() {\n const ref = useRef<T | null>(null);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const observer = new MutationObserver(() => {\n el.scrollTop = el.scrollHeight;\n });\n\n observer.observe(el, { childList: true, subtree: true });\n el.scrollTop = el.scrollHeight;\n\n return () => observer.disconnect();\n }, []);\n\n return ref;\n}\n","import React, { createContext, useCallback, useContext, useMemo, useState } from \"react\";\n\n/**\n * Handler function for custom actions that can be triggered by the AI agent\n */\nexport type HsafaActionHandler = (params: any, meta: {\n /** Name of the action being called */\n name: string;\n /** When the action is being triggered */\n trigger: 'partial' | 'final' | 'params_complete';\n /** Index of the action in the sequence */\n index: number;\n /** ID of the assistant message that triggered this action */\n assistantMessageId?: string;\n /** ID of the current chat session */\n chatId?: string;\n}) => Promise<any> | any;\n\n/**\n * Configuration options for the Hsafa SDK\n */\nexport interface HsafaConfig {\n /** Base URL for agent API calls, e.g. \"\" (same origin) or \"https://example.com\" */\n baseUrl?: string;\n}\n\n/**\n * Context value provided by HsafaProvider\n */\nexport interface HsafaContextValue extends HsafaConfig {\n /** Registered custom actions */\n actions: Map<string, HsafaActionHandler>;\n /** Registered custom components */\n components: Map<string, React.ComponentType<any>>;\n /** Register a custom action handler */\n registerAction: (name: string, handler: HsafaActionHandler) => () => void;\n /** Unregister a custom action handler */\n unregisterAction: (name: string, handler?: HsafaActionHandler) => void;\n /** Register a custom component */\n registerComponent: (name: string, component: React.ComponentType<any>) => () => void;\n /** Unregister a custom component */\n unregisterComponent: (name: string, component?: React.ComponentType<any>) => void;\n}\n\nconst HsafaContext = createContext<HsafaContextValue | undefined>(undefined);\n\n/**\n * Props for the HsafaProvider component\n */\nexport interface HsafaProviderProps extends HsafaConfig {\n /** Child components that will have access to the Hsafa context */\n children: React.ReactNode;\n}\n\n/**\n * Provider component that sets up the Hsafa context for the SDK.\n * Wrap your app or chat components with this provider to enable Hsafa functionality.\n * \n * @example\n * ```tsx\n * <HsafaProvider baseUrl=\"https://api.example.com\">\n * <HsafaChat agentId=\"my-agent\" />\n * </HsafaProvider>\n * ```\n */\nexport function HsafaProvider({ baseUrl, children }: HsafaProviderProps) {\n const [actions, setActions] = useState<Map<string, HsafaActionHandler>>(new Map());\n const [components, setComponents] = useState<Map<string, React.ComponentType<any>>>(new Map());\n\n const registerAction = useCallback((name: string, handler: HsafaActionHandler) => {\n setActions(prev => {\n const next = new Map(prev);\n next.set(String(name), handler);\n return next;\n });\n return () => {\n setActions(prev => {\n const next = new Map(prev);\n const existing = next.get(String(name));\n if (!handler || existing === handler) next.delete(String(name));\n return next;\n });\n };\n }, []);\n\n const unregisterAction = useCallback((name: string, handler?: HsafaActionHandler) => {\n setActions(prev => {\n const next = new Map(prev);\n const existing = next.get(String(name));\n if (!handler || existing === handler) next.delete(String(name));\n return next;\n });\n }, []);\n\n const registerComponent = useCallback((name: string, component: React.ComponentType<any>) => {\n setComponents(prev => {\n const next = new Map(prev);\n next.set(String(name), component);\n return next;\n });\n return () => {\n setComponents(prev => {\n const next = new Map(prev);\n const existing = next.get(String(name));\n if (!component || existing === component) next.delete(String(name));\n return next;\n });\n };\n }, []);\n\n const unregisterComponent = useCallback((name: string, component?: React.ComponentType<any>) => {\n setComponents(prev => {\n const next = new Map(prev);\n const existing = next.get(String(name));\n if (!component || existing === component) next.delete(String(name));\n return next;\n });\n }, []);\n\n const value: HsafaContextValue = useMemo(() => ({\n baseUrl,\n actions,\n components,\n registerAction,\n unregisterAction,\n registerComponent,\n unregisterComponent,\n }), [baseUrl, actions, components, registerAction, unregisterAction, registerComponent, unregisterComponent]);\n\n return (\n <HsafaContext.Provider value={value}>\n {children}\n </HsafaContext.Provider>\n );\n}\n\n/**\n * Hook to access the Hsafa context.\n * Must be used within a HsafaProvider.\n * \n * @returns The Hsafa context value with actions, components, and configuration\n * \n * @example\n * ```tsx\n * function MyComponent() {\n * const { registerAction, baseUrl } = useHsafa();\n * \n * useEffect(() => {\n * const unregister = registerAction('myAction', async (params) => {\n * console.log('Action called with:', params);\n * return { success: true };\n * });\n * \n * return unregister;\n * }, [registerAction]);\n * \n * return <div>My Component</div>;\n * }\n * ```\n */\nexport function useHsafa(): HsafaContextValue {\n const ctx = useContext(HsafaContext);\n if (!ctx) return {\n baseUrl: undefined,\n actions: new Map(),\n components: new Map(),\n registerAction: () => () => undefined,\n unregisterAction: () => undefined,\n registerComponent: () => () => undefined,\n unregisterComponent: () => undefined,\n };\n return ctx;\n}\n","import { useEffect, useRef } from 'react';\nimport { useHsafa } from '../providers/HsafaProvider';\nimport type { HsafaActionHandler } from '../providers/HsafaProvider';\n\n/**\n * Register an action handler by name within the nearest HsafaProvider.\n * The handler will be automatically unregistered on unmount.\n */\nexport function useHsafaAction(name: string, handler: HsafaActionHandler) {\n const { registerAction } = useHsafa();\n const handlerRef = useRef(handler);\n\n // Keep latest handler without re-registering name\n useEffect(() => {\n handlerRef.current = handler;\n }, [handler]);\n\n useEffect(() => {\n if (!name || typeof handlerRef.current !== 'function') return;\n const unregister = registerAction(name, (params, meta) => handlerRef.current(params, meta));\n return unregister;\n }, [name, registerAction]);\n}\n","import { useEffect, useRef } from 'react';\nimport type { ComponentType } from 'react';\nimport { useHsafa } from '../providers/HsafaProvider';\n\n/**\n * Register a UI component by name within the nearest HsafaProvider.\n * The component will be automatically unregistered on unmount.\n */\nexport function useHsafaComponent(name: string, component: ComponentType<any>) {\n const { registerComponent } = useHsafa();\n const componentRef = useRef(component);\n\n // Keep latest component without re-registering name\n useEffect(() => {\n componentRef.current = component;\n }, [component]);\n\n useEffect(() => {\n if (!name || typeof componentRef.current !== 'function') return;\n const unregister = registerComponent(name, componentRef.current as ComponentType<any>);\n return unregister;\n }, [name, registerComponent]);\n}\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n IconArrowsMaximize,\n IconPlus,\n IconHistory,\n IconChevronRight,\n IconPaperclip,\n IconLink,\n IconArrowUp,\n IconMessage,\n IconTrash,\n IconPlayerStop,\n} from \"@tabler/icons-react\";\nimport { useHsafa } from \"../providers/HsafaProvider\";\n\n// Lightweight relative time helper (e.g., 1m, 6h, 7h)\nfunction timeAgo(ts: number): string {\n const diff = Date.now() - ts;\n const s = Math.max(1, Math.floor(diff / 1000));\n if (s < 60) return `${s}s`;\n const m = Math.floor(s / 60);\n if (m < 60) return `${m}m`;\n const h = Math.floor(m / 60);\n if (h < 24) return `${h}h`;\n const d = Math.floor(h / 24);\n if (d < 7) return `${d}d`;\n const w = Math.floor(d / 7);\n if (w < 4) return `${w}w`;\n const months = Math.floor(d / 30);\n if (months < 12) return `${months}mo`;\n const y = Math.floor(months / 12);\n return `${y}y`;\n}\n\nexport interface HsafaChatProps {\n agentId: string;\n children?: React.ReactNode; // Content will be contained within the chat box - fixed elements like navbars will stay inside\n \n // Theme\n theme?: 'dark' | 'light';\n \n // Color customization (overrides theme colors if provided)\n primaryColor?: string;\n backgroundColor?: string;\n borderColor?: string;\n textColor?: string;\n accentColor?: string;\n \n // Layout customization\n width?: number | string;\n maxWidth?: number | string;\n height?: string;\n \n // Behavior customization\n expandable?: boolean;\n alwaysOpen?: boolean;\n defaultOpen?: boolean;\n \n // Floating button customization\n floatingButtonPosition?: {\n bottom?: number | string;\n right?: number | string;\n top?: number | string;\n left?: number | string;\n };\n \n // Border and styling customization\n enableBorderAnimation?: boolean;\n enableContentPadding?: boolean;\n borderRadius?: number | string;\n enableContentBorder?: boolean;\n \n // Additional customization\n placeholder?: string;\n title?: string;\n className?: string;\n chatContainerClassName?: string;\n \n // Text direction\n dir?: 'rtl' | 'ltr';\n}\n\ntype ChatMessage =\n | { id: string; role: 'user'; text: string; requestParams?: any }\n | {\n id: string;\n role: 'assistant';\n items: any[];\n reasoning?: string;\n reasoningOpen?: boolean;\n reasoningTokens?: number;\n requestParams?: any;\n };\n\nfunction joinUrl(baseUrl: string | undefined, path: string): string {\n if (!baseUrl) return path;\n const a = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl;\n const b = path.startsWith('/') ? path : `/${path}`;\n return `${a}${b}`;\n}\n\n// Theme color schemes\nconst themeColors = {\n dark: {\n primaryColor: '#4D78FF',\n backgroundColor: '#0B0B0F',\n borderColor: '#2A2C33',\n textColor: '#EDEEF0',\n accentColor: '#17181C',\n mutedTextColor: '#9AA0A6',\n inputBackground: '#17181C',\n cardBackground: '#121318',\n hoverBackground: '#1c1e25',\n },\n light: {\n primaryColor: '#2563EB',\n backgroundColor: '#FFFFFF',\n borderColor: '#E5E7EB',\n textColor: '#111827',\n accentColor: '#F9FAFB',\n mutedTextColor: '#6B7280',\n inputBackground: '#F9FAFB',\n cardBackground: '#F3F4F6',\n hoverBackground: '#F3F4F6',\n }\n};\n\nexport function HsafaChat({ \n agentId, \n children,\n // Theme\n theme = 'dark',\n // Color customization (overrides theme colors if provided)\n primaryColor,\n backgroundColor,\n borderColor,\n textColor,\n accentColor,\n // Layout customization\n width = 420,\n maxWidth = 420,\n height = '100vh',\n // Behavior customization\n expandable = true,\n alwaysOpen = false,\n defaultOpen = true,\n // Text direction\n dir = 'ltr',\n // Floating button customization\n floatingButtonPosition = dir === 'rtl' ? { bottom: 16, left: 16 } : { bottom: 16, right: 16 },\n // Border and styling customization\n enableBorderAnimation = true,\n enableContentPadding = true,\n borderRadius = 16,\n enableContentBorder = true,\n // Additional customization\n placeholder = 'Ask your question...',\n title = 'Agent',\n className = '',\n chatContainerClassName = ''\n}: HsafaChatProps) {\n const { baseUrl, actions, components } = useHsafa();\n const LS_PREFIX = `hsafaChat_${agentId}`; // Namespace by agentId to avoid conflicts\n const chatsIndexKey = `${LS_PREFIX}.chats`;\n const chatKey = (id: string) => `${LS_PREFIX}.chat.${id}`;\n const currentChatKey = `${LS_PREFIX}.currentChatId`;\n const showChatKey = `${LS_PREFIX}.showChat`;\n\n const [value, setValue] = useState<string>(\"\");\n const [showChat, setShowChat] = useState<boolean>(() => {\n if (alwaysOpen) return true;\n try {\n const savedShow = localStorage.getItem(showChatKey);\n return savedShow !== null ? savedShow === 'true' : defaultOpen;\n } catch {\n return defaultOpen;\n }\n });\n\n // Submit an inline edit: replace the clicked user message, truncate after it, and re-run\n async function submitEdit_impl(messageId: string, newText: string) {\n if (!agentId) return;\n const userText = newText.trim();\n if (!userText) return;\n setError(null);\n setStreaming(true);\n\n const idx = messages.findIndex(m => m.id === messageId);\n if (idx === -1 || messages[idx].role !== 'user') {\n setStreaming(false);\n return;\n }\n\n const base = messages.slice(0, idx); // messages before the edited one\n const updatedUser: ChatMessage = { id: messageId, role: 'user', text: userText };\n const assistantId = genId();\n const newMessages: ChatMessage[] = [\n ...base,\n updatedUser,\n { id: assistantId, role: 'assistant', items: [], reasoning: '', reasoningOpen: false },\n ];\n setMessages(newMessages);\n setEditingMessageId(null);\n\n try {\n // Build history: base mapped + edited user\n const history = [\n ...base.map(m => (m.role === 'user' ? { role: 'user' as const, content: m.text } : { role: 'assistant' as const, items: Array.isArray(m.items) ? m.items : [] })),\n { role: 'user' as const, content: userText },\n ];\n const payload: any = {\n prompt: userText,\n chatId: currentChatId ?? undefined,\n messages: history,\n };\n setMessages(prev => prev.map(m => (m.id === assistantId || m.id === messageId ? { ...m, requestParams: payload } as any : m)));\n\n const res = await fetch(joinUrl(baseUrl, `/api/run/${agentId}`), {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload),\n });\n if (!res.ok || !res.body) {\n const t = await res.text().catch(() => '');\n throw new Error(t || `Request failed with ${res.status}`);\n }\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n let idxNew;\n while ((idxNew = buffer.indexOf('\\n')) !== -1) {\n const line = buffer.slice(0, idxNew).trim();\n buffer = buffer.slice(idxNew + 1);\n if (!line) continue;\n try {\n const evt = JSON.parse(line);\n if (evt?.type === 'meta') {\n // Capture execution preferences and assistant message id\n if (evt.actionExecuteMap && typeof evt.actionExecuteMap === 'object') {\n actionExecMapRef.current = evt.actionExecuteMap as Record<string, boolean>;\n }\n if (evt.assistantMessageId) {\n assistantMsgIdRef.current = String(evt.assistantMessageId);\n calledFinalActionsRef.current.clear();\n // Reset action tracking for new message\n actionParamsHistoryRef.current.clear();\n actionExecutionStatusRef.current.clear();\n setActionStatuses(new Map());\n }\n if (evt.chatId && !currentChatId) {\n setCurrentChatId(evt.chatId);\n hasChatRecordRef.current = true;\n const firstUser = userText;\n const title = (pendingFirstTitleRef.current || firstUser || 'New chat').slice(0, 80);\n const now = Date.now();\n upsertChatMeta({ id: evt.chatId, title, createdAt: now, updatedAt: now });\n saveChat({ id: evt.chatId, messages: newMessages, agentId });\n try { localStorage.setItem(currentChatKey, evt.chatId); } catch {}\n }\n continue;\n }\n if (evt?.type === 'reasoning') {\n const chunk = String(evt.text ?? '');\n setMessages(prev => prev.map(m => (m.id === assistantId && m.role === 'assistant' ? { ...m, reasoning: (m.reasoning ?? '') + chunk } : m)));\n continue;\n }\n if (evt?.type === 'partial' || evt?.type === 'final') {\n const val = evt.value;\n if (val && Array.isArray(val.items)) {\n setMessages(prev => prev.map(m => (m.id === assistantId && m.role === 'assistant' ? { ...m, items: val.items } : m)));\n // Process actions based on trigger and executeOnStream preference\n processActions(val.items, evt.type === 'partial' ? 'partial' : 'final');\n }\n if (evt?.type === 'final') {\n setMessages(prev => prev.map(m => (m.id === assistantId && m.role === 'assistant' ? { ...m, reasoningOpen: false } : m)));\n }\n continue;\n }\n if (evt?.type === 'usage') {\n const tokens = evt?.value?.reasoningTokens;\n if (typeof tokens === 'number') {\n setMessages(prev => prev.map(m => (m.id === assistantId && m.role === 'assistant' ? { ...m, reasoningTokens: tokens } : m)));\n }\n continue;\n }\n if (evt?.type === 'error') {\n setError(String(evt.error ?? 'Unknown error'));\n continue;\n }\n } catch {\n // ignore malformed lines\n }\n }\n }\n } catch (e: any) {\n setError(String(e?.message ?? e));\n } finally {\n setStreaming(false);\n if (!currentChatId && !hasChatRecordRef.current) {\n const localId = `local-${genId()}`;\n setCurrentChatId(localId);\n hasChatRecordRef.current = true;\n const title = (pendingFirstTitleRef.current || 'New chat').slice(0, 80);\n const now = Date.now();\n upsertChatMeta({ id: localId, title, createdAt: now, updatedAt: now });\n saveChat({ id: localId, messages: messages, agentId });\n try { localStorage.setItem(currentChatKey, localId); } catch {}\n }\n }\n }\n\n const [messages, setMessages] = useState<ChatMessage[]>([]);\n const [streaming, setStreaming] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const abortControllerRef = useRef<AbortController | null>(null);\n const [currentChatId, setCurrentChatId] = useState<string | null>(null);\n const [historyOpen, setHistoryOpen] = useState<boolean>(false);\n const [historySearch, setHistorySearch] = useState<string>(\"\");\n const [historyTick, setHistoryTick] = useState<number>(0);\n const [maximized, setMaximized] = useState<boolean>(false);\n const [editingMessageId, setEditingMessageId] = useState<string | null>(null);\n const [editingMessageText, setEditingMessageText] = useState<string>(\"\");\n const textareaRef = useRef<HTMLTextAreaElement | null>(null);\n\n const scrollAnchorRef = useRef<HTMLDivElement | null>(null);\n const scrollContainerRef = useRef<HTMLDivElement | null>(null);\n const [isAtBottom, setIsAtBottom] = useState<boolean>(true);\n const suppressNextScrollRef = useRef<boolean>(false);\n const hasChatRecordRef = useRef<boolean>(false);\n const pendingFirstTitleRef = useRef<string | null>(null);\n const historyBtnRef = useRef<HTMLButtonElement | null>(null);\n const historyPopupRef = useRef<HTMLDivElement | null>(null);\n\n // Streaming meta refs\n const actionExecMapRef = useRef<Record<string, boolean>>({});\n const assistantMsgIdRef = useRef<string | undefined>(undefined);\n const calledFinalActionsRef = useRef<Set<string>>(new Set());\n \n // Action parameter tracking for completion detection\n const actionParamsHistoryRef = useRef<Map<string, any[]>>(new Map());\n const actionExecutionStatusRef = useRef<Map<string, 'executing' | 'executed'>>(new Map());\n const [actionStatuses, setActionStatuses] = useState<Map<string, 'executing' | 'executed'>>(new Map());\n\n // Helper to detect if action parameters have stabilized (finished streaming)\n const hasActionParamsStabilized = useCallback((actionKey: string, currentParams: any): boolean => {\n const history = actionParamsHistoryRef.current.get(actionKey) || [];\n const stringifiedParams = JSON.stringify(currentParams);\n \n // Add current params to history\n history.push(stringifiedParams);\n \n // Keep only last 3 entries to detect stabilization\n if (history.length > 3) {\n history.shift();\n }\n \n actionParamsHistoryRef.current.set(actionKey, history);\n \n // Consider stabilized if params haven't changed in last 2 updates\n if (history.length >= 2) {\n const lastTwo = history.slice(-2);\n return lastTwo[0] === lastTwo[1];\n }\n \n return false;\n }, []);\n\n const processActions = useCallback((items: any[] | undefined, trigger: 'partial' | 'final') => {\n if (!Array.isArray(items) || items.length === 0) return;\n \n items.forEach((it, idx) => {\n if (!it || typeof it !== 'object') return;\n if (it.type === 'action') {\n const name = String(it.name ?? '').trim();\n if (!name) return;\n const handler = actions.get(name);\n if (!handler) return;\n \n const executeOnStream = !!actionExecMapRef.current[name];\n const key = `${assistantMsgIdRef.current || 'assist'}:${name}:${idx}`;\n const actionKey = `${name}:${idx}`;\n \n try {\n if (trigger === 'partial' && executeOnStream) {\n // Execute on each partial update (streaming mode)\n setActionStatuses(prev => new Map(prev).set(actionKey, 'executing'));\n Promise.resolve(handler(it.params, { name, trigger, index: idx, assistantMessageId: assistantMsgIdRef.current, chatId: currentChatId || undefined })).catch(() => {});\n } else if (trigger === 'partial' && !executeOnStream) {\n // Check if action parameters have stabilized (finished streaming)\n const isStabilized = hasActionParamsStabilized(actionKey, it.params);\n const currentStatus = actionExecutionStatusRef.current.get(actionKey);\n \n if (isStabilized && currentStatus !== 'executed') {\n // Parameters have stabilized, execute the action\n actionExecutionStatusRef.current.set(actionKey, 'executed');\n setActionStatuses(prev => new Map(prev).set(actionKey, 'executed'));\n \n Promise.resolve(handler(it.params, { \n name, \n trigger: 'params_complete', \n index: idx, \n assistantMessageId: assistantMsgIdRef.current, \n chatId: currentChatId || undefined \n })).catch(() => {});\n } else if (!currentStatus) {\n // First time seeing this action, mark as executing\n actionExecutionStatusRef.current.set(actionKey, 'executing');\n setActionStatuses(prev => new Map(prev).set(actionKey, 'executing'));\n }\n } else if (trigger === 'final') {\n // Final trigger - ensure action is executed if not already\n const currentStatus = actionExecutionStatusRef.current.get(actionKey);\n if (currentStatus !== 'executed' && !calledFinalActionsRef.current.has(key)) {\n calledFinalActionsRef.current.add(key);\n actionExecutionStatusRef.current.set(actionKey, 'executed');\n setActionStatuses(prev => new Map(prev).set(actionKey, 'executed'));\n \n Promise.resolve(handler(it.params, { \n name, \n trigger: executeOnStream ? 'final' : 'params_complete', \n index: idx, \n assistantMessageId: assistantMsgIdRef.current, \n chatId: currentChatId || undefined \n })).catch(() => {});\n }\n }\n } catch {}\n }\n });\n }, [actions, currentChatId, hasActionParamsStabilized]);\n\n type ChatMeta = { id: string; title: string; createdAt: number; updatedAt: number };\n type ChatData = { id: string; messages: ChatMessage[]; agentId?: string };\n\n const loadChatsIndex = (): ChatMeta[] => {\n try {\n const raw = localStorage.getItem(chatsIndexKey);\n return raw ? JSON.parse(raw) : [];\n } catch { return []; }\n };\n const saveChatsIndex = (list: ChatMeta[]) => {\n try { localStorage.setItem(chatsIndexKey, JSON.stringify(list)); } catch {}\n };\n const loadChat = (id: string): ChatData | null => {\n try { const raw = localStorage.getItem(chatKey(id)); return raw ? JSON.parse(raw) : null; } catch { return null; }\n };\n const saveChat = (data: ChatData) => {\n try { localStorage.setItem(chatKey(data.id), JSON.stringify(data)); } catch {}\n };\n const upsertChatMeta = (meta: ChatMeta) => {\n const list = loadChatsIndex();\n const idx = list.findIndex(x => x.id === meta.id);\n if (idx >= 0) list[idx] = meta; else list.unshift(meta);\n saveChatsIndex(list);\n };\n const deleteChatMeta = (id: string) => {\n const list = loadChatsIndex();\n const next = list.filter(x => x.id !== id);\n saveChatsIndex(next);\n };\n const deleteChatData = (id: string) => {\n try { localStorage.removeItem(chatKey(id)); } catch {}\n };\n const deleteChat = (id: string) => {\n deleteChatData(id);\n deleteChatMeta(id);\n if (currentChatId === id) {\n setMessages([]);\n setError(null);\n setCurrentChatId(null);\n hasChatRecordRef.current = false;\n pendingFirstTitleRef.current = null;\n try { localStorage.removeItem(currentChatKey); } catch {}\n }\n };\n\n useEffect(() => {\n if (suppressNextScrollRef.current) {\n suppressNextScrollRef.current = false;\n return;\n }\n if (!isAtBottom) return;\n scrollAnchorRef.current?.scrollIntoView({ behavior: 'smooth', block: 'end' });\n }, [messages, streaming, isAtBottom]);\n\n useEffect(() => {\n try {\n const savedCurrent = localStorage.getItem(currentChatKey);\n if (savedCurrent) {\n const cd = loadChat(savedCurrent);\n if (cd) {\n setCurrentChatId(cd.id);\n hasChatRecordRef.current = true;\n setMessages(cd.messages || []);\n }\n }\n } catch {}\n }, []);\n\n useEffect(() => {\n try { localStorage.setItem(showChatKey, String(showChat)); } catch {}\n }, [showChat]);\n\n useEffect(() => {\n if (!currentChatId || !hasChatRecordRef.current) return;\n const data: ChatData = { id: currentChatId, messages, agentId };\n saveChat(data);\n const firstUser = messages.find(m => (m as any).role === 'user') as any;\n const title = (pendingFirstTitleRef.current || (firstUser?.text ?? 'New chat')).slice(0, 80);\n const meta: ChatMeta = { id: currentChatId, title, createdAt: Date.now(), updatedAt: Date.now() };\n upsertChatMeta(meta);\n try { localStorage.setItem(currentChatKey, currentChatId); } catch {}\n }, [messages, currentChatId, agentId]);\n\n const genId = () => `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;\n\n function handleStop() {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n abortControllerRef.current = null;\n }\n setStreaming(false);\n setError(\"Request stopped by user\");\n }\n\n async function handleSend() {\n if (!agentId) return;\n const userText = value.trim();\n if (!userText) return;\n setError(null);\n setStreaming(true);\n if (!currentChatId && messages.length === 0) {\n pendingFirstTitleRef.current = userText;\n }\n\n let userId = genId();\n let assistantId = genId();\n const newUser = { id: userId, role: 'user' as const, text: userText };\n const newAssistant = { id: assistantId, role: 'assistant' as const, items: [], reasoning: '', reasoningOpen: false };\n const newMessages: ChatMessage[] = [...messages, newUser, newAssistant];\n const history = [\n ...messages.map(m => (m.role === 'user' ? { role: 'user' as const, content: m.text } : { role: 'assistant' as const, items: Array.isArray(m.items) ? m.items : [] })),\n { role: 'user' as const, content: userText },\n ];\n setMessages(newMessages);\n setValue(\"\");\n\n try {\n // Create new AbortController for this request\n abortControllerRef.current = new AbortController();\n \n const payload: any = {\n prompt: userText,\n chatId: currentChatId ?? undefined,\n messages: history,\n };\n\n setMessages(prev => prev.map(m => (m.id === assistantId || m.id === userId ? { ...m, requestParams: payload } as any : m)));\n\n const res = await fetch(joinUrl(baseUrl, `/api/run/${agentId}`), {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload),\n signal: abortControllerRef.current.signal,\n });\n if (!res.ok || !res.body) {\n const t = await res.text().catch(() => '');\n throw new Error(t || `Request failed with ${res.status}`);\n }\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n let idx;\n while ((idx = buffer.indexOf('\\n')) !== -1) {\n const line = buffer.slice(0, idx).trim();\n buffer = buffer.slice(idx + 1);\n if (!line) continue;\n try {\n const evt = JSON.parse(line);\n if (evt?.type === 'meta') {\n // Capture execution preferences and assistant message id\n if (evt.actionExecuteMap && typeof evt.actionExecuteMap === 'object') {\n actionExecMapRef.current = evt.actionExecuteMap as Record<string, boolean>;\n }\n if (evt.assistantMessageId) {\n assistantMsgIdRef.current = String(evt.assistantMessageId);\n calledFinalActionsRef.current.clear();\n // Reset action tracking for new message\n actionParamsHistoryRef.current.clear();\n actionExecutionStatusRef.current.clear();\n setActionStatuses(new Map());\n }\n if (evt.chatId && !currentChatId) {\n setCurrentChatId(evt.chatId);\n hasChatRecordRef.current = true;\n const firstUser = userText;\n const title = (pendingFirstTitleRef.current || firstUser || 'New chat').slice(0, 80);\n const now = Date.now();\n upsertChatMeta({ id: evt.chatId, title, createdAt: now, updatedAt: now });\n saveChat({ id: evt.chatId, messages: newMessages, agentId });\n try { localStorage.setItem(currentChatKey, evt.chatId); } catch {}\n }\n continue;\n }\n if (evt?.type === 'reasoning') {\n const chunk = String(evt.text ?? '');\n setMessages(prev => prev.map(m => (m.id === assistantId && m.role === 'assistant' ? { ...m, reasoning: (m.reasoning ?? '') + chunk } : m)));\n continue;\n }\n if (evt?.type === 'partial' || evt?.type === 'final') {\n const val = evt.value;\n if (val && Array.isArray(val.items)) {\n setMessages(prev => prev.map(m => (m.id === assistantId && m.role === 'assistant' ? { ...m, items: val.items } : m)));\n // Process actions based on trigger and executeOnStream preference\n processActions(val.items, evt.type === 'partial' ? 'partial' : 'final');\n }\n if (evt?.type === 'final') {\n setMessages(prev => prev.map(m => (m.id === assistantId && m.role === 'assistant' ? { ...m, reasoningOpen: false } : m)));\n }\n continue;\n }\n if (evt?.type === 'usage') {\n const tokens = evt?.value?.reasoningTokens;\n if (typeof tokens === 'number') {\n setMessages(prev => prev.map(m => (m.id === assistantId && m.role === 'assistant' ? { ...m, reasoningTokens: tokens } : m)));\n }\n continue;\n }\n if (evt?.type === 'error') {\n setError(String(evt.error ?? 'Unknown error'));\n continue;\n }\n } catch {\n // ignore malformed lines\n }\n }\n }\n } catch (e: any) {\n setError(String(e?.message ?? e));\n } finally {\n setStreaming(false);\n if (!currentChatId && !hasChatRecordRef.current) {\n const localId = `local-${genId()}`;\n setCurrentChatId(localId);\n hasChatRecordRef.current = true;\n const title = (pendingFirstTitleRef.current || 'New chat').slice(0, 80);\n const now = Date.now();\n upsertChatMeta({ id: localId, title, createdAt: now, updatedAt: now });\n saveChat({ id: localId, messages: messages, agentId });\n try { localStorage.setItem(currentChatKey, localId); } catch {}\n }\n }\n }\n\n function renderAssistantItems(items: any[]) {\n if (!Array.isArray(items) || items.length === 0) return null;\n return (\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '12px'\n }}>\n {items.map((it, idx) => {\n const key = `it-${idx}`;\n if (typeof it === 'string') {\n return (\n <div key={key} style={{\n borderRadius: '12px',\n padding: '16px',\n fontSize: '14px',\n whiteSpace: 'pre-wrap',\n backgroundColor: resolvedColors.cardBackground,\n border: `1px solid ${resolvedColors.borderColor}`,\n color: resolvedColors.textColor\n }}>\n {it}\n </div>\n );\n }\n if (it && typeof it === 'object') {\n if (it.type === 'action') {\n const actionKey = `${String(it.name ?? 'action')}:${idx}`;\n const status = actionStatuses.get(actionKey);\n \n return (\n <div key={key} style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '8px'\n }}>\n {/* Action execution status */}\n <div style={{\n padding: '8px',\n fontSize: '12px',\n color: resolvedColors.mutedTextColor\n }}>\n {status === 'executing' ? (\n <span style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px'\n }}>\n <svg \n style={{\n animation: 'spin 1s linear infinite',\n height: '12px',\n width: '12px'\n }}\n xmlns=\"http://www.w3.org/2000/svg\" \n fill=\"none\" \n viewBox=\"0 0 24 24\"\n >\n <circle \n style={{ opacity: 0.25 }}\n cx=\"12\" \n cy=\"12\" \n r=\"10\" \n stroke=\"currentColor\" \n strokeWidth=\"4\"\n />\n <path \n style={{ opacity: 0.75 }}\n fill=\"currentColor\" \n d=\"m4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n {String(it.name ?? 'action')} is executing\n </span>\n ) : (\n <span style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px'\n }}>\n <span style={{\n display: 'inline-block',\n height: '6px',\n width: '6px',\n borderRadius: '50%',\n backgroundColor: '#10b981'\n }} />\n {String(it.name ?? 'action')} has executed\n </span>\n )}\n </div>\n </div>\n );\n }\n if (it.type === 'ui-component' || it.type === 'ui') {\n const compName = String(it.name ?? it.component ?? '').trim();\n const Comp = compName ? components.get(compName) : undefined;\n if (Comp) {\n return (\n <div key={key} style={{\n borderRadius: '12px',\n padding: '12px',\n backgroundColor: resolvedColors.inputBackground,\n border: `1px solid ${resolvedColors.borderColor}`\n }}>\n <Comp {...(it.props || {})} />\n </div>\n );\n }\n return (\n <div key={key} style={{\n borderRadius: '12px',\n padding: '16px',\n backgroundColor: resolvedColors.inputBackground,\n border: `1px solid ${resolvedColors.borderColor}`\n }}>\n <div style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '8px',\n fontSize: '12px',\n marginBottom: '8px',\n color: resolvedColors.mutedTextColor\n }}>\n <span style={{\n padding: '2px 8px',\n borderRadius: '4px',\n backgroundColor: resolvedColors.accentColor,\n border: `1px solid ${resolvedColors.borderColor}`\n }}>UI</span>\n <span>{compName || 'component'}</span>\n <span style={{\n marginLeft: '8px',\n opacity: 0.7\n }}>(unregistered)</span>\n </div>\n <pre style={{\n fontSize: '12px',\n overflow: 'auto',\n color: resolvedColors.mutedTextColor,\n margin: '0',\n fontFamily: 'ui-monospace, SFMono-Regular, \"SF Mono\", Consolas, \"Liberation Mono\", Menlo, monospace'\n }}>{JSON.stringify(it.props ?? {}, null, 2)}</pre>\n </div>\n );\n }\n return (\n <div key={key} style={{\n borderRadius: '12px',\n padding: '16px',\n fontSize: '14px',\n backgroundColor: resolvedColors.cardBackground,\n border: `1px solid ${resolvedColors.borderColor}`\n }}>\n <pre style={{\n fontSize: '12px',\n overflow: 'auto',\n color: resolvedColors.mutedTextColor,\n margin: '0',\n fontFamily: 'ui-monospace, SFMono-Regular, \"SF Mono\", Consolas, \"Liberation Mono\", Menlo, monospace'\n }}>{JSON.stringify(it, null, 2)}</pre>\n </div>\n );\n }\n return null;\n })}\n </div>\n );\n }\n\n // Apply theme colors with prop overrides\n const themeColorScheme = themeColors[theme];\n const resolvedColors = {\n primaryColor: primaryColor || themeColorScheme.primaryColor,\n backgroundColor: backgroundColor || themeColorScheme.backgroundColor,\n borderColor: borderColor || themeColorScheme.borderColor,\n textColor: textColor || themeColorScheme.textColor,\n accentColor: accentColor || themeColorScheme.accentColor,\n mutedTextColor: themeColorScheme.mutedTextColor,\n inputBackground: themeColorScheme.inputBackground,\n cardBackground: themeColorScheme.cardBackground,\n hoverBackground: themeColorScheme.hoverBackground,\n };\n\n // Generate dynamic styles based on props\n const containerStyles = {\n backgroundColor: resolvedColors.backgroundColor,\n color: resolvedColors.textColor,\n height,\n display: 'flex',\n width: '100%',\n fontFamily: 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif'\n };\n \n const chatPanelStyles = {\n width: typeof width === 'number' ? `${width}px` : width,\n maxWidth: typeof maxWidth === 'number' ? `${maxWidth}px` : maxWidth,\n display: 'flex',\n flexDirection: 'column' as const,\n transition: 'all 0.3s ease-out',\n overflow: 'hidden'\n };\n \n const floatingButtonStyles = {\n position: 'fixed' as const,\n bottom: typeof floatingButtonPosition.bottom === 'number' ? `${floatingButtonPosition.bottom}px` : floatingButtonPosition.bottom,\n right: floatingButtonPosition.right ? (typeof floatingButtonPosition.right === 'number' ? `${floatingButtonPosition.right}px` : floatingButtonPosition.right) : undefined,\n top: floatingButtonPosition.top ? (typeof floatingButtonPosition.top === 'number' ? `${floatingButtonPosition.top}px` : floatingButtonPosition.top) : undefined,\n left: floatingButtonPosition.left ? (typeof floatingButtonPosition.left === 'number' ? `${floatingButtonPosition.left}px` : floatingButtonPosition.left) : undefined,\n zIndex: 1000\n };\n\n const contentBorderRadius = typeof borderRadius === 'number' ? `${borderRadius}px` : borderRadius;\n \n // Component ID for scoped animations\n const componentId = useRef(`hsafa-chat-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`);\n\n return (\n <div className={className} style={containerStyles} dir={dir} data-hsafa-chat={componentId.current}>\n {/* Main content area */}\n <div style={{\n display: 'flex',\n alignItems: 'stretch',\n justifyContent: 'stretch',\n width: '100%',\n height: '100%',\n transition: 'all 0.3s ease-out',\n padding: showChat && enableContentPadding ? '16px' : '0'\n }}>\n <div style={{\n position: 'relative',\n display: 'flex',\n width: '100%',\n height: '100%',\n transition: 'all 0.3s ease-out',\n borderRadius: showChat && enableContentBorder ? contentBorderRadius : '0'\n }}>\n {showChat && enableContentBorder ? (\n <div\n style={{\n width: '100%',\n height: '100%',\n transition: 'all 0.3s ease-out',\n borderRadius: contentBorderRadius,\n border: streaming && enableBorderAnimation ? 'none' : `1px solid ${resolvedColors.borderColor}`,\n padding: streaming && enableBorderAnimation ? '1.5px' : '0',\n background: streaming && enableBorderAnimation ? \n `linear-gradient(120deg, ${resolvedColors.primaryColor}dd 0%, ${resolvedColors.primaryColor}88 25%, ${resolvedColors.primaryColor}00 50%, ${resolvedColors.primaryColor}88 75%, ${resolvedColors.primaryColor}dd 100%)` : \n 'transparent',\n backgroundSize: streaming && enableBorderAnimation ? '300% 300%' : 'auto',\n animation: streaming && enableBorderAnimation ? `${componentId.current}-border-flow 3s ease-in-out infinite` : 'none',\n filter: streaming && enableBorderAnimation ? `drop-shadow(0 0 10px ${resolvedColors.primaryColor}40)` : 'none'\n }}\n >\n <div \n className=\"content-container\"\n style={{\n width: '100%',\n height: '100%',\n borderRadius: contentBorderRadius,\n backgroundColor: resolvedColors.backgroundColor,\n overflow: 'hidden',\n position: 'relative',\n isolation: 'isolate',\n contain: 'layout style paint',\n transform: 'translateZ(0)' // Creates a new containing block for fixed elements\n }}\n >\n {children}\n </div>\n </div>\n ) : (\n <div \n className=\"content-container\"\n style={{ \n width: '100%', \n height: '100%',\n position: 'relative',\n isolation: 'isolate',\n contain: 'layout style paint',\n transform: 'translateZ(0)', // Creates a new containing block for fixed elements\n overflow: 'hidden'\n }}\n >\n {children}\n </div>\n )}\n </div>\n </div>\n {/* Right chat column */}\n <div\n className={chatContainerClassName}\n style={{\n ...chatPanelStyles,\n height,\n backgroundColor: showChat || alwaysOpen ? resolvedColors.backgroundColor : 'transparent',\n ...(showChat || alwaysOpen\n ? (maximized && expandable\n ? {\n position: 'fixed',\n inset: '0',\n zIndex: 1050,\n width: '100%',\n maxWidth: '100%',\n padding: '24px'\n }\n : {\n padding: '24px 16px',\n opacity: 1,\n transform: 'translateX(0)',\n pointerEvents: 'auto'\n })\n : {\n width: '0',\n maxWidth: '0',\n padding: '24px 0',\n opacity: 0,\n transform: dir === 'rtl' ? 'translateX(8px)' : 'translateX(-8px)',\n pointerEvents: 'none'\n })\n }}\n >\n {/* Header */}\n <div style={{\n marginBottom: '24px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between'\n }}>\n <div style={{ minWidth: '0' }}>\n <h1\n title={title}\n style={{\n color: resolvedColors.textColor,\n fontSize: '18px',\n fontWeight: '600',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n margin: '0'\n }}\n >\n {title}\n </h1>\n </div>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n position: 'relative',\n color: resolvedColors.mutedTextColor\n }}>\n {/* Expand / Pop-out */}\n {expandable && (\n <button\n aria-label={maximized ? 'Minimize' : 'Maximize'}\n style={{ \n backgroundColor: 'transparent',\n color: resolvedColors.mutedTextColor,\n border: 'none',\n borderRadius: '8px',\n padding: '8px',\n cursor: 'pointer',\n transition: 'all 0.2s ease-out',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = resolvedColors.hoverBackground;\n e.currentTarget.style.color = resolvedColors.textColor;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.color = resolvedColors.mutedTextColor;\n }}\n onClick={() => { \n setShowChat(true); \n setMaximized(m => !m); \n }}\n >\n <IconArrowsMaximize size={20} stroke={2} />\n </button>\n )}\n {/* New */}\n <button\n aria-label=\"New\"\n style={{ \n backgroundColor: 'transparent',\n color: resolvedColors.mutedTextColor,\n border: 'none',\n borderRadius: '8px',\n padding: '8px',\n cursor: 'pointer',\n transition: 'all 0.2s ease-out',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = resolvedColors.hoverBackground;\n e.currentTarget.style.color = resolvedColors.textColor;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.color = resolvedColors.mutedTextColor;\n }}\n onClick={() => {\n if (streaming) return; // don't interrupt streaming\n setMessages([]);\n setError(null);\n setCurrentChatId(null);\n hasChatRecordRef.current = false;\n pendingFirstTitleRef.current = null;\n try { localStorage.removeItem(currentChatKey); } catch {}\n }}\n >\n <IconPlus size={20} stroke={2} />\n </button>\n {/* History */}\n <button\n aria-label=\"History\"\n style={{ \n backgroundColor: 'transparent',\n color: resolvedColors.mutedTextColor,\n border: 'none',\n borderRadius: '8px',\n padding: '8px',\n cursor: 'pointer',\n transition: 'all 0.2s ease-out',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = resolvedColors.hoverBackground;\n e.currentTarget.style.color = resolvedColors.textColor;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.color = resolvedColors.mutedTextColor;\n }}\n onClick={() => setHistoryOpen(o => !o)}\n ref={historyBtnRef}\n >\n <IconHistory size={20} stroke={2} />\n </button>\n {historyOpen && (() => {\n // Render history modal inline with proper positioning\n const modalContent = (\n <>\n {/* Backdrop with blur */}\n <div\n style={{\n position: 'fixed',\n inset: '0',\n zIndex: 1100,\n backgroundColor: 'rgba(0, 0, 0, 0.4)',\n backdropFilter: 'blur(4px)',\n WebkitBackdropFilter: 'blur(4px)'\n }}\n onClick={() => setHistoryOpen(false)}\n />\n {/* Command palette panel */}\n <div\n ref={historyPopupRef}\n style={{\n position: 'fixed',\n left: '50%',\n top: '64px',\n transform: 'translateX(-50%)',\n zIndex: 1101,\n width: '680px',\n maxWidth: '94vw',\n overflow: 'hidden',\n borderRadius: '16px',\n border: `1px solid ${resolvedColors.borderColor}`,\n backgroundColor: `${resolvedColors.backgroundColor}f0`,\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n backdropFilter: 'blur(16px)',\n WebkitBackdropFilter: 'blur(16px)'\n }}\n >\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n borderBottom: `1px solid ${resolvedColors.borderColor}`,\n padding: '12px 16px'\n }}>\n <div style={{ flex: '1' }}>\n <input\n autoFocus\n value={historySearch}\n onChange={(e) => setHistorySearch(e.target.value)}\n placeholder=\"Search\"\n style={{\n width: '100%',\n borderRadius: '8px',\n backgroundColor: resolvedColors.inputBackground,\n padding: '8px 12px',\n fontSize: '14px',\n color: resolvedColors.textColor,\n border: `1px solid ${resolvedColors.borderColor}`,\n outline: 'none'\n }}\n onFocus={(e) => e.currentTarget.style.borderColor = resolvedColors.primaryColor}\n onBlur={(e) => e.currentTarget.style.borderColor = resolvedColors.borderColor}\n />\n </div>\n </div>\n <div style={{\n maxHeight: '60vh',\n overflowY: 'auto'\n }}>\n {(() => {\n const q = historySearch.toLowerCase().trim();\n let list = loadChatsIndex();\n if (q) list = list.filter(m => (m.title || '').toLowerCase().includes(q));\n if (!list || list.length === 0) return (\n <div style={{\n padding: '24px',\n color: resolvedColors.mutedTextColor,\n textAlign: 'center'\n }}>No chats found.</div>\n );\n return (\n <div>\n {list.map((meta, index) => (\n <div key={meta.id} style={{\n borderTop: index > 0 ? `1px solid ${resolvedColors.borderColor}` : 'none'\n }}>\n <div style={{\n display: 'flex',\n width: '100%',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '12px',\n padding: '12px',\n backgroundColor: meta.id === currentChatId ? resolvedColors.cardBackground : 'transparent'\n }}>\n <button\n style={{\n flex: '1',\n textAlign: 'left',\n transition: 'background-color 0.2s',\n borderRadius: '8px',\n padding: '8px',\n border: 'none',\n backgroundColor: 'transparent',\n cursor: 'pointer',\n color: resolvedColors.textColor\n }}\n onMouseEnter={(e) => e.currentTarget.style.backgroundColor = resolvedColors.hoverBackground}\n onMouseLeave={(e) => e.currentTarget.style.backgroundColor = 'transparent'}\n onClick={() => {\n const data = loadChat(meta.id);\n if (data) {\n setCurrentChatId(meta.id);\n hasChatRecordRef.current = true;\n setMessages(data.messages || []);\n try { localStorage.setItem(currentChatKey, meta.id); } catch {}\n setHistoryOpen(false);\n setShowChat(true);\n }\n }}\n >\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '12px'\n }}>\n <div style={{ minWidth: '0', flex: '1' }}>\n <div style={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n fontSize: '14px',\n color: resolvedColors.textColor\n }}>{meta.title || 'Untitled chat'}</div>\n </div>\n <div style={{\n flexShrink: 0,\n fontSize: '12px',\n color: resolvedColors.mutedTextColor\n }}>{timeAgo(meta.updatedAt)}</div>\n </div>\n </button>\n <button\n style={{\n flexShrink: 0,\n borderRadius: '6px',\n padding: '8px',\n color: resolvedColors.mutedTextColor,\n border: '1px solid transparent',\n backgroundColor: 'transparent',\n cursor: 'pointer',\n transition: 'all 0.2s'\n }}\n title=\"Delete chat\"\n onMouseEnter={(e) => {\n e.currentTarget.style.color = '#ef4444';\n e.currentTarget.style.backgroundColor = 'rgba(239, 68, 68, 0.1)';\n e.currentTarget.style.borderColor = 'rgba(239, 68, 68, 0.3)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.color = resolvedColors.mutedTextColor;\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.borderColor = 'transparent';\n }}\n onClick={(e) => {\n e.stopPropagation();\n deleteChat(meta.id);\n setHistoryTick(t => t + 1);\n }}\n >\n <IconTrash size={16} stroke={2} />\n </button>\n </div>\n </div>\n ))}\n </div>\n );\n })()}\n </div>\n </div>\n </>\n );\n \n // Only use portal if document.body is available\n if (typeof document !== 'undefined' && document.body) {\n return createPortal(modalContent, document.body);\n }\n \n // Fallback to inline rendering\n return modalContent;\n })()}\n {/* More / Next */}\n {!alwaysOpen && (\n <button\n aria-label=\"Close chat\"\n style={{ \n backgroundColor: 'transparent',\n color: resolvedColors.mutedTextColor,\n border: 'none',\n borderRadius: '8px',\n padding: '8px',\n cursor: 'pointer',\n transition: 'all 0.2s ease-out',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = resolvedColors.hoverBackground;\n e.currentTarget.style.color = resolvedColors.textColor;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.color = resolvedColors.mutedTextColor;\n }}\n onClick={() => setShowChat(false)}\n >\n <IconChevronRight size={20} stroke={2} style={{ transform: dir === 'rtl' ? 'rotate(180deg)' : 'none' }} />\n </button>\n )}\n </div>\n </div>\n\n {/* Scrollable content area (conversation + status) */}\n <div\n style={{\n flex: '1',\n overflowY: 'auto',\n padding: '16px 4px 16px 4px',\n display: 'flex',\n flexDirection: 'column',\n gap: '16px'\n }}\n ref={scrollContainerRef}\n onScroll={(e) => {\n const el = e.currentTarget;\n const threshold = 64; // px from bottom considered \"at bottom\"\n const distanceFromBottom = el.scrollHeight - (el.scrollTop + el.clientHeight);\n const atBottom = distanceFromBottom <= threshold;\n if (atBottom !== isAtBottom) setIsAtBottom(atBottom);\n }}\n >\n {error && (\n <div style={{\n margin: '0 8px',\n borderRadius: '12px',\n backgroundColor: 'rgba(239, 68, 68, 0.1)',\n color: '#fca5a5',\n border: '1px solid rgba(239, 68, 68, 0.3)',\n padding: '12px',\n fontSize: '14px'\n }}>{error}</div>\n )}\n {messages.length === 0 && !streaming && (\n <div style={{\n margin: '0 8px',\n borderRadius: '12px',\n padding: '16px',\n border: `1px solid ${resolvedColors.borderColor}`,\n backgroundColor: resolvedColors.accentColor,\n color: resolvedColors.mutedTextColor\n }}>\n Start by sending a message to the agent.\n </div>\n )}\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '16px'\n }}>\n {messages.map((m, i) => (\n <div key={m.id} style={{ padding: '0 4px' }}>\n {m.role === 'user' ? (\n editingMessageId === m.id ? (\n <div style={{\n maxWidth: '720px',\n borderRadius: '16px',\n padding: '8px',\n fontSize: '15px',\n border: `2px solid ${resolvedColors.primaryColor}`,\n backgroundColor: resolvedColors.accentColor,\n color: resolvedColors.textColor\n }}>\n <textarea\n autoFocus\n style={{\n width: '100%',\n resize: 'none',\n backgroundColor: 'transparent',\n padding: '8px',\n lineHeight: '1.6',\n outline: 'none',\n border: 'none',\n color: 'inherit',\n fontFamily: 'inherit',\n fontSize: 'inherit'\n }}\n rows={Math.max(2, Math.min(10, Math.ceil((editingMessageText || m.text).length / 60)))}\n value={editingMessageText}\n onChange={(e) => setEditingMessageText(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Escape') {\n setEditingMessageId(null);\n } else if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n if (!streaming) submitEdit_impl(m.id, editingMessageText || m.text);\n }\n }}\n />\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: '8px',\n padding: '8px 8px 8px 0'\n }}>\n <button\n style={{\n borderRadius: '8px',\n padding: '4px 12px',\n fontSize: '14px',\n transition: 'background-color 0.2s',\n border: `1px solid ${resolvedColors.borderColor}`,\n color: resolvedColors.mutedTextColor,\n backgroundColor: 'transparent',\n cursor: 'pointer'\n }}\n onMouseEnter={(e) => e.currentTarget.style.backgroundColor = resolvedColors.inputBackground}\n onMouseLeave={(e) => e.currentTarget.style.backgroundColor = 'transparent'}\n onClick={() => setEditingMessageId(null)}\n >\n Cancel\n </button>\n <button\n style={{\n borderRadius: '8px',\n padding: '4px 12px',\n fontSize: '14px',\n transition: 'border-color 0.2s',\n border: `1px solid ${resolvedColors.borderColor}`,\n backgroundColor: resolvedColors.cardBackground,\n color: resolvedColors.textColor,\n cursor: 'pointer'\n }}\n onMouseEnter={(e) => e.currentTarget.style.borderColor = resolvedColors.primaryColor}\n onMouseLeave={(e) => e.currentTarget.style.borderColor = resolvedColors.borderColor}\n onClick={() => { if (!streaming) submitEdit_impl(m.id, editingMessageText || m.text); }}\n >\n Save\n </button>\n </div>\n </div>\n ) : (\n <div\n title=\"Click to edit\"\n onClick={() => {\n if (streaming) return;\n setEditingMessageId(m.id);\n setEditingMessageText(m.text);\n }}\n style={{\n maxWidth: '720px',\n borderRadius: '16px',\n padding: '16px',\n fontSize: '15px',\n lineHeight: '1.6',\n whiteSpace: 'pre-wrap',\n cursor: 'pointer',\n transition: 'background-color 0.2s',\n backgroundColor: resolvedColors.accentColor,\n color: resolvedColors.textColor\n }}\n onMouseEnter={(e) => e.currentTarget.style.backgroundColor = resolvedColors.hoverBackground}\n onMouseLeave={(e) => e.currentTarget.style.backgroundColor = resolvedColors.accentColor}\n >\n {m.text}\n </div>\n )\n ) : (\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '12px'\n }}>\n {m.reasoning && (\n <div\n style={{\n borderRadius: '12px',\n padding: '12px',\n cursor: 'pointer',\n backgroundColor: resolvedColors.inputBackground,\n border: `1px solid ${resolvedColors.borderColor}`\n }}\n onClick={() => {\n suppressNextScrollRef.current = true;\n setMessages(prev => prev.map(x => x.id === m.id && x.role === 'assistant' ? { ...x, reasoningOpen: !x.reasoningOpen } : x));\n }}\n >\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: '4px'\n }}>\n <div style={{\n fontSize: '12px',\n color: resolvedColors.mutedTextColor\n }}>Reasoning</div>\n <button\n type=\"button\"\n style={{\n fontSize: '12px',\n transition: 'color 0.2s',\n color: resolvedColors.mutedTextColor,\n background: 'none',\n border: 'none',\n cursor: 'pointer'\n }}\n onMouseEnter={(e) => e.currentTarget.style.color = resolvedColors.textColor}\n onMouseLeave={(e) => e.currentTarget.style.color = resolvedColors.mutedTextColor}\n >\n {m.reasoningOpen ? 'Hide' : 'Show full'}\n </button>\n </div>\n {m.reasoningOpen ? (\n <pre style={{\n fontSize: '12px',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n color: resolvedColors.mutedTextColor,\n margin: '0',\n fontFamily: 'ui-monospace, SFMono-Regular, \"SF Mono\", Consolas, \"Liberation Mono\", Menlo, monospace'\n }}>{m.reasoning}</pre>\n ) : (\n (() => {\n const lines = (m.reasoning || '').trim().split('\\n').filter(line => line.trim());\n const finalLine = lines.length > 0 ? lines[lines.length - 1] : '';\n return (\n <pre style={{\n fontSize: '12px',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n color: resolvedColors.mutedTextColor,\n margin: '0',\n fontFamily: 'ui-monospace, SFMono-Regular, \"SF Mono\", Consolas, \"Liberation Mono\", Menlo, monospace'\n }}>\n {finalLine || '…'}\n </pre>\n );\n })()\n )}\n </div>\n )}\n {renderAssistantItems(m.items)}\n {streaming && i === messages.length - 1 && (\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n fontSize: '12px',\n color: resolvedColors.mutedTextColor\n }}>\n <span style={{\n display: 'inline-block',\n height: '8px',\n width: '8px',\n borderRadius: '50%',\n backgroundColor: resolvedColors.mutedTextColor,\n animation: 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite'\n }} />\n <span>Working…</span>\n </div>\n )}\n </div>\n )}\n </div>\n ))}\n </div>\n <div ref={scrollAnchorRef} />\n </div>\n\n {/* Composer */}\n <div style={{\n position: 'sticky',\n bottom: '0',\n marginTop: 'auto',\n paddingBottom: '8px',\n paddingTop: '4px',\n backgroundColor: resolvedColors.backgroundColor\n }}>\n {/* Unified input container */}\n <div style={{\n position: 'relative',\n flex: '1'\n }}>\n {/* The box */}\n <div style={{\n position: 'relative',\n width: '100%',\n borderRadius: '16px',\n paddingBottom: '48px',\n paddingTop: '16px',\n border: `1px solid ${resolvedColors.borderColor}`,\n backgroundColor: resolvedColors.accentColor\n }}>\n {/* Text area */}\n <div style={{ padding: '0 16px' }}>\n <textarea\n aria-label=\"Prompt\"\n rows={2}\n style={{\n height: 'auto',\n width: '100%',\n resize: 'none',\n backgroundColor: 'transparent',\n fontSize: '15px',\n lineHeight: '1.6',\n outline: 'none',\n border: 'none',\n color: resolvedColors.textColor,\n fontFamily: 'inherit'\n }}\n placeholder={placeholder}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n if (!streaming) handleSend();\n }\n }}\n ref={textareaRef}\n />\n </div>\n\n {/* Bottom-left actions inside the box */}\n <div style={{\n position: 'absolute',\n bottom: '8px',\n left: '8px',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n color: resolvedColors.mutedTextColor\n }}>\n <button\n style={{\n borderRadius: '8px',\n padding: '8px',\n transition: 'all 0.2s',\n backgroundColor: 'transparent',\n border: 'none',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'inherit'\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = `${resolvedColors.backgroundColor}99`;\n e.currentTarget.style.color = resolvedColors.textColor;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.color = resolvedColors.mutedTextColor;\n }}\n aria-label=\"Attach files\"\n >\n <IconPaperclip size={18} stroke={2} />\n </button>\n <button\n style={{\n borderRadius: '8px',\n padding: '8px',\n transition: 'all 0.2s',\n backgroundColor: 'transparent',\n border: 'none',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'inherit'\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = `${resolvedColors.backgroundColor}99`;\n e.currentTarget.style.color = resolvedColors.textColor;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.color = resolvedColors.mutedTextColor;\n }}\n aria-label=\"Insert link\"\n >\n <IconLink size={18} stroke={2} />\n </button>\n </div>\n\n {/* Bottom-right send button */}\n <div style={{\n position: 'absolute',\n bottom: '8px',\n right: '8px'\n }}>\n <button\n aria-label={streaming ? \"Stop\" : \"Send\"}\n disabled={!streaming && !value.trim()}\n style={{\n borderRadius: '12px',\n padding: '12px',\n transition: 'all 0.2s ease-out',\n border: `1px solid ${streaming ? '#ef4444' : resolvedColors.borderColor}`,\n backgroundColor: streaming ? '#ef444420' : resolvedColors.cardBackground,\n color: streaming ? '#ef4444' : resolvedColors.mutedTextColor,\n opacity: (!streaming && !value.trim()) ? 0.4 : 1,\n cursor: (!streaming && !value.trim()) ? 'not-allowed' : 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n }}\n onMouseEnter={(e) => {\n if (!e.currentTarget.disabled) {\n if (streaming) {\n e.currentTarget.style.borderColor = '#dc2626';\n e.currentTarget.style.backgroundColor = '#dc262630';\n e.currentTarget.style.color = '#dc2626';\n } else {\n e.currentTarget.style.borderColor = resolvedColors.primaryColor;\n e.currentTarget.style.backgroundColor = resolvedColors.hoverBackground;\n e.currentTarget.style.color = resolvedColors.textColor;\n }\n }\n }}\n onMouseLeave={(e) => {\n if (!e.currentTarget.disabled) {\n if (streaming) {\n e.currentTarget.style.borderColor = '#ef4444';\n e.currentTarget.style.backgroundColor = '#ef444420';\n e.currentTarget.style.color = '#ef4444';\n } else {\n e.currentTarget.style.borderColor = resolvedColors.borderColor;\n e.currentTarget.style.backgroundColor = resolvedColors.cardBackground;\n e.currentTarget.style.color = resolvedColors.mutedTextColor;\n }\n }\n }}\n onClick={() => {\n if (streaming) {\n handleStop();\n } else {\n handleSend();\n }\n }}\n >\n {streaming ? (\n <IconPlayerStop size={18} stroke={2} />\n ) : (\n <IconArrowUp size={18} stroke={2} />\n )}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n {/* Floating reopen button when chat is closed */}\n {!showChat && !alwaysOpen && (\n <button\n aria-label=\"Open chat\"\n onClick={() => setShowChat(true)}\n style={{\n ...floatingButtonStyles,\n borderColor: resolvedColors.borderColor,\n backgroundColor: resolvedColors.accentColor,\n color: resolvedColors.textColor,\n borderRadius: '50%',\n border: `1px solid ${resolvedColors.borderColor}`,\n padding: '12px',\n boxShadow: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n transition: 'all 0.2s',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.borderColor = resolvedColors.primaryColor;\n e.currentTarget.style.backgroundColor = `${resolvedColors.accentColor}dd`;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.borderColor = resolvedColors.borderColor;\n e.currentTarget.style.backgroundColor = resolvedColors.accentColor;\n }}\n >\n <IconMessage size={20} stroke={2} />\n </button>\n )}\n \n {/* Scoped animations using component ID */}\n <style>\n {`\n @keyframes ${componentId.current}-border-flow {\n 0% { background-position: 0% 50%; }\n 50% { background-position: 100% 50%; }\n 100% { background-position: 0% 50%; }\n }\n \n @keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n \n @keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n \n /* Scoped placeholder styles */\n [data-hsafa-chat=\"${componentId.current}\"] textarea::placeholder {\n color: ${resolvedColors.mutedTextColor};\n }\n \n /* Ensure textarea styles work in all environments */\n [data-hsafa-chat=\"${componentId.current}\"] textarea {\n background: transparent !important;\n border: none !important;\n outline: none !important;\n resize: none !important;\n font-family: inherit !important;\n }\n \n /* Ensure all fixed positioned elements stay within content box */\n [data-hsafa-chat=\"${componentId.current}\"] * {\n /* Prevent any child from breaking out of the content container */\n }\n \n /* Force fixed elements to be contained within the content box */\n [data-hsafa-chat=\"${componentId.current}\"] .content-container * {\n /* Any fixed, absolute, or sticky elements will be contained */\n max-width: 100% !important;\n }\n `}\n </style>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Button.module.css","../src/components/Button.tsx","../src/hooks/useToggle.ts","../src/hooks/useAutoScroll.ts","../src/providers/HsafaProvider.tsx","../src/hooks/useHsafaAction.ts","../src/hooks/useHsafaComponent.ts","../src/components/HsafaChat.tsx"],"names":["Button_default","Button","variant","size","loading","disabled","children","className","props","buttonClasses","jsxs","jsx","useToggle","initial","on","setOn","useState","toggle","useCallback","prev","setTrue","setFalse","useAutoScroll","ref","useRef","useEffect","el","observer","HsafaContext","createContext","HsafaProvider","baseUrl","actions","setActions","components","setComponents","registerAction","name","handler","next","existing","unregisterAction","registerComponent","component","unregisterComponent","value","useMemo","useHsafa","ctx","useContext","useHsafaAction","handlerRef","params","meta","useHsafaComponent","componentRef","timeAgo","ts","diff","s","m","h","d","w","months","joinUrl","path","a","b","themeColors","HsafaChat","agentId","theme","primaryColor","backgroundColor","borderColor","textColor","accentColor","width","maxWidth","height","expandable","alwaysOpen","defaultOpen","dir","floatingButtonPosition","enableBorderAnimation","enableContentPadding","borderRadius","enableContentBorder","placeholder","title","chatContainerClassName","LS_PREFIX","chatsIndexKey","chatKey","id","currentChatKey","showChatKey","setValue","showChat","setShowChat","savedShow","submitEdit_impl","messageId","newText","userText","setError","setStreaming","idx","messages","base","updatedUser","assistantId","genId","newMessages","setMessages","setEditingMessageId","history","payload","currentChatId","res","t","reader","decoder","buffer","done","idxNew","line","evt","actionExecMapRef","assistantMsgIdRef","calledFinalActionsRef","actionParamsHistoryRef","actionExecutionStatusRef","setActionStatuses","setCurrentChatId","hasChatRecordRef","firstUser","pendingFirstTitleRef","now","upsertChatMeta","saveChat","chunk","toolName","args","result","call","val","processActions","tokens","e","localId","streaming","error","abortControllerRef","historyOpen","setHistoryOpen","historySearch","setHistorySearch","historyTick","setHistoryTick","maximized","setMaximized","editingMessageId","editingMessageText","setEditingMessageText","textareaRef","scrollAnchorRef","scrollContainerRef","isAtBottom","setIsAtBottom","suppressNextScrollRef","historyBtnRef","historyPopupRef","actionStatuses","hasActionParamsStabilized","actionKey","currentParams","stringifiedParams","lastThree","items","trigger","it","executeOnStream","key","timeoutId","isStabilized","currentStatus","loadChatsIndex","raw","saveChatsIndex","list","loadChat","data","x","deleteChatMeta","deleteChatData","deleteChat","savedCurrent","cd","handleStop","handleSend","userId","newUser","newAssistant","renderAssistantItems","mcpToolCalls","mcpToolResults","resolvedColors","status","compName","Comp","uniqueTools","toolCall","hasRunningTools","tool","completedToolsCount","toolInfo","themeColorScheme","containerStyles","chatPanelStyles","floatingButtonStyles","contentBorderRadius","componentId","IconArrowsMaximize","IconPlus","o","IconHistory","modalContent","Fragment","q","index","IconTrash","createPortal","IconChevronRight","atBottom","i","lines","finalLine","IconPaperclip","IconLink","IconPlayerStop","IconArrowUp","IconMessage"],"mappings":"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","file":"index.cjs","sourcesContent":["/* Base button styles */\n.button {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n border: 1px solid transparent;\n border-radius: 0.75rem;\n font-weight: 600;\n font-family: inherit;\n cursor: pointer;\n transition: all 0.2s ease-in-out;\n text-decoration: none;\n white-space: nowrap;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n\n.button:disabled {\n cursor: not-allowed;\n opacity: 0.6;\n}\n\n/* Size variants */\n.sm {\n padding: 0.375rem 0.75rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n\n.md {\n padding: 0.5rem 1rem;\n font-size: 1rem;\n line-height: 1.5rem;\n}\n\n.lg {\n padding: 0.75rem 1.5rem;\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n\n/* Color variants */\n.primary {\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n border-color: transparent;\n}\n\n.primary:hover:not(:disabled) {\n background: linear-gradient(135deg, #5a67d8 0%, #6b46c1 100%);\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);\n}\n\n.secondary {\n background-color: #f7fafc;\n color: #2d3748;\n border-color: #e2e8f0;\n}\n\n.secondary:hover:not(:disabled) {\n background-color: #edf2f7;\n border-color: #cbd5e0;\n}\n\n.outline {\n background-color: transparent;\n color: #667eea;\n border-color: #667eea;\n}\n\n.outline:hover:not(:disabled) {\n background-color: #667eea;\n color: white;\n}\n\n.ghost {\n background-color: transparent;\n color: #4a5568;\n border-color: transparent;\n}\n\n.ghost:hover:not(:disabled) {\n background-color: #f7fafc;\n color: #2d3748;\n}\n\n/* Loading state */\n.loading {\n pointer-events: none;\n}\n\n.hiddenText {\n opacity: 0;\n}\n\n.spinner {\n position: absolute;\n width: 1rem;\n height: 1rem;\n border: 2px solid transparent;\n border-top: 2px solid currentColor;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n","import React from \"react\";\nimport styles from \"./Button.module.css\";\n\n/**\n * Props for the Button component\n */\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Visual style variant of the button */\n variant?: \"primary\" | \"secondary\" | \"outline\" | \"ghost\";\n /** Size of the button */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Whether the button is in a loading state */\n loading?: boolean;\n /** Content to be displayed inside the button */\n children: React.ReactNode;\n}\n\n/**\n * A versatile button component with multiple variants, sizes, and states.\n * \n * @example\n * ```tsx\n * // Basic usage\n * <Button>Click me</Button>\n * \n * // With variant and size\n * <Button variant=\"secondary\" size=\"lg\">Large Secondary Button</Button>\n * \n * // Loading state\n * <Button loading>Processing...</Button>\n * \n * // With click handler\n * <Button onClick={() => console.log('Clicked!')}>Click me</Button>\n * ```\n */\nexport const Button: React.FC<ButtonProps> = ({\n variant = \"primary\",\n size = \"md\",\n loading = false,\n disabled,\n children,\n className,\n ...props\n}) => {\n const buttonClasses = [\n styles.button,\n styles[variant],\n styles[size],\n loading && styles.loading,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <button\n className={buttonClasses}\n disabled={disabled || loading}\n {...props}\n >\n {loading && <span className={styles.spinner} />}\n <span className={loading ? styles.hiddenText : undefined}>\n {children}\n </span>\n </button>\n );\n};\n","import { useCallback, useState } from \"react\";\n\nexport interface UseToggleReturn {\n /** Current toggle state */\n on: boolean;\n /** Toggle the state */\n toggle: () => void;\n /** Set the state directly */\n setOn: (value: boolean | ((prev: boolean) => boolean)) => void;\n /** Set state to true */\n setTrue: () => void;\n /** Set state to false */\n setFalse: () => void;\n}\n\n/**\n * A hook for managing boolean toggle state\n * @param initial - Initial state value (default: false)\n * @returns Object with toggle state and control functions\n */\nexport function useToggle(initial = false): UseToggleReturn {\n const [on, setOn] = useState(initial);\n \n const toggle = useCallback(() => setOn(prev => !prev), []);\n const setTrue = useCallback(() => setOn(true), []);\n const setFalse = useCallback(() => setOn(false), []);\n\n return { \n on, \n toggle, \n setOn, \n setTrue, \n setFalse \n };\n}\n","import { useEffect, useRef } from \"react\";\n\nexport function useAutoScroll<T extends HTMLElement>() {\n const ref = useRef<T | null>(null);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const observer = new MutationObserver(() => {\n el.scrollTop = el.scrollHeight;\n });\n\n observer.observe(el, { childList: true, subtree: true });\n el.scrollTop = el.scrollHeight;\n\n return () => observer.disconnect();\n }, []);\n\n return ref;\n}\n","import React, { createContext, useCallback, useContext, useMemo, useState } from \"react\";\n\n/**\n * Handler function for custom actions that can be triggered by the AI agent\n */\nexport type HsafaActionHandler = (params: any, meta: {\n /** Name of the action being called */\n name: string;\n /** When the action is being triggered */\n trigger: 'partial' | 'final' | 'params_complete';\n /** Index of the action in the sequence */\n index: number;\n /** ID of the assistant message that triggered this action */\n assistantMessageId?: string;\n /** ID of the current chat session */\n chatId?: string;\n}) => Promise<any> | any;\n\n/**\n * Configuration options for the Hsafa SDK\n */\nexport interface HsafaConfig {\n /** Base URL for agent API calls, e.g. \"\" (same origin) or \"https://example.com\" */\n baseUrl?: string;\n}\n\n/**\n * Context value provided by HsafaProvider\n */\nexport interface HsafaContextValue extends HsafaConfig {\n /** Registered custom actions */\n actions: Map<string, HsafaActionHandler>;\n /** Registered custom components */\n components: Map<string, React.ComponentType<any>>;\n /** Register a custom action handler */\n registerAction: (name: string, handler: HsafaActionHandler) => () => void;\n /** Unregister a custom action handler */\n unregisterAction: (name: string, handler?: HsafaActionHandler) => void;\n /** Register a custom component */\n registerComponent: (name: string, component: React.ComponentType<any>) => () => void;\n /** Unregister a custom component */\n unregisterComponent: (name: string, component?: React.ComponentType<any>) => void;\n}\n\nconst HsafaContext = createContext<HsafaContextValue | undefined>(undefined);\n\n/**\n * Props for the HsafaProvider component\n */\nexport interface HsafaProviderProps extends HsafaConfig {\n /** Child components that will have access to the Hsafa context */\n children: React.ReactNode;\n}\n\n/**\n * Provider component that sets up the Hsafa context for the SDK.\n * Wrap your app or chat components with this provider to enable Hsafa functionality.\n * \n * @example\n * ```tsx\n * <HsafaProvider baseUrl=\"https://api.example.com\">\n * <HsafaChat agentId=\"my-agent\" />\n * </HsafaProvider>\n * ```\n */\nexport function HsafaProvider({ baseUrl, children }: HsafaProviderProps) {\n const [actions, setActions] = useState<Map<string, HsafaActionHandler>>(new Map());\n const [components, setComponents] = useState<Map<string, React.ComponentType<any>>>(new Map());\n\n const registerAction = useCallback((name: string, handler: HsafaActionHandler) => {\n setActions(prev => {\n const next = new Map(prev);\n next.set(String(name), handler);\n return next;\n });\n return () => {\n setActions(prev => {\n const next = new Map(prev);\n const existing = next.get(String(name));\n if (!handler || existing === handler) next.delete(String(name));\n return next;\n });\n };\n }, []);\n\n const unregisterAction = useCallback((name: string, handler?: HsafaActionHandler) => {\n setActions(prev => {\n const next = new Map(prev);\n const existing = next.get(String(name));\n if (!handler || existing === handler) next.delete(String(name));\n return next;\n });\n }, []);\n\n const registerComponent = useCallback((name: string, component: React.ComponentType<any>) => {\n setComponents(prev => {\n const next = new Map(prev);\n next.set(String(name), component);\n return next;\n });\n return () => {\n setComponents(prev => {\n const next = new Map(prev);\n const existing = next.get(String(name));\n if (!component || existing === component) next.delete(String(name));\n return next;\n });\n };\n }, []);\n\n const unregisterComponent = useCallback((name: string, component?: React.ComponentType<any>) => {\n setComponents(prev => {\n const next = new Map(prev);\n const existing = next.get(String(name));\n if (!component || existing === component) next.delete(String(name));\n return next;\n });\n }, []);\n\n const value: HsafaContextValue = useMemo(() => ({\n baseUrl,\n actions,\n components,\n registerAction,\n unregisterAction,\n registerComponent,\n unregisterComponent,\n }), [baseUrl, actions, components, registerAction, unregisterAction, registerComponent, unregisterComponent]);\n\n return (\n <HsafaContext.Provider value={value}>\n {children}\n </HsafaContext.Provider>\n );\n}\n\n/**\n * Hook to access the Hsafa context.\n * Must be used within a HsafaProvider.\n * \n * @returns The Hsafa context value with actions, components, and configuration\n * \n * @example\n * ```tsx\n * function MyComponent() {\n * const { registerAction, baseUrl } = useHsafa();\n * \n * useEffect(() => {\n * const unregister = registerAction('myAction', async (params) => {\n * console.log('Action called with:', params);\n * return { success: true };\n * });\n * \n * return unregister;\n * }, [registerAction]);\n * \n * return <div>My Component</div>;\n * }\n * ```\n */\nexport function useHsafa(): HsafaContextValue {\n const ctx = useContext(HsafaContext);\n if (!ctx) return {\n baseUrl: undefined,\n actions: new Map(),\n components: new Map(),\n registerAction: () => () => undefined,\n unregisterAction: () => undefined,\n registerComponent: () => () => undefined,\n unregisterComponent: () => undefined,\n };\n return ctx;\n}\n","import { useEffect, useRef } from 'react';\nimport { useHsafa } from '../providers/HsafaProvider';\nimport type { HsafaActionHandler } from '../providers/HsafaProvider';\n\n/**\n * Register an action handler by name within the nearest HsafaProvider.\n * The handler will be automatically unregistered on unmount.\n */\nexport function useHsafaAction(name: string, handler: HsafaActionHandler) {\n const { registerAction } = useHsafa();\n const handlerRef = useRef(handler);\n\n // Keep latest handler without re-registering name\n useEffect(() => {\n handlerRef.current = handler;\n }, [handler]);\n\n useEffect(() => {\n if (!name || typeof handlerRef.current !== 'function') return;\n const unregister = registerAction(name, (params, meta) => handlerRef.current(params, meta));\n return unregister;\n }, [name, registerAction]);\n}\n","import { useEffect, useRef } from 'react';\nimport type { ComponentType } from 'react';\nimport { useHsafa } from '../providers/HsafaProvider';\n\n/**\n * Register a UI component by name within the nearest HsafaProvider.\n * The component will be automatically unregistered on unmount.\n */\nexport function useHsafaComponent(name: string, component: ComponentType<any>) {\n const { registerComponent } = useHsafa();\n const componentRef = useRef(component);\n\n // Keep latest component without re-registering name\n useEffect(() => {\n componentRef.current = component;\n }, [component]);\n\n useEffect(() => {\n if (!name || typeof componentRef.current !== 'function') return;\n const unregister = registerComponent(name, componentRef.current as ComponentType<any>);\n return unregister;\n }, [name, registerComponent]);\n}\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n IconArrowsMaximize,\n IconPlus,\n IconHistory,\n IconChevronRight,\n IconPaperclip,\n IconLink,\n IconArrowUp,\n IconMessage,\n IconTrash,\n IconPlayerStop,\n} from \"@tabler/icons-react\";\nimport { useHsafa } from \"../providers/HsafaProvider\";\n\n// Lightweight relative time helper (e.g., 1m, 6h, 7h)\nfunction timeAgo(ts: number): string {\n const diff = Date.now() - ts;\n const s = Math.max(1, Math.floor(diff / 1000));\n if (s < 60) return `${s}s`;\n const m = Math.floor(s / 60);\n if (m < 60) return `${m}m`;\n const h = Math.floor(m / 60);\n if (h < 24) return `${h}h`;\n const d = Math.floor(h / 24);\n if (d < 7) return `${d}d`;\n const w = Math.floor(d / 7);\n if (w < 4) return `${w}w`;\n const months = Math.floor(d / 30);\n if (months < 12) return `${months}mo`;\n const y = Math.floor(months / 12);\n return `${y}y`;\n}\n\nexport interface HsafaChatProps {\n agentId: string;\n children?: React.ReactNode; // Content will be contained within the chat box - fixed elements like navbars will stay inside\n \n // Theme\n theme?: 'dark' | 'light';\n \n // Color customization (overrides theme colors if provided)\n primaryColor?: string;\n backgroundColor?: string;\n borderColor?: string;\n textColor?: string;\n accentColor?: string;\n \n // Layout customization\n width?: number | string;\n maxWidth?: number | string;\n height?: string;\n \n // Behavior customization\n expandable?: boolean;\n alwaysOpen?: boolean;\n defaultOpen?: boolean;\n \n // Floating button customization\n floatingButtonPosition?: {\n bottom?: number | string;\n right?: number | string;\n top?: number | string;\n left?: number | string;\n };\n \n // Border and styling customization\n enableBorderAnimation?: boolean;\n enableContentPadding?: boolean;\n borderRadius?: number | string;\n enableContentBorder?: boolean;\n \n // Additional customization\n placeholder?: string;\n title?: string;\n className?: string;\n chatContainerClassName?: string;\n \n // Text direction\n dir?: 'rtl' | 'ltr';\n}\n\ntype ChatMessage =\n | { id: string; role: 'user'; text: string; requestParams?: any }\n | {\n id: string;\n role: 'assistant';\n items: any[];\n reasoning?: string;\n reasoningOpen?: boolean;\n reasoningTokens?: number;\n requestParams?: any;\n // MCP tool calls\n mcpToolCalls?: Array<{\n toolName: string;\n args: any;\n timestamp: number;\n status?: 'pending' | 'running' | 'completed' | 'failed';\n }>;\n mcpToolResults?: Record<string, any>;\n };\n\nfunction joinUrl(baseUrl: string | undefined, path: string): string {\n if (!baseUrl) return path;\n const a = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl;\n const b = path.startsWith('/') ? path : `/${path}`;\n return `${a}${b}`;\n}\n\n// Theme color schemes\nconst themeColors = {\n dark: {\n primaryColor: '#4D78FF',\n backgroundColor: '#0B0B0F',\n borderColor: '#2A2C33',\n textColor: '#EDEEF0',\n accentColor: '#17181C',\n mutedTextColor: '#9AA0A6',\n inputBackground: '#17181C',\n cardBackground: '#121318',\n hoverBackground: '#1c1e25',\n },\n light: {\n primaryColor: '#2563EB',\n backgroundColor: '#FFFFFF',\n borderColor: '#E5E7EB',\n textColor: '#111827',\n accentColor: '#F9FAFB',\n mutedTextColor: '#6B7280',\n inputBackground: '#F9FAFB',\n cardBackground: '#F3F4F6',\n hoverBackground: '#F3F4F6',\n }\n};\n\nexport function HsafaChat({ \n agentId, \n children,\n // Theme\n theme = 'dark',\n // Color customization (overrides theme colors if provided)\n primaryColor,\n backgroundColor,\n borderColor,\n textColor,\n accentColor,\n // Layout customization\n width = 420,\n maxWidth = 420,\n height = '100vh',\n // Behavior customization\n expandable = true,\n alwaysOpen = false,\n defaultOpen = true,\n // Text direction\n dir = 'ltr',\n // Floating button customization\n floatingButtonPosition = dir === 'rtl' ? { bottom: 16, left: 16 } : { bottom: 16, right: 16 },\n // Border and styling customization\n enableBorderAnimation = true,\n enableContentPadding = true,\n borderRadius = 16,\n enableContentBorder = true,\n // Additional customization\n placeholder = 'Ask your question...',\n title = 'Agent',\n className = '',\n chatContainerClassName = ''\n}: HsafaChatProps) {\n const { baseUrl, actions, components } = useHsafa();\n const LS_PREFIX = `hsafaChat_${agentId}`; // Namespace by agentId to avoid conflicts\n const chatsIndexKey = `${LS_PREFIX}.chats`;\n const chatKey = (id: string) => `${LS_PREFIX}.chat.${id}`;\n const currentChatKey = `${LS_PREFIX}.currentChatId`;\n const showChatKey = `${LS_PREFIX}.showChat`;\n\n const [value, setValue] = useState<string>(\"\");\n const [showChat, setShowChat] = useState<boolean>(() => {\n if (alwaysOpen) return true;\n try {\n const savedShow = localStorage.getItem(showChatKey);\n return savedShow !== null ? savedShow === 'true' : defaultOpen;\n } catch {\n return defaultOpen;\n }\n });\n\n // Submit an inline edit: replace the clicked user message, truncate after it, and re-run\n async function submitEdit_impl(messageId: string, newText: string) {\n if (!agentId) return;\n const userText = newText.trim();\n if (!userText) return;\n setError(null);\n setStreaming(true);\n\n const idx = messages.findIndex(m => m.id === messageId);\n if (idx === -1 || messages[idx].role !== 'user') {\n setStreaming(false);\n return;\n }\n\n const base = messages.slice(0, idx); // messages before the edited one\n const updatedUser: ChatMessage = { id: messageId, role: 'user', text: userText };\n const assistantId = genId();\n const newMessages: ChatMessage[] = [\n ...base,\n updatedUser,\n { id: assistantId, role: 'assistant', items: [], reasoning: '', reasoningOpen: false, mcpToolCalls: [], mcpToolResults: {} },\n ];\n setMessages(newMessages);\n setEditingMessageId(null);\n\n try {\n // Build history: base mapped + edited user\n const history = [\n ...base.map(m => (m.role === 'user' ? { role: 'user' as const, content: m.text } : { role: 'assistant' as const, items: Array.isArray(m.items) ? m.items : [] })),\n { role: 'user' as const, content: userText },\n ];\n const payload: any = {\n prompt: userText,\n chatId: currentChatId ?? undefined,\n messages: history,\n };\n setMessages(prev => prev.map(m => (m.id === assistantId || m.id === messageId ? { ...m, requestParams: payload } as any : m)));\n\n const res = await fetch(joinUrl(baseUrl, `/api/run/${agentId}`), {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload),\n });\n if (!res.ok || !res.body) {\n const t = await res.text().catch(() => '');\n throw new Error(t || `Request failed with ${res.status}`);\n }\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n let idxNew;\n while ((idxNew = buffer.indexOf('\\n')) !== -1) {\n const line = buffer.slice(0, idxNew).trim();\n buffer = buffer.slice(idxNew + 1);\n if (!line) continue;\n try {\n const evt = JSON.parse(line);\n if (evt?.type === 'meta') {\n // Capture execution preferences and assistant message id\n if (evt.actionExecuteMap && typeof evt.actionExecuteMap === 'object') {\n actionExecMapRef.current = evt.actionExecuteMap as Record<string, boolean>;\n }\n if (evt.assistantMessageId) {\n assistantMsgIdRef.current = String(evt.assistantMessageId);\n calledFinalActionsRef.current.clear();\n // Reset action tracking for new message\n actionParamsHistoryRef.current.clear();\n actionExecutionStatusRef.current.clear();\n setActionStatuses(new Map());\n }\n if (evt.chatId && !currentChatId) {\n setCurrentChatId(evt.chatId);\n hasChatRecordRef.current = true;\n const firstUser = userText;\n const title = (pendingFirstTitleRef.current || firstUser || 'New chat').slice(0, 80);\n const now = Date.now();\n upsertChatMeta({ id: evt.chatId, title, createdAt: now, updatedAt: now });\n saveChat({ id: evt.chatId, messages: newMessages, agentId });\n try { localStorage.setItem(currentChatKey, evt.chatId); } catch {}\n }\n continue;\n }\n if (evt?.type === 'reasoning') {\n const chunk = String(evt.text ?? '');\n setMessages(prev => prev.map(m => (m.id === assistantId && m.role === 'assistant' ? { ...m, reasoning: (m.reasoning ?? '') + chunk } : m)));\n continue;\n }\n if (evt?.type === 'tool-call') {\n // Handle MCP tool calls - mark as running\n const toolName = evt.toolName;\n const args = evt.args;\n setMessages(prev => prev.map(m =>\n m.id === assistantId && m.role === 'assistant' ? {\n ...m,\n mcpToolCalls: [...((m as any).mcpToolCalls || []), { toolName, args, timestamp: Date.now(), status: 'running' }]\n } : m\n ));\n continue;\n }\n if (evt?.type === 'tool-result') {\n // Handle MCP tool results - mark tool as completed\n const toolName = evt.toolName;\n const result = evt.result;\n setMessages(prev => prev.map(m =>\n m.id === assistantId && m.role === 'assistant' ? {\n ...m,\n mcpToolCalls: ((m as any).mcpToolCalls || []).map((call: any) =>\n call.toolName === toolName ? { ...call, status: 'completed' } : call\n ),\n mcpToolResults: {...((m as any).mcpToolResults || {}), [toolName]: result}\n } : m\n ));\n continue;\n }\n if (evt?.type === 'partial' || evt?.type === 'final') {\n const val = evt.value;\n if (val && Array.isArray(val.items)) {\n setMessages(prev => prev.map(m => (m.id === assistantId && m.role === 'assistant' ? { ...m, items: val.items } : m)));\n // Process actions based on trigger and executeOnStream preference\n processActions(val.items, evt.type === 'partial' ? 'partial' : 'final');\n }\n if (evt?.type === 'final') {\n setMessages(prev => prev.map(m => (m.id === assistantId && m.role === 'assistant' ? { ...m, reasoningOpen: false } : m)));\n }\n continue;\n }\n if (evt?.type === 'usage') {\n const tokens = evt?.value?.reasoningTokens;\n if (typeof tokens === 'number') {\n setMessages(prev => prev.map(m => (m.id === assistantId && m.role === 'assistant' ? { ...m, reasoningTokens: tokens } : m)));\n }\n continue;\n }\n if (evt?.type === 'error') {\n setError(String(evt.error ?? 'Unknown error'));\n continue;\n }\n } catch {\n // ignore malformed lines\n }\n }\n }\n } catch (e: any) {\n setError(String(e?.message ?? e));\n } finally {\n setStreaming(false);\n if (!currentChatId && !hasChatRecordRef.current) {\n const localId = `local-${genId()}`;\n setCurrentChatId(localId);\n hasChatRecordRef.current = true;\n const title = (pendingFirstTitleRef.current || 'New chat').slice(0, 80);\n const now = Date.now();\n upsertChatMeta({ id: localId, title, createdAt: now, updatedAt: now });\n saveChat({ id: localId, messages: messages, agentId });\n try { localStorage.setItem(currentChatKey, localId); } catch {}\n }\n }\n }\n\n const [messages, setMessages] = useState<ChatMessage[]>([]);\n const [streaming, setStreaming] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const abortControllerRef = useRef<AbortController | null>(null);\n const [currentChatId, setCurrentChatId] = useState<string | null>(null);\n const [historyOpen, setHistoryOpen] = useState<boolean>(false);\n const [historySearch, setHistorySearch] = useState<string>(\"\");\n const [historyTick, setHistoryTick] = useState<number>(0);\n const [maximized, setMaximized] = useState<boolean>(false);\n const [editingMessageId, setEditingMessageId] = useState<string | null>(null);\n const [editingMessageText, setEditingMessageText] = useState<string>(\"\");\n const textareaRef = useRef<HTMLTextAreaElement | null>(null);\n\n const scrollAnchorRef = useRef<HTMLDivElement | null>(null);\n const scrollContainerRef = useRef<HTMLDivElement | null>(null);\n const [isAtBottom, setIsAtBottom] = useState<boolean>(true);\n const suppressNextScrollRef = useRef<boolean>(false);\n const hasChatRecordRef = useRef<boolean>(false);\n const pendingFirstTitleRef = useRef<string | null>(null);\n const historyBtnRef = useRef<HTMLButtonElement | null>(null);\n const historyPopupRef = useRef<HTMLDivElement | null>(null);\n\n // Streaming meta refs\n const actionExecMapRef = useRef<Record<string, boolean>>({});\n const assistantMsgIdRef = useRef<string | undefined>(undefined);\n const calledFinalActionsRef = useRef<Set<string>>(new Set());\n \n // Action parameter tracking for completion detection\n const actionParamsHistoryRef = useRef<Map<string, any[]>>(new Map());\n const actionExecutionStatusRef = useRef<Map<string, 'executing' | 'executed'>>(new Map());\n const [actionStatuses, setActionStatuses] = useState<Map<string, 'executing' | 'executed'>>(new Map());\n\n // Helper to detect if action parameters have stabilized (finished streaming)\n const hasActionParamsStabilized = useCallback((actionKey: string, currentParams: any): boolean => {\n const history = actionParamsHistoryRef.current.get(actionKey) || [];\n const stringifiedParams = JSON.stringify(currentParams);\n \n // Add current params to history\n history.push(stringifiedParams);\n \n // Keep only last 5 entries to detect stabilization with better accuracy\n if (history.length > 5) {\n history.shift();\n }\n \n actionParamsHistoryRef.current.set(actionKey, history);\n \n // Consider stabilized if params haven't changed in last 3 updates (more robust)\n if (history.length >= 3) {\n const lastThree = history.slice(-3);\n return lastThree.every(params => params === lastThree[0]);\n }\n \n return false;\n }, []);\n\n const processActions = useCallback((items: any[] | undefined, trigger: 'partial' | 'final') => {\n if (!Array.isArray(items) || items.length === 0) return;\n \n items.forEach((it, idx) => {\n if (!it || typeof it !== 'object') return;\n if (it.type === 'action') {\n const name = String(it.name ?? '').trim();\n if (!name) return;\n const handler = actions.get(name);\n if (!handler) {\n console.warn(`Action handler not found for: ${name}`);\n return;\n }\n \n const executeOnStream = !!actionExecMapRef.current[name];\n const key = `${assistantMsgIdRef.current || 'assist'}:${name}:${idx}`;\n const actionKey = `${name}:${idx}`;\n \n try {\n if (trigger === 'partial' && executeOnStream) {\n // Execute on each partial update (streaming mode)\n setActionStatuses(prev => new Map(prev).set(actionKey, 'executing'));\n \n // Add debouncing for rapid fire actions\n const timeoutId = setTimeout(() => {\n Promise.resolve(handler(it.params, { \n name, \n trigger, \n index: idx, \n assistantMessageId: assistantMsgIdRef.current, \n chatId: currentChatId || undefined \n })).catch(error => {\n console.error(`Error executing streaming action ${name}:`, error);\n setActionStatuses(prev => new Map(prev).set(actionKey, 'executed'));\n });\n }, 50); // 50ms debounce\n \n // Store timeout for cleanup if needed\n actionExecutionStatusRef.current.set(`${actionKey}_timeout`, timeoutId as any);\n \n } else if (trigger === 'partial' && !executeOnStream) {\n // Check if action parameters have stabilized (finished streaming)\n const isStabilized = hasActionParamsStabilized(actionKey, it.params);\n const currentStatus = actionExecutionStatusRef.current.get(actionKey);\n \n if (isStabilized && currentStatus !== 'executed') {\n // Parameters have stabilized, execute the action\n actionExecutionStatusRef.current.set(actionKey, 'executed');\n setActionStatuses(prev => new Map(prev).set(actionKey, 'executed'));\n \n Promise.resolve(handler(it.params, { \n name, \n trigger: 'params_complete', \n index: idx, \n assistantMessageId: assistantMsgIdRef.current, \n chatId: currentChatId || undefined \n })).catch(error => {\n console.error(`Error executing stabilized action ${name}:`, error);\n });\n } else if (!currentStatus) {\n // First time seeing this action, mark as executing\n actionExecutionStatusRef.current.set(actionKey, 'executing');\n setActionStatuses(prev => new Map(prev).set(actionKey, 'executing'));\n }\n } else if (trigger === 'final') {\n // Final trigger - ensure action is executed if not already\n const currentStatus = actionExecutionStatusRef.current.get(actionKey);\n if (currentStatus !== 'executed' && !calledFinalActionsRef.current.has(key)) {\n calledFinalActionsRef.current.add(key);\n \n // Clear any pending timeouts\n const timeoutId = actionExecutionStatusRef.current.get(`${actionKey}_timeout`);\n if (timeoutId) {\n clearTimeout(timeoutId as any);\n actionExecutionStatusRef.current.delete(`${actionKey}_timeout`);\n }\n \n actionExecutionStatusRef.current.set(actionKey, 'executed');\n setActionStatuses(prev => new Map(prev).set(actionKey, 'executed'));\n \n Promise.resolve(handler(it.params, { \n name, \n trigger: executeOnStream ? 'final' : 'params_complete', \n index: idx, \n assistantMessageId: assistantMsgIdRef.current, \n chatId: currentChatId || undefined \n })).catch(error => {\n console.error(`Error executing final action ${name}:`, error);\n });\n }\n }\n } catch (error) {\n console.error(`Error processing action ${name}:`, error);\n }\n }\n });\n }, [actions, currentChatId, hasActionParamsStabilized]);\n\n type ChatMeta = { id: string; title: string; createdAt: number; updatedAt: number };\n type ChatData = { id: string; messages: ChatMessage[]; agentId?: string };\n\n const loadChatsIndex = (): ChatMeta[] => {\n try {\n const raw = localStorage.getItem(chatsIndexKey);\n return raw ? JSON.parse(raw) : [];\n } catch { return []; }\n };\n const saveChatsIndex = (list: ChatMeta[]) => {\n try { localStorage.setItem(chatsIndexKey, JSON.stringify(list)); } catch {}\n };\n const loadChat = (id: string): ChatData | null => {\n try { const raw = localStorage.getItem(chatKey(id)); return raw ? JSON.parse(raw) : null; } catch { return null; }\n };\n const saveChat = (data: ChatData) => {\n try { localStorage.setItem(chatKey(data.id), JSON.stringify(data)); } catch {}\n };\n const upsertChatMeta = (meta: ChatMeta) => {\n const list = loadChatsIndex();\n const idx = list.findIndex(x => x.id === meta.id);\n if (idx >= 0) list[idx] = meta; else list.unshift(meta);\n saveChatsIndex(list);\n };\n const deleteChatMeta = (id: string) => {\n const list = loadChatsIndex();\n const next = list.filter(x => x.id !== id);\n saveChatsIndex(next);\n };\n const deleteChatData = (id: string) => {\n try { localStorage.removeItem(chatKey(id)); } catch {}\n };\n const deleteChat = (id: string) => {\n deleteChatData(id);\n deleteChatMeta(id);\n if (currentChatId === id) {\n setMessages([]);\n setError(null);\n setCurrentChatId(null);\n hasChatRecordRef.current = false;\n pendingFirstTitleRef.current = null;\n try { localStorage.removeItem(currentChatKey); } catch {}\n }\n };\n\n useEffect(() => {\n if (suppressNextScrollRef.current) {\n suppressNextScrollRef.current = false;\n return;\n }\n if (!isAtBottom) return;\n scrollAnchorRef.current?.scrollIntoView({ behavior: 'smooth', block: 'end' });\n }, [messages, streaming, isAtBottom]);\n\n useEffect(() => {\n try {\n const savedCurrent = localStorage.getItem(currentChatKey);\n if (savedCurrent) {\n const cd = loadChat(savedCurrent);\n if (cd) {\n setCurrentChatId(cd.id);\n hasChatRecordRef.current = true;\n setMessages(cd.messages || []);\n }\n }\n } catch {}\n }, []);\n\n useEffect(() => {\n try { localStorage.setItem(showChatKey, String(showChat)); } catch {}\n }, [showChat]);\n\n // Cleanup effect for action timeouts\n useEffect(() => {\n return () => {\n // Clear all pending timeouts on unmount\n actionExecutionStatusRef.current.forEach((value, key) => {\n if (key.endsWith('_timeout')) {\n clearTimeout(value as any);\n }\n });\n };\n }, []);\n\n useEffect(() => {\n if (!currentChatId || !hasChatRecordRef.current) return;\n const data: ChatData = { id: currentChatId, messages, agentId };\n saveChat(data);\n const firstUser = messages.find(m => (m as any).role === 'user') as any;\n const title = (pendingFirstTitleRef.current || (firstUser?.text ?? 'New chat')).slice(0, 80);\n const meta: ChatMeta = { id: currentChatId, title, createdAt: Date.now(), updatedAt: Date.now() };\n upsertChatMeta(meta);\n try { localStorage.setItem(currentChatKey, currentChatId); } catch {}\n }, [messages, currentChatId, agentId]);\n\n const genId = () => `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;\n\n function handleStop() {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n abortControllerRef.current = null;\n }\n setStreaming(false);\n setError(\"Request stopped by user\");\n }\n\n async function handleSend() {\n if (!agentId) return;\n const userText = value.trim();\n if (!userText) return;\n setError(null);\n setStreaming(true);\n if (!currentChatId && messages.length === 0) {\n pendingFirstTitleRef.current = userText;\n }\n\n let userId = genId();\n let assistantId = genId();\n const newUser = { id: userId, role: 'user' as const, text: userText };\n const newAssistant = { id: assistantId, role: 'assistant' as const, items: [], reasoning: '', reasoningOpen: false, mcpToolCalls: [], mcpToolResults: {} };\n const newMessages: ChatMessage[] = [...messages, newUser, newAssistant];\n const history = [\n ...messages.map(m => (m.role === 'user' ? { role: 'user' as const, content: m.text } : { role: 'assistant' as const, items: Array.isArray(m.items) ? m.items : [] })),\n { role: 'user' as const, content: userText },\n ];\n setMessages(newMessages);\n setValue(\"\");\n\n try {\n // Create new AbortController for this request\n abortControllerRef.current = new AbortController();\n \n const payload: any = {\n prompt: userText,\n chatId: currentChatId ?? undefined,\n messages: history,\n };\n\n setMessages(prev => prev.map(m => (m.id === assistantId || m.id === userId ? { ...m, requestParams: payload } as any : m)));\n\n const res = await fetch(joinUrl(baseUrl, `/api/run/${agentId}`), {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload),\n signal: abortControllerRef.current.signal,\n });\n if (!res.ok || !res.body) {\n const t = await res.text().catch(() => '');\n throw new Error(t || `Request failed with ${res.status}`);\n }\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n let idx;\n while ((idx = buffer.indexOf('\\n')) !== -1) {\n const line = buffer.slice(0, idx).trim();\n buffer = buffer.slice(idx + 1);\n if (!line) continue;\n try {\n const evt = JSON.parse(line);\n if (evt?.type === 'meta') {\n // Capture execution preferences and assistant message id\n if (evt.actionExecuteMap && typeof evt.actionExecuteMap === 'object') {\n actionExecMapRef.current = evt.actionExecuteMap as Record<string, boolean>;\n }\n if (evt.assistantMessageId) {\n assistantMsgIdRef.current = String(evt.assistantMessageId);\n calledFinalActionsRef.current.clear();\n // Reset action tracking for new message\n actionParamsHistoryRef.current.clear();\n actionExecutionStatusRef.current.clear();\n setActionStatuses(new Map());\n }\n if (evt.chatId && !currentChatId) {\n setCurrentChatId(evt.chatId);\n hasChatRecordRef.current = true;\n const firstUser = userText;\n const title = (pendingFirstTitleRef.current || firstUser || 'New chat').slice(0, 80);\n const now = Date.now();\n upsertChatMeta({ id: evt.chatId, title, createdAt: now, updatedAt: now });\n saveChat({ id: evt.chatId, messages: newMessages, agentId });\n try { localStorage.setItem(currentChatKey, evt.chatId); } catch {}\n }\n continue;\n }\n if (evt?.type === 'reasoning') {\n const chunk = String(evt.text ?? '');\n setMessages(prev => prev.map(m => (m.id === assistantId && m.role === 'assistant' ? { ...m, reasoning: (m.reasoning ?? '') + chunk } : m)));\n continue;\n }\n if (evt?.type === 'tool-call') {\n // Handle MCP tool calls - mark as running\n const toolName = evt.toolName;\n const args = evt.args;\n setMessages(prev => prev.map(m =>\n m.id === assistantId && m.role === 'assistant' ? {\n ...m,\n mcpToolCalls: [...((m as any).mcpToolCalls || []), { toolName, args, timestamp: Date.now(), status: 'running' }]\n } : m\n ));\n continue;\n }\n if (evt?.type === 'tool-result') {\n // Handle MCP tool results - mark tool as completed\n const toolName = evt.toolName;\n const result = evt.result;\n setMessages(prev => prev.map(m =>\n m.id === assistantId && m.role === 'assistant' ? {\n ...m,\n mcpToolCalls: ((m as any).mcpToolCalls || []).map((call: any) =>\n call.toolName === toolName ? { ...call, status: 'completed' } : call\n ),\n mcpToolResults: {...((m as any).mcpToolResults || {}), [toolName]: result}\n } : m\n ));\n continue;\n }\n if (evt?.type === 'partial' || evt?.type === 'final') {\n const val = evt.value;\n if (val && Array.isArray(val.items)) {\n setMessages(prev => prev.map(m => (m.id === assistantId && m.role === 'assistant' ? { ...m, items: val.items } : m)));\n // Process actions based on trigger and executeOnStream preference\n processActions(val.items, evt.type === 'partial' ? 'partial' : 'final');\n }\n if (evt?.type === 'final') {\n setMessages(prev => prev.map(m => (m.id === assistantId && m.role === 'assistant' ? { ...m, reasoningOpen: false } : m)));\n }\n continue;\n }\n if (evt?.type === 'usage') {\n const tokens = evt?.value?.reasoningTokens;\n if (typeof tokens === 'number') {\n setMessages(prev => prev.map(m => (m.id === assistantId && m.role === 'assistant' ? { ...m, reasoningTokens: tokens } : m)));\n }\n continue;\n }\n if (evt?.type === 'error') {\n setError(String(evt.error ?? 'Unknown error'));\n continue;\n }\n } catch {\n // ignore malformed lines\n }\n }\n }\n } catch (e: any) {\n setError(String(e?.message ?? e));\n } finally {\n setStreaming(false);\n if (!currentChatId && !hasChatRecordRef.current) {\n const localId = `local-${genId()}`;\n setCurrentChatId(localId);\n hasChatRecordRef.current = true;\n const title = (pendingFirstTitleRef.current || 'New chat').slice(0, 80);\n const now = Date.now();\n upsertChatMeta({ id: localId, title, createdAt: now, updatedAt: now });\n saveChat({ id: localId, messages: messages, agentId });\n try { localStorage.setItem(currentChatKey, localId); } catch {}\n }\n }\n }\n\n function renderAssistantItems(items: any[], mcpToolCalls?: Array<{\n toolName: string;\n args: any;\n timestamp: number;\n status?: 'pending' | 'running' | 'completed' | 'failed';\n }>, mcpToolResults?: Record<string, any>) {\n if (!Array.isArray(items) || items.length === 0) return null;\n return (\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '12px'\n }}>\n {items.map((it, idx) => {\n const key = `it-${idx}`;\n if (typeof it === 'string') {\n return (\n <div key={key} style={{\n borderRadius: '12px',\n padding: '16px',\n fontSize: '14px',\n whiteSpace: 'pre-wrap',\n backgroundColor: resolvedColors.cardBackground,\n border: `1px solid ${resolvedColors.borderColor}`,\n color: resolvedColors.textColor\n }}>\n {it}\n </div>\n );\n }\n if (it && typeof it === 'object') {\n if (it.type === 'action') {\n const actionKey = `${String(it.name ?? 'action')}:${idx}`;\n const status = actionStatuses.get(actionKey);\n \n return (\n <div key={key} style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '8px'\n }}>\n {/* Action execution status */}\n <div style={{\n padding: '8px',\n fontSize: '12px',\n color: resolvedColors.mutedTextColor\n }}>\n {status === 'executing' ? (\n <span style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px'\n }}>\n <svg \n style={{\n animation: 'spin 1s linear infinite',\n height: '12px',\n width: '12px'\n }}\n xmlns=\"http://www.w3.org/2000/svg\" \n fill=\"none\" \n viewBox=\"0 0 24 24\"\n >\n <circle \n style={{ opacity: 0.25 }}\n cx=\"12\" \n cy=\"12\" \n r=\"10\" \n stroke=\"currentColor\" \n strokeWidth=\"4\"\n />\n <path \n style={{ opacity: 0.75 }}\n fill=\"currentColor\" \n d=\"m4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n {String(it.name ?? 'action')} is executing\n </span>\n ) : (\n <span style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px'\n }}>\n <span style={{\n display: 'inline-block',\n height: '6px',\n width: '6px',\n borderRadius: '50%',\n backgroundColor: '#10b981'\n }} />\n {String(it.name ?? 'action')} has executed\n </span>\n )}\n </div>\n </div>\n );\n }\n if (it.type === 'ui-component' || it.type === 'ui') {\n const compName = String(it.name ?? it.component ?? '').trim();\n const Comp = compName ? components.get(compName) : undefined;\n if (Comp) {\n return (\n <div key={key} style={{\n borderRadius: '12px',\n padding: '12px',\n backgroundColor: resolvedColors.inputBackground,\n border: `1px solid ${resolvedColors.borderColor}`\n }}>\n <Comp {...(it.props || {})} />\n </div>\n );\n }\n return (\n <div key={key} style={{\n borderRadius: '12px',\n padding: '16px',\n backgroundColor: resolvedColors.inputBackground,\n border: `1px solid ${resolvedColors.borderColor}`\n }}>\n <div style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '8px',\n fontSize: '12px',\n marginBottom: '8px',\n color: resolvedColors.mutedTextColor\n }}>\n <span style={{\n padding: '2px 8px',\n borderRadius: '4px',\n backgroundColor: resolvedColors.accentColor,\n border: `1px solid ${resolvedColors.borderColor}`\n }}>UI</span>\n <span>{compName || 'component'}</span>\n <span style={{\n marginLeft: '8px',\n opacity: 0.7\n }}>(unregistered)</span>\n </div>\n <pre style={{\n fontSize: '12px',\n overflow: 'auto',\n color: resolvedColors.mutedTextColor,\n margin: '0',\n fontFamily: 'ui-monospace, SFMono-Regular, \"SF Mono\", Consolas, \"Liberation Mono\", Menlo, monospace'\n }}>{JSON.stringify(it.props ?? {}, null, 2)}</pre>\n </div>\n );\n }\n return (\n <div key={key} style={{\n borderRadius: '12px',\n padding: '16px',\n fontSize: '14px',\n backgroundColor: resolvedColors.cardBackground,\n border: `1px solid ${resolvedColors.borderColor}`\n }}>\n <pre style={{\n fontSize: '12px',\n overflow: 'auto',\n color: resolvedColors.mutedTextColor,\n margin: '0',\n fontFamily: 'ui-monospace, SFMono-Regular, \"SF Mono\", Consolas, \"Liberation Mono\", Menlo, monospace'\n }}>{JSON.stringify(it, null, 2)}</pre>\n </div>\n );\n }\n return null;\n })}\n\n {/* MCP Tool Calls - Display unique tool names only */}\n {mcpToolCalls && mcpToolCalls.length > 0 && (() => {\n // Get unique tool names and their latest status\n const uniqueTools = new Map<string, { status: string; count: number }>();\n\n mcpToolCalls.forEach((toolCall) => {\n const existing = uniqueTools.get(toolCall.toolName);\n if (!existing || (existing.status === 'running' && toolCall.status === 'completed')) {\n uniqueTools.set(toolCall.toolName, {\n status: toolCall.status || 'pending',\n count: (existing?.count || 0) + 1\n });\n } else if (existing) {\n existing.count++;\n }\n });\n\n const hasRunningTools = Array.from(uniqueTools.values()).some(tool => tool.status === 'running');\n const completedToolsCount = Array.from(uniqueTools.values()).filter(tool => tool.status === 'completed').length;\n\n return (\n <div style={{\n borderRadius: '12px',\n padding: '12px',\n backgroundColor: resolvedColors.cardBackground,\n border: `1px solid ${resolvedColors.borderColor}`,\n fontSize: '12px',\n color: resolvedColors.mutedTextColor\n }}>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginBottom: '8px'\n }}>\n <span style={{\n display: 'inline-block',\n height: '8px',\n width: '8px',\n borderRadius: '50%',\n backgroundColor: hasRunningTools ? '#3b82f6' : '#10b981'\n }} />\n <span>\n {hasRunningTools\n ? 'Agent is using tools'\n : completedToolsCount > 0\n ? `Agent used ${completedToolsCount} tool${completedToolsCount > 1 ? 's' : ''}`\n : 'Agent used tools'\n }\n </span>\n </div>\n <div style={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: '6px'\n }}>\n {Array.from(uniqueTools.entries()).map(([toolName, toolInfo]) => (\n <div key={toolName} style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n fontSize: '11px',\n padding: '4px 8px',\n borderRadius: '6px',\n backgroundColor: resolvedColors.inputBackground,\n border: `1px solid ${resolvedColors.borderColor}`\n }}>\n {toolInfo.status === 'running' ? (\n <svg\n style={{\n animation: 'spin 1s linear infinite',\n height: '8px',\n width: '8px',\n flexShrink: 0\n }}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n style={{ opacity: 0.25 }}\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n style={{ opacity: 0.75 }}\n fill=\"currentColor\"\n d=\"m4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n ) : (\n <span style={{\n display: 'inline-block',\n height: '4px',\n width: '4px',\n borderRadius: '50%',\n backgroundColor: toolInfo.status === 'completed' ? '#10b981' : '#ef4444',\n flexShrink: 0\n }} />\n )}\n <span style={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n maxWidth: '120px'\n }}>\n {toolName}\n </span>\n {toolInfo.count > 1 && (\n <span style={{\n opacity: 0.6,\n flexShrink: 0,\n fontSize: '10px'\n }}>\n ×{toolInfo.count}\n </span>\n )}\n </div>\n ))}\n </div>\n </div>\n );\n })()}\n </div>\n );\n }\n\n // Apply theme colors with prop overrides\n const themeColorScheme = themeColors[theme];\n const resolvedColors = {\n primaryColor: primaryColor || themeColorScheme.primaryColor,\n backgroundColor: backgroundColor || themeColorScheme.backgroundColor,\n borderColor: borderColor || themeColorScheme.borderColor,\n textColor: textColor || themeColorScheme.textColor,\n accentColor: accentColor || themeColorScheme.accentColor,\n mutedTextColor: themeColorScheme.mutedTextColor,\n inputBackground: themeColorScheme.inputBackground,\n cardBackground: themeColorScheme.cardBackground,\n hoverBackground: themeColorScheme.hoverBackground,\n };\n\n // Generate dynamic styles based on props\n const containerStyles = {\n backgroundColor: resolvedColors.backgroundColor,\n color: resolvedColors.textColor,\n height,\n display: 'flex',\n width: '100%',\n fontFamily: 'Rubik, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif'\n };\n \n const chatPanelStyles = {\n width: typeof width === 'number' ? `${width}px` : width,\n maxWidth: typeof maxWidth === 'number' ? `${maxWidth}px` : maxWidth,\n display: 'flex',\n flexDirection: 'column' as const,\n transition: 'all 0.3s ease-out',\n overflow: 'hidden'\n };\n \n const floatingButtonStyles = {\n position: 'fixed' as const,\n bottom: typeof floatingButtonPosition.bottom === 'number' ? `${floatingButtonPosition.bottom}px` : floatingButtonPosition.bottom,\n right: floatingButtonPosition.right ? (typeof floatingButtonPosition.right === 'number' ? `${floatingButtonPosition.right}px` : floatingButtonPosition.right) : undefined,\n top: floatingButtonPosition.top ? (typeof floatingButtonPosition.top === 'number' ? `${floatingButtonPosition.top}px` : floatingButtonPosition.top) : undefined,\n left: floatingButtonPosition.left ? (typeof floatingButtonPosition.left === 'number' ? `${floatingButtonPosition.left}px` : floatingButtonPosition.left) : undefined,\n zIndex: 1000\n };\n\n const contentBorderRadius = typeof borderRadius === 'number' ? `${borderRadius}px` : borderRadius;\n \n // Component ID for scoped animations\n const componentId = useRef(`hsafa-chat-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`);\n\n return (\n <div className={className} style={containerStyles} dir={dir} data-hsafa-chat={componentId.current}>\n {/* Main content area */}\n <div style={{\n display: 'flex',\n alignItems: 'stretch',\n justifyContent: 'stretch',\n width: '100%',\n height: '100%',\n transition: 'all 0.3s ease-out',\n padding: showChat && enableContentPadding ? '16px' : '0'\n }}>\n <div style={{\n position: 'relative',\n display: 'flex',\n width: '100%',\n height: '100%',\n transition: 'all 0.3s ease-out',\n borderRadius: showChat && enableContentBorder ? contentBorderRadius : '0'\n }}>\n {showChat && enableContentBorder ? (\n <div\n style={{\n width: '100%',\n height: '100%',\n transition: 'all 0.3s ease-out',\n borderRadius: contentBorderRadius,\n border: streaming && enableBorderAnimation ? 'none' : `1px solid ${resolvedColors.borderColor}`,\n padding: streaming && enableBorderAnimation ? '1.5px' : '0',\n background: streaming && enableBorderAnimation ? \n `linear-gradient(120deg, ${resolvedColors.primaryColor}dd 0%, ${resolvedColors.primaryColor}88 25%, ${resolvedColors.primaryColor}00 50%, ${resolvedColors.primaryColor}88 75%, ${resolvedColors.primaryColor}dd 100%)` : \n 'transparent',\n backgroundSize: streaming && enableBorderAnimation ? '300% 300%' : 'auto',\n animation: streaming && enableBorderAnimation ? `${componentId.current}-border-flow 3s ease-in-out infinite` : 'none',\n filter: streaming && enableBorderAnimation ? `drop-shadow(0 0 10px ${resolvedColors.primaryColor}40)` : 'none'\n }}\n >\n <div \n className=\"content-container\"\n style={{\n width: '100%',\n height: '100%',\n borderRadius: contentBorderRadius,\n backgroundColor: resolvedColors.backgroundColor,\n // overflowY: 'auto',\n overflowX: 'hidden',\n position: 'relative',\n isolation: 'isolate',\n contain: 'layout style paint',\n transform: 'translateZ(0)', // Creates a new containing block for fixed elements\n // Custom scrollbar styling\n scrollbarWidth: 'thin',\n scrollbarColor: `${resolvedColors.mutedTextColor}40 transparent`\n }}\n >\n {children}\n </div>\n </div>\n ) : (\n <div \n className=\"content-container\"\n style={{ \n width: '100%', \n height: '100%',\n position: 'relative',\n isolation: 'isolate',\n contain: 'layout style paint',\n transform: 'translateZ(0)', // Creates a new containing block for fixed elements\n // overflowY: 'auto',\n overflowX: 'hidden',\n // Custom scrollbar styling\n scrollbarWidth: 'thin',\n scrollbarColor: `${resolvedColors.mutedTextColor}40 transparent`\n }}\n >\n {children}\n </div>\n )}\n </div>\n </div>\n {/* Right chat column */}\n <div\n className={chatContainerClassName}\n style={{\n ...chatPanelStyles,\n height,\n backgroundColor: showChat || alwaysOpen ? resolvedColors.backgroundColor : 'transparent',\n ...(showChat || alwaysOpen\n ? (maximized && expandable\n ? {\n position: 'fixed',\n inset: '0',\n zIndex: 1050,\n width: '100%',\n maxWidth: '100%',\n padding: '24px'\n }\n : {\n padding: '24px 16px',\n opacity: 1,\n transform: 'translateX(0)',\n pointerEvents: 'auto'\n })\n : {\n width: '0',\n maxWidth: '0',\n padding: '24px 0',\n opacity: 0,\n transform: dir === 'rtl' ? 'translateX(8px)' : 'translateX(-8px)',\n pointerEvents: 'none'\n })\n }}\n >\n {/* Header */}\n <div style={{\n marginBottom: '24px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between'\n }}>\n <div style={{ minWidth: '0' }}>\n <h1\n title={title}\n style={{\n color: resolvedColors.textColor,\n fontSize: '18px',\n fontWeight: '600',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n margin: '0'\n }}\n >\n {title}\n </h1>\n </div>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n position: 'relative',\n color: resolvedColors.mutedTextColor\n }}>\n {/* Expand / Pop-out */}\n {expandable && (\n <button\n aria-label={maximized ? 'Minimize' : 'Maximize'}\n style={{ \n backgroundColor: 'transparent',\n color: resolvedColors.mutedTextColor,\n border: 'none',\n borderRadius: '8px',\n padding: '8px',\n cursor: 'pointer',\n transition: 'all 0.2s ease-out',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = resolvedColors.hoverBackground;\n e.currentTarget.style.color = resolvedColors.textColor;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.color = resolvedColors.mutedTextColor;\n }}\n onClick={() => { \n setShowChat(true); \n setMaximized(m => !m); \n }}\n >\n <IconArrowsMaximize size={20} stroke={2} />\n </button>\n )}\n {/* New */}\n <button\n aria-label=\"New\"\n style={{ \n backgroundColor: 'transparent',\n color: resolvedColors.mutedTextColor,\n border: 'none',\n borderRadius: '8px',\n padding: '8px',\n cursor: 'pointer',\n transition: 'all 0.2s ease-out',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = resolvedColors.hoverBackground;\n e.currentTarget.style.color = resolvedColors.textColor;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.color = resolvedColors.mutedTextColor;\n }}\n onClick={() => {\n if (streaming) return; // don't interrupt streaming\n setMessages([]);\n setError(null);\n setCurrentChatId(null);\n hasChatRecordRef.current = false;\n pendingFirstTitleRef.current = null;\n try { localStorage.removeItem(currentChatKey); } catch {}\n }}\n >\n <IconPlus size={20} stroke={2} />\n </button>\n {/* History */}\n <button\n aria-label=\"History\"\n style={{ \n backgroundColor: 'transparent',\n color: resolvedColors.mutedTextColor,\n border: 'none',\n borderRadius: '8px',\n padding: '8px',\n cursor: 'pointer',\n transition: 'all 0.2s ease-out',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = resolvedColors.hoverBackground;\n e.currentTarget.style.color = resolvedColors.textColor;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.color = resolvedColors.mutedTextColor;\n }}\n onClick={() => setHistoryOpen(o => !o)}\n ref={historyBtnRef}\n >\n <IconHistory size={20} stroke={2} />\n </button>\n {historyOpen && (() => {\n // Render history modal inline with proper positioning\n const modalContent = (\n <>\n {/* Backdrop with blur */}\n <div\n style={{\n position: 'fixed',\n inset: '0',\n zIndex: 1100,\n backgroundColor: 'rgba(0, 0, 0, 0.4)',\n backdropFilter: 'blur(4px)',\n WebkitBackdropFilter: 'blur(4px)'\n }}\n onClick={() => setHistoryOpen(false)}\n />\n {/* Command palette panel */}\n <div\n ref={historyPopupRef}\n style={{\n position: 'fixed',\n left: '50%',\n top: '64px',\n transform: 'translateX(-50%)',\n zIndex: 1101,\n width: '680px',\n maxWidth: '94vw',\n overflow: 'hidden',\n borderRadius: '16px',\n border: `1px solid ${resolvedColors.borderColor}`,\n backgroundColor: `${resolvedColors.backgroundColor}f0`,\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n backdropFilter: 'blur(16px)',\n WebkitBackdropFilter: 'blur(16px)'\n }}\n >\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n borderBottom: `1px solid ${resolvedColors.borderColor}`,\n padding: '12px 16px'\n }}>\n <div style={{ flex: '1' }}>\n <input\n autoFocus\n value={historySearch}\n onChange={(e) => setHistorySearch(e.target.value)}\n placeholder=\"Search\"\n style={{\n width: '100%',\n borderRadius: '8px',\n backgroundColor: resolvedColors.inputBackground,\n padding: '8px 12px',\n fontSize: '14px',\n color: resolvedColors.textColor,\n border: `1px solid ${resolvedColors.borderColor}`,\n outline: 'none'\n }}\n onFocus={(e) => e.currentTarget.style.borderColor = resolvedColors.primaryColor}\n onBlur={(e) => e.currentTarget.style.borderColor = resolvedColors.borderColor}\n />\n </div>\n </div>\n <div style={{\n maxHeight: '60vh',\n overflowY: 'auto'\n }}>\n {(() => {\n const q = historySearch.toLowerCase().trim();\n let list = loadChatsIndex();\n if (q) list = list.filter(m => (m.title || '').toLowerCase().includes(q));\n if (!list || list.length === 0) return (\n <div style={{\n padding: '24px',\n color: resolvedColors.mutedTextColor,\n textAlign: 'center'\n }}>No chats found.</div>\n );\n return (\n <div>\n {list.map((meta, index) => (\n <div key={meta.id} style={{\n borderTop: index > 0 ? `1px solid ${resolvedColors.borderColor}` : 'none'\n }}>\n <div style={{\n display: 'flex',\n width: '100%',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '12px',\n padding: '12px',\n backgroundColor: meta.id === currentChatId ? resolvedColors.cardBackground : 'transparent'\n }}>\n <button\n style={{\n flex: '1',\n textAlign: 'left',\n transition: 'background-color 0.2s',\n borderRadius: '8px',\n padding: '8px',\n border: 'none',\n backgroundColor: 'transparent',\n cursor: 'pointer',\n color: resolvedColors.textColor\n }}\n onMouseEnter={(e) => e.currentTarget.style.backgroundColor = resolvedColors.hoverBackground}\n onMouseLeave={(e) => e.currentTarget.style.backgroundColor = 'transparent'}\n onClick={() => {\n const data = loadChat(meta.id);\n if (data) {\n setCurrentChatId(meta.id);\n hasChatRecordRef.current = true;\n setMessages(data.messages || []);\n try { localStorage.setItem(currentChatKey, meta.id); } catch {}\n setHistoryOpen(false);\n setShowChat(true);\n }\n }}\n >\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '12px'\n }}>\n <div style={{ minWidth: '0', flex: '1' }}>\n <div style={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n fontSize: '14px',\n color: resolvedColors.textColor\n }}>{meta.title || 'Untitled chat'}</div>\n </div>\n <div style={{\n flexShrink: 0,\n fontSize: '12px',\n color: resolvedColors.mutedTextColor\n }}>{timeAgo(meta.updatedAt)}</div>\n </div>\n </button>\n <button\n style={{\n flexShrink: 0,\n borderRadius: '6px',\n padding: '8px',\n color: resolvedColors.mutedTextColor,\n border: '1px solid transparent',\n backgroundColor: 'transparent',\n cursor: 'pointer',\n transition: 'all 0.2s'\n }}\n title=\"Delete chat\"\n onMouseEnter={(e) => {\n e.currentTarget.style.color = '#ef4444';\n e.currentTarget.style.backgroundColor = 'rgba(239, 68, 68, 0.1)';\n e.currentTarget.style.borderColor = 'rgba(239, 68, 68, 0.3)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.color = resolvedColors.mutedTextColor;\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.borderColor = 'transparent';\n }}\n onClick={(e) => {\n e.stopPropagation();\n deleteChat(meta.id);\n setHistoryTick(t => t + 1);\n }}\n >\n <IconTrash size={16} stroke={2} />\n </button>\n </div>\n </div>\n ))}\n </div>\n );\n })()}\n </div>\n </div>\n </>\n );\n \n // Only use portal if document.body is available\n if (typeof document !== 'undefined' && document.body) {\n return createPortal(modalContent, document.body);\n }\n \n // Fallback to inline rendering\n return modalContent;\n })()}\n {/* More / Next */}\n {!alwaysOpen && (\n <button\n aria-label=\"Close chat\"\n style={{ \n backgroundColor: 'transparent',\n color: resolvedColors.mutedTextColor,\n border: 'none',\n borderRadius: '8px',\n padding: '8px',\n cursor: 'pointer',\n transition: 'all 0.2s ease-out',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = resolvedColors.hoverBackground;\n e.currentTarget.style.color = resolvedColors.textColor;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.color = resolvedColors.mutedTextColor;\n }}\n onClick={() => setShowChat(false)}\n >\n <IconChevronRight size={20} stroke={2} style={{ transform: dir === 'rtl' ? 'rotate(180deg)' : 'none' }} />\n </button>\n )}\n </div>\n </div>\n\n {/* Scrollable content area (conversation + status) */}\n <div\n className=\"chat-scroll-container\"\n style={{\n flex: '1',\n overflowY: 'auto',\n overflowX: 'hidden',\n padding: '16px 4px 16px 4px',\n display: 'flex',\n flexDirection: 'column',\n gap: '16px',\n scrollBehavior: 'smooth'\n }}\n ref={scrollContainerRef}\n onScroll={(e) => {\n const el = e.currentTarget;\n const threshold = 64; // px from bottom considered \"at bottom\"\n const distanceFromBottom = el.scrollHeight - (el.scrollTop + el.clientHeight);\n const atBottom = distanceFromBottom <= threshold;\n if (atBottom !== isAtBottom) setIsAtBottom(atBottom);\n }}\n >\n {error && (\n <div style={{\n margin: '0 8px',\n borderRadius: '12px',\n backgroundColor: 'rgba(239, 68, 68, 0.1)',\n color: '#fca5a5',\n border: '1px solid rgba(239, 68, 68, 0.3)',\n padding: '12px',\n fontSize: '14px'\n }}>{error}</div>\n )}\n {messages.length === 0 && !streaming && (\n <div style={{\n margin: '0 8px',\n borderRadius: '12px',\n padding: '16px',\n border: `1px solid ${resolvedColors.borderColor}`,\n backgroundColor: resolvedColors.accentColor,\n color: resolvedColors.mutedTextColor\n }}>\n Start by sending a message to the agent.\n </div>\n )}\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '16px'\n }}>\n {messages.map((m, i) => (\n <div key={m.id} style={{ padding: '0 4px' }}>\n {m.role === 'user' ? (\n editingMessageId === m.id ? (\n <div style={{\n maxWidth: '720px',\n borderRadius: '16px',\n padding: '8px',\n fontSize: '15px',\n border: `2px solid ${resolvedColors.primaryColor}`,\n backgroundColor: resolvedColors.accentColor,\n color: resolvedColors.textColor\n }}>\n <textarea\n autoFocus\n style={{\n width: '100%',\n resize: 'none',\n backgroundColor: 'transparent',\n padding: '8px',\n lineHeight: '1.6',\n outline: 'none',\n border: 'none',\n color: 'inherit',\n fontFamily: 'inherit',\n fontSize: 'inherit'\n }}\n rows={Math.max(2, Math.min(10, Math.ceil((editingMessageText || m.text).length / 60)))}\n value={editingMessageText}\n onChange={(e) => setEditingMessageText(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Escape') {\n setEditingMessageId(null);\n } else if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n if (!streaming) submitEdit_impl(m.id, editingMessageText || m.text);\n }\n }}\n />\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: '8px',\n padding: '8px 8px 8px 0'\n }}>\n <button\n style={{\n borderRadius: '8px',\n padding: '4px 12px',\n fontSize: '14px',\n transition: 'background-color 0.2s',\n border: `1px solid ${resolvedColors.borderColor}`,\n color: resolvedColors.mutedTextColor,\n backgroundColor: 'transparent',\n cursor: 'pointer'\n }}\n onMouseEnter={(e) => e.currentTarget.style.backgroundColor = resolvedColors.inputBackground}\n onMouseLeave={(e) => e.currentTarget.style.backgroundColor = 'transparent'}\n onClick={() => setEditingMessageId(null)}\n >\n Cancel\n </button>\n <button\n style={{\n borderRadius: '8px',\n padding: '4px 12px',\n fontSize: '14px',\n transition: 'border-color 0.2s',\n border: `1px solid ${resolvedColors.borderColor}`,\n backgroundColor: resolvedColors.cardBackground,\n color: resolvedColors.textColor,\n cursor: 'pointer'\n }}\n onMouseEnter={(e) => e.currentTarget.style.borderColor = resolvedColors.primaryColor}\n onMouseLeave={(e) => e.currentTarget.style.borderColor = resolvedColors.borderColor}\n onClick={() => { if (!streaming) submitEdit_impl(m.id, editingMessageText || m.text); }}\n >\n Save\n </button>\n </div>\n </div>\n ) : (\n <div\n title=\"Click to edit\"\n onClick={() => {\n if (streaming) return;\n setEditingMessageId(m.id);\n setEditingMessageText(m.text);\n }}\n style={{\n maxWidth: '720px',\n borderRadius: '16px',\n padding: '16px',\n fontSize: '15px',\n lineHeight: '1.6',\n whiteSpace: 'pre-wrap',\n cursor: 'pointer',\n transition: 'background-color 0.2s',\n backgroundColor: resolvedColors.accentColor,\n color: resolvedColors.textColor\n }}\n onMouseEnter={(e) => e.currentTarget.style.backgroundColor = resolvedColors.hoverBackground}\n onMouseLeave={(e) => e.currentTarget.style.backgroundColor = resolvedColors.accentColor}\n >\n {m.text}\n </div>\n )\n ) : (\n <div style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '12px'\n }}>\n {m.reasoning && (\n <div\n style={{\n borderRadius: '12px',\n padding: '12px',\n cursor: 'pointer',\n backgroundColor: resolvedColors.inputBackground,\n border: `1px solid ${resolvedColors.borderColor}`\n }}\n onClick={() => {\n suppressNextScrollRef.current = true;\n setMessages(prev => prev.map(x => x.id === m.id && x.role === 'assistant' ? { ...x, reasoningOpen: !x.reasoningOpen } : x));\n }}\n >\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: '4px'\n }}>\n <div style={{\n fontSize: '12px',\n color: resolvedColors.mutedTextColor\n }}>Reasoning</div>\n <button\n type=\"button\"\n style={{\n fontSize: '12px',\n transition: 'color 0.2s',\n color: resolvedColors.mutedTextColor,\n background: 'none',\n border: 'none',\n cursor: 'pointer'\n }}\n onMouseEnter={(e) => e.currentTarget.style.color = resolvedColors.textColor}\n onMouseLeave={(e) => e.currentTarget.style.color = resolvedColors.mutedTextColor}\n >\n {m.reasoningOpen ? 'Hide' : 'Show full'}\n </button>\n </div>\n {m.reasoningOpen ? (\n <pre style={{\n fontSize: '12px',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n color: resolvedColors.mutedTextColor,\n margin: '0',\n fontFamily: 'ui-monospace, SFMono-Regular, \"SF Mono\", Consolas, \"Liberation Mono\", Menlo, monospace'\n }}>{m.reasoning}</pre>\n ) : (\n (() => {\n const lines = (m.reasoning || '').trim().split('\\n').filter(line => line.trim());\n const finalLine = lines.length > 0 ? lines[lines.length - 1] : '';\n return (\n <pre style={{\n fontSize: '12px',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n color: resolvedColors.mutedTextColor,\n margin: '0',\n fontFamily: 'ui-monospace, SFMono-Regular, \"SF Mono\", Consolas, \"Liberation Mono\", Menlo, monospace'\n }}>\n {finalLine || '…'}\n </pre>\n );\n })()\n )}\n </div>\n )}\n {renderAssistantItems(m.items, (m as any).mcpToolCalls, (m as any).mcpToolResults)}\n {streaming && i === messages.length - 1 && (\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n fontSize: '12px',\n color: resolvedColors.mutedTextColor\n }}>\n <span style={{\n display: 'inline-block',\n height: '8px',\n width: '8px',\n borderRadius: '50%',\n backgroundColor: resolvedColors.mutedTextColor,\n animation: 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite'\n }} />\n <span>Working…</span>\n </div>\n )}\n </div>\n )}\n </div>\n ))}\n </div>\n <div ref={scrollAnchorRef} />\n </div>\n\n {/* Composer */}\n <div style={{\n position: 'sticky',\n bottom: '0',\n marginTop: 'auto',\n paddingBottom: '8px',\n paddingTop: '4px',\n backgroundColor: resolvedColors.backgroundColor\n }}>\n {/* Unified input container */}\n <div style={{\n position: 'relative',\n flex: '1'\n }}>\n {/* The box */}\n <div style={{\n position: 'relative',\n width: '100%',\n borderRadius: '16px',\n paddingBottom: '48px',\n paddingTop: '16px',\n border: `1px solid ${resolvedColors.borderColor}`,\n backgroundColor: resolvedColors.accentColor\n }}>\n {/* Text area */}\n <div style={{ padding: '0 16px' }}>\n <textarea\n aria-label=\"Prompt\"\n rows={2}\n style={{\n height: 'auto',\n width: '100%',\n resize: 'none',\n backgroundColor: 'transparent',\n fontSize: '15px',\n lineHeight: '1.6',\n outline: 'none',\n border: 'none',\n color: resolvedColors.textColor,\n fontFamily: 'inherit'\n }}\n placeholder={placeholder}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n if (!streaming) handleSend();\n }\n }}\n ref={textareaRef}\n />\n </div>\n\n {/* Bottom-left actions inside the box */}\n <div style={{\n position: 'absolute',\n bottom: '8px',\n left: '8px',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n color: resolvedColors.mutedTextColor\n }}>\n <button\n style={{\n borderRadius: '8px',\n padding: '8px',\n transition: 'all 0.2s',\n backgroundColor: 'transparent',\n border: 'none',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'inherit'\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = `${resolvedColors.backgroundColor}99`;\n e.currentTarget.style.color = resolvedColors.textColor;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.color = resolvedColors.mutedTextColor;\n }}\n aria-label=\"Attach files\"\n >\n <IconPaperclip size={18} stroke={2} />\n </button>\n <button\n style={{\n borderRadius: '8px',\n padding: '8px',\n transition: 'all 0.2s',\n backgroundColor: 'transparent',\n border: 'none',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'inherit'\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = `${resolvedColors.backgroundColor}99`;\n e.currentTarget.style.color = resolvedColors.textColor;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.color = resolvedColors.mutedTextColor;\n }}\n aria-label=\"Insert link\"\n >\n <IconLink size={18} stroke={2} />\n </button>\n </div>\n\n {/* Bottom-right send button */}\n <div style={{\n position: 'absolute',\n bottom: '8px',\n right: '8px'\n }}>\n <button\n aria-label={streaming ? \"Stop\" : \"Send\"}\n disabled={!streaming && !value.trim()}\n style={{\n borderRadius: '12px',\n padding: '12px',\n transition: 'all 0.2s ease-out',\n border: `1px solid ${streaming ? '#ef4444' : resolvedColors.borderColor}`,\n backgroundColor: streaming ? '#ef444420' : resolvedColors.cardBackground,\n color: streaming ? '#ef4444' : resolvedColors.mutedTextColor,\n opacity: (!streaming && !value.trim()) ? 0.4 : 1,\n cursor: (!streaming && !value.trim()) ? 'not-allowed' : 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n }}\n onMouseEnter={(e) => {\n if (!e.currentTarget.disabled) {\n if (streaming) {\n e.currentTarget.style.borderColor = '#dc2626';\n e.currentTarget.style.backgroundColor = '#dc262630';\n e.currentTarget.style.color = '#dc2626';\n } else {\n e.currentTarget.style.borderColor = resolvedColors.primaryColor;\n e.currentTarget.style.backgroundColor = resolvedColors.hoverBackground;\n e.currentTarget.style.color = resolvedColors.textColor;\n }\n }\n }}\n onMouseLeave={(e) => {\n if (!e.currentTarget.disabled) {\n if (streaming) {\n e.currentTarget.style.borderColor = '#ef4444';\n e.currentTarget.style.backgroundColor = '#ef444420';\n e.currentTarget.style.color = '#ef4444';\n } else {\n e.currentTarget.style.borderColor = resolvedColors.borderColor;\n e.currentTarget.style.backgroundColor = resolvedColors.cardBackground;\n e.currentTarget.style.color = resolvedColors.mutedTextColor;\n }\n }\n }}\n onClick={() => {\n if (streaming) {\n handleStop();\n } else {\n handleSend();\n }\n }}\n >\n {streaming ? (\n <IconPlayerStop size={18} stroke={2} />\n ) : (\n <IconArrowUp size={18} stroke={2} />\n )}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n {/* Floating reopen button when chat is closed */}\n {!showChat && !alwaysOpen && (\n <button\n aria-label=\"Open chat\"\n onClick={() => setShowChat(true)}\n style={{\n ...floatingButtonStyles,\n borderColor: resolvedColors.borderColor,\n backgroundColor: resolvedColors.accentColor,\n color: resolvedColors.textColor,\n borderRadius: '50%',\n border: `1px solid ${resolvedColors.borderColor}`,\n padding: '12px',\n boxShadow: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n transition: 'all 0.2s',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.borderColor = resolvedColors.primaryColor;\n e.currentTarget.style.backgroundColor = `${resolvedColors.accentColor}dd`;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.borderColor = resolvedColors.borderColor;\n e.currentTarget.style.backgroundColor = resolvedColors.accentColor;\n }}\n >\n <IconMessage size={20} stroke={2} />\n </button>\n )}\n \n {/* Google Fonts and Scoped animations using component ID */}\n <style>\n {`\n /* Import Rubik font from Google Fonts */\n @import url('https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,300..900;1,300..900&display=swap');\n \n @keyframes ${componentId.current}-border-flow {\n 0% { background-position: 0% 50%; }\n 50% { background-position: 100% 50%; }\n 100% { background-position: 0% 50%; }\n }\n \n @keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n \n @keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n \n /* Scoped placeholder styles */\n [data-hsafa-chat=\"${componentId.current}\"] textarea::placeholder {\n color: ${resolvedColors.mutedTextColor};\n }\n \n /* Ensure textarea styles work in all environments */\n [data-hsafa-chat=\"${componentId.current}\"] textarea {\n background: transparent !important;\n border: none !important;\n outline: none !important;\n resize: none !important;\n font-family: inherit !important;\n }\n \n /* Custom scrollbar styles for content container */\n [data-hsafa-chat=\"${componentId.current}\"] .content-container::-webkit-scrollbar {\n width: 6px;\n }\n \n [data-hsafa-chat=\"${componentId.current}\"] .content-container::-webkit-scrollbar-track {\n background: transparent;\n border-radius: 3px;\n }\n \n [data-hsafa-chat=\"${componentId.current}\"] .content-container::-webkit-scrollbar-thumb {\n background: ${resolvedColors.mutedTextColor}40;\n border-radius: 3px;\n border: 1px solid transparent;\n }\n \n [data-hsafa-chat=\"${componentId.current}\"] .content-container::-webkit-scrollbar-thumb:hover {\n background: ${resolvedColors.mutedTextColor}60;\n }\n \n /* Chat scrollbar styles */\n [data-hsafa-chat=\"${componentId.current}\"] .chat-scroll-container::-webkit-scrollbar {\n width: 4px;\n }\n \n [data-hsafa-chat=\"${componentId.current}\"] .chat-scroll-container::-webkit-scrollbar-track {\n background: transparent;\n }\n \n [data-hsafa-chat=\"${componentId.current}\"] .chat-scroll-container::-webkit-scrollbar-thumb {\n background: ${resolvedColors.borderColor};\n border-radius: 2px;\n }\n \n [data-hsafa-chat=\"${componentId.current}\"] .chat-scroll-container::-webkit-scrollbar-thumb:hover {\n background: ${resolvedColors.mutedTextColor};\n }\n \n /* Ensure all fixed positioned elements stay within content box */\n [data-hsafa-chat=\"${componentId.current}\"] * {\n /* Prevent any child from breaking out of the content container */\n }\n \n /* Force fixed elements to be contained within the content box */\n [data-hsafa-chat=\"${componentId.current}\"] .content-container * {\n /* Any fixed, absolute, or sticky elements will be contained */\n max-width: 100% !important;\n }\n `}\n </style>\n </div>\n );\n}\n\n"]}
|