@ash-cloud/ash-ui 0.0.4 → 0.0.5
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 +33 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +27 -4
- package/dist/index.d.ts +27 -4
- package/dist/index.js +33 -2
- package/dist/index.js.map +1 -1
- package/dist/types.cjs +4 -0
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +87 -2
- package/dist/types.d.ts +87 -2
- package/dist/types.js +4 -1
- package/dist/types.js.map +1 -1
- package/dist/utils.d.cts +1 -0
- package/dist/utils.d.ts +1 -0
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils.ts","../src/icons.tsx","../src/components/StatusIndicator.tsx","../src/components/ActionIcon.tsx","../src/components/CodeBlock.tsx","../src/components/JsonDisplay.tsx","../src/components/ToolCallCard.tsx","../src/components/OptionCards.tsx","../src/components/MessageEntry.tsx","../src/components/LoadingIndicator.tsx","../src/components/StreamingText.tsx","../src/components/CompactToolStatusLine.tsx","../src/components/ToolExecutionGroup.tsx","../src/components/StepAccordion.tsx","../src/types.ts","../src/components/DisplayModeContext.tsx","../src/components/MessageList.tsx","../src/components/LogsPanel.tsx","../src/components/TodoPanel.tsx","../src/components/EnvVarsPanel.tsx","../src/components/DisplayModeToggle.tsx","../src/components/TypewriterText.tsx","../src/components/ThemeContext.tsx","../src/design-tokens.ts","../src/hooks/useMessageQueue.ts","../src/hooks/useStopExecution.ts","../src/hooks/useFileUpload.ts"],"names":["jsx","jsxs","useState","Fragment","ReactMarkdown","useCallback","useMemo","useRef","useEffect","createContext","useContext","formatFileSize"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @ash-cloud/ash-ui - Utilities\n *\n * Utility functions for normalizing and formatting tool calls\n * for display in agentic UIs.\n */\n\nimport type {\n ActionType,\n ToolResult,\n CommandRunResult,\n NormalizedToolCall,\n NormalizedEntry,\n ToolDisplayConfig,\n TodoItem,\n} from './types';\n\n// =============================================================================\n// Tool Name Formatting\n// =============================================================================\n\n/**\n * Format MCP tool names from mcp__server__tool to mcp:server:tool\n */\nexport function formatToolName(name: string): string {\n if (name.startsWith('mcp__')) {\n const parts = name.split('__');\n if (parts.length >= 3) {\n return `mcp:${parts[1]}:${parts.slice(2).join(':')}`;\n }\n }\n return name;\n}\n\n/**\n * Parse MCP tool name to extract server and tool names\n */\nexport function parseMcpToolName(name: string): { serverName: string; toolName: string } | null {\n if (name.startsWith('mcp__')) {\n const parts = name.split('__');\n if (parts.length >= 3 && parts[1] !== undefined) {\n return {\n serverName: parts[1],\n toolName: parts.slice(2).join('__'),\n };\n }\n }\n return null;\n}\n\n// =============================================================================\n// Action Type Mapping\n// =============================================================================\n\n/**\n * Map a tool name and input to a structured ActionType\n */\nexport function mapToolToActionType(toolName: string, input: unknown): ActionType {\n const inputObj = (input as Record<string, unknown>) || {};\n\n switch (toolName) {\n case 'Bash':\n return {\n action: 'command_run',\n command: (inputObj.command as string) || '',\n description: inputObj.description as string | undefined,\n };\n\n case 'Read':\n return {\n action: 'file_read',\n path: (inputObj.file_path as string) || '',\n offset: inputObj.offset as number | undefined,\n limit: inputObj.limit as number | undefined,\n };\n\n case 'Edit':\n return {\n action: 'file_edit',\n path: (inputObj.file_path as string) || '',\n oldString: inputObj.old_string as string | undefined,\n newString: inputObj.new_string as string | undefined,\n replaceAll: inputObj.replace_all as boolean | undefined,\n };\n\n case 'Write':\n return {\n action: 'file_write',\n path: (inputObj.file_path as string) || '',\n content: inputObj.content as string | undefined,\n };\n\n case 'Grep':\n return {\n action: 'search',\n pattern: (inputObj.pattern as string) || '',\n path: inputObj.path as string | undefined,\n glob: inputObj.glob as string | undefined,\n type: inputObj.type as string | undefined,\n };\n\n case 'Glob':\n return {\n action: 'glob',\n pattern: (inputObj.pattern as string) || '',\n path: inputObj.path as string | undefined,\n };\n\n case 'WebFetch':\n return {\n action: 'web_fetch',\n url: (inputObj.url as string) || '',\n prompt: inputObj.prompt as string | undefined,\n };\n\n case 'WebSearch':\n return {\n action: 'web_search',\n query: (inputObj.query as string) || '',\n };\n\n case 'TodoWrite': {\n const todos = (inputObj.todos as TodoItem[]) || [];\n const stats = {\n total: todos.length,\n completed: todos.filter((t) => t.status === 'completed').length,\n inProgress: todos.filter((t) => t.status === 'in_progress').length,\n pending: todos.filter((t) => t.status === 'pending').length,\n };\n return {\n action: 'todo_write',\n todos,\n stats,\n };\n }\n\n default: {\n // Check if it's an MCP tool\n const mcpParts = parseMcpToolName(toolName);\n if (mcpParts) {\n return {\n action: 'mcp_tool',\n serverName: mcpParts.serverName,\n toolName: mcpParts.toolName,\n arguments: input,\n };\n }\n\n // Generic tool\n return {\n action: 'generic_tool',\n toolName: formatToolName(toolName),\n arguments: input,\n };\n }\n }\n}\n\n// =============================================================================\n// Summary Generation\n// =============================================================================\n\n/**\n * Generate a human-readable summary for a tool call\n */\nexport function generateToolSummary(\n _toolName: string,\n _input: unknown,\n actionType: ActionType\n): string {\n switch (actionType.action) {\n case 'command_run': {\n const cmd = actionType.command;\n return cmd.length > 60 ? cmd.substring(0, 57) + '...' : cmd;\n }\n\n case 'file_read':\n return actionType.path;\n\n case 'file_edit':\n return actionType.path;\n\n case 'file_write':\n return actionType.path;\n\n case 'search':\n return `${actionType.pattern}${actionType.path ? ` in ${actionType.path}` : ''}`;\n\n case 'glob':\n return actionType.pattern;\n\n case 'web_fetch':\n return actionType.url;\n\n case 'web_search':\n return actionType.query;\n\n case 'mcp_tool':\n return `${actionType.serverName}:${actionType.toolName}`;\n\n case 'generic_tool':\n return actionType.toolName;\n\n case 'todo_write': {\n const { stats } = actionType;\n if (stats) {\n return `${stats.completed}/${stats.total} completed`;\n }\n return `${actionType.todos.length} tasks`;\n }\n\n default:\n return 'Unknown tool';\n }\n}\n\n// =============================================================================\n// Result Normalization\n// =============================================================================\n\n/**\n * Extract text content from various content formats\n */\nexport function extractTextContent(content: unknown): string {\n if (typeof content === 'string') return content;\n\n if (Array.isArray(content)) {\n return content\n .filter((item): item is { text: string } => typeof item?.text === 'string')\n .map((item) => item.text)\n .join('\\n');\n }\n\n if (content && typeof content === 'object' && 'text' in content) {\n return String((content as { text: unknown }).text);\n }\n\n return JSON.stringify(content, null, 2);\n}\n\n/**\n * Normalize tool result content to markdown or JSON format\n */\nexport function normalizeToolResult(content: unknown): ToolResult {\n if (typeof content === 'string') {\n try {\n const parsed = JSON.parse(content);\n return { type: 'json', value: parsed };\n } catch {\n return { type: 'markdown', value: content };\n }\n }\n\n if (Array.isArray(content)) {\n const texts = content\n .filter(\n (item): item is { type: 'text'; text: string } =>\n item?.type === 'text' && typeof item.text === 'string'\n )\n .map((item) => item.text);\n\n if (texts.length > 0) {\n const joined = texts.join('\\n\\n');\n try {\n return { type: 'json', value: JSON.parse(joined) };\n } catch {\n return { type: 'markdown', value: joined };\n }\n }\n }\n\n return { type: 'json', value: content };\n}\n\n/**\n * Parse command result from tool result content\n */\nexport function parseCommandResult(content: unknown): CommandRunResult {\n const output = extractTextContent(content);\n\n if (typeof content === 'string') {\n try {\n const parsed = JSON.parse(content);\n if (typeof parsed.exitCode === 'number') {\n return {\n exitCode: parsed.exitCode,\n output: parsed.output || output,\n success: parsed.exitCode === 0,\n };\n }\n } catch {\n // Not JSON, use raw output\n }\n }\n\n return {\n output,\n success: true,\n };\n}\n\n// =============================================================================\n// Tool Call Creation\n// =============================================================================\n\nexport interface ToolUseInput {\n id: string;\n name: string;\n input: unknown;\n}\n\n/**\n * Create a NormalizedToolCall from a tool_use content block\n */\nexport function createToolCall(toolUse: ToolUseInput): NormalizedToolCall {\n const actionType = mapToolToActionType(toolUse.name, toolUse.input);\n const summary = generateToolSummary(toolUse.name, toolUse.input, actionType);\n\n return {\n id: toolUse.id,\n toolName: toolUse.name,\n actionType,\n status: 'pending',\n summary,\n startedAt: new Date().toISOString(),\n };\n}\n\n/**\n * Update a NormalizedToolCall with its result\n */\nexport function updateToolCallWithResult(\n toolCall: NormalizedToolCall,\n content: unknown,\n isError?: boolean\n): NormalizedToolCall {\n const updatedToolCall = { ...toolCall };\n const actionType = { ...toolCall.actionType };\n\n updatedToolCall.status = isError ? 'failed' : 'success';\n updatedToolCall.completedAt = new Date().toISOString();\n updatedToolCall.isError = isError;\n\n if (actionType.action === 'command_run') {\n const result = parseCommandResult(content);\n (actionType as typeof actionType).result = result;\n if (result.exitCode !== undefined && result.exitCode !== 0) {\n updatedToolCall.status = 'failed';\n updatedToolCall.isError = true;\n }\n } else if (actionType.action === 'mcp_tool' || actionType.action === 'generic_tool') {\n (actionType as typeof actionType).result = normalizeToolResult(content);\n }\n\n updatedToolCall.actionType = actionType;\n return updatedToolCall;\n}\n\n// =============================================================================\n// Display Helpers\n// =============================================================================\n\n/**\n * Get display icon name for an action type\n */\nexport function getActionIcon(actionType: ActionType): string {\n switch (actionType.action) {\n case 'command_run':\n return 'terminal';\n case 'file_read':\n return 'file-text';\n case 'file_edit':\n return 'edit';\n case 'file_write':\n return 'file-plus';\n case 'search':\n return 'search';\n case 'glob':\n return 'folder-search';\n case 'web_fetch':\n return 'globe';\n case 'web_search':\n return 'search';\n case 'mcp_tool':\n return 'plug';\n case 'generic_tool':\n return 'tool';\n case 'todo_write':\n return 'list-checks';\n default:\n return 'tool';\n }\n}\n\n/**\n * Get display label for an action type\n */\nexport function getActionLabel(actionType: ActionType): string {\n switch (actionType.action) {\n case 'command_run':\n return 'Command';\n case 'file_read':\n return 'Read';\n case 'file_edit':\n return 'Edit';\n case 'file_write':\n return 'Write';\n case 'search':\n return 'Search';\n case 'glob':\n return 'Glob';\n case 'web_fetch':\n return 'Fetch';\n case 'web_search':\n return 'Search';\n case 'mcp_tool':\n return 'MCP';\n case 'generic_tool':\n return 'Tool';\n case 'todo_write':\n return 'Tasks';\n default:\n return 'Tool';\n }\n}\n\n// =============================================================================\n// Formatting Helpers\n// =============================================================================\n\n/**\n * Format a file size in bytes to a human-readable string\n */\nexport function formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\n/**\n * Format a timestamp to a locale time string\n */\nexport function formatTimestamp(timestamp: string): string {\n try {\n const date = new Date(timestamp);\n return date.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false,\n });\n } catch {\n return timestamp;\n }\n}\n\n/**\n * Truncate a string with ellipsis\n */\nexport function truncate(str: string, maxLength: number): string {\n if (str.length <= maxLength) return str;\n return str.substring(0, maxLength - 3) + '...';\n}\n\n/**\n * Join class names, filtering out falsy values\n */\nexport function cn(...classes: (string | undefined | null | false)[]): string {\n return classes.filter(Boolean).join(' ');\n}\n\n// =============================================================================\n// Entry Grouping for Compact Mode\n// =============================================================================\n\n/**\n * A grouped entry that contains either a single entry or a group of consecutive tool calls\n */\nexport type GroupedEntry =\n | { type: 'single'; entry: NormalizedEntry }\n | { type: 'tool_group'; entries: NormalizedEntry[]; id: string };\n\n/**\n * Group consecutive tool call entries together based on display config.\n *\n * This is used in compact mode to merge consecutive tool calls into\n * a single ToolExecutionGroup, while keeping text content separate.\n *\n * @param entries - Array of normalized entries\n * @param config - Display configuration (uses breakEveryNToolCalls)\n * @returns Array of grouped entries\n */\nexport function groupEntriesForCompactMode(\n entries: NormalizedEntry[],\n config: ToolDisplayConfig\n): GroupedEntry[] {\n const result: GroupedEntry[] = [];\n let currentToolGroup: NormalizedEntry[] = [];\n let toolGroupCounter = 0;\n\n const flushToolGroup = () => {\n if (currentToolGroup.length > 0) {\n result.push({\n type: 'tool_group',\n entries: [...currentToolGroup],\n id: `tool-group-${toolGroupCounter++}`,\n });\n currentToolGroup = [];\n }\n };\n\n for (const entry of entries) {\n if (entry.entryType.type === 'tool_call') {\n currentToolGroup.push(entry);\n\n // Check if we should break the group\n if (\n config.breakEveryNToolCalls &&\n config.breakEveryNToolCalls > 0 &&\n currentToolGroup.length >= config.breakEveryNToolCalls\n ) {\n flushToolGroup();\n }\n } else {\n // Non-tool-call entry - flush any pending tool group\n flushToolGroup();\n result.push({ type: 'single', entry });\n }\n }\n\n // Flush any remaining tool group\n flushToolGroup();\n\n return result;\n}\n\n/**\n * Extract tool calls from a group of entries\n */\nexport function extractToolCallsFromGroup(entries: NormalizedEntry[]): NormalizedToolCall[] {\n return entries\n .filter((e): e is NormalizedEntry & { entryType: { type: 'tool_call'; toolCall: NormalizedToolCall } } =>\n e.entryType.type === 'tool_call'\n )\n .map((e) => e.entryType.toolCall);\n}\n\n// =============================================================================\n// Option Parsing\n// =============================================================================\n\n/**\n * A parsed option from assistant message content\n */\nexport interface ParsedOption {\n /** Option identifier (e.g., \"1\", \"2\", \"A\", \"B\") */\n id: string;\n /** Option title/label */\n label: string;\n /** Optional description text */\n description?: string;\n}\n\n/**\n * Result of parsing options from content\n */\nexport interface ParsedOptionsResult {\n /** Text before the options */\n preamble: string;\n /** Parsed options */\n options: ParsedOption[];\n}\n\n/**\n * Parse options from assistant message content.\n * Detects patterns like:\n * - \"Option 1: Title\" / \"Option 2: Title\"\n * - \"**Option 1:** Title\" (bold markdown)\n * - Numbered lists with descriptions\n *\n * @returns ParsedOptionsResult if options found, null otherwise\n */\nexport function parseOptionsFromContent(content: string): ParsedOptionsResult | null {\n // Pattern 1: \"Option N:\" format (with or without bold markdown)\n // Matches: \"Option 1:\", \"**Option 1:**\", \"Option 1 -\", etc.\n const optionPattern = /(?:\\*\\*)?Option\\s+(\\d+)(?:\\*\\*)?[:\\-]\\s*([^\\n]+)(?:\\n((?:(?!\\n(?:\\*\\*)?Option\\s+\\d).)*?))?/gi;\n\n const options: ParsedOption[] = [];\n let firstMatchStart = -1;\n let match: RegExpExecArray | null;\n\n // Reset regex\n optionPattern.lastIndex = 0;\n\n while ((match = optionPattern.exec(content)) !== null) {\n if (firstMatchStart === -1) {\n firstMatchStart = match.index;\n }\n\n const id = match[1] ?? '';\n const labelRaw = match[2];\n const label = labelRaw ? labelRaw.trim() : '';\n // Description is everything after the label until the next option\n const descriptionRaw = match[3];\n\n // Clean up description - remove leading/trailing whitespace and normalize\n let description: string | undefined;\n if (descriptionRaw) {\n const cleaned = descriptionRaw\n .split('\\n')\n .map(line => line.trim())\n .filter(line => line.length > 0)\n .join(' ');\n if (cleaned) {\n description = cleaned;\n }\n }\n\n options.push({ id, label, description });\n }\n\n // Need at least 2 options to be considered a valid options list\n if (options.length >= 2) {\n const preamble = firstMatchStart > 0\n ? content.substring(0, firstMatchStart).trim()\n : '';\n\n return { preamble, options };\n }\n\n // Pattern 2: Simple numbered list at end of message\n // Look for \"What would you like to do?\" or similar followed by numbered items\n const questionPattern = /^(.*?(?:what would you like to do\\??|choose an option|select.*?:|here are your options.*?:))\\s*\\n+((?:\\d+\\.\\s+.+\\n?)+)/ims;\n const questionMatch = content.match(questionPattern);\n\n if (questionMatch && questionMatch[1] && questionMatch[2]) {\n const preamble = questionMatch[1].trim();\n const listSection = questionMatch[2];\n\n // Parse numbered list items\n const listPattern = /(\\d+)\\.\\s+([^\\n]+)/g;\n let listMatch: RegExpExecArray | null;\n\n while ((listMatch = listPattern.exec(listSection)) !== null) {\n const listId = listMatch[1] ?? '';\n const listLabelRaw = listMatch[2];\n const listLabel = listLabelRaw ? listLabelRaw.trim() : '';\n options.push({\n id: listId,\n label: listLabel,\n });\n }\n\n if (options.length >= 2) {\n return { preamble, options };\n }\n }\n\n return null;\n}\n","/**\n * @ash-cloud/ash-ui - Icon Components\n *\n * Inline SVG icons for minimal dependencies. These icons follow\n * the Feather Icons style:\n * - 24x24 viewBox\n * - 2px stroke width\n * - No fill (stroke-based)\n */\n\n// =============================================================================\n// Icon Props Type\n// =============================================================================\n\nexport interface IconProps {\n className?: string;\n}\n\n// =============================================================================\n// Navigation & UI Icons\n// =============================================================================\n\nexport function SunIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"5\" />\n <line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"3\" />\n <line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\" />\n <line x1=\"4.22\" y1=\"4.22\" x2=\"5.64\" y2=\"5.64\" />\n <line x1=\"18.36\" y1=\"18.36\" x2=\"19.78\" y2=\"19.78\" />\n <line x1=\"1\" y1=\"12\" x2=\"3\" y2=\"12\" />\n <line x1=\"21\" y1=\"12\" x2=\"23\" y2=\"12\" />\n <line x1=\"4.22\" y1=\"19.78\" x2=\"5.64\" y2=\"18.36\" />\n <line x1=\"18.36\" y1=\"5.64\" x2=\"19.78\" y2=\"4.22\" />\n </svg>\n );\n}\n\nexport function MoonIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\" />\n </svg>\n );\n}\n\nexport function ChevronDownIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n );\n}\n\nexport function ChevronRightIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n );\n}\n\nexport function ChevronLeftIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n );\n}\n\nexport function ChevronUpIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"18 15 12 9 6 15\" />\n </svg>\n );\n}\n\n// =============================================================================\n// Tool & Action Icons\n// =============================================================================\n\nexport function TerminalIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"4 17 10 11 4 5\" />\n <line x1=\"12\" y1=\"19\" x2=\"20\" y2=\"19\" />\n </svg>\n );\n}\n\nexport function FileIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n </svg>\n );\n}\n\nexport function EditIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n <path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\" />\n </svg>\n );\n}\n\nexport function FilePlusIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"12\" y1=\"18\" x2=\"12\" y2=\"12\" />\n <line x1=\"9\" y1=\"15\" x2=\"15\" y2=\"15\" />\n </svg>\n );\n}\n\nexport function SearchIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </svg>\n );\n}\n\nexport function GlobeIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\" />\n <path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\" />\n </svg>\n );\n}\n\nexport function PlugIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M12 2v6\" />\n <path d=\"M6 6v4a6 6 0 0 0 12 0V6\" />\n <path d=\"M12 16v6\" />\n </svg>\n );\n}\n\nexport function ToolIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z\" />\n </svg>\n );\n}\n\nexport function FolderSearchIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\" />\n <circle cx=\"11\" cy=\"13\" r=\"3\" />\n <line x1=\"15\" y1=\"16\" x2=\"17\" y2=\"18\" />\n </svg>\n );\n}\n\nexport function CodeIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"16 18 22 12 16 6\" />\n <polyline points=\"8 6 2 12 8 18\" />\n </svg>\n );\n}\n\nexport function CopyIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n );\n}\n\nexport function CheckIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\nexport function XIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n );\n}\n\nexport function LoaderIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"6\" />\n <line x1=\"12\" y1=\"18\" x2=\"12\" y2=\"22\" />\n <line x1=\"4.93\" y1=\"4.93\" x2=\"7.76\" y2=\"7.76\" />\n <line x1=\"16.24\" y1=\"16.24\" x2=\"19.07\" y2=\"19.07\" />\n <line x1=\"2\" y1=\"12\" x2=\"6\" y2=\"12\" />\n <line x1=\"18\" y1=\"12\" x2=\"22\" y2=\"12\" />\n <line x1=\"4.93\" y1=\"19.07\" x2=\"7.76\" y2=\"16.24\" />\n <line x1=\"16.24\" y1=\"7.76\" x2=\"19.07\" y2=\"4.93\" />\n </svg>\n );\n}\n\n// =============================================================================\n// Status & Alert Icons\n// =============================================================================\n\nexport function InfoIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n );\n}\n\nexport function AlertTriangleIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n );\n}\n\nexport function AlertCircleIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n );\n}\n\nexport function BugIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect x=\"8\" y=\"6\" width=\"8\" height=\"14\" rx=\"4\" />\n <path d=\"M3 10h2\" />\n <path d=\"M19 10h2\" />\n <path d=\"M3 14h2\" />\n <path d=\"M19 14h2\" />\n <path d=\"M9 2h6\" />\n <path d=\"M12 2v4\" />\n </svg>\n );\n}\n\nexport function CheckCircleIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M9 12l2 2 4-4\" />\n </svg>\n );\n}\n\nexport function XCircleIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </svg>\n );\n}\n\n// =============================================================================\n// Communication & Misc Icons\n// =============================================================================\n\nexport function SendIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\" />\n <polygon points=\"22 2 15 22 11 13 2 9 22 2\" />\n </svg>\n );\n}\n\nexport function PaperclipIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48\" />\n </svg>\n );\n}\n\nexport function StopCircleIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <rect x=\"9\" y=\"9\" width=\"6\" height=\"6\" />\n </svg>\n );\n}\n\nexport function MessageSquareIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\" />\n </svg>\n );\n}\n\nexport function SparklesIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M12 3l1.5 4.5L18 9l-4.5 1.5L12 15l-1.5-4.5L6 9l4.5-1.5L12 3z\" />\n <path d=\"M5 19l.5 1.5L7 21l-1.5.5L5 23l-.5-1.5L3 21l1.5-.5L5 19z\" />\n <path d=\"M19 11l.5 1.5L21 13l-1.5.5L19 15l-.5-1.5L17 13l1.5-.5L19 11z\" />\n </svg>\n );\n}\n\nexport function BrainIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M9.5 2A2.5 2.5 0 0 1 12 4.5v15a2.5 2.5 0 0 1-4.96.44 2.5 2.5 0 0 1-2.96-3.08 3 3 0 0 1-.34-5.58 2.5 2.5 0 0 1 1.32-4.24 2.5 2.5 0 0 1 4.44-1.54\" />\n <path d=\"M14.5 2A2.5 2.5 0 0 0 12 4.5v15a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.96-3.08 3 3 0 0 0 .34-5.58 2.5 2.5 0 0 0-1.32-4.24 2.5 2.5 0 0 0-4.44-1.54\" />\n </svg>\n );\n}\n\nexport function BotIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M12 8V4H8\" />\n <rect x=\"5\" y=\"8\" width=\"14\" height=\"12\" rx=\"2\" />\n <path d=\"M2 14h2\" />\n <path d=\"M20 14h2\" />\n <path d=\"M9 13v2\" />\n <path d=\"M15 13v2\" />\n </svg>\n );\n}\n\nexport function UserIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" />\n <circle cx=\"12\" cy=\"7\" r=\"4\" />\n </svg>\n );\n}\n\n// =============================================================================\n// Todo & Task Icons\n// =============================================================================\n\nexport function CircleIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n </svg>\n );\n}\n\nexport function ListChecksIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M10 6h11\" />\n <path d=\"M10 12h11\" />\n <path d=\"M10 18h11\" />\n <path d=\"M3 6l2 2 4-4\" />\n <path d=\"M3 12l2 2 4-4\" />\n <path d=\"M3 18l2 2 4-4\" />\n </svg>\n );\n}\n\nexport function ClipboardListIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect x=\"8\" y=\"2\" width=\"8\" height=\"4\" rx=\"1\" ry=\"1\" />\n <path d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\" />\n <path d=\"M12 11h4\" />\n <path d=\"M12 16h4\" />\n <path d=\"M8 11h.01\" />\n <path d=\"M8 16h.01\" />\n </svg>\n );\n}\n\n// =============================================================================\n// Spinner & Loading Icons\n// =============================================================================\n\nexport function SpinnerIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n );\n}\n\nexport function ErrorIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </svg>\n );\n}\n","import type { ToolStatus } from '../types';\nimport { cn } from '../utils';\n\nexport interface StatusIndicatorProps {\n status: ToolStatus;\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\n/**\n * StatusIndicator - Visual indicator for tool execution status\n *\n * Uses the glassmorphism theme with animated states:\n * - pending: Yellow with pulse animation\n * - success: Accent color (lime green)\n * - failed: Red\n *\n * @example\n * ```tsx\n * <StatusIndicator status=\"pending\" />\n * <StatusIndicator status=\"success\" size=\"lg\" />\n * <StatusIndicator status=\"failed\" />\n * ```\n */\nexport function StatusIndicator({ status, size = 'sm', className }: StatusIndicatorProps) {\n const sizeClasses = {\n sm: 'w-2 h-2',\n md: 'w-3 h-3',\n lg: 'w-4 h-4',\n };\n\n const statusClasses = {\n pending: 'ash-status-pending',\n success: 'ash-status-success',\n failed: 'ash-status-failed',\n };\n\n return (\n <div\n className={cn(\n 'rounded-full flex-shrink-0',\n sizeClasses[size],\n statusClasses[status],\n className\n )}\n />\n );\n}\n\nexport default StatusIndicator;\n","import type { ActionType } from '../types';\nimport {\n TerminalIcon,\n FileIcon,\n EditIcon,\n FilePlusIcon,\n SearchIcon,\n GlobeIcon,\n PlugIcon,\n ToolIcon,\n FolderSearchIcon,\n ListChecksIcon,\n} from '../icons';\n\nexport interface ActionIconProps {\n actionType: ActionType;\n className?: string;\n}\n\n/**\n * ActionIcon - Display the appropriate icon for a tool action type\n *\n * @example\n * ```tsx\n * <ActionIcon actionType={{ action: 'command_run', command: 'ls' }} />\n * <ActionIcon actionType={{ action: 'file_read', path: '/file.txt' }} className=\"w-5 h-5\" />\n * ```\n */\nexport function ActionIcon({ actionType, className = 'w-4 h-4' }: ActionIconProps) {\n switch (actionType.action) {\n case 'command_run':\n return <TerminalIcon className={className} />;\n case 'file_read':\n return <FileIcon className={className} />;\n case 'file_edit':\n return <EditIcon className={className} />;\n case 'file_write':\n return <FilePlusIcon className={className} />;\n case 'search':\n return <SearchIcon className={className} />;\n case 'glob':\n return <FolderSearchIcon className={className} />;\n case 'web_fetch':\n return <GlobeIcon className={className} />;\n case 'web_search':\n return <SearchIcon className={className} />;\n case 'mcp_tool':\n return <PlugIcon className={className} />;\n case 'todo_write':\n return <ListChecksIcon className={className} />;\n case 'generic_tool':\n default:\n return <ToolIcon className={className} />;\n }\n}\n\nexport default ActionIcon;\n","import { useState } from 'react';\nimport { cn } from '../utils';\n\nexport interface CodeBlockProps {\n children: string;\n maxHeight?: number;\n language?: string;\n showLineNumbers?: boolean;\n className?: string;\n}\n\n/**\n * CodeBlock - Display code with syntax-aware styling and expand/collapse\n *\n * Uses glassmorphism dark theme styling with accent-colored expand button.\n *\n * @example\n * ```tsx\n * <CodeBlock>{`const x = 1;`}</CodeBlock>\n * <CodeBlock maxHeight={200}>{longCode}</CodeBlock>\n * <CodeBlock language=\"typescript\" showLineNumbers>{code}</CodeBlock>\n * ```\n */\nexport function CodeBlock({\n children,\n maxHeight = 200,\n language,\n showLineNumbers = false,\n className,\n}: CodeBlockProps) {\n const [expanded, setExpanded] = useState(false);\n const lines = children.split('\\n');\n const isLong = lines.length > 10 || children.length > 500;\n\n return (\n <div className={cn('relative', className)}>\n <pre\n className={cn(\n 'ash-tool-code-block text-xs font-mono text-white/90 p-3 rounded-xl overflow-x-auto whitespace-pre-wrap break-words',\n !expanded && isLong && 'overflow-y-hidden'\n )}\n style={!expanded && isLong ? { maxHeight } : undefined}\n data-language={language}\n >\n {showLineNumbers ? (\n <code>\n {lines.map((line, i) => (\n <span key={i} className=\"block\">\n <span className=\"inline-block w-8 text-white/30 select-none text-right pr-2\">\n {i + 1}\n </span>\n <span className=\"text-white/80\">{line}</span>\n </span>\n ))}\n </code>\n ) : (\n <code className=\"text-white/80\">{children}</code>\n )}\n </pre>\n {isLong && !expanded && (\n <div className=\"absolute bottom-0 left-0 right-0 h-12 ash-truncate-fade flex items-end justify-center pb-2\">\n <button\n onClick={() => setExpanded(true)}\n className=\"text-xs text-[var(--ash-accent)] hover:text-[var(--ash-accent-300)] font-medium transition-colors\"\n >\n Show more\n </button>\n </div>\n )}\n {isLong && expanded && (\n <button\n onClick={() => setExpanded(false)}\n className=\"text-xs text-[var(--ash-accent)] hover:text-[var(--ash-accent-300)] font-medium mt-2 transition-colors\"\n >\n Show less\n </button>\n )}\n </div>\n );\n}\n\nexport default CodeBlock;\n","import { CodeBlock } from './CodeBlock';\n\nexport interface JsonDisplayProps {\n value: unknown;\n maxHeight?: number;\n className?: string;\n}\n\n/**\n * JsonDisplay - Display JSON data in a formatted code block\n *\n * @example\n * ```tsx\n * <JsonDisplay value={{ name: 'test', count: 42 }} />\n * <JsonDisplay value={data} maxHeight={300} />\n * ```\n */\nexport function JsonDisplay({ value, maxHeight, className }: JsonDisplayProps) {\n const formatted = JSON.stringify(value, null, 2);\n return (\n <CodeBlock maxHeight={maxHeight} className={className}>\n {formatted}\n </CodeBlock>\n );\n}\n\nexport default JsonDisplay;\n","import { useState } from 'react';\nimport type {\n NormalizedToolCall,\n ActionType,\n CommandRunAction,\n FileReadAction,\n FileEditAction,\n FileWriteAction,\n SearchAction,\n GlobAction,\n WebFetchAction,\n WebSearchAction,\n McpToolAction,\n GenericToolAction,\n TodoWriteAction,\n} from '../types';\nimport { cn, getActionLabel } from '../utils';\nimport { ChevronDownIcon, CheckIcon, CheckCircleIcon, CircleIcon, LoaderIcon } from '../icons';\nimport { StatusIndicator } from './StatusIndicator';\nimport { ActionIcon } from './ActionIcon';\nimport { CodeBlock } from './CodeBlock';\nimport { JsonDisplay } from './JsonDisplay';\n\n// =============================================================================\n// Section Components\n// =============================================================================\n\nfunction SectionHeader({ children }: { children: React.ReactNode }) {\n return (\n <div className=\"ash-tool-section-header\">\n {children}\n </div>\n );\n}\n\nfunction SectionContent({ children }: { children: React.ReactNode }) {\n return <div className=\"px-3 py-2\">{children}</div>;\n}\n\n// =============================================================================\n// Tool Details Components\n// =============================================================================\n\nfunction CommandRunDetails({ action }: { action: CommandRunAction }) {\n return (\n <>\n {action.command && (\n <>\n <SectionHeader>COMMAND</SectionHeader>\n <SectionContent>\n <CodeBlock>{action.command}</CodeBlock>\n </SectionContent>\n </>\n )}\n {action.result?.output && (\n <>\n <SectionHeader>OUTPUT</SectionHeader>\n <SectionContent>\n <CodeBlock maxHeight={300}>{action.result.output}</CodeBlock>\n {action.result.exitCode !== undefined && action.result.exitCode !== 0 && (\n <div className=\"mt-2 text-xs text-red-400\">\n Exit code: {action.result.exitCode}\n </div>\n )}\n </SectionContent>\n </>\n )}\n </>\n );\n}\n\nfunction FileReadDetails({ action }: { action: FileReadAction }) {\n return (\n <>\n <SectionHeader>PATH</SectionHeader>\n <SectionContent>\n <code className=\"text-xs font-mono bg-white/10 text-white/90 px-1 py-0.5 rounded\">\n {action.path}\n </code>\n {(action.offset !== undefined || action.limit !== undefined) && (\n <div className=\"mt-1 text-xs text-white/50\">\n {action.offset !== undefined && <span>Offset: {action.offset}</span>}\n {action.offset !== undefined && action.limit !== undefined && <span> · </span>}\n {action.limit !== undefined && <span>Limit: {action.limit}</span>}\n </div>\n )}\n </SectionContent>\n </>\n );\n}\n\nfunction FileEditDetails({ action }: { action: FileEditAction }) {\n return (\n <>\n <SectionHeader>PATH</SectionHeader>\n <SectionContent>\n <code className=\"text-xs font-mono bg-white/10 text-white/90 px-1 py-0.5 rounded\">\n {action.path}\n </code>\n </SectionContent>\n {action.oldString && (\n <>\n <SectionHeader>OLD</SectionHeader>\n <SectionContent>\n <CodeBlock>{action.oldString}</CodeBlock>\n </SectionContent>\n </>\n )}\n {action.newString && (\n <>\n <SectionHeader>NEW</SectionHeader>\n <SectionContent>\n <CodeBlock>{action.newString}</CodeBlock>\n </SectionContent>\n </>\n )}\n </>\n );\n}\n\nfunction FileWriteDetails({ action }: { action: FileWriteAction }) {\n return (\n <>\n <SectionHeader>PATH</SectionHeader>\n <SectionContent>\n <code className=\"text-xs font-mono bg-white/10 text-white/90 px-1 py-0.5 rounded\">\n {action.path}\n </code>\n </SectionContent>\n {action.content && (\n <>\n <SectionHeader>CONTENT</SectionHeader>\n <SectionContent>\n <CodeBlock maxHeight={300}>{action.content}</CodeBlock>\n </SectionContent>\n </>\n )}\n </>\n );\n}\n\nfunction SearchDetails({ action }: { action: SearchAction }) {\n return (\n <>\n <SectionHeader>PATTERN</SectionHeader>\n <SectionContent>\n <code className=\"text-xs font-mono bg-white/10 text-white/90 px-1 py-0.5 rounded\">\n {action.pattern}\n </code>\n {(action.path || action.glob || action.type) && (\n <div className=\"mt-1 text-xs text-white/50\">\n {action.path && <span>Path: {action.path}</span>}\n {action.glob && <span>Glob: {action.glob}</span>}\n {action.type && <span>Type: {action.type}</span>}\n </div>\n )}\n </SectionContent>\n </>\n );\n}\n\nfunction GlobDetails({ action }: { action: GlobAction }) {\n return (\n <>\n <SectionHeader>PATTERN</SectionHeader>\n <SectionContent>\n <code className=\"text-xs font-mono bg-white/10 text-white/90 px-1 py-0.5 rounded\">\n {action.pattern}\n </code>\n {action.path && (\n <div className=\"mt-1 text-xs text-white/50\">Path: {action.path}</div>\n )}\n </SectionContent>\n </>\n );\n}\n\nfunction WebFetchDetails({ action }: { action: WebFetchAction }) {\n return (\n <>\n <SectionHeader>URL</SectionHeader>\n <SectionContent>\n <a\n href={action.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-xs text-blue-400 hover:text-blue-300 underline break-all\"\n >\n {action.url}\n </a>\n {action.prompt && (\n <div className=\"mt-2 text-xs text-white/50\">{action.prompt}</div>\n )}\n </SectionContent>\n </>\n );\n}\n\nfunction WebSearchDetails({ action }: { action: WebSearchAction }) {\n return (\n <>\n <SectionHeader>QUERY</SectionHeader>\n <SectionContent>\n <span className=\"text-sm text-white/90\">{action.query}</span>\n </SectionContent>\n </>\n );\n}\n\nfunction McpToolDetails({ action }: { action: McpToolAction }) {\n return (\n <>\n <SectionHeader>TOOL</SectionHeader>\n <SectionContent>\n <code className=\"text-xs font-mono bg-white/10 text-white/90 px-1 py-0.5 rounded\">\n {action.serverName}:{action.toolName}\n </code>\n </SectionContent>\n {action.arguments && (\n <>\n <SectionHeader>ARGS</SectionHeader>\n <SectionContent>\n <JsonDisplay value={action.arguments} />\n </SectionContent>\n </>\n )}\n {action.result && (\n <>\n <SectionHeader>RESULT</SectionHeader>\n <SectionContent>\n {action.result.type === 'markdown' ? (\n <CodeBlock>{String(action.result.value)}</CodeBlock>\n ) : (\n <JsonDisplay value={action.result.value} />\n )}\n </SectionContent>\n </>\n )}\n </>\n );\n}\n\nfunction GenericToolDetails({ action }: { action: GenericToolAction }) {\n return (\n <>\n {action.arguments && (\n <>\n <SectionHeader>ARGS</SectionHeader>\n <SectionContent>\n <JsonDisplay value={action.arguments} />\n </SectionContent>\n </>\n )}\n {action.result && (\n <>\n <SectionHeader>RESULT</SectionHeader>\n <SectionContent>\n {action.result.type === 'markdown' ? (\n <CodeBlock>{String(action.result.value)}</CodeBlock>\n ) : (\n <JsonDisplay value={action.result.value} />\n )}\n </SectionContent>\n </>\n )}\n </>\n );\n}\n\nfunction TodoWriteDetails({ action }: { action: TodoWriteAction }) {\n const { todos, stats } = action;\n\n return (\n <>\n {/* Progress Header */}\n {stats && (\n <>\n <SectionHeader>PROGRESS</SectionHeader>\n <SectionContent>\n <div className=\"flex items-center gap-3\">\n <div className=\"flex-1 h-2 bg-white/10 rounded-full overflow-hidden\">\n <div\n className=\"h-full bg-emerald-400 rounded-full transition-all duration-500 ease-out\"\n style={{ width: `${stats.total > 0 ? (stats.completed / stats.total) * 100 : 0}%` }}\n />\n </div>\n <span className=\"text-xs text-white/60 tabular-nums\">\n {stats.completed}/{stats.total}\n </span>\n </div>\n <div className=\"flex gap-3 mt-2 text-xs\">\n {stats.inProgress > 0 && (\n <span className=\"text-yellow-400\">\n {stats.inProgress} in progress\n </span>\n )}\n {stats.pending > 0 && (\n <span className=\"text-white/40\">\n {stats.pending} pending\n </span>\n )}\n </div>\n </SectionContent>\n </>\n )}\n\n {/* Todo List */}\n <SectionHeader>TASKS</SectionHeader>\n <SectionContent>\n <div className=\"space-y-1.5\">\n {todos.map((todo, index) => {\n const displayText = todo.status === 'in_progress' ? todo.activeForm : todo.content;\n return (\n <div\n key={`${todo.content}-${index}`}\n className={cn(\n 'flex items-start gap-2 py-1 transition-all duration-200',\n todo.status === 'completed' && 'opacity-50',\n todo.status === 'in_progress' && 'bg-yellow-500/10 -mx-2 px-2 rounded'\n )}\n >\n {/* Status Icon */}\n {todo.status === 'completed' ? (\n <CheckCircleIcon className=\"w-4 h-4 text-emerald-400 shrink-0 mt-0.5\" />\n ) : todo.status === 'in_progress' ? (\n <LoaderIcon className=\"w-4 h-4 text-yellow-400 animate-spin shrink-0 mt-0.5\" />\n ) : (\n <CircleIcon className=\"w-4 h-4 text-white/30 shrink-0 mt-0.5\" />\n )}\n\n {/* Task Text */}\n <span\n className={cn(\n 'text-sm leading-relaxed',\n todo.status === 'completed' ? 'text-white/50 line-through' : 'text-white/80'\n )}\n >\n <span className=\"text-white/40 mr-1.5\">{index + 1}.</span>\n {displayText}\n </span>\n </div>\n );\n })}\n </div>\n </SectionContent>\n </>\n );\n}\n\nfunction ToolDetails({ actionType }: { actionType: ActionType }) {\n switch (actionType.action) {\n case 'command_run':\n return <CommandRunDetails action={actionType} />;\n case 'file_read':\n return <FileReadDetails action={actionType} />;\n case 'file_edit':\n return <FileEditDetails action={actionType} />;\n case 'file_write':\n return <FileWriteDetails action={actionType} />;\n case 'search':\n return <SearchDetails action={actionType} />;\n case 'glob':\n return <GlobDetails action={actionType} />;\n case 'web_fetch':\n return <WebFetchDetails action={actionType} />;\n case 'web_search':\n return <WebSearchDetails action={actionType} />;\n case 'mcp_tool':\n return <McpToolDetails action={actionType} />;\n case 'generic_tool':\n return <GenericToolDetails action={actionType} />;\n case 'todo_write':\n return <TodoWriteDetails action={actionType} />;\n default:\n return null;\n }\n}\n\n// =============================================================================\n// Helper Functions\n// =============================================================================\n\nfunction hasDetails(actionType: ActionType): boolean {\n switch (actionType.action) {\n case 'command_run':\n return Boolean(actionType.command || actionType.result?.output);\n case 'file_read':\n return true;\n case 'file_edit':\n return Boolean(actionType.oldString || actionType.newString);\n case 'file_write':\n return Boolean(actionType.content);\n case 'search':\n return true;\n case 'glob':\n return true;\n case 'web_fetch':\n return true;\n case 'web_search':\n return true;\n case 'mcp_tool':\n return Boolean(actionType.arguments || actionType.result);\n case 'generic_tool':\n return Boolean(actionType.arguments || actionType.result);\n case 'todo_write':\n return actionType.todos.length > 0;\n default:\n return false;\n }\n}\n\n// =============================================================================\n// ToolCallCard Component\n// =============================================================================\n\nexport interface ToolCallCardProps {\n toolCall: NormalizedToolCall;\n defaultExpanded?: boolean;\n className?: string;\n}\n\n/**\n * ToolCallCard - Display a tool call with its status, arguments, and results\n *\n * Features:\n * - Status indicator (pending/success/failed) with animated styling\n * - Action-specific icon in accent-colored badge\n * - Expandable details section with smooth animation\n * - Glassmorphism dark theme styling\n * - Execution duration display\n *\n * @example\n * ```tsx\n * <ToolCallCard toolCall={normalizedToolCall} />\n * <ToolCallCard toolCall={toolCall} defaultExpanded />\n * ```\n */\nexport function ToolCallCard({ toolCall, defaultExpanded = false, className }: ToolCallCardProps) {\n const [expanded, setExpanded] = useState(defaultExpanded);\n const { actionType, status, summary } = toolCall;\n const canExpand = hasDetails(actionType);\n\n // Status-based styling for glassmorphism theme\n const statusClasses = {\n pending: 'border-yellow-500/30 ash-tool-status-pending',\n success: 'border-white/10',\n failed: 'border-red-500/30',\n };\n\n return (\n <div\n className={cn(\n 'rounded-xl border bg-[var(--ash-surface-dark,#0a0a0a)] overflow-hidden',\n statusClasses[status],\n className\n )}\n >\n {/* Header */}\n <button\n onClick={() => canExpand && setExpanded(!expanded)}\n className={cn(\n 'w-full px-4 py-3 flex items-center justify-between transition-colors',\n canExpand ? 'hover:bg-white/5 cursor-pointer' : 'cursor-default'\n )}\n disabled={!canExpand}\n >\n <div className=\"flex items-center gap-3 min-w-0 flex-1\">\n {/* Icon badge */}\n <div className={cn(\n 'w-6 h-6 rounded-lg flex items-center justify-center shrink-0',\n status === 'pending' ? 'bg-yellow-500/20' :\n status === 'failed' ? 'bg-red-500/20' : 'bg-[var(--ash-accent)]/20'\n )}>\n <ActionIcon\n actionType={actionType}\n className={cn(\n 'w-3.5 h-3.5',\n status === 'pending' ? 'text-yellow-400' :\n status === 'failed' ? 'text-red-400' : 'text-[var(--ash-accent)]'\n )}\n />\n </div>\n\n {/* Tool name and summary */}\n <span className=\"text-sm font-medium text-white shrink-0\">\n {getActionLabel(actionType)}\n </span>\n <span className=\"font-mono text-sm truncate text-white/60 min-w-0\">\n {summary}\n </span>\n </div>\n\n <div className=\"flex items-center gap-2 shrink-0\">\n {/* Status indicator */}\n <StatusIndicator status={status} size=\"sm\" />\n\n {/* Chevron */}\n {canExpand && (\n <ChevronDownIcon\n className={cn(\n 'w-4 h-4 text-white/40 transition-transform duration-200',\n expanded && 'rotate-180'\n )}\n />\n )}\n </div>\n </button>\n\n {/* Expandable Details */}\n {expanded && canExpand && (\n <div className=\"border-t border-white/5 max-h-[400px] overflow-y-auto ash-scrollbar bg-black/20\">\n <ToolDetails actionType={actionType} />\n\n {/* Success result footer */}\n {status === 'success' && (\n <div className=\"px-4 py-3 border-t border-white/5 bg-[var(--ash-accent)]/5\">\n <div className=\"flex items-center gap-2\">\n <CheckIcon className=\"w-4 h-4 text-[var(--ash-accent)]\" />\n <span className=\"text-sm text-[var(--ash-accent)] font-medium\">\n Completed successfully\n </span>\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport default ToolCallCard;\n","import type { ParsedOption } from '../utils';\nimport { cn } from '../utils';\n\nexport interface OptionCardsProps {\n /** Parsed options to display */\n options: ParsedOption[];\n /** Callback when an option is selected */\n onSelect: (option: ParsedOption) => void;\n /** Additional class names */\n className?: string;\n}\n\n/**\n * OptionCards - Display clickable option cards for interactive selection\n *\n * Renders a grid of glassmorphic cards that users can click to select an option.\n * Used when assistant messages contain structured options for the user to choose from.\n *\n * @example\n * ```tsx\n * <OptionCards\n * options={[\n * { id: '1', label: 'Add Product', description: 'Upload a new product' },\n * { id: '2', label: 'Browse Existing', description: 'View your products' },\n * ]}\n * onSelect={(opt) => sendMessage(opt.label)}\n * />\n * ```\n */\nexport function OptionCards({ options, onSelect, className }: OptionCardsProps) {\n return (\n <div className={cn('grid gap-2 mt-3', className)} style={{\n gridTemplateColumns: 'repeat(auto-fit, minmax(200px, 1fr))',\n }}>\n {options.map((option) => (\n <button\n key={option.id}\n onClick={() => onSelect(option)}\n className={cn(\n 'flex items-start gap-3 p-3 rounded-xl text-left',\n 'bg-white/5 border border-white/10',\n 'hover:bg-[var(--ash-accent)]/10 hover:border-[var(--ash-accent)]/30',\n 'focus:outline-none focus:ring-2 focus:ring-[var(--ash-accent)]/50',\n 'transition-all duration-200 cursor-pointer',\n 'group'\n )}\n >\n {/* Option number badge */}\n <span className={cn(\n 'flex-shrink-0 w-6 h-6 rounded-lg',\n 'bg-[var(--ash-accent)]/20 text-[var(--ash-accent)]',\n 'flex items-center justify-center',\n 'text-xs font-semibold',\n 'group-hover:bg-[var(--ash-accent)]/30',\n 'transition-colors duration-200'\n )}>\n {option.id}\n </span>\n\n {/* Option content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"text-sm font-medium text-white/90 group-hover:text-white transition-colors\">\n {option.label}\n </div>\n {option.description && (\n <div className=\"text-xs text-white/50 mt-0.5 line-clamp-2 group-hover:text-white/60 transition-colors\">\n {option.description}\n </div>\n )}\n </div>\n\n {/* Arrow indicator */}\n <svg\n className={cn(\n 'w-4 h-4 text-white/30 flex-shrink-0 mt-0.5',\n 'group-hover:text-[var(--ash-accent)] group-hover:translate-x-0.5',\n 'transition-all duration-200'\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n ))}\n </div>\n );\n}\n\nexport default OptionCards;\n","import ReactMarkdown from 'react-markdown';\nimport type { NormalizedEntry } from '../types';\nimport { cn, formatTimestamp, parseOptionsFromContent, type ParsedOption } from '../utils';\nimport { ToolCallCard } from './ToolCallCard';\nimport { OptionCards } from './OptionCards';\nimport { BotIcon, UserIcon, PaperclipIcon, SparklesIcon, AlertTriangleIcon } from '../icons';\n\n// =============================================================================\n// Helper Functions\n// =============================================================================\n\nfunction parseFilesFromContent(content: string): { text: string; files: string[] } {\n const fileMarker = '[Uploaded files available at /uploads/]';\n const markerIndex = content.indexOf(fileMarker);\n\n if (markerIndex === -1) {\n return { text: content, files: [] };\n }\n\n const text = content.substring(0, markerIndex).trim();\n const fileSection = content.substring(markerIndex + fileMarker.length).trim();\n const files = fileSection\n .split('\\n')\n .filter((line) => line.startsWith('- '))\n .map((line) => line.substring(2).trim());\n\n return { text, files };\n}\n\n// =============================================================================\n// Entry Components\n// =============================================================================\n\nexport interface UserMessageProps {\n entry: NormalizedEntry;\n className?: string;\n}\n\n/**\n * UserMessage - Display a user message with optional file attachments\n *\n * Uses glassmorphism styling with animated entry.\n */\nexport function UserMessage({ entry, className }: UserMessageProps) {\n const { text, files } = parseFilesFromContent(entry.content);\n\n return (\n <div className={cn('flex gap-3 justify-end ash-animate-fade-in', className)}>\n <div className=\"max-w-[85%]\">\n <div className=\"rounded-2xl p-4 bg-[var(--ash-accent)] text-[var(--ash-accent-foreground)]\">\n <p className=\"text-sm leading-relaxed whitespace-pre-wrap\">{text || '(files attached)'}</p>\n </div>\n {files.length > 0 && (\n <div className=\"mt-2 pt-2 border-t border-[var(--ash-accent-foreground)]/20\">\n <div className=\"text-xs text-[var(--ash-accent-foreground)]/60 mb-1 flex items-center gap-1\">\n <PaperclipIcon className=\"w-3 h-3\" />\n Attached Files\n </div>\n <div className=\"flex flex-wrap gap-1\">\n {files.map((file, index) => (\n <span\n key={index}\n className=\"inline-flex items-center px-2 py-0.5 rounded-lg bg-[var(--ash-accent-foreground)]/10 text-xs\"\n title={file}\n >\n {file.split(' (')[0]}\n </span>\n ))}\n </div>\n </div>\n )}\n {entry.timestamp && (\n <div className=\"text-xs text-white/40 mt-2\">\n {formatTimestamp(entry.timestamp)}\n </div>\n )}\n </div>\n <div className=\"w-7 h-7 rounded-full bg-white/10 flex items-center justify-center shrink-0\">\n <UserIcon className=\"w-4 h-4 text-white/50\" />\n </div>\n </div>\n );\n}\n\nexport interface AssistantMessageProps {\n entry: NormalizedEntry;\n /** Callback when user selects an option */\n onOptionSelect?: (optionText: string) => void;\n className?: string;\n}\n\n/**\n * AssistantMessage - Display an assistant message with markdown rendering\n *\n * Uses glassmorphism styling with bot avatar and animated entry.\n * Automatically detects and renders interactive options when present.\n */\nexport function AssistantMessage({ entry, onOptionSelect, className }: AssistantMessageProps) {\n // Try to parse options from the content\n const parsedOptions = parseOptionsFromContent(entry.content);\n\n const handleOptionSelect = (option: ParsedOption) => {\n if (onOptionSelect) {\n // Send \"Option N: Label\" format so the agent understands the selection\n onOptionSelect(`Option ${option.id}: ${option.label}`);\n }\n };\n\n return (\n <div className={cn('flex gap-3 ash-animate-fade-in', className)}>\n <div className=\"w-7 h-7 rounded-full bg-[var(--ash-accent)]/20 flex items-center justify-center shrink-0\">\n <BotIcon className=\"w-4 h-4 text-[var(--ash-accent)]\" />\n </div>\n <div className=\"flex-1 max-w-[85%]\">\n <div className=\"ash-card-glass rounded-2xl p-4\">\n <div className=\"ash-message-content prose prose-sm prose-invert max-w-none text-sm leading-relaxed\">\n {parsedOptions ? (\n <>\n {/* Render preamble text */}\n {parsedOptions.preamble && (\n <ReactMarkdown>{parsedOptions.preamble}</ReactMarkdown>\n )}\n {/* Render interactive options */}\n <OptionCards\n options={parsedOptions.options}\n onSelect={handleOptionSelect}\n />\n </>\n ) : (\n <ReactMarkdown>{entry.content}</ReactMarkdown>\n )}\n </div>\n </div>\n {entry.timestamp && (\n <div className=\"text-xs text-white/40 mt-2\">\n {formatTimestamp(entry.timestamp)}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport interface ThinkingMessageProps {\n entry: NormalizedEntry;\n className?: string;\n}\n\n/**\n * ThinkingMessage - Display thinking/reasoning content (extended thinking)\n *\n * Uses glassmorphism styling with purple accent for thinking mode.\n */\nexport function ThinkingMessage({ entry, className }: ThinkingMessageProps) {\n return (\n <div className={cn('flex gap-3 ash-animate-fade-in', className)}>\n <div className=\"w-7 h-7 rounded-full bg-purple-500/20 flex items-center justify-center shrink-0\">\n <SparklesIcon className=\"w-4 h-4 text-purple-400\" />\n </div>\n <div className=\"flex-1 max-w-[85%]\">\n <div className=\"rounded-2xl p-4 bg-purple-500/10 border border-purple-500/30\">\n <div className=\"text-xs text-purple-400 mb-2 font-medium\">Thinking</div>\n <div className=\"text-sm text-purple-300 italic opacity-80 whitespace-pre-wrap leading-relaxed\">\n {entry.content}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nexport interface ToolCallMessageProps {\n entry: NormalizedEntry;\n defaultExpanded?: boolean;\n className?: string;\n}\n\n/**\n * ToolCallMessage - Display a tool call entry using ToolCallCard\n *\n * Uses glassmorphism styling with animated entry.\n */\nexport function ToolCallMessage({ entry, defaultExpanded = false, className }: ToolCallMessageProps) {\n if (entry.entryType.type !== 'tool_call') return null;\n\n return (\n <div className={cn('flex gap-3 ash-animate-fade-in', className)}>\n <div className=\"w-7 h-7 rounded-full bg-[var(--ash-accent)]/20 flex items-center justify-center shrink-0\">\n <BotIcon className=\"w-4 h-4 text-[var(--ash-accent)]\" />\n </div>\n <div className=\"flex-1\">\n <ToolCallCard toolCall={entry.entryType.toolCall} defaultExpanded={defaultExpanded} />\n </div>\n </div>\n );\n}\n\nexport interface ErrorMessageProps {\n entry: NormalizedEntry;\n className?: string;\n}\n\n/**\n * ErrorMessage - Display an error entry\n *\n * Uses glassmorphism styling with red accent for errors.\n */\nexport function ErrorMessage({ entry, className }: ErrorMessageProps) {\n if (entry.entryType.type !== 'error') return null;\n\n return (\n <div className={cn('flex gap-3 ash-animate-fade-in', className)}>\n <div className=\"w-7 h-7 rounded-full bg-red-500/20 flex items-center justify-center shrink-0\">\n <AlertTriangleIcon className=\"w-4 h-4 text-red-400\" />\n </div>\n <div className=\"flex-1 max-w-[85%]\">\n <div className=\"rounded-2xl p-4 bg-red-500/10 border border-red-500/30\">\n <div className=\"text-xs text-red-400 mb-2 font-medium\">Error</div>\n <p className=\"text-sm text-red-300\">{entry.entryType.message}</p>\n {entry.entryType.code && (\n <p className=\"text-xs text-red-400/70 mt-2 font-mono\">Code: {entry.entryType.code}</p>\n )}\n </div>\n </div>\n </div>\n );\n}\n\n// =============================================================================\n// Entry Renderer\n// =============================================================================\n\nexport interface MessageEntryProps {\n entry: NormalizedEntry;\n /** Callback when user selects an option from assistant message */\n onOptionSelect?: (optionText: string) => void;\n className?: string;\n}\n\n/**\n * MessageEntry - Render a normalized entry based on its type\n *\n * This is a convenience component that routes to the appropriate\n * entry type component.\n *\n * @example\n * ```tsx\n * {entries.map(entry => (\n * <MessageEntry key={entry.id} entry={entry} onOptionSelect={handleSelect} />\n * ))}\n * ```\n */\nexport function MessageEntry({ entry, onOptionSelect, className }: MessageEntryProps) {\n switch (entry.entryType.type) {\n case 'user_message':\n return <UserMessage entry={entry} className={className} />;\n case 'assistant_message':\n return <AssistantMessage entry={entry} onOptionSelect={onOptionSelect} className={className} />;\n case 'thinking':\n return <ThinkingMessage entry={entry} className={className} />;\n case 'tool_call':\n return <ToolCallMessage entry={entry} className={className} />;\n case 'error':\n return <ErrorMessage entry={entry} className={className} />;\n default:\n return null;\n }\n}\n\nexport default MessageEntry;\n","import { cn } from '../utils';\n\nexport interface LoadingIndicatorProps {\n variant?: 'dots' | 'pulse' | 'spinner' | 'cursor';\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\n/**\n * LoadingIndicator - Display various loading states\n *\n * Uses the glassmorphism theme with accent-colored animations.\n *\n * Variants:\n * - dots: Three animated dots\n * - pulse: Single pulsing dot\n * - spinner: Rotating spinner\n * - cursor: Blinking cursor (like in the demo)\n *\n * @example\n * ```tsx\n * <LoadingIndicator />\n * <LoadingIndicator variant=\"spinner\" size=\"lg\" />\n * <LoadingIndicator variant=\"cursor\" />\n * ```\n */\nexport function LoadingIndicator({ variant = 'dots', size = 'md', className }: LoadingIndicatorProps) {\n if (variant === 'dots') {\n const dotSizes = {\n sm: 'w-1 h-1',\n md: 'w-1.5 h-1.5',\n lg: 'w-2 h-2',\n };\n return (\n <div className={cn('flex items-center gap-1', className)}>\n <span className={cn('rounded-full bg-[var(--ash-accent)] animate-pulse', dotSizes[size])} />\n <span className={cn('rounded-full bg-[var(--ash-accent)] animate-pulse', dotSizes[size])} style={{ animationDelay: '150ms' }} />\n <span className={cn('rounded-full bg-[var(--ash-accent)] animate-pulse', dotSizes[size])} style={{ animationDelay: '300ms' }} />\n </div>\n );\n }\n\n if (variant === 'pulse') {\n const dotSizes = {\n sm: 'w-1.5 h-1.5',\n md: 'w-2 h-2',\n lg: 'w-3 h-3',\n };\n return (\n <div className={cn('flex items-center gap-1', className)}>\n <span className={cn('bg-[var(--ash-accent)] rounded-full animate-pulse', dotSizes[size])} />\n </div>\n );\n }\n\n if (variant === 'cursor') {\n const cursorSizes = {\n sm: 'w-1 h-3',\n md: 'w-1.5 h-4',\n lg: 'w-2 h-5',\n };\n return (\n <span\n className={cn(\n 'inline-block bg-[var(--ash-accent)]/50 ash-tool-status-pending',\n cursorSizes[size],\n className\n )}\n />\n );\n }\n\n // Spinner variant\n const spinnerSizes = {\n sm: 'w-4 h-4',\n md: 'w-6 h-6',\n lg: 'w-8 h-8',\n };\n\n return (\n <div className={cn('animate-spin text-[var(--ash-accent)]', spinnerSizes[size], className)}>\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" className=\"opacity-25\" />\n <path d=\"M12 2a10 10 0 0 1 10 10\" strokeLinecap=\"round\" />\n </svg>\n </div>\n );\n}\n\nexport default LoadingIndicator;\n","import ReactMarkdown from 'react-markdown';\nimport { cn } from '../utils';\nimport { LoadingIndicator } from './LoadingIndicator';\n\nexport interface StreamingTextProps {\n content: string;\n isStreaming?: boolean;\n renderMarkdown?: boolean;\n className?: string;\n}\n\n/**\n * StreamingText - Display text that may be streaming, with optional markdown\n *\n * Shows a blinking cursor indicator when streaming is active.\n * Uses glassmorphism theme styling.\n *\n * @example\n * ```tsx\n * <StreamingText content={text} isStreaming />\n * <StreamingText content={markdown} renderMarkdown />\n * ```\n */\nexport function StreamingText({\n content,\n isStreaming = false,\n renderMarkdown = true,\n className,\n}: StreamingTextProps) {\n return (\n <div className={cn('relative', className)}>\n {renderMarkdown ? (\n <div className=\"ash-message-content prose prose-sm prose-invert max-w-none text-sm leading-relaxed\">\n <ReactMarkdown>{content}</ReactMarkdown>\n {isStreaming && (\n <LoadingIndicator variant=\"cursor\" size=\"sm\" className=\"inline-block ml-0.5\" />\n )}\n </div>\n ) : (\n <p className=\"whitespace-pre-wrap text-sm leading-relaxed\">\n {content}\n {isStreaming && (\n <LoadingIndicator variant=\"cursor\" size=\"sm\" className=\"inline-block ml-0.5\" />\n )}\n </p>\n )}\n </div>\n );\n}\n\nexport default StreamingText;\n","import { useState, useEffect, useRef } from 'react';\nimport type { NormalizedToolCall } from '../types';\nimport { cn, getActionLabel } from '../utils';\nimport { StatusIndicator } from './StatusIndicator';\nimport { ActionIcon } from './ActionIcon';\n\nexport interface CompactToolStatusLineProps {\n /** The current tool call to display */\n toolCall: NormalizedToolCall;\n\n /** Previous tool call (for exit animation) */\n previousToolCall?: NormalizedToolCall | null;\n\n /** Animation duration in ms */\n animationDuration?: number;\n\n /** Additional class names */\n className?: string;\n}\n\n/**\n * Compact status line for displaying the current tool execution.\n *\n * Features a smooth replace animation where the previous tool call\n * slides out while the new one slides in. Similar to the homepage\n * status line animation.\n *\n * @example\n * ```tsx\n * <CompactToolStatusLine\n * toolCall={currentToolCall}\n * previousToolCall={lastToolCall}\n * />\n * ```\n */\nexport function CompactToolStatusLine({\n toolCall,\n previousToolCall,\n animationDuration = 300,\n className,\n}: CompactToolStatusLineProps) {\n const [isAnimating, setIsAnimating] = useState(false);\n const [displayedToolCall, setDisplayedToolCall] = useState(toolCall);\n const [exitingToolCall, setExitingToolCall] = useState<NormalizedToolCall | null>(null);\n const prevToolCallRef = useRef<string | null>(null);\n\n useEffect(() => {\n // Detect when the tool call changes (by ID)\n if (toolCall.id !== prevToolCallRef.current) {\n if (prevToolCallRef.current !== null && previousToolCall) {\n // Trigger exit animation for previous tool call\n setExitingToolCall(previousToolCall);\n setIsAnimating(true);\n\n // After exit animation, update displayed tool call\n const timer = setTimeout(() => {\n setDisplayedToolCall(toolCall);\n setExitingToolCall(null);\n setIsAnimating(false);\n }, animationDuration);\n\n prevToolCallRef.current = toolCall.id;\n return () => clearTimeout(timer);\n } else {\n // First tool call - no exit animation\n setDisplayedToolCall(toolCall);\n prevToolCallRef.current = toolCall.id;\n }\n } else {\n // Same tool call, just update status\n setDisplayedToolCall(toolCall);\n }\n return undefined;\n }, [toolCall, previousToolCall, animationDuration]);\n\n // Status-based styling\n const statusClasses = {\n pending: 'border-yellow-500/30',\n success: 'border-[var(--ash-accent)]/30',\n failed: 'border-red-500/30',\n };\n\n const renderToolCallContent = (tc: NormalizedToolCall, isExiting: boolean) => (\n <div\n className={cn(\n 'flex items-center gap-3 px-4 py-2.5',\n isExiting ? 'ash-status-line-exit' : (isAnimating ? 'ash-status-line-enter' : '')\n )}\n style={{\n animationDuration: `${animationDuration}ms`,\n }}\n >\n {/* Icon badge */}\n <div\n className={cn(\n 'w-6 h-6 rounded-lg flex items-center justify-center shrink-0',\n tc.status === 'pending'\n ? 'bg-yellow-500/20'\n : tc.status === 'failed'\n ? 'bg-red-500/20'\n : 'bg-[var(--ash-accent)]/20'\n )}\n >\n <ActionIcon\n actionType={tc.actionType}\n className={cn(\n 'w-3.5 h-3.5',\n tc.status === 'pending'\n ? 'text-yellow-400'\n : tc.status === 'failed'\n ? 'text-red-400'\n : 'text-[var(--ash-accent)]'\n )}\n />\n </div>\n\n {/* Tool name */}\n <span className=\"text-sm font-medium text-white shrink-0\">\n {getActionLabel(tc.actionType)}\n </span>\n\n {/* Summary */}\n <span className=\"font-mono text-sm truncate text-white/60 flex-1 min-w-0\">\n {tc.summary}\n </span>\n\n {/* Status indicator */}\n <StatusIndicator status={tc.status} size=\"sm\" />\n </div>\n );\n\n return (\n <div\n className={cn(\n 'relative rounded-xl border bg-[var(--ash-surface-dark,#0a0a0a)] overflow-hidden',\n statusClasses[displayedToolCall.status],\n displayedToolCall.status === 'pending' && 'ash-tool-status-pending',\n className\n )}\n >\n {/* Exiting tool call (animating out) */}\n {exitingToolCall && (\n <div className=\"absolute inset-0\">\n {renderToolCallContent(exitingToolCall, true)}\n </div>\n )}\n\n {/* Current tool call */}\n {renderToolCallContent(displayedToolCall, false)}\n </div>\n );\n}\n\nexport default CompactToolStatusLine;\n","import { useState, useMemo } from 'react';\nimport type { NormalizedToolCall, ToolExecutionGroup as ToolExecutionGroupType } from '../types';\nimport { cn } from '../utils';\nimport { ChevronDownIcon, CheckIcon } from '../icons';\nimport { StatusIndicator } from './StatusIndicator';\nimport { ToolCallCard } from './ToolCallCard';\nimport { CompactToolStatusLine } from './CompactToolStatusLine';\n\nexport interface ToolExecutionGroupProps {\n /** Tool calls in this group */\n toolCalls: NormalizedToolCall[];\n\n /** Whether the group starts expanded */\n defaultExpanded?: boolean;\n\n /** Animation duration for status line transitions (ms) */\n animationDuration?: number;\n\n /** Additional class names */\n className?: string;\n}\n\n/**\n * Calculate the overall status of a group of tool calls\n */\nfunction calculateGroupStatus(\n toolCalls: NormalizedToolCall[]\n): ToolExecutionGroupType['status'] {\n const hasPending = toolCalls.some((tc) => tc.status === 'pending');\n const hasFailed = toolCalls.some((tc) => tc.status === 'failed');\n const allSuccess = toolCalls.every((tc) => tc.status === 'success');\n\n if (hasPending) return 'pending';\n if (allSuccess) return 'success';\n if (hasFailed && !hasPending) return toolCalls.some((tc) => tc.status === 'success') ? 'partial_failure' : 'failed';\n return 'pending';\n}\n\n/**\n * ToolExecutionGroup - Displays multiple tool calls in a compact accordion format.\n *\n * In collapsed state, shows a single animated status line with the current/latest\n * tool call. When expanded, shows all tool calls as individual cards.\n *\n * Features:\n * - Animated status line that transitions between tool calls\n * - Expandable accordion to see all tool call details\n * - Count badge showing total tool calls\n * - Overall status indicator\n *\n * @example\n * ```tsx\n * <ToolExecutionGroup\n * toolCalls={consecutiveToolCalls}\n * defaultExpanded={false}\n * />\n * ```\n */\nexport function ToolExecutionGroup({\n toolCalls,\n defaultExpanded = false,\n animationDuration = 300,\n className,\n}: ToolExecutionGroupProps) {\n const [expanded, setExpanded] = useState(defaultExpanded);\n\n // Get the active (latest) tool call for status line\n const activeToolCall = toolCalls[toolCalls.length - 1];\n const previousToolCall = toolCalls.length > 1 ? toolCalls[toolCalls.length - 2] : null;\n\n // Calculate overall group status\n const groupStatus = useMemo(() => calculateGroupStatus(toolCalls), [toolCalls]);\n\n // Count completed tool calls\n const completedCount = toolCalls.filter((tc) => tc.status === 'success').length;\n const failedCount = toolCalls.filter((tc) => tc.status === 'failed').length;\n const totalCount = toolCalls.length;\n\n if (!activeToolCall) {\n return null;\n }\n\n // Status-based border styling\n const borderClasses = {\n pending: 'border-yellow-500/30',\n success: 'border-[var(--ash-accent)]/30',\n partial_failure: 'border-orange-500/30',\n failed: 'border-red-500/30',\n };\n\n return (\n <div\n className={cn(\n 'rounded-xl border bg-[var(--ash-surface-dark,#0a0a0a)] overflow-hidden ash-animate-fade-in',\n borderClasses[groupStatus],\n groupStatus === 'pending' && 'ash-tool-status-pending',\n className\n )}\n >\n {/* Header / Collapsed View */}\n <button\n onClick={() => setExpanded(!expanded)}\n className={cn(\n 'w-full transition-colors hover:bg-white/5 cursor-pointer'\n )}\n >\n {/* Status line for current tool call */}\n <div className=\"relative\">\n <CompactToolStatusLine\n toolCall={activeToolCall}\n previousToolCall={previousToolCall}\n animationDuration={animationDuration}\n className=\"border-0 rounded-none\"\n />\n\n {/* Overlay with count badge and expand control */}\n <div className=\"absolute right-3 top-1/2 -translate-y-1/2 flex items-center gap-2\">\n {/* Count badge */}\n {totalCount > 1 && (\n <div\n className={cn(\n 'flex items-center gap-1.5 px-2 py-0.5 rounded-full text-xs font-medium',\n groupStatus === 'pending'\n ? 'bg-yellow-500/20 text-yellow-400'\n : groupStatus === 'success'\n ? 'bg-[var(--ash-accent)]/20 text-[var(--ash-accent)]'\n : groupStatus === 'failed'\n ? 'bg-red-500/20 text-red-400'\n : 'bg-orange-500/20 text-orange-400'\n )}\n >\n {groupStatus === 'pending' ? (\n <span>{completedCount}/{totalCount}</span>\n ) : failedCount > 0 ? (\n <span>{completedCount} ok, {failedCount} failed</span>\n ) : (\n <span>{totalCount} tools</span>\n )}\n </div>\n )}\n\n {/* Chevron */}\n <ChevronDownIcon\n className={cn(\n 'w-4 h-4 text-white/40 transition-transform duration-200',\n expanded && 'rotate-180'\n )}\n />\n </div>\n </div>\n </button>\n\n {/* Expanded View - All tool calls */}\n {expanded && (\n <div className=\"border-t border-white/5 bg-black/20\">\n {/* Timeline of tool calls */}\n <div className=\"p-3 space-y-2\">\n {toolCalls.map((toolCall, index) => (\n <div key={toolCall.id} className=\"relative\">\n {/* Connector line (for non-last items) */}\n {index < toolCalls.length - 1 && (\n <div className=\"absolute left-[19px] top-10 bottom-0 w-px bg-white/10\" />\n )}\n\n <ToolCallCard\n toolCall={toolCall}\n defaultExpanded={false}\n className=\"relative z-10\"\n />\n </div>\n ))}\n </div>\n\n {/* Summary footer */}\n {groupStatus !== 'pending' && (\n <div\n className={cn(\n 'px-4 py-3 border-t border-white/5 flex items-center gap-2',\n groupStatus === 'success'\n ? 'bg-[var(--ash-accent)]/5'\n : groupStatus === 'failed'\n ? 'bg-red-500/5'\n : 'bg-orange-500/5'\n )}\n >\n {groupStatus === 'success' ? (\n <>\n <CheckIcon className=\"w-4 h-4 text-[var(--ash-accent)]\" />\n <span className=\"text-sm text-[var(--ash-accent)] font-medium\">\n All {totalCount} tool{totalCount !== 1 ? 's' : ''} completed successfully\n </span>\n </>\n ) : groupStatus === 'failed' ? (\n <>\n <StatusIndicator status=\"failed\" size=\"sm\" />\n <span className=\"text-sm text-red-400 font-medium\">\n {failedCount} tool{failedCount !== 1 ? 's' : ''} failed\n </span>\n </>\n ) : (\n <>\n <StatusIndicator status=\"failed\" size=\"sm\" />\n <span className=\"text-sm text-orange-400 font-medium\">\n {completedCount} succeeded, {failedCount} failed\n </span>\n </>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport default ToolExecutionGroup;\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport type { NormalizedToolCall } from '../types';\nimport { cn } from '../utils';\nimport { ChevronDownIcon, CheckIcon, ErrorIcon, ToolIcon, SpinnerIcon } from '../icons';\n\nexport type StepStatus = 'pending' | 'running' | 'success' | 'error';\n\nexport interface StepAccordionProps {\n /** Tool calls to display as steps */\n toolCalls: NormalizedToolCall[];\n /** Whether the accordion starts expanded */\n defaultExpanded?: boolean;\n /** Controlled expanded state */\n isExpanded?: boolean;\n /** Callback when expanded state changes */\n onToggle?: () => void;\n /** Additional class names */\n className?: string;\n}\n\n/**\n * Format duration between two timestamps\n */\nfunction formatDuration(startMs: number, endMs: number): string {\n const duration = endMs - startMs;\n if (duration < 1000) return `${duration}ms`;\n return `${(duration / 1000).toFixed(1)}s`;\n}\n\n/**\n * Get a human-readable label for a tool call\n */\nfunction getToolLabel(toolName: string, summary?: string): string {\n // If we have a summary, use it\n if (summary && summary.length > 0 && summary.length < 50) {\n return summary;\n }\n\n // Clean up tool name for display\n const cleaned = toolName\n .replace(/^mcp__[^_]+__/, '') // Remove MCP prefix\n .replace(/Tool$/, '') // Remove Tool suffix\n .replace(/_/g, ' ') // Replace underscores with spaces\n .replace(/([a-z])([A-Z])/g, '$1 $2'); // Add space before capitals\n\n return cleaned.charAt(0).toUpperCase() + cleaned.slice(1);\n}\n\n/**\n * Map tool call status to step status\n */\nfunction toStepStatus(status: NormalizedToolCall['status']): StepStatus {\n switch (status) {\n case 'pending':\n return 'running';\n case 'success':\n return 'success';\n case 'failed':\n return 'error';\n default:\n return 'pending';\n }\n}\n\n/**\n * StepIcon - Icon for a step based on its status\n */\nfunction StepIcon({ status }: { status: StepStatus }) {\n const iconClass = 'w-3.5 h-3.5';\n\n switch (status) {\n case 'running':\n return <SpinnerIcon className={cn(iconClass, 'animate-spin text-[var(--ash-accent)]')} />;\n case 'success':\n return <CheckIcon className={cn(iconClass, 'text-[var(--ash-accent)]')} />;\n case 'error':\n return <ErrorIcon className={cn(iconClass, 'text-red-500')} />;\n default:\n return <ToolIcon className={cn(iconClass, 'text-white/40')} />;\n }\n}\n\n/**\n * StepAccordion - Simpler accordion that shows tool calls as numbered steps\n *\n * Features:\n * - Collapsed header shows current running step or completion status\n * - Expanded view shows all steps as a numbered list\n * - Shows step duration for completed steps\n * - Compact design suitable for embedding in chat\n *\n * @example\n * ```tsx\n * <StepAccordion\n * toolCalls={normalizedToolCalls}\n * defaultExpanded={false}\n * />\n * ```\n */\nexport function StepAccordion({\n toolCalls,\n defaultExpanded = false,\n isExpanded: controlledExpanded,\n onToggle,\n className,\n}: StepAccordionProps) {\n const [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n\n // Use controlled or uncontrolled state\n const isExpanded = controlledExpanded !== undefined ? controlledExpanded : internalExpanded;\n\n const handleToggle = useCallback(() => {\n if (onToggle) {\n onToggle();\n } else {\n setInternalExpanded((prev) => !prev);\n }\n }, [onToggle]);\n\n if (toolCalls.length === 0) {\n return null;\n }\n\n // Count completed and running steps\n const completedSteps = toolCalls.filter((tc) => tc.status === 'success' || tc.status === 'failed').length;\n const runningStep = toolCalls.find((tc) => tc.status === 'pending');\n const hasError = toolCalls.some((tc) => tc.status === 'failed');\n const allComplete = completedSteps === toolCalls.length;\n\n return (\n <div\n className={cn(\n 'rounded-xl border overflow-hidden',\n hasError\n ? 'border-red-500/30'\n : allComplete\n ? 'border-[var(--ash-accent)]/30'\n : 'border-yellow-500/30',\n className\n )}\n >\n {/* Header - always visible */}\n <button\n type=\"button\"\n onClick={handleToggle}\n className=\"w-full flex items-center gap-2 px-3 py-2 bg-white/5 hover:bg-white/10 transition-colors text-left cursor-pointer\"\n >\n {/* Expand/collapse icon */}\n <ChevronDownIcon\n className={cn(\n 'w-4 h-4 text-white/40 transition-transform duration-200 flex-shrink-0',\n !isExpanded && '-rotate-90'\n )}\n />\n\n {/* Summary */}\n <div className=\"flex-1 min-w-0 flex items-center gap-2\">\n {runningStep ? (\n <>\n <SpinnerIcon className=\"w-3.5 h-3.5 animate-spin text-[var(--ash-accent)] flex-shrink-0\" />\n <span className=\"text-sm text-white/80 truncate\">\n {getToolLabel(runningStep.toolName, runningStep.summary)}\n </span>\n </>\n ) : hasError ? (\n <>\n <ErrorIcon className=\"w-3.5 h-3.5 text-red-500 flex-shrink-0\" />\n <span className=\"text-sm text-red-400 truncate\">Completed with errors</span>\n </>\n ) : (\n <>\n <CheckIcon className=\"w-3.5 h-3.5 text-[var(--ash-accent)] flex-shrink-0\" />\n <span className=\"text-sm text-white/70 truncate\">\n {completedSteps} step{completedSteps !== 1 ? 's' : ''} completed\n </span>\n </>\n )}\n </div>\n\n {/* Step counter badge */}\n <span className=\"text-xs px-1.5 py-0.5 rounded-full bg-white/10 text-white/50 flex-shrink-0\">\n {completedSteps}/{toolCalls.length}\n </span>\n </button>\n\n {/* Expanded content */}\n {isExpanded && (\n <div className=\"border-t border-white/10 ash-accordion-content\">\n <div className=\"divide-y divide-white/5\">\n {toolCalls.map((toolCall, index) => {\n const stepStatus = toStepStatus(toolCall.status);\n const startTime = toolCall.startedAt ? new Date(toolCall.startedAt).getTime() : 0;\n const endTime = toolCall.completedAt ? new Date(toolCall.completedAt).getTime() : 0;\n const hasDuration = startTime > 0 && endTime > 0;\n\n return (\n <div\n key={toolCall.id}\n className={cn(\n 'px-3 py-2 flex items-start gap-2',\n stepStatus === 'running' && 'bg-[var(--ash-accent)]/5',\n stepStatus === 'error' && 'bg-red-500/5'\n )}\n >\n {/* Step number and icon */}\n <div className=\"flex items-center gap-1.5 flex-shrink-0 pt-0.5\">\n <span className=\"text-xs text-white/40 w-4 text-right\">{index + 1}.</span>\n <StepIcon status={stepStatus} />\n </div>\n\n {/* Step content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span\n className={cn(\n 'text-sm',\n stepStatus === 'running' && 'text-[var(--ash-accent)]',\n stepStatus === 'success' && 'text-white/70',\n stepStatus === 'error' && 'text-red-400',\n stepStatus === 'pending' && 'text-white/40'\n )}\n >\n {getToolLabel(toolCall.toolName, toolCall.summary)}\n </span>\n\n {/* Duration for completed steps */}\n {hasDuration && (stepStatus === 'success' || stepStatus === 'error') && (\n <span className=\"text-xs text-white/40\">{formatDuration(startTime, endTime)}</span>\n )}\n </div>\n\n {/* Error message */}\n {toolCall.isError && toolCall.actionType && 'result' in toolCall.actionType && (\n <p className=\"text-xs mt-1 text-red-400/80 truncate\">\n {String((toolCall.actionType as { result?: { value?: unknown } }).result?.value || 'Error')}\n </p>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport default StepAccordion;\n","/**\n * @ash-cloud/ash-ui - Types\n *\n * Normalized types for structured tool call display in agentic UIs.\n * These types provide a unified representation for displaying tool calls\n * with their arguments and results together.\n */\n\n// =============================================================================\n// Tool Status\n// =============================================================================\n\n/**\n * Status of a tool call execution\n */\nexport type ToolStatus = 'pending' | 'success' | 'failed';\n\n// =============================================================================\n// Action-Specific Result Types\n// =============================================================================\n\n/**\n * Result from a command/bash execution\n */\nexport interface CommandRunResult {\n exitCode?: number;\n success?: boolean;\n output?: string;\n}\n\n/**\n * Generic tool result that can be markdown or structured JSON\n */\nexport interface ToolResult {\n type: 'markdown' | 'json';\n value: unknown;\n}\n\n// =============================================================================\n// Action Types (Discriminated Union)\n// =============================================================================\n\n/**\n * Bash/command execution action\n */\nexport interface CommandRunAction {\n action: 'command_run';\n command: string;\n description?: string;\n result?: CommandRunResult;\n}\n\n/**\n * File read action\n */\nexport interface FileReadAction {\n action: 'file_read';\n path: string;\n offset?: number;\n limit?: number;\n}\n\n/**\n * File edit action\n */\nexport interface FileEditAction {\n action: 'file_edit';\n path: string;\n oldString?: string;\n newString?: string;\n replaceAll?: boolean;\n}\n\n/**\n * File write action\n */\nexport interface FileWriteAction {\n action: 'file_write';\n path: string;\n content?: string;\n}\n\n/**\n * Search/grep action\n */\nexport interface SearchAction {\n action: 'search';\n pattern: string;\n path?: string;\n glob?: string;\n type?: string;\n}\n\n/**\n * Glob/file pattern matching action\n */\nexport interface GlobAction {\n action: 'glob';\n pattern: string;\n path?: string;\n}\n\n/**\n * Web fetch action\n */\nexport interface WebFetchAction {\n action: 'web_fetch';\n url: string;\n prompt?: string;\n}\n\n/**\n * Web search action\n */\nexport interface WebSearchAction {\n action: 'web_search';\n query: string;\n}\n\n/**\n * MCP (Model Context Protocol) tool action\n */\nexport interface McpToolAction {\n action: 'mcp_tool';\n serverName: string;\n toolName: string;\n arguments?: unknown;\n result?: ToolResult;\n}\n\n/**\n * Generic/unknown tool action\n */\nexport interface GenericToolAction {\n action: 'generic_tool';\n toolName: string;\n arguments?: unknown;\n result?: ToolResult;\n}\n\n// =============================================================================\n// Todo Types\n// =============================================================================\n\n/**\n * Status of a todo item\n */\nexport type TodoStatus = 'pending' | 'in_progress' | 'completed';\n\n/**\n * A single todo item from TodoWrite tool\n */\nexport interface TodoItem {\n /** Task content - imperative form (e.g., \"Run tests\") */\n content: string;\n /** Current status of the todo */\n status: TodoStatus;\n /** Active form shown during execution (e.g., \"Running tests\") */\n activeForm: string;\n}\n\n/**\n * TodoWrite tool action - tracks task progress\n */\nexport interface TodoWriteAction {\n action: 'todo_write';\n /** All todos in the current list */\n todos: TodoItem[];\n /** Summary statistics */\n stats?: {\n total: number;\n completed: number;\n inProgress: number;\n pending: number;\n };\n}\n\n/**\n * Discriminated union of all action types\n */\nexport type ActionType =\n | CommandRunAction\n | FileReadAction\n | FileEditAction\n | FileWriteAction\n | SearchAction\n | GlobAction\n | WebFetchAction\n | WebSearchAction\n | McpToolAction\n | GenericToolAction\n | TodoWriteAction;\n\n// =============================================================================\n// Normalized Tool Call\n// =============================================================================\n\n/**\n * A normalized tool call that combines tool_use and tool_result data\n */\nexport interface NormalizedToolCall {\n /** Unique ID from the tool_use block */\n id: string;\n\n /** Original tool name (e.g., 'Bash', 'Read', 'mcp__server__tool') */\n toolName: string;\n\n /** Parsed action type with structured arguments and result */\n actionType: ActionType;\n\n /** Current execution status */\n status: ToolStatus;\n\n /** Human-readable one-liner summary */\n summary: string;\n\n /** When the tool call started */\n startedAt?: string;\n\n /** When the tool call completed */\n completedAt?: string;\n\n /** Whether this tool call resulted in an error */\n isError?: boolean;\n}\n\n// =============================================================================\n// Normalized Entry Types\n// =============================================================================\n\n/**\n * User message entry\n */\nexport interface UserMessageEntry {\n type: 'user_message';\n}\n\n/**\n * Assistant message entry\n */\nexport interface AssistantMessageEntry {\n type: 'assistant_message';\n}\n\n/**\n * Thinking/reasoning entry (extended thinking)\n */\nexport interface ThinkingEntry {\n type: 'thinking';\n}\n\n/**\n * Tool call entry with full tool call data\n */\nexport interface ToolCallEntry {\n type: 'tool_call';\n toolCall: NormalizedToolCall;\n}\n\n/**\n * Error entry\n */\nexport interface ErrorEntry {\n type: 'error';\n message: string;\n code?: string;\n}\n\n/**\n * Discriminated union of all entry types\n */\nexport type NormalizedEntryType =\n | UserMessageEntry\n | AssistantMessageEntry\n | ThinkingEntry\n | ToolCallEntry\n | ErrorEntry;\n\n// =============================================================================\n// Normalized Entry\n// =============================================================================\n\n/**\n * A normalized conversation entry for display\n */\nexport interface NormalizedEntry {\n /** Unique entry ID */\n id: string;\n\n /** ISO timestamp */\n timestamp?: string;\n\n /** Entry type with type-specific data */\n entryType: NormalizedEntryType;\n\n /** Text content for display */\n content: string;\n}\n\n// =============================================================================\n// Type Guards\n// =============================================================================\n\nexport function isCommandRunAction(action: ActionType): action is CommandRunAction {\n return action.action === 'command_run';\n}\n\nexport function isFileReadAction(action: ActionType): action is FileReadAction {\n return action.action === 'file_read';\n}\n\nexport function isFileEditAction(action: ActionType): action is FileEditAction {\n return action.action === 'file_edit';\n}\n\nexport function isFileWriteAction(action: ActionType): action is FileWriteAction {\n return action.action === 'file_write';\n}\n\nexport function isSearchAction(action: ActionType): action is SearchAction {\n return action.action === 'search';\n}\n\nexport function isGlobAction(action: ActionType): action is GlobAction {\n return action.action === 'glob';\n}\n\nexport function isWebFetchAction(action: ActionType): action is WebFetchAction {\n return action.action === 'web_fetch';\n}\n\nexport function isWebSearchAction(action: ActionType): action is WebSearchAction {\n return action.action === 'web_search';\n}\n\nexport function isMcpToolAction(action: ActionType): action is McpToolAction {\n return action.action === 'mcp_tool';\n}\n\nexport function isGenericToolAction(action: ActionType): action is GenericToolAction {\n return action.action === 'generic_tool';\n}\n\nexport function isTodoWriteAction(action: ActionType): action is TodoWriteAction {\n return action.action === 'todo_write';\n}\n\nexport function isToolCallEntry(entry: NormalizedEntryType): entry is ToolCallEntry {\n return entry.type === 'tool_call';\n}\n\nexport function isErrorEntry(entry: NormalizedEntryType): entry is ErrorEntry {\n return entry.type === 'error';\n}\n\n// =============================================================================\n// Log Types (for SandboxLogsPanel)\n// =============================================================================\n\nexport type LogLevel = 'info' | 'warn' | 'error' | 'debug';\nexport type LogCategory = 'setup' | 'skills' | 'execution' | 'process' | 'startup';\n\nexport interface LogEntry {\n timestamp: string;\n level: LogLevel;\n category: LogCategory;\n message: string;\n data?: Record<string, unknown>;\n}\n\n// =============================================================================\n// File Attachment\n// =============================================================================\n\nexport interface FileAttachment {\n name: string;\n type: string;\n size: number;\n base64: string;\n}\n\n// =============================================================================\n// Display Mode Configuration\n// =============================================================================\n\n/**\n * Display mode for tool calls in the chat interface\n *\n * - 'inline': Each tool call rendered inline as expandable cards (current behavior)\n * - 'compact': Single animated status line that updates with each tool call,\n * with accordion to expand and see execution details. Text streams unbroken.\n * - 'accordion': Simpler step-based accordion list that accumulates tool calls\n * with icons, labels, and durations (like Vidra's ThinkingIndicator).\n */\nexport type ToolDisplayMode = 'inline' | 'compact' | 'accordion';\n\n/**\n * Configuration for tool display behavior\n */\nexport interface ToolDisplayConfig {\n /**\n * Display mode for tool calls\n * @default 'inline'\n */\n mode: ToolDisplayMode;\n\n /**\n * For 'compact' mode: break into a new group every N tool calls\n * Set to 0 or undefined to never break (all tool calls in single group)\n * @default 0\n */\n breakEveryNToolCalls?: number;\n\n /**\n * Whether tool call groups start expanded\n * @default false\n */\n defaultExpanded?: boolean;\n\n /**\n * Animation duration for status line transitions (ms)\n * @default 300\n */\n animationDuration?: number;\n}\n\n/**\n * Default display configuration\n */\nexport const DEFAULT_DISPLAY_CONFIG: ToolDisplayConfig = {\n mode: 'inline',\n breakEveryNToolCalls: 0,\n defaultExpanded: false,\n animationDuration: 300,\n};\n\n// =============================================================================\n// Tool Execution Group (for compact mode)\n// =============================================================================\n\n/**\n * A group of consecutive tool calls that are displayed together\n * in compact mode. Text content before/after flows around the group.\n */\nexport interface ToolExecutionGroup {\n /** Unique ID for the group */\n id: string;\n\n /** Tool calls in this group (in order) */\n toolCalls: NormalizedToolCall[];\n\n /** Index of the currently active/latest tool call for status display */\n activeIndex: number;\n\n /** Whether all tool calls in this group have completed */\n isComplete: boolean;\n\n /** Overall status of the group */\n status: 'pending' | 'success' | 'partial_failure' | 'failed';\n}\n","import { createContext, useContext, useState, useCallback, useMemo, type ReactNode } from 'react';\nimport { DEFAULT_DISPLAY_CONFIG, type ToolDisplayConfig, type ToolDisplayMode } from '../types';\n\n/**\n * Context type for display mode configuration\n */\nexport interface DisplayModeContextType {\n /** Current display configuration */\n config: ToolDisplayConfig;\n\n /** Update the display mode */\n setMode: (mode: ToolDisplayMode) => void;\n\n /** Update the full configuration */\n setConfig: (config: Partial<ToolDisplayConfig>) => void;\n\n /** Toggle between 'inline' and 'compact' modes */\n toggleMode: () => void;\n}\n\nconst DisplayModeContext = createContext<DisplayModeContextType | null>(null);\n\nexport interface DisplayModeProviderProps {\n children: ReactNode;\n\n /** Initial display configuration */\n initialConfig?: Partial<ToolDisplayConfig>;\n}\n\n/**\n * Provider for display mode configuration.\n *\n * Wrap your chat component with this provider to enable\n * configurable tool call display modes.\n *\n * @example\n * ```tsx\n * <DisplayModeProvider initialConfig={{ mode: 'compact' }}>\n * <MessageList entries={entries} />\n * </DisplayModeProvider>\n * ```\n */\nexport function DisplayModeProvider({ children, initialConfig }: DisplayModeProviderProps) {\n const [config, setConfigState] = useState<ToolDisplayConfig>({\n ...DEFAULT_DISPLAY_CONFIG,\n ...initialConfig,\n });\n\n const setMode = useCallback((mode: ToolDisplayMode) => {\n setConfigState((prev) => ({ ...prev, mode }));\n }, []);\n\n const setConfig = useCallback((updates: Partial<ToolDisplayConfig>) => {\n setConfigState((prev) => ({ ...prev, ...updates }));\n }, []);\n\n const toggleMode = useCallback(() => {\n setConfigState((prev) => ({\n ...prev,\n mode: prev.mode === 'inline' ? 'compact' : 'inline',\n }));\n }, []);\n\n const value = useMemo(\n () => ({ config, setMode, setConfig, toggleMode }),\n [config, setMode, setConfig, toggleMode]\n );\n\n return (\n <DisplayModeContext.Provider value={value}>\n {children}\n </DisplayModeContext.Provider>\n );\n}\n\n/**\n * Hook to access display mode configuration.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { config, toggleMode } = useDisplayMode();\n *\n * return (\n * <button onClick={toggleMode}>\n * Mode: {config.mode}\n * </button>\n * );\n * }\n * ```\n */\nexport function useDisplayMode(): DisplayModeContextType {\n const context = useContext(DisplayModeContext);\n\n if (!context) {\n // Return a default context for use outside a provider\n return {\n config: DEFAULT_DISPLAY_CONFIG,\n setMode: () => {},\n setConfig: () => {},\n toggleMode: () => {},\n };\n }\n\n return context;\n}\n\n/**\n * Hook to get just the current config (for components that only read)\n */\nexport function useDisplayConfig(): ToolDisplayConfig {\n const { config } = useDisplayMode();\n return config;\n}\n","import { useMemo } from 'react';\nimport type { NormalizedEntry, ToolDisplayConfig } from '../types';\nimport { cn, groupEntriesForCompactMode, extractToolCallsFromGroup } from '../utils';\nimport { MessageEntry } from './MessageEntry';\nimport { LoadingIndicator } from './LoadingIndicator';\nimport { StreamingText } from './StreamingText';\nimport { ToolExecutionGroup } from './ToolExecutionGroup';\nimport { StepAccordion } from './StepAccordion';\nimport { BotIcon } from '../icons';\nimport { useDisplayConfig } from './DisplayModeContext';\n\nexport interface MessageListProps {\n /** Normalized conversation entries to display */\n entries: NormalizedEntry[];\n /** Whether a response is currently loading */\n loading?: boolean;\n /** Streaming text content (displayed during real-time streaming) */\n streamingContent?: string;\n /** Display configuration override (uses context if not provided) */\n displayConfig?: ToolDisplayConfig;\n /** Callback when user selects an option from assistant message */\n onOptionSelect?: (optionText: string) => void;\n /** Additional class names */\n className?: string;\n}\n\n/**\n * MessageList - Display a list of normalized message entries\n *\n * Handles various entry types including user messages, assistant messages,\n * tool calls, thinking, and errors. Also supports streaming content display.\n *\n * Supports two display modes:\n * - 'inline': Each tool call rendered as individual expandable cards (default)\n * - 'compact': Consecutive tool calls grouped into a single accordion with\n * an animated status line showing the current tool\n *\n * Uses glassmorphism dark theme styling with animated entries.\n *\n * @example\n * ```tsx\n * <MessageList entries={normalizedEntries} />\n * <MessageList entries={entries} loading streamingContent={text} />\n * <MessageList entries={entries} displayConfig={{ mode: 'compact' }} />\n * ```\n */\nexport function MessageList({\n entries,\n loading,\n streamingContent,\n displayConfig: displayConfigProp,\n onOptionSelect,\n className,\n}: MessageListProps) {\n // Use provided config or context config\n const contextConfig = useDisplayConfig();\n const config = displayConfigProp || contextConfig;\n\n // Group entries based on display mode\n const groupedEntries = useMemo(() => {\n if (config.mode === 'inline') {\n // Inline mode - return entries as-is (wrapped in single type)\n return entries.map((entry) => ({\n type: 'single' as const,\n entry,\n id: entry.id,\n }));\n }\n\n // Compact and accordion modes - group consecutive tool calls\n return groupEntriesForCompactMode(entries, config);\n }, [entries, config]);\n\n return (\n <div className={cn('flex-1 overflow-y-auto p-4 space-y-4 ash-scrollbar', className)}>\n {groupedEntries.map((groupedEntry) => {\n if (groupedEntry.type === 'single') {\n return <MessageEntry key={groupedEntry.entry.id} entry={groupedEntry.entry} onOptionSelect={onOptionSelect} />;\n }\n\n // Tool group - render as ToolExecutionGroup or StepAccordion based on mode\n const toolCalls = extractToolCallsFromGroup(groupedEntry.entries);\n return (\n <div key={groupedEntry.id} className=\"flex gap-3 ash-animate-fade-in\">\n <div className=\"w-7 h-7 rounded-full bg-[var(--ash-accent)]/20 flex items-center justify-center shrink-0\">\n <BotIcon className=\"w-4 h-4 text-[var(--ash-accent)]\" />\n </div>\n <div className=\"flex-1\">\n {config.mode === 'accordion' ? (\n <StepAccordion\n toolCalls={toolCalls}\n defaultExpanded={config.defaultExpanded}\n />\n ) : (\n <ToolExecutionGroup\n toolCalls={toolCalls}\n defaultExpanded={config.defaultExpanded}\n animationDuration={config.animationDuration}\n />\n )}\n </div>\n </div>\n );\n })}\n\n {streamingContent && (\n <div className=\"flex gap-3 ash-animate-fade-in\">\n <div className=\"w-7 h-7 rounded-full bg-[var(--ash-accent)]/20 flex items-center justify-center shrink-0\">\n <BotIcon className=\"w-4 h-4 text-[var(--ash-accent)]\" />\n </div>\n <div className=\"flex-1 max-w-[85%]\">\n <div className=\"rounded-xl p-3 bg-white/5 text-white/80\">\n <StreamingText content={streamingContent} isStreaming />\n </div>\n </div>\n </div>\n )}\n\n {loading && !streamingContent && (\n <div className=\"flex gap-3 ash-animate-fade-in\">\n <div className=\"w-7 h-7 rounded-full bg-[var(--ash-accent)]/20 flex items-center justify-center shrink-0\">\n <BotIcon className=\"w-4 h-4 text-[var(--ash-accent)]\" />\n </div>\n <div className=\"rounded-xl p-3 bg-white/5\">\n <LoadingIndicator variant=\"dots\" />\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport default MessageList;\n","import { useState } from 'react';\nimport type { LogEntry, LogLevel, LogCategory } from '../types';\nimport { cn, formatTimestamp } from '../utils';\nimport {\n ChevronDownIcon,\n ChevronRightIcon,\n InfoIcon,\n AlertTriangleIcon,\n AlertCircleIcon,\n BugIcon,\n TerminalIcon,\n} from '../icons';\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nfunction getLevelIcon(level: LogLevel) {\n switch (level) {\n case 'info':\n return <InfoIcon className=\"w-3.5 h-3.5\" />;\n case 'warn':\n return <AlertTriangleIcon className=\"w-3.5 h-3.5\" />;\n case 'error':\n return <AlertCircleIcon className=\"w-3.5 h-3.5\" />;\n case 'debug':\n return <BugIcon className=\"w-3.5 h-3.5\" />;\n }\n}\n\nfunction getLevelColor(level: LogLevel) {\n switch (level) {\n case 'info':\n return 'text-blue-400';\n case 'warn':\n return 'text-yellow-500';\n case 'error':\n return 'text-red-400';\n case 'debug':\n return 'text-white/50';\n }\n}\n\nfunction getLevelBgColor(level: LogLevel) {\n switch (level) {\n case 'info':\n return 'bg-blue-900/20';\n case 'warn':\n return 'bg-yellow-900/20';\n case 'error':\n return 'bg-red-900/20';\n case 'debug':\n return 'bg-white/5';\n }\n}\n\nfunction getCategoryLabel(category: LogCategory) {\n switch (category) {\n case 'setup':\n return 'Setup';\n case 'skills':\n return 'Skills';\n case 'execution':\n return 'Execution';\n case 'process':\n return 'Process';\n case 'startup':\n return 'Startup';\n }\n}\n\n// =============================================================================\n// Log Entry Component\n// =============================================================================\n\ninterface LogEntryRowProps {\n log: LogEntry;\n}\n\nfunction LogEntryRow({ log }: LogEntryRowProps) {\n const [isExpanded, setIsExpanded] = useState(false);\n const hasData = log.data && Object.keys(log.data).length > 0;\n\n return (\n <div\n className={cn(\n 'px-3 py-2 border-b border-white/10 last:border-b-0',\n getLevelBgColor(log.level)\n )}\n >\n <div\n className={cn('flex items-start gap-2', hasData && 'cursor-pointer')}\n onClick={() => hasData && setIsExpanded(!isExpanded)}\n >\n {/* Expand indicator */}\n <div className=\"w-4 flex-shrink-0 pt-0.5\">\n {hasData &&\n (isExpanded ? (\n <ChevronDownIcon className=\"w-3 h-3 text-white/40\" />\n ) : (\n <ChevronRightIcon className=\"w-3 h-3 text-white/40\" />\n ))}\n </div>\n\n {/* Level icon */}\n <div className={cn('flex-shrink-0 pt-0.5', getLevelColor(log.level))}>\n {getLevelIcon(log.level)}\n </div>\n\n {/* Timestamp */}\n <span className=\"text-xs text-white/40 font-mono flex-shrink-0 pt-0.5\">\n {formatTimestamp(log.timestamp)}\n </span>\n\n {/* Category badge */}\n <span className=\"text-xs px-1.5 py-0.5 rounded bg-white/10 text-white/70 font-medium flex-shrink-0\">\n {getCategoryLabel(log.category)}\n </span>\n\n {/* Message */}\n <span className=\"text-sm text-white/80 flex-1 break-words\">\n {log.message}\n </span>\n </div>\n\n {/* Expanded data */}\n {isExpanded && hasData && (\n <div className=\"mt-2 ml-6 pl-4 border-l-2 border-white/20\">\n <pre className=\"text-xs text-white/50 font-mono whitespace-pre-wrap overflow-x-auto\">\n {JSON.stringify(log.data, null, 2)}\n </pre>\n </div>\n )}\n </div>\n );\n}\n\n// =============================================================================\n// LogsPanel Component\n// =============================================================================\n\nexport interface LogsPanelProps {\n logs: LogEntry[];\n title?: string;\n isLoading?: boolean;\n defaultCollapsed?: boolean;\n maxHeight?: number;\n className?: string;\n}\n\n/**\n * LogsPanel - Collapsible panel for displaying log entries\n *\n * Features:\n * - Collapsible header with log count\n * - Error/warning count badges\n * - Level-based coloring and icons\n * - Expandable entries with JSON data\n *\n * @example\n * ```tsx\n * <LogsPanel logs={logEntries} />\n * <LogsPanel logs={logs} title=\"Execution Logs\" defaultCollapsed={false} />\n * ```\n */\nexport function LogsPanel({\n logs,\n title = 'Logs',\n isLoading,\n defaultCollapsed = true,\n maxHeight = 256,\n className,\n}: LogsPanelProps) {\n const [isCollapsed, setIsCollapsed] = useState(defaultCollapsed);\n\n const errorCount = logs.filter((l) => l.level === 'error').length;\n const warnCount = logs.filter((l) => l.level === 'warn').length;\n\n if (logs.length === 0 && !isLoading) {\n return null;\n }\n\n return (\n <div\n className={cn(\n 'border-t border-white/10 bg-[var(--ash-surface-dark,#0a0a0a)]',\n className\n )}\n >\n {/* Header */}\n <button\n onClick={() => setIsCollapsed(!isCollapsed)}\n className=\"w-full flex items-center justify-between px-4 py-2 hover:bg-white/5 transition-colors\"\n >\n <div className=\"flex items-center gap-2\">\n <TerminalIcon className=\"w-4 h-4 text-white/50\" />\n <span className=\"text-sm font-medium text-white/80\">{title}</span>\n <span className=\"text-xs text-white/40\">({logs.length})</span>\n {errorCount > 0 && (\n <span className=\"text-xs px-1.5 py-0.5 rounded bg-red-900/50 text-red-400 font-medium\">\n {errorCount} error{errorCount > 1 ? 's' : ''}\n </span>\n )}\n {warnCount > 0 && (\n <span className=\"text-xs px-1.5 py-0.5 rounded bg-yellow-900/50 text-yellow-400 font-medium\">\n {warnCount} warning{warnCount > 1 ? 's' : ''}\n </span>\n )}\n {isLoading && (\n <span className=\"text-xs text-white/40 animate-pulse\">\n Loading...\n </span>\n )}\n </div>\n {isCollapsed ? (\n <ChevronRightIcon className=\"w-4 h-4 text-white/40\" />\n ) : (\n <ChevronDownIcon className=\"w-4 h-4 text-white/40\" />\n )}\n </button>\n\n {/* Log entries */}\n {!isCollapsed && (\n <div\n className=\"overflow-y-auto border-t border-white/10\"\n style={{ maxHeight }}\n >\n {logs.length === 0 ? (\n <div className=\"px-4 py-6 text-center text-sm text-white/50\">\n No logs yet\n </div>\n ) : (\n logs.map((log, index) => (\n <LogEntryRow key={`${log.timestamp}-${index}`} log={log} />\n ))\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport default LogsPanel;\n","import { useMemo } from 'react';\nimport type { TodoItem, TodoStatus as TodoStatusType } from '../types';\nimport { cn } from '../utils';\nimport { CheckCircleIcon, CircleIcon, LoaderIcon } from '../icons';\n\n// =============================================================================\n// TodoStatusIcon Component\n// =============================================================================\n\ninterface TodoStatusIconProps {\n status: TodoStatusType;\n className?: string;\n}\n\nfunction TodoStatusIcon({ status, className = 'w-4 h-4' }: TodoStatusIconProps) {\n switch (status) {\n case 'completed':\n return <CheckCircleIcon className={cn(className, 'text-emerald-400')} />;\n case 'in_progress':\n return <LoaderIcon className={cn(className, 'text-yellow-400 animate-spin')} />;\n case 'pending':\n default:\n return <CircleIcon className={cn(className, 'text-white/30')} />;\n }\n}\n\n// =============================================================================\n// TodoListItem Component\n// =============================================================================\n\ninterface TodoListItemProps {\n todo: TodoItem;\n index: number;\n compact?: boolean;\n}\n\nfunction TodoListItem({ todo, index, compact = false }: TodoListItemProps) {\n const displayText = todo.status === 'in_progress' ? todo.activeForm : todo.content;\n\n return (\n <div\n className={cn(\n 'flex items-start gap-2 transition-all duration-200',\n compact ? 'py-1' : 'py-1.5',\n todo.status === 'completed' && 'opacity-60',\n todo.status === 'in_progress' && 'bg-yellow-500/5 -mx-2 px-2 rounded-md'\n )}\n >\n <TodoStatusIcon status={todo.status} className={compact ? 'w-3.5 h-3.5 mt-0.5' : 'w-4 h-4 mt-0.5'} />\n <span\n className={cn(\n 'flex-1 text-white/80',\n compact ? 'text-xs' : 'text-sm',\n todo.status === 'completed' && 'line-through text-white/50'\n )}\n >\n {!compact && <span className=\"text-white/40 mr-1.5\">{index + 1}.</span>}\n {displayText}\n </span>\n </div>\n );\n}\n\n// =============================================================================\n// TodoProgress Component\n// =============================================================================\n\ninterface TodoProgressProps {\n completed: number;\n total: number;\n className?: string;\n}\n\nfunction TodoProgress({ completed, total, className }: TodoProgressProps) {\n const percentage = total > 0 ? Math.round((completed / total) * 100) : 0;\n\n return (\n <div className={cn('flex items-center gap-2', className)}>\n <div className=\"flex-1 h-1.5 bg-white/10 rounded-full overflow-hidden\">\n <div\n className=\"h-full bg-emerald-400 rounded-full transition-all duration-500 ease-out\"\n style={{ width: `${percentage}%` }}\n />\n </div>\n <span className=\"text-xs text-white/50 tabular-nums min-w-[3rem] text-right\">\n {completed}/{total}\n </span>\n </div>\n );\n}\n\n// =============================================================================\n// TodoPanel Component\n// =============================================================================\n\nexport interface TodoPanelProps {\n /** List of todo items */\n todos: TodoItem[];\n /** Optional title for the panel */\n title?: string;\n /** Show in compact mode (less padding, smaller text) */\n compact?: boolean;\n /** Show progress bar */\n showProgress?: boolean;\n /** Additional class names */\n className?: string;\n}\n\n/**\n * TodoPanel - Display a list of todos with status indicators\n *\n * Features:\n * - Status icons (pending/in_progress/completed)\n * - Progress bar showing completion\n * - Compact mode for inline display\n * - Animated transitions\n *\n * @example\n * ```tsx\n * <TodoPanel todos={todos} />\n * <TodoPanel todos={todos} title=\"Task Progress\" showProgress />\n * <TodoPanel todos={todos} compact />\n * ```\n */\nexport function TodoPanel({\n todos,\n title,\n compact = false,\n showProgress = true,\n className,\n}: TodoPanelProps) {\n const stats = useMemo(() => {\n return {\n total: todos.length,\n completed: todos.filter((t) => t.status === 'completed').length,\n inProgress: todos.filter((t) => t.status === 'in_progress').length,\n pending: todos.filter((t) => t.status === 'pending').length,\n };\n }, [todos]);\n\n if (todos.length === 0) {\n return null;\n }\n\n return (\n <div\n className={cn(\n 'rounded-lg border border-white/10 bg-white/5 overflow-hidden',\n className\n )}\n >\n {/* Header */}\n {(title || showProgress) && (\n <div className={cn('border-b border-white/5', compact ? 'px-2 py-1.5' : 'px-3 py-2')}>\n {title && (\n <div className={cn('font-medium text-white/90 mb-1.5', compact ? 'text-xs' : 'text-sm')}>\n {title}\n </div>\n )}\n {showProgress && (\n <TodoProgress completed={stats.completed} total={stats.total} />\n )}\n </div>\n )}\n\n {/* Todo List */}\n <div className={cn(compact ? 'px-2 py-1.5' : 'px-3 py-2')}>\n {todos.map((todo, index) => (\n <TodoListItem\n key={`${todo.content}-${index}`}\n todo={todo}\n index={index}\n compact={compact}\n />\n ))}\n </div>\n\n {/* Stats Footer */}\n {!compact && stats.inProgress > 0 && (\n <div className=\"px-3 py-2 border-t border-white/5 bg-yellow-500/5\">\n <div className=\"flex items-center gap-2 text-xs text-yellow-400\">\n <LoaderIcon className=\"w-3 h-3 animate-spin\" />\n <span>\n {stats.inProgress} task{stats.inProgress !== 1 ? 's' : ''} in progress\n </span>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport default TodoPanel;\n","'use client';\n\nimport { useState, useCallback, type KeyboardEvent } from 'react';\nimport { cn } from '../utils';\n\nexport interface EnvVarsPanelProps {\n /** Current environment variables */\n envVars: Record<string, string>;\n /** Callback when environment variables change */\n onChange: (envVars: Record<string, string>) => void;\n /** Whether the panel is collapsed initially (default: true) */\n defaultCollapsed?: boolean;\n /** Additional class name */\n className?: string;\n /** Label for the panel header */\n label?: string;\n /** Helper text shown below the input */\n helperText?: string;\n}\n\n/**\n * EnvVarsPanel - Collapsible panel for managing environment variables\n *\n * Provides a UI for adding, viewing, and removing environment variables.\n * Commonly used to set environment variables for sandbox/agent execution.\n *\n * @example\n * ```tsx\n * function ChatSettings() {\n * const [envVars, setEnvVars] = useState<Record<string, string>>({});\n *\n * return (\n * <EnvVarsPanel\n * envVars={envVars}\n * onChange={setEnvVars}\n * helperText=\"These variables will be available in the sandbox.\"\n * />\n * );\n * }\n * ```\n */\nexport function EnvVarsPanel({\n envVars,\n onChange,\n defaultCollapsed = true,\n className,\n label = 'Environment Variables',\n helperText = 'These environment variables will be available in the sandbox for new sessions.',\n}: EnvVarsPanelProps) {\n const [expanded, setExpanded] = useState(!defaultCollapsed);\n const [newEnvKey, setNewEnvKey] = useState('');\n const [newEnvValue, setNewEnvValue] = useState('');\n\n const hasEnvVars = Object.keys(envVars).length > 0;\n\n const handleAddEnvVar = useCallback(() => {\n const key = newEnvKey.trim();\n const val = newEnvValue.trim();\n if (key) {\n onChange({ ...envVars, [key]: val });\n setNewEnvKey('');\n setNewEnvValue('');\n }\n }, [envVars, newEnvKey, newEnvValue, onChange]);\n\n const handleRemoveEnvVar = useCallback(\n (key: string) => {\n const newEnvVars = { ...envVars };\n delete newEnvVars[key];\n onChange(newEnvVars);\n },\n [envVars, onChange]\n );\n\n const handleEnvKeyDown = useCallback(\n (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleAddEnvVar();\n }\n },\n [handleAddEnvVar]\n );\n\n return (\n <div className={cn('ash-env-vars-panel', className)}>\n {/* Header toggle */}\n <button\n type=\"button\"\n onClick={() => setExpanded(!expanded)}\n className=\"ash-env-vars-header\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn('ash-env-vars-chevron', expanded && 'ash-env-vars-chevron-expanded')}\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n <span className=\"ash-env-vars-label\">{label}</span>\n {hasEnvVars && !expanded && (\n <span className=\"ash-env-vars-badge\">{Object.keys(envVars).length}</span>\n )}\n </button>\n\n {/* Expanded content */}\n {expanded && (\n <div className=\"ash-env-vars-content\">\n {/* Existing env vars */}\n {Object.entries(envVars).map(([key, val]) => (\n <div key={key} className=\"ash-env-vars-item\">\n <span className=\"ash-env-vars-key\">{key}</span>\n <span className=\"ash-env-vars-equals\">=</span>\n <span className=\"ash-env-vars-value\">{val || '(empty)'}</span>\n <button\n type=\"button\"\n onClick={() => handleRemoveEnvVar(key)}\n className=\"ash-env-vars-remove\"\n title=\"Remove variable\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"w-4 h-4\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n </div>\n ))}\n\n {/* Add new env var */}\n <div className=\"ash-env-vars-add\">\n <input\n type=\"text\"\n value={newEnvKey}\n onChange={(e) =>\n setNewEnvKey(e.target.value.toUpperCase().replace(/[^A-Z0-9_]/g, ''))\n }\n onKeyDown={handleEnvKeyDown}\n placeholder=\"KEY\"\n className=\"ash-env-vars-input ash-env-vars-input-key\"\n />\n <span className=\"ash-env-vars-equals\">=</span>\n <input\n type=\"text\"\n value={newEnvValue}\n onChange={(e) => setNewEnvValue(e.target.value)}\n onKeyDown={handleEnvKeyDown}\n placeholder=\"value\"\n className=\"ash-env-vars-input ash-env-vars-input-value\"\n />\n <button\n type=\"button\"\n onClick={handleAddEnvVar}\n disabled={!newEnvKey.trim()}\n className=\"ash-env-vars-add-button\"\n >\n Add\n </button>\n </div>\n\n {helperText && <p className=\"ash-env-vars-helper\">{helperText}</p>}\n </div>\n )}\n </div>\n );\n}\n\nexport default EnvVarsPanel;\n","'use client';\n\nimport { useDisplayMode } from './DisplayModeContext';\nimport { cn } from '../utils';\nimport type { ToolDisplayMode } from '../types';\n\nexport interface DisplayModeToggleProps {\n /** Additional class name */\n className?: string;\n /** Show label text (default: true) */\n showLabel?: boolean;\n /** Custom labels for modes */\n labels?: {\n inline?: string;\n compact?: string;\n accordion?: string;\n };\n /** Which modes to cycle through (default: all three) */\n modes?: ToolDisplayMode[];\n}\n\n/**\n * DisplayModeToggle - Button to cycle through display modes\n *\n * Uses the DisplayModeContext to cycle through 'inline', 'compact', and 'accordion' modes.\n * Must be used within a DisplayModeProvider.\n *\n * @example\n * ```tsx\n * function ChatHeader() {\n * return (\n * <header>\n * <h1>Chat</h1>\n * <DisplayModeToggle />\n * </header>\n * );\n * }\n *\n * function App() {\n * return (\n * <DisplayModeProvider>\n * <ChatHeader />\n * <MessageList entries={entries} />\n * </DisplayModeProvider>\n * );\n * }\n * ```\n */\nexport function DisplayModeToggle({\n className,\n showLabel = true,\n labels = { inline: 'Inline', compact: 'Compact', accordion: 'Steps' },\n modes = ['inline', 'compact', 'accordion'],\n}: DisplayModeToggleProps) {\n const { config, setMode } = useDisplayMode();\n\n const currentMode = config.mode;\n const currentIndex = modes.indexOf(currentMode);\n // If current mode not in modes array, start from first mode\n const effectiveIndex = currentIndex === -1 ? 0 : currentIndex;\n const nextIndex = (effectiveIndex + 1) % modes.length;\n const nextMode = modes[nextIndex] as ToolDisplayMode;\n\n const handleClick = () => {\n setMode(nextMode);\n };\n\n const getIcon = (mode: ToolDisplayMode) => {\n switch (mode) {\n case 'inline':\n return (\n <svg\n className=\"ash-display-mode-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5\"\n />\n </svg>\n );\n case 'compact':\n return (\n <svg\n className=\"ash-display-mode-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M3.75 6.75h16.5M3.75 12h16.5M12 17.25h8.25\"\n />\n </svg>\n );\n case 'accordion':\n return (\n <svg\n className=\"ash-display-mode-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M8.25 6.75h12M8.25 12h12M8.25 17.25h12M3.75 6.75h.007v.008H3.75V6.75zm.375 0a.375.375 0 11-.75 0 .375.375 0 01.75 0zM3.75 12h.007v.008H3.75V12zm.375 0a.375.375 0 11-.75 0 .375.375 0 01.75 0zm-.375 5.25h.007v.008H3.75v-.008zm.375 0a.375.375 0 11-.75 0 .375.375 0 01.75 0z\"\n />\n </svg>\n );\n }\n };\n\n const getLabel = (mode: ToolDisplayMode) => {\n return labels[mode] || mode.charAt(0).toUpperCase() + mode.slice(1);\n };\n\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n className={cn('ash-display-mode-toggle', className)}\n title={`Switch to ${nextMode} mode`}\n >\n {getIcon(currentMode)}\n {showLabel && <span className=\"ash-display-mode-label\">{getLabel(currentMode)}</span>}\n </button>\n );\n}\n\nexport default DisplayModeToggle;\n","'use client';\n\nimport { useEffect, useState, useRef } from 'react';\nimport { cn } from '../utils';\n\nexport interface TypewriterTextProps {\n /** Words to cycle through */\n words?: string[];\n /** Typing speed in ms per character */\n typeSpeed?: number;\n /** Pause before erasing in ms */\n pauseBeforeErase?: number;\n /** Erasing speed in ms per character */\n eraseSpeed?: number;\n /** Pause before typing next word in ms */\n pauseBeforeType?: number;\n /** Whether to show a blinking cursor */\n showCursor?: boolean;\n /** Additional class names */\n className?: string;\n /** Cursor class names */\n cursorClassName?: string;\n}\n\n// Default words to cycle through when thinking\nconst DEFAULT_WORDS = [\n 'Thinking',\n 'Reasoning',\n 'Pondering',\n 'Analyzing',\n 'Considering',\n 'Processing',\n 'Evaluating',\n];\n\n/**\n * TypewriterText - Animated typing component that cycles through words\n *\n * Creates a typewriter effect that types out words character by character,\n * pauses, then erases them before moving to the next word.\n *\n * @example\n * ```tsx\n * // Default thinking words\n * <TypewriterText />\n *\n * // Custom words\n * <TypewriterText words={['Loading', 'Processing', 'Almost done']} />\n *\n * // Custom speeds\n * <TypewriterText typeSpeed={30} pauseBeforeErase={1000} />\n * ```\n */\nexport function TypewriterText({\n words = DEFAULT_WORDS,\n typeSpeed = 50,\n pauseBeforeErase = 800,\n eraseSpeed = 30,\n pauseBeforeType = 200,\n showCursor = true,\n className,\n cursorClassName,\n}: TypewriterTextProps) {\n const [displayText, setDisplayText] = useState('');\n const [wordIndex, setWordIndex] = useState(0);\n const [isTyping, setIsTyping] = useState(true);\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n useEffect(() => {\n const currentWord = words[wordIndex] ?? '';\n\n if (isTyping) {\n // Typing phase\n if (displayText.length < currentWord.length) {\n timeoutRef.current = setTimeout(() => {\n setDisplayText(currentWord.slice(0, displayText.length + 1));\n }, typeSpeed);\n } else {\n // Finished typing, pause then erase\n timeoutRef.current = setTimeout(() => {\n setIsTyping(false);\n }, pauseBeforeErase);\n }\n } else {\n // Erasing phase\n if (displayText.length > 0) {\n timeoutRef.current = setTimeout(() => {\n setDisplayText(displayText.slice(0, -1));\n }, eraseSpeed);\n } else {\n // Finished erasing, move to next word\n timeoutRef.current = setTimeout(() => {\n setWordIndex((prev) => (prev + 1) % words.length);\n setIsTyping(true);\n }, pauseBeforeType);\n }\n }\n\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, [displayText, wordIndex, isTyping, words, typeSpeed, pauseBeforeErase, eraseSpeed, pauseBeforeType]);\n\n return (\n <span className={cn('inline-flex items-center', className)}>\n <span>{displayText}</span>\n {showCursor && (\n <span\n className={cn(\n 'w-0.5 h-4 bg-current ml-0.5 animate-pulse',\n cursorClassName\n )}\n />\n )}\n </span>\n );\n}\n\nexport default TypewriterText;\n","import { createContext, useContext, useState, useEffect, useCallback, ReactNode } from 'react';\n\nexport type Theme = 'light' | 'dark';\n\nexport interface ThemeContextType {\n theme: Theme;\n toggleTheme: () => void;\n setTheme: (theme: Theme) => void;\n}\n\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined);\n\nconst DEFAULT_STORAGE_KEY = 'ash-ui-theme';\n\nexport interface ThemeProviderProps {\n children: ReactNode;\n /** Default theme to use when no stored preference exists. Defaults to system preference, then 'light'. */\n defaultTheme?: Theme;\n /** localStorage key for persisting theme. Defaults to 'ash-ui-theme'. */\n storageKey?: string;\n /** Whether to listen for system theme changes. Defaults to true. */\n listenToSystemChanges?: boolean;\n}\n\n/**\n * ThemeProvider - Unified theme management for agentic UIs.\n *\n * Features:\n * - Persists theme choice to localStorage\n * - Respects system preference when no stored preference exists\n * - Listens for system theme changes (configurable)\n * - Adds/removes 'dark' class on document root for Tailwind CSS\n *\n * @example\n * ```tsx\n * <ThemeProvider>\n * <App />\n * </ThemeProvider>\n *\n * // With custom defaults\n * <ThemeProvider defaultTheme=\"dark\" storageKey=\"my-theme\">\n * <App />\n * </ThemeProvider>\n * ```\n */\nexport function ThemeProvider({\n children,\n defaultTheme,\n storageKey = DEFAULT_STORAGE_KEY,\n listenToSystemChanges = true,\n}: ThemeProviderProps) {\n const [theme, setThemeState] = useState<Theme>(() => {\n if (typeof window !== 'undefined') {\n const stored = localStorage.getItem(storageKey);\n if (stored === 'dark' || stored === 'light') {\n return stored;\n }\n if (!defaultTheme && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n return 'dark';\n }\n }\n return defaultTheme ?? 'light';\n });\n\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n useEffect(() => {\n if (!mounted) return;\n\n const root = document.documentElement;\n if (theme === 'dark') {\n root.classList.add('dark');\n } else {\n root.classList.remove('dark');\n }\n localStorage.setItem(storageKey, theme);\n }, [theme, mounted, storageKey]);\n\n useEffect(() => {\n if (!listenToSystemChanges || typeof window === 'undefined') return;\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = (e: MediaQueryListEvent) => {\n const stored = localStorage.getItem(storageKey);\n if (!stored) {\n setThemeState(e.matches ? 'dark' : 'light');\n }\n };\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }, [storageKey, listenToSystemChanges]);\n\n const toggleTheme = useCallback(() => {\n setThemeState((prev) => (prev === 'light' ? 'dark' : 'light'));\n }, []);\n\n const setTheme = useCallback((newTheme: Theme) => {\n setThemeState(newTheme);\n }, []);\n\n if (!mounted) {\n return (\n <ThemeContext.Provider value={{ theme: defaultTheme ?? 'light', toggleTheme, setTheme }}>\n {children}\n </ThemeContext.Provider>\n );\n }\n\n return (\n <ThemeContext.Provider value={{ theme, toggleTheme, setTheme }}>\n {children}\n </ThemeContext.Provider>\n );\n}\n\nexport function useTheme(): ThemeContextType {\n const context = useContext(ThemeContext);\n if (context === undefined) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n}\n","/**\n * ASH UI Design Tokens\n *\n * Single source of truth for colors, spacing, animations, and other design values.\n * Used by both ash-ui components (via Tailwind/CSS) and the embed widget (via inline styles).\n *\n * @example\n * ```ts\n * import { colors, animations, shadows } from '@ash-cloud/ash-ui/tokens';\n *\n * // In embed widget (inline styles)\n * const style = { backgroundColor: colors.surface.dark };\n *\n * // In Tailwind config\n * module.exports = {\n * theme: {\n * extend: {\n * colors: colors,\n * }\n * }\n * };\n * ```\n */\n\n// =============================================================================\n// Colors\n// =============================================================================\n\nexport const colors = {\n // Primary accent color (lime green)\n accent: {\n DEFAULT: '#ccff00',\n 50: '#f8ffe5',\n 100: '#eeffb8',\n 200: '#e0ff85',\n 300: '#d4ff52',\n 400: '#ccff00',\n 500: '#b8e600',\n 600: '#99cc00',\n 700: '#739900',\n 800: '#4d6600',\n 900: '#263300',\n },\n\n // Surface colors (dark theme)\n surface: {\n dark: '#0a0a0a',\n darker: '#050505',\n card: '#0c0c0c',\n elevated: '#111111',\n },\n\n // Text colors\n text: {\n primary: '#ffffff',\n secondary: 'rgba(255, 255, 255, 0.7)',\n muted: 'rgba(255, 255, 255, 0.5)',\n disabled: 'rgba(255, 255, 255, 0.3)',\n },\n\n // Border colors\n border: {\n DEFAULT: 'rgba(255, 255, 255, 0.1)',\n hover: 'rgba(255, 255, 255, 0.2)',\n accent: 'rgba(204, 255, 0, 0.3)',\n accentHover: 'rgba(204, 255, 0, 0.5)',\n },\n\n // Status colors\n status: {\n success: '#10b981',\n warning: '#eab308',\n error: '#ef4444',\n info: '#3b82f6',\n },\n\n // User message background\n user: {\n bg: 'rgba(204, 255, 0, 0.1)',\n border: 'rgba(204, 255, 0, 0.2)',\n },\n\n // Assistant message background\n assistant: {\n bg: 'rgba(255, 255, 255, 0.05)',\n border: 'rgba(255, 255, 255, 0.1)',\n },\n} as const;\n\n// =============================================================================\n// Spacing\n// =============================================================================\n\nexport const spacing = {\n xs: '4px',\n sm: '8px',\n md: '12px',\n lg: '16px',\n xl: '24px',\n '2xl': '32px',\n '3xl': '48px',\n} as const;\n\n// =============================================================================\n// Border Radius\n// =============================================================================\n\nexport const borderRadius = {\n sm: '8px',\n md: '12px',\n lg: '16px',\n xl: '20px',\n '2xl': '24px',\n full: '9999px',\n} as const;\n\n// =============================================================================\n// Shadows\n// =============================================================================\n\nexport const shadows = {\n sm: '0 1px 2px rgba(0, 0, 0, 0.3)',\n md: '0 4px 6px rgba(0, 0, 0, 0.4)',\n lg: '0 10px 15px rgba(0, 0, 0, 0.5)',\n xl: '0 20px 25px rgba(0, 0, 0, 0.6)',\n glow: {\n sm: '0 0 10px rgba(204, 255, 0, 0.2)',\n md: '0 0 20px rgba(204, 255, 0, 0.3)',\n lg: '0 0 30px rgba(204, 255, 0, 0.5)',\n },\n panel: '0 25px 50px rgba(0, 0, 0, 0.5)',\n} as const;\n\n// =============================================================================\n// Typography\n// =============================================================================\n\nexport const typography = {\n fontFamily: {\n sans: 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n mono: 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace',\n },\n fontSize: {\n xs: '12px',\n sm: '14px',\n base: '16px',\n lg: '18px',\n xl: '20px',\n '2xl': '24px',\n },\n lineHeight: {\n tight: '1.25',\n normal: '1.5',\n relaxed: '1.75',\n },\n} as const;\n\n// =============================================================================\n// Animations - Keyframes as objects for inline style injection\n// =============================================================================\n\nexport const keyframes = {\n slideUp: {\n from: { opacity: '0', transform: 'translateY(20px)' },\n to: { opacity: '1', transform: 'translateY(0)' },\n },\n fadeIn: {\n from: { opacity: '0', transform: 'translateY(10px)' },\n to: { opacity: '1', transform: 'translateY(0)' },\n },\n blink: {\n '0%, 50%': { opacity: '1' },\n '51%, 100%': { opacity: '0' },\n },\n bounce: {\n '0%, 80%, 100%': { transform: 'scale(0)' },\n '40%': { transform: 'scale(1)' },\n },\n pulse: {\n '0%, 100%': { opacity: '1' },\n '50%': { opacity: '0.5' },\n },\n glowPulse: {\n '0%, 100%': { boxShadow: '0 0 20px rgba(204, 255, 0, 0.3)' },\n '50%': { boxShadow: '0 0 40px rgba(204, 255, 0, 0.5)' },\n },\n} as const;\n\n// CSS keyframe strings for injection into style tags\nexport const keyframesCss = {\n slideUp: `\n @keyframes ash-slide-up {\n from { opacity: 0; transform: translateY(20px); }\n to { opacity: 1; transform: translateY(0); }\n }\n `,\n fadeIn: `\n @keyframes ash-fade-in {\n from { opacity: 0; transform: translateY(10px); }\n to { opacity: 1; transform: translateY(0); }\n }\n `,\n blink: `\n @keyframes ash-blink {\n 0%, 50% { opacity: 1; }\n 51%, 100% { opacity: 0; }\n }\n `,\n bounce: `\n @keyframes ash-bounce {\n 0%, 80%, 100% { transform: scale(0); }\n 40% { transform: scale(1); }\n }\n `,\n pulse: `\n @keyframes ash-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n `,\n glowPulse: `\n @keyframes ash-glow-pulse {\n 0%, 100% { box-shadow: 0 0 20px rgba(204, 255, 0, 0.3); }\n 50% { box-shadow: 0 0 40px rgba(204, 255, 0, 0.5); }\n }\n `,\n} as const;\n\n// All keyframes combined for easy injection\nexport const allKeyframesCss = Object.values(keyframesCss).join('\\n');\n\n// =============================================================================\n// Transitions\n// =============================================================================\n\nexport const transitions = {\n fast: '150ms ease-out',\n normal: '300ms ease-out',\n slow: '500ms ease-out',\n spring: '400ms cubic-bezier(0.16, 1, 0.3, 1)',\n} as const;\n\n// =============================================================================\n// Z-Index Scale\n// =============================================================================\n\nexport const zIndex = {\n base: 0,\n dropdown: 100,\n modal: 200,\n tooltip: 300,\n widget: 999999,\n} as const;\n\n// =============================================================================\n// Widget-Specific Dimensions\n// =============================================================================\n\nexport const widget = {\n launcher: {\n size: '60px',\n iconSize: '28px',\n },\n panel: {\n width: '400px',\n height: '600px',\n maxHeight: '80vh',\n },\n header: {\n height: '60px',\n },\n input: {\n minHeight: '60px',\n maxHeight: '150px',\n },\n message: {\n maxWidth: '85%',\n avatarSize: '32px',\n },\n gap: '20px', // Gap from edge of screen\n} as const;\n\n// =============================================================================\n// Helper: Convert tokens to CSS variables\n// =============================================================================\n\nexport function tokensToCssVariables(prefix = 'ash'): Record<string, string> {\n const vars: Record<string, string> = {};\n\n // Colors\n vars[`--${prefix}-accent`] = colors.accent.DEFAULT;\n Object.entries(colors.accent).forEach(([key, value]) => {\n if (key !== 'DEFAULT') vars[`--${prefix}-accent-${key}`] = value;\n });\n\n Object.entries(colors.surface).forEach(([key, value]) => {\n vars[`--${prefix}-surface-${key}`] = value;\n });\n\n Object.entries(colors.text).forEach(([key, value]) => {\n vars[`--${prefix}-text-${key}`] = value;\n });\n\n Object.entries(colors.border).forEach(([key, value]) => {\n if (key !== 'DEFAULT') vars[`--${prefix}-border-${key}`] = value;\n else vars[`--${prefix}-border`] = value;\n });\n\n return vars;\n}\n\n// =============================================================================\n// Helper: Generate inline styles from token names\n// =============================================================================\n\nexport const inlineStyles = {\n // Glass panel effect\n glassPanel: {\n backgroundColor: 'rgba(255, 255, 255, 0.05)',\n backdropFilter: 'blur(24px)',\n WebkitBackdropFilter: 'blur(24px)',\n border: `1px solid ${colors.border.DEFAULT}`,\n },\n\n // Accent button\n accentButton: {\n backgroundColor: colors.accent.DEFAULT,\n color: '#000000',\n border: `1px solid ${colors.accent.DEFAULT}`,\n boxShadow: shadows.glow.md,\n },\n\n // Ghost button\n ghostButton: {\n backgroundColor: 'transparent',\n color: colors.text.secondary,\n border: '1px solid transparent',\n },\n\n // User message bubble\n userMessage: {\n backgroundColor: colors.user.bg,\n border: `1px solid ${colors.user.border}`,\n borderRadius: borderRadius.lg,\n },\n\n // Assistant message bubble\n assistantMessage: {\n backgroundColor: colors.assistant.bg,\n border: `1px solid ${colors.assistant.border}`,\n borderRadius: borderRadius.lg,\n },\n} as const;\n\n// =============================================================================\n// Type exports\n// =============================================================================\n\nexport type Colors = typeof colors;\nexport type Spacing = typeof spacing;\nexport type BorderRadius = typeof borderRadius;\nexport type Shadows = typeof shadows;\nexport type Typography = typeof typography;\nexport type Keyframes = typeof keyframes;\nexport type Transitions = typeof transitions;\nexport type ZIndex = typeof zIndex;\nexport type Widget = typeof widget;\n","'use client';\n\nimport { useState, useCallback, useRef, useEffect } from 'react';\n\n/**\n * A queued message waiting to be sent\n */\nexport interface QueuedMessage {\n /** Unique ID for this queued message */\n id: string;\n /** The message text */\n text: string;\n /** Optional file attachments */\n files?: FileAttachment[];\n /** Timestamp when queued */\n queuedAt: number;\n}\n\n/**\n * File attachment for upload\n */\nexport interface FileAttachment {\n /** Original filename */\n filename: string;\n /** Base64-encoded file content */\n content: string;\n /** MIME type of the file */\n mimeType: string;\n /** File size in bytes */\n size: number;\n}\n\nexport interface UseMessageQueueOptions {\n /** Callback to process a message - should return when processing is complete */\n onProcessMessage: (message: QueuedMessage) => Promise<void>;\n /** Whether messages can currently be processed (e.g., agent selected) */\n canProcess?: boolean;\n}\n\nexport interface UseMessageQueueReturn {\n /** Current queue of pending messages */\n queue: QueuedMessage[];\n /** Whether a message is currently being processed */\n isProcessing: boolean;\n /** Add a message to the queue (or process immediately if idle) */\n enqueue: (text: string, files?: FileAttachment[]) => void;\n /** Cancel a queued message by ID */\n cancel: (id: string) => void;\n /** Clear all queued messages */\n clearQueue: () => void;\n /** Number of messages in queue */\n queueLength: number;\n}\n\n/**\n * Hook for managing a message queue with sequential processing.\n *\n * Messages are queued when the agent is busy and processed sequentially.\n * Users can continue typing while the agent processes previous messages.\n *\n * @example\n * ```tsx\n * function ChatInput() {\n * const { queue, isProcessing, enqueue, cancel } = useMessageQueue({\n * onProcessMessage: async (msg) => {\n * for await (const event of client.agents.run(agentId, msg.text)) {\n * // handle events\n * }\n * }\n * });\n *\n * return (\n * <div>\n * {queue.map(msg => (\n * <div key={msg.id}>\n * Queued: {msg.text}\n * <button onClick={() => cancel(msg.id)}>Cancel</button>\n * </div>\n * ))}\n * <input onSubmit={(text) => enqueue(text)} />\n * <button>{isProcessing ? `Queue (${queue.length})` : 'Send'}</button>\n * </div>\n * );\n * }\n * ```\n */\nexport function useMessageQueue({\n onProcessMessage,\n canProcess = true,\n}: UseMessageQueueOptions): UseMessageQueueReturn {\n const [queue, setQueue] = useState<QueuedMessage[]>([]);\n const [isProcessing, setIsProcessing] = useState(false);\n const isProcessingRef = useRef(false);\n const onProcessMessageRef = useRef(onProcessMessage);\n\n // Keep callback ref in sync\n useEffect(() => {\n onProcessMessageRef.current = onProcessMessage;\n }, [onProcessMessage]);\n\n // Process queue sequentially\n const processQueue = useCallback(async () => {\n if (isProcessingRef.current || !canProcess) return;\n\n isProcessingRef.current = true;\n setIsProcessing(true);\n\n while (true) {\n // Get next message from queue\n let nextMessage: QueuedMessage | undefined;\n setQueue((prev) => {\n if (prev.length === 0) return prev;\n nextMessage = prev[0];\n return prev.slice(1);\n });\n\n // Wait a tick for state to update\n await new Promise((resolve) => setTimeout(resolve, 0));\n\n if (!nextMessage) break;\n\n try {\n await onProcessMessageRef.current(nextMessage);\n } catch (error) {\n console.error('Error processing queued message:', error);\n // Continue processing queue even if one message fails\n }\n }\n\n isProcessingRef.current = false;\n setIsProcessing(false);\n }, [canProcess]);\n\n // Watch for queue changes and process\n useEffect(() => {\n if (queue.length > 0 && !isProcessingRef.current && canProcess) {\n processQueue();\n }\n }, [queue, processQueue, canProcess]);\n\n // Enqueue a new message\n const enqueue = useCallback((text: string, files?: FileAttachment[]) => {\n const message: QueuedMessage = {\n id: `queue-${Date.now()}-${Math.random().toString(36).slice(2)}`,\n text,\n files,\n queuedAt: Date.now(),\n };\n\n setQueue((prev) => [...prev, message]);\n }, []);\n\n // Cancel a queued message\n const cancel = useCallback((id: string) => {\n setQueue((prev) => prev.filter((m) => m.id !== id));\n }, []);\n\n // Clear all queued messages\n const clearQueue = useCallback(() => {\n setQueue([]);\n }, []);\n\n return {\n queue,\n isProcessing,\n enqueue,\n cancel,\n clearQueue,\n queueLength: queue.length,\n };\n}\n\nexport default useMessageQueue;\n","'use client';\n\nimport { useState, useCallback, useRef } from 'react';\n\nexport interface UseStopExecutionOptions {\n /** Callback to stop server-side execution (e.g., client.sessions.stop) */\n onServerStop?: (sessionId: string) => Promise<void>;\n}\n\nexport interface UseStopExecutionReturn {\n /** Whether execution can currently be stopped */\n canStop: boolean;\n /** The AbortSignal to pass to fetch requests */\n signal: AbortSignal | undefined;\n /** Start tracking a new execution (call when starting a request) */\n startExecution: () => void;\n /** Mark execution as complete (call when request finishes) */\n endExecution: () => void;\n /** Stop the current execution (aborts client + optionally server) */\n stop: (sessionId?: string) => Promise<void>;\n /** Set the current session ID for server-side stop */\n setSessionId: (sessionId: string | null) => void;\n}\n\n/**\n * Hook for managing execution stopping with AbortController.\n *\n * Handles both client-side request abortion and optional server-side stop calls.\n * Use this to implement stop/cancel buttons for long-running agent executions.\n *\n * @example\n * ```tsx\n * function Chat() {\n * const { canStop, signal, startExecution, endExecution, stop, setSessionId } = useStopExecution({\n * onServerStop: (sessionId) => client.sessions.stop(sessionId)\n * });\n *\n * async function sendMessage(text: string) {\n * startExecution();\n * try {\n * for await (const event of client.agents.run(agentId, text, { signal })) {\n * if (event.type === 'session_start') {\n * setSessionId(event.sessionId);\n * }\n * // handle events...\n * }\n * } catch (err) {\n * if (err.name === 'AbortError') {\n * console.log('Request aborted');\n * }\n * } finally {\n * endExecution();\n * }\n * }\n *\n * return (\n * <div>\n * {canStop && <button onClick={() => stop()}>Stop</button>}\n * </div>\n * );\n * }\n * ```\n */\nexport function useStopExecution({\n onServerStop,\n}: UseStopExecutionOptions = {}): UseStopExecutionReturn {\n const [canStop, setCanStop] = useState(false);\n const abortControllerRef = useRef<AbortController | null>(null);\n const sessionIdRef = useRef<string | null>(null);\n const onServerStopRef = useRef(onServerStop);\n\n // Keep callback ref in sync\n onServerStopRef.current = onServerStop;\n\n // Start a new execution\n const startExecution = useCallback(() => {\n // Create new AbortController\n abortControllerRef.current = new AbortController();\n setCanStop(true);\n }, []);\n\n // End the current execution\n const endExecution = useCallback(() => {\n abortControllerRef.current = null;\n sessionIdRef.current = null;\n setCanStop(false);\n }, []);\n\n // Set the session ID for server-side stop\n const setSessionId = useCallback((sessionId: string | null) => {\n sessionIdRef.current = sessionId;\n }, []);\n\n // Stop execution (client + server)\n const stop = useCallback(async (explicitSessionId?: string) => {\n // 1. Abort client-side request\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n\n // 2. Call server-side stop if we have a session\n const sessionId = explicitSessionId || sessionIdRef.current;\n if (sessionId && onServerStopRef.current) {\n try {\n await onServerStopRef.current(sessionId);\n } catch (err) {\n // Log but don't throw - the abort already happened\n console.warn('Server stop failed:', err);\n }\n }\n\n // Mark as stopped\n setCanStop(false);\n }, []);\n\n return {\n canStop,\n signal: abortControllerRef.current?.signal,\n startExecution,\n endExecution,\n stop,\n setSessionId,\n };\n}\n\nexport default useStopExecution;\n","'use client';\n\nimport { useState, useCallback, useRef, DragEvent, ChangeEvent } from 'react';\n\n/**\n * File attachment ready for upload\n */\nexport interface FileAttachment {\n /** Original filename */\n filename: string;\n /** Base64-encoded file content (without data URL prefix) */\n content: string;\n /** MIME type of the file */\n mimeType: string;\n /** File size in bytes */\n size: number;\n}\n\nexport interface UseFileUploadOptions {\n /** Maximum file size in bytes (default: 100MB) */\n maxFileSize?: number;\n /** Maximum number of files (default: 10) */\n maxFiles?: number;\n /** Callback when file validation fails */\n onValidationError?: (filename: string, error: string) => void;\n}\n\nexport interface UseFileUploadReturn {\n /** Current list of attached files */\n files: FileAttachment[];\n /** Whether drag is currently over the drop zone */\n isDragOver: boolean;\n /** Add files from a FileList (e.g., from input or drop) */\n addFiles: (fileList: FileList | null) => Promise<void>;\n /** Remove a file by index */\n removeFile: (index: number) => void;\n /** Clear all files */\n clearFiles: () => void;\n /** Whether more files can be added */\n canAddMore: boolean;\n /** Props to spread on a drop zone element */\n dropZoneProps: {\n onDragOver: (e: DragEvent) => void;\n onDragLeave: (e: DragEvent) => void;\n onDrop: (e: DragEvent) => void;\n };\n /** Handler for file input onChange */\n handleFileInputChange: (e: ChangeEvent<HTMLInputElement>) => void;\n /** Ref for a hidden file input */\n fileInputRef: React.RefObject<HTMLInputElement | null>;\n /** Click handler to trigger file input */\n openFilePicker: () => void;\n}\n\n/**\n * Format file size for display\n */\nexport function formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\n/**\n * Read a file as base64\n */\nasync function readFileAsBase64(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n const result = reader.result as string;\n // Remove data URL prefix to get pure base64\n const base64 = result.split(',')[1];\n resolve(base64 || '');\n };\n reader.onerror = () => reject(reader.error);\n reader.readAsDataURL(file);\n });\n}\n\n/**\n * Hook for managing file uploads with drag & drop support.\n *\n * Handles file selection, validation, base64 encoding, and drag/drop UI state.\n *\n * @example\n * ```tsx\n * function FileUploadArea() {\n * const {\n * files,\n * isDragOver,\n * addFiles,\n * removeFile,\n * dropZoneProps,\n * fileInputRef,\n * openFilePicker,\n * canAddMore,\n * } = useFileUpload({\n * maxFileSize: 50 * 1024 * 1024, // 50MB\n * maxFiles: 5,\n * onValidationError: (filename, error) => {\n * toast.error(`${filename}: ${error}`);\n * }\n * });\n *\n * return (\n * <div {...dropZoneProps} className={isDragOver ? 'drag-over' : ''}>\n * <input ref={fileInputRef} type=\"file\" multiple hidden />\n * <button onClick={openFilePicker} disabled={!canAddMore}>\n * Add Files\n * </button>\n * {files.map((file, i) => (\n * <div key={i}>\n * {file.filename} ({formatFileSize(file.size)})\n * <button onClick={() => removeFile(i)}>Remove</button>\n * </div>\n * ))}\n * </div>\n * );\n * }\n * ```\n */\nexport function useFileUpload({\n maxFileSize = 100 * 1024 * 1024, // 100MB\n maxFiles = 10,\n onValidationError,\n}: UseFileUploadOptions = {}): UseFileUploadReturn {\n const [files, setFiles] = useState<FileAttachment[]>([]);\n const [isDragOver, setIsDragOver] = useState(false);\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n\n // Process and add files\n const addFiles = useCallback(\n async (fileList: FileList | null) => {\n if (!fileList) return;\n\n const newFiles: FileAttachment[] = [];\n const currentCount = files.length;\n\n for (\n let i = 0;\n i < fileList.length && currentCount + newFiles.length < maxFiles;\n i++\n ) {\n const file = fileList.item(i);\n if (!file) continue;\n\n // Check file size\n if (file.size > maxFileSize) {\n onValidationError?.(\n file.name,\n `Exceeds maximum size of ${formatFileSize(maxFileSize)}`\n );\n continue;\n }\n\n try {\n const content = await readFileAsBase64(file);\n newFiles.push({\n filename: file.name,\n content,\n mimeType: file.type || 'application/octet-stream',\n size: file.size,\n });\n } catch (error) {\n console.error(`Failed to read file ${file.name}:`, error);\n onValidationError?.(file.name, 'Failed to read file');\n }\n }\n\n // Check if we hit the max files limit\n if (\n fileList.length > maxFiles - currentCount &&\n currentCount + newFiles.length >= maxFiles\n ) {\n onValidationError?.('', `Maximum ${maxFiles} files allowed`);\n }\n\n if (newFiles.length > 0) {\n setFiles((prev) => [...prev, ...newFiles]);\n }\n },\n [files.length, maxFiles, maxFileSize, onValidationError]\n );\n\n // Remove a file by index\n const removeFile = useCallback((index: number) => {\n setFiles((prev) => prev.filter((_, i) => i !== index));\n }, []);\n\n // Clear all files\n const clearFiles = useCallback(() => {\n setFiles([]);\n }, []);\n\n // Drag event handlers\n const handleDragOver = useCallback((e: DragEvent) => {\n e.preventDefault();\n setIsDragOver(true);\n }, []);\n\n const handleDragLeave = useCallback((e: DragEvent) => {\n e.preventDefault();\n setIsDragOver(false);\n }, []);\n\n const handleDrop = useCallback(\n (e: DragEvent) => {\n e.preventDefault();\n setIsDragOver(false);\n addFiles(e.dataTransfer.files);\n },\n [addFiles]\n );\n\n // File input change handler\n const handleFileInputChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n addFiles(e.target.files);\n // Reset input to allow selecting the same file again\n if (fileInputRef.current) {\n fileInputRef.current.value = '';\n }\n },\n [addFiles]\n );\n\n // Open file picker\n const openFilePicker = useCallback(() => {\n fileInputRef.current?.click();\n }, []);\n\n return {\n files,\n isDragOver,\n addFiles,\n removeFile,\n clearFiles,\n canAddMore: files.length < maxFiles,\n dropZoneProps: {\n onDragOver: handleDragOver,\n onDragLeave: handleDragLeave,\n onDrop: handleDrop,\n },\n handleFileInputChange,\n fileInputRef,\n openFilePicker,\n };\n}\n\nexport default useFileUpload;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils.ts","../src/icons.tsx","../src/components/StatusIndicator.tsx","../src/components/ActionIcon.tsx","../src/components/CodeBlock.tsx","../src/components/JsonDisplay.tsx","../src/components/ToolCallCard.tsx","../src/components/OptionCards.tsx","../src/components/MessageEntry.tsx","../src/components/LoadingIndicator.tsx","../src/components/StreamingText.tsx","../src/components/CompactToolStatusLine.tsx","../src/components/ToolExecutionGroup.tsx","../src/components/StepAccordion.tsx","../src/types.ts","../src/components/DisplayModeContext.tsx","../src/components/MessageList.tsx","../src/components/LogsPanel.tsx","../src/components/TodoPanel.tsx","../src/components/EnvVarsPanel.tsx","../src/components/DisplayModeToggle.tsx","../src/components/TypewriterText.tsx","../src/components/ThemeContext.tsx","../src/design-tokens.ts","../src/hooks/useMessageQueue.ts","../src/hooks/useStopExecution.ts","../src/hooks/useFileUpload.ts"],"names":["jsx","jsxs","useState","Fragment","ReactMarkdown","useCallback","useMemo","useRef","useEffect","createContext","useContext","formatFileSize"],"mappings":";;;;;;;AAwBO,SAAS,eAAe,IAAA,EAAsB;AACnD,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA,EAAG;AAC5B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC7B,IAAA,IAAI,KAAA,CAAM,UAAU,CAAA,EAAG;AACrB,MAAA,OAAO,CAAA,IAAA,EAAO,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,IACpD;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,iBAAiB,IAAA,EAA+D;AAC9F,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA,EAAG;AAC5B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC7B,IAAA,IAAI,MAAM,MAAA,IAAU,CAAA,IAAK,KAAA,CAAM,CAAC,MAAM,MAAA,EAAW;AAC/C,MAAA,OAAO;AAAA,QACL,UAAA,EAAY,MAAM,CAAC,CAAA;AAAA,QACnB,UAAU,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,CAAE,KAAK,IAAI;AAAA,OACpC;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AASO,SAAS,mBAAA,CAAoB,UAAkB,KAAA,EAA4B;AAChF,EAAA,MAAM,QAAA,GAAY,SAAqC,EAAC;AAExD,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,MAAA;AACH,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,aAAA;AAAA,QACR,OAAA,EAAU,SAAS,OAAA,IAAsB,EAAA;AAAA,QACzC,aAAa,QAAA,CAAS;AAAA,OACxB;AAAA,IAEF,KAAK,MAAA;AACH,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAO,SAAS,SAAA,IAAwB,EAAA;AAAA,QACxC,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,OAAO,QAAA,CAAS;AAAA,OAClB;AAAA,IAEF,KAAK,MAAA;AACH,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAO,SAAS,SAAA,IAAwB,EAAA;AAAA,QACxC,WAAW,QAAA,CAAS,UAAA;AAAA,QACpB,WAAW,QAAA,CAAS,UAAA;AAAA,QACpB,YAAY,QAAA,CAAS;AAAA,OACvB;AAAA,IAEF,KAAK,OAAA;AACH,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAO,SAAS,SAAA,IAAwB,EAAA;AAAA,QACxC,SAAS,QAAA,CAAS;AAAA,OACpB;AAAA,IAEF,KAAK,MAAA;AACH,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,QAAA;AAAA,QACR,OAAA,EAAU,SAAS,OAAA,IAAsB,EAAA;AAAA,QACzC,MAAM,QAAA,CAAS,IAAA;AAAA,QACf,MAAM,QAAA,CAAS,IAAA;AAAA,QACf,MAAM,QAAA,CAAS;AAAA,OACjB;AAAA,IAEF,KAAK,MAAA;AACH,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAU,SAAS,OAAA,IAAsB,EAAA;AAAA,QACzC,MAAM,QAAA,CAAS;AAAA,OACjB;AAAA,IAEF,KAAK,UAAA;AACH,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,WAAA;AAAA,QACR,GAAA,EAAM,SAAS,GAAA,IAAkB,EAAA;AAAA,QACjC,QAAQ,QAAA,CAAS;AAAA,OACnB;AAAA,IAEF,KAAK,WAAA;AACH,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,YAAA;AAAA,QACR,KAAA,EAAQ,SAAS,KAAA,IAAoB;AAAA,OACvC;AAAA,IAEF,KAAK,WAAA,EAAa;AAChB,MAAA,MAAM,KAAA,GAAS,QAAA,CAAS,KAAA,IAAwB,EAAC;AACjD,MAAA,MAAM,KAAA,GAAQ;AAAA,QACZ,OAAO,KAAA,CAAM,MAAA;AAAA,QACb,SAAA,EAAW,MAAM,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,MAAA,KAAW,WAAW,CAAA,CAAE,MAAA;AAAA,QACzD,UAAA,EAAY,MAAM,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,MAAA,KAAW,aAAa,CAAA,CAAE,MAAA;AAAA,QAC5D,OAAA,EAAS,MAAM,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,MAAA,KAAW,SAAS,CAAA,CAAE;AAAA,OACvD;AACA,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,YAAA;AAAA,QACR,KAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,IAEA,SAAS;AAEP,MAAA,MAAM,QAAA,GAAW,iBAAiB,QAAQ,CAAA;AAC1C,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,OAAO;AAAA,UACL,MAAA,EAAQ,UAAA;AAAA,UACR,YAAY,QAAA,CAAS,UAAA;AAAA,UACrB,UAAU,QAAA,CAAS,QAAA;AAAA,UACnB,SAAA,EAAW;AAAA,SACb;AAAA,MACF;AAGA,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,cAAA;AAAA,QACR,QAAA,EAAU,eAAe,QAAQ,CAAA;AAAA,QACjC,SAAA,EAAW;AAAA,OACb;AAAA,IACF;AAAA;AAEJ;AASO,SAAS,mBAAA,CACd,SAAA,EACA,MAAA,EACA,UAAA,EACQ;AACR,EAAA,QAAQ,WAAW,MAAA;AAAQ,IACzB,KAAK,aAAA,EAAe;AAClB,MAAA,MAAM,MAAM,UAAA,CAAW,OAAA;AACvB,MAAA,OAAO,GAAA,CAAI,SAAS,EAAA,GAAK,GAAA,CAAI,UAAU,CAAA,EAAG,EAAE,IAAI,KAAA,GAAQ,GAAA;AAAA,IAC1D;AAAA,IAEA,KAAK,WAAA;AACH,MAAA,OAAO,UAAA,CAAW,IAAA;AAAA,IAEpB,KAAK,WAAA;AACH,MAAA,OAAO,UAAA,CAAW,IAAA;AAAA,IAEpB,KAAK,YAAA;AACH,MAAA,OAAO,UAAA,CAAW,IAAA;AAAA,IAEpB,KAAK,QAAA;AACH,MAAA,OAAO,CAAA,EAAG,UAAA,CAAW,OAAO,CAAA,EAAG,UAAA,CAAW,OAAO,CAAA,IAAA,EAAO,UAAA,CAAW,IAAI,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AAAA,IAEhF,KAAK,MAAA;AACH,MAAA,OAAO,UAAA,CAAW,OAAA;AAAA,IAEpB,KAAK,WAAA;AACH,MAAA,OAAO,UAAA,CAAW,GAAA;AAAA,IAEpB,KAAK,YAAA;AACH,MAAA,OAAO,UAAA,CAAW,KAAA;AAAA,IAEpB,KAAK,UAAA;AACH,MAAA,OAAO,CAAA,EAAG,UAAA,CAAW,UAAU,CAAA,CAAA,EAAI,WAAW,QAAQ,CAAA,CAAA;AAAA,IAExD,KAAK,cAAA;AACH,MAAA,OAAO,UAAA,CAAW,QAAA;AAAA,IAEpB,KAAK,YAAA,EAAc;AACjB,MAAA,MAAM,EAAE,OAAM,GAAI,UAAA;AAClB,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,OAAO,CAAA,EAAG,KAAA,CAAM,SAAS,CAAA,CAAA,EAAI,MAAM,KAAK,CAAA,UAAA,CAAA;AAAA,MAC1C;AACA,MAAA,OAAO,CAAA,EAAG,UAAA,CAAW,KAAA,CAAM,MAAM,CAAA,MAAA,CAAA;AAAA,IACnC;AAAA,IAEA;AACE,MAAA,OAAO,cAAA;AAAA;AAEb;AASO,SAAS,mBAAmB,OAAA,EAA0B;AAC3D,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,EAAU,OAAO,OAAA;AAExC,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,IAAA,OAAO,QACJ,MAAA,CAAO,CAAC,IAAA,KAAmC,OAAO,MAAM,IAAA,KAAS,QAAQ,CAAA,CACzE,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAI,CAAA,CACvB,KAAK,IAAI,CAAA;AAAA,EACd;AAEA,EAAA,IAAI,OAAA,IAAW,OAAO,OAAA,KAAY,QAAA,IAAY,UAAU,OAAA,EAAS;AAC/D,IAAA,OAAO,MAAA,CAAQ,QAA8B,IAAI,CAAA;AAAA,EACnD;AAEA,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,IAAA,EAAM,CAAC,CAAA;AACxC;AAKO,SAAS,oBAAoB,OAAA,EAA8B;AAChE,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AACjC,MAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,IACvC,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAE,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,OAAA,EAAQ;AAAA,IAC5C;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,IAAA,MAAM,QAAQ,OAAA,CACX,MAAA;AAAA,MACC,CAAC,IAAA,KACC,IAAA,EAAM,SAAS,MAAA,IAAU,OAAO,KAAK,IAAA,KAAS;AAAA,KAClD,CACC,GAAA,CAAI,CAAC,IAAA,KAAS,KAAK,IAAI,CAAA;AAE1B,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA;AAChC,MAAA,IAAI;AACF,QAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAO,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA,EAAE;AAAA,MACnD,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,EAAE,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,MAAA,EAAO;AAAA,MAC3C;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAQ;AACxC;AAKO,SAAS,mBAAmB,OAAA,EAAoC;AACrE,EAAA,MAAM,MAAA,GAAS,mBAAmB,OAAO,CAAA;AAEzC,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AACjC,MAAA,IAAI,OAAO,MAAA,CAAO,QAAA,KAAa,QAAA,EAAU;AACvC,QAAA,OAAO;AAAA,UACL,UAAU,MAAA,CAAO,QAAA;AAAA,UACjB,MAAA,EAAQ,OAAO,MAAA,IAAU,MAAA;AAAA,UACzB,OAAA,EAAS,OAAO,QAAA,KAAa;AAAA,SAC/B;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,OAAA,EAAS;AAAA,GACX;AACF;AAeO,SAAS,eAAe,OAAA,EAA2C;AACxE,EAAA,MAAM,UAAA,GAAa,mBAAA,CAAoB,OAAA,CAAQ,IAAA,EAAM,QAAQ,KAAK,CAAA;AAClE,EAAA,MAAM,UAAU,mBAAA,CAAoB,OAAA,CAAQ,IAAA,EAAM,OAAA,CAAQ,OAAO,UAAU,CAAA;AAE3E,EAAA,OAAO;AAAA,IACL,IAAI,OAAA,CAAQ,EAAA;AAAA,IACZ,UAAU,OAAA,CAAQ,IAAA;AAAA,IAClB,UAAA;AAAA,IACA,MAAA,EAAQ,SAAA;AAAA,IACR,OAAA;AAAA,IACA,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,GACpC;AACF;AAKO,SAAS,wBAAA,CACd,QAAA,EACA,OAAA,EACA,OAAA,EACoB;AACpB,EAAA,MAAM,eAAA,GAAkB,EAAE,GAAG,QAAA,EAAS;AACtC,EAAA,MAAM,UAAA,GAAa,EAAE,GAAG,QAAA,CAAS,UAAA,EAAW;AAE5C,EAAA,eAAA,CAAgB,MAAA,GAAS,UAAU,QAAA,GAAW,SAAA;AAC9C,EAAA,eAAA,CAAgB,WAAA,GAAA,iBAAc,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AACrD,EAAA,eAAA,CAAgB,OAAA,GAAU,OAAA;AAE1B,EAAA,IAAI,UAAA,CAAW,WAAW,aAAA,EAAe;AACvC,IAAA,MAAM,MAAA,GAAS,mBAAmB,OAAO,CAAA;AACzC,IAAC,WAAiC,MAAA,GAAS,MAAA;AAC3C,IAAA,IAAI,MAAA,CAAO,QAAA,KAAa,MAAA,IAAa,MAAA,CAAO,aAAa,CAAA,EAAG;AAC1D,MAAA,eAAA,CAAgB,MAAA,GAAS,QAAA;AACzB,MAAA,eAAA,CAAgB,OAAA,GAAU,IAAA;AAAA,IAC5B;AAAA,EACF,WAAW,UAAA,CAAW,MAAA,KAAW,UAAA,IAAc,UAAA,CAAW,WAAW,cAAA,EAAgB;AACnF,IAAC,UAAA,CAAiC,MAAA,GAAS,mBAAA,CAAoB,OAAO,CAAA;AAAA,EACxE;AAEA,EAAA,eAAA,CAAgB,UAAA,GAAa,UAAA;AAC7B,EAAA,OAAO,eAAA;AACT;AASO,SAAS,cAAc,UAAA,EAAgC;AAC5D,EAAA,QAAQ,WAAW,MAAA;AAAQ,IACzB,KAAK,aAAA;AACH,MAAA,OAAO,UAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,WAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,WAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,eAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,OAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,UAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,aAAA;AAAA,IACT;AACE,MAAA,OAAO,MAAA;AAAA;AAEb;AAKO,SAAS,eAAe,UAAA,EAAgC;AAC7D,EAAA,QAAQ,WAAW,MAAA;AAAQ,IACzB,KAAK,aAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,OAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,OAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,UAAA;AACH,MAAA,OAAO,KAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,OAAA;AAAA,IACT;AACE,MAAA,OAAO,MAAA;AAAA;AAEb;AASO,SAAS,eAAe,KAAA,EAAuB;AACpD,EAAA,IAAI,KAAA,GAAQ,IAAA,EAAM,OAAO,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA;AACjC,EAAA,IAAI,KAAA,GAAQ,OAAO,IAAA,EAAM,OAAO,IAAI,KAAA,GAAQ,IAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,CAAA;AAC5D,EAAA,OAAO,IAAI,KAAA,IAAS,IAAA,GAAO,IAAA,CAAA,EAAO,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,CAAA;AAC9C;AAKO,SAAS,gBAAgB,SAAA,EAA2B;AACzD,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,SAAS,CAAA;AAC/B,IAAA,OAAO,IAAA,CAAK,mBAAmB,OAAA,EAAS;AAAA,MACtC,IAAA,EAAM,SAAA;AAAA,MACN,MAAA,EAAQ,SAAA;AAAA,MACR,MAAA,EAAQ,SAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,SAAA;AAAA,EACT;AACF;AAKO,SAAS,QAAA,CAAS,KAAa,SAAA,EAA2B;AAC/D,EAAA,IAAI,GAAA,CAAI,MAAA,IAAU,SAAA,EAAW,OAAO,GAAA;AACpC,EAAA,OAAO,GAAA,CAAI,SAAA,CAAU,CAAA,EAAG,SAAA,GAAY,CAAC,CAAA,GAAI,KAAA;AAC3C;AAKO,SAAS,MAAM,OAAA,EAAwD;AAC5E,EAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AACzC;AAuBO,SAAS,0BAAA,CACd,SACA,MAAA,EACgB;AAChB,EAAA,MAAM,SAAyB,EAAC;AAChC,EAAA,IAAI,mBAAsC,EAAC;AAC3C,EAAA,IAAI,gBAAA,GAAmB,CAAA;AAEvB,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,IAAI,gBAAA,CAAiB,SAAS,CAAA,EAAG;AAC/B,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,IAAA,EAAM,YAAA;AAAA,QACN,OAAA,EAAS,CAAC,GAAG,gBAAgB,CAAA;AAAA,QAC7B,EAAA,EAAI,cAAc,gBAAA,EAAkB,CAAA;AAAA,OACrC,CAAA;AACD,MAAA,gBAAA,GAAmB,EAAC;AAAA,IACtB;AAAA,EACF,CAAA;AAEA,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,IAAI,KAAA,CAAM,SAAA,CAAU,IAAA,KAAS,WAAA,EAAa;AACxC,MAAA,gBAAA,CAAiB,KAAK,KAAK,CAAA;AAG3B,MAAA,IACE,MAAA,CAAO,wBACP,MAAA,CAAO,oBAAA,GAAuB,KAC9B,gBAAA,CAAiB,MAAA,IAAU,OAAO,oBAAA,EAClC;AACA,QAAA,cAAA,EAAe;AAAA,MACjB;AAAA,IACF,CAAA,MAAO;AAEL,MAAA,cAAA,EAAe;AACf,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,CAAA;AAAA,IACvC;AAAA,EACF;AAGA,EAAA,cAAA,EAAe;AAEf,EAAA,OAAO,MAAA;AACT;AAKO,SAAS,0BAA0B,OAAA,EAAkD;AAC1F,EAAA,OAAO,OAAA,CACJ,MAAA;AAAA,IAAO,CAAC,CAAA,KACP,CAAA,CAAE,SAAA,CAAU,IAAA,KAAS;AAAA,IAEtB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,QAAQ,CAAA;AACpC;AAqCO,SAAS,wBAAwB,OAAA,EAA6C;AAGnF,EAAA,MAAM,aAAA,GAAgB,8FAAA;AAEtB,EAAA,MAAM,UAA0B,EAAC;AACjC,EAAA,IAAI,eAAA,GAAkB,EAAA;AACtB,EAAA,IAAI,KAAA;AAGJ,EAAA,aAAA,CAAc,SAAA,GAAY,CAAA;AAE1B,EAAA,OAAA,CAAQ,KAAA,GAAQ,aAAA,CAAc,IAAA,CAAK,OAAO,OAAO,IAAA,EAAM;AACrD,IAAA,IAAI,oBAAoB,EAAA,EAAI;AAC1B,MAAA,eAAA,GAAkB,KAAA,CAAM,KAAA;AAAA,IAC1B;AAEA,IAAA,MAAM,EAAA,GAAK,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA;AACvB,IAAA,MAAM,QAAA,GAAW,MAAM,CAAC,CAAA;AACxB,IAAA,MAAM,KAAA,GAAQ,QAAA,GAAW,QAAA,CAAS,IAAA,EAAK,GAAI,EAAA;AAE3C,IAAA,MAAM,cAAA,GAAiB,MAAM,CAAC,CAAA;AAG9B,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,MAAM,UAAU,cAAA,CACb,KAAA,CAAM,IAAI,CAAA,CACV,GAAA,CAAI,UAAQ,IAAA,CAAK,IAAA,EAAM,CAAA,CACvB,OAAO,CAAA,IAAA,KAAQ,IAAA,CAAK,SAAS,CAAC,CAAA,CAC9B,KAAK,GAAG,CAAA;AACX,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,WAAA,GAAc,OAAA;AAAA,MAChB;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,EAAA,EAAI,KAAA,EAAO,aAAa,CAAA;AAAA,EACzC;AAGA,EAAA,IAAI,OAAA,CAAQ,UAAU,CAAA,EAAG;AACvB,IAAA,MAAM,QAAA,GAAW,kBAAkB,CAAA,GAC/B,OAAA,CAAQ,UAAU,CAAA,EAAG,eAAe,CAAA,CAAE,IAAA,EAAK,GAC3C,EAAA;AAEJ,IAAA,OAAO,EAAE,UAAU,OAAA,EAAQ;AAAA,EAC7B;AAIA,EAAA,MAAM,eAAA,GAAkB,2HAAA;AACxB,EAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,KAAA,CAAM,eAAe,CAAA;AAEnD,EAAA,IAAI,iBAAiB,aAAA,CAAc,CAAC,CAAA,IAAK,aAAA,CAAc,CAAC,CAAA,EAAG;AACzD,IAAA,MAAM,QAAA,GAAW,aAAA,CAAc,CAAC,CAAA,CAAE,IAAA,EAAK;AACvC,IAAA,MAAM,WAAA,GAAc,cAAc,CAAC,CAAA;AAGnC,IAAA,MAAM,WAAA,GAAc,qBAAA;AACpB,IAAA,IAAI,SAAA;AAEJ,IAAA,OAAA,CAAQ,SAAA,GAAY,WAAA,CAAY,IAAA,CAAK,WAAW,OAAO,IAAA,EAAM;AAC3D,MAAA,MAAM,MAAA,GAAS,SAAA,CAAU,CAAC,CAAA,IAAK,EAAA;AAC/B,MAAA,MAAM,YAAA,GAAe,UAAU,CAAC,CAAA;AAChC,MAAA,MAAM,SAAA,GAAY,YAAA,GAAe,YAAA,CAAa,IAAA,EAAK,GAAI,EAAA;AACvD,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,EAAA,EAAI,MAAA;AAAA,QACJ,KAAA,EAAO;AAAA,OACR,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,OAAA,CAAQ,UAAU,CAAA,EAAG;AACvB,MAAA,OAAO,EAAE,UAAU,OAAA,EAAQ;AAAA,IAC7B;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AC7nBO,SAAS,OAAA,CAAQ,EAAE,SAAA,EAAU,EAAc;AAChD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,YAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,GAAE,GAAA,EAAI,CAAA;AAAA,oBAC9B,GAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,CAAA;AAAA,oBACpC,GAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,oBACtC,GAAA,CAAC,UAAK,EAAA,EAAG,MAAA,EAAO,IAAG,MAAA,EAAO,EAAA,EAAG,MAAA,EAAO,EAAA,EAAG,MAAA,EAAO,CAAA;AAAA,oBAC9C,GAAA,CAAC,UAAK,EAAA,EAAG,OAAA,EAAQ,IAAG,OAAA,EAAQ,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,OAAA,EAAQ,CAAA;AAAA,oBAClD,GAAA,CAAC,UAAK,EAAA,EAAG,GAAA,EAAI,IAAG,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,oBACpC,GAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,oBACtC,GAAA,CAAC,UAAK,EAAA,EAAG,MAAA,EAAO,IAAG,OAAA,EAAQ,EAAA,EAAG,MAAA,EAAO,EAAA,EAAG,OAAA,EAAQ,CAAA;AAAA,oBAChD,GAAA,CAAC,UAAK,EAAA,EAAG,OAAA,EAAQ,IAAG,MAAA,EAAO,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,MAAA,EAAO;AAAA,GAAA,EAClD,CAAA;AAEJ;AAEO,SAAS,QAAA,CAAS,EAAE,SAAA,EAAU,EAAc;AACjD,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,aAAY,GAAA,EAC3F,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,mDAAkD,CAAA,EAC5D,CAAA;AAEJ;AAEO,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAU,EAAc;AACxD,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,aAAY,GAAA,EAC3F,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,kBAAiB,CAAA,EACpC,CAAA;AAEJ;AAEO,SAAS,gBAAA,CAAiB,EAAE,SAAA,EAAU,EAAc;AACzD,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,aAAY,GAAA,EAC3F,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,kBAAiB,CAAA,EACpC,CAAA;AAEJ;AAEO,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAU,EAAc;AACxD,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,aAAY,GAAA,EAC3F,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,mBAAkB,CAAA,EACrC,CAAA;AAEJ;AAEO,SAAS,aAAA,CAAc,EAAE,SAAA,EAAU,EAAc;AACtD,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,aAAY,GAAA,EAC3F,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,mBAAkB,CAAA,EACrC,CAAA;AAEJ;AAMO,SAAS,YAAA,CAAa,EAAE,SAAA,EAAU,EAAc;AACrD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAA,EAAA,EAAS,QAAO,gBAAA,EAAiB,CAAA;AAAA,oBAClC,GAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK;AAAA,GAAA,EACxC,CAAA;AAEJ;AAEO,SAAS,QAAA,CAAS,EAAE,SAAA,EAAU,EAAc;AACjD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,GAAE,4DAAA,EAA6D,CAAA;AAAA,oBACrE,GAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,gBAAA,EAAiB,CAAA;AAAA,oBAClC,GAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,oBACrC,GAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK;AAAA,GAAA,EACvC,CAAA;AAEJ;AAEO,SAAS,QAAA,CAAS,EAAE,SAAA,EAAU,EAAc;AACjD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,GAAE,4DAAA,EAA6D,CAAA;AAAA,oBACrE,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,yDAAA,EAA0D;AAAA,GAAA,EACpE,CAAA;AAEJ;AAEO,SAAS,YAAA,CAAa,EAAE,SAAA,EAAU,EAAc;AACrD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,GAAE,4DAAA,EAA6D,CAAA;AAAA,oBACrE,GAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,gBAAA,EAAiB,CAAA;AAAA,oBAClC,GAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,oBACtC,GAAA,CAAC,UAAK,EAAA,EAAG,GAAA,EAAI,IAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK;AAAA,GAAA,EACvC,CAAA;AAEJ;AAEO,SAAS,UAAA,CAAW,EAAE,SAAA,EAAU,EAAc;AACnD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,YAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,GAAE,GAAA,EAAI,CAAA;AAAA,oBAC9B,GAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,OAAA,EAAQ;AAAA,GAAA,EAC9C,CAAA;AAEJ;AAEO,SAAS,SAAA,CAAU,EAAE,SAAA,EAAU,EAAc;AAClD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,YAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,GAAE,IAAA,EAAK,CAAA;AAAA,oBAC/B,GAAA,CAAC,UAAK,EAAA,EAAG,GAAA,EAAI,IAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,oBACrC,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,4FAAA,EAA6F;AAAA,GAAA,EACvG,CAAA;AAEJ;AAEO,SAAS,QAAA,CAAS,EAAE,SAAA,EAAU,EAAc;AACjD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,GAAE,SAAA,EAAU,CAAA;AAAA,oBAClB,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,yBAAA,EAA0B,CAAA;AAAA,oBAClC,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAW;AAAA,GAAA,EACrB,CAAA;AAEJ;AAEO,SAAS,QAAA,CAAS,EAAE,SAAA,EAAU,EAAc;AACjD,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,aAAY,GAAA,EAC3F,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,4JAA2J,CAAA,EACrK,CAAA;AAEJ;AAEO,SAAS,gBAAA,CAAiB,EAAE,SAAA,EAAU,EAAc;AACzD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,GAAE,6EAAA,EAA8E,CAAA;AAAA,wBACrF,QAAA,EAAA,EAAO,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,GAAE,GAAA,EAAI,CAAA;AAAA,oBAC9B,GAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK;AAAA,GAAA,EACxC,CAAA;AAEJ;AAEO,SAAS,QAAA,CAAS,EAAE,SAAA,EAAU,EAAc;AACjD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAA,EAAA,EAAS,QAAO,kBAAA,EAAmB,CAAA;AAAA,oBACpC,GAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,eAAA,EAAgB;AAAA,GAAA,EACnC,CAAA;AAEJ;AAEO,SAAS,QAAA,CAAS,EAAE,SAAA,EAAU,EAAc;AACjD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,CAAA;AAAA,oBACvD,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,yDAAA,EAA0D;AAAA,GAAA,EACpE,CAAA;AAEJ;AAEO,SAAS,SAAA,CAAU,EAAE,SAAA,EAAU,EAAc;AAClD,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,aAAY,GAAA,EAC3F,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,kBAAiB,CAAA,EACpC,CAAA;AAEJ;AAEO,SAAS,KAAA,CAAM,EAAE,SAAA,EAAU,EAAc;AAC9C,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,KAAI,EAAA,EAAG,GAAA,EAAI,IAAG,IAAA,EAAK,CAAA;AAAA,oBACpC,GAAA,CAAC,UAAK,EAAA,EAAG,GAAA,EAAI,IAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK;AAAA,GAAA,EACtC,CAAA;AAEJ;AAEO,SAAS,UAAA,CAAW,EAAE,SAAA,EAAU,EAAc;AACnD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,KAAI,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,CAAA;AAAA,oBACpC,GAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,oBACtC,GAAA,CAAC,UAAK,EAAA,EAAG,MAAA,EAAO,IAAG,MAAA,EAAO,EAAA,EAAG,MAAA,EAAO,EAAA,EAAG,MAAA,EAAO,CAAA;AAAA,oBAC9C,GAAA,CAAC,UAAK,EAAA,EAAG,OAAA,EAAQ,IAAG,OAAA,EAAQ,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,OAAA,EAAQ,CAAA;AAAA,oBAClD,GAAA,CAAC,UAAK,EAAA,EAAG,GAAA,EAAI,IAAG,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,oBACpC,GAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,oBACtC,GAAA,CAAC,UAAK,EAAA,EAAG,MAAA,EAAO,IAAG,OAAA,EAAQ,EAAA,EAAG,MAAA,EAAO,EAAA,EAAG,OAAA,EAAQ,CAAA;AAAA,oBAChD,GAAA,CAAC,UAAK,EAAA,EAAG,OAAA,EAAQ,IAAG,MAAA,EAAO,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,MAAA,EAAO;AAAA,GAAA,EAClD,CAAA;AAEJ;AAMO,SAAS,QAAA,CAAS,EAAE,SAAA,EAAU,EAAc;AACjD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,YAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,GAAE,IAAA,EAAK,CAAA;AAAA,oBAC/B,GAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,oBACtC,GAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,GAAA,EAAI;AAAA,GAAA,EACzC,CAAA;AAEJ;AAEO,SAAS,iBAAA,CAAkB,EAAE,SAAA,EAAU,EAAc;AAC1D,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,GAAE,0FAAA,EAA2F,CAAA;AAAA,oBACnG,GAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,oBACrC,GAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,IAAA,EAAK;AAAA,GAAA,EAC3C,CAAA;AAEJ;AAEO,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAU,EAAc;AACxD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,YAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,GAAE,IAAA,EAAK,CAAA;AAAA,oBAC/B,GAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,oBACrC,GAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,IAAA,EAAK;AAAA,GAAA,EAC3C,CAAA;AAEJ;AAEO,SAAS,OAAA,CAAQ,EAAE,SAAA,EAAU,EAAc;AAChD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,OAAM,GAAA,EAAI,MAAA,EAAO,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,CAAA;AAAA,oBAC/C,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,SAAA,EAAU,CAAA;AAAA,oBAClB,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAW,CAAA;AAAA,oBACnB,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,SAAA,EAAU,CAAA;AAAA,oBAClB,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAW,CAAA;AAAA,oBACnB,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,QAAA,EAAS,CAAA;AAAA,oBACjB,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,SAAA,EAAU;AAAA,GAAA,EACpB,CAAA;AAEJ;AAEO,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAU,EAAc;AACxD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,YAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,GAAE,IAAA,EAAK,CAAA;AAAA,oBAC/B,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,eAAA,EAAgB;AAAA,GAAA,EAC1B,CAAA;AAEJ;AAEO,SAAS,WAAA,CAAY,EAAE,SAAA,EAAU,EAAc;AACpD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,YAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,GAAE,IAAA,EAAK,CAAA;AAAA,oBAC/B,GAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,oBACpC,GAAA,CAAC,UAAK,EAAA,EAAG,GAAA,EAAI,IAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK;AAAA,GAAA,EACtC,CAAA;AAEJ;AAMO,SAAS,QAAA,CAAS,EAAE,SAAA,EAAU,EAAc;AACjD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,KAAI,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,CAAA;AAAA,oBACrC,GAAA,CAAC,SAAA,EAAA,EAAQ,MAAA,EAAO,2BAAA,EAA4B;AAAA,GAAA,EAC9C,CAAA;AAEJ;AAEO,SAAS,aAAA,CAAc,EAAE,SAAA,EAAU,EAAc;AACtD,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,aAAY,GAAA,EAC3F,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,qHAAoH,CAAA,EAC9H,CAAA;AAEJ;AAEO,SAAS,cAAA,CAAe,EAAE,SAAA,EAAU,EAAc;AACvD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,YAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,GAAE,IAAA,EAAK,CAAA;AAAA,oBAC/B,GAAA,CAAC,UAAK,CAAA,EAAE,GAAA,EAAI,GAAE,GAAA,EAAI,KAAA,EAAM,GAAA,EAAI,MAAA,EAAO,GAAA,EAAI;AAAA,GAAA,EACzC,CAAA;AAEJ;AAEO,SAAS,iBAAA,CAAkB,EAAE,SAAA,EAAU,EAAc;AAC1D,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,aAAY,GAAA,EAC3F,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iEAAgE,CAAA,EAC1E,CAAA;AAEJ;AAEO,SAAS,YAAA,CAAa,EAAE,SAAA,EAAU,EAAc;AACrD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,GAAE,8DAAA,EAA+D,CAAA;AAAA,oBACvE,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,yDAAA,EAA0D,CAAA;AAAA,oBAClE,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,8DAAA,EAA+D;AAAA,GAAA,EACzE,CAAA;AAEJ;AAEO,SAAS,SAAA,CAAU,EAAE,SAAA,EAAU,EAAc;AAClD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,GAAE,iJAAA,EAAkJ,CAAA;AAAA,oBAC1J,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,kJAAA,EAAmJ;AAAA,GAAA,EAC7J,CAAA;AAEJ;AAEO,SAAS,OAAA,CAAQ,EAAE,SAAA,EAAU,EAAc;AAChD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,GAAE,WAAA,EAAY,CAAA;AAAA,oBACpB,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,CAAA;AAAA,oBAChD,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,SAAA,EAAU,CAAA;AAAA,oBAClB,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAW,CAAA;AAAA,oBACnB,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,SAAA,EAAU,CAAA;AAAA,oBAClB,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAW;AAAA,GAAA,EACrB,CAAA;AAEJ;AAEO,SAAS,QAAA,CAAS,EAAE,SAAA,EAAU,EAAc;AACjD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,GAAE,2CAAA,EAA4C,CAAA;AAAA,wBACnD,QAAA,EAAA,EAAO,EAAA,EAAG,MAAK,EAAA,EAAG,GAAA,EAAI,GAAE,GAAA,EAAI;AAAA,GAAA,EAC/B,CAAA;AAEJ;AAMO,SAAS,UAAA,CAAW,EAAE,SAAA,EAAU,EAAc;AACnD,EAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EAAsB,SAAQ,WAAA,EAAY,IAAA,EAAK,QAAO,MAAA,EAAO,cAAA,EAAe,aAAY,GAAA,EAC3F,QAAA,kBAAA,GAAA,CAAC,YAAO,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,CAAA,EAAE,MAAK,CAAA,EACjC,CAAA;AAEJ;AAEO,SAAS,cAAA,CAAe,EAAE,SAAA,EAAU,EAAc;AACvD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,GAAE,UAAA,EAAW,CAAA;AAAA,oBACnB,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,WAAA,EAAY,CAAA;AAAA,oBACpB,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,WAAA,EAAY,CAAA;AAAA,oBACpB,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,cAAA,EAAe,CAAA;AAAA,oBACvB,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,eAAA,EAAgB,CAAA;AAAA,oBACxB,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,eAAA,EAAgB;AAAA,GAAA,EAC1B,CAAA;AAEJ;AAEO,SAAS,iBAAA,CAAkB,EAAE,SAAA,EAAU,EAAc;AAC1D,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,KAAA,EAAM,GAAA,EAAI,MAAA,EAAO,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,CAAA;AAAA,oBACrD,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,0EAAA,EAA2E,CAAA;AAAA,oBACnF,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAW,CAAA;AAAA,oBACnB,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAW,CAAA;AAAA,oBACnB,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,WAAA,EAAY,CAAA;AAAA,oBACpB,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,WAAA,EAAY;AAAA,GAAA,EACtB,CAAA;AAEJ;AAMO,SAAS,WAAA,CAAY,EAAE,SAAA,EAAU,EAAc;AACpD,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,aAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,aAAY,GAAA,EAC3F,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,+BAA8B,CAAA,EACxC,CAAA;AAEJ;AAEO,SAAS,SAAA,CAAU,EAAE,SAAA,EAAU,EAAc;AAClD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EAC3F,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,YAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,GAAE,IAAA,EAAK,CAAA;AAAA,oBAC/B,GAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,oBACpC,GAAA,CAAC,UAAK,EAAA,EAAG,GAAA,EAAI,IAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK;AAAA,GAAA,EACtC,CAAA;AAEJ;AC/YO,SAAS,gBAAgB,EAAE,MAAA,EAAQ,IAAA,GAAO,IAAA,EAAM,WAAU,EAAyB;AACxF,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,EAAA,EAAI,SAAA;AAAA,IACJ,EAAA,EAAI,SAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAEA,EAAA,MAAM,aAAA,GAAgB;AAAA,IACpB,OAAA,EAAS,oBAAA;AAAA,IACT,OAAA,EAAS,oBAAA;AAAA,IACT,MAAA,EAAQ;AAAA,GACV;AAEA,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,4BAAA;AAAA,QACA,YAAY,IAAI,CAAA;AAAA,QAChB,cAAc,MAAM,CAAA;AAAA,QACpB;AAAA;AACF;AAAA,GACF;AAEJ;ACnBO,SAAS,UAAA,CAAW,EAAE,UAAA,EAAY,SAAA,GAAY,WAAU,EAAoB;AACjF,EAAA,QAAQ,WAAW,MAAA;AAAQ,IACzB,KAAK,aAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAsB,CAAA;AAAA,IAC7C,KAAK,WAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAsB,CAAA;AAAA,IACzC,KAAK,WAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAsB,CAAA;AAAA,IACzC,KAAK,YAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAsB,CAAA;AAAA,IAC7C,KAAK,QAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAsB,CAAA;AAAA,IAC3C,KAAK,MAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAsB,CAAA;AAAA,IACjD,KAAK,WAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAsB,CAAA;AAAA,IAC1C,KAAK,YAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAsB,CAAA;AAAA,IAC3C,KAAK,UAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAsB,CAAA;AAAA,IACzC,KAAK,YAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAsB,CAAA;AAAA,IAC/C,KAAK,cAAA;AAAA,IACL;AACE,MAAA,uBAAOA,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAsB,CAAA;AAAA;AAE7C;AC/BO,SAAS,SAAA,CAAU;AAAA,EACxB,QAAA;AAAA,EACA,SAAA,GAAY,GAAA;AAAA,EACZ,QAAA;AAAA,EACA,eAAA,GAAkB,KAAA;AAAA,EAClB;AACF,CAAA,EAAmB;AACjB,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;AACjC,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,MAAA,GAAS,EAAA,IAAM,SAAS,MAAA,GAAS,GAAA;AAEtD,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA,EACtC,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,oHAAA;AAAA,UACA,CAAC,YAAY,MAAA,IAAU;AAAA,SACzB;AAAA,QACA,OAAO,CAAC,QAAA,IAAY,MAAA,GAAS,EAAE,WAAU,GAAI,MAAA;AAAA,QAC7C,eAAA,EAAe,QAAA;AAAA,QAEd,QAAA,EAAA,eAAA,mBACCA,GAAAA,CAAC,MAAA,EAAA,EACE,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBAChBC,IAAAA,CAAC,MAAA,EAAA,EAAa,WAAU,OAAA,EACtB,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4DAAA,EACb,cAAI,CAAA,EACP,CAAA;AAAA,0BACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAiB,QAAA,EAAA,IAAA,EAAK;AAAA,SAAA,EAAA,EAJ7B,CAKX,CACD,CAAA,EACH,CAAA,mBAEAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EAAiB,QAAA,EAAS;AAAA;AAAA,KAE9C;AAAA,IACC,MAAA,IAAU,CAAC,QAAA,oBACVA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8FACb,QAAA,kBAAAA,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,MAAM,WAAA,CAAY,IAAI,CAAA;AAAA,QAC/B,SAAA,EAAU,mGAAA;AAAA,QACX,QAAA,EAAA;AAAA;AAAA,KAED,EACF,CAAA;AAAA,IAED,MAAA,IAAU,4BACTA,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,MAAM,WAAA,CAAY,KAAK,CAAA;AAAA,QAChC,SAAA,EAAU,wGAAA;AAAA,QACX,QAAA,EAAA;AAAA;AAAA;AAED,GAAA,EAEJ,CAAA;AAEJ;AC9DO,SAAS,WAAA,CAAY,EAAE,KAAA,EAAO,SAAA,EAAW,WAAU,EAAqB;AAC7E,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,MAAM,CAAC,CAAA;AAC/C,EAAA,uBACEA,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAsB,WAC9B,QAAA,EAAA,SAAA,EACH,CAAA;AAEJ;ACGA,SAAS,aAAA,CAAc,EAAE,QAAA,EAAS,EAAkC;AAClE,EAAA,uBACEA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BACZ,QAAA,EACH,CAAA;AAEJ;AAEA,SAAS,cAAA,CAAe,EAAE,QAAA,EAAS,EAAkC;AACnE,EAAA,uBAAOA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAa,QAAA,EAAS,CAAA;AAC9C;AAMA,SAAS,iBAAA,CAAkB,EAAE,MAAA,EAAO,EAAiC;AACnE,EAAA,uBACEC,KAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,MAAA,CAAO,OAAA,oBACNA,IAAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,iBAAc,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,sBACtBA,IAAC,cAAA,EAAA,EACC,QAAA,kBAAAA,IAAC,SAAA,EAAA,EAAW,QAAA,EAAA,MAAA,CAAO,SAAQ,CAAA,EAC7B;AAAA,KAAA,EACF,CAAA;AAAA,IAED,MAAA,CAAO,MAAA,EAAQ,MAAA,oBACdC,KAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,iBAAc,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,sBACrBC,KAAC,cAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAD,IAAC,SAAA,EAAA,EAAU,SAAA,EAAW,GAAA,EAAM,QAAA,EAAA,MAAA,CAAO,OAAO,MAAA,EAAO,CAAA;AAAA,QAChD,MAAA,CAAO,MAAA,CAAO,QAAA,KAAa,MAAA,IAAa,MAAA,CAAO,MAAA,CAAO,QAAA,KAAa,CAAA,oBAClEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EAA4B,QAAA,EAAA;AAAA,UAAA,aAAA;AAAA,UAC7B,OAAO,MAAA,CAAO;AAAA,SAAA,EAC5B;AAAA,OAAA,EAEJ;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAEA,SAAS,eAAA,CAAgB,EAAE,MAAA,EAAO,EAA+B;AAC/D,EAAA,uBACEA,KAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,iBAAc,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,oBACnBC,KAAC,cAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iEAAA,EACb,iBAAO,IAAA,EACV,CAAA;AAAA,MAAA,CACE,MAAA,CAAO,MAAA,KAAW,MAAA,IAAa,MAAA,CAAO,KAAA,KAAU,2BAChDC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EACZ,QAAA,EAAA;AAAA,QAAA,MAAA,CAAO,MAAA,KAAW,MAAA,oBAAaA,IAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA;AAAA,UAAA,UAAA;AAAA,UAAS,MAAA,CAAO;AAAA,SAAA,EAAO,CAAA;AAAA,QAC5D,MAAA,CAAO,WAAW,MAAA,IAAa,MAAA,CAAO,UAAU,MAAA,oBAAaD,GAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,QAAA,EAAG,CAAA;AAAA,QACtE,MAAA,CAAO,KAAA,KAAU,MAAA,oBAAaC,KAAC,MAAA,EAAA,EAAK,QAAA,EAAA;AAAA,UAAA,SAAA;AAAA,UAAQ,MAAA,CAAO;AAAA,SAAA,EAAM;AAAA,OAAA,EAC5D;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,eAAA,CAAgB,EAAE,MAAA,EAAO,EAA+B;AAC/D,EAAA,uBACEA,KAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,iBAAc,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,oBACnBA,GAAAA,CAAC,cAAA,EAAA,EACC,QAAA,kBAAAA,GAAAA,CAAC,UAAK,SAAA,EAAU,iEAAA,EACb,QAAA,EAAA,MAAA,CAAO,IAAA,EACV,CAAA,EACF,CAAA;AAAA,IACC,MAAA,CAAO,SAAA,oBACNC,IAAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,iBAAc,QAAA,EAAA,KAAA,EAAG,CAAA;AAAA,sBAClBA,IAAC,cAAA,EAAA,EACC,QAAA,kBAAAA,IAAC,SAAA,EAAA,EAAW,QAAA,EAAA,MAAA,CAAO,WAAU,CAAA,EAC/B;AAAA,KAAA,EACF,CAAA;AAAA,IAED,MAAA,CAAO,SAAA,oBACNC,IAAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,iBAAc,QAAA,EAAA,KAAA,EAAG,CAAA;AAAA,sBAClBA,IAAC,cAAA,EAAA,EACC,QAAA,kBAAAA,IAAC,SAAA,EAAA,EAAW,QAAA,EAAA,MAAA,CAAO,WAAU,CAAA,EAC/B;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAEA,SAAS,gBAAA,CAAiB,EAAE,MAAA,EAAO,EAAgC;AACjE,EAAA,uBACEC,KAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,iBAAc,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,oBACnBA,GAAAA,CAAC,cAAA,EAAA,EACC,QAAA,kBAAAA,GAAAA,CAAC,UAAK,SAAA,EAAU,iEAAA,EACb,QAAA,EAAA,MAAA,CAAO,IAAA,EACV,CAAA,EACF,CAAA;AAAA,IACC,MAAA,CAAO,OAAA,oBACNC,IAAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,iBAAc,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,sBACtBA,GAAAA,CAAC,cAAA,EAAA,EACC,QAAA,kBAAAA,GAAAA,CAAC,aAAU,SAAA,EAAW,GAAA,EAAM,QAAA,EAAA,MAAA,CAAO,OAAA,EAAQ,CAAA,EAC7C;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAEA,SAAS,aAAA,CAAc,EAAE,MAAA,EAAO,EAA6B;AAC3D,EAAA,uBACEC,KAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,iBAAc,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,oBACtBC,KAAC,cAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iEAAA,EACb,iBAAO,OAAA,EACV,CAAA;AAAA,MAAA,CACE,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,yBACrCC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EACZ,QAAA,EAAA;AAAA,QAAA,MAAA,CAAO,IAAA,oBAAQA,IAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA;AAAA,UAAA,QAAA;AAAA,UAAO,MAAA,CAAO;AAAA,SAAA,EAAK,CAAA;AAAA,QACxC,MAAA,CAAO,IAAA,oBAAQA,IAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA;AAAA,UAAA,QAAA;AAAA,UAAO,MAAA,CAAO;AAAA,SAAA,EAAK,CAAA;AAAA,QACxC,MAAA,CAAO,IAAA,oBAAQA,IAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA;AAAA,UAAA,QAAA;AAAA,UAAO,MAAA,CAAO;AAAA,SAAA,EAAK;AAAA,OAAA,EAC3C;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,MAAA,EAAO,EAA2B;AACvD,EAAA,uBACEA,KAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,iBAAc,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,oBACtBC,KAAC,cAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iEAAA,EACb,iBAAO,OAAA,EACV,CAAA;AAAA,MACC,OAAO,IAAA,oBACNC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4BAAA,EAA6B,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,QAAO,MAAA,CAAO;AAAA,OAAA,EAAK;AAAA,KAAA,EAEnE;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,eAAA,CAAgB,EAAE,MAAA,EAAO,EAA+B;AAC/D,EAAA,uBACEA,KAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,iBAAc,QAAA,EAAA,KAAA,EAAG,CAAA;AAAA,oBAClBC,KAAC,cAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAD,GAAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,MAAM,MAAA,CAAO,GAAA;AAAA,UACb,MAAA,EAAO,QAAA;AAAA,UACP,GAAA,EAAI,qBAAA;AAAA,UACJ,SAAA,EAAU,+DAAA;AAAA,UAET,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA,OACV;AAAA,MACC,MAAA,CAAO,0BACNA,GAAAA,CAAC,SAAI,SAAA,EAAU,4BAAA,EAA8B,iBAAO,MAAA,EAAO;AAAA,KAAA,EAE/D;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,gBAAA,CAAiB,EAAE,MAAA,EAAO,EAAgC;AACjE,EAAA,uBACEC,KAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,iBAAc,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,oBACpBA,GAAAA,CAAC,cAAA,EAAA,EACC,QAAA,kBAAAA,GAAAA,CAAC,UAAK,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAA,MAAA,CAAO,KAAA,EAAM,CAAA,EACxD;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,cAAA,CAAe,EAAE,MAAA,EAAO,EAA8B;AAC7D,EAAA,uBACEC,KAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,iBAAc,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,oBACnBA,GAAAA,CAAC,cAAA,EAAA,EACC,0BAAAC,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,iEAAA,EACb,QAAA,EAAA;AAAA,MAAA,MAAA,CAAO,UAAA;AAAA,MAAW,GAAA;AAAA,MAAE,MAAA,CAAO;AAAA,KAAA,EAC9B,CAAA,EACF,CAAA;AAAA,IACC,MAAA,CAAO,SAAA,oBACNA,IAAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,iBAAc,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,sBACnBA,IAAC,cAAA,EAAA,EACC,QAAA,kBAAAA,IAAC,WAAA,EAAA,EAAY,KAAA,EAAO,MAAA,CAAO,SAAA,EAAW,CAAA,EACxC;AAAA,KAAA,EACF,CAAA;AAAA,IAED,MAAA,CAAO,MAAA,oBACNC,IAAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,iBAAc,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,sBACrBA,IAAC,cAAA,EAAA,EACE,QAAA,EAAA,MAAA,CAAO,OAAO,IAAA,KAAS,UAAA,mBACtBA,GAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,MAAA,CAAO,OAAO,MAAA,CAAO,KAAK,CAAA,EAAE,CAAA,mBAExCA,GAAAA,CAAC,eAAY,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,CAAA,EAE7C;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAEA,SAAS,kBAAA,CAAmB,EAAE,MAAA,EAAO,EAAkC;AACrE,EAAA,uBACEC,KAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,MAAA,CAAO,SAAA,oBACNA,IAAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,iBAAc,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,sBACnBA,IAAC,cAAA,EAAA,EACC,QAAA,kBAAAA,IAAC,WAAA,EAAA,EAAY,KAAA,EAAO,MAAA,CAAO,SAAA,EAAW,CAAA,EACxC;AAAA,KAAA,EACF,CAAA;AAAA,IAED,MAAA,CAAO,MAAA,oBACNC,IAAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,iBAAc,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,sBACrBA,IAAC,cAAA,EAAA,EACE,QAAA,EAAA,MAAA,CAAO,OAAO,IAAA,KAAS,UAAA,mBACtBA,GAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,MAAA,CAAO,OAAO,MAAA,CAAO,KAAK,CAAA,EAAE,CAAA,mBAExCA,GAAAA,CAAC,eAAY,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,CAAA,EAE7C;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAEA,SAAS,gBAAA,CAAiB,EAAE,MAAA,EAAO,EAAgC;AACjE,EAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAM,GAAI,MAAA;AAEzB,EAAA,uBACEC,KAAA,QAAA,EAAA,EAEG,QAAA,EAAA;AAAA,IAAA,KAAA,oBACCA,KAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,iBAAc,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,sBACvBC,KAAC,cAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qDAAA,EACb,QAAA,kBAAAA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,yEAAA;AAAA,cACV,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,KAAA,CAAM,KAAA,GAAQ,CAAA,GAAK,KAAA,CAAM,SAAA,GAAY,KAAA,CAAM,KAAA,GAAS,GAAA,GAAM,CAAC,CAAA,CAAA,CAAA;AAAI;AAAA,WACpF,EACF,CAAA;AAAA,0BACAC,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EACb,QAAA,EAAA;AAAA,YAAA,KAAA,CAAM,SAAA;AAAA,YAAU,GAAA;AAAA,YAAE,KAAA,CAAM;AAAA,WAAA,EAC3B;AAAA,SAAA,EACF,CAAA;AAAA,wBACAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,UAAA,KAAA,CAAM,aAAa,CAAA,oBAClBA,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,iBAAA,EACb,QAAA,EAAA;AAAA,YAAA,KAAA,CAAM,UAAA;AAAA,YAAW;AAAA,WAAA,EACpB,CAAA;AAAA,UAED,MAAM,OAAA,GAAU,CAAA,oBACfA,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,eAAA,EACb,QAAA,EAAA;AAAA,YAAA,KAAA,CAAM,OAAA;AAAA,YAAQ;AAAA,WAAA,EACjB;AAAA,SAAA,EAEJ;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBAIFD,GAAAA,CAAC,aAAA,EAAA,EAAc,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,oBACpBA,GAAAA,CAAC,cAAA,EAAA,EACC,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACZ,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,KAAU;AAC1B,MAAA,MAAM,cAAc,IAAA,CAAK,MAAA,KAAW,aAAA,GAAgB,IAAA,CAAK,aAAa,IAAA,CAAK,OAAA;AAC3E,MAAA,uBACEC,IAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UAEC,SAAA,EAAW,EAAA;AAAA,YACT,yDAAA;AAAA,YACA,IAAA,CAAK,WAAW,WAAA,IAAe,YAAA;AAAA,YAC/B,IAAA,CAAK,WAAW,aAAA,IAAiB;AAAA,WACnC;AAAA,UAGC,QAAA,EAAA;AAAA,YAAA,IAAA,CAAK,MAAA,KAAW,8BACfD,GAAAA,CAAC,mBAAgB,SAAA,EAAU,0CAAA,EAA2C,IACpE,IAAA,CAAK,MAAA,KAAW,gCAClBA,GAAAA,CAAC,cAAW,SAAA,EAAU,sDAAA,EAAuD,oBAE7EA,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,uCAAA,EAAwC,CAAA;AAAA,4BAIhEC,IAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,EAAA;AAAA,kBACT,yBAAA;AAAA,kBACA,IAAA,CAAK,MAAA,KAAW,WAAA,GAAc,4BAAA,GAA+B;AAAA,iBAC/D;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAAA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sBAAA,EAAwB,QAAA,EAAA;AAAA,oBAAA,KAAA,GAAQ,CAAA;AAAA,oBAAE;AAAA,mBAAA,EAAC,CAAA;AAAA,kBAClD;AAAA;AAAA;AAAA;AACH;AAAA,SAAA;AAAA,QAzBK,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA,OA0B/B;AAAA,IAEJ,CAAC,GACH,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,UAAA,EAAW,EAA+B;AAC/D,EAAA,QAAQ,WAAW,MAAA;AAAQ,IACzB,KAAK,aAAA;AACH,MAAA,uBAAOD,GAAAA,CAAC,iBAAA,EAAA,EAAkB,MAAA,EAAQ,UAAA,EAAY,CAAA;AAAA,IAChD,KAAK,WAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,eAAA,EAAA,EAAgB,MAAA,EAAQ,UAAA,EAAY,CAAA;AAAA,IAC9C,KAAK,WAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,eAAA,EAAA,EAAgB,MAAA,EAAQ,UAAA,EAAY,CAAA;AAAA,IAC9C,KAAK,YAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,MAAA,EAAQ,UAAA,EAAY,CAAA;AAAA,IAC/C,KAAK,QAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,aAAA,EAAA,EAAc,MAAA,EAAQ,UAAA,EAAY,CAAA;AAAA,IAC5C,KAAK,MAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,WAAA,EAAA,EAAY,MAAA,EAAQ,UAAA,EAAY,CAAA;AAAA,IAC1C,KAAK,WAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,eAAA,EAAA,EAAgB,MAAA,EAAQ,UAAA,EAAY,CAAA;AAAA,IAC9C,KAAK,YAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,MAAA,EAAQ,UAAA,EAAY,CAAA;AAAA,IAC/C,KAAK,UAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,cAAA,EAAA,EAAe,MAAA,EAAQ,UAAA,EAAY,CAAA;AAAA,IAC7C,KAAK,cAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,kBAAA,EAAA,EAAmB,MAAA,EAAQ,UAAA,EAAY,CAAA;AAAA,IACjD,KAAK,YAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,MAAA,EAAQ,UAAA,EAAY,CAAA;AAAA,IAC/C;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;AAMA,SAAS,WAAW,UAAA,EAAiC;AACnD,EAAA,QAAQ,WAAW,MAAA;AAAQ,IACzB,KAAK,aAAA;AACH,MAAA,OAAO,OAAA,CAAQ,UAAA,CAAW,OAAA,IAAW,UAAA,CAAW,QAAQ,MAAM,CAAA;AAAA,IAChE,KAAK,WAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,OAAA,CAAQ,UAAA,CAAW,SAAA,IAAa,UAAA,CAAW,SAAS,CAAA;AAAA,IAC7D,KAAK,YAAA;AACH,MAAA,OAAO,OAAA,CAAQ,WAAW,OAAO,CAAA;AAAA,IACnC,KAAK,QAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,UAAA;AACH,MAAA,OAAO,OAAA,CAAQ,UAAA,CAAW,SAAA,IAAa,UAAA,CAAW,MAAM,CAAA;AAAA,IAC1D,KAAK,cAAA;AACH,MAAA,OAAO,OAAA,CAAQ,UAAA,CAAW,SAAA,IAAa,UAAA,CAAW,MAAM,CAAA;AAAA,IAC1D,KAAK,YAAA;AACH,MAAA,OAAO,UAAA,CAAW,MAAM,MAAA,GAAS,CAAA;AAAA,IACnC;AACE,MAAA,OAAO,KAAA;AAAA;AAEb;AA4BO,SAAS,aAAa,EAAE,QAAA,EAAU,eAAA,GAAkB,KAAA,EAAO,WAAU,EAAsB;AAChG,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIE,SAAS,eAAe,CAAA;AACxD,EAAA,MAAM,EAAE,UAAA,EAAY,MAAA,EAAQ,OAAA,EAAQ,GAAI,QAAA;AACxC,EAAA,MAAM,SAAA,GAAY,WAAW,UAAU,CAAA;AAGvC,EAAA,MAAM,aAAA,GAAgB;AAAA,IACpB,OAAA,EAAS,8CAAA;AAAA,IACT,OAAA,EAAS,iBAAA;AAAA,IACT,MAAA,EAAQ;AAAA,GACV;AAEA,EAAA,uBACED,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,wEAAA;AAAA,QACA,cAAc,MAAM,CAAA;AAAA,QACpB;AAAA,OACF;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAAA,IAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,SAAA,IAAa,WAAA,CAAY,CAAC,QAAQ,CAAA;AAAA,YACjD,SAAA,EAAW,EAAA;AAAA,cACT,sEAAA;AAAA,cACA,YAAY,iCAAA,GAAoC;AAAA,aAClD;AAAA,YACA,UAAU,CAAC,SAAA;AAAA,YAEX,QAAA,EAAA;AAAA,8BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EAEb,QAAA,EAAA;AAAA,gCAAAD,GAAAA,CAAC,SAAI,SAAA,EAAW,EAAA;AAAA,kBACd,8DAAA;AAAA,kBACA,MAAA,KAAW,SAAA,GAAY,kBAAA,GACvB,MAAA,KAAW,WAAW,eAAA,GAAkB;AAAA,mBAExC,QAAA,kBAAAA,GAAAA;AAAA,kBAAC,UAAA;AAAA,kBAAA;AAAA,oBACC,UAAA;AAAA,oBACA,SAAA,EAAW,EAAA;AAAA,sBACT,aAAA;AAAA,sBACA,MAAA,KAAW,SAAA,GAAY,iBAAA,GACvB,MAAA,KAAW,WAAW,cAAA,GAAiB;AAAA;AACzC;AAAA,iBACF,EACF,CAAA;AAAA,gCAGAA,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,yCAAA,EACb,QAAA,EAAA,cAAA,CAAe,UAAU,CAAA,EAC5B,CAAA;AAAA,gCACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oDACb,QAAA,EAAA,OAAA,EACH;AAAA,eAAA,EACF,CAAA;AAAA,8BAEAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EAEb,QAAA,EAAA;AAAA,gCAAAD,GAAAA,CAAC,eAAA,EAAA,EAAgB,MAAA,EAAgB,IAAA,EAAK,IAAA,EAAK,CAAA;AAAA,gBAG1C,6BACCA,GAAAA;AAAA,kBAAC,eAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAW,EAAA;AAAA,sBACT,yDAAA;AAAA,sBACA,QAAA,IAAY;AAAA;AACd;AAAA;AACF,eAAA,EAEJ;AAAA;AAAA;AAAA,SACF;AAAA,QAGC,YAAY,SAAA,oBACXC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iFAAA,EACb,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,eAAY,UAAA,EAAwB,CAAA;AAAA,UAGpC,MAAA,KAAW,SAAA,oBACVA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4DAAA,EACb,QAAA,kBAAAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,4BAAAD,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,kCAAA,EAAmC,CAAA;AAAA,4BACxDA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gDAA+C,QAAA,EAAA,wBAAA,EAE/D;AAAA,WAAA,EACF,CAAA,EACF;AAAA,SAAA,EAEJ;AAAA;AAAA;AAAA,GAEJ;AAEJ;ACnfO,SAAS,WAAA,CAAY,EAAE,OAAA,EAAS,QAAA,EAAU,WAAU,EAAqB;AAC9E,EAAA,uBACEA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,iBAAA,EAAmB,SAAS,GAAG,KAAA,EAAO;AAAA,IACvD,mBAAA,EAAqB;AAAA,GACvB,EACG,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,2BACZC,IAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MAEC,OAAA,EAAS,MAAM,QAAA,CAAS,MAAM,CAAA;AAAA,MAC9B,SAAA,EAAW,EAAA;AAAA,QACT,iDAAA;AAAA,QACA,mCAAA;AAAA,QACA,qEAAA;AAAA,QACA,mEAAA;AAAA,QACA,4CAAA;AAAA,QACA;AAAA,OACF;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,UAAK,SAAA,EAAW,EAAA;AAAA,UACf,kCAAA;AAAA,UACA,oDAAA;AAAA,UACA,kCAAA;AAAA,UACA,uBAAA;AAAA,UACA,uCAAA;AAAA,UACA;AAAA,SACF,EACG,iBAAO,EAAA,EACV,CAAA;AAAA,wBAGAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4EAAA,EACZ,iBAAO,KAAA,EACV,CAAA;AAAA,UACC,MAAA,CAAO,+BACNA,GAAAA,CAAC,SAAI,SAAA,EAAU,uFAAA,EACZ,iBAAO,WAAA,EACV;AAAA,SAAA,EAEJ,CAAA;AAAA,wBAGAA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,4CAAA;AAAA,cACA,kEAAA;AAAA,cACA;AAAA,aACF;AAAA,YACA,IAAA,EAAK,MAAA;AAAA,YACL,OAAA,EAAQ,WAAA;AAAA,YACR,MAAA,EAAO,cAAA;AAAA,YACP,WAAA,EAAa,CAAA;AAAA,YAEb,QAAA,kBAAAA,IAAC,MAAA,EAAA,EAAK,aAAA,EAAc,SAAQ,cAAA,EAAe,OAAA,EAAQ,GAAE,cAAA,EAAe;AAAA;AAAA;AACtE;AAAA,KAAA;AAAA,IAhDK,MAAA,CAAO;AAAA,GAkDf,CAAA,EACH,CAAA;AAEJ;AC9EA,SAAS,sBAAsB,OAAA,EAAoD;AACjF,EAAA,MAAM,UAAA,GAAa,yCAAA;AACnB,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,OAAA,CAAQ,UAAU,CAAA;AAE9C,EAAA,IAAI,gBAAgB,EAAA,EAAI;AACtB,IAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,EAAC,EAAE;AAAA,EACpC;AAEA,EAAA,MAAM,OAAO,OAAA,CAAQ,SAAA,CAAU,CAAA,EAAG,WAAW,EAAE,IAAA,EAAK;AACpD,EAAA,MAAM,cAAc,OAAA,CAAQ,SAAA,CAAU,cAAc,UAAA,CAAW,MAAM,EAAE,IAAA,EAAK;AAC5E,EAAA,MAAM,KAAA,GAAQ,YACX,KAAA,CAAM,IAAI,EACV,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,UAAA,CAAW,IAAI,CAAC,CAAA,CACtC,IAAI,CAAC,IAAA,KAAS,KAAK,SAAA,CAAU,CAAC,CAAA,CAAE,IAAA,EAAM,CAAA;AAEzC,EAAA,OAAO,EAAE,MAAM,KAAA,EAAM;AACvB;AAgBO,SAAS,WAAA,CAAY,EAAE,KAAA,EAAO,SAAA,EAAU,EAAqB;AAClE,EAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,qBAAA,CAAsB,MAAM,OAAO,CAAA;AAE3D,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,4CAAA,EAA8C,SAAS,CAAA,EACxE,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4EAAA,EACb,QAAA,kBAAAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6CAAA,EAA+C,QAAA,EAAA,IAAA,IAAQ,kBAAA,EAAmB,CAAA,EACzF,CAAA;AAAA,MACC,MAAM,MAAA,GAAS,CAAA,oBACdC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6DAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6EAAA,EACb,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,UAAE;AAAA,SAAA,EAEvC,CAAA;AAAA,wBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACZ,gBAAM,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,qBAChBA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAU,8FAAA;AAAA,YACV,KAAA,EAAO,IAAA;AAAA,YAEN,QAAA,EAAA,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,CAAE,CAAC;AAAA,WAAA;AAAA,UAJd;AAAA,SAMR,CAAA,EACH;AAAA,OAAA,EACF,CAAA;AAAA,MAED,KAAA,CAAM,SAAA,oBACLA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4BAAA,EACZ,QAAA,EAAA,eAAA,CAAgB,KAAA,CAAM,SAAS,CAAA,EAClC;AAAA,KAAA,EAEJ,CAAA;AAAA,oBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4EAAA,EACb,0BAAAA,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,uBAAA,EAAwB,CAAA,EAC9C;AAAA,GAAA,EACF,CAAA;AAEJ;AAeO,SAAS,gBAAA,CAAiB,EAAE,KAAA,EAAO,cAAA,EAAgB,WAAU,EAA0B;AAE5F,EAAA,MAAM,aAAA,GAAgB,uBAAA,CAAwB,KAAA,CAAM,OAAO,CAAA;AAE3D,EAAA,MAAM,kBAAA,GAAqB,CAAC,MAAA,KAAyB;AACnD,IAAA,IAAI,cAAA,EAAgB;AAElB,MAAA,cAAA,CAAe,UAAU,MAAA,CAAO,EAAE,CAAA,EAAA,EAAK,MAAA,CAAO,KAAK,CAAA,CAAE,CAAA;AAAA,IACvD;AAAA,EACF,CAAA;AAEA,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,gCAAA,EAAkC,SAAS,CAAA,EAC5D,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,SAAI,SAAA,EAAU,0FAAA,EACb,0BAAAA,GAAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,kCAAA,EAAmC,CAAA,EACxD,CAAA;AAAA,oBACAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gCAAA,EACb,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oFAAA,EACZ,QAAA,EAAA,aAAA,mBACCC,IAAAA,CAAAE,UAAA,EAEG,QAAA,EAAA;AAAA,QAAA,aAAA,CAAc,QAAA,oBACbH,GAAAA,CAAC,aAAA,EAAA,EAAe,wBAAc,QAAA,EAAS,CAAA;AAAA,wBAGzCA,GAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,SAAS,aAAA,CAAc,OAAA;AAAA,YACvB,QAAA,EAAU;AAAA;AAAA;AACZ,OAAA,EACF,oBAEAA,GAAAA,CAAC,iBAAe,QAAA,EAAA,KAAA,CAAM,OAAA,EAAQ,GAElC,CAAA,EACF,CAAA;AAAA,MACC,KAAA,CAAM,SAAA,oBACLA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4BAAA,EACZ,QAAA,EAAA,eAAA,CAAgB,KAAA,CAAM,SAAS,CAAA,EAClC;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;AAYO,SAAS,eAAA,CAAgB,EAAE,KAAA,EAAO,SAAA,EAAU,EAAyB;AAC1E,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,gCAAA,EAAkC,SAAS,CAAA,EAC5D,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,SAAI,SAAA,EAAU,iFAAA,EACb,0BAAAA,GAAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,yBAAA,EAA0B,CAAA,EACpD,CAAA;AAAA,oBACAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBACb,QAAA,kBAAAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8DAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAAA,EAA2C,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,sBAClEA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+EAAA,EACZ,gBAAM,OAAA,EACT;AAAA,KAAA,EACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAaO,SAAS,gBAAgB,EAAE,KAAA,EAAO,eAAA,GAAkB,KAAA,EAAO,WAAU,EAAyB;AACnG,EAAA,IAAI,KAAA,CAAM,SAAA,CAAU,IAAA,KAAS,WAAA,EAAa,OAAO,IAAA;AAEjD,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,gCAAA,EAAkC,SAAS,CAAA,EAC5D,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,SAAI,SAAA,EAAU,0FAAA,EACb,0BAAAA,GAAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,kCAAA,EAAmC,CAAA,EACxD,CAAA;AAAA,oBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAA,EACb,QAAA,kBAAAA,GAAAA,CAAC,YAAA,EAAA,EAAa,QAAA,EAAU,KAAA,CAAM,SAAA,CAAU,QAAA,EAAU,iBAAkC,CAAA,EACtF;AAAA,GAAA,EACF,CAAA;AAEJ;AAYO,SAAS,YAAA,CAAa,EAAE,KAAA,EAAO,SAAA,EAAU,EAAsB;AACpE,EAAA,IAAI,KAAA,CAAM,SAAA,CAAU,IAAA,KAAS,OAAA,EAAS,OAAO,IAAA;AAE7C,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,gCAAA,EAAkC,SAAS,CAAA,EAC5D,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,SAAI,SAAA,EAAU,8EAAA,EACb,0BAAAA,GAAAA,CAAC,iBAAA,EAAA,EAAkB,SAAA,EAAU,sBAAA,EAAuB,CAAA,EACtD,CAAA;AAAA,oBACAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBACb,QAAA,kBAAAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wDAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EAAwC,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,sBAC5DA,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,sBAAA,EAAwB,QAAA,EAAA,KAAA,CAAM,UAAU,OAAA,EAAQ,CAAA;AAAA,MAC5D,MAAM,SAAA,CAAU,IAAA,oBACfC,IAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,wCAAA,EAAyC,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,QAAO,MAAM,SAAA,CAAU;AAAA,OAAA,EAAK;AAAA,KAAA,EAEtF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AA0BO,SAAS,YAAA,CAAa,EAAE,KAAA,EAAO,cAAA,EAAgB,WAAU,EAAsB;AACpF,EAAA,QAAQ,KAAA,CAAM,UAAU,IAAA;AAAM,IAC5B,KAAK,cAAA;AACH,MAAA,uBAAOD,GAAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAc,SAAA,EAAsB,CAAA;AAAA,IAC1D,KAAK,mBAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,KAAA,EAAc,gBAAgC,SAAA,EAAsB,CAAA;AAAA,IAC/F,KAAK,UAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,eAAA,EAAA,EAAgB,KAAA,EAAc,SAAA,EAAsB,CAAA;AAAA,IAC9D,KAAK,WAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,eAAA,EAAA,EAAgB,KAAA,EAAc,SAAA,EAAsB,CAAA;AAAA,IAC9D,KAAK,OAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,YAAA,EAAA,EAAa,KAAA,EAAc,SAAA,EAAsB,CAAA;AAAA,IAC3D;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;ACjPO,SAAS,iBAAiB,EAAE,OAAA,GAAU,QAAQ,IAAA,GAAO,IAAA,EAAM,WAAU,EAA0B;AACpG,EAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,IAAA,MAAM,QAAA,GAAW;AAAA,MACf,EAAA,EAAI,SAAA;AAAA,MACJ,EAAA,EAAI,aAAA;AAAA,MACJ,EAAA,EAAI;AAAA,KACN;AACA,IAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA,EACrD,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,UAAK,SAAA,EAAW,EAAA,CAAG,qDAAqD,QAAA,CAAS,IAAI,CAAC,CAAA,EAAG,CAAA;AAAA,sBAC1FA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,GAAG,mDAAA,EAAqD,QAAA,CAAS,IAAI,CAAC,CAAA,EAAG,KAAA,EAAO,EAAE,cAAA,EAAgB,SAAQ,EAAG,CAAA;AAAA,sBAC9HA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,GAAG,mDAAA,EAAqD,QAAA,CAAS,IAAI,CAAC,CAAA,EAAG,KAAA,EAAO,EAAE,cAAA,EAAgB,SAAQ,EAAG;AAAA,KAAA,EAChI,CAAA;AAAA,EAEJ;AAEA,EAAA,IAAI,YAAY,OAAA,EAAS;AACvB,IAAA,MAAM,QAAA,GAAW;AAAA,MACf,EAAA,EAAI,aAAA;AAAA,MACJ,EAAA,EAAI,SAAA;AAAA,MACJ,EAAA,EAAI;AAAA,KACN;AACA,IAAA,uBACEA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA,EACrD,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAW,EAAA,CAAG,mDAAA,EAAqD,SAAS,IAAI,CAAC,GAAG,CAAA,EAC5F,CAAA;AAAA,EAEJ;AAEA,EAAA,IAAI,YAAY,QAAA,EAAU;AACxB,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,EAAA,EAAI,SAAA;AAAA,MACJ,EAAA,EAAI,WAAA;AAAA,MACJ,EAAA,EAAI;AAAA,KACN;AACA,IAAA,uBACEA,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,gEAAA;AAAA,UACA,YAAY,IAAI,CAAA;AAAA,UAChB;AAAA;AACF;AAAA,KACF;AAAA,EAEJ;AAGA,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,EAAA,EAAI,SAAA;AAAA,IACJ,EAAA,EAAI,SAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAEA,EAAA,uBACEA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,uCAAA,EAAyC,YAAA,CAAa,IAAI,CAAA,EAAG,SAAS,GACvF,QAAA,kBAAAC,IAAAA,CAAC,SAAI,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,GAAA,EACrE,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,YAAO,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,CAAA,EAAE,IAAA,EAAK,SAAA,EAAU,YAAA,EAAa,CAAA;AAAA,oBACtDA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,yBAAA,EAA0B,eAAc,OAAA,EAAQ;AAAA,GAAA,EAC1D,CAAA,EACF,CAAA;AAEJ;AChEO,SAAS,aAAA,CAAc;AAAA,EAC5B,OAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd,cAAA,GAAiB,IAAA;AAAA,EACjB;AACF,CAAA,EAAuB;AACrB,EAAA,uBACEA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA,EACrC,QAAA,EAAA,cAAA,mBACCC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oFAAA,EACb,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAACI,aAAAA,EAAA,EAAe,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,IACvB,WAAA,oBACCJ,GAAAA,CAAC,gBAAA,EAAA,EAAiB,SAAQ,QAAA,EAAS,IAAA,EAAK,IAAA,EAAK,SAAA,EAAU,qBAAA,EAAsB;AAAA,GAAA,EAEjF,CAAA,mBAEAC,IAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,6CAAA,EACV,QAAA,EAAA;AAAA,IAAA,OAAA;AAAA,IACA,WAAA,oBACCD,GAAAA,CAAC,gBAAA,EAAA,EAAiB,SAAQ,QAAA,EAAS,IAAA,EAAK,IAAA,EAAK,SAAA,EAAU,qBAAA,EAAsB;AAAA,GAAA,EAEjF,CAAA,EAEJ,CAAA;AAEJ;ACbO,SAAS,qBAAA,CAAsB;AAAA,EACpC,QAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA,GAAoB,GAAA;AAAA,EACpB;AACF,CAAA,EAA+B;AAC7B,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIE,SAAS,KAAK,CAAA;AACpD,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIA,SAAS,QAAQ,CAAA;AACnE,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIA,SAAoC,IAAI,CAAA;AACtF,EAAA,MAAM,eAAA,GAAkB,OAAsB,IAAI,CAAA;AAElD,EAAA,SAAA,CAAU,MAAM;AAEd,IAAA,IAAI,QAAA,CAAS,EAAA,KAAO,eAAA,CAAgB,OAAA,EAAS;AAC3C,MAAA,IAAI,eAAA,CAAgB,OAAA,KAAY,IAAA,IAAQ,gBAAA,EAAkB;AAExD,QAAA,kBAAA,CAAmB,gBAAgB,CAAA;AACnC,QAAA,cAAA,CAAe,IAAI,CAAA;AAGnB,QAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,UAAA,oBAAA,CAAqB,QAAQ,CAAA;AAC7B,UAAA,kBAAA,CAAmB,IAAI,CAAA;AACvB,UAAA,cAAA,CAAe,KAAK,CAAA;AAAA,QACtB,GAAG,iBAAiB,CAAA;AAEpB,QAAA,eAAA,CAAgB,UAAU,QAAA,CAAS,EAAA;AACnC,QAAA,OAAO,MAAM,aAAa,KAAK,CAAA;AAAA,MACjC,CAAA,MAAO;AAEL,QAAA,oBAAA,CAAqB,QAAQ,CAAA;AAC7B,QAAA,eAAA,CAAgB,UAAU,QAAA,CAAS,EAAA;AAAA,MACrC;AAAA,IACF,CAAA,MAAO;AAEL,MAAA,oBAAA,CAAqB,QAAQ,CAAA;AAAA,IAC/B;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,EAAG,CAAC,QAAA,EAAU,gBAAA,EAAkB,iBAAiB,CAAC,CAAA;AAGlD,EAAA,MAAM,aAAA,GAAgB;AAAA,IACpB,OAAA,EAAS,sBAAA;AAAA,IACT,OAAA,EAAS,+BAAA;AAAA,IACT,MAAA,EAAQ;AAAA,GACV;AAEA,EAAA,MAAM,qBAAA,GAAwB,CAAC,EAAA,EAAwB,SAAA,qBACrDD,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,qCAAA;AAAA,QACA,SAAA,GAAY,sBAAA,GAA0B,WAAA,GAAc,uBAAA,GAA0B;AAAA,OAChF;AAAA,MACA,KAAA,EAAO;AAAA,QACL,iBAAA,EAAmB,GAAG,iBAAiB,CAAA,EAAA;AAAA,OACzC;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAAD,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,8DAAA;AAAA,cACA,GAAG,MAAA,KAAW,SAAA,GACV,qBACA,EAAA,CAAG,MAAA,KAAW,WACZ,eAAA,GACA;AAAA,aACR;AAAA,YAEA,QAAA,kBAAAA,GAAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBACC,YAAY,EAAA,CAAG,UAAA;AAAA,gBACf,SAAA,EAAW,EAAA;AAAA,kBACT,aAAA;AAAA,kBACA,GAAG,MAAA,KAAW,SAAA,GACV,oBACA,EAAA,CAAG,MAAA,KAAW,WACZ,cAAA,GACA;AAAA;AACR;AAAA;AACF;AAAA,SACF;AAAA,wBAGAA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2CACb,QAAA,EAAA,cAAA,CAAe,EAAA,CAAG,UAAU,CAAA,EAC/B,CAAA;AAAA,wBAGAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yDAAA,EACb,aAAG,OAAA,EACN,CAAA;AAAA,wBAGAA,GAAAA,CAAC,eAAA,EAAA,EAAgB,QAAQ,EAAA,CAAG,MAAA,EAAQ,MAAK,IAAA,EAAK;AAAA;AAAA;AAAA,GAChD;AAGF,EAAA,uBACEC,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,iFAAA;AAAA,QACA,aAAA,CAAc,kBAAkB,MAAM,CAAA;AAAA,QACtC,iBAAA,CAAkB,WAAW,SAAA,IAAa,yBAAA;AAAA,QAC1C;AAAA,OACF;AAAA,MAGC,QAAA,EAAA;AAAA,QAAA,eAAA,oBACCD,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBACZ,QAAA,EAAA,qBAAA,CAAsB,eAAA,EAAiB,IAAI,CAAA,EAC9C,CAAA;AAAA,QAID,qBAAA,CAAsB,mBAAmB,KAAK;AAAA;AAAA;AAAA,GACjD;AAEJ;AC9HA,SAAS,qBACP,SAAA,EACkC;AAClC,EAAA,MAAM,aAAa,SAAA,CAAU,IAAA,CAAK,CAAC,EAAA,KAAO,EAAA,CAAG,WAAW,SAAS,CAAA;AACjE,EAAA,MAAM,YAAY,SAAA,CAAU,IAAA,CAAK,CAAC,EAAA,KAAO,EAAA,CAAG,WAAW,QAAQ,CAAA;AAC/D,EAAA,MAAM,aAAa,SAAA,CAAU,KAAA,CAAM,CAAC,EAAA,KAAO,EAAA,CAAG,WAAW,SAAS,CAAA;AAElE,EAAA,IAAI,YAAY,OAAO,SAAA;AACvB,EAAA,IAAI,YAAY,OAAO,SAAA;AACvB,EAAA,IAAI,SAAA,IAAa,CAAC,UAAA,EAAY,OAAO,SAAA,CAAU,IAAA,CAAK,CAAC,EAAA,KAAO,EAAA,CAAG,MAAA,KAAW,SAAS,CAAA,GAAI,iBAAA,GAAoB,QAAA;AAC3G,EAAA,OAAO,SAAA;AACT;AAsBO,SAAS,kBAAA,CAAmB;AAAA,EACjC,SAAA;AAAA,EACA,eAAA,GAAkB,KAAA;AAAA,EAClB,iBAAA,GAAoB,GAAA;AAAA,EACpB;AACF,CAAA,EAA4B;AAC1B,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIE,SAAS,eAAe,CAAA;AAGxD,EAAA,MAAM,cAAA,GAAiB,SAAA,CAAU,SAAA,CAAU,MAAA,GAAS,CAAC,CAAA;AACrD,EAAA,MAAM,gBAAA,GAAmB,UAAU,MAAA,GAAS,CAAA,GAAI,UAAU,SAAA,CAAU,MAAA,GAAS,CAAC,CAAA,GAAI,IAAA;AAGlF,EAAA,MAAM,WAAA,GAAc,QAAQ,MAAM,oBAAA,CAAqB,SAAS,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAG9E,EAAA,MAAM,cAAA,GAAiB,UAAU,MAAA,CAAO,CAAC,OAAO,EAAA,CAAG,MAAA,KAAW,SAAS,CAAA,CAAE,MAAA;AACzE,EAAA,MAAM,WAAA,GAAc,UAAU,MAAA,CAAO,CAAC,OAAO,EAAA,CAAG,MAAA,KAAW,QAAQ,CAAA,CAAE,MAAA;AACrE,EAAA,MAAM,aAAa,SAAA,CAAU,MAAA;AAE7B,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,MAAM,aAAA,GAAgB;AAAA,IACpB,OAAA,EAAS,sBAAA;AAAA,IACT,OAAA,EAAS,+BAAA;AAAA,IACT,eAAA,EAAiB,sBAAA;AAAA,IACjB,MAAA,EAAQ;AAAA,GACV;AAEA,EAAA,uBACED,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,4FAAA;AAAA,QACA,cAAc,WAAW,CAAA;AAAA,QACzB,gBAAgB,SAAA,IAAa,yBAAA;AAAA,QAC7B;AAAA,OACF;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAAD,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,WAAA,CAAY,CAAC,QAAQ,CAAA;AAAA,YACpC,SAAA,EAAW,EAAA;AAAA,cACT;AAAA,aACF;AAAA,YAGA,QAAA,kBAAAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACb,QAAA,EAAA;AAAA,8BAAAD,GAAAA;AAAA,gBAAC,qBAAA;AAAA,gBAAA;AAAA,kBACC,QAAA,EAAU,cAAA;AAAA,kBACV,gBAAA;AAAA,kBACA,iBAAA;AAAA,kBACA,SAAA,EAAU;AAAA;AAAA,eACZ;AAAA,8BAGAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mEAAA,EAEZ,QAAA,EAAA;AAAA,gBAAA,UAAA,GAAa,qBACZD,GAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAW,EAAA;AAAA,sBACT,wEAAA;AAAA,sBACA,WAAA,KAAgB,YACZ,kCAAA,GACA,WAAA,KAAgB,YACd,oDAAA,GACA,WAAA,KAAgB,WACd,4BAAA,GACA;AAAA,qBACV;AAAA,oBAEC,QAAA,EAAA,WAAA,KAAgB,SAAA,mBACfC,IAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA;AAAA,sBAAA,cAAA;AAAA,sBAAe,GAAA;AAAA,sBAAE;AAAA,qBAAA,EAAW,CAAA,GACjC,WAAA,GAAc,CAAA,mBAChBA,KAAC,MAAA,EAAA,EAAM,QAAA,EAAA;AAAA,sBAAA,cAAA;AAAA,sBAAe,OAAA;AAAA,sBAAM,WAAA;AAAA,sBAAY;AAAA,qBAAA,EAAO,CAAA,mBAE/CA,IAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA;AAAA,sBAAA,UAAA;AAAA,sBAAW;AAAA,qBAAA,EAAM;AAAA;AAAA,iBAE5B;AAAA,gCAIFD,GAAAA;AAAA,kBAAC,eAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAW,EAAA;AAAA,sBACT,yDAAA;AAAA,sBACA,QAAA,IAAY;AAAA;AACd;AAAA;AACF,eAAA,EACF;AAAA,aAAA,EACF;AAAA;AAAA,SACF;AAAA,QAGC,QAAA,oBACCC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qCAAA,EAEb,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACZ,QAAA,EAAA,SAAA,CAAU,GAAA,CAAI,CAAC,QAAA,EAAU,KAAA,qBACxBC,IAAAA,CAAC,KAAA,EAAA,EAAsB,WAAU,UAAA,EAE9B,QAAA,EAAA;AAAA,YAAA,KAAA,GAAQ,UAAU,MAAA,GAAS,CAAA,oBAC1BD,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uDAAA,EAAwD,CAAA;AAAA,4BAGzEA,GAAAA;AAAA,cAAC,YAAA;AAAA,cAAA;AAAA,gBACC,QAAA;AAAA,gBACA,eAAA,EAAiB,KAAA;AAAA,gBACjB,SAAA,EAAU;AAAA;AAAA;AACZ,WAAA,EAAA,EAVQ,QAAA,CAAS,EAWnB,CACD,CAAA,EACH,CAAA;AAAA,UAGC,WAAA,KAAgB,6BACfA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,2DAAA;AAAA,gBACA,WAAA,KAAgB,SAAA,GACZ,0BAAA,GACA,WAAA,KAAgB,WACd,cAAA,GACA;AAAA,eACR;AAAA,cAEC,QAAA,EAAA,WAAA,KAAgB,SAAA,mBACfC,IAAAA,CAAAE,UAAA,EACE,QAAA,EAAA;AAAA,gCAAAH,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,kCAAA,EAAmC,CAAA;AAAA,gCACxDC,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8CAAA,EAA+C,QAAA,EAAA;AAAA,kBAAA,MAAA;AAAA,kBACxD,UAAA;AAAA,kBAAW,OAAA;AAAA,kBAAM,UAAA,KAAe,IAAI,GAAA,GAAM,EAAA;AAAA,kBAAG;AAAA,iBAAA,EACpD;AAAA,eAAA,EACF,IACE,WAAA,KAAgB,QAAA,mBAClBA,IAAAA,CAAAE,UAAA,EACE,QAAA,EAAA;AAAA,gCAAAH,GAAAA,CAAC,eAAA,EAAA,EAAgB,MAAA,EAAO,QAAA,EAAS,MAAK,IAAA,EAAK,CAAA;AAAA,gCAC3CC,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAA,EACb,QAAA,EAAA;AAAA,kBAAA,WAAA;AAAA,kBAAY,OAAA;AAAA,kBAAM,WAAA,KAAgB,IAAI,GAAA,GAAM,EAAA;AAAA,kBAAG;AAAA,iBAAA,EAClD;AAAA,eAAA,EACF,CAAA,mBAEAA,IAAAA,CAAAE,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,gCAAAH,GAAAA,CAAC,eAAA,EAAA,EAAgB,MAAA,EAAO,QAAA,EAAS,MAAK,IAAA,EAAK,CAAA;AAAA,gCAC3CC,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAA,EACb,QAAA,EAAA;AAAA,kBAAA,cAAA;AAAA,kBAAe,cAAA;AAAA,kBAAa,WAAA;AAAA,kBAAY;AAAA,iBAAA,EAC3C;AAAA,eAAA,EACF;AAAA;AAAA;AAEJ,SAAA,EAEJ;AAAA;AAAA;AAAA,GAEJ;AAEJ;AC5LA,SAAS,cAAA,CAAe,SAAiB,KAAA,EAAuB;AAC9D,EAAA,MAAM,WAAW,KAAA,GAAQ,OAAA;AACzB,EAAA,IAAI,QAAA,GAAW,GAAA,EAAM,OAAO,CAAA,EAAG,QAAQ,CAAA,EAAA,CAAA;AACvC,EAAA,OAAO,CAAA,EAAA,CAAI,QAAA,GAAW,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AACxC;AAKA,SAAS,YAAA,CAAa,UAAkB,OAAA,EAA0B;AAEhE,EAAA,IAAI,WAAW,OAAA,CAAQ,MAAA,GAAS,CAAA,IAAK,OAAA,CAAQ,SAAS,EAAA,EAAI;AACxD,IAAA,OAAO,OAAA;AAAA,EACT;AAGA,EAAA,MAAM,UAAU,QAAA,CACb,OAAA,CAAQ,eAAA,EAAiB,EAAE,EAC3B,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA,CACnB,QAAQ,IAAA,EAAM,GAAG,CAAA,CACjB,OAAA,CAAQ,mBAAmB,OAAO,CAAA;AAErC,EAAA,OAAO,OAAA,CAAQ,OAAO,CAAC,CAAA,CAAE,aAAY,GAAI,OAAA,CAAQ,MAAM,CAAC,CAAA;AAC1D;AAKA,SAAS,aAAa,MAAA,EAAkD;AACtE,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,SAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,OAAA;AAAA,IACT;AACE,MAAA,OAAO,SAAA;AAAA;AAEb;AAKA,SAAS,QAAA,CAAS,EAAE,MAAA,EAAO,EAA2B;AACpD,EAAA,MAAM,SAAA,GAAY,aAAA;AAElB,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,SAAA;AACH,MAAA,uBAAOD,GAAAA,CAAC,WAAA,EAAA,EAAY,WAAW,EAAA,CAAG,SAAA,EAAW,uCAAuC,CAAA,EAAG,CAAA;AAAA,IACzF,KAAK,SAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,SAAA,EAAA,EAAU,WAAW,EAAA,CAAG,SAAA,EAAW,0BAA0B,CAAA,EAAG,CAAA;AAAA,IAC1E,KAAK,OAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,SAAA,EAAA,EAAU,WAAW,EAAA,CAAG,SAAA,EAAW,cAAc,CAAA,EAAG,CAAA;AAAA,IAC9D;AACE,MAAA,uBAAOA,GAAAA,CAAC,QAAA,EAAA,EAAS,WAAW,EAAA,CAAG,SAAA,EAAW,eAAe,CAAA,EAAG,CAAA;AAAA;AAElE;AAmBO,SAAS,aAAA,CAAc;AAAA,EAC5B,SAAA;AAAA,EACA,eAAA,GAAkB,KAAA;AAAA,EAClB,UAAA,EAAY,kBAAA;AAAA,EACZ,QAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIE,SAAS,eAAe,CAAA;AAGxE,EAAA,MAAM,UAAA,GAAa,kBAAA,KAAuB,MAAA,GAAY,kBAAA,GAAqB,gBAAA;AAE3E,EAAA,MAAM,YAAA,GAAe,YAAY,MAAM;AACrC,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,QAAA,EAAS;AAAA,IACX,CAAA,MAAO;AACL,MAAA,mBAAA,CAAoB,CAAC,IAAA,KAAS,CAAC,IAAI,CAAA;AAAA,IACrC;AAAA,EACF,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,MAAM,cAAA,GAAiB,SAAA,CAAU,MAAA,CAAO,CAAC,EAAA,KAAO,EAAA,CAAG,MAAA,KAAW,SAAA,IAAa,EAAA,CAAG,MAAA,KAAW,QAAQ,CAAA,CAAE,MAAA;AACnG,EAAA,MAAM,cAAc,SAAA,CAAU,IAAA,CAAK,CAAC,EAAA,KAAO,EAAA,CAAG,WAAW,SAAS,CAAA;AAClE,EAAA,MAAM,WAAW,SAAA,CAAU,IAAA,CAAK,CAAC,EAAA,KAAO,EAAA,CAAG,WAAW,QAAQ,CAAA;AAC9D,EAAA,MAAM,WAAA,GAAc,mBAAmB,SAAA,CAAU,MAAA;AAEjD,EAAA,uBACED,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,mCAAA;AAAA,QACA,QAAA,GACI,mBAAA,GACA,WAAA,GACE,+BAAA,GACA,sBAAA;AAAA,QACN;AAAA,OACF;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAAA,IAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,YAAA;AAAA,YACT,SAAA,EAAU,kHAAA;AAAA,YAGV,QAAA,EAAA;AAAA,8BAAAD,GAAAA;AAAA,gBAAC,eAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,EAAA;AAAA,oBACT,uEAAA;AAAA,oBACA,CAAC,UAAA,IAAc;AAAA;AACjB;AAAA,eACF;AAAA,8BAGAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CACZ,QAAA,EAAA,WAAA,mBACCC,IAAAA,CAAAE,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,gCAAAH,GAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,iEAAA,EAAkE,CAAA;AAAA,gCACzFA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gCAAA,EACb,uBAAa,WAAA,CAAY,QAAA,EAAU,WAAA,CAAY,OAAO,CAAA,EACzD;AAAA,eAAA,EACF,CAAA,GACE,QAAA,mBACFC,IAAAA,CAAAE,UAAA,EACE,QAAA,EAAA;AAAA,gCAAAH,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,wCAAA,EAAyC,CAAA;AAAA,gCAC9DA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAgC,QAAA,EAAA,uBAAA,EAAqB;AAAA,eAAA,EACvE,CAAA,mBAEAC,IAAAA,CAAAE,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,gCAAAH,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,oDAAA,EAAqD,CAAA;AAAA,gCAC1EC,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gCAAA,EACb,QAAA,EAAA;AAAA,kBAAA,cAAA;AAAA,kBAAe,OAAA;AAAA,kBAAM,cAAA,KAAmB,IAAI,GAAA,GAAM,EAAA;AAAA,kBAAG;AAAA,iBAAA,EACxD;AAAA,eAAA,EACF,CAAA,EAEJ,CAAA;AAAA,8BAGAA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4EAAA,EACb,QAAA,EAAA;AAAA,gBAAA,cAAA;AAAA,gBAAe,GAAA;AAAA,gBAAE,SAAA,CAAU;AAAA,eAAA,EAC9B;AAAA;AAAA;AAAA,SACF;AAAA,QAGC,UAAA,oBACCD,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gDAAA,EACb,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACZ,QAAA,EAAA,SAAA,CAAU,GAAA,CAAI,CAAC,UAAU,KAAA,KAAU;AAClC,UAAA,MAAM,UAAA,GAAa,YAAA,CAAa,QAAA,CAAS,MAAM,CAAA;AAC/C,UAAA,MAAM,SAAA,GAAY,SAAS,SAAA,GAAY,IAAI,KAAK,QAAA,CAAS,SAAS,CAAA,CAAE,OAAA,EAAQ,GAAI,CAAA;AAChF,UAAA,MAAM,OAAA,GAAU,SAAS,WAAA,GAAc,IAAI,KAAK,QAAA,CAAS,WAAW,CAAA,CAAE,OAAA,EAAQ,GAAI,CAAA;AAClF,UAAA,MAAM,WAAA,GAAc,SAAA,GAAY,CAAA,IAAK,OAAA,GAAU,CAAA;AAE/C,UAAA,uBACEC,IAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cAEC,SAAA,EAAW,EAAA;AAAA,gBACT,kCAAA;AAAA,gBACA,eAAe,SAAA,IAAa,0BAAA;AAAA,gBAC5B,eAAe,OAAA,IAAW;AAAA,eAC5B;AAAA,cAGA,QAAA,EAAA;AAAA,gCAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gDAAA,EACb,QAAA,EAAA;AAAA,kCAAAA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sCAAA,EAAwC,QAAA,EAAA;AAAA,oBAAA,KAAA,GAAQ,CAAA;AAAA,oBAAE;AAAA,mBAAA,EAAC,CAAA;AAAA,kCACnED,GAAAA,CAAC,QAAA,EAAA,EAAS,MAAA,EAAQ,UAAA,EAAY;AAAA,iBAAA,EAChC,CAAA;AAAA,gCAGAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,kCAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,oCAAAD,GAAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACC,SAAA,EAAW,EAAA;AAAA,0BACT,SAAA;AAAA,0BACA,eAAe,SAAA,IAAa,0BAAA;AAAA,0BAC5B,eAAe,SAAA,IAAa,eAAA;AAAA,0BAC5B,eAAe,OAAA,IAAW,cAAA;AAAA,0BAC1B,eAAe,SAAA,IAAa;AAAA,yBAC9B;AAAA,wBAEC,QAAA,EAAA,YAAA,CAAa,QAAA,CAAS,QAAA,EAAU,QAAA,CAAS,OAAO;AAAA;AAAA,qBACnD;AAAA,oBAGC,WAAA,KAAgB,UAAA,KAAe,SAAA,IAAa,UAAA,KAAe,OAAA,CAAA,oBAC1DA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAA,cAAA,CAAe,SAAA,EAAW,OAAO,CAAA,EAAE;AAAA,mBAAA,EAEhF,CAAA;AAAA,kBAGC,SAAS,OAAA,IAAW,QAAA,CAAS,cAAc,QAAA,IAAY,QAAA,CAAS,8BAC/DA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,yCACV,QAAA,EAAA,MAAA,CAAQ,QAAA,CAAS,WAAgD,MAAA,EAAQ,KAAA,IAAS,OAAO,CAAA,EAC5F;AAAA,iBAAA,EAEJ;AAAA;AAAA,aAAA;AAAA,YAxCK,QAAA,CAAS;AAAA,WAyChB;AAAA,QAEJ,CAAC,GACH,CAAA,EACF;AAAA;AAAA;AAAA,GAEJ;AAEJ;;;ACyFO,SAAS,mBAAmB,MAAA,EAAgD;AACjF,EAAA,OAAO,OAAO,MAAA,KAAW,aAAA;AAC3B;AAEO,SAAS,iBAAiB,MAAA,EAA8C;AAC7E,EAAA,OAAO,OAAO,MAAA,KAAW,WAAA;AAC3B;AAEO,SAAS,iBAAiB,MAAA,EAA8C;AAC7E,EAAA,OAAO,OAAO,MAAA,KAAW,WAAA;AAC3B;AAEO,SAAS,kBAAkB,MAAA,EAA+C;AAC/E,EAAA,OAAO,OAAO,MAAA,KAAW,YAAA;AAC3B;AAEO,SAAS,eAAe,MAAA,EAA4C;AACzE,EAAA,OAAO,OAAO,MAAA,KAAW,QAAA;AAC3B;AAEO,SAAS,aAAa,MAAA,EAA0C;AACrE,EAAA,OAAO,OAAO,MAAA,KAAW,MAAA;AAC3B;AAEO,SAAS,iBAAiB,MAAA,EAA8C;AAC7E,EAAA,OAAO,OAAO,MAAA,KAAW,WAAA;AAC3B;AAEO,SAAS,kBAAkB,MAAA,EAA+C;AAC/E,EAAA,OAAO,OAAO,MAAA,KAAW,YAAA;AAC3B;AAEO,SAAS,gBAAgB,MAAA,EAA6C;AAC3E,EAAA,OAAO,OAAO,MAAA,KAAW,UAAA;AAC3B;AAEO,SAAS,oBAAoB,MAAA,EAAiD;AACnF,EAAA,OAAO,OAAO,MAAA,KAAW,cAAA;AAC3B;AAEO,SAAS,kBAAkB,MAAA,EAA+C;AAC/E,EAAA,OAAO,OAAO,MAAA,KAAW,YAAA;AAC3B;AAEO,SAAS,gBAAgB,KAAA,EAAoD;AAClF,EAAA,OAAO,MAAM,IAAA,KAAS,WAAA;AACxB;AAEO,SAAS,aAAa,KAAA,EAAiD;AAC5E,EAAA,OAAO,MAAM,IAAA,KAAS,OAAA;AACxB;AAEO,SAAS,cAAc,KAAA,EAAkD;AAC9E,EAAA,OAAO,MAAM,IAAA,KAAS,QAAA;AACxB;AAsIO,IAAM,sBAAA,GAA4C;AAAA,EACvD,IAAA,EAAM,QAAA;AAAA,EACN,oBAAA,EAAsB,CAAA;AAAA,EACtB,eAAA,EAAiB,KAAA;AAAA,EACjB,iBAAA,EAAmB;AACrB;AC9fA,IAAM,kBAAA,GAAqB,cAA6C,IAAI,CAAA;AAsBrE,SAAS,mBAAA,CAAoB,EAAE,QAAA,EAAU,aAAA,EAAc,EAA6B;AACzF,EAAA,MAAM,CAAC,MAAA,EAAQ,cAAc,CAAA,GAAIE,QAAAA,CAA4B;AAAA,IAC3D,GAAG,sBAAA;AAAA,IACH,GAAG;AAAA,GACJ,CAAA;AAED,EAAA,MAAM,OAAA,GAAUG,WAAAA,CAAY,CAAC,IAAA,KAA0B;AACrD,IAAA,cAAA,CAAe,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,MAAK,CAAE,CAAA;AAAA,EAC9C,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,SAAA,GAAYA,WAAAA,CAAY,CAAC,OAAA,KAAwC;AACrE,IAAA,cAAA,CAAe,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,GAAG,SAAQ,CAAE,CAAA;AAAA,EACpD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UAAA,GAAaA,YAAY,MAAM;AACnC,IAAA,cAAA,CAAe,CAAC,IAAA,MAAU;AAAA,MACxB,GAAG,IAAA;AAAA,MACH,IAAA,EAAM,IAAA,CAAK,IAAA,KAAS,QAAA,GAAW,SAAA,GAAY;AAAA,KAC7C,CAAE,CAAA;AAAA,EACJ,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,KAAA,GAAQC,OAAAA;AAAA,IACZ,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,WAAW,UAAA,EAAW,CAAA;AAAA,IAChD,CAAC,MAAA,EAAQ,OAAA,EAAS,SAAA,EAAW,UAAU;AAAA,GACzC;AAEA,EAAA,uBACEN,GAAAA,CAAC,kBAAA,CAAmB,QAAA,EAAnB,EAA4B,OAC1B,QAAA,EACH,CAAA;AAEJ;AAkBO,SAAS,cAAA,GAAyC;AACvD,EAAA,MAAM,OAAA,GAAU,WAAW,kBAAkB,CAAA;AAE7C,EAAA,IAAI,CAAC,OAAA,EAAS;AAEZ,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,sBAAA;AAAA,MACR,SAAS,MAAM;AAAA,MAAC,CAAA;AAAA,MAChB,WAAW,MAAM;AAAA,MAAC,CAAA;AAAA,MAClB,YAAY,MAAM;AAAA,MAAC;AAAA,KACrB;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;AAKO,SAAS,gBAAA,GAAsC;AACpD,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,cAAA,EAAe;AAClC,EAAA,OAAO,MAAA;AACT;AC5CO,SAAS,WAAA,CAAY;AAAA,EAC1B,OAAA;AAAA,EACA,OAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA,EAAe,iBAAA;AAAA,EACf,cAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,EAAqB;AAEnB,EAAA,MAAM,gBAAgB,gBAAA,EAAiB;AACvC,EAAA,MAAM,SAAS,iBAAA,IAAqB,aAAA;AAGpC,EAAA,MAAM,yBAAA,GAA4BK,WAAAA;AAAA,IAChC,CAAC,SAAiB,UAAA,KAAuB;AACvC,MAAA,IAAI,CAAC,gBAAgB,OAAO,MAAA;AAC5B,MAAA,OAAO,CAAC,MAAA,KAAyB;AAC/B,QAAA,cAAA,CAAe;AAAA,UACb,GAAG,MAAA;AAAA,UACH,OAAA;AAAA,UACA;AAAA,SACD,CAAA;AAAA,MACH,CAAA;AAAA,IACF,CAAA;AAAA,IACA,CAAC,cAAc;AAAA,GACjB;AAGA,EAAA,MAAM,cAAA,GAAiBC,QAAQ,MAAM;AACnC,IAAA,IAAI,MAAA,CAAO,SAAS,QAAA,EAAU;AAE5B,MAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,QAC7B,IAAA,EAAM,QAAA;AAAA,QACN,KAAA;AAAA,QACA,IAAI,KAAA,CAAM;AAAA,OACZ,CAAE,CAAA;AAAA,IACJ;AAGA,IAAA,OAAO,0BAAA,CAA2B,SAAS,MAAM,CAAA;AAAA,EACnD,CAAA,EAAG,CAAC,OAAA,EAAS,MAAM,CAAC,CAAA;AAEpB,EAAA,uBACEL,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,oDAAA,EAAsD,SAAS,CAAA,EAC/E,QAAA,EAAA;AAAA,IAAA,cAAA,CAAe,GAAA,CAAI,CAAC,YAAA,KAAiB;AACpC,MAAA,IAAI,YAAA,CAAa,SAAS,QAAA,EAAU;AAClC,QAAA,MAAM,QAAQ,YAAA,CAAa,KAAA;AAG3B,QAAA,IAAI,KAAA,CAAM,SAAA,CAAU,IAAA,KAAS,QAAA,IAAY,YAAA,EAAc;AACrD,UAAA,MAAM,cAAc,KAAA,CAAM,SAAA;AAC1B,UAAA,MAAM,gBAAgB,YAAA,CAAa;AAAA,YACjC,KAAA;AAAA,YACA,YAAY,WAAA,CAAY,UAAA;AAAA,YACxB,YAAY,WAAA,CAAY,UAAA;AAAA,YACxB,QAAA,EAAU,yBAAA,CAA0B,KAAA,CAAM,EAAA,EAAI,YAAY,UAAU;AAAA,WACrE,CAAA;AAGD,UAAA,IAAI,kBAAkB,IAAA,EAAM;AAC1B,YAAA,uBACED,GAAAA,CAAC,KAAA,EAAA,EAAmB,WAAU,qBAAA,EAC3B,QAAA,EAAA,aAAA,EAAA,EADO,MAAM,EAEhB,CAAA;AAAA,UAEJ;AAAA,QACF;AAEA,QAAA,uBAAOA,GAAAA,CAAC,YAAA,EAAA,EAA4B,KAAA,EAAc,cAAA,EAAA,EAAxB,MAAM,EAAkD,CAAA;AAAA,MACpF;AAGA,MAAA,MAAM,SAAA,GAAY,yBAAA,CAA0B,YAAA,CAAa,OAAO,CAAA;AAChE,MAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAA0B,SAAA,EAAU,gCAAA,EACnC,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,SAAI,SAAA,EAAU,0FAAA,EACb,0BAAAA,GAAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,kCAAA,EAAmC,CAAA,EACxD,CAAA;AAAA,wBACAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UACZ,QAAA,EAAA,MAAA,CAAO,IAAA,KAAS,8BACfA,GAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,SAAA;AAAA,YACA,iBAAiB,MAAA,CAAO;AAAA;AAAA,4BAG1BA,GAAAA;AAAA,UAAC,kBAAA;AAAA,UAAA;AAAA,YACC,SAAA;AAAA,YACA,iBAAiB,MAAA,CAAO,eAAA;AAAA,YACxB,mBAAmB,MAAA,CAAO;AAAA;AAAA,SAC5B,EAEJ;AAAA,OAAA,EAAA,EAjBQ,aAAa,EAkBvB,CAAA;AAAA,IAEJ,CAAC,CAAA;AAAA,IAEA,gBAAA,oBACCC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gCAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,SAAI,SAAA,EAAU,0FAAA,EACb,0BAAAA,GAAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,kCAAA,EAAmC,CAAA,EACxD,CAAA;AAAA,sBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oBAAA,EACb,QAAA,kBAAAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EACb,QAAA,kBAAAA,IAAC,aAAA,EAAA,EAAc,OAAA,EAAS,kBAAkB,WAAA,EAAW,IAAA,EAAC,GACxD,CAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,IAGD,WAAW,CAAC,gBAAA,oBACXC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gCAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,SAAI,SAAA,EAAU,0FAAA,EACb,0BAAAA,GAAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,kCAAA,EAAmC,CAAA,EACxD,CAAA;AAAA,sBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACb,0BAAAA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,OAAA,EAAQ,MAAA,EAAO,CAAA,EACnC;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AC/KA,SAAS,aAAa,KAAA,EAAiB;AACrC,EAAA,QAAQ,KAAA;AAAO,IACb,KAAK,MAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,IAC3C,KAAK,MAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,iBAAA,EAAA,EAAkB,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,IACpD,KAAK,OAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,IAClD,KAAK,OAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA;AAE9C;AAEA,SAAS,cAAc,KAAA,EAAiB;AACtC,EAAA,QAAQ,KAAA;AAAO,IACb,KAAK,MAAA;AACH,MAAA,OAAO,eAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,iBAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAA,OAAO,cAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAA,OAAO,eAAA;AAAA;AAEb;AAEA,SAAS,gBAAgB,KAAA,EAAiB;AACxC,EAAA,QAAQ,KAAA;AAAO,IACb,KAAK,MAAA;AACH,MAAA,OAAO,gBAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,kBAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAA,OAAO,eAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAA,OAAO,YAAA;AAAA;AAEb;AAEA,SAAS,iBAAiB,QAAA,EAAuB;AAC/C,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,OAAA;AACH,MAAA,OAAO,OAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,WAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,SAAA;AAAA;AAEb;AAUA,SAAS,WAAA,CAAY,EAAE,GAAA,EAAI,EAAqB;AAC9C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIE,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,OAAA,GAAU,IAAI,IAAA,IAAQ,MAAA,CAAO,KAAK,GAAA,CAAI,IAAI,EAAE,MAAA,GAAS,CAAA;AAE3D,EAAA,uBACED,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,oDAAA;AAAA,QACA,eAAA,CAAgB,IAAI,KAAK;AAAA,OAC3B;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAA,IAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA,CAAG,wBAAA,EAA0B,OAAA,IAAW,gBAAgB,CAAA;AAAA,YACnE,OAAA,EAAS,MAAM,OAAA,IAAW,aAAA,CAAc,CAAC,UAAU,CAAA;AAAA,YAGnD,QAAA,EAAA;AAAA,8BAAAD,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACZ,QAAA,EAAA,OAAA,KACE,6BACCA,GAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAU,yBAAwB,CAAA,mBAEnDA,IAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,yBAAwB,CAAA,CAAA,EAE1D,CAAA;AAAA,8BAGAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,sBAAA,EAAwB,aAAA,CAAc,GAAA,CAAI,KAAK,CAAC,CAAA,EAChE,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,KAAK,CAAA,EACzB,CAAA;AAAA,8BAGAA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wDACb,QAAA,EAAA,eAAA,CAAgB,GAAA,CAAI,SAAS,CAAA,EAChC,CAAA;AAAA,8BAGAA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qFACb,QAAA,EAAA,gBAAA,CAAiB,GAAA,CAAI,QAAQ,CAAA,EAChC,CAAA;AAAA,8BAGAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0CAAA,EACb,cAAI,OAAA,EACP;AAAA;AAAA;AAAA,SACF;AAAA,QAGC,cAAc,OAAA,oBACbA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CACb,QAAA,kBAAAA,GAAAA,CAAC,SAAI,SAAA,EAAU,qEAAA,EACZ,eAAK,SAAA,CAAU,GAAA,CAAI,MAAM,IAAA,EAAM,CAAC,GACnC,CAAA,EACF;AAAA;AAAA;AAAA,GAEJ;AAEJ;AA8BO,SAAS,SAAA,CAAU;AAAA,EACxB,IAAA;AAAA,EACA,KAAA,GAAQ,MAAA;AAAA,EACR,SAAA;AAAA,EACA,gBAAA,GAAmB,IAAA;AAAA,EACnB,SAAA,GAAY,GAAA;AAAA,EACZ;AACF,CAAA,EAAmB;AACjB,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIE,SAAS,gBAAgB,CAAA;AAE/D,EAAA,MAAM,UAAA,GAAa,KAAK,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,KAAA,KAAU,OAAO,CAAA,CAAE,MAAA;AAC3D,EAAA,MAAM,SAAA,GAAY,KAAK,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,KAAA,KAAU,MAAM,CAAA,CAAE,MAAA;AAEzD,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,IAAK,CAAC,SAAA,EAAW;AACnC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACED,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,+DAAA;AAAA,QACA;AAAA,OACF;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAAA,IAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,cAAA,CAAe,CAAC,WAAW,CAAA;AAAA,YAC1C,SAAA,EAAU,uFAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,gCAAAD,GAAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,uBAAA,EAAwB,CAAA;AAAA,gCAChDA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAqC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,gCAC3DC,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAwB,QAAA,EAAA;AAAA,kBAAA,GAAA;AAAA,kBAAE,IAAA,CAAK,MAAA;AAAA,kBAAO;AAAA,iBAAA,EAAC,CAAA;AAAA,gBACtD,aAAa,CAAA,oBACZA,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,sEAAA,EACb,QAAA,EAAA;AAAA,kBAAA,UAAA;AAAA,kBAAW,QAAA;AAAA,kBAAO,UAAA,GAAa,IAAI,GAAA,GAAM;AAAA,iBAAA,EAC5C,CAAA;AAAA,gBAED,YAAY,CAAA,oBACXA,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,4EAAA,EACb,QAAA,EAAA;AAAA,kBAAA,SAAA;AAAA,kBAAU,UAAA;AAAA,kBAAS,SAAA,GAAY,IAAI,GAAA,GAAM;AAAA,iBAAA,EAC5C,CAAA;AAAA,gBAED,6BACCD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uCAAsC,QAAA,EAAA,YAAA,EAEtD;AAAA,eAAA,EAEJ,CAAA;AAAA,cACC,WAAA,mBACCA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,uBAAA,EAAwB,CAAA,mBAEpDA,GAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAU,uBAAA,EAAwB;AAAA;AAAA;AAAA,SAEvD;AAAA,QAGC,CAAC,+BACAA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,0CAAA;AAAA,YACV,KAAA,EAAO,EAAE,SAAA,EAAU;AAAA,YAElB,QAAA,EAAA,IAAA,CAAK,MAAA,KAAW,CAAA,mBACfA,GAAAA,CAAC,SAAI,SAAA,EAAU,6CAAA,EAA8C,QAAA,EAAA,aAAA,EAE7D,CAAA,GAEA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,EAAK,KAAA,qBACbA,GAAAA,CAAC,WAAA,EAAA,EAA8C,GAAA,EAAA,EAA7B,CAAA,EAAG,GAAA,CAAI,SAAS,CAAA,CAAA,EAAI,KAAK,CAAA,CAAc,CAC1D;AAAA;AAAA;AAEL;AAAA;AAAA,GAEJ;AAEJ;AClOA,SAAS,cAAA,CAAe,EAAE,MAAA,EAAQ,SAAA,GAAY,WAAU,EAAwB;AAC9E,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,WAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,eAAA,EAAA,EAAgB,WAAW,EAAA,CAAG,SAAA,EAAW,kBAAkB,CAAA,EAAG,CAAA;AAAA,IACxE,KAAK,aAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,UAAA,EAAA,EAAW,WAAW,EAAA,CAAG,SAAA,EAAW,8BAA8B,CAAA,EAAG,CAAA;AAAA,IAC/E,KAAK,SAAA;AAAA,IACL;AACE,MAAA,uBAAOA,GAAAA,CAAC,UAAA,EAAA,EAAW,WAAW,EAAA,CAAG,SAAA,EAAW,eAAe,CAAA,EAAG,CAAA;AAAA;AAEpE;AAYA,SAAS,aAAa,EAAE,IAAA,EAAM,KAAA,EAAO,OAAA,GAAU,OAAM,EAAsB;AACzE,EAAA,MAAM,cAAc,IAAA,CAAK,MAAA,KAAW,aAAA,GAAgB,IAAA,CAAK,aAAa,IAAA,CAAK,OAAA;AAE3E,EAAA,uBACEC,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,oDAAA;AAAA,QACA,UAAU,MAAA,GAAS,QAAA;AAAA,QACnB,IAAA,CAAK,WAAW,WAAA,IAAe,YAAA;AAAA,QAC/B,IAAA,CAAK,WAAW,aAAA,IAAiB;AAAA,OACnC;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,kBAAe,MAAA,EAAQ,IAAA,CAAK,QAAQ,SAAA,EAAW,OAAA,GAAU,uBAAuB,gBAAA,EAAkB,CAAA;AAAA,wBACnGC,IAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,sBAAA;AAAA,cACA,UAAU,SAAA,GAAY,SAAA;AAAA,cACtB,IAAA,CAAK,WAAW,WAAA,IAAe;AAAA,aACjC;AAAA,YAEC,QAAA,EAAA;AAAA,cAAA,CAAC,OAAA,oBAAWA,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,sBAAA,EAAwB,QAAA,EAAA;AAAA,gBAAA,KAAA,GAAQ,CAAA;AAAA,gBAAE;AAAA,eAAA,EAAC,CAAA;AAAA,cAC/D;AAAA;AAAA;AAAA;AACH;AAAA;AAAA,GACF;AAEJ;AAYA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,KAAA,EAAO,WAAU,EAAsB;AACxE,EAAA,MAAM,UAAA,GAAa,QAAQ,CAAA,GAAI,IAAA,CAAK,MAAO,SAAA,GAAY,KAAA,GAAS,GAAG,CAAA,GAAI,CAAA;AAEvE,EAAA,uBACEA,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA,EACrD,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uDAAA,EACb,QAAA,kBAAAA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,yEAAA;AAAA,QACV,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,UAAU,CAAA,CAAA,CAAA;AAAI;AAAA,KACnC,EACF,CAAA;AAAA,oBACAC,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4DAAA,EACb,QAAA,EAAA;AAAA,MAAA,SAAA;AAAA,MAAU,GAAA;AAAA,MAAE;AAAA,KAAA,EACf;AAAA,GAAA,EACF,CAAA;AAEJ;AAmCO,SAAS,SAAA,CAAU;AAAA,EACxB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,YAAA,GAAe,IAAA;AAAA,EACf;AACF,CAAA,EAAmB;AACjB,EAAA,MAAM,KAAA,GAAQK,QAAQ,MAAM;AAC1B,IAAA,OAAO;AAAA,MACL,OAAO,KAAA,CAAM,MAAA;AAAA,MACb,SAAA,EAAW,MAAM,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,MAAA,KAAW,WAAW,CAAA,CAAE,MAAA;AAAA,MACzD,UAAA,EAAY,MAAM,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,MAAA,KAAW,aAAa,CAAA,CAAE,MAAA;AAAA,MAC5D,OAAA,EAAS,MAAM,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,MAAA,KAAW,SAAS,CAAA,CAAE;AAAA,KACvD;AAAA,EACF,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACEL,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,8DAAA;AAAA,QACA;AAAA,OACF;AAAA,MAGE,QAAA,EAAA;AAAA,QAAA,CAAA,KAAA,IAAS,YAAA,qBACTA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,yBAAA,EAA2B,OAAA,GAAU,aAAA,GAAgB,WAAW,CAAA,EAChF,QAAA,EAAA;AAAA,UAAA,KAAA,oBACCD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,oCAAoC,OAAA,GAAU,SAAA,GAAY,SAAS,CAAA,EACnF,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,UAED,YAAA,oBACCA,GAAAA,CAAC,YAAA,EAAA,EAAa,WAAW,KAAA,CAAM,SAAA,EAAW,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO;AAAA,SAAA,EAElE,CAAA;AAAA,wBAIFA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,OAAA,GAAU,aAAA,GAAgB,WAAW,CAAA,EACrD,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,0BAChBA,GAAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YAEC,IAAA;AAAA,YACA,KAAA;AAAA,YACA;AAAA,WAAA;AAAA,UAHK,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA,SAKhC,CAAA,EACH,CAAA;AAAA,QAGC,CAAC,OAAA,IAAW,KAAA,CAAM,UAAA,GAAa,qBAC9BA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EACb,QAAA,kBAAAC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iDAAA,EACb,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,sBAAA,EAAuB,CAAA;AAAA,0BAC7CC,KAAC,MAAA,EAAA,EACE,QAAA,EAAA;AAAA,YAAA,KAAA,CAAM,UAAA;AAAA,YAAW,OAAA;AAAA,YAAM,KAAA,CAAM,UAAA,KAAe,CAAA,GAAI,GAAA,GAAM,EAAA;AAAA,YAAG;AAAA,WAAA,EAC5D;AAAA,SAAA,EACF,CAAA,EACF;AAAA;AAAA;AAAA,GAEJ;AAEJ;ACrJO,SAAS,YAAA,CAAa;AAAA,EAC3B,OAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA,GAAmB,IAAA;AAAA,EACnB,SAAA;AAAA,EACA,KAAA,GAAQ,uBAAA;AAAA,EACR,UAAA,GAAa;AACf,CAAA,EAAsB;AACpB,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIC,QAAAA,CAAS,CAAC,gBAAgB,CAAA;AAC1D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,EAAE,CAAA;AAC7C,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAS,EAAE,CAAA;AAEjD,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,IAAA,CAAK,OAAO,EAAE,MAAA,GAAS,CAAA;AAEjD,EAAA,MAAM,eAAA,GAAkBG,YAAY,MAAM;AACxC,IAAA,MAAM,GAAA,GAAM,UAAU,IAAA,EAAK;AAC3B,IAAA,MAAM,GAAA,GAAM,YAAY,IAAA,EAAK;AAC7B,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,QAAA,CAAS,EAAE,GAAG,OAAA,EAAS,CAAC,GAAG,GAAG,KAAK,CAAA;AACnC,MAAA,YAAA,CAAa,EAAE,CAAA;AACf,MAAA,cAAA,CAAe,EAAE,CAAA;AAAA,IACnB;AAAA,EACF,GAAG,CAAC,OAAA,EAAS,SAAA,EAAW,WAAA,EAAa,QAAQ,CAAC,CAAA;AAE9C,EAAA,MAAM,kBAAA,GAAqBA,WAAAA;AAAA,IACzB,CAAC,GAAA,KAAgB;AACf,MAAA,MAAM,UAAA,GAAa,EAAE,GAAG,OAAA,EAAQ;AAChC,MAAA,OAAO,WAAW,GAAG,CAAA;AACrB,MAAA,QAAA,CAAS,UAAU,CAAA;AAAA,IACrB,CAAA;AAAA,IACA,CAAC,SAAS,QAAQ;AAAA,GACpB;AAEA,EAAA,MAAM,gBAAA,GAAmBA,WAAAA;AAAA,IACvB,CAAC,CAAA,KAAuC;AACtC,MAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACrB,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,eAAA,EAAgB;AAAA,MAClB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,eAAe;AAAA,GAClB;AAEA,EAAA,uBACEJ,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,oBAAA,EAAsB,SAAS,CAAA,EAEhD,QAAA,EAAA;AAAA,oBAAAA,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,MAAM,WAAA,CAAY,CAAC,QAAQ,CAAA;AAAA,QACpC,SAAA,EAAU,qBAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAAD,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAM,4BAAA;AAAA,cACN,SAAA,EAAW,EAAA,CAAG,sBAAA,EAAwB,QAAA,IAAY,+BAA+B,CAAA;AAAA,cACjF,OAAA,EAAQ,WAAA;AAAA,cACR,IAAA,EAAK,cAAA;AAAA,cAEL,QAAA,kBAAAA,GAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,QAAA,EAAS,SAAA;AAAA,kBACT,CAAA,EAAE,oHAAA;AAAA,kBACF,QAAA,EAAS;AAAA;AAAA;AACX;AAAA,WACF;AAAA,0BACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sBAAsB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UAC3C,UAAA,IAAc,CAAC,QAAA,oBACdA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oBAAA,EAAsB,QAAA,EAAA,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,MAAA,EAAO;AAAA;AAAA;AAAA,KAEtE;AAAA,IAGC,QAAA,oBACCC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sBAAA,EAEZ,QAAA,EAAA;AAAA,MAAA,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,GAAG,CAAA,qBACrCA,IAAAA,CAAC,KAAA,EAAA,EAAc,WAAU,mBAAA,EACvB,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAoB,QAAA,EAAA,GAAA,EAAI,CAAA;AAAA,wBACxCA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAsB,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,wBACvCA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oBAAA,EAAsB,iBAAO,SAAA,EAAU,CAAA;AAAA,wBACvDA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,kBAAA,CAAmB,GAAG,CAAA;AAAA,YACrC,SAAA,EAAU,qBAAA;AAAA,YACV,KAAA,EAAM,iBAAA;AAAA,YAEN,QAAA,kBAAAA,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAM,4BAAA;AAAA,gBACN,SAAA,EAAU,SAAA;AAAA,gBACV,OAAA,EAAQ,WAAA;AAAA,gBACR,IAAA,EAAK,cAAA;AAAA,gBAEL,QAAA,kBAAAA,GAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,QAAA,EAAS,SAAA;AAAA,oBACT,CAAA,EAAE,oMAAA;AAAA,oBACF,QAAA,EAAS;AAAA;AAAA;AACX;AAAA;AACF;AAAA;AACF,OAAA,EAAA,EAtBQ,GAuBV,CACD,CAAA;AAAA,sBAGDC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,QAAA,EAAA;AAAA,wBAAAD,GAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,MAAA;AAAA,YACL,KAAA,EAAO,SAAA;AAAA,YACP,QAAA,EAAU,CAAC,CAAA,KACT,YAAA,CAAa,CAAA,CAAE,MAAA,CAAO,KAAA,CAAM,WAAA,EAAY,CAAE,OAAA,CAAQ,aAAA,EAAe,EAAE,CAAC,CAAA;AAAA,YAEtE,SAAA,EAAW,gBAAA;AAAA,YACX,WAAA,EAAY,KAAA;AAAA,YACZ,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAsB,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,wBACvCA,GAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,MAAA;AAAA,YACL,KAAA,EAAO,WAAA;AAAA,YACP,UAAU,CAAC,CAAA,KAAM,cAAA,CAAe,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YAC9C,SAAA,EAAW,gBAAA;AAAA,YACX,WAAA,EAAY,OAAA;AAAA,YACZ,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACAA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,eAAA;AAAA,YACT,QAAA,EAAU,CAAC,SAAA,CAAU,IAAA,EAAK;AAAA,YAC1B,SAAA,EAAU,yBAAA;AAAA,YACX,QAAA,EAAA;AAAA;AAAA;AAED,OAAA,EACF,CAAA;AAAA,MAEC,8BAAcA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uBAAuB,QAAA,EAAA,UAAA,EAAW;AAAA,KAAA,EAChE;AAAA,GAAA,EAEJ,CAAA;AAEJ;ACjIO,SAAS,iBAAA,CAAkB;AAAA,EAChC,SAAA;AAAA,EACA,SAAA,GAAY,IAAA;AAAA,EACZ,SAAS,EAAE,MAAA,EAAQ,UAAU,OAAA,EAAS,SAAA,EAAW,WAAW,OAAA,EAAQ;AAAA,EACpE,KAAA,GAAQ,CAAC,QAAA,EAAU,SAAA,EAAW,WAAW;AAC3C,CAAA,EAA2B;AACzB,EAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAQ,GAAI,cAAA,EAAe;AAE3C,EAAA,MAAM,cAAc,MAAA,CAAO,IAAA;AAC3B,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA;AAE9C,EAAA,MAAM,cAAA,GAAiB,YAAA,KAAiB,EAAA,GAAK,CAAA,GAAI,YAAA;AACjD,EAAA,MAAM,SAAA,GAAA,CAAa,cAAA,GAAiB,CAAA,IAAK,KAAA,CAAM,MAAA;AAC/C,EAAA,MAAM,QAAA,GAAW,MAAM,SAAS,CAAA;AAEhC,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,OAAA,CAAQ,QAAQ,CAAA;AAAA,EAClB,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,CAAC,IAAA,KAA0B;AACzC,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,QAAA;AACH,QAAA,uBACEA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,uBAAA;AAAA,YACV,OAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAK,MAAA;AAAA,YACL,MAAA,EAAO,cAAA;AAAA,YACP,WAAA,EAAY,KAAA;AAAA,YAEZ,QAAA,kBAAAA,GAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,aAAA,EAAc,OAAA;AAAA,gBACd,cAAA,EAAe,OAAA;AAAA,gBACf,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA,SACF;AAAA,MAEJ,KAAK,SAAA;AACH,QAAA,uBACEA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,uBAAA;AAAA,YACV,OAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAK,MAAA;AAAA,YACL,MAAA,EAAO,cAAA;AAAA,YACP,WAAA,EAAY,KAAA;AAAA,YAEZ,QAAA,kBAAAA,GAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,aAAA,EAAc,OAAA;AAAA,gBACd,cAAA,EAAe,OAAA;AAAA,gBACf,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA,SACF;AAAA,MAEJ,KAAK,WAAA;AACH,QAAA,uBACEA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,uBAAA;AAAA,YACV,OAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAK,MAAA;AAAA,YACL,MAAA,EAAO,cAAA;AAAA,YACP,WAAA,EAAY,KAAA;AAAA,YAEZ,QAAA,kBAAAA,GAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,aAAA,EAAc,OAAA;AAAA,gBACd,cAAA,EAAe,OAAA;AAAA,gBACf,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA,SACF;AAAA;AAEN,EACF,CAAA;AAEA,EAAA,MAAM,QAAA,GAAW,CAAC,IAAA,KAA0B;AAC1C,IAAA,OAAO,MAAA,CAAO,IAAI,CAAA,IAAK,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,GAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAAA,EACpE,CAAA;AAEA,EAAA,uBACEC,IAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,WAAA;AAAA,MACT,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA;AAAA,MAClD,KAAA,EAAO,aAAa,QAAQ,CAAA,KAAA,CAAA;AAAA,MAE3B,QAAA,EAAA;AAAA,QAAA,OAAA,CAAQ,WAAW,CAAA;AAAA,QACnB,SAAA,oBAAaD,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,wBAAA,EAA0B,QAAA,EAAA,QAAA,CAAS,WAAW,CAAA,EAAE;AAAA;AAAA;AAAA,GAChF;AAEJ;AC9GA,IAAM,aAAA,GAAgB;AAAA,EACpB,UAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA;AAoBO,SAAS,cAAA,CAAe;AAAA,EAC7B,KAAA,GAAQ,aAAA;AAAA,EACR,SAAA,GAAY,EAAA;AAAA,EACZ,gBAAA,GAAmB,GAAA;AAAA,EACnB,UAAA,GAAa,EAAA;AAAA,EACb,eAAA,GAAkB,GAAA;AAAA,EAClB,UAAA,GAAa,IAAA;AAAA,EACb,SAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIE,SAAS,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,CAAC,CAAA;AAC5C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,SAAS,IAAI,CAAA;AAC7C,EAAA,MAAM,UAAA,GAAaK,OAA8B,IAAI,CAAA;AAErD,EAAAC,UAAU,MAAM;AACd,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,SAAS,CAAA,IAAK,EAAA;AAExC,IAAA,IAAI,QAAA,EAAU;AAEZ,MAAA,IAAI,WAAA,CAAY,MAAA,GAAS,WAAA,CAAY,MAAA,EAAQ;AAC3C,QAAA,UAAA,CAAW,OAAA,GAAU,WAAW,MAAM;AACpC,UAAA,cAAA,CAAe,YAAY,KAAA,CAAM,CAAA,EAAG,WAAA,CAAY,MAAA,GAAS,CAAC,CAAC,CAAA;AAAA,QAC7D,GAAG,SAAS,CAAA;AAAA,MACd,CAAA,MAAO;AAEL,QAAA,UAAA,CAAW,OAAA,GAAU,WAAW,MAAM;AACpC,UAAA,WAAA,CAAY,KAAK,CAAA;AAAA,QACnB,GAAG,gBAAgB,CAAA;AAAA,MACrB;AAAA,IACF,CAAA,MAAO;AAEL,MAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,QAAA,UAAA,CAAW,OAAA,GAAU,WAAW,MAAM;AACpC,UAAA,cAAA,CAAe,WAAA,CAAY,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AAAA,QACzC,GAAG,UAAU,CAAA;AAAA,MACf,CAAA,MAAO;AAEL,QAAA,UAAA,CAAW,OAAA,GAAU,WAAW,MAAM;AACpC,UAAA,YAAA,CAAa,CAAC,IAAA,KAAA,CAAU,IAAA,GAAO,CAAA,IAAK,MAAM,MAAM,CAAA;AAChD,UAAA,WAAA,CAAY,IAAI,CAAA;AAAA,QAClB,GAAG,eAAe,CAAA;AAAA,MACpB;AAAA,IACF;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,YAAA,CAAa,WAAW,OAAO,CAAA;AAAA,MACjC;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,WAAA,EAAa,SAAA,EAAW,QAAA,EAAU,OAAO,SAAA,EAAW,gBAAA,EAAkB,UAAA,EAAY,eAAe,CAAC,CAAA;AAEtG,EAAA,uBACEP,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAW,EAAA,CAAG,0BAAA,EAA4B,SAAS,CAAA,EACvD,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,UAAM,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,IAClB,8BACCA,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,2CAAA;AAAA,UACA;AAAA;AACF;AAAA;AACF,GAAA,EAEJ,CAAA;AAEJ;AC5GA,IAAM,YAAA,GAAeS,cAA4C,MAAS,CAAA;AAE1E,IAAM,mBAAA,GAAsB,cAAA;AAiCrB,SAAS,aAAA,CAAc;AAAA,EAC5B,QAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA,GAAa,mBAAA;AAAA,EACb,qBAAA,GAAwB;AAC1B,CAAA,EAAuB;AACrB,EAAA,MAAM,CAAC,KAAA,EAAO,aAAa,CAAA,GAAIP,SAAgB,MAAM;AACnD,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,MAAA,MAAM,MAAA,GAAS,YAAA,CAAa,OAAA,CAAQ,UAAU,CAAA;AAC9C,MAAA,IAAI,MAAA,KAAW,MAAA,IAAU,MAAA,KAAW,OAAA,EAAS;AAC3C,QAAA,OAAO,MAAA;AAAA,MACT;AACA,MAAA,IAAI,CAAC,YAAA,IAAgB,MAAA,CAAO,UAAA,CAAW,8BAA8B,EAAE,OAAA,EAAS;AAC9E,QAAA,OAAO,MAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,YAAA,IAAgB,OAAA;AAAA,EACzB,CAAC,CAAA;AAED,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,KAAK,CAAA;AAE5C,EAAAM,UAAU,MAAM;AACd,IAAA,UAAA,CAAW,IAAI,CAAA;AAAA,EACjB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,MAAM,OAAO,QAAA,CAAS,eAAA;AACtB,IAAA,IAAI,UAAU,MAAA,EAAQ;AACpB,MAAA,IAAA,CAAK,SAAA,CAAU,IAAI,MAAM,CAAA;AAAA,IAC3B,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,SAAA,CAAU,OAAO,MAAM,CAAA;AAAA,IAC9B;AACA,IAAA,YAAA,CAAa,OAAA,CAAQ,YAAY,KAAK,CAAA;AAAA,EACxC,CAAA,EAAG,CAAC,KAAA,EAAO,OAAA,EAAS,UAAU,CAAC,CAAA;AAE/B,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,qBAAA,IAAyB,OAAO,MAAA,KAAW,WAAA,EAAa;AAE7D,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,UAAA,CAAW,8BAA8B,CAAA;AACnE,IAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAA2B;AAC/C,MAAA,MAAM,MAAA,GAAS,YAAA,CAAa,OAAA,CAAQ,UAAU,CAAA;AAC9C,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,aAAA,CAAc,CAAA,CAAE,OAAA,GAAU,MAAA,GAAS,OAAO,CAAA;AAAA,MAC5C;AAAA,IACF,CAAA;AACA,IAAA,UAAA,CAAW,gBAAA,CAAiB,UAAU,YAAY,CAAA;AAClD,IAAA,OAAO,MAAM,UAAA,CAAW,mBAAA,CAAoB,QAAA,EAAU,YAAY,CAAA;AAAA,EACpE,CAAA,EAAG,CAAC,UAAA,EAAY,qBAAqB,CAAC,CAAA;AAEtC,EAAA,MAAM,WAAA,GAAcH,YAAY,MAAM;AACpC,IAAA,aAAA,CAAc,CAAC,IAAA,KAAU,IAAA,KAAS,OAAA,GAAU,SAAS,OAAQ,CAAA;AAAA,EAC/D,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,QAAA,GAAWA,WAAAA,CAAY,CAAC,QAAA,KAAoB;AAChD,IAAA,aAAA,CAAc,QAAQ,CAAA;AAAA,EACxB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,uBACEL,GAAAA,CAAC,YAAA,CAAa,QAAA,EAAb,EAAsB,KAAA,EAAO,EAAE,KAAA,EAAO,YAAA,IAAgB,OAAA,EAAS,WAAA,EAAa,QAAA,IAC1E,QAAA,EACH,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEA,GAAAA,CAAC,YAAA,CAAa,QAAA,EAAb,EAAsB,KAAA,EAAO,EAAE,KAAA,EAAO,WAAA,EAAa,QAAA,EAAS,EAC1D,QAAA,EACH,CAAA;AAEJ;AAEO,SAAS,QAAA,GAA6B;AAC3C,EAAA,MAAM,OAAA,GAAUU,WAAW,YAAY,CAAA;AACvC,EAAA,IAAI,YAAY,MAAA,EAAW;AACzB,IAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,EAChE;AACA,EAAA,OAAO,OAAA;AACT;;;ACjGO,IAAM,MAAA,GAAS;AAAA;AAAA,EAEpB,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,SAAA;AAAA,IACT,EAAA,EAAI,SAAA;AAAA,IACJ,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK;AAAA,GACP;AAAA;AAAA,EAGA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,SAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,IAAA,EAAM,SAAA;AAAA,IACN,QAAA,EAAU;AAAA,GACZ;AAAA;AAAA,EAGA,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,SAAA;AAAA,IACT,SAAA,EAAW,0BAAA;AAAA,IACX,KAAA,EAAO,0BAAA;AAAA,IACP,QAAA,EAAU;AAAA,GACZ;AAAA;AAAA,EAGA,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,0BAAA;AAAA,IACT,KAAA,EAAO,0BAAA;AAAA,IACP,MAAA,EAAQ,wBAAA;AAAA,IACR,WAAA,EAAa;AAAA,GACf;AAAA;AAAA,EAGA,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,SAAA;AAAA,IACT,OAAA,EAAS,SAAA;AAAA,IACT,KAAA,EAAO,SAAA;AAAA,IACP,IAAA,EAAM;AAAA,GACR;AAAA;AAAA,EAGA,IAAA,EAAM;AAAA,IACJ,EAAA,EAAI,wBAAA;AAAA,IACJ,MAAA,EAAQ;AAAA,GACV;AAAA;AAAA,EAGA,SAAA,EAAW;AAAA,IACT,EAAA,EAAI,2BAAA;AAAA,IACJ,MAAA,EAAQ;AAAA;AAEZ;AAMO,IAAM,OAAA,GAAU;AAAA,EACrB,EAAA,EAAI,KAAA;AAAA,EACJ,EAAA,EAAI,KAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,KAAA,EAAO,MAAA;AAAA,EACP,KAAA,EAAO;AACT;AAMO,IAAM,YAAA,GAAe;AAAA,EAC1B,EAAA,EAAI,KAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,MAAA;AAAA,EACJ,KAAA,EAAO,MAAA;AAAA,EACP,IAAA,EAAM;AACR;AAMO,IAAM,OAAA,GAAU;AAAA,EACrB,EAAA,EAAI,8BAAA;AAAA,EACJ,EAAA,EAAI,8BAAA;AAAA,EACJ,EAAA,EAAI,gCAAA;AAAA,EACJ,EAAA,EAAI,gCAAA;AAAA,EACJ,IAAA,EAAM;AAAA,IACJ,EAAA,EAAI,iCAAA;AAAA,IACJ,EAAA,EAAI,iCAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAAA,EACA,KAAA,EAAO;AACT;AAMO,IAAM,UAAA,GAAa;AAAA,EACxB,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,8EAAA;AAAA,IACN,IAAA,EAAM;AAAA,GACR;AAAA,EACA,QAAA,EAAU;AAAA,IACR,EAAA,EAAI,MAAA;AAAA,IACJ,EAAA,EAAI,MAAA;AAAA,IACJ,IAAA,EAAM,MAAA;AAAA,IACN,EAAA,EAAI,MAAA;AAAA,IACJ,EAAA,EAAI,MAAA;AAAA,IACJ,KAAA,EAAO;AAAA,GACT;AAAA,EACA,UAAA,EAAY;AAAA,IACV,KAAA,EAAO,MAAA;AAAA,IACP,MAAA,EAAQ,KAAA;AAAA,IACR,OAAA,EAAS;AAAA;AAEb;AAMO,IAAM,SAAA,GAAY;AAAA,EACvB,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,EAAE,OAAA,EAAS,GAAA,EAAK,WAAW,kBAAA,EAAmB;AAAA,IACpD,EAAA,EAAI,EAAE,OAAA,EAAS,GAAA,EAAK,WAAW,eAAA;AAAgB,GACjD;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,EAAE,OAAA,EAAS,GAAA,EAAK,WAAW,kBAAA,EAAmB;AAAA,IACpD,EAAA,EAAI,EAAE,OAAA,EAAS,GAAA,EAAK,WAAW,eAAA;AAAgB,GACjD;AAAA,EACA,KAAA,EAAO;AAAA,IACL,SAAA,EAAW,EAAE,OAAA,EAAS,GAAA,EAAI;AAAA,IAC1B,WAAA,EAAa,EAAE,OAAA,EAAS,GAAA;AAAI,GAC9B;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,eAAA,EAAiB,EAAE,SAAA,EAAW,UAAA,EAAW;AAAA,IACzC,KAAA,EAAO,EAAE,SAAA,EAAW,UAAA;AAAW,GACjC;AAAA,EACA,KAAA,EAAO;AAAA,IACL,UAAA,EAAY,EAAE,OAAA,EAAS,GAAA,EAAI;AAAA,IAC3B,KAAA,EAAO,EAAE,OAAA,EAAS,KAAA;AAAM,GAC1B;AAAA,EACA,SAAA,EAAW;AAAA,IACT,UAAA,EAAY,EAAE,SAAA,EAAW,iCAAA,EAAkC;AAAA,IAC3D,KAAA,EAAO,EAAE,SAAA,EAAW,iCAAA;AAAkC;AAE1D;AAGO,IAAM,YAAA,GAAe;AAAA,EAC1B,OAAA,EAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAMT,MAAA,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAMR,KAAA,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAMP,MAAA,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAMR,KAAA,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAMP,SAAA,EAAW;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAMb;AAGO,IAAM,kBAAkB,MAAA,CAAO,MAAA,CAAO,YAAY,CAAA,CAAE,KAAK,IAAI;AAM7D,IAAM,WAAA,GAAc;AAAA,EACzB,IAAA,EAAM,gBAAA;AAAA,EACN,MAAA,EAAQ,gBAAA;AAAA,EACR,IAAA,EAAM,gBAAA;AAAA,EACN,MAAA,EAAQ;AACV;AAMO,IAAM,MAAA,GAAS;AAAA,EACpB,IAAA,EAAM,CAAA;AAAA,EACN,QAAA,EAAU,GAAA;AAAA,EACV,KAAA,EAAO,GAAA;AAAA,EACP,OAAA,EAAS,GAAA;AAAA,EACT,MAAA,EAAQ;AACV;AAMO,IAAM,MAAA,GAAS;AAAA,EACpB,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,OAAA;AAAA,IACP,MAAA,EAAQ,OAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,KAAA,EAAO;AAAA,IACL,SAAA,EAAW,MAAA;AAAA,IACX,SAAA,EAAW;AAAA,GACb;AAAA,EACA,OAAA,EAAS;AAAA,IACP,QAAA,EAAU,KAAA;AAAA,IACV,UAAA,EAAY;AAAA,GACd;AAAA,EACA,GAAA,EAAK;AAAA;AACP;AAMO,SAAS,oBAAA,CAAqB,SAAS,KAAA,EAA+B;AAC3E,EAAA,MAAM,OAA+B,EAAC;AAGtC,EAAA,IAAA,CAAK,CAAA,EAAA,EAAK,MAAM,CAAA,OAAA,CAAS,CAAA,GAAI,OAAO,MAAA,CAAO,OAAA;AAC3C,EAAA,MAAA,CAAO,OAAA,CAAQ,OAAO,MAAM,CAAA,CAAE,QAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AACtD,IAAA,IAAI,GAAA,KAAQ,WAAW,IAAA,CAAK,CAAA,EAAA,EAAK,MAAM,CAAA,QAAA,EAAW,GAAG,EAAE,CAAA,GAAI,KAAA;AAAA,EAC7D,CAAC,CAAA;AAED,EAAA,MAAA,CAAO,OAAA,CAAQ,OAAO,OAAO,CAAA,CAAE,QAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AACvD,IAAA,IAAA,CAAK,CAAA,EAAA,EAAK,MAAM,CAAA,SAAA,EAAY,GAAG,EAAE,CAAA,GAAI,KAAA;AAAA,EACvC,CAAC,CAAA;AAED,EAAA,MAAA,CAAO,OAAA,CAAQ,OAAO,IAAI,CAAA,CAAE,QAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AACpD,IAAA,IAAA,CAAK,CAAA,EAAA,EAAK,MAAM,CAAA,MAAA,EAAS,GAAG,EAAE,CAAA,GAAI,KAAA;AAAA,EACpC,CAAC,CAAA;AAED,EAAA,MAAA,CAAO,OAAA,CAAQ,OAAO,MAAM,CAAA,CAAE,QAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AACtD,IAAA,IAAI,GAAA,KAAQ,WAAW,IAAA,CAAK,CAAA,EAAA,EAAK,MAAM,CAAA,QAAA,EAAW,GAAG,EAAE,CAAA,GAAI,KAAA;AAAA,SACtD,IAAA,CAAK,CAAA,EAAA,EAAK,MAAM,CAAA,OAAA,CAAS,CAAA,GAAI,KAAA;AAAA,EACpC,CAAC,CAAA;AAED,EAAA,OAAO,IAAA;AACT;AAMO,IAAM,YAAA,GAAe;AAAA;AAAA,EAE1B,UAAA,EAAY;AAAA,IACV,eAAA,EAAiB,2BAAA;AAAA,IACjB,cAAA,EAAgB,YAAA;AAAA,IAChB,oBAAA,EAAsB,YAAA;AAAA,IACtB,MAAA,EAAQ,CAAA,UAAA,EAAa,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA;AAAA,GAC5C;AAAA;AAAA,EAGA,YAAA,EAAc;AAAA,IACZ,eAAA,EAAiB,OAAO,MAAA,CAAO,OAAA;AAAA,IAC/B,KAAA,EAAO,SAAA;AAAA,IACP,MAAA,EAAQ,CAAA,UAAA,EAAa,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA,CAAA;AAAA,IAC1C,SAAA,EAAW,QAAQ,IAAA,CAAK;AAAA,GAC1B;AAAA;AAAA,EAGA,WAAA,EAAa;AAAA,IACX,eAAA,EAAiB,aAAA;AAAA,IACjB,KAAA,EAAO,OAAO,IAAA,CAAK,SAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA;AAAA,EAGA,WAAA,EAAa;AAAA,IACX,eAAA,EAAiB,OAAO,IAAA,CAAK,EAAA;AAAA,IAC7B,MAAA,EAAQ,CAAA,UAAA,EAAa,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAA;AAAA,IACvC,cAAc,YAAA,CAAa;AAAA,GAC7B;AAAA;AAAA,EAGA,gBAAA,EAAkB;AAAA,IAChB,eAAA,EAAiB,OAAO,SAAA,CAAU,EAAA;AAAA,IAClC,MAAA,EAAQ,CAAA,UAAA,EAAa,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA,CAAA;AAAA,IAC5C,cAAc,YAAA,CAAa;AAAA;AAE/B;AC1QO,SAAS,eAAA,CAAgB;AAAA,EAC9B,gBAAA;AAAA,EACA,UAAA,GAAa;AACf,CAAA,EAAkD;AAChD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIR,QAAAA,CAA0B,EAAE,CAAA;AACtD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAS,KAAK,CAAA;AACtD,EAAA,MAAM,eAAA,GAAkBK,OAAO,KAAK,CAAA;AACpC,EAAA,MAAM,mBAAA,GAAsBA,OAAO,gBAAgB,CAAA;AAGnD,EAAAC,UAAU,MAAM;AACd,IAAA,mBAAA,CAAoB,OAAA,GAAU,gBAAA;AAAA,EAChC,CAAA,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAGrB,EAAA,MAAM,YAAA,GAAeH,YAAY,YAAY;AAC3C,IAAA,IAAI,eAAA,CAAgB,OAAA,IAAW,CAAC,UAAA,EAAY;AAE5C,IAAA,eAAA,CAAgB,OAAA,GAAU,IAAA;AAC1B,IAAA,eAAA,CAAgB,IAAI,CAAA;AAEpB,IAAA,OAAO,IAAA,EAAM;AAEX,MAAA,IAAI,WAAA;AACJ,MAAA,QAAA,CAAS,CAAC,IAAA,KAAS;AACjB,QAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAC9B,QAAA,WAAA,GAAc,KAAK,CAAC,CAAA;AACpB,QAAA,OAAO,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,MACrB,CAAC,CAAA;AAGD,MAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,CAAC,CAAC,CAAA;AAErD,MAAA,IAAI,CAAC,WAAA,EAAa;AAElB,MAAA,IAAI;AACF,QAAA,MAAM,mBAAA,CAAoB,QAAQ,WAAW,CAAA;AAAA,MAC/C,SAAS,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,KAAA,CAAM,oCAAoC,KAAK,CAAA;AAAA,MAEzD;AAAA,IACF;AAEA,IAAA,eAAA,CAAgB,OAAA,GAAU,KAAA;AAC1B,IAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,EACvB,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAGf,EAAAG,UAAU,MAAM;AACd,IAAA,IAAI,MAAM,MAAA,GAAS,CAAA,IAAK,CAAC,eAAA,CAAgB,WAAW,UAAA,EAAY;AAC9D,MAAA,YAAA,EAAa;AAAA,IACf;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,YAAA,EAAc,UAAU,CAAC,CAAA;AAGpC,EAAA,MAAM,OAAA,GAAUH,WAAAA,CAAY,CAAC,IAAA,EAAc,KAAA,KAA6B;AACtE,IAAA,MAAM,OAAA,GAAyB;AAAA,MAC7B,EAAA,EAAI,CAAA,MAAA,EAAS,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,MAC9D,IAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAA,EAAU,KAAK,GAAA;AAAI,KACrB;AAEA,IAAA,QAAA,CAAS,CAAC,IAAA,KAAS,CAAC,GAAG,IAAA,EAAM,OAAO,CAAC,CAAA;AAAA,EACvC,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,MAAA,GAASA,WAAAA,CAAY,CAAC,EAAA,KAAe;AACzC,IAAA,QAAA,CAAS,CAAC,SAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,EAAE,CAAC,CAAA;AAAA,EACpD,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,UAAA,GAAaA,YAAY,MAAM;AACnC,IAAA,QAAA,CAAS,EAAE,CAAA;AAAA,EACb,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,YAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAa,KAAA,CAAM;AAAA,GACrB;AACF;AC3GO,SAAS,gBAAA,CAAiB;AAAA,EAC/B;AACF,CAAA,GAA6B,EAAC,EAA2B;AACvD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIH,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,kBAAA,GAAqBK,OAA+B,IAAI,CAAA;AAC9D,EAAA,MAAM,YAAA,GAAeA,OAAsB,IAAI,CAAA;AAC/C,EAAA,MAAM,eAAA,GAAkBA,OAAO,YAAY,CAAA;AAG3C,EAAA,eAAA,CAAgB,OAAA,GAAU,YAAA;AAG1B,EAAA,MAAM,cAAA,GAAiBF,YAAY,MAAM;AAEvC,IAAA,kBAAA,CAAmB,OAAA,GAAU,IAAI,eAAA,EAAgB;AACjD,IAAA,UAAA,CAAW,IAAI,CAAA;AAAA,EACjB,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,YAAA,GAAeA,YAAY,MAAM;AACrC,IAAA,kBAAA,CAAmB,OAAA,GAAU,IAAA;AAC7B,IAAA,YAAA,CAAa,OAAA,GAAU,IAAA;AACvB,IAAA,UAAA,CAAW,KAAK,CAAA;AAAA,EAClB,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,YAAA,GAAeA,WAAAA,CAAY,CAAC,SAAA,KAA6B;AAC7D,IAAA,YAAA,CAAa,OAAA,GAAU,SAAA;AAAA,EACzB,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,IAAA,GAAOA,WAAAA,CAAY,OAAO,iBAAA,KAA+B;AAE7D,IAAA,IAAI,mBAAmB,OAAA,EAAS;AAC9B,MAAA,kBAAA,CAAmB,QAAQ,KAAA,EAAM;AAAA,IACnC;AAGA,IAAA,MAAM,SAAA,GAAY,qBAAqB,YAAA,CAAa,OAAA;AACpD,IAAA,IAAI,SAAA,IAAa,gBAAgB,OAAA,EAAS;AACxC,MAAA,IAAI;AACF,QAAA,MAAM,eAAA,CAAgB,QAAQ,SAAS,CAAA;AAAA,MACzC,SAAS,GAAA,EAAK;AAEZ,QAAA,OAAA,CAAQ,IAAA,CAAK,uBAAuB,GAAG,CAAA;AAAA,MACzC;AAAA,IACF;AAGA,IAAA,UAAA,CAAW,KAAK,CAAA;AAAA,EAClB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,MAAA,EAAQ,mBAAmB,OAAA,EAAS,MAAA;AAAA,IACpC,cAAA;AAAA,IACA,YAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACF;AClEO,SAASM,gBAAe,KAAA,EAAuB;AACpD,EAAA,IAAI,KAAA,GAAQ,IAAA,EAAM,OAAO,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA;AACjC,EAAA,IAAI,KAAA,GAAQ,OAAO,IAAA,EAAM,OAAO,IAAI,KAAA,GAAQ,IAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,CAAA;AAC5D,EAAA,OAAO,IAAI,KAAA,IAAS,IAAA,GAAO,IAAA,CAAA,EAAO,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,CAAA;AAC9C;AAKA,eAAe,iBAAiB,IAAA,EAA6B;AAC3D,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,MAAM,MAAA,GAAS,IAAI,UAAA,EAAW;AAC9B,IAAA,MAAA,CAAO,SAAS,MAAM;AACpB,MAAA,MAAM,SAAS,MAAA,CAAO,MAAA;AAEtB,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAClC,MAAA,OAAA,CAAQ,UAAU,EAAE,CAAA;AAAA,IACtB,CAAA;AACA,IAAA,MAAA,CAAO,OAAA,GAAU,MAAM,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA;AAC1C,IAAA,MAAA,CAAO,cAAc,IAAI,CAAA;AAAA,EAC3B,CAAC,CAAA;AACH;AA4CO,SAAS,aAAA,CAAc;AAAA,EAC5B,WAAA,GAAc,MAAM,IAAA,GAAO,IAAA;AAAA;AAAA,EAC3B,QAAA,GAAW,EAAA;AAAA,EACX;AACF,CAAA,GAA0B,EAAC,EAAwB;AACjD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIT,QAAAA,CAA2B,EAAE,CAAA;AACvD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,YAAA,GAAeK,OAAgC,IAAI,CAAA;AAGzD,EAAA,MAAM,QAAA,GAAWF,WAAAA;AAAA,IACf,OAAO,QAAA,KAA8B;AACnC,MAAA,IAAI,CAAC,QAAA,EAAU;AAEf,MAAA,MAAM,WAA6B,EAAC;AACpC,MAAA,MAAM,eAAe,KAAA,CAAM,MAAA;AAE3B,MAAA,KAAA,IACM,CAAA,GAAI,GACR,CAAA,GAAI,QAAA,CAAS,UAAU,YAAA,GAAe,QAAA,CAAS,MAAA,GAAS,QAAA,EACxD,CAAA,EAAA,EACA;AACA,QAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA;AAC5B,QAAA,IAAI,CAAC,IAAA,EAAM;AAGX,QAAA,IAAI,IAAA,CAAK,OAAO,WAAA,EAAa;AAC3B,UAAA,iBAAA;AAAA,YACE,IAAA,CAAK,IAAA;AAAA,YACL,CAAA,wBAAA,EAA2BM,eAAAA,CAAe,WAAW,CAAC,CAAA;AAAA,WACxD;AACA,UAAA;AAAA,QACF;AAEA,QAAA,IAAI;AACF,UAAA,MAAM,OAAA,GAAU,MAAM,gBAAA,CAAiB,IAAI,CAAA;AAC3C,UAAA,QAAA,CAAS,IAAA,CAAK;AAAA,YACZ,UAAU,IAAA,CAAK,IAAA;AAAA,YACf,OAAA;AAAA,YACA,QAAA,EAAU,KAAK,IAAA,IAAQ,0BAAA;AAAA,YACvB,MAAM,IAAA,CAAK;AAAA,WACZ,CAAA;AAAA,QACH,SAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,oBAAA,EAAuB,IAAA,CAAK,IAAI,KAAK,KAAK,CAAA;AACxD,UAAA,iBAAA,GAAoB,IAAA,CAAK,MAAM,qBAAqB,CAAA;AAAA,QACtD;AAAA,MACF;AAGA,MAAA,IACE,SAAS,MAAA,GAAS,QAAA,GAAW,gBAC7B,YAAA,GAAe,QAAA,CAAS,UAAU,QAAA,EAClC;AACA,QAAA,iBAAA,GAAoB,EAAA,EAAI,CAAA,QAAA,EAAW,QAAQ,CAAA,cAAA,CAAgB,CAAA;AAAA,MAC7D;AAEA,MAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,QAAA,QAAA,CAAS,CAAC,IAAA,KAAS,CAAC,GAAG,IAAA,EAAM,GAAG,QAAQ,CAAC,CAAA;AAAA,MAC3C;AAAA,IACF,CAAA;AAAA,IACA,CAAC,KAAA,CAAM,MAAA,EAAQ,QAAA,EAAU,aAAa,iBAAiB;AAAA,GACzD;AAGA,EAAA,MAAM,UAAA,GAAaN,WAAAA,CAAY,CAAC,KAAA,KAAkB;AAChD,IAAA,QAAA,CAAS,CAAC,SAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,KAAM,KAAK,CAAC,CAAA;AAAA,EACvD,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,UAAA,GAAaA,YAAY,MAAM;AACnC,IAAA,QAAA,CAAS,EAAE,CAAA;AAAA,EACb,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,cAAA,GAAiBA,WAAAA,CAAY,CAAC,CAAA,KAAiB;AACnD,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,aAAA,CAAc,IAAI,CAAA;AAAA,EACpB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,eAAA,GAAkBA,WAAAA,CAAY,CAAC,CAAA,KAAiB;AACpD,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,aAAA,CAAc,KAAK,CAAA;AAAA,EACrB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UAAA,GAAaA,WAAAA;AAAA,IACjB,CAAC,CAAA,KAAiB;AAChB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,aAAA,CAAc,KAAK,CAAA;AACnB,MAAA,QAAA,CAAS,CAAA,CAAE,aAAa,KAAK,CAAA;AAAA,IAC/B,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAGA,EAAA,MAAM,qBAAA,GAAwBA,WAAAA;AAAA,IAC5B,CAAC,CAAA,KAAqC;AACpC,MAAA,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAEvB,MAAA,IAAI,aAAa,OAAA,EAAS;AACxB,QAAA,YAAA,CAAa,QAAQ,KAAA,GAAQ,EAAA;AAAA,MAC/B;AAAA,IACF,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAGA,EAAA,MAAM,cAAA,GAAiBA,YAAY,MAAM;AACvC,IAAA,YAAA,CAAa,SAAS,KAAA,EAAM;AAAA,EAC9B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA,EAAY,MAAM,MAAA,GAAS,QAAA;AAAA,IAC3B,aAAA,EAAe;AAAA,MACb,UAAA,EAAY,cAAA;AAAA,MACZ,WAAA,EAAa,eAAA;AAAA,MACb,MAAA,EAAQ;AAAA,KACV;AAAA,IACA,qBAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF;AACF","file":"index.js","sourcesContent":["/**\n * @ash-cloud/ash-ui - Utilities\n *\n * Utility functions for normalizing and formatting tool calls\n * for display in agentic UIs.\n */\n\nimport type {\n ActionType,\n ToolResult,\n CommandRunResult,\n NormalizedToolCall,\n NormalizedEntry,\n ToolDisplayConfig,\n TodoItem,\n} from './types';\n\n// =============================================================================\n// Tool Name Formatting\n// =============================================================================\n\n/**\n * Format MCP tool names from mcp__server__tool to mcp:server:tool\n */\nexport function formatToolName(name: string): string {\n if (name.startsWith('mcp__')) {\n const parts = name.split('__');\n if (parts.length >= 3) {\n return `mcp:${parts[1]}:${parts.slice(2).join(':')}`;\n }\n }\n return name;\n}\n\n/**\n * Parse MCP tool name to extract server and tool names\n */\nexport function parseMcpToolName(name: string): { serverName: string; toolName: string } | null {\n if (name.startsWith('mcp__')) {\n const parts = name.split('__');\n if (parts.length >= 3 && parts[1] !== undefined) {\n return {\n serverName: parts[1],\n toolName: parts.slice(2).join('__'),\n };\n }\n }\n return null;\n}\n\n// =============================================================================\n// Action Type Mapping\n// =============================================================================\n\n/**\n * Map a tool name and input to a structured ActionType\n */\nexport function mapToolToActionType(toolName: string, input: unknown): ActionType {\n const inputObj = (input as Record<string, unknown>) || {};\n\n switch (toolName) {\n case 'Bash':\n return {\n action: 'command_run',\n command: (inputObj.command as string) || '',\n description: inputObj.description as string | undefined,\n };\n\n case 'Read':\n return {\n action: 'file_read',\n path: (inputObj.file_path as string) || '',\n offset: inputObj.offset as number | undefined,\n limit: inputObj.limit as number | undefined,\n };\n\n case 'Edit':\n return {\n action: 'file_edit',\n path: (inputObj.file_path as string) || '',\n oldString: inputObj.old_string as string | undefined,\n newString: inputObj.new_string as string | undefined,\n replaceAll: inputObj.replace_all as boolean | undefined,\n };\n\n case 'Write':\n return {\n action: 'file_write',\n path: (inputObj.file_path as string) || '',\n content: inputObj.content as string | undefined,\n };\n\n case 'Grep':\n return {\n action: 'search',\n pattern: (inputObj.pattern as string) || '',\n path: inputObj.path as string | undefined,\n glob: inputObj.glob as string | undefined,\n type: inputObj.type as string | undefined,\n };\n\n case 'Glob':\n return {\n action: 'glob',\n pattern: (inputObj.pattern as string) || '',\n path: inputObj.path as string | undefined,\n };\n\n case 'WebFetch':\n return {\n action: 'web_fetch',\n url: (inputObj.url as string) || '',\n prompt: inputObj.prompt as string | undefined,\n };\n\n case 'WebSearch':\n return {\n action: 'web_search',\n query: (inputObj.query as string) || '',\n };\n\n case 'TodoWrite': {\n const todos = (inputObj.todos as TodoItem[]) || [];\n const stats = {\n total: todos.length,\n completed: todos.filter((t) => t.status === 'completed').length,\n inProgress: todos.filter((t) => t.status === 'in_progress').length,\n pending: todos.filter((t) => t.status === 'pending').length,\n };\n return {\n action: 'todo_write',\n todos,\n stats,\n };\n }\n\n default: {\n // Check if it's an MCP tool\n const mcpParts = parseMcpToolName(toolName);\n if (mcpParts) {\n return {\n action: 'mcp_tool',\n serverName: mcpParts.serverName,\n toolName: mcpParts.toolName,\n arguments: input,\n };\n }\n\n // Generic tool\n return {\n action: 'generic_tool',\n toolName: formatToolName(toolName),\n arguments: input,\n };\n }\n }\n}\n\n// =============================================================================\n// Summary Generation\n// =============================================================================\n\n/**\n * Generate a human-readable summary for a tool call\n */\nexport function generateToolSummary(\n _toolName: string,\n _input: unknown,\n actionType: ActionType\n): string {\n switch (actionType.action) {\n case 'command_run': {\n const cmd = actionType.command;\n return cmd.length > 60 ? cmd.substring(0, 57) + '...' : cmd;\n }\n\n case 'file_read':\n return actionType.path;\n\n case 'file_edit':\n return actionType.path;\n\n case 'file_write':\n return actionType.path;\n\n case 'search':\n return `${actionType.pattern}${actionType.path ? ` in ${actionType.path}` : ''}`;\n\n case 'glob':\n return actionType.pattern;\n\n case 'web_fetch':\n return actionType.url;\n\n case 'web_search':\n return actionType.query;\n\n case 'mcp_tool':\n return `${actionType.serverName}:${actionType.toolName}`;\n\n case 'generic_tool':\n return actionType.toolName;\n\n case 'todo_write': {\n const { stats } = actionType;\n if (stats) {\n return `${stats.completed}/${stats.total} completed`;\n }\n return `${actionType.todos.length} tasks`;\n }\n\n default:\n return 'Unknown tool';\n }\n}\n\n// =============================================================================\n// Result Normalization\n// =============================================================================\n\n/**\n * Extract text content from various content formats\n */\nexport function extractTextContent(content: unknown): string {\n if (typeof content === 'string') return content;\n\n if (Array.isArray(content)) {\n return content\n .filter((item): item is { text: string } => typeof item?.text === 'string')\n .map((item) => item.text)\n .join('\\n');\n }\n\n if (content && typeof content === 'object' && 'text' in content) {\n return String((content as { text: unknown }).text);\n }\n\n return JSON.stringify(content, null, 2);\n}\n\n/**\n * Normalize tool result content to markdown or JSON format\n */\nexport function normalizeToolResult(content: unknown): ToolResult {\n if (typeof content === 'string') {\n try {\n const parsed = JSON.parse(content);\n return { type: 'json', value: parsed };\n } catch {\n return { type: 'markdown', value: content };\n }\n }\n\n if (Array.isArray(content)) {\n const texts = content\n .filter(\n (item): item is { type: 'text'; text: string } =>\n item?.type === 'text' && typeof item.text === 'string'\n )\n .map((item) => item.text);\n\n if (texts.length > 0) {\n const joined = texts.join('\\n\\n');\n try {\n return { type: 'json', value: JSON.parse(joined) };\n } catch {\n return { type: 'markdown', value: joined };\n }\n }\n }\n\n return { type: 'json', value: content };\n}\n\n/**\n * Parse command result from tool result content\n */\nexport function parseCommandResult(content: unknown): CommandRunResult {\n const output = extractTextContent(content);\n\n if (typeof content === 'string') {\n try {\n const parsed = JSON.parse(content);\n if (typeof parsed.exitCode === 'number') {\n return {\n exitCode: parsed.exitCode,\n output: parsed.output || output,\n success: parsed.exitCode === 0,\n };\n }\n } catch {\n // Not JSON, use raw output\n }\n }\n\n return {\n output,\n success: true,\n };\n}\n\n// =============================================================================\n// Tool Call Creation\n// =============================================================================\n\nexport interface ToolUseInput {\n id: string;\n name: string;\n input: unknown;\n}\n\n/**\n * Create a NormalizedToolCall from a tool_use content block\n */\nexport function createToolCall(toolUse: ToolUseInput): NormalizedToolCall {\n const actionType = mapToolToActionType(toolUse.name, toolUse.input);\n const summary = generateToolSummary(toolUse.name, toolUse.input, actionType);\n\n return {\n id: toolUse.id,\n toolName: toolUse.name,\n actionType,\n status: 'pending',\n summary,\n startedAt: new Date().toISOString(),\n };\n}\n\n/**\n * Update a NormalizedToolCall with its result\n */\nexport function updateToolCallWithResult(\n toolCall: NormalizedToolCall,\n content: unknown,\n isError?: boolean\n): NormalizedToolCall {\n const updatedToolCall = { ...toolCall };\n const actionType = { ...toolCall.actionType };\n\n updatedToolCall.status = isError ? 'failed' : 'success';\n updatedToolCall.completedAt = new Date().toISOString();\n updatedToolCall.isError = isError;\n\n if (actionType.action === 'command_run') {\n const result = parseCommandResult(content);\n (actionType as typeof actionType).result = result;\n if (result.exitCode !== undefined && result.exitCode !== 0) {\n updatedToolCall.status = 'failed';\n updatedToolCall.isError = true;\n }\n } else if (actionType.action === 'mcp_tool' || actionType.action === 'generic_tool') {\n (actionType as typeof actionType).result = normalizeToolResult(content);\n }\n\n updatedToolCall.actionType = actionType;\n return updatedToolCall;\n}\n\n// =============================================================================\n// Display Helpers\n// =============================================================================\n\n/**\n * Get display icon name for an action type\n */\nexport function getActionIcon(actionType: ActionType): string {\n switch (actionType.action) {\n case 'command_run':\n return 'terminal';\n case 'file_read':\n return 'file-text';\n case 'file_edit':\n return 'edit';\n case 'file_write':\n return 'file-plus';\n case 'search':\n return 'search';\n case 'glob':\n return 'folder-search';\n case 'web_fetch':\n return 'globe';\n case 'web_search':\n return 'search';\n case 'mcp_tool':\n return 'plug';\n case 'generic_tool':\n return 'tool';\n case 'todo_write':\n return 'list-checks';\n default:\n return 'tool';\n }\n}\n\n/**\n * Get display label for an action type\n */\nexport function getActionLabel(actionType: ActionType): string {\n switch (actionType.action) {\n case 'command_run':\n return 'Command';\n case 'file_read':\n return 'Read';\n case 'file_edit':\n return 'Edit';\n case 'file_write':\n return 'Write';\n case 'search':\n return 'Search';\n case 'glob':\n return 'Glob';\n case 'web_fetch':\n return 'Fetch';\n case 'web_search':\n return 'Search';\n case 'mcp_tool':\n return 'MCP';\n case 'generic_tool':\n return 'Tool';\n case 'todo_write':\n return 'Tasks';\n default:\n return 'Tool';\n }\n}\n\n// =============================================================================\n// Formatting Helpers\n// =============================================================================\n\n/**\n * Format a file size in bytes to a human-readable string\n */\nexport function formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\n/**\n * Format a timestamp to a locale time string\n */\nexport function formatTimestamp(timestamp: string): string {\n try {\n const date = new Date(timestamp);\n return date.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false,\n });\n } catch {\n return timestamp;\n }\n}\n\n/**\n * Truncate a string with ellipsis\n */\nexport function truncate(str: string, maxLength: number): string {\n if (str.length <= maxLength) return str;\n return str.substring(0, maxLength - 3) + '...';\n}\n\n/**\n * Join class names, filtering out falsy values\n */\nexport function cn(...classes: (string | undefined | null | false)[]): string {\n return classes.filter(Boolean).join(' ');\n}\n\n// =============================================================================\n// Entry Grouping for Compact Mode\n// =============================================================================\n\n/**\n * A grouped entry that contains either a single entry or a group of consecutive tool calls\n */\nexport type GroupedEntry =\n | { type: 'single'; entry: NormalizedEntry }\n | { type: 'tool_group'; entries: NormalizedEntry[]; id: string };\n\n/**\n * Group consecutive tool call entries together based on display config.\n *\n * This is used in compact mode to merge consecutive tool calls into\n * a single ToolExecutionGroup, while keeping text content separate.\n *\n * @param entries - Array of normalized entries\n * @param config - Display configuration (uses breakEveryNToolCalls)\n * @returns Array of grouped entries\n */\nexport function groupEntriesForCompactMode(\n entries: NormalizedEntry[],\n config: ToolDisplayConfig\n): GroupedEntry[] {\n const result: GroupedEntry[] = [];\n let currentToolGroup: NormalizedEntry[] = [];\n let toolGroupCounter = 0;\n\n const flushToolGroup = () => {\n if (currentToolGroup.length > 0) {\n result.push({\n type: 'tool_group',\n entries: [...currentToolGroup],\n id: `tool-group-${toolGroupCounter++}`,\n });\n currentToolGroup = [];\n }\n };\n\n for (const entry of entries) {\n if (entry.entryType.type === 'tool_call') {\n currentToolGroup.push(entry);\n\n // Check if we should break the group\n if (\n config.breakEveryNToolCalls &&\n config.breakEveryNToolCalls > 0 &&\n currentToolGroup.length >= config.breakEveryNToolCalls\n ) {\n flushToolGroup();\n }\n } else {\n // Non-tool-call entry - flush any pending tool group\n flushToolGroup();\n result.push({ type: 'single', entry });\n }\n }\n\n // Flush any remaining tool group\n flushToolGroup();\n\n return result;\n}\n\n/**\n * Extract tool calls from a group of entries\n */\nexport function extractToolCallsFromGroup(entries: NormalizedEntry[]): NormalizedToolCall[] {\n return entries\n .filter((e): e is NormalizedEntry & { entryType: { type: 'tool_call'; toolCall: NormalizedToolCall } } =>\n e.entryType.type === 'tool_call'\n )\n .map((e) => e.entryType.toolCall);\n}\n\n// =============================================================================\n// Option Parsing\n// =============================================================================\n\n/**\n * A parsed option from assistant message content\n */\nexport interface ParsedOption {\n /** Option identifier (e.g., \"1\", \"2\", \"A\", \"B\") */\n id: string;\n /** Option title/label */\n label: string;\n /** Optional description text */\n description?: string;\n}\n\n/**\n * Result of parsing options from content\n */\nexport interface ParsedOptionsResult {\n /** Text before the options */\n preamble: string;\n /** Parsed options */\n options: ParsedOption[];\n}\n\n/**\n * Parse options from assistant message content.\n * Detects patterns like:\n * - \"Option 1: Title\" / \"Option 2: Title\"\n * - \"**Option 1:** Title\" (bold markdown)\n * - Numbered lists with descriptions\n *\n * @returns ParsedOptionsResult if options found, null otherwise\n */\nexport function parseOptionsFromContent(content: string): ParsedOptionsResult | null {\n // Pattern 1: \"Option N:\" format (with or without bold markdown)\n // Matches: \"Option 1:\", \"**Option 1:**\", \"Option 1 -\", etc.\n const optionPattern = /(?:\\*\\*)?Option\\s+(\\d+)(?:\\*\\*)?[:\\-]\\s*([^\\n]+)(?:\\n((?:(?!\\n(?:\\*\\*)?Option\\s+\\d).)*?))?/gi;\n\n const options: ParsedOption[] = [];\n let firstMatchStart = -1;\n let match: RegExpExecArray | null;\n\n // Reset regex\n optionPattern.lastIndex = 0;\n\n while ((match = optionPattern.exec(content)) !== null) {\n if (firstMatchStart === -1) {\n firstMatchStart = match.index;\n }\n\n const id = match[1] ?? '';\n const labelRaw = match[2];\n const label = labelRaw ? labelRaw.trim() : '';\n // Description is everything after the label until the next option\n const descriptionRaw = match[3];\n\n // Clean up description - remove leading/trailing whitespace and normalize\n let description: string | undefined;\n if (descriptionRaw) {\n const cleaned = descriptionRaw\n .split('\\n')\n .map(line => line.trim())\n .filter(line => line.length > 0)\n .join(' ');\n if (cleaned) {\n description = cleaned;\n }\n }\n\n options.push({ id, label, description });\n }\n\n // Need at least 2 options to be considered a valid options list\n if (options.length >= 2) {\n const preamble = firstMatchStart > 0\n ? content.substring(0, firstMatchStart).trim()\n : '';\n\n return { preamble, options };\n }\n\n // Pattern 2: Simple numbered list at end of message\n // Look for \"What would you like to do?\" or similar followed by numbered items\n const questionPattern = /^(.*?(?:what would you like to do\\??|choose an option|select.*?:|here are your options.*?:))\\s*\\n+((?:\\d+\\.\\s+.+\\n?)+)/ims;\n const questionMatch = content.match(questionPattern);\n\n if (questionMatch && questionMatch[1] && questionMatch[2]) {\n const preamble = questionMatch[1].trim();\n const listSection = questionMatch[2];\n\n // Parse numbered list items\n const listPattern = /(\\d+)\\.\\s+([^\\n]+)/g;\n let listMatch: RegExpExecArray | null;\n\n while ((listMatch = listPattern.exec(listSection)) !== null) {\n const listId = listMatch[1] ?? '';\n const listLabelRaw = listMatch[2];\n const listLabel = listLabelRaw ? listLabelRaw.trim() : '';\n options.push({\n id: listId,\n label: listLabel,\n });\n }\n\n if (options.length >= 2) {\n return { preamble, options };\n }\n }\n\n return null;\n}\n","/**\n * @ash-cloud/ash-ui - Icon Components\n *\n * Inline SVG icons for minimal dependencies. These icons follow\n * the Feather Icons style:\n * - 24x24 viewBox\n * - 2px stroke width\n * - No fill (stroke-based)\n */\n\n// =============================================================================\n// Icon Props Type\n// =============================================================================\n\nexport interface IconProps {\n className?: string;\n}\n\n// =============================================================================\n// Navigation & UI Icons\n// =============================================================================\n\nexport function SunIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"5\" />\n <line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"3\" />\n <line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\" />\n <line x1=\"4.22\" y1=\"4.22\" x2=\"5.64\" y2=\"5.64\" />\n <line x1=\"18.36\" y1=\"18.36\" x2=\"19.78\" y2=\"19.78\" />\n <line x1=\"1\" y1=\"12\" x2=\"3\" y2=\"12\" />\n <line x1=\"21\" y1=\"12\" x2=\"23\" y2=\"12\" />\n <line x1=\"4.22\" y1=\"19.78\" x2=\"5.64\" y2=\"18.36\" />\n <line x1=\"18.36\" y1=\"5.64\" x2=\"19.78\" y2=\"4.22\" />\n </svg>\n );\n}\n\nexport function MoonIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\" />\n </svg>\n );\n}\n\nexport function ChevronDownIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n );\n}\n\nexport function ChevronRightIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n );\n}\n\nexport function ChevronLeftIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n );\n}\n\nexport function ChevronUpIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"18 15 12 9 6 15\" />\n </svg>\n );\n}\n\n// =============================================================================\n// Tool & Action Icons\n// =============================================================================\n\nexport function TerminalIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"4 17 10 11 4 5\" />\n <line x1=\"12\" y1=\"19\" x2=\"20\" y2=\"19\" />\n </svg>\n );\n}\n\nexport function FileIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n </svg>\n );\n}\n\nexport function EditIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n <path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\" />\n </svg>\n );\n}\n\nexport function FilePlusIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"12\" y1=\"18\" x2=\"12\" y2=\"12\" />\n <line x1=\"9\" y1=\"15\" x2=\"15\" y2=\"15\" />\n </svg>\n );\n}\n\nexport function SearchIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </svg>\n );\n}\n\nexport function GlobeIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\" />\n <path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\" />\n </svg>\n );\n}\n\nexport function PlugIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M12 2v6\" />\n <path d=\"M6 6v4a6 6 0 0 0 12 0V6\" />\n <path d=\"M12 16v6\" />\n </svg>\n );\n}\n\nexport function ToolIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z\" />\n </svg>\n );\n}\n\nexport function FolderSearchIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\" />\n <circle cx=\"11\" cy=\"13\" r=\"3\" />\n <line x1=\"15\" y1=\"16\" x2=\"17\" y2=\"18\" />\n </svg>\n );\n}\n\nexport function CodeIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"16 18 22 12 16 6\" />\n <polyline points=\"8 6 2 12 8 18\" />\n </svg>\n );\n}\n\nexport function CopyIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n );\n}\n\nexport function CheckIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\nexport function XIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n );\n}\n\nexport function LoaderIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"6\" />\n <line x1=\"12\" y1=\"18\" x2=\"12\" y2=\"22\" />\n <line x1=\"4.93\" y1=\"4.93\" x2=\"7.76\" y2=\"7.76\" />\n <line x1=\"16.24\" y1=\"16.24\" x2=\"19.07\" y2=\"19.07\" />\n <line x1=\"2\" y1=\"12\" x2=\"6\" y2=\"12\" />\n <line x1=\"18\" y1=\"12\" x2=\"22\" y2=\"12\" />\n <line x1=\"4.93\" y1=\"19.07\" x2=\"7.76\" y2=\"16.24\" />\n <line x1=\"16.24\" y1=\"7.76\" x2=\"19.07\" y2=\"4.93\" />\n </svg>\n );\n}\n\n// =============================================================================\n// Status & Alert Icons\n// =============================================================================\n\nexport function InfoIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n );\n}\n\nexport function AlertTriangleIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n );\n}\n\nexport function AlertCircleIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n );\n}\n\nexport function BugIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect x=\"8\" y=\"6\" width=\"8\" height=\"14\" rx=\"4\" />\n <path d=\"M3 10h2\" />\n <path d=\"M19 10h2\" />\n <path d=\"M3 14h2\" />\n <path d=\"M19 14h2\" />\n <path d=\"M9 2h6\" />\n <path d=\"M12 2v4\" />\n </svg>\n );\n}\n\nexport function CheckCircleIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M9 12l2 2 4-4\" />\n </svg>\n );\n}\n\nexport function XCircleIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </svg>\n );\n}\n\n// =============================================================================\n// Communication & Misc Icons\n// =============================================================================\n\nexport function SendIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\" />\n <polygon points=\"22 2 15 22 11 13 2 9 22 2\" />\n </svg>\n );\n}\n\nexport function PaperclipIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48\" />\n </svg>\n );\n}\n\nexport function StopCircleIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <rect x=\"9\" y=\"9\" width=\"6\" height=\"6\" />\n </svg>\n );\n}\n\nexport function MessageSquareIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\" />\n </svg>\n );\n}\n\nexport function SparklesIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M12 3l1.5 4.5L18 9l-4.5 1.5L12 15l-1.5-4.5L6 9l4.5-1.5L12 3z\" />\n <path d=\"M5 19l.5 1.5L7 21l-1.5.5L5 23l-.5-1.5L3 21l1.5-.5L5 19z\" />\n <path d=\"M19 11l.5 1.5L21 13l-1.5.5L19 15l-.5-1.5L17 13l1.5-.5L19 11z\" />\n </svg>\n );\n}\n\nexport function BrainIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M9.5 2A2.5 2.5 0 0 1 12 4.5v15a2.5 2.5 0 0 1-4.96.44 2.5 2.5 0 0 1-2.96-3.08 3 3 0 0 1-.34-5.58 2.5 2.5 0 0 1 1.32-4.24 2.5 2.5 0 0 1 4.44-1.54\" />\n <path d=\"M14.5 2A2.5 2.5 0 0 0 12 4.5v15a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.96-3.08 3 3 0 0 0 .34-5.58 2.5 2.5 0 0 0-1.32-4.24 2.5 2.5 0 0 0-4.44-1.54\" />\n </svg>\n );\n}\n\nexport function BotIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M12 8V4H8\" />\n <rect x=\"5\" y=\"8\" width=\"14\" height=\"12\" rx=\"2\" />\n <path d=\"M2 14h2\" />\n <path d=\"M20 14h2\" />\n <path d=\"M9 13v2\" />\n <path d=\"M15 13v2\" />\n </svg>\n );\n}\n\nexport function UserIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" />\n <circle cx=\"12\" cy=\"7\" r=\"4\" />\n </svg>\n );\n}\n\n// =============================================================================\n// Todo & Task Icons\n// =============================================================================\n\nexport function CircleIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n </svg>\n );\n}\n\nexport function ListChecksIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M10 6h11\" />\n <path d=\"M10 12h11\" />\n <path d=\"M10 18h11\" />\n <path d=\"M3 6l2 2 4-4\" />\n <path d=\"M3 12l2 2 4-4\" />\n <path d=\"M3 18l2 2 4-4\" />\n </svg>\n );\n}\n\nexport function ClipboardListIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect x=\"8\" y=\"2\" width=\"8\" height=\"4\" rx=\"1\" ry=\"1\" />\n <path d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\" />\n <path d=\"M12 11h4\" />\n <path d=\"M12 16h4\" />\n <path d=\"M8 11h.01\" />\n <path d=\"M8 16h.01\" />\n </svg>\n );\n}\n\n// =============================================================================\n// Spinner & Loading Icons\n// =============================================================================\n\nexport function SpinnerIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n );\n}\n\nexport function ErrorIcon({ className }: IconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </svg>\n );\n}\n","import type { ToolStatus } from '../types';\nimport { cn } from '../utils';\n\nexport interface StatusIndicatorProps {\n status: ToolStatus;\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\n/**\n * StatusIndicator - Visual indicator for tool execution status\n *\n * Uses the glassmorphism theme with animated states:\n * - pending: Yellow with pulse animation\n * - success: Accent color (lime green)\n * - failed: Red\n *\n * @example\n * ```tsx\n * <StatusIndicator status=\"pending\" />\n * <StatusIndicator status=\"success\" size=\"lg\" />\n * <StatusIndicator status=\"failed\" />\n * ```\n */\nexport function StatusIndicator({ status, size = 'sm', className }: StatusIndicatorProps) {\n const sizeClasses = {\n sm: 'w-2 h-2',\n md: 'w-3 h-3',\n lg: 'w-4 h-4',\n };\n\n const statusClasses = {\n pending: 'ash-status-pending',\n success: 'ash-status-success',\n failed: 'ash-status-failed',\n };\n\n return (\n <div\n className={cn(\n 'rounded-full flex-shrink-0',\n sizeClasses[size],\n statusClasses[status],\n className\n )}\n />\n );\n}\n\nexport default StatusIndicator;\n","import type { ActionType } from '../types';\nimport {\n TerminalIcon,\n FileIcon,\n EditIcon,\n FilePlusIcon,\n SearchIcon,\n GlobeIcon,\n PlugIcon,\n ToolIcon,\n FolderSearchIcon,\n ListChecksIcon,\n} from '../icons';\n\nexport interface ActionIconProps {\n actionType: ActionType;\n className?: string;\n}\n\n/**\n * ActionIcon - Display the appropriate icon for a tool action type\n *\n * @example\n * ```tsx\n * <ActionIcon actionType={{ action: 'command_run', command: 'ls' }} />\n * <ActionIcon actionType={{ action: 'file_read', path: '/file.txt' }} className=\"w-5 h-5\" />\n * ```\n */\nexport function ActionIcon({ actionType, className = 'w-4 h-4' }: ActionIconProps) {\n switch (actionType.action) {\n case 'command_run':\n return <TerminalIcon className={className} />;\n case 'file_read':\n return <FileIcon className={className} />;\n case 'file_edit':\n return <EditIcon className={className} />;\n case 'file_write':\n return <FilePlusIcon className={className} />;\n case 'search':\n return <SearchIcon className={className} />;\n case 'glob':\n return <FolderSearchIcon className={className} />;\n case 'web_fetch':\n return <GlobeIcon className={className} />;\n case 'web_search':\n return <SearchIcon className={className} />;\n case 'mcp_tool':\n return <PlugIcon className={className} />;\n case 'todo_write':\n return <ListChecksIcon className={className} />;\n case 'generic_tool':\n default:\n return <ToolIcon className={className} />;\n }\n}\n\nexport default ActionIcon;\n","import { useState } from 'react';\nimport { cn } from '../utils';\n\nexport interface CodeBlockProps {\n children: string;\n maxHeight?: number;\n language?: string;\n showLineNumbers?: boolean;\n className?: string;\n}\n\n/**\n * CodeBlock - Display code with syntax-aware styling and expand/collapse\n *\n * Uses glassmorphism dark theme styling with accent-colored expand button.\n *\n * @example\n * ```tsx\n * <CodeBlock>{`const x = 1;`}</CodeBlock>\n * <CodeBlock maxHeight={200}>{longCode}</CodeBlock>\n * <CodeBlock language=\"typescript\" showLineNumbers>{code}</CodeBlock>\n * ```\n */\nexport function CodeBlock({\n children,\n maxHeight = 200,\n language,\n showLineNumbers = false,\n className,\n}: CodeBlockProps) {\n const [expanded, setExpanded] = useState(false);\n const lines = children.split('\\n');\n const isLong = lines.length > 10 || children.length > 500;\n\n return (\n <div className={cn('relative', className)}>\n <pre\n className={cn(\n 'ash-tool-code-block text-xs font-mono text-white/90 p-3 rounded-xl overflow-x-auto whitespace-pre-wrap break-words',\n !expanded && isLong && 'overflow-y-hidden'\n )}\n style={!expanded && isLong ? { maxHeight } : undefined}\n data-language={language}\n >\n {showLineNumbers ? (\n <code>\n {lines.map((line, i) => (\n <span key={i} className=\"block\">\n <span className=\"inline-block w-8 text-white/30 select-none text-right pr-2\">\n {i + 1}\n </span>\n <span className=\"text-white/80\">{line}</span>\n </span>\n ))}\n </code>\n ) : (\n <code className=\"text-white/80\">{children}</code>\n )}\n </pre>\n {isLong && !expanded && (\n <div className=\"absolute bottom-0 left-0 right-0 h-12 ash-truncate-fade flex items-end justify-center pb-2\">\n <button\n onClick={() => setExpanded(true)}\n className=\"text-xs text-[var(--ash-accent)] hover:text-[var(--ash-accent-300)] font-medium transition-colors\"\n >\n Show more\n </button>\n </div>\n )}\n {isLong && expanded && (\n <button\n onClick={() => setExpanded(false)}\n className=\"text-xs text-[var(--ash-accent)] hover:text-[var(--ash-accent-300)] font-medium mt-2 transition-colors\"\n >\n Show less\n </button>\n )}\n </div>\n );\n}\n\nexport default CodeBlock;\n","import { CodeBlock } from './CodeBlock';\n\nexport interface JsonDisplayProps {\n value: unknown;\n maxHeight?: number;\n className?: string;\n}\n\n/**\n * JsonDisplay - Display JSON data in a formatted code block\n *\n * @example\n * ```tsx\n * <JsonDisplay value={{ name: 'test', count: 42 }} />\n * <JsonDisplay value={data} maxHeight={300} />\n * ```\n */\nexport function JsonDisplay({ value, maxHeight, className }: JsonDisplayProps) {\n const formatted = JSON.stringify(value, null, 2);\n return (\n <CodeBlock maxHeight={maxHeight} className={className}>\n {formatted}\n </CodeBlock>\n );\n}\n\nexport default JsonDisplay;\n","import { useState } from 'react';\nimport type {\n NormalizedToolCall,\n ActionType,\n CommandRunAction,\n FileReadAction,\n FileEditAction,\n FileWriteAction,\n SearchAction,\n GlobAction,\n WebFetchAction,\n WebSearchAction,\n McpToolAction,\n GenericToolAction,\n TodoWriteAction,\n} from '../types';\nimport { cn, getActionLabel } from '../utils';\nimport { ChevronDownIcon, CheckIcon, CheckCircleIcon, CircleIcon, LoaderIcon } from '../icons';\nimport { StatusIndicator } from './StatusIndicator';\nimport { ActionIcon } from './ActionIcon';\nimport { CodeBlock } from './CodeBlock';\nimport { JsonDisplay } from './JsonDisplay';\n\n// =============================================================================\n// Section Components\n// =============================================================================\n\nfunction SectionHeader({ children }: { children: React.ReactNode }) {\n return (\n <div className=\"ash-tool-section-header\">\n {children}\n </div>\n );\n}\n\nfunction SectionContent({ children }: { children: React.ReactNode }) {\n return <div className=\"px-3 py-2\">{children}</div>;\n}\n\n// =============================================================================\n// Tool Details Components\n// =============================================================================\n\nfunction CommandRunDetails({ action }: { action: CommandRunAction }) {\n return (\n <>\n {action.command && (\n <>\n <SectionHeader>COMMAND</SectionHeader>\n <SectionContent>\n <CodeBlock>{action.command}</CodeBlock>\n </SectionContent>\n </>\n )}\n {action.result?.output && (\n <>\n <SectionHeader>OUTPUT</SectionHeader>\n <SectionContent>\n <CodeBlock maxHeight={300}>{action.result.output}</CodeBlock>\n {action.result.exitCode !== undefined && action.result.exitCode !== 0 && (\n <div className=\"mt-2 text-xs text-red-400\">\n Exit code: {action.result.exitCode}\n </div>\n )}\n </SectionContent>\n </>\n )}\n </>\n );\n}\n\nfunction FileReadDetails({ action }: { action: FileReadAction }) {\n return (\n <>\n <SectionHeader>PATH</SectionHeader>\n <SectionContent>\n <code className=\"text-xs font-mono bg-white/10 text-white/90 px-1 py-0.5 rounded\">\n {action.path}\n </code>\n {(action.offset !== undefined || action.limit !== undefined) && (\n <div className=\"mt-1 text-xs text-white/50\">\n {action.offset !== undefined && <span>Offset: {action.offset}</span>}\n {action.offset !== undefined && action.limit !== undefined && <span> · </span>}\n {action.limit !== undefined && <span>Limit: {action.limit}</span>}\n </div>\n )}\n </SectionContent>\n </>\n );\n}\n\nfunction FileEditDetails({ action }: { action: FileEditAction }) {\n return (\n <>\n <SectionHeader>PATH</SectionHeader>\n <SectionContent>\n <code className=\"text-xs font-mono bg-white/10 text-white/90 px-1 py-0.5 rounded\">\n {action.path}\n </code>\n </SectionContent>\n {action.oldString && (\n <>\n <SectionHeader>OLD</SectionHeader>\n <SectionContent>\n <CodeBlock>{action.oldString}</CodeBlock>\n </SectionContent>\n </>\n )}\n {action.newString && (\n <>\n <SectionHeader>NEW</SectionHeader>\n <SectionContent>\n <CodeBlock>{action.newString}</CodeBlock>\n </SectionContent>\n </>\n )}\n </>\n );\n}\n\nfunction FileWriteDetails({ action }: { action: FileWriteAction }) {\n return (\n <>\n <SectionHeader>PATH</SectionHeader>\n <SectionContent>\n <code className=\"text-xs font-mono bg-white/10 text-white/90 px-1 py-0.5 rounded\">\n {action.path}\n </code>\n </SectionContent>\n {action.content && (\n <>\n <SectionHeader>CONTENT</SectionHeader>\n <SectionContent>\n <CodeBlock maxHeight={300}>{action.content}</CodeBlock>\n </SectionContent>\n </>\n )}\n </>\n );\n}\n\nfunction SearchDetails({ action }: { action: SearchAction }) {\n return (\n <>\n <SectionHeader>PATTERN</SectionHeader>\n <SectionContent>\n <code className=\"text-xs font-mono bg-white/10 text-white/90 px-1 py-0.5 rounded\">\n {action.pattern}\n </code>\n {(action.path || action.glob || action.type) && (\n <div className=\"mt-1 text-xs text-white/50\">\n {action.path && <span>Path: {action.path}</span>}\n {action.glob && <span>Glob: {action.glob}</span>}\n {action.type && <span>Type: {action.type}</span>}\n </div>\n )}\n </SectionContent>\n </>\n );\n}\n\nfunction GlobDetails({ action }: { action: GlobAction }) {\n return (\n <>\n <SectionHeader>PATTERN</SectionHeader>\n <SectionContent>\n <code className=\"text-xs font-mono bg-white/10 text-white/90 px-1 py-0.5 rounded\">\n {action.pattern}\n </code>\n {action.path && (\n <div className=\"mt-1 text-xs text-white/50\">Path: {action.path}</div>\n )}\n </SectionContent>\n </>\n );\n}\n\nfunction WebFetchDetails({ action }: { action: WebFetchAction }) {\n return (\n <>\n <SectionHeader>URL</SectionHeader>\n <SectionContent>\n <a\n href={action.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-xs text-blue-400 hover:text-blue-300 underline break-all\"\n >\n {action.url}\n </a>\n {action.prompt && (\n <div className=\"mt-2 text-xs text-white/50\">{action.prompt}</div>\n )}\n </SectionContent>\n </>\n );\n}\n\nfunction WebSearchDetails({ action }: { action: WebSearchAction }) {\n return (\n <>\n <SectionHeader>QUERY</SectionHeader>\n <SectionContent>\n <span className=\"text-sm text-white/90\">{action.query}</span>\n </SectionContent>\n </>\n );\n}\n\nfunction McpToolDetails({ action }: { action: McpToolAction }) {\n return (\n <>\n <SectionHeader>TOOL</SectionHeader>\n <SectionContent>\n <code className=\"text-xs font-mono bg-white/10 text-white/90 px-1 py-0.5 rounded\">\n {action.serverName}:{action.toolName}\n </code>\n </SectionContent>\n {action.arguments && (\n <>\n <SectionHeader>ARGS</SectionHeader>\n <SectionContent>\n <JsonDisplay value={action.arguments} />\n </SectionContent>\n </>\n )}\n {action.result && (\n <>\n <SectionHeader>RESULT</SectionHeader>\n <SectionContent>\n {action.result.type === 'markdown' ? (\n <CodeBlock>{String(action.result.value)}</CodeBlock>\n ) : (\n <JsonDisplay value={action.result.value} />\n )}\n </SectionContent>\n </>\n )}\n </>\n );\n}\n\nfunction GenericToolDetails({ action }: { action: GenericToolAction }) {\n return (\n <>\n {action.arguments && (\n <>\n <SectionHeader>ARGS</SectionHeader>\n <SectionContent>\n <JsonDisplay value={action.arguments} />\n </SectionContent>\n </>\n )}\n {action.result && (\n <>\n <SectionHeader>RESULT</SectionHeader>\n <SectionContent>\n {action.result.type === 'markdown' ? (\n <CodeBlock>{String(action.result.value)}</CodeBlock>\n ) : (\n <JsonDisplay value={action.result.value} />\n )}\n </SectionContent>\n </>\n )}\n </>\n );\n}\n\nfunction TodoWriteDetails({ action }: { action: TodoWriteAction }) {\n const { todos, stats } = action;\n\n return (\n <>\n {/* Progress Header */}\n {stats && (\n <>\n <SectionHeader>PROGRESS</SectionHeader>\n <SectionContent>\n <div className=\"flex items-center gap-3\">\n <div className=\"flex-1 h-2 bg-white/10 rounded-full overflow-hidden\">\n <div\n className=\"h-full bg-emerald-400 rounded-full transition-all duration-500 ease-out\"\n style={{ width: `${stats.total > 0 ? (stats.completed / stats.total) * 100 : 0}%` }}\n />\n </div>\n <span className=\"text-xs text-white/60 tabular-nums\">\n {stats.completed}/{stats.total}\n </span>\n </div>\n <div className=\"flex gap-3 mt-2 text-xs\">\n {stats.inProgress > 0 && (\n <span className=\"text-yellow-400\">\n {stats.inProgress} in progress\n </span>\n )}\n {stats.pending > 0 && (\n <span className=\"text-white/40\">\n {stats.pending} pending\n </span>\n )}\n </div>\n </SectionContent>\n </>\n )}\n\n {/* Todo List */}\n <SectionHeader>TASKS</SectionHeader>\n <SectionContent>\n <div className=\"space-y-1.5\">\n {todos.map((todo, index) => {\n const displayText = todo.status === 'in_progress' ? todo.activeForm : todo.content;\n return (\n <div\n key={`${todo.content}-${index}`}\n className={cn(\n 'flex items-start gap-2 py-1 transition-all duration-200',\n todo.status === 'completed' && 'opacity-50',\n todo.status === 'in_progress' && 'bg-yellow-500/10 -mx-2 px-2 rounded'\n )}\n >\n {/* Status Icon */}\n {todo.status === 'completed' ? (\n <CheckCircleIcon className=\"w-4 h-4 text-emerald-400 shrink-0 mt-0.5\" />\n ) : todo.status === 'in_progress' ? (\n <LoaderIcon className=\"w-4 h-4 text-yellow-400 animate-spin shrink-0 mt-0.5\" />\n ) : (\n <CircleIcon className=\"w-4 h-4 text-white/30 shrink-0 mt-0.5\" />\n )}\n\n {/* Task Text */}\n <span\n className={cn(\n 'text-sm leading-relaxed',\n todo.status === 'completed' ? 'text-white/50 line-through' : 'text-white/80'\n )}\n >\n <span className=\"text-white/40 mr-1.5\">{index + 1}.</span>\n {displayText}\n </span>\n </div>\n );\n })}\n </div>\n </SectionContent>\n </>\n );\n}\n\nfunction ToolDetails({ actionType }: { actionType: ActionType }) {\n switch (actionType.action) {\n case 'command_run':\n return <CommandRunDetails action={actionType} />;\n case 'file_read':\n return <FileReadDetails action={actionType} />;\n case 'file_edit':\n return <FileEditDetails action={actionType} />;\n case 'file_write':\n return <FileWriteDetails action={actionType} />;\n case 'search':\n return <SearchDetails action={actionType} />;\n case 'glob':\n return <GlobDetails action={actionType} />;\n case 'web_fetch':\n return <WebFetchDetails action={actionType} />;\n case 'web_search':\n return <WebSearchDetails action={actionType} />;\n case 'mcp_tool':\n return <McpToolDetails action={actionType} />;\n case 'generic_tool':\n return <GenericToolDetails action={actionType} />;\n case 'todo_write':\n return <TodoWriteDetails action={actionType} />;\n default:\n return null;\n }\n}\n\n// =============================================================================\n// Helper Functions\n// =============================================================================\n\nfunction hasDetails(actionType: ActionType): boolean {\n switch (actionType.action) {\n case 'command_run':\n return Boolean(actionType.command || actionType.result?.output);\n case 'file_read':\n return true;\n case 'file_edit':\n return Boolean(actionType.oldString || actionType.newString);\n case 'file_write':\n return Boolean(actionType.content);\n case 'search':\n return true;\n case 'glob':\n return true;\n case 'web_fetch':\n return true;\n case 'web_search':\n return true;\n case 'mcp_tool':\n return Boolean(actionType.arguments || actionType.result);\n case 'generic_tool':\n return Boolean(actionType.arguments || actionType.result);\n case 'todo_write':\n return actionType.todos.length > 0;\n default:\n return false;\n }\n}\n\n// =============================================================================\n// ToolCallCard Component\n// =============================================================================\n\nexport interface ToolCallCardProps {\n toolCall: NormalizedToolCall;\n defaultExpanded?: boolean;\n className?: string;\n}\n\n/**\n * ToolCallCard - Display a tool call with its status, arguments, and results\n *\n * Features:\n * - Status indicator (pending/success/failed) with animated styling\n * - Action-specific icon in accent-colored badge\n * - Expandable details section with smooth animation\n * - Glassmorphism dark theme styling\n * - Execution duration display\n *\n * @example\n * ```tsx\n * <ToolCallCard toolCall={normalizedToolCall} />\n * <ToolCallCard toolCall={toolCall} defaultExpanded />\n * ```\n */\nexport function ToolCallCard({ toolCall, defaultExpanded = false, className }: ToolCallCardProps) {\n const [expanded, setExpanded] = useState(defaultExpanded);\n const { actionType, status, summary } = toolCall;\n const canExpand = hasDetails(actionType);\n\n // Status-based styling for glassmorphism theme\n const statusClasses = {\n pending: 'border-yellow-500/30 ash-tool-status-pending',\n success: 'border-white/10',\n failed: 'border-red-500/30',\n };\n\n return (\n <div\n className={cn(\n 'rounded-xl border bg-[var(--ash-surface-dark,#0a0a0a)] overflow-hidden',\n statusClasses[status],\n className\n )}\n >\n {/* Header */}\n <button\n onClick={() => canExpand && setExpanded(!expanded)}\n className={cn(\n 'w-full px-4 py-3 flex items-center justify-between transition-colors',\n canExpand ? 'hover:bg-white/5 cursor-pointer' : 'cursor-default'\n )}\n disabled={!canExpand}\n >\n <div className=\"flex items-center gap-3 min-w-0 flex-1\">\n {/* Icon badge */}\n <div className={cn(\n 'w-6 h-6 rounded-lg flex items-center justify-center shrink-0',\n status === 'pending' ? 'bg-yellow-500/20' :\n status === 'failed' ? 'bg-red-500/20' : 'bg-[var(--ash-accent)]/20'\n )}>\n <ActionIcon\n actionType={actionType}\n className={cn(\n 'w-3.5 h-3.5',\n status === 'pending' ? 'text-yellow-400' :\n status === 'failed' ? 'text-red-400' : 'text-[var(--ash-accent)]'\n )}\n />\n </div>\n\n {/* Tool name and summary */}\n <span className=\"text-sm font-medium text-white shrink-0\">\n {getActionLabel(actionType)}\n </span>\n <span className=\"font-mono text-sm truncate text-white/60 min-w-0\">\n {summary}\n </span>\n </div>\n\n <div className=\"flex items-center gap-2 shrink-0\">\n {/* Status indicator */}\n <StatusIndicator status={status} size=\"sm\" />\n\n {/* Chevron */}\n {canExpand && (\n <ChevronDownIcon\n className={cn(\n 'w-4 h-4 text-white/40 transition-transform duration-200',\n expanded && 'rotate-180'\n )}\n />\n )}\n </div>\n </button>\n\n {/* Expandable Details */}\n {expanded && canExpand && (\n <div className=\"border-t border-white/5 max-h-[400px] overflow-y-auto ash-scrollbar bg-black/20\">\n <ToolDetails actionType={actionType} />\n\n {/* Success result footer */}\n {status === 'success' && (\n <div className=\"px-4 py-3 border-t border-white/5 bg-[var(--ash-accent)]/5\">\n <div className=\"flex items-center gap-2\">\n <CheckIcon className=\"w-4 h-4 text-[var(--ash-accent)]\" />\n <span className=\"text-sm text-[var(--ash-accent)] font-medium\">\n Completed successfully\n </span>\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport default ToolCallCard;\n","import type { ParsedOption } from '../utils';\nimport { cn } from '../utils';\n\nexport interface OptionCardsProps {\n /** Parsed options to display */\n options: ParsedOption[];\n /** Callback when an option is selected */\n onSelect: (option: ParsedOption) => void;\n /** Additional class names */\n className?: string;\n}\n\n/**\n * OptionCards - Display clickable option cards for interactive selection\n *\n * Renders a grid of glassmorphic cards that users can click to select an option.\n * Used when assistant messages contain structured options for the user to choose from.\n *\n * @example\n * ```tsx\n * <OptionCards\n * options={[\n * { id: '1', label: 'Add Product', description: 'Upload a new product' },\n * { id: '2', label: 'Browse Existing', description: 'View your products' },\n * ]}\n * onSelect={(opt) => sendMessage(opt.label)}\n * />\n * ```\n */\nexport function OptionCards({ options, onSelect, className }: OptionCardsProps) {\n return (\n <div className={cn('grid gap-2 mt-3', className)} style={{\n gridTemplateColumns: 'repeat(auto-fit, minmax(200px, 1fr))',\n }}>\n {options.map((option) => (\n <button\n key={option.id}\n onClick={() => onSelect(option)}\n className={cn(\n 'flex items-start gap-3 p-3 rounded-xl text-left',\n 'bg-white/5 border border-white/10',\n 'hover:bg-[var(--ash-accent)]/10 hover:border-[var(--ash-accent)]/30',\n 'focus:outline-none focus:ring-2 focus:ring-[var(--ash-accent)]/50',\n 'transition-all duration-200 cursor-pointer',\n 'group'\n )}\n >\n {/* Option number badge */}\n <span className={cn(\n 'flex-shrink-0 w-6 h-6 rounded-lg',\n 'bg-[var(--ash-accent)]/20 text-[var(--ash-accent)]',\n 'flex items-center justify-center',\n 'text-xs font-semibold',\n 'group-hover:bg-[var(--ash-accent)]/30',\n 'transition-colors duration-200'\n )}>\n {option.id}\n </span>\n\n {/* Option content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"text-sm font-medium text-white/90 group-hover:text-white transition-colors\">\n {option.label}\n </div>\n {option.description && (\n <div className=\"text-xs text-white/50 mt-0.5 line-clamp-2 group-hover:text-white/60 transition-colors\">\n {option.description}\n </div>\n )}\n </div>\n\n {/* Arrow indicator */}\n <svg\n className={cn(\n 'w-4 h-4 text-white/30 flex-shrink-0 mt-0.5',\n 'group-hover:text-[var(--ash-accent)] group-hover:translate-x-0.5',\n 'transition-all duration-200'\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n ))}\n </div>\n );\n}\n\nexport default OptionCards;\n","import ReactMarkdown from 'react-markdown';\nimport type { NormalizedEntry } from '../types';\nimport { cn, formatTimestamp, parseOptionsFromContent, type ParsedOption } from '../utils';\nimport { ToolCallCard } from './ToolCallCard';\nimport { OptionCards } from './OptionCards';\nimport { BotIcon, UserIcon, PaperclipIcon, SparklesIcon, AlertTriangleIcon } from '../icons';\n\n// =============================================================================\n// Helper Functions\n// =============================================================================\n\nfunction parseFilesFromContent(content: string): { text: string; files: string[] } {\n const fileMarker = '[Uploaded files available at /uploads/]';\n const markerIndex = content.indexOf(fileMarker);\n\n if (markerIndex === -1) {\n return { text: content, files: [] };\n }\n\n const text = content.substring(0, markerIndex).trim();\n const fileSection = content.substring(markerIndex + fileMarker.length).trim();\n const files = fileSection\n .split('\\n')\n .filter((line) => line.startsWith('- '))\n .map((line) => line.substring(2).trim());\n\n return { text, files };\n}\n\n// =============================================================================\n// Entry Components\n// =============================================================================\n\nexport interface UserMessageProps {\n entry: NormalizedEntry;\n className?: string;\n}\n\n/**\n * UserMessage - Display a user message with optional file attachments\n *\n * Uses glassmorphism styling with animated entry.\n */\nexport function UserMessage({ entry, className }: UserMessageProps) {\n const { text, files } = parseFilesFromContent(entry.content);\n\n return (\n <div className={cn('flex gap-3 justify-end ash-animate-fade-in', className)}>\n <div className=\"max-w-[85%]\">\n <div className=\"rounded-2xl p-4 bg-[var(--ash-accent)] text-[var(--ash-accent-foreground)]\">\n <p className=\"text-sm leading-relaxed whitespace-pre-wrap\">{text || '(files attached)'}</p>\n </div>\n {files.length > 0 && (\n <div className=\"mt-2 pt-2 border-t border-[var(--ash-accent-foreground)]/20\">\n <div className=\"text-xs text-[var(--ash-accent-foreground)]/60 mb-1 flex items-center gap-1\">\n <PaperclipIcon className=\"w-3 h-3\" />\n Attached Files\n </div>\n <div className=\"flex flex-wrap gap-1\">\n {files.map((file, index) => (\n <span\n key={index}\n className=\"inline-flex items-center px-2 py-0.5 rounded-lg bg-[var(--ash-accent-foreground)]/10 text-xs\"\n title={file}\n >\n {file.split(' (')[0]}\n </span>\n ))}\n </div>\n </div>\n )}\n {entry.timestamp && (\n <div className=\"text-xs text-white/40 mt-2\">\n {formatTimestamp(entry.timestamp)}\n </div>\n )}\n </div>\n <div className=\"w-7 h-7 rounded-full bg-white/10 flex items-center justify-center shrink-0\">\n <UserIcon className=\"w-4 h-4 text-white/50\" />\n </div>\n </div>\n );\n}\n\nexport interface AssistantMessageProps {\n entry: NormalizedEntry;\n /** Callback when user selects an option */\n onOptionSelect?: (optionText: string) => void;\n className?: string;\n}\n\n/**\n * AssistantMessage - Display an assistant message with markdown rendering\n *\n * Uses glassmorphism styling with bot avatar and animated entry.\n * Automatically detects and renders interactive options when present.\n */\nexport function AssistantMessage({ entry, onOptionSelect, className }: AssistantMessageProps) {\n // Try to parse options from the content\n const parsedOptions = parseOptionsFromContent(entry.content);\n\n const handleOptionSelect = (option: ParsedOption) => {\n if (onOptionSelect) {\n // Send \"Option N: Label\" format so the agent understands the selection\n onOptionSelect(`Option ${option.id}: ${option.label}`);\n }\n };\n\n return (\n <div className={cn('flex gap-3 ash-animate-fade-in', className)}>\n <div className=\"w-7 h-7 rounded-full bg-[var(--ash-accent)]/20 flex items-center justify-center shrink-0\">\n <BotIcon className=\"w-4 h-4 text-[var(--ash-accent)]\" />\n </div>\n <div className=\"flex-1 max-w-[85%]\">\n <div className=\"ash-card-glass rounded-2xl p-4\">\n <div className=\"ash-message-content prose prose-sm prose-invert max-w-none text-sm leading-relaxed\">\n {parsedOptions ? (\n <>\n {/* Render preamble text */}\n {parsedOptions.preamble && (\n <ReactMarkdown>{parsedOptions.preamble}</ReactMarkdown>\n )}\n {/* Render interactive options */}\n <OptionCards\n options={parsedOptions.options}\n onSelect={handleOptionSelect}\n />\n </>\n ) : (\n <ReactMarkdown>{entry.content}</ReactMarkdown>\n )}\n </div>\n </div>\n {entry.timestamp && (\n <div className=\"text-xs text-white/40 mt-2\">\n {formatTimestamp(entry.timestamp)}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport interface ThinkingMessageProps {\n entry: NormalizedEntry;\n className?: string;\n}\n\n/**\n * ThinkingMessage - Display thinking/reasoning content (extended thinking)\n *\n * Uses glassmorphism styling with purple accent for thinking mode.\n */\nexport function ThinkingMessage({ entry, className }: ThinkingMessageProps) {\n return (\n <div className={cn('flex gap-3 ash-animate-fade-in', className)}>\n <div className=\"w-7 h-7 rounded-full bg-purple-500/20 flex items-center justify-center shrink-0\">\n <SparklesIcon className=\"w-4 h-4 text-purple-400\" />\n </div>\n <div className=\"flex-1 max-w-[85%]\">\n <div className=\"rounded-2xl p-4 bg-purple-500/10 border border-purple-500/30\">\n <div className=\"text-xs text-purple-400 mb-2 font-medium\">Thinking</div>\n <div className=\"text-sm text-purple-300 italic opacity-80 whitespace-pre-wrap leading-relaxed\">\n {entry.content}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nexport interface ToolCallMessageProps {\n entry: NormalizedEntry;\n defaultExpanded?: boolean;\n className?: string;\n}\n\n/**\n * ToolCallMessage - Display a tool call entry using ToolCallCard\n *\n * Uses glassmorphism styling with animated entry.\n */\nexport function ToolCallMessage({ entry, defaultExpanded = false, className }: ToolCallMessageProps) {\n if (entry.entryType.type !== 'tool_call') return null;\n\n return (\n <div className={cn('flex gap-3 ash-animate-fade-in', className)}>\n <div className=\"w-7 h-7 rounded-full bg-[var(--ash-accent)]/20 flex items-center justify-center shrink-0\">\n <BotIcon className=\"w-4 h-4 text-[var(--ash-accent)]\" />\n </div>\n <div className=\"flex-1\">\n <ToolCallCard toolCall={entry.entryType.toolCall} defaultExpanded={defaultExpanded} />\n </div>\n </div>\n );\n}\n\nexport interface ErrorMessageProps {\n entry: NormalizedEntry;\n className?: string;\n}\n\n/**\n * ErrorMessage - Display an error entry\n *\n * Uses glassmorphism styling with red accent for errors.\n */\nexport function ErrorMessage({ entry, className }: ErrorMessageProps) {\n if (entry.entryType.type !== 'error') return null;\n\n return (\n <div className={cn('flex gap-3 ash-animate-fade-in', className)}>\n <div className=\"w-7 h-7 rounded-full bg-red-500/20 flex items-center justify-center shrink-0\">\n <AlertTriangleIcon className=\"w-4 h-4 text-red-400\" />\n </div>\n <div className=\"flex-1 max-w-[85%]\">\n <div className=\"rounded-2xl p-4 bg-red-500/10 border border-red-500/30\">\n <div className=\"text-xs text-red-400 mb-2 font-medium\">Error</div>\n <p className=\"text-sm text-red-300\">{entry.entryType.message}</p>\n {entry.entryType.code && (\n <p className=\"text-xs text-red-400/70 mt-2 font-mono\">Code: {entry.entryType.code}</p>\n )}\n </div>\n </div>\n </div>\n );\n}\n\n// =============================================================================\n// Entry Renderer\n// =============================================================================\n\nexport interface MessageEntryProps {\n entry: NormalizedEntry;\n /** Callback when user selects an option from assistant message */\n onOptionSelect?: (optionText: string) => void;\n className?: string;\n}\n\n/**\n * MessageEntry - Render a normalized entry based on its type\n *\n * This is a convenience component that routes to the appropriate\n * entry type component.\n *\n * @example\n * ```tsx\n * {entries.map(entry => (\n * <MessageEntry key={entry.id} entry={entry} onOptionSelect={handleSelect} />\n * ))}\n * ```\n */\nexport function MessageEntry({ entry, onOptionSelect, className }: MessageEntryProps) {\n switch (entry.entryType.type) {\n case 'user_message':\n return <UserMessage entry={entry} className={className} />;\n case 'assistant_message':\n return <AssistantMessage entry={entry} onOptionSelect={onOptionSelect} className={className} />;\n case 'thinking':\n return <ThinkingMessage entry={entry} className={className} />;\n case 'tool_call':\n return <ToolCallMessage entry={entry} className={className} />;\n case 'error':\n return <ErrorMessage entry={entry} className={className} />;\n default:\n return null;\n }\n}\n\nexport default MessageEntry;\n","import { cn } from '../utils';\n\nexport interface LoadingIndicatorProps {\n variant?: 'dots' | 'pulse' | 'spinner' | 'cursor';\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\n/**\n * LoadingIndicator - Display various loading states\n *\n * Uses the glassmorphism theme with accent-colored animations.\n *\n * Variants:\n * - dots: Three animated dots\n * - pulse: Single pulsing dot\n * - spinner: Rotating spinner\n * - cursor: Blinking cursor (like in the demo)\n *\n * @example\n * ```tsx\n * <LoadingIndicator />\n * <LoadingIndicator variant=\"spinner\" size=\"lg\" />\n * <LoadingIndicator variant=\"cursor\" />\n * ```\n */\nexport function LoadingIndicator({ variant = 'dots', size = 'md', className }: LoadingIndicatorProps) {\n if (variant === 'dots') {\n const dotSizes = {\n sm: 'w-1 h-1',\n md: 'w-1.5 h-1.5',\n lg: 'w-2 h-2',\n };\n return (\n <div className={cn('flex items-center gap-1', className)}>\n <span className={cn('rounded-full bg-[var(--ash-accent)] animate-pulse', dotSizes[size])} />\n <span className={cn('rounded-full bg-[var(--ash-accent)] animate-pulse', dotSizes[size])} style={{ animationDelay: '150ms' }} />\n <span className={cn('rounded-full bg-[var(--ash-accent)] animate-pulse', dotSizes[size])} style={{ animationDelay: '300ms' }} />\n </div>\n );\n }\n\n if (variant === 'pulse') {\n const dotSizes = {\n sm: 'w-1.5 h-1.5',\n md: 'w-2 h-2',\n lg: 'w-3 h-3',\n };\n return (\n <div className={cn('flex items-center gap-1', className)}>\n <span className={cn('bg-[var(--ash-accent)] rounded-full animate-pulse', dotSizes[size])} />\n </div>\n );\n }\n\n if (variant === 'cursor') {\n const cursorSizes = {\n sm: 'w-1 h-3',\n md: 'w-1.5 h-4',\n lg: 'w-2 h-5',\n };\n return (\n <span\n className={cn(\n 'inline-block bg-[var(--ash-accent)]/50 ash-tool-status-pending',\n cursorSizes[size],\n className\n )}\n />\n );\n }\n\n // Spinner variant\n const spinnerSizes = {\n sm: 'w-4 h-4',\n md: 'w-6 h-6',\n lg: 'w-8 h-8',\n };\n\n return (\n <div className={cn('animate-spin text-[var(--ash-accent)]', spinnerSizes[size], className)}>\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" className=\"opacity-25\" />\n <path d=\"M12 2a10 10 0 0 1 10 10\" strokeLinecap=\"round\" />\n </svg>\n </div>\n );\n}\n\nexport default LoadingIndicator;\n","import ReactMarkdown from 'react-markdown';\nimport { cn } from '../utils';\nimport { LoadingIndicator } from './LoadingIndicator';\n\nexport interface StreamingTextProps {\n content: string;\n isStreaming?: boolean;\n renderMarkdown?: boolean;\n className?: string;\n}\n\n/**\n * StreamingText - Display text that may be streaming, with optional markdown\n *\n * Shows a blinking cursor indicator when streaming is active.\n * Uses glassmorphism theme styling.\n *\n * @example\n * ```tsx\n * <StreamingText content={text} isStreaming />\n * <StreamingText content={markdown} renderMarkdown />\n * ```\n */\nexport function StreamingText({\n content,\n isStreaming = false,\n renderMarkdown = true,\n className,\n}: StreamingTextProps) {\n return (\n <div className={cn('relative', className)}>\n {renderMarkdown ? (\n <div className=\"ash-message-content prose prose-sm prose-invert max-w-none text-sm leading-relaxed\">\n <ReactMarkdown>{content}</ReactMarkdown>\n {isStreaming && (\n <LoadingIndicator variant=\"cursor\" size=\"sm\" className=\"inline-block ml-0.5\" />\n )}\n </div>\n ) : (\n <p className=\"whitespace-pre-wrap text-sm leading-relaxed\">\n {content}\n {isStreaming && (\n <LoadingIndicator variant=\"cursor\" size=\"sm\" className=\"inline-block ml-0.5\" />\n )}\n </p>\n )}\n </div>\n );\n}\n\nexport default StreamingText;\n","import { useState, useEffect, useRef } from 'react';\nimport type { NormalizedToolCall } from '../types';\nimport { cn, getActionLabel } from '../utils';\nimport { StatusIndicator } from './StatusIndicator';\nimport { ActionIcon } from './ActionIcon';\n\nexport interface CompactToolStatusLineProps {\n /** The current tool call to display */\n toolCall: NormalizedToolCall;\n\n /** Previous tool call (for exit animation) */\n previousToolCall?: NormalizedToolCall | null;\n\n /** Animation duration in ms */\n animationDuration?: number;\n\n /** Additional class names */\n className?: string;\n}\n\n/**\n * Compact status line for displaying the current tool execution.\n *\n * Features a smooth replace animation where the previous tool call\n * slides out while the new one slides in. Similar to the homepage\n * status line animation.\n *\n * @example\n * ```tsx\n * <CompactToolStatusLine\n * toolCall={currentToolCall}\n * previousToolCall={lastToolCall}\n * />\n * ```\n */\nexport function CompactToolStatusLine({\n toolCall,\n previousToolCall,\n animationDuration = 300,\n className,\n}: CompactToolStatusLineProps) {\n const [isAnimating, setIsAnimating] = useState(false);\n const [displayedToolCall, setDisplayedToolCall] = useState(toolCall);\n const [exitingToolCall, setExitingToolCall] = useState<NormalizedToolCall | null>(null);\n const prevToolCallRef = useRef<string | null>(null);\n\n useEffect(() => {\n // Detect when the tool call changes (by ID)\n if (toolCall.id !== prevToolCallRef.current) {\n if (prevToolCallRef.current !== null && previousToolCall) {\n // Trigger exit animation for previous tool call\n setExitingToolCall(previousToolCall);\n setIsAnimating(true);\n\n // After exit animation, update displayed tool call\n const timer = setTimeout(() => {\n setDisplayedToolCall(toolCall);\n setExitingToolCall(null);\n setIsAnimating(false);\n }, animationDuration);\n\n prevToolCallRef.current = toolCall.id;\n return () => clearTimeout(timer);\n } else {\n // First tool call - no exit animation\n setDisplayedToolCall(toolCall);\n prevToolCallRef.current = toolCall.id;\n }\n } else {\n // Same tool call, just update status\n setDisplayedToolCall(toolCall);\n }\n return undefined;\n }, [toolCall, previousToolCall, animationDuration]);\n\n // Status-based styling\n const statusClasses = {\n pending: 'border-yellow-500/30',\n success: 'border-[var(--ash-accent)]/30',\n failed: 'border-red-500/30',\n };\n\n const renderToolCallContent = (tc: NormalizedToolCall, isExiting: boolean) => (\n <div\n className={cn(\n 'flex items-center gap-3 px-4 py-2.5',\n isExiting ? 'ash-status-line-exit' : (isAnimating ? 'ash-status-line-enter' : '')\n )}\n style={{\n animationDuration: `${animationDuration}ms`,\n }}\n >\n {/* Icon badge */}\n <div\n className={cn(\n 'w-6 h-6 rounded-lg flex items-center justify-center shrink-0',\n tc.status === 'pending'\n ? 'bg-yellow-500/20'\n : tc.status === 'failed'\n ? 'bg-red-500/20'\n : 'bg-[var(--ash-accent)]/20'\n )}\n >\n <ActionIcon\n actionType={tc.actionType}\n className={cn(\n 'w-3.5 h-3.5',\n tc.status === 'pending'\n ? 'text-yellow-400'\n : tc.status === 'failed'\n ? 'text-red-400'\n : 'text-[var(--ash-accent)]'\n )}\n />\n </div>\n\n {/* Tool name */}\n <span className=\"text-sm font-medium text-white shrink-0\">\n {getActionLabel(tc.actionType)}\n </span>\n\n {/* Summary */}\n <span className=\"font-mono text-sm truncate text-white/60 flex-1 min-w-0\">\n {tc.summary}\n </span>\n\n {/* Status indicator */}\n <StatusIndicator status={tc.status} size=\"sm\" />\n </div>\n );\n\n return (\n <div\n className={cn(\n 'relative rounded-xl border bg-[var(--ash-surface-dark,#0a0a0a)] overflow-hidden',\n statusClasses[displayedToolCall.status],\n displayedToolCall.status === 'pending' && 'ash-tool-status-pending',\n className\n )}\n >\n {/* Exiting tool call (animating out) */}\n {exitingToolCall && (\n <div className=\"absolute inset-0\">\n {renderToolCallContent(exitingToolCall, true)}\n </div>\n )}\n\n {/* Current tool call */}\n {renderToolCallContent(displayedToolCall, false)}\n </div>\n );\n}\n\nexport default CompactToolStatusLine;\n","import { useState, useMemo } from 'react';\nimport type { NormalizedToolCall, ToolExecutionGroup as ToolExecutionGroupType } from '../types';\nimport { cn } from '../utils';\nimport { ChevronDownIcon, CheckIcon } from '../icons';\nimport { StatusIndicator } from './StatusIndicator';\nimport { ToolCallCard } from './ToolCallCard';\nimport { CompactToolStatusLine } from './CompactToolStatusLine';\n\nexport interface ToolExecutionGroupProps {\n /** Tool calls in this group */\n toolCalls: NormalizedToolCall[];\n\n /** Whether the group starts expanded */\n defaultExpanded?: boolean;\n\n /** Animation duration for status line transitions (ms) */\n animationDuration?: number;\n\n /** Additional class names */\n className?: string;\n}\n\n/**\n * Calculate the overall status of a group of tool calls\n */\nfunction calculateGroupStatus(\n toolCalls: NormalizedToolCall[]\n): ToolExecutionGroupType['status'] {\n const hasPending = toolCalls.some((tc) => tc.status === 'pending');\n const hasFailed = toolCalls.some((tc) => tc.status === 'failed');\n const allSuccess = toolCalls.every((tc) => tc.status === 'success');\n\n if (hasPending) return 'pending';\n if (allSuccess) return 'success';\n if (hasFailed && !hasPending) return toolCalls.some((tc) => tc.status === 'success') ? 'partial_failure' : 'failed';\n return 'pending';\n}\n\n/**\n * ToolExecutionGroup - Displays multiple tool calls in a compact accordion format.\n *\n * In collapsed state, shows a single animated status line with the current/latest\n * tool call. When expanded, shows all tool calls as individual cards.\n *\n * Features:\n * - Animated status line that transitions between tool calls\n * - Expandable accordion to see all tool call details\n * - Count badge showing total tool calls\n * - Overall status indicator\n *\n * @example\n * ```tsx\n * <ToolExecutionGroup\n * toolCalls={consecutiveToolCalls}\n * defaultExpanded={false}\n * />\n * ```\n */\nexport function ToolExecutionGroup({\n toolCalls,\n defaultExpanded = false,\n animationDuration = 300,\n className,\n}: ToolExecutionGroupProps) {\n const [expanded, setExpanded] = useState(defaultExpanded);\n\n // Get the active (latest) tool call for status line\n const activeToolCall = toolCalls[toolCalls.length - 1];\n const previousToolCall = toolCalls.length > 1 ? toolCalls[toolCalls.length - 2] : null;\n\n // Calculate overall group status\n const groupStatus = useMemo(() => calculateGroupStatus(toolCalls), [toolCalls]);\n\n // Count completed tool calls\n const completedCount = toolCalls.filter((tc) => tc.status === 'success').length;\n const failedCount = toolCalls.filter((tc) => tc.status === 'failed').length;\n const totalCount = toolCalls.length;\n\n if (!activeToolCall) {\n return null;\n }\n\n // Status-based border styling\n const borderClasses = {\n pending: 'border-yellow-500/30',\n success: 'border-[var(--ash-accent)]/30',\n partial_failure: 'border-orange-500/30',\n failed: 'border-red-500/30',\n };\n\n return (\n <div\n className={cn(\n 'rounded-xl border bg-[var(--ash-surface-dark,#0a0a0a)] overflow-hidden ash-animate-fade-in',\n borderClasses[groupStatus],\n groupStatus === 'pending' && 'ash-tool-status-pending',\n className\n )}\n >\n {/* Header / Collapsed View */}\n <button\n onClick={() => setExpanded(!expanded)}\n className={cn(\n 'w-full transition-colors hover:bg-white/5 cursor-pointer'\n )}\n >\n {/* Status line for current tool call */}\n <div className=\"relative\">\n <CompactToolStatusLine\n toolCall={activeToolCall}\n previousToolCall={previousToolCall}\n animationDuration={animationDuration}\n className=\"border-0 rounded-none\"\n />\n\n {/* Overlay with count badge and expand control */}\n <div className=\"absolute right-3 top-1/2 -translate-y-1/2 flex items-center gap-2\">\n {/* Count badge */}\n {totalCount > 1 && (\n <div\n className={cn(\n 'flex items-center gap-1.5 px-2 py-0.5 rounded-full text-xs font-medium',\n groupStatus === 'pending'\n ? 'bg-yellow-500/20 text-yellow-400'\n : groupStatus === 'success'\n ? 'bg-[var(--ash-accent)]/20 text-[var(--ash-accent)]'\n : groupStatus === 'failed'\n ? 'bg-red-500/20 text-red-400'\n : 'bg-orange-500/20 text-orange-400'\n )}\n >\n {groupStatus === 'pending' ? (\n <span>{completedCount}/{totalCount}</span>\n ) : failedCount > 0 ? (\n <span>{completedCount} ok, {failedCount} failed</span>\n ) : (\n <span>{totalCount} tools</span>\n )}\n </div>\n )}\n\n {/* Chevron */}\n <ChevronDownIcon\n className={cn(\n 'w-4 h-4 text-white/40 transition-transform duration-200',\n expanded && 'rotate-180'\n )}\n />\n </div>\n </div>\n </button>\n\n {/* Expanded View - All tool calls */}\n {expanded && (\n <div className=\"border-t border-white/5 bg-black/20\">\n {/* Timeline of tool calls */}\n <div className=\"p-3 space-y-2\">\n {toolCalls.map((toolCall, index) => (\n <div key={toolCall.id} className=\"relative\">\n {/* Connector line (for non-last items) */}\n {index < toolCalls.length - 1 && (\n <div className=\"absolute left-[19px] top-10 bottom-0 w-px bg-white/10\" />\n )}\n\n <ToolCallCard\n toolCall={toolCall}\n defaultExpanded={false}\n className=\"relative z-10\"\n />\n </div>\n ))}\n </div>\n\n {/* Summary footer */}\n {groupStatus !== 'pending' && (\n <div\n className={cn(\n 'px-4 py-3 border-t border-white/5 flex items-center gap-2',\n groupStatus === 'success'\n ? 'bg-[var(--ash-accent)]/5'\n : groupStatus === 'failed'\n ? 'bg-red-500/5'\n : 'bg-orange-500/5'\n )}\n >\n {groupStatus === 'success' ? (\n <>\n <CheckIcon className=\"w-4 h-4 text-[var(--ash-accent)]\" />\n <span className=\"text-sm text-[var(--ash-accent)] font-medium\">\n All {totalCount} tool{totalCount !== 1 ? 's' : ''} completed successfully\n </span>\n </>\n ) : groupStatus === 'failed' ? (\n <>\n <StatusIndicator status=\"failed\" size=\"sm\" />\n <span className=\"text-sm text-red-400 font-medium\">\n {failedCount} tool{failedCount !== 1 ? 's' : ''} failed\n </span>\n </>\n ) : (\n <>\n <StatusIndicator status=\"failed\" size=\"sm\" />\n <span className=\"text-sm text-orange-400 font-medium\">\n {completedCount} succeeded, {failedCount} failed\n </span>\n </>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport default ToolExecutionGroup;\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport type { NormalizedToolCall } from '../types';\nimport { cn } from '../utils';\nimport { ChevronDownIcon, CheckIcon, ErrorIcon, ToolIcon, SpinnerIcon } from '../icons';\n\nexport type StepStatus = 'pending' | 'running' | 'success' | 'error';\n\nexport interface StepAccordionProps {\n /** Tool calls to display as steps */\n toolCalls: NormalizedToolCall[];\n /** Whether the accordion starts expanded */\n defaultExpanded?: boolean;\n /** Controlled expanded state */\n isExpanded?: boolean;\n /** Callback when expanded state changes */\n onToggle?: () => void;\n /** Additional class names */\n className?: string;\n}\n\n/**\n * Format duration between two timestamps\n */\nfunction formatDuration(startMs: number, endMs: number): string {\n const duration = endMs - startMs;\n if (duration < 1000) return `${duration}ms`;\n return `${(duration / 1000).toFixed(1)}s`;\n}\n\n/**\n * Get a human-readable label for a tool call\n */\nfunction getToolLabel(toolName: string, summary?: string): string {\n // If we have a summary, use it\n if (summary && summary.length > 0 && summary.length < 50) {\n return summary;\n }\n\n // Clean up tool name for display\n const cleaned = toolName\n .replace(/^mcp__[^_]+__/, '') // Remove MCP prefix\n .replace(/Tool$/, '') // Remove Tool suffix\n .replace(/_/g, ' ') // Replace underscores with spaces\n .replace(/([a-z])([A-Z])/g, '$1 $2'); // Add space before capitals\n\n return cleaned.charAt(0).toUpperCase() + cleaned.slice(1);\n}\n\n/**\n * Map tool call status to step status\n */\nfunction toStepStatus(status: NormalizedToolCall['status']): StepStatus {\n switch (status) {\n case 'pending':\n return 'running';\n case 'success':\n return 'success';\n case 'failed':\n return 'error';\n default:\n return 'pending';\n }\n}\n\n/**\n * StepIcon - Icon for a step based on its status\n */\nfunction StepIcon({ status }: { status: StepStatus }) {\n const iconClass = 'w-3.5 h-3.5';\n\n switch (status) {\n case 'running':\n return <SpinnerIcon className={cn(iconClass, 'animate-spin text-[var(--ash-accent)]')} />;\n case 'success':\n return <CheckIcon className={cn(iconClass, 'text-[var(--ash-accent)]')} />;\n case 'error':\n return <ErrorIcon className={cn(iconClass, 'text-red-500')} />;\n default:\n return <ToolIcon className={cn(iconClass, 'text-white/40')} />;\n }\n}\n\n/**\n * StepAccordion - Simpler accordion that shows tool calls as numbered steps\n *\n * Features:\n * - Collapsed header shows current running step or completion status\n * - Expanded view shows all steps as a numbered list\n * - Shows step duration for completed steps\n * - Compact design suitable for embedding in chat\n *\n * @example\n * ```tsx\n * <StepAccordion\n * toolCalls={normalizedToolCalls}\n * defaultExpanded={false}\n * />\n * ```\n */\nexport function StepAccordion({\n toolCalls,\n defaultExpanded = false,\n isExpanded: controlledExpanded,\n onToggle,\n className,\n}: StepAccordionProps) {\n const [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n\n // Use controlled or uncontrolled state\n const isExpanded = controlledExpanded !== undefined ? controlledExpanded : internalExpanded;\n\n const handleToggle = useCallback(() => {\n if (onToggle) {\n onToggle();\n } else {\n setInternalExpanded((prev) => !prev);\n }\n }, [onToggle]);\n\n if (toolCalls.length === 0) {\n return null;\n }\n\n // Count completed and running steps\n const completedSteps = toolCalls.filter((tc) => tc.status === 'success' || tc.status === 'failed').length;\n const runningStep = toolCalls.find((tc) => tc.status === 'pending');\n const hasError = toolCalls.some((tc) => tc.status === 'failed');\n const allComplete = completedSteps === toolCalls.length;\n\n return (\n <div\n className={cn(\n 'rounded-xl border overflow-hidden',\n hasError\n ? 'border-red-500/30'\n : allComplete\n ? 'border-[var(--ash-accent)]/30'\n : 'border-yellow-500/30',\n className\n )}\n >\n {/* Header - always visible */}\n <button\n type=\"button\"\n onClick={handleToggle}\n className=\"w-full flex items-center gap-2 px-3 py-2 bg-white/5 hover:bg-white/10 transition-colors text-left cursor-pointer\"\n >\n {/* Expand/collapse icon */}\n <ChevronDownIcon\n className={cn(\n 'w-4 h-4 text-white/40 transition-transform duration-200 flex-shrink-0',\n !isExpanded && '-rotate-90'\n )}\n />\n\n {/* Summary */}\n <div className=\"flex-1 min-w-0 flex items-center gap-2\">\n {runningStep ? (\n <>\n <SpinnerIcon className=\"w-3.5 h-3.5 animate-spin text-[var(--ash-accent)] flex-shrink-0\" />\n <span className=\"text-sm text-white/80 truncate\">\n {getToolLabel(runningStep.toolName, runningStep.summary)}\n </span>\n </>\n ) : hasError ? (\n <>\n <ErrorIcon className=\"w-3.5 h-3.5 text-red-500 flex-shrink-0\" />\n <span className=\"text-sm text-red-400 truncate\">Completed with errors</span>\n </>\n ) : (\n <>\n <CheckIcon className=\"w-3.5 h-3.5 text-[var(--ash-accent)] flex-shrink-0\" />\n <span className=\"text-sm text-white/70 truncate\">\n {completedSteps} step{completedSteps !== 1 ? 's' : ''} completed\n </span>\n </>\n )}\n </div>\n\n {/* Step counter badge */}\n <span className=\"text-xs px-1.5 py-0.5 rounded-full bg-white/10 text-white/50 flex-shrink-0\">\n {completedSteps}/{toolCalls.length}\n </span>\n </button>\n\n {/* Expanded content */}\n {isExpanded && (\n <div className=\"border-t border-white/10 ash-accordion-content\">\n <div className=\"divide-y divide-white/5\">\n {toolCalls.map((toolCall, index) => {\n const stepStatus = toStepStatus(toolCall.status);\n const startTime = toolCall.startedAt ? new Date(toolCall.startedAt).getTime() : 0;\n const endTime = toolCall.completedAt ? new Date(toolCall.completedAt).getTime() : 0;\n const hasDuration = startTime > 0 && endTime > 0;\n\n return (\n <div\n key={toolCall.id}\n className={cn(\n 'px-3 py-2 flex items-start gap-2',\n stepStatus === 'running' && 'bg-[var(--ash-accent)]/5',\n stepStatus === 'error' && 'bg-red-500/5'\n )}\n >\n {/* Step number and icon */}\n <div className=\"flex items-center gap-1.5 flex-shrink-0 pt-0.5\">\n <span className=\"text-xs text-white/40 w-4 text-right\">{index + 1}.</span>\n <StepIcon status={stepStatus} />\n </div>\n\n {/* Step content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span\n className={cn(\n 'text-sm',\n stepStatus === 'running' && 'text-[var(--ash-accent)]',\n stepStatus === 'success' && 'text-white/70',\n stepStatus === 'error' && 'text-red-400',\n stepStatus === 'pending' && 'text-white/40'\n )}\n >\n {getToolLabel(toolCall.toolName, toolCall.summary)}\n </span>\n\n {/* Duration for completed steps */}\n {hasDuration && (stepStatus === 'success' || stepStatus === 'error') && (\n <span className=\"text-xs text-white/40\">{formatDuration(startTime, endTime)}</span>\n )}\n </div>\n\n {/* Error message */}\n {toolCall.isError && toolCall.actionType && 'result' in toolCall.actionType && (\n <p className=\"text-xs mt-1 text-red-400/80 truncate\">\n {String((toolCall.actionType as { result?: { value?: unknown } }).result?.value || 'Error')}\n </p>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport default StepAccordion;\n","/**\n * @ash-cloud/ash-ui - Types\n *\n * Normalized types for structured tool call display in agentic UIs.\n * These types provide a unified representation for displaying tool calls\n * with their arguments and results together.\n */\n\nimport type { ReactNode } from 'react';\n\n// =============================================================================\n// Tool Status\n// =============================================================================\n\n/**\n * Status of a tool call execution\n */\nexport type ToolStatus = 'pending' | 'success' | 'failed';\n\n// =============================================================================\n// Action-Specific Result Types\n// =============================================================================\n\n/**\n * Result from a command/bash execution\n */\nexport interface CommandRunResult {\n exitCode?: number;\n success?: boolean;\n output?: string;\n}\n\n/**\n * Generic tool result that can be markdown or structured JSON\n */\nexport interface ToolResult {\n type: 'markdown' | 'json';\n value: unknown;\n}\n\n// =============================================================================\n// Action Types (Discriminated Union)\n// =============================================================================\n\n/**\n * Bash/command execution action\n */\nexport interface CommandRunAction {\n action: 'command_run';\n command: string;\n description?: string;\n result?: CommandRunResult;\n}\n\n/**\n * File read action\n */\nexport interface FileReadAction {\n action: 'file_read';\n path: string;\n offset?: number;\n limit?: number;\n}\n\n/**\n * File edit action\n */\nexport interface FileEditAction {\n action: 'file_edit';\n path: string;\n oldString?: string;\n newString?: string;\n replaceAll?: boolean;\n}\n\n/**\n * File write action\n */\nexport interface FileWriteAction {\n action: 'file_write';\n path: string;\n content?: string;\n}\n\n/**\n * Search/grep action\n */\nexport interface SearchAction {\n action: 'search';\n pattern: string;\n path?: string;\n glob?: string;\n type?: string;\n}\n\n/**\n * Glob/file pattern matching action\n */\nexport interface GlobAction {\n action: 'glob';\n pattern: string;\n path?: string;\n}\n\n/**\n * Web fetch action\n */\nexport interface WebFetchAction {\n action: 'web_fetch';\n url: string;\n prompt?: string;\n}\n\n/**\n * Web search action\n */\nexport interface WebSearchAction {\n action: 'web_search';\n query: string;\n}\n\n/**\n * MCP (Model Context Protocol) tool action\n */\nexport interface McpToolAction {\n action: 'mcp_tool';\n serverName: string;\n toolName: string;\n arguments?: unknown;\n result?: ToolResult;\n}\n\n/**\n * Generic/unknown tool action\n */\nexport interface GenericToolAction {\n action: 'generic_tool';\n toolName: string;\n arguments?: unknown;\n result?: ToolResult;\n}\n\n// =============================================================================\n// Todo Types\n// =============================================================================\n\n/**\n * Status of a todo item\n */\nexport type TodoStatus = 'pending' | 'in_progress' | 'completed';\n\n/**\n * A single todo item from TodoWrite tool\n */\nexport interface TodoItem {\n /** Task content - imperative form (e.g., \"Run tests\") */\n content: string;\n /** Current status of the todo */\n status: TodoStatus;\n /** Active form shown during execution (e.g., \"Running tests\") */\n activeForm: string;\n}\n\n/**\n * TodoWrite tool action - tracks task progress\n */\nexport interface TodoWriteAction {\n action: 'todo_write';\n /** All todos in the current list */\n todos: TodoItem[];\n /** Summary statistics */\n stats?: {\n total: number;\n completed: number;\n inProgress: number;\n pending: number;\n };\n}\n\n/**\n * Discriminated union of all action types\n */\nexport type ActionType =\n | CommandRunAction\n | FileReadAction\n | FileEditAction\n | FileWriteAction\n | SearchAction\n | GlobAction\n | WebFetchAction\n | WebSearchAction\n | McpToolAction\n | GenericToolAction\n | TodoWriteAction;\n\n// =============================================================================\n// Normalized Tool Call\n// =============================================================================\n\n/**\n * A normalized tool call that combines tool_use and tool_result data\n */\nexport interface NormalizedToolCall {\n /** Unique ID from the tool_use block */\n id: string;\n\n /** Original tool name (e.g., 'Bash', 'Read', 'mcp__server__tool') */\n toolName: string;\n\n /** Parsed action type with structured arguments and result */\n actionType: ActionType;\n\n /** Current execution status */\n status: ToolStatus;\n\n /** Human-readable one-liner summary */\n summary: string;\n\n /** When the tool call started */\n startedAt?: string;\n\n /** When the tool call completed */\n completedAt?: string;\n\n /** Whether this tool call resulted in an error */\n isError?: boolean;\n}\n\n// =============================================================================\n// Normalized Entry Types\n// =============================================================================\n\n/**\n * User message entry\n */\nexport interface UserMessageEntry {\n type: 'user_message';\n}\n\n/**\n * Assistant message entry\n */\nexport interface AssistantMessageEntry {\n type: 'assistant_message';\n}\n\n/**\n * Thinking/reasoning entry (extended thinking)\n */\nexport interface ThinkingEntry {\n type: 'thinking';\n}\n\n/**\n * Tool call entry with full tool call data\n */\nexport interface ToolCallEntry {\n type: 'tool_call';\n toolCall: NormalizedToolCall;\n}\n\n/**\n * Error entry\n */\nexport interface ErrorEntry {\n type: 'error';\n message: string;\n code?: string;\n}\n\n/**\n * Custom widget entry - rendered via consumer-provided render function\n *\n * Use this for interactive UI components like:\n * - Image grid selectors\n * - Product carousels\n * - Form inputs\n * - Data visualizations\n * - Any custom interactive widget\n *\n * @example\n * ```tsx\n * const entry: NormalizedEntry = {\n * id: 'widget-1',\n * entryType: {\n * type: 'widget',\n * widgetType: 'image-grid',\n * widgetData: { images: [...], selected: null },\n * },\n * content: 'Select an image',\n * };\n * ```\n */\nexport interface WidgetEntry {\n type: 'widget';\n /** Widget type identifier (e.g., 'image-grid', 'product-selector') */\n widgetType: string;\n /** Widget-specific data passed to the render function */\n widgetData: unknown;\n}\n\n/**\n * Discriminated union of all entry types\n */\nexport type NormalizedEntryType =\n | UserMessageEntry\n | AssistantMessageEntry\n | ThinkingEntry\n | ToolCallEntry\n | ErrorEntry\n | WidgetEntry;\n\n// =============================================================================\n// Normalized Entry\n// =============================================================================\n\n/**\n * A normalized conversation entry for display\n */\nexport interface NormalizedEntry {\n /** Unique entry ID */\n id: string;\n\n /** ISO timestamp */\n timestamp?: string;\n\n /** Entry type with type-specific data */\n entryType: NormalizedEntryType;\n\n /** Text content for display */\n content: string;\n}\n\n// =============================================================================\n// Type Guards\n// =============================================================================\n\nexport function isCommandRunAction(action: ActionType): action is CommandRunAction {\n return action.action === 'command_run';\n}\n\nexport function isFileReadAction(action: ActionType): action is FileReadAction {\n return action.action === 'file_read';\n}\n\nexport function isFileEditAction(action: ActionType): action is FileEditAction {\n return action.action === 'file_edit';\n}\n\nexport function isFileWriteAction(action: ActionType): action is FileWriteAction {\n return action.action === 'file_write';\n}\n\nexport function isSearchAction(action: ActionType): action is SearchAction {\n return action.action === 'search';\n}\n\nexport function isGlobAction(action: ActionType): action is GlobAction {\n return action.action === 'glob';\n}\n\nexport function isWebFetchAction(action: ActionType): action is WebFetchAction {\n return action.action === 'web_fetch';\n}\n\nexport function isWebSearchAction(action: ActionType): action is WebSearchAction {\n return action.action === 'web_search';\n}\n\nexport function isMcpToolAction(action: ActionType): action is McpToolAction {\n return action.action === 'mcp_tool';\n}\n\nexport function isGenericToolAction(action: ActionType): action is GenericToolAction {\n return action.action === 'generic_tool';\n}\n\nexport function isTodoWriteAction(action: ActionType): action is TodoWriteAction {\n return action.action === 'todo_write';\n}\n\nexport function isToolCallEntry(entry: NormalizedEntryType): entry is ToolCallEntry {\n return entry.type === 'tool_call';\n}\n\nexport function isErrorEntry(entry: NormalizedEntryType): entry is ErrorEntry {\n return entry.type === 'error';\n}\n\nexport function isWidgetEntry(entry: NormalizedEntryType): entry is WidgetEntry {\n return entry.type === 'widget';\n}\n\n// =============================================================================\n// Widget Rendering\n// =============================================================================\n\n/**\n * Props passed to the widget render function\n */\nexport interface WidgetRenderProps<T = unknown> {\n /** The widget entry being rendered */\n entry: NormalizedEntry;\n /** Widget type identifier */\n widgetType: string;\n /** Widget-specific data */\n widgetData: T;\n /** Callback for widget interactions (e.g., selection, submit) */\n onAction?: (action: WidgetAction) => void;\n}\n\n/**\n * Action dispatched from a widget interaction\n */\nexport interface WidgetAction {\n /** Action type (e.g., 'select', 'submit', 'cancel') */\n type: string;\n /** Widget type that dispatched the action */\n widgetType: string;\n /** Entry ID of the widget */\n entryId: string;\n /** Action-specific payload */\n payload?: unknown;\n}\n\n/**\n * Function type for rendering custom widgets\n *\n * @example\n * ```tsx\n * const renderWidget: WidgetRenderFunction = ({ widgetType, widgetData, onAction }) => {\n * switch (widgetType) {\n * case 'image-grid':\n * return (\n * <ImageGrid\n * images={widgetData.images}\n * onSelect={(id) => onAction?.({ type: 'select', widgetType, entryId, payload: { id } })}\n * />\n * );\n * case 'product-selector':\n * return <ProductSelector data={widgetData} onAction={onAction} />;\n * default:\n * return null;\n * }\n * };\n *\n * <MessageList entries={entries} renderWidget={renderWidget} />\n * ```\n */\nexport type WidgetRenderFunction = (props: WidgetRenderProps) => ReactNode;\n\n// =============================================================================\n// Log Types (for SandboxLogsPanel)\n// =============================================================================\n\nexport type LogLevel = 'info' | 'warn' | 'error' | 'debug';\nexport type LogCategory = 'setup' | 'skills' | 'execution' | 'process' | 'startup';\n\nexport interface LogEntry {\n timestamp: string;\n level: LogLevel;\n category: LogCategory;\n message: string;\n data?: Record<string, unknown>;\n}\n\n// =============================================================================\n// File Attachment\n// =============================================================================\n\nexport interface FileAttachment {\n name: string;\n type: string;\n size: number;\n base64: string;\n}\n\n// =============================================================================\n// Display Mode Configuration\n// =============================================================================\n\n/**\n * Display mode for tool calls in the chat interface\n *\n * - 'inline': Each tool call rendered inline as expandable cards (current behavior)\n * - 'compact': Single animated status line that updates with each tool call,\n * with accordion to expand and see execution details. Text streams unbroken.\n * - 'accordion': Simpler step-based accordion list that accumulates tool calls\n * with icons, labels, and durations (like Vidra's ThinkingIndicator).\n */\nexport type ToolDisplayMode = 'inline' | 'compact' | 'accordion';\n\n/**\n * Configuration for tool display behavior\n */\nexport interface ToolDisplayConfig {\n /**\n * Display mode for tool calls\n * @default 'inline'\n */\n mode: ToolDisplayMode;\n\n /**\n * For 'compact' mode: break into a new group every N tool calls\n * Set to 0 or undefined to never break (all tool calls in single group)\n * @default 0\n */\n breakEveryNToolCalls?: number;\n\n /**\n * Whether tool call groups start expanded\n * @default false\n */\n defaultExpanded?: boolean;\n\n /**\n * Animation duration for status line transitions (ms)\n * @default 300\n */\n animationDuration?: number;\n}\n\n/**\n * Default display configuration\n */\nexport const DEFAULT_DISPLAY_CONFIG: ToolDisplayConfig = {\n mode: 'inline',\n breakEveryNToolCalls: 0,\n defaultExpanded: false,\n animationDuration: 300,\n};\n\n// =============================================================================\n// Tool Execution Group (for compact mode)\n// =============================================================================\n\n/**\n * A group of consecutive tool calls that are displayed together\n * in compact mode. Text content before/after flows around the group.\n */\nexport interface ToolExecutionGroup {\n /** Unique ID for the group */\n id: string;\n\n /** Tool calls in this group (in order) */\n toolCalls: NormalizedToolCall[];\n\n /** Index of the currently active/latest tool call for status display */\n activeIndex: number;\n\n /** Whether all tool calls in this group have completed */\n isComplete: boolean;\n\n /** Overall status of the group */\n status: 'pending' | 'success' | 'partial_failure' | 'failed';\n}\n","import { createContext, useContext, useState, useCallback, useMemo, type ReactNode } from 'react';\nimport { DEFAULT_DISPLAY_CONFIG, type ToolDisplayConfig, type ToolDisplayMode } from '../types';\n\n/**\n * Context type for display mode configuration\n */\nexport interface DisplayModeContextType {\n /** Current display configuration */\n config: ToolDisplayConfig;\n\n /** Update the display mode */\n setMode: (mode: ToolDisplayMode) => void;\n\n /** Update the full configuration */\n setConfig: (config: Partial<ToolDisplayConfig>) => void;\n\n /** Toggle between 'inline' and 'compact' modes */\n toggleMode: () => void;\n}\n\nconst DisplayModeContext = createContext<DisplayModeContextType | null>(null);\n\nexport interface DisplayModeProviderProps {\n children: ReactNode;\n\n /** Initial display configuration */\n initialConfig?: Partial<ToolDisplayConfig>;\n}\n\n/**\n * Provider for display mode configuration.\n *\n * Wrap your chat component with this provider to enable\n * configurable tool call display modes.\n *\n * @example\n * ```tsx\n * <DisplayModeProvider initialConfig={{ mode: 'compact' }}>\n * <MessageList entries={entries} />\n * </DisplayModeProvider>\n * ```\n */\nexport function DisplayModeProvider({ children, initialConfig }: DisplayModeProviderProps) {\n const [config, setConfigState] = useState<ToolDisplayConfig>({\n ...DEFAULT_DISPLAY_CONFIG,\n ...initialConfig,\n });\n\n const setMode = useCallback((mode: ToolDisplayMode) => {\n setConfigState((prev) => ({ ...prev, mode }));\n }, []);\n\n const setConfig = useCallback((updates: Partial<ToolDisplayConfig>) => {\n setConfigState((prev) => ({ ...prev, ...updates }));\n }, []);\n\n const toggleMode = useCallback(() => {\n setConfigState((prev) => ({\n ...prev,\n mode: prev.mode === 'inline' ? 'compact' : 'inline',\n }));\n }, []);\n\n const value = useMemo(\n () => ({ config, setMode, setConfig, toggleMode }),\n [config, setMode, setConfig, toggleMode]\n );\n\n return (\n <DisplayModeContext.Provider value={value}>\n {children}\n </DisplayModeContext.Provider>\n );\n}\n\n/**\n * Hook to access display mode configuration.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { config, toggleMode } = useDisplayMode();\n *\n * return (\n * <button onClick={toggleMode}>\n * Mode: {config.mode}\n * </button>\n * );\n * }\n * ```\n */\nexport function useDisplayMode(): DisplayModeContextType {\n const context = useContext(DisplayModeContext);\n\n if (!context) {\n // Return a default context for use outside a provider\n return {\n config: DEFAULT_DISPLAY_CONFIG,\n setMode: () => {},\n setConfig: () => {},\n toggleMode: () => {},\n };\n }\n\n return context;\n}\n\n/**\n * Hook to get just the current config (for components that only read)\n */\nexport function useDisplayConfig(): ToolDisplayConfig {\n const { config } = useDisplayMode();\n return config;\n}\n","import { useMemo, useCallback } from 'react';\nimport type { NormalizedEntry, ToolDisplayConfig, WidgetRenderFunction, WidgetAction, WidgetEntry } from '../types';\nimport { cn, groupEntriesForCompactMode, extractToolCallsFromGroup } from '../utils';\nimport { MessageEntry } from './MessageEntry';\nimport { LoadingIndicator } from './LoadingIndicator';\nimport { StreamingText } from './StreamingText';\nimport { ToolExecutionGroup } from './ToolExecutionGroup';\nimport { StepAccordion } from './StepAccordion';\nimport { BotIcon } from '../icons';\nimport { useDisplayConfig } from './DisplayModeContext';\n\nexport interface MessageListProps {\n /** Normalized conversation entries to display */\n entries: NormalizedEntry[];\n /** Whether a response is currently loading */\n loading?: boolean;\n /** Streaming text content (displayed during real-time streaming) */\n streamingContent?: string;\n /** Display configuration override (uses context if not provided) */\n displayConfig?: ToolDisplayConfig;\n /** Callback when user selects an option from assistant message */\n onOptionSelect?: (optionText: string) => void;\n /**\n * Custom render function for widget entries.\n * When provided, widget entries will be rendered using this function.\n *\n * @example\n * ```tsx\n * <MessageList\n * entries={entries}\n * renderWidget={({ widgetType, widgetData, onAction }) => {\n * if (widgetType === 'image-grid') {\n * return <ImageGrid data={widgetData} onSelect={onAction} />;\n * }\n * return null;\n * }}\n * />\n * ```\n */\n renderWidget?: WidgetRenderFunction;\n /**\n * Callback for widget interactions (e.g., selection, submit).\n * Called when widgets dispatch actions via their onAction callback.\n */\n onWidgetAction?: (action: WidgetAction) => void;\n /** Additional class names */\n className?: string;\n}\n\n/**\n * MessageList - Display a list of normalized message entries\n *\n * Handles various entry types including user messages, assistant messages,\n * tool calls, thinking, and errors. Also supports streaming content display.\n *\n * Supports two display modes:\n * - 'inline': Each tool call rendered as individual expandable cards (default)\n * - 'compact': Consecutive tool calls grouped into a single accordion with\n * an animated status line showing the current tool\n *\n * Uses glassmorphism dark theme styling with animated entries.\n *\n * @example\n * ```tsx\n * <MessageList entries={normalizedEntries} />\n * <MessageList entries={entries} loading streamingContent={text} />\n * <MessageList entries={entries} displayConfig={{ mode: 'compact' }} />\n * ```\n */\nexport function MessageList({\n entries,\n loading,\n streamingContent,\n displayConfig: displayConfigProp,\n onOptionSelect,\n renderWidget,\n onWidgetAction,\n className,\n}: MessageListProps) {\n // Use provided config or context config\n const contextConfig = useDisplayConfig();\n const config = displayConfigProp || contextConfig;\n\n // Create a stable action handler that wraps onWidgetAction\n const createWidgetActionHandler = useCallback(\n (entryId: string, widgetType: string) => {\n if (!onWidgetAction) return undefined;\n return (action: WidgetAction) => {\n onWidgetAction({\n ...action,\n entryId,\n widgetType,\n });\n };\n },\n [onWidgetAction]\n );\n\n // Group entries based on display mode\n const groupedEntries = useMemo(() => {\n if (config.mode === 'inline') {\n // Inline mode - return entries as-is (wrapped in single type)\n return entries.map((entry) => ({\n type: 'single' as const,\n entry,\n id: entry.id,\n }));\n }\n\n // Compact and accordion modes - group consecutive tool calls\n return groupEntriesForCompactMode(entries, config);\n }, [entries, config]);\n\n return (\n <div className={cn('flex-1 overflow-y-auto p-4 space-y-4 ash-scrollbar', className)}>\n {groupedEntries.map((groupedEntry) => {\n if (groupedEntry.type === 'single') {\n const entry = groupedEntry.entry;\n\n // Handle widget entries with custom render function\n if (entry.entryType.type === 'widget' && renderWidget) {\n const widgetEntry = entry.entryType as WidgetEntry;\n const widgetContent = renderWidget({\n entry,\n widgetType: widgetEntry.widgetType,\n widgetData: widgetEntry.widgetData,\n onAction: createWidgetActionHandler(entry.id, widgetEntry.widgetType),\n });\n\n // If renderWidget returns null, fall through to default rendering\n if (widgetContent !== null) {\n return (\n <div key={entry.id} className=\"ash-animate-fade-in\">\n {widgetContent}\n </div>\n );\n }\n }\n\n return <MessageEntry key={entry.id} entry={entry} onOptionSelect={onOptionSelect} />;\n }\n\n // Tool group - render as ToolExecutionGroup or StepAccordion based on mode\n const toolCalls = extractToolCallsFromGroup(groupedEntry.entries);\n return (\n <div key={groupedEntry.id} className=\"flex gap-3 ash-animate-fade-in\">\n <div className=\"w-7 h-7 rounded-full bg-[var(--ash-accent)]/20 flex items-center justify-center shrink-0\">\n <BotIcon className=\"w-4 h-4 text-[var(--ash-accent)]\" />\n </div>\n <div className=\"flex-1\">\n {config.mode === 'accordion' ? (\n <StepAccordion\n toolCalls={toolCalls}\n defaultExpanded={config.defaultExpanded}\n />\n ) : (\n <ToolExecutionGroup\n toolCalls={toolCalls}\n defaultExpanded={config.defaultExpanded}\n animationDuration={config.animationDuration}\n />\n )}\n </div>\n </div>\n );\n })}\n\n {streamingContent && (\n <div className=\"flex gap-3 ash-animate-fade-in\">\n <div className=\"w-7 h-7 rounded-full bg-[var(--ash-accent)]/20 flex items-center justify-center shrink-0\">\n <BotIcon className=\"w-4 h-4 text-[var(--ash-accent)]\" />\n </div>\n <div className=\"flex-1 max-w-[85%]\">\n <div className=\"rounded-xl p-3 bg-white/5 text-white/80\">\n <StreamingText content={streamingContent} isStreaming />\n </div>\n </div>\n </div>\n )}\n\n {loading && !streamingContent && (\n <div className=\"flex gap-3 ash-animate-fade-in\">\n <div className=\"w-7 h-7 rounded-full bg-[var(--ash-accent)]/20 flex items-center justify-center shrink-0\">\n <BotIcon className=\"w-4 h-4 text-[var(--ash-accent)]\" />\n </div>\n <div className=\"rounded-xl p-3 bg-white/5\">\n <LoadingIndicator variant=\"dots\" />\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport default MessageList;\n","import { useState } from 'react';\nimport type { LogEntry, LogLevel, LogCategory } from '../types';\nimport { cn, formatTimestamp } from '../utils';\nimport {\n ChevronDownIcon,\n ChevronRightIcon,\n InfoIcon,\n AlertTriangleIcon,\n AlertCircleIcon,\n BugIcon,\n TerminalIcon,\n} from '../icons';\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nfunction getLevelIcon(level: LogLevel) {\n switch (level) {\n case 'info':\n return <InfoIcon className=\"w-3.5 h-3.5\" />;\n case 'warn':\n return <AlertTriangleIcon className=\"w-3.5 h-3.5\" />;\n case 'error':\n return <AlertCircleIcon className=\"w-3.5 h-3.5\" />;\n case 'debug':\n return <BugIcon className=\"w-3.5 h-3.5\" />;\n }\n}\n\nfunction getLevelColor(level: LogLevel) {\n switch (level) {\n case 'info':\n return 'text-blue-400';\n case 'warn':\n return 'text-yellow-500';\n case 'error':\n return 'text-red-400';\n case 'debug':\n return 'text-white/50';\n }\n}\n\nfunction getLevelBgColor(level: LogLevel) {\n switch (level) {\n case 'info':\n return 'bg-blue-900/20';\n case 'warn':\n return 'bg-yellow-900/20';\n case 'error':\n return 'bg-red-900/20';\n case 'debug':\n return 'bg-white/5';\n }\n}\n\nfunction getCategoryLabel(category: LogCategory) {\n switch (category) {\n case 'setup':\n return 'Setup';\n case 'skills':\n return 'Skills';\n case 'execution':\n return 'Execution';\n case 'process':\n return 'Process';\n case 'startup':\n return 'Startup';\n }\n}\n\n// =============================================================================\n// Log Entry Component\n// =============================================================================\n\ninterface LogEntryRowProps {\n log: LogEntry;\n}\n\nfunction LogEntryRow({ log }: LogEntryRowProps) {\n const [isExpanded, setIsExpanded] = useState(false);\n const hasData = log.data && Object.keys(log.data).length > 0;\n\n return (\n <div\n className={cn(\n 'px-3 py-2 border-b border-white/10 last:border-b-0',\n getLevelBgColor(log.level)\n )}\n >\n <div\n className={cn('flex items-start gap-2', hasData && 'cursor-pointer')}\n onClick={() => hasData && setIsExpanded(!isExpanded)}\n >\n {/* Expand indicator */}\n <div className=\"w-4 flex-shrink-0 pt-0.5\">\n {hasData &&\n (isExpanded ? (\n <ChevronDownIcon className=\"w-3 h-3 text-white/40\" />\n ) : (\n <ChevronRightIcon className=\"w-3 h-3 text-white/40\" />\n ))}\n </div>\n\n {/* Level icon */}\n <div className={cn('flex-shrink-0 pt-0.5', getLevelColor(log.level))}>\n {getLevelIcon(log.level)}\n </div>\n\n {/* Timestamp */}\n <span className=\"text-xs text-white/40 font-mono flex-shrink-0 pt-0.5\">\n {formatTimestamp(log.timestamp)}\n </span>\n\n {/* Category badge */}\n <span className=\"text-xs px-1.5 py-0.5 rounded bg-white/10 text-white/70 font-medium flex-shrink-0\">\n {getCategoryLabel(log.category)}\n </span>\n\n {/* Message */}\n <span className=\"text-sm text-white/80 flex-1 break-words\">\n {log.message}\n </span>\n </div>\n\n {/* Expanded data */}\n {isExpanded && hasData && (\n <div className=\"mt-2 ml-6 pl-4 border-l-2 border-white/20\">\n <pre className=\"text-xs text-white/50 font-mono whitespace-pre-wrap overflow-x-auto\">\n {JSON.stringify(log.data, null, 2)}\n </pre>\n </div>\n )}\n </div>\n );\n}\n\n// =============================================================================\n// LogsPanel Component\n// =============================================================================\n\nexport interface LogsPanelProps {\n logs: LogEntry[];\n title?: string;\n isLoading?: boolean;\n defaultCollapsed?: boolean;\n maxHeight?: number;\n className?: string;\n}\n\n/**\n * LogsPanel - Collapsible panel for displaying log entries\n *\n * Features:\n * - Collapsible header with log count\n * - Error/warning count badges\n * - Level-based coloring and icons\n * - Expandable entries with JSON data\n *\n * @example\n * ```tsx\n * <LogsPanel logs={logEntries} />\n * <LogsPanel logs={logs} title=\"Execution Logs\" defaultCollapsed={false} />\n * ```\n */\nexport function LogsPanel({\n logs,\n title = 'Logs',\n isLoading,\n defaultCollapsed = true,\n maxHeight = 256,\n className,\n}: LogsPanelProps) {\n const [isCollapsed, setIsCollapsed] = useState(defaultCollapsed);\n\n const errorCount = logs.filter((l) => l.level === 'error').length;\n const warnCount = logs.filter((l) => l.level === 'warn').length;\n\n if (logs.length === 0 && !isLoading) {\n return null;\n }\n\n return (\n <div\n className={cn(\n 'border-t border-white/10 bg-[var(--ash-surface-dark,#0a0a0a)]',\n className\n )}\n >\n {/* Header */}\n <button\n onClick={() => setIsCollapsed(!isCollapsed)}\n className=\"w-full flex items-center justify-between px-4 py-2 hover:bg-white/5 transition-colors\"\n >\n <div className=\"flex items-center gap-2\">\n <TerminalIcon className=\"w-4 h-4 text-white/50\" />\n <span className=\"text-sm font-medium text-white/80\">{title}</span>\n <span className=\"text-xs text-white/40\">({logs.length})</span>\n {errorCount > 0 && (\n <span className=\"text-xs px-1.5 py-0.5 rounded bg-red-900/50 text-red-400 font-medium\">\n {errorCount} error{errorCount > 1 ? 's' : ''}\n </span>\n )}\n {warnCount > 0 && (\n <span className=\"text-xs px-1.5 py-0.5 rounded bg-yellow-900/50 text-yellow-400 font-medium\">\n {warnCount} warning{warnCount > 1 ? 's' : ''}\n </span>\n )}\n {isLoading && (\n <span className=\"text-xs text-white/40 animate-pulse\">\n Loading...\n </span>\n )}\n </div>\n {isCollapsed ? (\n <ChevronRightIcon className=\"w-4 h-4 text-white/40\" />\n ) : (\n <ChevronDownIcon className=\"w-4 h-4 text-white/40\" />\n )}\n </button>\n\n {/* Log entries */}\n {!isCollapsed && (\n <div\n className=\"overflow-y-auto border-t border-white/10\"\n style={{ maxHeight }}\n >\n {logs.length === 0 ? (\n <div className=\"px-4 py-6 text-center text-sm text-white/50\">\n No logs yet\n </div>\n ) : (\n logs.map((log, index) => (\n <LogEntryRow key={`${log.timestamp}-${index}`} log={log} />\n ))\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport default LogsPanel;\n","import { useMemo } from 'react';\nimport type { TodoItem, TodoStatus as TodoStatusType } from '../types';\nimport { cn } from '../utils';\nimport { CheckCircleIcon, CircleIcon, LoaderIcon } from '../icons';\n\n// =============================================================================\n// TodoStatusIcon Component\n// =============================================================================\n\ninterface TodoStatusIconProps {\n status: TodoStatusType;\n className?: string;\n}\n\nfunction TodoStatusIcon({ status, className = 'w-4 h-4' }: TodoStatusIconProps) {\n switch (status) {\n case 'completed':\n return <CheckCircleIcon className={cn(className, 'text-emerald-400')} />;\n case 'in_progress':\n return <LoaderIcon className={cn(className, 'text-yellow-400 animate-spin')} />;\n case 'pending':\n default:\n return <CircleIcon className={cn(className, 'text-white/30')} />;\n }\n}\n\n// =============================================================================\n// TodoListItem Component\n// =============================================================================\n\ninterface TodoListItemProps {\n todo: TodoItem;\n index: number;\n compact?: boolean;\n}\n\nfunction TodoListItem({ todo, index, compact = false }: TodoListItemProps) {\n const displayText = todo.status === 'in_progress' ? todo.activeForm : todo.content;\n\n return (\n <div\n className={cn(\n 'flex items-start gap-2 transition-all duration-200',\n compact ? 'py-1' : 'py-1.5',\n todo.status === 'completed' && 'opacity-60',\n todo.status === 'in_progress' && 'bg-yellow-500/5 -mx-2 px-2 rounded-md'\n )}\n >\n <TodoStatusIcon status={todo.status} className={compact ? 'w-3.5 h-3.5 mt-0.5' : 'w-4 h-4 mt-0.5'} />\n <span\n className={cn(\n 'flex-1 text-white/80',\n compact ? 'text-xs' : 'text-sm',\n todo.status === 'completed' && 'line-through text-white/50'\n )}\n >\n {!compact && <span className=\"text-white/40 mr-1.5\">{index + 1}.</span>}\n {displayText}\n </span>\n </div>\n );\n}\n\n// =============================================================================\n// TodoProgress Component\n// =============================================================================\n\ninterface TodoProgressProps {\n completed: number;\n total: number;\n className?: string;\n}\n\nfunction TodoProgress({ completed, total, className }: TodoProgressProps) {\n const percentage = total > 0 ? Math.round((completed / total) * 100) : 0;\n\n return (\n <div className={cn('flex items-center gap-2', className)}>\n <div className=\"flex-1 h-1.5 bg-white/10 rounded-full overflow-hidden\">\n <div\n className=\"h-full bg-emerald-400 rounded-full transition-all duration-500 ease-out\"\n style={{ width: `${percentage}%` }}\n />\n </div>\n <span className=\"text-xs text-white/50 tabular-nums min-w-[3rem] text-right\">\n {completed}/{total}\n </span>\n </div>\n );\n}\n\n// =============================================================================\n// TodoPanel Component\n// =============================================================================\n\nexport interface TodoPanelProps {\n /** List of todo items */\n todos: TodoItem[];\n /** Optional title for the panel */\n title?: string;\n /** Show in compact mode (less padding, smaller text) */\n compact?: boolean;\n /** Show progress bar */\n showProgress?: boolean;\n /** Additional class names */\n className?: string;\n}\n\n/**\n * TodoPanel - Display a list of todos with status indicators\n *\n * Features:\n * - Status icons (pending/in_progress/completed)\n * - Progress bar showing completion\n * - Compact mode for inline display\n * - Animated transitions\n *\n * @example\n * ```tsx\n * <TodoPanel todos={todos} />\n * <TodoPanel todos={todos} title=\"Task Progress\" showProgress />\n * <TodoPanel todos={todos} compact />\n * ```\n */\nexport function TodoPanel({\n todos,\n title,\n compact = false,\n showProgress = true,\n className,\n}: TodoPanelProps) {\n const stats = useMemo(() => {\n return {\n total: todos.length,\n completed: todos.filter((t) => t.status === 'completed').length,\n inProgress: todos.filter((t) => t.status === 'in_progress').length,\n pending: todos.filter((t) => t.status === 'pending').length,\n };\n }, [todos]);\n\n if (todos.length === 0) {\n return null;\n }\n\n return (\n <div\n className={cn(\n 'rounded-lg border border-white/10 bg-white/5 overflow-hidden',\n className\n )}\n >\n {/* Header */}\n {(title || showProgress) && (\n <div className={cn('border-b border-white/5', compact ? 'px-2 py-1.5' : 'px-3 py-2')}>\n {title && (\n <div className={cn('font-medium text-white/90 mb-1.5', compact ? 'text-xs' : 'text-sm')}>\n {title}\n </div>\n )}\n {showProgress && (\n <TodoProgress completed={stats.completed} total={stats.total} />\n )}\n </div>\n )}\n\n {/* Todo List */}\n <div className={cn(compact ? 'px-2 py-1.5' : 'px-3 py-2')}>\n {todos.map((todo, index) => (\n <TodoListItem\n key={`${todo.content}-${index}`}\n todo={todo}\n index={index}\n compact={compact}\n />\n ))}\n </div>\n\n {/* Stats Footer */}\n {!compact && stats.inProgress > 0 && (\n <div className=\"px-3 py-2 border-t border-white/5 bg-yellow-500/5\">\n <div className=\"flex items-center gap-2 text-xs text-yellow-400\">\n <LoaderIcon className=\"w-3 h-3 animate-spin\" />\n <span>\n {stats.inProgress} task{stats.inProgress !== 1 ? 's' : ''} in progress\n </span>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport default TodoPanel;\n","'use client';\n\nimport { useState, useCallback, type KeyboardEvent } from 'react';\nimport { cn } from '../utils';\n\nexport interface EnvVarsPanelProps {\n /** Current environment variables */\n envVars: Record<string, string>;\n /** Callback when environment variables change */\n onChange: (envVars: Record<string, string>) => void;\n /** Whether the panel is collapsed initially (default: true) */\n defaultCollapsed?: boolean;\n /** Additional class name */\n className?: string;\n /** Label for the panel header */\n label?: string;\n /** Helper text shown below the input */\n helperText?: string;\n}\n\n/**\n * EnvVarsPanel - Collapsible panel for managing environment variables\n *\n * Provides a UI for adding, viewing, and removing environment variables.\n * Commonly used to set environment variables for sandbox/agent execution.\n *\n * @example\n * ```tsx\n * function ChatSettings() {\n * const [envVars, setEnvVars] = useState<Record<string, string>>({});\n *\n * return (\n * <EnvVarsPanel\n * envVars={envVars}\n * onChange={setEnvVars}\n * helperText=\"These variables will be available in the sandbox.\"\n * />\n * );\n * }\n * ```\n */\nexport function EnvVarsPanel({\n envVars,\n onChange,\n defaultCollapsed = true,\n className,\n label = 'Environment Variables',\n helperText = 'These environment variables will be available in the sandbox for new sessions.',\n}: EnvVarsPanelProps) {\n const [expanded, setExpanded] = useState(!defaultCollapsed);\n const [newEnvKey, setNewEnvKey] = useState('');\n const [newEnvValue, setNewEnvValue] = useState('');\n\n const hasEnvVars = Object.keys(envVars).length > 0;\n\n const handleAddEnvVar = useCallback(() => {\n const key = newEnvKey.trim();\n const val = newEnvValue.trim();\n if (key) {\n onChange({ ...envVars, [key]: val });\n setNewEnvKey('');\n setNewEnvValue('');\n }\n }, [envVars, newEnvKey, newEnvValue, onChange]);\n\n const handleRemoveEnvVar = useCallback(\n (key: string) => {\n const newEnvVars = { ...envVars };\n delete newEnvVars[key];\n onChange(newEnvVars);\n },\n [envVars, onChange]\n );\n\n const handleEnvKeyDown = useCallback(\n (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleAddEnvVar();\n }\n },\n [handleAddEnvVar]\n );\n\n return (\n <div className={cn('ash-env-vars-panel', className)}>\n {/* Header toggle */}\n <button\n type=\"button\"\n onClick={() => setExpanded(!expanded)}\n className=\"ash-env-vars-header\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn('ash-env-vars-chevron', expanded && 'ash-env-vars-chevron-expanded')}\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n <span className=\"ash-env-vars-label\">{label}</span>\n {hasEnvVars && !expanded && (\n <span className=\"ash-env-vars-badge\">{Object.keys(envVars).length}</span>\n )}\n </button>\n\n {/* Expanded content */}\n {expanded && (\n <div className=\"ash-env-vars-content\">\n {/* Existing env vars */}\n {Object.entries(envVars).map(([key, val]) => (\n <div key={key} className=\"ash-env-vars-item\">\n <span className=\"ash-env-vars-key\">{key}</span>\n <span className=\"ash-env-vars-equals\">=</span>\n <span className=\"ash-env-vars-value\">{val || '(empty)'}</span>\n <button\n type=\"button\"\n onClick={() => handleRemoveEnvVar(key)}\n className=\"ash-env-vars-remove\"\n title=\"Remove variable\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"w-4 h-4\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n </div>\n ))}\n\n {/* Add new env var */}\n <div className=\"ash-env-vars-add\">\n <input\n type=\"text\"\n value={newEnvKey}\n onChange={(e) =>\n setNewEnvKey(e.target.value.toUpperCase().replace(/[^A-Z0-9_]/g, ''))\n }\n onKeyDown={handleEnvKeyDown}\n placeholder=\"KEY\"\n className=\"ash-env-vars-input ash-env-vars-input-key\"\n />\n <span className=\"ash-env-vars-equals\">=</span>\n <input\n type=\"text\"\n value={newEnvValue}\n onChange={(e) => setNewEnvValue(e.target.value)}\n onKeyDown={handleEnvKeyDown}\n placeholder=\"value\"\n className=\"ash-env-vars-input ash-env-vars-input-value\"\n />\n <button\n type=\"button\"\n onClick={handleAddEnvVar}\n disabled={!newEnvKey.trim()}\n className=\"ash-env-vars-add-button\"\n >\n Add\n </button>\n </div>\n\n {helperText && <p className=\"ash-env-vars-helper\">{helperText}</p>}\n </div>\n )}\n </div>\n );\n}\n\nexport default EnvVarsPanel;\n","'use client';\n\nimport { useDisplayMode } from './DisplayModeContext';\nimport { cn } from '../utils';\nimport type { ToolDisplayMode } from '../types';\n\nexport interface DisplayModeToggleProps {\n /** Additional class name */\n className?: string;\n /** Show label text (default: true) */\n showLabel?: boolean;\n /** Custom labels for modes */\n labels?: {\n inline?: string;\n compact?: string;\n accordion?: string;\n };\n /** Which modes to cycle through (default: all three) */\n modes?: ToolDisplayMode[];\n}\n\n/**\n * DisplayModeToggle - Button to cycle through display modes\n *\n * Uses the DisplayModeContext to cycle through 'inline', 'compact', and 'accordion' modes.\n * Must be used within a DisplayModeProvider.\n *\n * @example\n * ```tsx\n * function ChatHeader() {\n * return (\n * <header>\n * <h1>Chat</h1>\n * <DisplayModeToggle />\n * </header>\n * );\n * }\n *\n * function App() {\n * return (\n * <DisplayModeProvider>\n * <ChatHeader />\n * <MessageList entries={entries} />\n * </DisplayModeProvider>\n * );\n * }\n * ```\n */\nexport function DisplayModeToggle({\n className,\n showLabel = true,\n labels = { inline: 'Inline', compact: 'Compact', accordion: 'Steps' },\n modes = ['inline', 'compact', 'accordion'],\n}: DisplayModeToggleProps) {\n const { config, setMode } = useDisplayMode();\n\n const currentMode = config.mode;\n const currentIndex = modes.indexOf(currentMode);\n // If current mode not in modes array, start from first mode\n const effectiveIndex = currentIndex === -1 ? 0 : currentIndex;\n const nextIndex = (effectiveIndex + 1) % modes.length;\n const nextMode = modes[nextIndex] as ToolDisplayMode;\n\n const handleClick = () => {\n setMode(nextMode);\n };\n\n const getIcon = (mode: ToolDisplayMode) => {\n switch (mode) {\n case 'inline':\n return (\n <svg\n className=\"ash-display-mode-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5\"\n />\n </svg>\n );\n case 'compact':\n return (\n <svg\n className=\"ash-display-mode-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M3.75 6.75h16.5M3.75 12h16.5M12 17.25h8.25\"\n />\n </svg>\n );\n case 'accordion':\n return (\n <svg\n className=\"ash-display-mode-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M8.25 6.75h12M8.25 12h12M8.25 17.25h12M3.75 6.75h.007v.008H3.75V6.75zm.375 0a.375.375 0 11-.75 0 .375.375 0 01.75 0zM3.75 12h.007v.008H3.75V12zm.375 0a.375.375 0 11-.75 0 .375.375 0 01.75 0zm-.375 5.25h.007v.008H3.75v-.008zm.375 0a.375.375 0 11-.75 0 .375.375 0 01.75 0z\"\n />\n </svg>\n );\n }\n };\n\n const getLabel = (mode: ToolDisplayMode) => {\n return labels[mode] || mode.charAt(0).toUpperCase() + mode.slice(1);\n };\n\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n className={cn('ash-display-mode-toggle', className)}\n title={`Switch to ${nextMode} mode`}\n >\n {getIcon(currentMode)}\n {showLabel && <span className=\"ash-display-mode-label\">{getLabel(currentMode)}</span>}\n </button>\n );\n}\n\nexport default DisplayModeToggle;\n","'use client';\n\nimport { useEffect, useState, useRef } from 'react';\nimport { cn } from '../utils';\n\nexport interface TypewriterTextProps {\n /** Words to cycle through */\n words?: string[];\n /** Typing speed in ms per character */\n typeSpeed?: number;\n /** Pause before erasing in ms */\n pauseBeforeErase?: number;\n /** Erasing speed in ms per character */\n eraseSpeed?: number;\n /** Pause before typing next word in ms */\n pauseBeforeType?: number;\n /** Whether to show a blinking cursor */\n showCursor?: boolean;\n /** Additional class names */\n className?: string;\n /** Cursor class names */\n cursorClassName?: string;\n}\n\n// Default words to cycle through when thinking\nconst DEFAULT_WORDS = [\n 'Thinking',\n 'Reasoning',\n 'Pondering',\n 'Analyzing',\n 'Considering',\n 'Processing',\n 'Evaluating',\n];\n\n/**\n * TypewriterText - Animated typing component that cycles through words\n *\n * Creates a typewriter effect that types out words character by character,\n * pauses, then erases them before moving to the next word.\n *\n * @example\n * ```tsx\n * // Default thinking words\n * <TypewriterText />\n *\n * // Custom words\n * <TypewriterText words={['Loading', 'Processing', 'Almost done']} />\n *\n * // Custom speeds\n * <TypewriterText typeSpeed={30} pauseBeforeErase={1000} />\n * ```\n */\nexport function TypewriterText({\n words = DEFAULT_WORDS,\n typeSpeed = 50,\n pauseBeforeErase = 800,\n eraseSpeed = 30,\n pauseBeforeType = 200,\n showCursor = true,\n className,\n cursorClassName,\n}: TypewriterTextProps) {\n const [displayText, setDisplayText] = useState('');\n const [wordIndex, setWordIndex] = useState(0);\n const [isTyping, setIsTyping] = useState(true);\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n useEffect(() => {\n const currentWord = words[wordIndex] ?? '';\n\n if (isTyping) {\n // Typing phase\n if (displayText.length < currentWord.length) {\n timeoutRef.current = setTimeout(() => {\n setDisplayText(currentWord.slice(0, displayText.length + 1));\n }, typeSpeed);\n } else {\n // Finished typing, pause then erase\n timeoutRef.current = setTimeout(() => {\n setIsTyping(false);\n }, pauseBeforeErase);\n }\n } else {\n // Erasing phase\n if (displayText.length > 0) {\n timeoutRef.current = setTimeout(() => {\n setDisplayText(displayText.slice(0, -1));\n }, eraseSpeed);\n } else {\n // Finished erasing, move to next word\n timeoutRef.current = setTimeout(() => {\n setWordIndex((prev) => (prev + 1) % words.length);\n setIsTyping(true);\n }, pauseBeforeType);\n }\n }\n\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, [displayText, wordIndex, isTyping, words, typeSpeed, pauseBeforeErase, eraseSpeed, pauseBeforeType]);\n\n return (\n <span className={cn('inline-flex items-center', className)}>\n <span>{displayText}</span>\n {showCursor && (\n <span\n className={cn(\n 'w-0.5 h-4 bg-current ml-0.5 animate-pulse',\n cursorClassName\n )}\n />\n )}\n </span>\n );\n}\n\nexport default TypewriterText;\n","import { createContext, useContext, useState, useEffect, useCallback, ReactNode } from 'react';\n\nexport type Theme = 'light' | 'dark';\n\nexport interface ThemeContextType {\n theme: Theme;\n toggleTheme: () => void;\n setTheme: (theme: Theme) => void;\n}\n\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined);\n\nconst DEFAULT_STORAGE_KEY = 'ash-ui-theme';\n\nexport interface ThemeProviderProps {\n children: ReactNode;\n /** Default theme to use when no stored preference exists. Defaults to system preference, then 'light'. */\n defaultTheme?: Theme;\n /** localStorage key for persisting theme. Defaults to 'ash-ui-theme'. */\n storageKey?: string;\n /** Whether to listen for system theme changes. Defaults to true. */\n listenToSystemChanges?: boolean;\n}\n\n/**\n * ThemeProvider - Unified theme management for agentic UIs.\n *\n * Features:\n * - Persists theme choice to localStorage\n * - Respects system preference when no stored preference exists\n * - Listens for system theme changes (configurable)\n * - Adds/removes 'dark' class on document root for Tailwind CSS\n *\n * @example\n * ```tsx\n * <ThemeProvider>\n * <App />\n * </ThemeProvider>\n *\n * // With custom defaults\n * <ThemeProvider defaultTheme=\"dark\" storageKey=\"my-theme\">\n * <App />\n * </ThemeProvider>\n * ```\n */\nexport function ThemeProvider({\n children,\n defaultTheme,\n storageKey = DEFAULT_STORAGE_KEY,\n listenToSystemChanges = true,\n}: ThemeProviderProps) {\n const [theme, setThemeState] = useState<Theme>(() => {\n if (typeof window !== 'undefined') {\n const stored = localStorage.getItem(storageKey);\n if (stored === 'dark' || stored === 'light') {\n return stored;\n }\n if (!defaultTheme && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n return 'dark';\n }\n }\n return defaultTheme ?? 'light';\n });\n\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n useEffect(() => {\n if (!mounted) return;\n\n const root = document.documentElement;\n if (theme === 'dark') {\n root.classList.add('dark');\n } else {\n root.classList.remove('dark');\n }\n localStorage.setItem(storageKey, theme);\n }, [theme, mounted, storageKey]);\n\n useEffect(() => {\n if (!listenToSystemChanges || typeof window === 'undefined') return;\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = (e: MediaQueryListEvent) => {\n const stored = localStorage.getItem(storageKey);\n if (!stored) {\n setThemeState(e.matches ? 'dark' : 'light');\n }\n };\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }, [storageKey, listenToSystemChanges]);\n\n const toggleTheme = useCallback(() => {\n setThemeState((prev) => (prev === 'light' ? 'dark' : 'light'));\n }, []);\n\n const setTheme = useCallback((newTheme: Theme) => {\n setThemeState(newTheme);\n }, []);\n\n if (!mounted) {\n return (\n <ThemeContext.Provider value={{ theme: defaultTheme ?? 'light', toggleTheme, setTheme }}>\n {children}\n </ThemeContext.Provider>\n );\n }\n\n return (\n <ThemeContext.Provider value={{ theme, toggleTheme, setTheme }}>\n {children}\n </ThemeContext.Provider>\n );\n}\n\nexport function useTheme(): ThemeContextType {\n const context = useContext(ThemeContext);\n if (context === undefined) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n}\n","/**\n * ASH UI Design Tokens\n *\n * Single source of truth for colors, spacing, animations, and other design values.\n * Used by both ash-ui components (via Tailwind/CSS) and the embed widget (via inline styles).\n *\n * @example\n * ```ts\n * import { colors, animations, shadows } from '@ash-cloud/ash-ui/tokens';\n *\n * // In embed widget (inline styles)\n * const style = { backgroundColor: colors.surface.dark };\n *\n * // In Tailwind config\n * module.exports = {\n * theme: {\n * extend: {\n * colors: colors,\n * }\n * }\n * };\n * ```\n */\n\n// =============================================================================\n// Colors\n// =============================================================================\n\nexport const colors = {\n // Primary accent color (lime green)\n accent: {\n DEFAULT: '#ccff00',\n 50: '#f8ffe5',\n 100: '#eeffb8',\n 200: '#e0ff85',\n 300: '#d4ff52',\n 400: '#ccff00',\n 500: '#b8e600',\n 600: '#99cc00',\n 700: '#739900',\n 800: '#4d6600',\n 900: '#263300',\n },\n\n // Surface colors (dark theme)\n surface: {\n dark: '#0a0a0a',\n darker: '#050505',\n card: '#0c0c0c',\n elevated: '#111111',\n },\n\n // Text colors\n text: {\n primary: '#ffffff',\n secondary: 'rgba(255, 255, 255, 0.7)',\n muted: 'rgba(255, 255, 255, 0.5)',\n disabled: 'rgba(255, 255, 255, 0.3)',\n },\n\n // Border colors\n border: {\n DEFAULT: 'rgba(255, 255, 255, 0.1)',\n hover: 'rgba(255, 255, 255, 0.2)',\n accent: 'rgba(204, 255, 0, 0.3)',\n accentHover: 'rgba(204, 255, 0, 0.5)',\n },\n\n // Status colors\n status: {\n success: '#10b981',\n warning: '#eab308',\n error: '#ef4444',\n info: '#3b82f6',\n },\n\n // User message background\n user: {\n bg: 'rgba(204, 255, 0, 0.1)',\n border: 'rgba(204, 255, 0, 0.2)',\n },\n\n // Assistant message background\n assistant: {\n bg: 'rgba(255, 255, 255, 0.05)',\n border: 'rgba(255, 255, 255, 0.1)',\n },\n} as const;\n\n// =============================================================================\n// Spacing\n// =============================================================================\n\nexport const spacing = {\n xs: '4px',\n sm: '8px',\n md: '12px',\n lg: '16px',\n xl: '24px',\n '2xl': '32px',\n '3xl': '48px',\n} as const;\n\n// =============================================================================\n// Border Radius\n// =============================================================================\n\nexport const borderRadius = {\n sm: '8px',\n md: '12px',\n lg: '16px',\n xl: '20px',\n '2xl': '24px',\n full: '9999px',\n} as const;\n\n// =============================================================================\n// Shadows\n// =============================================================================\n\nexport const shadows = {\n sm: '0 1px 2px rgba(0, 0, 0, 0.3)',\n md: '0 4px 6px rgba(0, 0, 0, 0.4)',\n lg: '0 10px 15px rgba(0, 0, 0, 0.5)',\n xl: '0 20px 25px rgba(0, 0, 0, 0.6)',\n glow: {\n sm: '0 0 10px rgba(204, 255, 0, 0.2)',\n md: '0 0 20px rgba(204, 255, 0, 0.3)',\n lg: '0 0 30px rgba(204, 255, 0, 0.5)',\n },\n panel: '0 25px 50px rgba(0, 0, 0, 0.5)',\n} as const;\n\n// =============================================================================\n// Typography\n// =============================================================================\n\nexport const typography = {\n fontFamily: {\n sans: 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n mono: 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace',\n },\n fontSize: {\n xs: '12px',\n sm: '14px',\n base: '16px',\n lg: '18px',\n xl: '20px',\n '2xl': '24px',\n },\n lineHeight: {\n tight: '1.25',\n normal: '1.5',\n relaxed: '1.75',\n },\n} as const;\n\n// =============================================================================\n// Animations - Keyframes as objects for inline style injection\n// =============================================================================\n\nexport const keyframes = {\n slideUp: {\n from: { opacity: '0', transform: 'translateY(20px)' },\n to: { opacity: '1', transform: 'translateY(0)' },\n },\n fadeIn: {\n from: { opacity: '0', transform: 'translateY(10px)' },\n to: { opacity: '1', transform: 'translateY(0)' },\n },\n blink: {\n '0%, 50%': { opacity: '1' },\n '51%, 100%': { opacity: '0' },\n },\n bounce: {\n '0%, 80%, 100%': { transform: 'scale(0)' },\n '40%': { transform: 'scale(1)' },\n },\n pulse: {\n '0%, 100%': { opacity: '1' },\n '50%': { opacity: '0.5' },\n },\n glowPulse: {\n '0%, 100%': { boxShadow: '0 0 20px rgba(204, 255, 0, 0.3)' },\n '50%': { boxShadow: '0 0 40px rgba(204, 255, 0, 0.5)' },\n },\n} as const;\n\n// CSS keyframe strings for injection into style tags\nexport const keyframesCss = {\n slideUp: `\n @keyframes ash-slide-up {\n from { opacity: 0; transform: translateY(20px); }\n to { opacity: 1; transform: translateY(0); }\n }\n `,\n fadeIn: `\n @keyframes ash-fade-in {\n from { opacity: 0; transform: translateY(10px); }\n to { opacity: 1; transform: translateY(0); }\n }\n `,\n blink: `\n @keyframes ash-blink {\n 0%, 50% { opacity: 1; }\n 51%, 100% { opacity: 0; }\n }\n `,\n bounce: `\n @keyframes ash-bounce {\n 0%, 80%, 100% { transform: scale(0); }\n 40% { transform: scale(1); }\n }\n `,\n pulse: `\n @keyframes ash-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n `,\n glowPulse: `\n @keyframes ash-glow-pulse {\n 0%, 100% { box-shadow: 0 0 20px rgba(204, 255, 0, 0.3); }\n 50% { box-shadow: 0 0 40px rgba(204, 255, 0, 0.5); }\n }\n `,\n} as const;\n\n// All keyframes combined for easy injection\nexport const allKeyframesCss = Object.values(keyframesCss).join('\\n');\n\n// =============================================================================\n// Transitions\n// =============================================================================\n\nexport const transitions = {\n fast: '150ms ease-out',\n normal: '300ms ease-out',\n slow: '500ms ease-out',\n spring: '400ms cubic-bezier(0.16, 1, 0.3, 1)',\n} as const;\n\n// =============================================================================\n// Z-Index Scale\n// =============================================================================\n\nexport const zIndex = {\n base: 0,\n dropdown: 100,\n modal: 200,\n tooltip: 300,\n widget: 999999,\n} as const;\n\n// =============================================================================\n// Widget-Specific Dimensions\n// =============================================================================\n\nexport const widget = {\n launcher: {\n size: '60px',\n iconSize: '28px',\n },\n panel: {\n width: '400px',\n height: '600px',\n maxHeight: '80vh',\n },\n header: {\n height: '60px',\n },\n input: {\n minHeight: '60px',\n maxHeight: '150px',\n },\n message: {\n maxWidth: '85%',\n avatarSize: '32px',\n },\n gap: '20px', // Gap from edge of screen\n} as const;\n\n// =============================================================================\n// Helper: Convert tokens to CSS variables\n// =============================================================================\n\nexport function tokensToCssVariables(prefix = 'ash'): Record<string, string> {\n const vars: Record<string, string> = {};\n\n // Colors\n vars[`--${prefix}-accent`] = colors.accent.DEFAULT;\n Object.entries(colors.accent).forEach(([key, value]) => {\n if (key !== 'DEFAULT') vars[`--${prefix}-accent-${key}`] = value;\n });\n\n Object.entries(colors.surface).forEach(([key, value]) => {\n vars[`--${prefix}-surface-${key}`] = value;\n });\n\n Object.entries(colors.text).forEach(([key, value]) => {\n vars[`--${prefix}-text-${key}`] = value;\n });\n\n Object.entries(colors.border).forEach(([key, value]) => {\n if (key !== 'DEFAULT') vars[`--${prefix}-border-${key}`] = value;\n else vars[`--${prefix}-border`] = value;\n });\n\n return vars;\n}\n\n// =============================================================================\n// Helper: Generate inline styles from token names\n// =============================================================================\n\nexport const inlineStyles = {\n // Glass panel effect\n glassPanel: {\n backgroundColor: 'rgba(255, 255, 255, 0.05)',\n backdropFilter: 'blur(24px)',\n WebkitBackdropFilter: 'blur(24px)',\n border: `1px solid ${colors.border.DEFAULT}`,\n },\n\n // Accent button\n accentButton: {\n backgroundColor: colors.accent.DEFAULT,\n color: '#000000',\n border: `1px solid ${colors.accent.DEFAULT}`,\n boxShadow: shadows.glow.md,\n },\n\n // Ghost button\n ghostButton: {\n backgroundColor: 'transparent',\n color: colors.text.secondary,\n border: '1px solid transparent',\n },\n\n // User message bubble\n userMessage: {\n backgroundColor: colors.user.bg,\n border: `1px solid ${colors.user.border}`,\n borderRadius: borderRadius.lg,\n },\n\n // Assistant message bubble\n assistantMessage: {\n backgroundColor: colors.assistant.bg,\n border: `1px solid ${colors.assistant.border}`,\n borderRadius: borderRadius.lg,\n },\n} as const;\n\n// =============================================================================\n// Type exports\n// =============================================================================\n\nexport type Colors = typeof colors;\nexport type Spacing = typeof spacing;\nexport type BorderRadius = typeof borderRadius;\nexport type Shadows = typeof shadows;\nexport type Typography = typeof typography;\nexport type Keyframes = typeof keyframes;\nexport type Transitions = typeof transitions;\nexport type ZIndex = typeof zIndex;\nexport type Widget = typeof widget;\n","'use client';\n\nimport { useState, useCallback, useRef, useEffect } from 'react';\n\n/**\n * A queued message waiting to be sent\n */\nexport interface QueuedMessage {\n /** Unique ID for this queued message */\n id: string;\n /** The message text */\n text: string;\n /** Optional file attachments */\n files?: FileAttachment[];\n /** Timestamp when queued */\n queuedAt: number;\n}\n\n/**\n * File attachment for upload\n */\nexport interface FileAttachment {\n /** Original filename */\n filename: string;\n /** Base64-encoded file content */\n content: string;\n /** MIME type of the file */\n mimeType: string;\n /** File size in bytes */\n size: number;\n}\n\nexport interface UseMessageQueueOptions {\n /** Callback to process a message - should return when processing is complete */\n onProcessMessage: (message: QueuedMessage) => Promise<void>;\n /** Whether messages can currently be processed (e.g., agent selected) */\n canProcess?: boolean;\n}\n\nexport interface UseMessageQueueReturn {\n /** Current queue of pending messages */\n queue: QueuedMessage[];\n /** Whether a message is currently being processed */\n isProcessing: boolean;\n /** Add a message to the queue (or process immediately if idle) */\n enqueue: (text: string, files?: FileAttachment[]) => void;\n /** Cancel a queued message by ID */\n cancel: (id: string) => void;\n /** Clear all queued messages */\n clearQueue: () => void;\n /** Number of messages in queue */\n queueLength: number;\n}\n\n/**\n * Hook for managing a message queue with sequential processing.\n *\n * Messages are queued when the agent is busy and processed sequentially.\n * Users can continue typing while the agent processes previous messages.\n *\n * @example\n * ```tsx\n * function ChatInput() {\n * const { queue, isProcessing, enqueue, cancel } = useMessageQueue({\n * onProcessMessage: async (msg) => {\n * for await (const event of client.agents.run(agentId, msg.text)) {\n * // handle events\n * }\n * }\n * });\n *\n * return (\n * <div>\n * {queue.map(msg => (\n * <div key={msg.id}>\n * Queued: {msg.text}\n * <button onClick={() => cancel(msg.id)}>Cancel</button>\n * </div>\n * ))}\n * <input onSubmit={(text) => enqueue(text)} />\n * <button>{isProcessing ? `Queue (${queue.length})` : 'Send'}</button>\n * </div>\n * );\n * }\n * ```\n */\nexport function useMessageQueue({\n onProcessMessage,\n canProcess = true,\n}: UseMessageQueueOptions): UseMessageQueueReturn {\n const [queue, setQueue] = useState<QueuedMessage[]>([]);\n const [isProcessing, setIsProcessing] = useState(false);\n const isProcessingRef = useRef(false);\n const onProcessMessageRef = useRef(onProcessMessage);\n\n // Keep callback ref in sync\n useEffect(() => {\n onProcessMessageRef.current = onProcessMessage;\n }, [onProcessMessage]);\n\n // Process queue sequentially\n const processQueue = useCallback(async () => {\n if (isProcessingRef.current || !canProcess) return;\n\n isProcessingRef.current = true;\n setIsProcessing(true);\n\n while (true) {\n // Get next message from queue\n let nextMessage: QueuedMessage | undefined;\n setQueue((prev) => {\n if (prev.length === 0) return prev;\n nextMessage = prev[0];\n return prev.slice(1);\n });\n\n // Wait a tick for state to update\n await new Promise((resolve) => setTimeout(resolve, 0));\n\n if (!nextMessage) break;\n\n try {\n await onProcessMessageRef.current(nextMessage);\n } catch (error) {\n console.error('Error processing queued message:', error);\n // Continue processing queue even if one message fails\n }\n }\n\n isProcessingRef.current = false;\n setIsProcessing(false);\n }, [canProcess]);\n\n // Watch for queue changes and process\n useEffect(() => {\n if (queue.length > 0 && !isProcessingRef.current && canProcess) {\n processQueue();\n }\n }, [queue, processQueue, canProcess]);\n\n // Enqueue a new message\n const enqueue = useCallback((text: string, files?: FileAttachment[]) => {\n const message: QueuedMessage = {\n id: `queue-${Date.now()}-${Math.random().toString(36).slice(2)}`,\n text,\n files,\n queuedAt: Date.now(),\n };\n\n setQueue((prev) => [...prev, message]);\n }, []);\n\n // Cancel a queued message\n const cancel = useCallback((id: string) => {\n setQueue((prev) => prev.filter((m) => m.id !== id));\n }, []);\n\n // Clear all queued messages\n const clearQueue = useCallback(() => {\n setQueue([]);\n }, []);\n\n return {\n queue,\n isProcessing,\n enqueue,\n cancel,\n clearQueue,\n queueLength: queue.length,\n };\n}\n\nexport default useMessageQueue;\n","'use client';\n\nimport { useState, useCallback, useRef } from 'react';\n\nexport interface UseStopExecutionOptions {\n /** Callback to stop server-side execution (e.g., client.sessions.stop) */\n onServerStop?: (sessionId: string) => Promise<void>;\n}\n\nexport interface UseStopExecutionReturn {\n /** Whether execution can currently be stopped */\n canStop: boolean;\n /** The AbortSignal to pass to fetch requests */\n signal: AbortSignal | undefined;\n /** Start tracking a new execution (call when starting a request) */\n startExecution: () => void;\n /** Mark execution as complete (call when request finishes) */\n endExecution: () => void;\n /** Stop the current execution (aborts client + optionally server) */\n stop: (sessionId?: string) => Promise<void>;\n /** Set the current session ID for server-side stop */\n setSessionId: (sessionId: string | null) => void;\n}\n\n/**\n * Hook for managing execution stopping with AbortController.\n *\n * Handles both client-side request abortion and optional server-side stop calls.\n * Use this to implement stop/cancel buttons for long-running agent executions.\n *\n * @example\n * ```tsx\n * function Chat() {\n * const { canStop, signal, startExecution, endExecution, stop, setSessionId } = useStopExecution({\n * onServerStop: (sessionId) => client.sessions.stop(sessionId)\n * });\n *\n * async function sendMessage(text: string) {\n * startExecution();\n * try {\n * for await (const event of client.agents.run(agentId, text, { signal })) {\n * if (event.type === 'session_start') {\n * setSessionId(event.sessionId);\n * }\n * // handle events...\n * }\n * } catch (err) {\n * if (err.name === 'AbortError') {\n * console.log('Request aborted');\n * }\n * } finally {\n * endExecution();\n * }\n * }\n *\n * return (\n * <div>\n * {canStop && <button onClick={() => stop()}>Stop</button>}\n * </div>\n * );\n * }\n * ```\n */\nexport function useStopExecution({\n onServerStop,\n}: UseStopExecutionOptions = {}): UseStopExecutionReturn {\n const [canStop, setCanStop] = useState(false);\n const abortControllerRef = useRef<AbortController | null>(null);\n const sessionIdRef = useRef<string | null>(null);\n const onServerStopRef = useRef(onServerStop);\n\n // Keep callback ref in sync\n onServerStopRef.current = onServerStop;\n\n // Start a new execution\n const startExecution = useCallback(() => {\n // Create new AbortController\n abortControllerRef.current = new AbortController();\n setCanStop(true);\n }, []);\n\n // End the current execution\n const endExecution = useCallback(() => {\n abortControllerRef.current = null;\n sessionIdRef.current = null;\n setCanStop(false);\n }, []);\n\n // Set the session ID for server-side stop\n const setSessionId = useCallback((sessionId: string | null) => {\n sessionIdRef.current = sessionId;\n }, []);\n\n // Stop execution (client + server)\n const stop = useCallback(async (explicitSessionId?: string) => {\n // 1. Abort client-side request\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n\n // 2. Call server-side stop if we have a session\n const sessionId = explicitSessionId || sessionIdRef.current;\n if (sessionId && onServerStopRef.current) {\n try {\n await onServerStopRef.current(sessionId);\n } catch (err) {\n // Log but don't throw - the abort already happened\n console.warn('Server stop failed:', err);\n }\n }\n\n // Mark as stopped\n setCanStop(false);\n }, []);\n\n return {\n canStop,\n signal: abortControllerRef.current?.signal,\n startExecution,\n endExecution,\n stop,\n setSessionId,\n };\n}\n\nexport default useStopExecution;\n","'use client';\n\nimport { useState, useCallback, useRef, DragEvent, ChangeEvent } from 'react';\n\n/**\n * File attachment ready for upload\n */\nexport interface FileAttachment {\n /** Original filename */\n filename: string;\n /** Base64-encoded file content (without data URL prefix) */\n content: string;\n /** MIME type of the file */\n mimeType: string;\n /** File size in bytes */\n size: number;\n}\n\nexport interface UseFileUploadOptions {\n /** Maximum file size in bytes (default: 100MB) */\n maxFileSize?: number;\n /** Maximum number of files (default: 10) */\n maxFiles?: number;\n /** Callback when file validation fails */\n onValidationError?: (filename: string, error: string) => void;\n}\n\nexport interface UseFileUploadReturn {\n /** Current list of attached files */\n files: FileAttachment[];\n /** Whether drag is currently over the drop zone */\n isDragOver: boolean;\n /** Add files from a FileList (e.g., from input or drop) */\n addFiles: (fileList: FileList | null) => Promise<void>;\n /** Remove a file by index */\n removeFile: (index: number) => void;\n /** Clear all files */\n clearFiles: () => void;\n /** Whether more files can be added */\n canAddMore: boolean;\n /** Props to spread on a drop zone element */\n dropZoneProps: {\n onDragOver: (e: DragEvent) => void;\n onDragLeave: (e: DragEvent) => void;\n onDrop: (e: DragEvent) => void;\n };\n /** Handler for file input onChange */\n handleFileInputChange: (e: ChangeEvent<HTMLInputElement>) => void;\n /** Ref for a hidden file input */\n fileInputRef: React.RefObject<HTMLInputElement | null>;\n /** Click handler to trigger file input */\n openFilePicker: () => void;\n}\n\n/**\n * Format file size for display\n */\nexport function formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\n/**\n * Read a file as base64\n */\nasync function readFileAsBase64(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n const result = reader.result as string;\n // Remove data URL prefix to get pure base64\n const base64 = result.split(',')[1];\n resolve(base64 || '');\n };\n reader.onerror = () => reject(reader.error);\n reader.readAsDataURL(file);\n });\n}\n\n/**\n * Hook for managing file uploads with drag & drop support.\n *\n * Handles file selection, validation, base64 encoding, and drag/drop UI state.\n *\n * @example\n * ```tsx\n * function FileUploadArea() {\n * const {\n * files,\n * isDragOver,\n * addFiles,\n * removeFile,\n * dropZoneProps,\n * fileInputRef,\n * openFilePicker,\n * canAddMore,\n * } = useFileUpload({\n * maxFileSize: 50 * 1024 * 1024, // 50MB\n * maxFiles: 5,\n * onValidationError: (filename, error) => {\n * toast.error(`${filename}: ${error}`);\n * }\n * });\n *\n * return (\n * <div {...dropZoneProps} className={isDragOver ? 'drag-over' : ''}>\n * <input ref={fileInputRef} type=\"file\" multiple hidden />\n * <button onClick={openFilePicker} disabled={!canAddMore}>\n * Add Files\n * </button>\n * {files.map((file, i) => (\n * <div key={i}>\n * {file.filename} ({formatFileSize(file.size)})\n * <button onClick={() => removeFile(i)}>Remove</button>\n * </div>\n * ))}\n * </div>\n * );\n * }\n * ```\n */\nexport function useFileUpload({\n maxFileSize = 100 * 1024 * 1024, // 100MB\n maxFiles = 10,\n onValidationError,\n}: UseFileUploadOptions = {}): UseFileUploadReturn {\n const [files, setFiles] = useState<FileAttachment[]>([]);\n const [isDragOver, setIsDragOver] = useState(false);\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n\n // Process and add files\n const addFiles = useCallback(\n async (fileList: FileList | null) => {\n if (!fileList) return;\n\n const newFiles: FileAttachment[] = [];\n const currentCount = files.length;\n\n for (\n let i = 0;\n i < fileList.length && currentCount + newFiles.length < maxFiles;\n i++\n ) {\n const file = fileList.item(i);\n if (!file) continue;\n\n // Check file size\n if (file.size > maxFileSize) {\n onValidationError?.(\n file.name,\n `Exceeds maximum size of ${formatFileSize(maxFileSize)}`\n );\n continue;\n }\n\n try {\n const content = await readFileAsBase64(file);\n newFiles.push({\n filename: file.name,\n content,\n mimeType: file.type || 'application/octet-stream',\n size: file.size,\n });\n } catch (error) {\n console.error(`Failed to read file ${file.name}:`, error);\n onValidationError?.(file.name, 'Failed to read file');\n }\n }\n\n // Check if we hit the max files limit\n if (\n fileList.length > maxFiles - currentCount &&\n currentCount + newFiles.length >= maxFiles\n ) {\n onValidationError?.('', `Maximum ${maxFiles} files allowed`);\n }\n\n if (newFiles.length > 0) {\n setFiles((prev) => [...prev, ...newFiles]);\n }\n },\n [files.length, maxFiles, maxFileSize, onValidationError]\n );\n\n // Remove a file by index\n const removeFile = useCallback((index: number) => {\n setFiles((prev) => prev.filter((_, i) => i !== index));\n }, []);\n\n // Clear all files\n const clearFiles = useCallback(() => {\n setFiles([]);\n }, []);\n\n // Drag event handlers\n const handleDragOver = useCallback((e: DragEvent) => {\n e.preventDefault();\n setIsDragOver(true);\n }, []);\n\n const handleDragLeave = useCallback((e: DragEvent) => {\n e.preventDefault();\n setIsDragOver(false);\n }, []);\n\n const handleDrop = useCallback(\n (e: DragEvent) => {\n e.preventDefault();\n setIsDragOver(false);\n addFiles(e.dataTransfer.files);\n },\n [addFiles]\n );\n\n // File input change handler\n const handleFileInputChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n addFiles(e.target.files);\n // Reset input to allow selecting the same file again\n if (fileInputRef.current) {\n fileInputRef.current.value = '';\n }\n },\n [addFiles]\n );\n\n // Open file picker\n const openFilePicker = useCallback(() => {\n fileInputRef.current?.click();\n }, []);\n\n return {\n files,\n isDragOver,\n addFiles,\n removeFile,\n clearFiles,\n canAddMore: files.length < maxFiles,\n dropZoneProps: {\n onDragOver: handleDragOver,\n onDragLeave: handleDragLeave,\n onDrop: handleDrop,\n },\n handleFileInputChange,\n fileInputRef,\n openFilePicker,\n };\n}\n\nexport default useFileUpload;\n"]}
|