@aphrody/m3-ai 3.3.0 → 3.3.2
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/LICENSE.spaceui +21 -21
- package/dist/Markdown.d.ts +22 -0
- package/dist/Markdown.d.ts.map +1 -1
- package/dist/MessageBubble.d.ts +6 -3
- package/dist/MessageBubble.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +452 -30
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts","../src/internal.tsx","../src/ToolCall.tsx","../src/Markdown.tsx","../src/MessageBubble.tsx","../src/InlineWorkerCard.tsx","../src/InlineBranchCard.tsx","../src/ModelSelector.tsx","../src/ChatComposer.tsx","../src/TaskStatusIcon.tsx","../src/TaskPriorityIcon.tsx","../src/TaskRow.tsx","../src/TaskList.tsx","../src/TaskDetail.tsx","../src/TaskCreateForm.tsx"],"names":["jsx","jsxs","clsx","useState","useId","Icon","AnimatePresence","motion","forwardRef","useMemo","m3Durations","m3Easings","Popover","SelectPill","CircleButton","config","Fragment","Button","useRef","useEffect","Select","SelectOption"],"mappings":"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","file":"index.js","sourcesContent":["// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/types.ts), MIT.\n\n// Tool execution types\nexport type ToolCallStatus = \"running\" | \"completed\" | \"error\";\n\nexport interface ToolCallPair {\n id: string;\n name: string;\n argsRaw: string;\n args: Record<string, unknown> | null;\n resultRaw: string | null;\n result: Record<string, unknown> | null;\n status: ToolCallStatus;\n /** Human-readable summary provided by live opencode parts */\n title?: string | null;\n}\n\n// Transcript step types — discriminated union matching the real API schema\n\nexport type ActionContent =\n | { type: \"text\"; text: string }\n | { type: \"tool_call\"; id: string; name: string; args: string };\n\nexport type TranscriptStep =\n | { type: \"action\"; content: ActionContent[] }\n | { type: \"user_text\"; text: string }\n | { type: \"system_text\"; text: string }\n | { type: \"tool_result\"; call_id: string; name: string; text: string };\n\n// Paired transcript item for rendering\n\nexport type TranscriptItem = { kind: \"text\"; text: string } | { kind: \"tool\"; pair: ToolCallPair };\n\n// ---------------------------------------------------------------------------\n// Task board types\n// ---------------------------------------------------------------------------\n\nexport type TaskStatus = \"pending_approval\" | \"backlog\" | \"ready\" | \"in_progress\" | \"done\";\nexport type TaskPriority = \"critical\" | \"high\" | \"medium\" | \"low\";\n\nexport interface Subtask {\n title: string;\n completed: boolean;\n}\n\nexport interface Task {\n id: string;\n task_number: number;\n title: string;\n description?: string | null;\n status: TaskStatus;\n priority: TaskPriority;\n owner_agent_id: string;\n assigned_agent_id: string;\n subtasks: Subtask[];\n metadata: unknown;\n worker_id?: string | null;\n created_by: string;\n created_at: string;\n updated_at: string;\n completed_at?: string | null;\n}\n\nexport const TASK_STATUS_ORDER: TaskStatus[] = [\n \"in_progress\",\n \"ready\",\n \"pending_approval\",\n \"backlog\",\n \"done\",\n];\n\nexport const TASK_STATUS_LABEL: Record<TaskStatus, string> = {\n in_progress: \"In Progress\",\n ready: \"Ready\",\n pending_approval: \"Pending Approval\",\n backlog: \"Backlog\",\n done: \"Done\",\n};\n\nexport const TASK_PRIORITY_LABEL: Record<TaskPriority, string> = {\n critical: \"Critical\",\n high: \"High\",\n medium: \"Medium\",\n low: \"Low\",\n};\n\n// Domain objects\nexport interface TaskInfo {\n id: string;\n title: string;\n status: string;\n priority: string;\n assignees: string[];\n conversation_id?: string;\n}\n\nexport interface MemoryInfo {\n id: string;\n type: string;\n content: string;\n source?: string;\n edges?: Array<{ target: string; relation: string }>;\n}\n\nexport interface CronJobInfo {\n id: string;\n name: string;\n schedule: string;\n last_run?: string;\n next_run?: string;\n status: string;\n}\n\nexport interface AgentInfo {\n id: string;\n name: string;\n detail: string;\n status?: string;\n}\n\nexport interface ModelOption {\n id: string;\n name: string;\n provider: string;\n context_window?: number;\n capabilities?: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nexport function tryParseJson(text: string): Record<string, unknown> | null {\n if (!text || text.trim().length === 0) return null;\n try {\n const parsed = JSON.parse(text);\n if (typeof parsed === \"object\" && parsed !== null && !Array.isArray(parsed)) {\n return parsed as Record<string, unknown>;\n }\n return null;\n } catch {\n return null;\n }\n}\n\nexport function isErrorResult(text: string, parsed: Record<string, unknown> | null): boolean {\n if (parsed?.error) return true;\n if (parsed?.status === \"error\") return true;\n if (parsed?.success === false) return true;\n if (typeof parsed?.exit_code === \"number\" && parsed.exit_code !== 0) return true;\n const lower = text.toLowerCase();\n return (\n lower.startsWith(\"error:\") ||\n lower.startsWith(\"error -\") ||\n lower.startsWith(\"failed:\") ||\n lower.startsWith(\"toolset error:\")\n );\n}\n\n// ---------------------------------------------------------------------------\n// Transcript → TranscriptItem[] pairing\n// ---------------------------------------------------------------------------\n\n/**\n * Walk a flat TranscriptStep[] and pair each tool_call with its tool_result\n * via call_id matching, plus emit standalone text steps. Returns an ordered\n * list of renderable items: text blocks and paired tool calls.\n */\nexport function pairTranscriptSteps(steps: TranscriptStep[]): TranscriptItem[] {\n const items: TranscriptItem[] = [];\n const resultsById = new Map<string, { name: string; text: string }>();\n\n // First pass: index all tool_result steps by call_id\n for (const step of steps) {\n if (step.type === \"tool_result\") {\n resultsById.set(step.call_id, { name: step.name, text: step.text });\n }\n }\n\n // Second pass: emit items in order\n for (const step of steps) {\n if (step.type === \"action\") {\n for (const content of step.content) {\n if (content.type === \"text\") {\n items.push({ kind: \"text\", text: content.text });\n } else if (content.type === \"tool_call\") {\n const result = resultsById.get(content.id);\n const parsedArgs = tryParseJson(content.args);\n const parsedResult = result ? tryParseJson(result.text) : null;\n\n const hasError = result ? isErrorResult(result.text, parsedResult) : false;\n\n items.push({\n kind: \"tool\",\n pair: {\n id: content.id,\n name: content.name,\n argsRaw: content.args,\n args: parsedArgs,\n resultRaw: result?.text ?? null,\n result: parsedResult,\n status: result ? (hasError ? \"error\" : \"completed\") : \"running\",\n },\n });\n }\n }\n }\n }\n\n return items;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Shared Material Design 3 building blocks for @aphrody/m3-ai (internal, not exported).\n\nimport { m3Durations, m3Easings } from \"@aphrody/m3-motion\";\nimport { clsx } from \"clsx\";\nimport type { ReactNode } from \"react\";\n\n/** The M3 focus indicator (contract: docs/design/SPACEUI-M3-FUSION.md, \"States\"). */\nexport const focusRing =\n \"outline-none focus-visible:outline-3 focus-visible:outline-secondary focus-visible:outline-offset-2\";\n\n/** Expand / collapse: enter on emphasized decelerate, exit on emphasized accelerate. */\nexport const expandMotion = {\n initial: { height: 0, opacity: 0 },\n animate: {\n height: \"auto\",\n opacity: 1,\n transition: { duration: m3Durations.medium2, ease: m3Easings.emphasizedDecelerate },\n },\n exit: {\n height: 0,\n opacity: 0,\n transition: { duration: m3Durations.short4, ease: m3Easings.emphasizedAccelerate },\n },\n} as const;\n\n/**\n * Indeterminate M3 circular progress indicator (active indicator on `primary` or the current\n * color, 4 dp track gap omitted at small sizes). Replaces the upstream Grid loader.\n */\nexport function CircularIndicator({\n size = 16,\n className,\n label = \"Loading\",\n}: {\n size?: number;\n className?: string;\n label?: string;\n}) {\n const stroke = size <= 16 ? 2 : size <= 24 ? 3 : 4;\n const r = (size - stroke) / 2;\n const c = 2 * Math.PI * r;\n return (\n <span\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- M3 circular indeterminate indicator is an animated SVG arc; a native <progress> cannot render it.\n role=\"progressbar\"\n aria-label={label}\n className={clsx(\"m3-circular-indicator inline-flex shrink-0 text-primary\", className)}\n style={{ width: size, height: size }}\n >\n <svg\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n className=\"animate-spin\"\n aria-hidden=\"true\"\n >\n <circle\n cx={size / 2}\n cy={size / 2}\n r={r}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={stroke}\n strokeLinecap=\"round\"\n strokeDasharray={`${c * 0.7} ${c}`}\n />\n </svg>\n </span>\n );\n}\n\nexport type ChipTone = \"primary\" | \"success\" | \"error\" | \"warning\" | \"neutral\";\n\nconst chipTones: Record<ChipTone, string> = {\n primary: \"bg-primary-container text-on-primary-container\",\n success: \"bg-success-container text-on-success-container\",\n error: \"bg-error-container text-on-error-container\",\n warning: \"bg-warning-container text-on-warning-container\",\n neutral: \"border border-outline-variant text-on-surface-variant\",\n};\n\n/** Non-interactive M3 assist chip used as a status label (dense, `rounded-small`). */\nexport function StatusChip({\n tone,\n icon,\n children,\n className,\n}: {\n tone: ChipTone;\n icon?: ReactNode;\n children: ReactNode;\n className?: string;\n}) {\n return (\n <span\n className={clsx(\n \"inline-flex h-6 shrink-0 items-center gap-1 rounded-small px-2 text-label-medium\",\n chipTones[tone],\n className,\n )}\n >\n {icon}\n {children}\n </span>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/ToolCall.tsx), MIT, rebuilt on Material Design 3.\n\nimport { useId, useState } from \"react\";\nimport { clsx } from \"clsx\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { Icon } from \"@aphrody/m3-primitives\";\nimport type { ToolCallPair, ToolCallStatus } from \"./types\";\nimport { CircularIndicator, StatusChip, expandMotion, focusRing } from \"./internal\";\n\n// ---------------------------------------------------------------------------\n// Tool-specific rendering\n// ---------------------------------------------------------------------------\n\ninterface ToolRenderer {\n summary(pair: ToolCallPair): string | null;\n argsView?(pair: ToolCallPair): React.ReactNode | null;\n resultView?(pair: ToolCallPair): React.ReactNode | null;\n}\n\nconst toolRenderers: Record<string, ToolRenderer> = {\n browser_launch: {\n summary(pair) {\n const headless = pair.args?.headless;\n return headless === false ? \"Launch browser (visible)\" : \"Launch browser\";\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text=\"Browser session started\" />;\n },\n },\n\n browser_navigate: {\n summary(pair) {\n const url = pair.args?.url;\n return url ? truncate(String(url), 60) : null;\n },\n resultView(pair) {\n if (!pair.result) return <ResultText text={pair.resultRaw} />;\n const title = pair.result.title as string | undefined;\n const url = pair.result.url as string | undefined;\n return (\n <div className=\"flex flex-col gap-1 px-3 py-2\">\n {title && (\n <p className=\"text-body-small text-on-surface-variant\">\n <span className=\"text-outline\">Title: </span>\n {title}\n </p>\n )}\n {url && <p className=\"font-code text-body-small text-outline\">{truncate(url, 80)}</p>}\n </div>\n );\n },\n },\n\n browser_snapshot: {\n summary(pair) {\n if (!pair.resultRaw) return \"Taking snapshot...\";\n const matches = pair.resultRaw.match(/\\[\\d+\\]/g);\n const count = matches?.length ?? 0;\n return count > 0 ? `${count} interactive element${count !== 1 ? \"s\" : \"\"}` : \"Page snapshot\";\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n },\n },\n\n browser_click: {\n summary(pair) {\n const index = pair.args?.index;\n return index !== undefined ? `Click element [${index}]` : \"Click\";\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text={pair.resultRaw} />;\n },\n },\n\n browser_type: {\n summary(pair) {\n const index = pair.args?.index;\n const hasSecret = pair.args?.secret !== undefined;\n const text = pair.args?.text;\n if (hasSecret) {\n return index !== undefined ? `Type secret into [${index}]` : \"Type secret\";\n }\n if (text) {\n const display = truncate(String(text), 30);\n return index !== undefined ? `Type \"${display}\" into [${index}]` : `Type \"${display}\"`;\n }\n return index !== undefined ? `Type into [${index}]` : \"Type\";\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text={pair.resultRaw} />;\n },\n },\n\n browser_press_key: {\n summary(pair) {\n const key = pair.args?.key;\n return key ? `Press ${key}` : \"Press key\";\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text={pair.resultRaw} />;\n },\n },\n\n browser_screenshot: {\n summary() {\n return \"Capture screenshot\";\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n if (pair.result?.base64) {\n const mimeType = (pair.result.mime_type as string) ?? \"image/png\";\n return (\n <div className=\"px-3 py-2\">\n <img\n src={`data:${mimeType};base64,${pair.result.base64}`}\n alt=\"Browser screenshot\"\n className=\"max-h-60 rounded-extra-small border border-outline-variant object-contain\"\n />\n </div>\n );\n }\n return <ResultLine text={truncate(pair.resultRaw, 100)} />;\n },\n },\n\n browser_evaluate: {\n summary(pair) {\n const expression = pair.args?.expression;\n return expression ? truncate(String(expression), 50) : \"Evaluate JS\";\n },\n argsView(pair) {\n const expression = pair.args?.expression;\n if (!expression) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <p className=\"mb-1 text-body-small font-medium text-outline\">JavaScript</p>\n <pre className=\"max-h-40 overflow-auto font-code text-body-small text-on-surface-variant\">\n {String(expression)}\n </pre>\n </div>\n );\n },\n },\n\n browser_tab_open: {\n summary(pair) {\n const url = pair.args?.url;\n return url ? `Open tab: ${truncate(String(url), 50)}` : \"Open new tab\";\n },\n },\n\n browser_tab_list: {\n summary() {\n return \"List tabs\";\n },\n },\n\n browser_tab_close: {\n summary(pair) {\n const tabId = pair.args?.tab_id;\n return tabId !== undefined ? `Close tab ${tabId}` : \"Close tab\";\n },\n },\n\n browser_close: {\n summary() {\n return \"Close browser\";\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text=\"Browser session closed\" />;\n },\n },\n\n shell: {\n summary(pair) {\n const command = pair.args?.command;\n if (!command) return null;\n if (pair.result && typeof pair.result.exit_code === \"number\") {\n const code = pair.result.exit_code;\n const cmdStr = truncate(String(command), 50);\n return code === 0 ? cmdStr : `${cmdStr} (exit ${code})`;\n }\n return truncate(String(command), 60);\n },\n argsView(pair) {\n const command = pair.args?.command;\n if (!command) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <pre className=\"max-h-40 overflow-auto font-code text-body-small text-on-surface-variant\">\n <span className=\"select-none text-outline\">$ </span>\n {String(command)}\n </pre>\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ShellResultView pair={pair} />;\n },\n },\n\n file_read: {\n summary(pair) {\n if (pair.title) return pair.title;\n const path = pair.args?.path;\n return path ? truncate(String(path), 60) : null;\n },\n argsView(pair) {\n const path = pair.args?.path;\n if (!path) return null;\n const offset = pair.args?.offset;\n const limit = pair.args?.limit;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <p className=\"font-code text-body-small text-on-surface-variant\">\n {String(path)}\n {offset ? ` (from line ${offset})` : \"\"}\n {limit ? ` (${limit} lines)` : \"\"}\n </p>\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={30} />;\n },\n },\n\n file_write: {\n summary(pair) {\n if (pair.title) return pair.title;\n const path = pair.args?.path;\n return path ? truncate(String(path), 60) : null;\n },\n argsView(pair) {\n const path = pair.args?.path;\n const content = pair.args?.content;\n if (!path && !content) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n {!!path && (\n <p className=\"mb-1 font-code text-body-small text-on-surface-variant\">{String(path)}</p>\n )}\n {!!content && (\n <pre className=\"max-h-40 overflow-auto font-code text-body-small text-outline\">\n {truncate(String(content), 2000)}\n </pre>\n )}\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text={truncate(pair.resultRaw, 100)} />;\n },\n },\n\n file_edit: {\n summary(pair) {\n if (pair.title) return pair.title;\n const path = pair.args?.path;\n return path ? truncate(String(path), 60) : null;\n },\n argsView(pair) {\n const path = pair.args?.path;\n const oldStr = pair.args?.old_string;\n const newStr = pair.args?.new_string;\n if (!path) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <p className=\"mb-1 font-code text-body-small text-on-surface-variant\">{String(path)}</p>\n {!!oldStr && (\n <div className=\"mt-1\">\n <p className=\"text-body-small font-medium text-error\">Old</p>\n <pre className=\"max-h-20 overflow-auto font-code text-body-small text-error\">\n {truncate(String(oldStr), 500)}\n </pre>\n </div>\n )}\n {!!newStr && (\n <div className=\"mt-1\">\n <p className=\"text-body-small font-medium text-success\">New</p>\n <pre className=\"max-h-20 overflow-auto font-code text-body-small text-success\">\n {truncate(String(newStr), 500)}\n </pre>\n </div>\n )}\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text={truncate(pair.resultRaw, 100)} />;\n },\n },\n\n file_list: {\n summary(pair) {\n if (pair.title) return pair.title;\n const path = pair.args?.path;\n return path ? truncate(String(path), 60) : null;\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={30} />;\n },\n },\n\n exec: {\n summary(pair) {\n const program = pair.args?.program;\n const cmdArgs = pair.args?.args;\n if (!program) return null;\n const parts = [String(program)];\n if (Array.isArray(cmdArgs)) {\n for (const arg of cmdArgs) parts.push(String(arg));\n }\n const full = parts.join(\" \");\n if (pair.result && typeof pair.result.exit_code === \"number\") {\n const code = pair.result.exit_code;\n const cmdStr = truncate(full, 50);\n return code === 0 ? cmdStr : `${cmdStr} (exit ${code})`;\n }\n return truncate(full, 60);\n },\n argsView(pair) {\n const program = pair.args?.program;\n if (!program) return null;\n const parts = [String(program)];\n const cmdArgs = pair.args?.args;\n if (Array.isArray(cmdArgs)) {\n for (const arg of cmdArgs) parts.push(String(arg));\n }\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <pre className=\"max-h-40 overflow-auto font-code text-body-small text-on-surface-variant\">\n <span className=\"select-none text-outline\">$ </span>\n {parts.join(\" \")}\n </pre>\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ShellResultView pair={pair} />;\n },\n },\n\n set_status: {\n summary(pair) {\n const kind = pair.args?.kind;\n const message = pair.args?.message;\n if (kind === \"outcome\") {\n return message ? `Outcome: ${truncate(String(message), 50)}` : \"Outcome set\";\n }\n return message ? truncate(String(message), 60) : null;\n },\n resultView() {\n return null;\n },\n },\n\n // OpenCode tools\n\n read: {\n summary(pair) {\n if (pair.title) return pair.title;\n const filePath = pair.args?.filePath ?? pair.args?.file_path;\n return filePath ? truncate(String(filePath), 60) : null;\n },\n argsView(pair) {\n const filePath = pair.args?.filePath ?? pair.args?.file_path;\n if (!filePath) return null;\n const offset = pair.args?.offset;\n const limit = pair.args?.limit;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <p className=\"font-code text-body-small text-on-surface-variant\">\n {String(filePath)}\n {offset ? ` (from line ${offset})` : \"\"}\n {limit ? ` (${limit} lines)` : \"\"}\n </p>\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={30} />;\n },\n },\n\n write: {\n summary(pair) {\n if (pair.title) return pair.title;\n const filePath = pair.args?.filePath ?? pair.args?.file_path;\n return filePath ? truncate(String(filePath), 60) : null;\n },\n argsView(pair) {\n const filePath = pair.args?.filePath ?? pair.args?.file_path;\n const content = pair.args?.content;\n if (!filePath && !content) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n {!!filePath && (\n <p className=\"mb-1 font-code text-body-small text-on-surface-variant\">\n {String(filePath)}\n </p>\n )}\n {!!content && (\n <pre className=\"max-h-40 overflow-auto font-code text-body-small text-outline\">\n {truncate(String(content), 2000)}\n </pre>\n )}\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text={truncate(pair.resultRaw, 100)} />;\n },\n },\n\n edit: {\n summary(pair) {\n if (pair.title) return pair.title;\n const filePath = pair.args?.filePath ?? pair.args?.file_path;\n return filePath ? truncate(String(filePath), 60) : null;\n },\n argsView(pair) {\n const filePath = pair.args?.filePath ?? pair.args?.file_path;\n const oldStr = pair.args?.oldString ?? pair.args?.old_string;\n const newStr = pair.args?.newString ?? pair.args?.new_string;\n if (!filePath) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <p className=\"mb-1 font-code text-body-small text-on-surface-variant\">\n {String(filePath)}\n </p>\n {!!oldStr && (\n <div className=\"mt-1\">\n <p className=\"text-body-small font-medium text-error\">Old</p>\n <pre className=\"max-h-20 overflow-auto font-code text-body-small text-error\">\n {truncate(String(oldStr), 500)}\n </pre>\n </div>\n )}\n {!!newStr && (\n <div className=\"mt-1\">\n <p className=\"text-body-small font-medium text-success\">New</p>\n <pre className=\"max-h-20 overflow-auto font-code text-body-small text-success\">\n {truncate(String(newStr), 500)}\n </pre>\n </div>\n )}\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text={truncate(pair.resultRaw, 100)} />;\n },\n },\n\n bash: {\n summary(pair) {\n if (pair.title) return pair.title;\n const command = pair.args?.command;\n if (!command) return null;\n if (pair.result && typeof pair.result.exit_code === \"number\") {\n const code = pair.result.exit_code;\n const cmdStr = truncate(String(command), 50);\n return code === 0 ? cmdStr : `${cmdStr} (exit ${code})`;\n }\n return truncate(String(command), 60);\n },\n argsView(pair) {\n const command = pair.args?.command;\n if (!command) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <pre className=\"max-h-40 overflow-auto font-code text-body-small text-on-surface-variant\">\n <span className=\"select-none text-outline\">$ </span>\n {String(command)}\n </pre>\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ShellResultView pair={pair} />;\n },\n },\n\n glob: {\n summary(pair) {\n if (pair.title) return pair.title;\n const pattern = pair.args?.pattern;\n return pattern ? truncate(String(pattern), 60) : null;\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n },\n },\n\n grep: {\n summary(pair) {\n if (pair.title) return pair.title;\n const pattern = pair.args?.pattern;\n const include = pair.args?.include;\n if (pattern && include) {\n return `/${pattern}/ in ${include}`;\n }\n return pattern ? `/${truncate(String(pattern), 40)}/` : null;\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n },\n },\n\n webfetch: {\n summary(pair) {\n if (pair.title) return pair.title;\n const url = pair.args?.url;\n return url ? truncate(String(url), 60) : null;\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n },\n },\n\n read_skill: {\n summary(pair) {\n if (pair.title) return pair.title;\n const name = pair.args?.name;\n return name ? String(name) : null;\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={30} />;\n },\n },\n\n web_search: {\n summary(pair) {\n if (pair.title) return pair.title;\n const query = pair.args?.query;\n const resultCount =\n pair.result?.result_count ??\n (Array.isArray(pair.result?.results) ? (pair.result!.results as unknown[]).length : null);\n const queryStr = query ? truncate(String(query), 50) : null;\n if (queryStr && resultCount != null) {\n return `${queryStr} (${resultCount} result${resultCount !== 1 ? \"s\" : \"\"})`;\n }\n return queryStr;\n },\n argsView(pair) {\n const query = pair.args?.query;\n if (!query) return null;\n const count = pair.args?.count;\n const freshness = pair.args?.freshness;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <p className=\"text-body-small text-on-surface-variant\">\n <span className=\"select-none text-outline\">Search: </span>\n {String(query)}\n </p>\n {!!(count || freshness) && (\n <p className=\"mt-0.5 text-body-small text-outline\">\n {count ? `${count} results` : \"\"}\n {count && freshness ? \" · \" : \"\"}\n {freshness ? `${freshness}` : \"\"}\n </p>\n )}\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n },\n },\n\n spacebot_docs: {\n summary(pair) {\n if (pair.title) return pair.title;\n const action = pair.args?.action;\n const docId = pair.args?.doc_id;\n if (action === \"read\" && docId) {\n return truncate(String(docId), 50);\n }\n return action ? String(action) : \"list\";\n },\n argsView(pair) {\n const action = pair.args?.action;\n const docId = pair.args?.doc_id;\n const query = pair.args?.query;\n if (!action && !docId) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n {!!docId && (\n <p className=\"font-code text-body-small text-on-surface-variant\">{String(docId)}</p>\n )}\n {!!query && (\n <p className=\"mt-0.5 text-body-small text-outline\">filter: {String(query)}</p>\n )}\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={30} />;\n },\n },\n\n todowrite: {\n summary(pair) {\n if (pair.title) return pair.title;\n return \"Update tasks\";\n },\n resultView() {\n return null;\n },\n },\n\n task: {\n summary(pair) {\n if (pair.title) return pair.title;\n const description = pair.args?.description;\n return description ? truncate(String(description), 60) : null;\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n },\n },\n};\n\nconst defaultRenderer: ToolRenderer = {\n summary(pair) {\n if (!pair.argsRaw || pair.argsRaw === \"{}\") return null;\n return truncate(pair.argsRaw, 60);\n },\n};\n\nfunction getRenderer(name: string): ToolRenderer {\n return toolRenderers[name] ?? defaultRenderer;\n}\n\n// ---------------------------------------------------------------------------\n// Shared sub-components\n// ---------------------------------------------------------------------------\n\nfunction ResultLine({ text }: { text: string }) {\n return <p className=\"px-3 py-2 text-body-small text-on-surface-variant\">{text}</p>;\n}\n\nfunction ResultText({ text }: { text: string | null }) {\n if (!text) return null;\n return (\n <pre className=\"max-h-60 overflow-auto whitespace-pre-wrap px-3 py-2 font-code text-body-small text-on-surface-variant\">\n {text}\n </pre>\n );\n}\n\nfunction CollapsiblePre({ text, maxLines = 20 }: { text: string; maxLines?: number }) {\n const [expanded, setExpanded] = useState(false);\n const lines = text.split(\"\\n\");\n const needsCollapse = lines.length > maxLines;\n const displayText =\n needsCollapse && !expanded ? lines.slice(0, maxLines).join(\"\\n\") + \"\\n...\" : text;\n\n return (\n <div>\n <pre className=\"max-h-80 overflow-auto whitespace-pre-wrap px-3 py-2 font-code text-body-small text-on-surface-variant\">\n {displayText}\n </pre>\n {needsCollapse && (\n <button\n type=\"button\"\n onClick={() => setExpanded(!expanded)}\n className={clsx(\n \"flex h-8 w-full items-center justify-center gap-1 border-t border-outline-variant px-3 text-label-medium text-primary\",\n \"transition-colors duration-200 ease-standard hover:bg-primary/8 active:bg-primary/10\",\n focusRing,\n )}\n >\n <Icon\n name=\"expand_more\"\n size={18}\n className={clsx(\n \"transition-transform duration-200 ease-standard\",\n expanded && \"rotate-180\",\n )}\n />\n {expanded ? \"Show less\" : `Show all ${lines.length} lines`}\n </button>\n )}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Shell result rendering\n// ---------------------------------------------------------------------------\n\nfunction ShellResultView({ pair }: { pair: ToolCallPair }) {\n const r = pair.result;\n\n if (!r || typeof r.exit_code !== \"number\") {\n return <CollapsiblePre text={pair.resultRaw!} maxLines={30} />;\n }\n\n const exitCode = r.exit_code as number;\n const stdout = typeof r.stdout === \"string\" ? r.stdout : \"\";\n const stderr = typeof r.stderr === \"string\" ? r.stderr : \"\";\n const hasStdout = stdout.trim().length > 0;\n const hasStderr = stderr.trim().length > 0;\n const isError = exitCode !== 0;\n\n if (!hasStdout && !hasStderr && exitCode === 0) {\n return <ResultLine text=\"Completed with no output\" />;\n }\n\n return (\n <div className=\"flex flex-col\">\n {isError && (\n <div className=\"flex items-center gap-1.5 border-b border-outline-variant px-3 py-1.5\">\n <span className=\"inline-flex h-6 items-center rounded-small bg-error px-2 font-code text-label-medium text-on-error\">\n exit {exitCode}\n </span>\n </div>\n )}\n\n {hasStdout && (\n <div className={hasStderr ? \"border-b border-outline-variant\" : \"\"}>\n <CollapsiblePre text={stdout.replace(/\\n$/, \"\")} maxLines={30} />\n </div>\n )}\n\n {hasStderr && (\n <div>\n <div className=\"flex items-center gap-1.5 px-3 pt-2 pb-0.5\">\n <span className={clsx(\"text-label-medium\", isError ? \"text-error\" : \"text-warning\")}>\n stderr\n </span>\n </div>\n <pre\n className={clsx(\n \"max-h-40 overflow-auto whitespace-pre-wrap px-3 pb-2 font-code text-body-small\",\n isError ? \"text-error\" : \"text-warning\",\n )}\n >\n {stderr.replace(/\\n$/, \"\")}\n </pre>\n </div>\n )}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Status display helpers\n// ---------------------------------------------------------------------------\n\n/** Material Symbols glyph per status (the running state shows a circular indicator). */\nconst STATUS_ICONS: Record<ToolCallStatus, string> = {\n running: \"pending\",\n completed: \"check_circle\",\n error: \"error\",\n};\n\nconst STATUS_COLORS: Record<ToolCallStatus, string> = {\n running: \"text-primary\",\n completed: \"text-success\",\n error: \"text-error\",\n};\n\nconst STATUS_LABELS: Record<ToolCallStatus, string> = {\n running: \"Running\",\n completed: \"Completed\",\n error: \"Error\",\n};\n\n/** Leading Material Symbol per tool family. */\nfunction toolIcon(name: string): string {\n if (name.startsWith(\"browser_\")) return \"language\";\n if (name.startsWith(\"file_\") || name === \"read\" || name === \"write\" || name === \"edit\") {\n return \"description\";\n }\n if (name === \"shell\" || name === \"exec\" || name === \"bash\") return \"terminal\";\n if (name === \"glob\" || name === \"grep\" || name === \"web_search\") return \"search\";\n if (name === \"webfetch\") return \"language\";\n if (name === \"set_status\") return \"schedule\";\n return \"build\";\n}\n\nfunction formatToolName(name: string): string {\n const overrides: Record<string, string> = {\n webfetch: \"Web Fetch\",\n todowrite: \"Todo\",\n read_skill: \"Read Skill\",\n web_search: \"Web Search\",\n spacebot_docs: \"Docs\",\n };\n if (overrides[name]) return overrides[name];\n\n const stripped = name\n .replace(/^browser_/, \"\")\n .replace(/^file_/, \"\")\n .replace(/^tab_/, \"Tab \");\n\n return stripped\n .split(\"_\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n}\n\nfunction toolCategory(name: string): string | null {\n if (name.startsWith(\"browser_\")) return \"Browser\";\n if (name.startsWith(\"file_\")) return \"File\";\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Main component\n// ---------------------------------------------------------------------------\n\nexport interface ToolCallProps {\n pair: ToolCallPair;\n /** Start expanded (uncontrolled). */\n defaultExpanded?: boolean;\n className?: string;\n}\n\n/**\n * A tool invocation as an M3 outlined card: status + tool name header (`text-label-large`),\n * summary, and an expandable body with arguments and result blocks in `font-code`.\n */\nexport function ToolCall({ pair, defaultExpanded = false, className }: ToolCallProps) {\n const [expanded, setExpanded] = useState(defaultExpanded);\n const bodyId = useId();\n const renderer = getRenderer(pair.name);\n const summary = renderer.summary(pair);\n const category = toolCategory(pair.name);\n const displayName = formatToolName(pair.name);\n const isError = pair.status === \"error\";\n\n const args = expanded ? renderArgs(pair, renderer) : null;\n const result = expanded ? renderResult(pair, renderer) : null;\n\n return (\n <div\n data-status={pair.status}\n className={clsx(\n \"m3-tool-call min-w-0 overflow-hidden rounded-medium border bg-surface-container-low text-on-surface\",\n isError ? \"border-error\" : \"border-outline-variant\",\n className,\n )}\n >\n <button\n type=\"button\"\n onClick={() => setExpanded(!expanded)}\n aria-expanded={expanded}\n aria-controls={bodyId}\n className={clsx(\n \"flex min-h-10 w-full items-center gap-2 rounded-medium px-3 py-2 text-left\",\n \"transition-colors duration-200 ease-standard hover:bg-on-surface/8 active:bg-on-surface/10\",\n focusRing,\n )}\n >\n <span\n className={clsx(\n \"flex size-5 shrink-0 items-center justify-center\",\n STATUS_COLORS[pair.status],\n )}\n >\n {pair.status === \"running\" ? (\n <CircularIndicator size={16} label=\"Running\" />\n ) : (\n <Icon\n name={STATUS_ICONS[pair.status]}\n size={18}\n filled\n label={STATUS_LABELS[pair.status]}\n />\n )}\n </span>\n <Icon name={toolIcon(pair.name)} size={18} className=\"shrink-0 text-on-surface-variant\" />\n {category && <span className=\"text-label-medium text-outline\">{category}</span>}\n <span className=\"shrink-0 text-label-large text-on-surface\">{displayName}</span>\n {summary && !expanded ? (\n <span className=\"min-w-0 flex-1 truncate text-body-small text-on-surface-variant\">\n {summary}\n </span>\n ) : (\n <span className=\"flex-1\" />\n )}\n {isError && (\n <StatusChip tone=\"error\" className=\"h-5 px-1.5 text-label-small\">\n error\n </StatusChip>\n )}\n <Icon\n name=\"expand_more\"\n size={20}\n className={clsx(\n \"shrink-0 text-on-surface-variant transition-transform duration-300 ease-emphasized\",\n expanded && \"rotate-180\",\n )}\n />\n </button>\n\n <AnimatePresence initial={false}>\n {expanded ? (\n <motion.div id={bodyId} key=\"body\" {...expandMotion} className=\"overflow-hidden\">\n <div className=\"flex flex-col gap-2 border-t border-outline-variant px-3 py-3\">\n {args}\n {result != null && result !== false ? (\n <div\n className={clsx(\n \"m3-tool-result overflow-hidden rounded-small\",\n isError\n ? \"bg-error-container text-on-error-container [&_.text-on-surface-variant]:text-on-error-container [&_.text-outline]:text-on-error-container/80\"\n : \"bg-surface-container-highest text-on-surface-variant\",\n )}\n >\n {result}\n </div>\n ) : null}\n </div>\n </motion.div>\n ) : null}\n </AnimatePresence>\n </div>\n );\n}\n\nfunction renderArgs(pair: ToolCallPair, renderer: ToolRenderer): React.ReactNode {\n if (renderer.argsView) {\n const custom = renderer.argsView(pair);\n if (custom) return custom;\n }\n\n if (pair.args && Object.keys(pair.args).length > 0) {\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <div className=\"flex flex-col gap-0.5\">\n {Object.entries(pair.args).map(([key, value]) => (\n <p key={key} className=\"font-code text-body-small\">\n <span className=\"text-outline\">{key}: </span>\n <span className=\"text-on-surface-variant\">{formatArgValue(key, value)}</span>\n </p>\n ))}\n </div>\n </div>\n );\n }\n\n if (pair.argsRaw && pair.argsRaw !== \"{}\" && pair.argsRaw.trim().length > 0) {\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <pre className=\"max-h-40 overflow-auto font-code text-body-small text-on-surface-variant\">\n {pair.argsRaw}\n </pre>\n </div>\n );\n }\n\n return null;\n}\n\nfunction renderResult(pair: ToolCallPair, renderer: ToolRenderer): React.ReactNode {\n if (pair.status === \"running\") {\n return (\n <div className=\"flex items-center gap-2 px-3 py-2 text-body-small text-on-surface-variant\">\n <CircularIndicator size={14} label=\"Running\" />\n Running...\n </div>\n );\n }\n\n if (renderer.resultView) {\n const custom = renderer.resultView(pair);\n if (custom !== undefined) return custom;\n }\n\n if (!pair.resultRaw) return null;\n\n if (pair.result && Object.keys(pair.result).length > 0) {\n return (\n <div className=\"px-3 py-2\">\n <div className=\"flex flex-col gap-0.5\">\n {Object.entries(pair.result).map(([key, value]) => (\n <p key={key} className=\"font-code text-body-small\">\n <span className=\"text-outline\">{key}: </span>\n <span className=\"text-on-surface-variant\">\n {typeof value === \"string\" ? truncate(value, 200) : JSON.stringify(value)}\n </span>\n </p>\n ))}\n </div>\n </div>\n );\n }\n\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n}\n\nfunction formatArgValue(key: string, value: unknown): string {\n if (key === \"secret\" && typeof value === \"string\") {\n return \"***\";\n }\n if (typeof value === \"string\") {\n return truncate(value, 100);\n }\n if (typeof value === \"boolean\" || typeof value === \"number\") {\n return String(value);\n }\n return JSON.stringify(value);\n}\n\nfunction truncate(text: string, maxLen: number): string {\n if (text.length <= maxLen) return text;\n return text.slice(0, maxLen) + \"...\";\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/Markdown.tsx), MIT, rebuilt on Material Design 3.\n\nimport ReactMarkdown, { type Components } from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport rehypeRaw from \"rehype-raw\";\nimport { clsx } from \"clsx\";\nimport { forwardRef } from \"react\";\n\ntype MarkdownSize = \"small\" | \"medium\" | \"large\";\n\ninterface MarkdownProps {\n content: string;\n className?: string;\n /** Body typescale of paragraphs and lists: `text-body-small|medium|large`. Default `medium`. */\n size?: MarkdownSize;\n /**\n * Render raw HTML embedded in the markdown (rehype-raw). Off by default: only enable it for\n * trusted content.\n */\n allowHtml?: boolean;\n}\n\nconst bodyClass: Record<MarkdownSize, string> = {\n small: \"text-body-small\",\n medium: \"text-body-medium\",\n large: \"text-body-large\",\n};\n\n/** Element overrides mapping markdown onto the M3 typescale and color roles. */\nfunction m3Components(size: MarkdownSize): Components {\n const body = bodyClass[size];\n return {\n h1: ({ node: _node, className, children, ...props }) => (\n <h1\n className={clsx(\"mt-4 mb-2 text-headline-small text-on-surface first:mt-0\", className)}\n {...props}\n >\n {children}\n </h1>\n ),\n h2: ({ node: _node, className, children, ...props }) => (\n <h2\n className={clsx(\"mt-4 mb-2 text-title-large text-on-surface first:mt-0\", className)}\n {...props}\n >\n {children}\n </h2>\n ),\n h3: ({ node: _node, className, children, ...props }) => (\n <h3\n className={clsx(\"mt-3 mb-1.5 text-title-medium text-on-surface first:mt-0\", className)}\n {...props}\n >\n {children}\n </h3>\n ),\n h4: ({ node: _node, className, children, ...props }) => (\n <h4\n className={clsx(\"mt-3 mb-1 text-title-small text-on-surface first:mt-0\", className)}\n {...props}\n >\n {children}\n </h4>\n ),\n h5: ({ node: _node, className, children, ...props }) => (\n <h5\n className={clsx(\"mt-3 mb-1 text-title-small text-on-surface-variant first:mt-0\", className)}\n {...props}\n >\n {children}\n </h5>\n ),\n h6: ({ node: _node, className, children, ...props }) => (\n <h6\n className={clsx(\"mt-3 mb-1 text-label-large text-on-surface-variant first:mt-0\", className)}\n {...props}\n >\n {children}\n </h6>\n ),\n p: ({ node: _node, className, ...props }) => (\n <p className={clsx(\"my-2 first:mt-0 last:mb-0\", body, className)} {...props} />\n ),\n a: ({ node: _node, className, children, ...props }) => (\n <a\n className={clsx(\n \"text-primary underline underline-offset-2 hover:decoration-2\",\n \"rounded-extra-small outline-none focus-visible:outline-3 focus-visible:outline-secondary focus-visible:outline-offset-2\",\n className,\n )}\n {...props}\n >\n {children}\n </a>\n ),\n strong: ({ node: _node, className, ...props }) => (\n <strong className={clsx(\"font-semibold text-on-surface\", className)} {...props} />\n ),\n ul: ({ node: _node, className, ...props }) => (\n <ul\n className={clsx(\"my-2 list-disc pl-6 marker:text-on-surface-variant\", body, className)}\n {...props}\n />\n ),\n ol: ({ node: _node, className, ...props }) => (\n <ol\n className={clsx(\"my-2 list-decimal pl-6 marker:text-on-surface-variant\", body, className)}\n {...props}\n />\n ),\n li: ({ node: _node, className, ...props }) => (\n <li className={clsx(\"my-1\", className)} {...props} />\n ),\n blockquote: ({ node: _node, className, ...props }) => (\n <blockquote\n className={clsx(\n \"my-3 border-l-4 border-outline-variant pl-4 text-on-surface-variant\",\n className,\n )}\n {...props}\n />\n ),\n code: ({ node: _node, className, ...props }) => (\n <code\n className={clsx(\n \"rounded-extra-small bg-surface-container-highest px-1 py-0.5 font-code text-[0.9em] text-on-surface\",\n className,\n )}\n {...props}\n />\n ),\n pre: ({ node: _node, className, ...props }) => (\n <pre\n className={clsx(\n \"my-3 overflow-x-auto rounded-small bg-surface-container-highest p-3 font-code text-body-small text-on-surface\",\n \"[&_code]:bg-transparent [&_code]:p-0 [&_code]:text-[length:inherit]\",\n className,\n )}\n {...props}\n />\n ),\n hr: ({ node: _node, className, ...props }) => (\n <hr className={clsx(\"my-4 border-outline-variant\", className)} {...props} />\n ),\n table: ({ node: _node, className, ...props }) => (\n <div className=\"my-3 overflow-x-auto rounded-small border border-outline-variant\">\n <table className={clsx(\"w-full border-collapse\", body, className)} {...props} />\n </div>\n ),\n thead: ({ node: _node, className, ...props }) => (\n <thead className={clsx(\"bg-surface-container\", className)} {...props} />\n ),\n th: ({ node: _node, className, ...props }) => (\n <th\n className={clsx(\n \"border-b border-outline-variant px-3 py-2 text-left text-title-small text-on-surface\",\n className,\n )}\n {...props}\n />\n ),\n td: ({ node: _node, className, ...props }) => (\n <td\n className={clsx(\"border-t border-outline-variant px-3 py-2 text-on-surface\", className)}\n {...props}\n />\n ),\n img: ({ node: _node, className, alt, ...props }) => (\n <img\n className={clsx(\"my-2 max-w-full rounded-medium\", className)}\n alt={alt ?? \"\"}\n {...props}\n />\n ),\n input: ({ node: _node, className, ...props }) => (\n <input className={clsx(\"mr-2 accent-primary\", className)} {...props} />\n ),\n };\n}\n\nconst Markdown = forwardRef<HTMLDivElement, MarkdownProps>(\n ({ content, className, size = \"medium\", allowHtml = false }, ref) => {\n return (\n <div\n ref={ref}\n className={clsx(\"markdown min-w-0 text-on-surface\", bodyClass[size], className)}\n >\n <ReactMarkdown\n remarkPlugins={[remarkGfm]}\n rehypePlugins={allowHtml ? [rehypeRaw] : undefined}\n components={m3Components(size)}\n >\n {content}\n </ReactMarkdown>\n </div>\n );\n },\n);\n\nMarkdown.displayName = \"Markdown\";\n\nexport { Markdown };\nexport type { MarkdownProps };\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/MessageBubble.tsx), MIT, rebuilt on Material Design 3.\n\n\"use client\";\n\nimport { CircleButton } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\n\nimport { Markdown } from \"./Markdown\";\n\nexport interface MessageBubbleProps {\n content: string;\n isUser: boolean;\n isStreaming?: boolean;\n onCopy?: (content: string) => void;\n className?: string;\n}\n\n/**\n * One chat turn. The user turn is an M3 bubble (`secondary-container`, large shape), the\n * assistant turn is plain markdown on the surface, as in M3 / Gemini conversations.\n */\nexport function MessageBubble({\n content,\n isUser,\n isStreaming = false,\n onCopy,\n className,\n}: MessageBubbleProps) {\n return (\n <div\n className={clsx(\"group flex flex-col py-2\", isUser ? \"items-end\" : \"items-start\", className)}\n >\n <div\n className={clsx(\n \"min-w-0\",\n isUser\n ? \"max-w-[80%] rounded-large rounded-br-extra-small bg-secondary-container px-4 py-2.5 text-body-large text-on-secondary-container\"\n : \"w-full max-w-full bg-transparent text-body-large text-on-surface\",\n )}\n aria-busy={isStreaming || undefined}\n >\n {isUser ? (\n <div className=\"whitespace-pre-wrap break-words\">{content}</div>\n ) : (\n <Markdown content={content} size=\"large\" className=\"break-words\" />\n )}\n </div>\n {!isUser && onCopy ? (\n <div className=\"mt-1 flex opacity-0 transition-opacity duration-200 ease-standard group-focus-within:opacity-100 group-hover:opacity-100\">\n <CircleButton\n icon=\"content_copy\"\n variant=\"standard\"\n size=\"sm\"\n onClick={() => onCopy(content)}\n aria-label={isStreaming ? \"Copy Streaming Message\" : \"Copy Message\"}\n title={isStreaming ? \"Copy streaming message\" : \"Copy message\"}\n />\n </div>\n ) : null}\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/InlineWorkerCard.tsx), MIT, rebuilt on Material Design 3.\n\nimport { useId, useMemo, useState } from \"react\";\nimport { clsx } from \"clsx\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { Button, Icon } from \"@aphrody/m3-primitives\";\nimport { ToolCall } from \"./ToolCall\";\nimport { Markdown } from \"./Markdown\";\nimport type { TranscriptStep } from \"./types\";\nimport { pairTranscriptSteps } from \"./types\";\nimport { CircularIndicator, StatusChip, type ChipTone, expandMotion, focusRing } from \"./internal\";\n\n/** Collapse runs of 3+ spaces to 2, preventing Markdown 4-space code blocks. */\nfunction stripExcessWhitespace(text: string): string {\n return text.replace(/ {3,}/g, \" \");\n}\n\ninterface InlineWorkerCardProps {\n title: string;\n status: string;\n toolCallCount: number;\n liveStatus?: string | null;\n transcript: TranscriptStep[];\n isTranscriptLoading?: boolean;\n onCopyLogs?: () => void;\n onCancel?: () => void;\n className?: string;\n /** Start expanded (uncontrolled). */\n defaultExpanded?: boolean;\n}\n\nfunction statusTone(status: string): ChipTone {\n switch (status) {\n case \"running\":\n return \"primary\";\n case \"completed\":\n return \"success\";\n case \"failed\":\n case \"error\":\n case \"cancelled\":\n return \"error\";\n default:\n return \"neutral\";\n }\n}\n\n/** A worker run as an M3 filled card: header, status chip, expandable transcript. */\nfunction InlineWorkerCard({\n title,\n status,\n toolCallCount,\n liveStatus,\n transcript,\n isTranscriptLoading,\n onCopyLogs,\n onCancel,\n className,\n defaultExpanded = false,\n}: InlineWorkerCardProps) {\n const [expanded, setExpanded] = useState(defaultExpanded);\n const contentId = useId();\n\n const items = useMemo(() => pairTranscriptSteps(transcript), [transcript]);\n\n const isRunning = status === \"running\";\n const isDone = status === \"completed\";\n const tone = statusTone(status);\n\n return (\n <div className={clsx(\"group flex min-w-0 flex-col items-start\", className)}>\n <div className=\"min-w-0 max-w-full overflow-hidden rounded-medium bg-surface-container text-on-surface\">\n <button\n type=\"button\"\n onClick={() => setExpanded((v) => !v)}\n aria-expanded={expanded}\n aria-controls={contentId}\n className={clsx(\n \"flex w-full items-start gap-3 rounded-medium px-4 py-3 text-left transition-colors duration-200 ease-standard\",\n \"hover:bg-on-surface/8 active:bg-on-surface/10\",\n focusRing,\n )}\n >\n <div className=\"flex size-8 shrink-0 items-center justify-center\">\n {isRunning ? (\n <CircularIndicator size={20} label=\"Worker running\" />\n ) : isDone ? (\n <div className=\"flex size-8 items-center justify-center rounded-full bg-success-container text-on-success-container\">\n <Icon name=\"check_circle\" size={18} filled />\n </div>\n ) : tone === \"error\" ? (\n <div className=\"flex size-8 items-center justify-center rounded-full bg-error-container text-on-error-container\">\n <Icon name=\"error\" size={18} filled />\n </div>\n ) : (\n <div className=\"flex size-8 items-center justify-center rounded-full bg-surface-container-highest text-on-surface-variant\">\n <Icon name=\"build\" size={18} />\n </div>\n )}\n </div>\n\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <div className=\"line-clamp-2 min-w-0 flex-1 text-title-small text-on-surface\">\n {title}\n </div>\n <StatusChip tone={tone}>{status}</StatusChip>\n </div>\n <div className=\"mt-1 flex items-center gap-2 text-body-small text-on-surface-variant\">\n <span>{toolCallCount} tool calls</span>\n {liveStatus ? <span className=\"truncate text-outline\">{liveStatus}</span> : null}\n </div>\n </div>\n\n <Icon\n name=\"expand_more\"\n size={20}\n className={clsx(\n \"mt-1.5 shrink-0 text-on-surface-variant transition-transform duration-300 ease-emphasized\",\n expanded ? \"rotate-180\" : \"\",\n )}\n />\n </button>\n\n <AnimatePresence initial={false}>\n {expanded ? (\n <motion.div\n id={contentId}\n key=\"transcript\"\n {...expandMotion}\n className=\"overflow-hidden\"\n >\n <div className=\"flex flex-col gap-2 border-t border-outline-variant px-4 py-3\">\n {isTranscriptLoading ? (\n <div className=\"flex items-center gap-2 text-body-small text-on-surface-variant\">\n <CircularIndicator size={16} label=\"Loading transcript\" />\n Loading worker transcript...\n </div>\n ) : items.length > 0 ? (\n items.map((item) =>\n item.kind === \"tool\" ? (\n <ToolCall key={item.pair.id} pair={item.pair} />\n ) : (\n <Markdown\n key={`text-${item.text}`}\n content={stripExcessWhitespace(item.text)}\n size=\"small\"\n className=\"text-on-surface-variant\"\n />\n ),\n )\n ) : (\n <div className=\"text-body-small text-on-surface-variant\">No tool calls yet.</div>\n )}\n </div>\n </motion.div>\n ) : null}\n </AnimatePresence>\n </div>\n\n {(onCopyLogs || (onCancel && isRunning)) && (\n <div className=\"mt-1 flex gap-1 opacity-0 transition-opacity duration-200 ease-standard group-focus-within:opacity-100 group-hover:opacity-100\">\n {onCopyLogs && (\n <Button variant=\"text\" size=\"xs\" onClick={onCopyLogs} title=\"Copy logs\">\n <Icon name=\"content_copy\" size={18} />\n Copy\n </Button>\n )}\n {onCancel && isRunning && (\n <Button variant=\"text\" size=\"xs\" onClick={onCancel} title=\"Cancel\">\n <Icon name=\"stop\" size={18} />\n Cancel\n </Button>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport { InlineWorkerCard };\nexport type { InlineWorkerCardProps };\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/InlineBranchCard.tsx), MIT, rebuilt on Material Design 3.\n\nimport { useId, useState } from \"react\";\nimport { clsx } from \"clsx\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { Icon } from \"@aphrody/m3-primitives\";\nimport { Markdown } from \"./Markdown\";\nimport { CircularIndicator, StatusChip, expandMotion, focusRing } from \"./internal\";\n\ninterface InlineBranchCardProps {\n description: string;\n completedAt: string | null;\n conclusion?: string | null;\n className?: string;\n /** Start expanded (uncontrolled). */\n defaultExpanded?: boolean;\n}\n\n/** A thinking branch as an M3 filled card: header, status chip, expandable conclusion. */\nfunction InlineBranchCard({\n description,\n completedAt,\n conclusion,\n className,\n defaultExpanded = false,\n}: InlineBranchCardProps) {\n const [expanded, setExpanded] = useState(defaultExpanded);\n const isRunning = !completedAt;\n const contentId = useId();\n const canExpand = !!conclusion;\n\n return (\n <div className={clsx(\"group flex min-w-0 flex-col items-start\", className)}>\n <div className=\"min-w-0 max-w-full overflow-hidden rounded-medium bg-surface-container text-on-surface\">\n <button\n type=\"button\"\n onClick={() => canExpand && setExpanded((v) => !v)}\n aria-expanded={canExpand ? expanded : undefined}\n aria-controls={canExpand ? contentId : undefined}\n className={clsx(\n \"flex w-full items-start gap-3 rounded-medium px-4 py-3 text-left transition-colors duration-200 ease-standard\",\n canExpand && \"hover:bg-on-surface/8 active:bg-on-surface/10\",\n focusRing,\n )}\n >\n <div className=\"flex size-8 shrink-0 items-center justify-center\">\n {isRunning ? (\n <CircularIndicator size={20} label=\"Thinking\" />\n ) : (\n <div className=\"flex size-8 items-center justify-center rounded-full bg-primary-container text-on-primary-container\">\n <Icon name=\"alt_route\" size={18} />\n </div>\n )}\n </div>\n <div className=\"min-w-0 flex-1 self-center\">\n <div className=\"flex items-center gap-2\">\n <div className=\"line-clamp-2 min-w-0 flex-1 text-title-small text-on-surface\">\n {description}\n </div>\n <StatusChip tone={isRunning ? \"primary\" : \"success\"}>\n {isRunning ? \"thinking\" : \"done\"}\n </StatusChip>\n </div>\n </div>\n {canExpand && (\n <Icon\n name=\"expand_more\"\n size={20}\n className={clsx(\n \"mt-1.5 shrink-0 text-on-surface-variant transition-transform duration-300 ease-emphasized\",\n expanded ? \"rotate-180\" : \"\",\n )}\n />\n )}\n </button>\n <AnimatePresence initial={false}>\n {expanded && conclusion ? (\n <motion.div\n id={contentId}\n key=\"conclusion\"\n {...expandMotion}\n className=\"overflow-hidden\"\n >\n <div className=\"border-t border-outline-variant px-4 py-3\">\n <Markdown content={conclusion} size=\"small\" className=\"text-on-surface-variant\" />\n </div>\n </motion.div>\n ) : null}\n </AnimatePresence>\n </div>\n </div>\n );\n}\n\nexport { InlineBranchCard };\nexport type { InlineBranchCardProps };\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/ModelSelector.tsx), MIT, rebuilt on Material Design 3.\n\n\"use client\";\n\nimport {\n Icon,\n Popover,\n usePopover,\n SelectPill,\n type SelectPillProps,\n} from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\nimport { forwardRef, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { focusRing } from \"./internal\";\nimport type { ModelOption } from \"./types\";\n\nexport interface ModelSelectorProps {\n /** Available models */\n models: ModelOption[];\n /** Currently selected model ID */\n value: string;\n /** Called when a model is selected */\n onChange: (value: string) => void;\n /** Placeholder when nothing selected */\n placeholder?: string;\n /** Search placeholder */\n searchPlaceholder?: string;\n /** SelectPill variant */\n variant?: SelectPillProps[\"variant\"];\n /** SelectPill size */\n size?: SelectPillProps[\"size\"];\n /** Controlled popover (optional) */\n popover?: ReturnType<typeof usePopover>;\n /** Additional trigger className */\n className?: string;\n /** Disabled state */\n disabled?: boolean;\n}\n\n/** Group models by provider, keeping the order of first appearance. */\nexport function groupModelsByProvider(\n models: ModelOption[],\n search = \"\",\n): Record<string, ModelOption[]> {\n const q = search.trim().toLowerCase();\n const filtered = q\n ? models.filter((m) => m.name.toLowerCase().includes(q) || m.provider.toLowerCase().includes(q))\n : models;\n\n return filtered.reduce(\n (acc, model) => {\n if (!acc[model.provider]) acc[model.provider] = [];\n acc[model.provider].push(model);\n return acc;\n },\n {} as Record<string, ModelOption[]>,\n );\n}\n\nexport interface ModelOptionListProps {\n /** Models grouped by provider (see {@link groupModelsByProvider}). */\n grouped: Record<string, ModelOption[]>;\n /** Currently selected model ID */\n value: string;\n /** Called when a model is picked */\n onSelect: (value: string) => void;\n className?: string;\n}\n\n/**\n * The M3 menu list of the model selector: provider section headers (`text-title-small`),\n * 48 dp two-line items (`text-label-large` + `text-body-small` supporting text), the selected\n * item on `secondary-container`, capabilities as small outlined chips.\n */\nexport function ModelOptionList({ grouped, value, onSelect, className }: ModelOptionListProps) {\n const providers = Object.entries(grouped);\n return (\n <div\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- M3 menu whose options are rich rows (headers, supporting text, chips); a native <select>/<datalist> cannot render them.\n role=\"listbox\"\n aria-label=\"Models\"\n className={clsx(\"flex flex-col\", className)}\n >\n {providers.map(([provider, providerModels], groupIndex) => (\n <div\n key={provider}\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- provider section of the custom listbox with a visible M3 header row; <optgroup> only exists inside a native <select>.\n role=\"group\"\n aria-label={provider}\n className={clsx(groupIndex > 0 && \"mt-1 border-t border-outline-variant pt-1\")}\n >\n <div className=\"px-3 pt-2 pb-1 text-title-small text-on-surface-variant\">{provider}</div>\n {providerModels.map((model) => {\n const selected = model.id === value;\n return (\n <button\n key={model.id}\n type=\"button\"\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- M3 two-line menu item (label, supporting text, capability chips, check icon); a native <option> can only hold text.\n role=\"option\"\n aria-selected={selected}\n onClick={() => onSelect(model.id)}\n className={clsx(\n \"flex min-h-12 w-full items-center gap-3 px-3 py-2 text-left\",\n \"transition-colors duration-200 ease-standard\",\n selected\n ? \"bg-secondary-container text-on-secondary-container\"\n : \"text-on-surface hover:bg-on-surface/8 active:bg-on-surface/10\",\n focusRing,\n \"focus-visible:outline-offset-[-3px]\",\n )}\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate text-label-large\">{model.name}</div>\n {model.context_window || model.capabilities?.length ? (\n <div className=\"mt-0.5 flex flex-wrap items-center gap-1\">\n {model.context_window ? (\n <span\n className={clsx(\n \"text-body-small\",\n selected ? \"text-on-secondary-container\" : \"text-on-surface-variant\",\n )}\n >\n {model.context_window.toLocaleString()} tokens\n </span>\n ) : null}\n {model.capabilities?.map((capability) => (\n <span\n key={capability}\n className={clsx(\n \"inline-flex h-5 items-center rounded-small border border-outline-variant px-1.5 text-label-small\",\n selected ? \"text-on-secondary-container\" : \"text-on-surface-variant\",\n )}\n >\n {capability}\n </span>\n ))}\n </div>\n ) : null}\n </div>\n {selected && <Icon name=\"check\" size={20} className=\"shrink-0\" />}\n </button>\n );\n })}\n </div>\n ))}\n {providers.length === 0 && (\n <div className=\"px-3 py-3 text-center text-body-small text-on-surface-variant\">\n No models found\n </div>\n )}\n </div>\n );\n}\n\n/**\n * The menu's search field. It mounts with the popover content and takes focus then (replaces\n * `autoFocus`), so typing filters the list as soon as the menu opens.\n */\nfunction ModelSearchField({\n value,\n onChange,\n placeholder,\n}: {\n value: string;\n onChange: (value: string) => void;\n placeholder: string;\n}) {\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n inputRef.current?.focus();\n }, []);\n\n return (\n <div className=\"px-2 pb-2\">\n <label className=\"flex h-10 items-center gap-2 rounded-full bg-surface-container-high px-3 text-on-surface-variant focus-within:bg-surface-container-highest\">\n <Icon name=\"search\" size={20} className=\"shrink-0\" />\n <input\n ref={inputRef}\n value={value}\n onChange={(event) => onChange(event.target.value)}\n placeholder={placeholder}\n aria-label={placeholder}\n className=\"min-w-0 flex-1 bg-transparent text-body-large text-on-surface outline-none placeholder:text-on-surface-variant\"\n />\n </label>\n </div>\n );\n}\n\nexport const ModelSelector = forwardRef<HTMLButtonElement, ModelSelectorProps>(\n (\n {\n models,\n value,\n onChange,\n placeholder = \"Select model...\",\n searchPlaceholder = \"Search models...\",\n variant,\n size,\n popover: externalPopover,\n className,\n disabled,\n },\n ref,\n ) => {\n const internalPopover = usePopover();\n const popover = externalPopover ?? internalPopover;\n const [search, setSearch] = useState(\"\");\n\n const selectedModel = models.find((m) => m.id === value);\n\n const grouped = useMemo(() => groupModelsByProvider(models, search), [models, search]);\n\n return (\n <Popover.Root\n open={popover.open}\n onOpenChange={(open) => {\n popover.setOpen(open);\n if (!open) setSearch(\"\");\n }}\n >\n <Popover.Trigger asChild>\n <SelectPill\n ref={ref}\n variant={variant}\n size={size}\n disabled={disabled}\n aria-haspopup=\"listbox\"\n className={clsx(\"w-full\", className)}\n >\n {selectedModel?.name ?? placeholder}\n </SelectPill>\n </Popover.Trigger>\n <Popover.Content\n align=\"end\"\n sideOffset={8}\n style={{ width: 280 }}\n className=\"overflow-hidden rounded-extra-small! py-2\"\n >\n {/* Search */}\n <ModelSearchField value={search} onChange={setSearch} placeholder={searchPlaceholder} />\n\n {/* Grouped results */}\n <div className=\"max-h-[320px] overflow-y-auto\">\n <ModelOptionList\n grouped={grouped}\n value={value}\n onSelect={(id) => {\n onChange(id);\n popover.setOpen(false);\n setSearch(\"\");\n }}\n />\n </div>\n </Popover.Content>\n </Popover.Root>\n );\n },\n);\n\nModelSelector.displayName = \"ModelSelector\";\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/ChatComposer.tsx), MIT, rebuilt on Material Design 3.\n\n\"use client\";\n\nimport { CircleButton, Icon, Popover, SelectPill, usePopover } from \"@aphrody/m3-primitives\";\nimport { m3Durations, m3Easings } from \"@aphrody/m3-motion\";\nimport { clsx } from \"clsx\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { type ReactNode } from \"react\";\n\nimport { focusRing } from \"./internal\";\nimport { ModelSelector } from \"./ModelSelector\";\nimport type { ModelOption } from \"./types\";\n\nexport interface ChatComposerProps {\n /** Current draft text */\n draft: string;\n /** Called when draft changes */\n onDraftChange: (value: string) => void;\n /** Called when user hits send (Enter or send button) */\n onSend: () => void;\n /** Placeholder for the textarea */\n placeholder?: string;\n /** Show an optional heading above the composer */\n heading?: ReactNode;\n /** Disable the composer — draft can still change, but send/voice are blocked */\n isSending?: boolean;\n /** Project selector config — omit to hide */\n projectSelector?: {\n value: string;\n options: string[];\n onChange: (project: string) => void;\n popover: ReturnType<typeof usePopover>;\n };\n /** Model selector config — omit to hide */\n modelSelector?: {\n value: string;\n options: ModelOption[];\n onChange: (model: string) => void;\n };\n /** Voice button handler — omit to hide */\n onOpenVoice?: () => void;\n /** Optional content rendered at the far right of the toolbar (before send) */\n toolbarExtra?: ReactNode;\n /** Stop handler: while `isSending`, the send button becomes an M3 `stop` icon button. */\n onStop?: () => void;\n /** Additional className on the composer container */\n className?: string;\n}\n\nconst iconButtonEnter = {\n initial: { scale: 0.6, opacity: 0 },\n animate: {\n scale: 1,\n opacity: 1,\n transition: { duration: m3Durations.short4, ease: m3Easings.emphasizedDecelerate },\n },\n exit: {\n scale: 0.6,\n opacity: 0,\n transition: { duration: m3Durations.short3, ease: m3Easings.emphasizedAccelerate },\n },\n} as const;\n\n/**\n * Generic chat composer on the M3 search-bar anatomy: a `surface-container-high` container with\n * the extra-large (28 dp) shape, a `text-body-large` expanding textarea, an optional project\n * pill, model selector chip, a standard mic icon button and a filled send / stop icon button.\n */\nexport function ChatComposer({\n draft,\n onDraftChange,\n onSend,\n placeholder = \"Ask something...\",\n heading,\n isSending = false,\n projectSelector,\n modelSelector,\n onOpenVoice,\n toolbarExtra,\n onStop,\n className,\n}: ChatComposerProps) {\n const canSend = !isSending && draft.trim().length > 0;\n const showStop = isSending && !!onStop;\n\n return (\n <>\n {heading && (\n <div className=\"mb-3 flex items-center gap-2 px-1 text-title-small text-on-surface-variant\">\n <Icon name=\"auto_awesome\" size={18} filled className=\"text-primary\" />\n {heading}\n </div>\n )}\n\n <div\n className={clsx(\n \"m3-chat-composer rounded-extra-large bg-surface-container-high px-4 pt-3 pb-2 text-on-surface\",\n \"transition-colors duration-200 ease-standard focus-within:bg-surface-container-highest\",\n className,\n )}\n >\n <textarea\n value={draft}\n onChange={(event) => onDraftChange(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" && !event.shiftKey) {\n event.preventDefault();\n onSend();\n }\n }}\n placeholder={placeholder}\n aria-label={placeholder}\n rows={2}\n className=\"block w-full resize-none border-0 bg-transparent px-1 text-body-large text-on-surface caret-primary outline-none placeholder:text-on-surface-variant focus:outline-none focus:ring-0\"\n />\n\n <div className=\"mt-2 flex items-center justify-between gap-2\">\n {projectSelector ? (\n <div className=\"w-[210px]\">\n <Popover.Root\n open={projectSelector.popover.open}\n onOpenChange={projectSelector.popover.setOpen}\n >\n <Popover.Trigger asChild>\n <SelectPill className=\"w-full\" aria-haspopup=\"listbox\">\n {projectSelector.value}\n </SelectPill>\n </Popover.Trigger>\n <Popover.Content\n align=\"start\"\n sideOffset={8}\n className=\"min-w-[210px] overflow-hidden rounded-extra-small! py-2\"\n >\n <div\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- M3 menu in a popover with icon rows; a native <select>/<datalist> cannot render it.\n role=\"listbox\"\n aria-label=\"Projects\"\n >\n {projectSelector.options.map((option) => {\n const selected = option === projectSelector.value;\n return (\n <button\n key={option}\n type=\"button\"\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- M3 menu item with a check icon and state layer; a native <option> can only hold text.\n role=\"option\"\n aria-selected={selected}\n onClick={() => {\n projectSelector.onChange(option);\n projectSelector.popover.setOpen(false);\n }}\n className={clsx(\n \"flex h-12 w-full items-center gap-3 px-3 text-left text-label-large\",\n \"transition-colors duration-200 ease-standard\",\n selected\n ? \"bg-secondary-container text-on-secondary-container\"\n : \"text-on-surface hover:bg-on-surface/8\",\n focusRing,\n \"focus-visible:outline-offset-[-3px]\",\n )}\n >\n <span className=\"min-w-0 flex-1 truncate\">{option}</span>\n {selected && <Icon name=\"check\" size={20} />}\n </button>\n );\n })}\n </div>\n </Popover.Content>\n </Popover.Root>\n </div>\n ) : (\n <div />\n )}\n\n <motion.div layout className=\"flex items-center gap-1\">\n {modelSelector && (\n <div className=\"w-[180px]\">\n <ModelSelector\n models={modelSelector.options}\n value={modelSelector.value}\n onChange={modelSelector.onChange}\n size=\"md\"\n />\n </div>\n )}\n\n {toolbarExtra}\n\n {onOpenVoice && (\n <CircleButton\n icon=\"mic\"\n variant=\"standard\"\n onClick={onOpenVoice}\n disabled={isSending}\n aria-label=\"Open Voice Input\"\n />\n )}\n\n <AnimatePresence initial={false} mode=\"popLayout\">\n {showStop ? (\n <motion.button\n key=\"stop\"\n type=\"button\"\n {...iconButtonEnter}\n onClick={onStop}\n aria-label=\"Stop\"\n className={clsx(\n \"flex size-10 shrink-0 items-center justify-center rounded-full bg-primary text-on-primary\",\n \"transition-colors duration-200 ease-standard hover:bg-primary/92 active:bg-primary/90\",\n focusRing,\n )}\n >\n <Icon name=\"stop\" size={24} filled />\n </motion.button>\n ) : canSend ? (\n <motion.button\n key=\"send\"\n type=\"button\"\n {...iconButtonEnter}\n onClick={onSend}\n aria-label=\"Send\"\n className={clsx(\n \"flex size-10 shrink-0 items-center justify-center rounded-full bg-primary text-on-primary\",\n \"transition-colors duration-200 ease-standard hover:bg-primary/92 active:bg-primary/90\",\n focusRing,\n )}\n >\n <Icon name=\"arrow_upward\" size={24} />\n </motion.button>\n ) : null}\n </AnimatePresence>\n </motion.div>\n </div>\n </div>\n </>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/TaskStatusIcon.tsx), MIT, rebuilt on Material Design 3.\n\nimport { Icon } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\n\nimport type { TaskStatus } from \"./types\";\nimport { TASK_STATUS_LABEL } from \"./types\";\n\n/** Material Symbols glyph and M3 color role per status. */\nconst config: Record<TaskStatus, { icon: string; filled: boolean; color: string }> = {\n done: { icon: \"check_circle\", filled: true, color: \"text-success\" },\n in_progress: { icon: \"clock_loader_40\", filled: true, color: \"text-primary\" },\n ready: { icon: \"radio_button_checked\", filled: false, color: \"text-primary\" },\n pending_approval: { icon: \"schedule\", filled: false, color: \"text-warning\" },\n backlog: { icon: \"radio_button_unchecked\", filled: false, color: \"text-outline\" },\n};\n\nexport interface TaskStatusIconProps {\n status: TaskStatus;\n size?: number;\n className?: string;\n /** Accessible label; defaults to the status label. Pass `\"\"` for a decorative icon. */\n label?: string;\n}\n\nexport function TaskStatusIcon({ status, size = 16, className, label }: TaskStatusIconProps) {\n const { icon, filled, color } = config[status];\n return (\n <Icon\n name={icon}\n size={size}\n filled={filled}\n label={label ?? TASK_STATUS_LABEL[status]}\n data-status={status}\n className={clsx(color, className)}\n />\n );\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/TaskPriorityIcon.tsx), MIT, rebuilt on Material Design 3.\n\nimport { Icon } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\n\nimport type { TaskPriority } from \"./types\";\nimport { TASK_PRIORITY_LABEL } from \"./types\";\n\n/** Material Symbols glyph and M3 color role per priority. */\nconst config: Record<TaskPriority, { icon: string; filled: boolean; color: string }> = {\n critical: { icon: \"priority_high\", filled: true, color: \"text-error\" },\n high: { icon: \"keyboard_double_arrow_up\", filled: false, color: \"text-warning\" },\n medium: { icon: \"drag_handle\", filled: false, color: \"text-primary\" },\n low: { icon: \"keyboard_arrow_down\", filled: false, color: \"text-outline\" },\n};\n\nexport interface TaskPriorityIconProps {\n priority: TaskPriority;\n size?: number;\n className?: string;\n /** Accessible label; defaults to the priority label. Pass `\"\"` for a decorative icon. */\n label?: string;\n}\n\nexport function TaskPriorityIcon({ priority, size = 14, className, label }: TaskPriorityIconProps) {\n const { icon, filled, color } = config[priority];\n return (\n <Icon\n name={icon}\n size={size}\n filled={filled}\n weight={600}\n label={label ?? `${TASK_PRIORITY_LABEL[priority]} priority`}\n data-priority={priority}\n className={clsx(color, className)}\n />\n );\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/TaskRow.tsx), MIT, rebuilt on Material Design 3.\n\nimport { DropdownMenu, Icon } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\n\nimport { focusRing } from \"./internal\";\nimport { TaskPriorityIcon } from \"./TaskPriorityIcon\";\nimport { TaskStatusIcon } from \"./TaskStatusIcon\";\nimport type { Task, TaskStatus } from \"./types\";\nimport { TASK_STATUS_LABEL, TASK_STATUS_ORDER } from \"./types\";\n\nexport interface TaskRowProps {\n task: Task;\n onClick?: (task: Task) => void;\n isActive?: boolean;\n resolveAgentName?: (agentId: string) => string;\n onStatusChange?: (task: Task, status: TaskStatus) => void;\n onDelete?: (task: Task) => void;\n className?: string;\n}\n\n/** Column template shared with the {@link TaskList} header. */\nexport const TASK_ROW_GRID = \"20px 18px 72px 1fr 56px 96px 40px\";\n\n/** M3 list item height at desktop density (56 dp baseline, two density steps). */\nexport const TASK_ROW_HEIGHT = 48;\n\n/**\n * A task as a dense M3 list item: leading status and priority icons, `text-body-large` headline,\n * `text-body-small` supporting columns, `on-surface` 8 % hover, `secondary-container` selection\n * and a trailing overflow-menu icon button.\n */\nexport function TaskRow({\n task,\n onClick,\n isActive,\n resolveAgentName,\n onStatusChange,\n onDelete,\n className,\n}: TaskRowProps) {\n const completedSubtasks = task.subtasks.filter((s) => s.completed).length;\n const assigneeName = resolveAgentName?.(task.assigned_agent_id) ?? task.assigned_agent_id;\n const hasActions = onStatusChange || onDelete;\n const isRowInteractive = typeof onClick === \"function\";\n const handleRowKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.repeat) return;\n if (e.key === \"Enter\") {\n e.preventDefault();\n onClick?.(task);\n }\n };\n const handleRowKeyUp = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.repeat) return;\n if (e.key === \" \") {\n e.preventDefault();\n onClick?.(task);\n }\n };\n\n const rowClassName = clsx(\n \"task-row group grid w-full items-center border-b border-outline-variant text-left\",\n \"transition-colors duration-200 ease-standard\",\n focusRing,\n \"focus-visible:outline-offset-[-3px]\",\n isActive\n ? \"bg-secondary-container text-on-secondary-container\"\n : \"bg-transparent text-on-surface hover:bg-on-surface/8\",\n isRowInteractive && !isActive && \"active:bg-on-surface/10\",\n className,\n );\n const rowStyle: React.CSSProperties = {\n gridTemplateColumns: TASK_ROW_GRID,\n minHeight: TASK_ROW_HEIGHT,\n paddingLeft: 16,\n paddingRight: 8,\n gap: 12,\n };\n\n const content = (\n <>\n <TaskStatusIcon status={task.status} size={20} />\n <TaskPriorityIcon priority={task.priority} size={18} />\n\n <span\n className={clsx(\n \"truncate font-code text-body-small\",\n isActive ? \"text-on-secondary-container\" : \"text-on-surface-variant\",\n )}\n >\n SPC-{task.task_number}\n </span>\n\n <span className=\"min-w-0 truncate text-body-large\">{task.title}</span>\n\n <span\n className={clsx(\n \"text-right text-body-small\",\n isActive ? \"text-on-secondary-container\" : \"text-on-surface-variant\",\n )}\n >\n {task.subtasks.length > 0 ? `${completedSubtasks}/${task.subtasks.length}` : \"\"}\n </span>\n\n <span\n className={clsx(\n \"truncate text-right text-body-small\",\n isActive ? \"text-on-secondary-container\" : \"text-on-surface-variant\",\n )}\n >\n {assigneeName}\n </span>\n\n <span className=\"flex items-center justify-center\">\n {hasActions ? (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <button\n type=\"button\"\n aria-label=\"Task Actions\"\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") e.stopPropagation();\n }}\n className={clsx(\n \"flex size-8 items-center justify-center rounded-full text-on-surface-variant\",\n \"opacity-0 transition-[opacity,background-color] duration-200 ease-standard\",\n \"hover:bg-on-surface/8 active:bg-on-surface/10\",\n \"group-hover:opacity-100 group-focus-within:opacity-100 focus-visible:opacity-100 data-popup-open:opacity-100\",\n focusRing,\n )}\n >\n <Icon name=\"more_vert\" size={20} />\n </button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\" sideOffset={4}>\n {onStatusChange &&\n TASK_STATUS_ORDER.filter((s) => s !== task.status).map((s) => (\n <DropdownMenu.Item\n key={s}\n onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n onStatusChange(task, s);\n }}\n >\n <TaskStatusIcon status={s} size={20} label=\"\" />\n <span>{TASK_STATUS_LABEL[s]}</span>\n </DropdownMenu.Item>\n ))}\n {onStatusChange && onDelete && <DropdownMenu.Separator />}\n {onDelete && (\n <DropdownMenu.Item\n onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n onDelete(task);\n }}\n className=\"text-error\"\n >\n <Icon name=\"delete\" size={20} />\n <span>Delete</span>\n </DropdownMenu.Item>\n )}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n ) : null}\n </span>\n </>\n );\n\n if (!isRowInteractive) {\n return (\n <div aria-current={isActive ? \"true\" : undefined} className={rowClassName} style={rowStyle}>\n {content}\n </div>\n );\n }\n\n return (\n <div\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- the row hosts the overflow-menu <button>; a native <button> row would nest interactive content.\n role=\"button\"\n tabIndex={0}\n aria-current={isActive ? \"true\" : undefined}\n onClick={() => onClick(task)}\n onKeyDown={handleRowKeyDown}\n onKeyUp={handleRowKeyUp}\n className={rowClassName}\n style={rowStyle}\n >\n {content}\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/TaskList.tsx), MIT, rebuilt on Material Design 3.\n\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger, Icon } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\nimport { useMemo } from \"react\";\n\nimport { focusRing } from \"./internal\";\nimport { TASK_ROW_GRID, TaskRow } from \"./TaskRow\";\nimport { TaskStatusIcon } from \"./TaskStatusIcon\";\nimport type { Task, TaskStatus } from \"./types\";\nimport { TASK_STATUS_LABEL, TASK_STATUS_ORDER } from \"./types\";\n\nexport interface TaskListProps {\n tasks: Task[];\n groups?: TaskStatus[];\n collapsedGroups?: Set<TaskStatus>;\n onToggleGroup?: (status: TaskStatus) => void;\n activeTaskId?: string;\n onTaskClick: (task: Task) => void;\n onStatusChange?: (task: Task, status: TaskStatus) => void;\n onDelete?: (task: Task) => void;\n resolveAgentName?: (agentId: string) => string;\n className?: string;\n}\n\nconst GRID_STYLE = {\n gridTemplateColumns: TASK_ROW_GRID,\n paddingLeft: 16,\n paddingRight: 8,\n gap: 12,\n} as const;\n\n/**\n * Tasks grouped by status as an M3 list: a column header in `text-label-medium`, collapsible\n * section headers in `text-title-small`, `outline-variant` dividers.\n */\nexport function TaskList({\n tasks,\n groups = TASK_STATUS_ORDER,\n collapsedGroups,\n onToggleGroup,\n activeTaskId,\n onTaskClick,\n onStatusChange,\n onDelete,\n resolveAgentName,\n className,\n}: TaskListProps) {\n const grouped = useMemo(() => {\n const map = new Map<TaskStatus, Task[]>();\n for (const status of groups) map.set(status, []);\n for (const task of tasks) {\n const bucket = map.get(task.status);\n if (bucket) bucket.push(task);\n }\n return map;\n }, [tasks, groups]);\n\n return (\n <div className={clsx(\"flex flex-col bg-surface text-on-surface\", className)}>\n {/* Column header */}\n <div\n className=\"grid items-center border-b border-outline-variant text-label-medium text-on-surface-variant\"\n style={{ ...GRID_STYLE, height: 32 }}\n >\n <span />\n <span />\n <span>ID</span>\n <span>Title</span>\n <span className=\"text-right\">Subs</span>\n <span className=\"text-right\">Assignee</span>\n <span />\n </div>\n\n {/* Groups */}\n {groups.map((status) => {\n const items = grouped.get(status) ?? [];\n const isOpen = !collapsedGroups?.has(status);\n\n return (\n <Collapsible key={status} open={isOpen} onOpenChange={() => onToggleGroup?.(status)}>\n <CollapsibleTrigger\n className={clsx(\n \"grid w-full items-center rounded-none border-b border-outline-variant bg-surface-container-low\",\n \"text-title-small text-on-surface transition-colors duration-200 ease-standard\",\n \"hover:bg-on-surface/8 active:bg-on-surface/10\",\n focusRing,\n \"focus-visible:outline-offset-[-3px]\",\n )}\n style={{ ...GRID_STYLE, height: 40 }}\n >\n <span className=\"flex items-center justify-center text-on-surface-variant\">\n <Icon\n name=\"chevron_right\"\n size={20}\n className={clsx(\n \"shrink-0 transition-transform duration-300 ease-emphasized\",\n isOpen && \"rotate-90\",\n )}\n />\n </span>\n <span className=\"flex items-center justify-center\">\n <TaskStatusIcon status={status} size={18} label=\"\" />\n </span>\n <span className=\"col-span-5 flex items-center gap-1.5 text-left\">\n {TASK_STATUS_LABEL[status]}\n <span className=\"text-body-small text-on-surface-variant\">({items.length})</span>\n </span>\n </CollapsibleTrigger>\n\n <CollapsibleContent>\n {items.length > 0 ? (\n items.map((task) => (\n <TaskRow\n key={task.id}\n task={task}\n isActive={task.id === activeTaskId}\n onClick={onTaskClick}\n onStatusChange={onStatusChange}\n onDelete={onDelete}\n resolveAgentName={resolveAgentName}\n />\n ))\n ) : (\n <div className=\"border-b border-outline-variant px-4 py-3 text-body-small text-on-surface-variant\">\n No tasks\n </div>\n )}\n </CollapsibleContent>\n </Collapsible>\n );\n })}\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/TaskDetail.tsx), MIT, rebuilt on Material Design 3.\n\nimport { Button, CircleButton, Icon, Select, SelectOption } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\n\nimport { focusRing } from \"./internal\";\nimport { Markdown } from \"./Markdown\";\nimport { TaskPriorityIcon } from \"./TaskPriorityIcon\";\nimport { TaskStatusIcon } from \"./TaskStatusIcon\";\nimport type { Task, TaskStatus } from \"./types\";\nimport { TASK_PRIORITY_LABEL, TASK_STATUS_LABEL, TASK_STATUS_ORDER } from \"./types\";\n\nexport interface TaskDetailProps {\n task: Task;\n resolveAgentName?: (agentId: string) => string;\n onStatusChange?: (task: Task, status: TaskStatus) => void;\n onSubtaskToggle?: (task: Task, index: number, completed: boolean) => void;\n onDelete?: (task: Task) => void;\n onClose?: () => void;\n className?: string;\n}\n\nfunction formatDate(iso: string) {\n return new Date(iso).toLocaleDateString(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n}\n\nfunction Property({ label, children }: { label: string; children: React.ReactNode }) {\n return (\n <div className=\"flex min-w-0 flex-col gap-0.5\">\n <span className=\"text-label-medium text-on-surface-variant\">{label}</span>\n <span className=\"flex min-h-8 items-center gap-1.5 text-body-medium text-on-surface\">\n {children}\n </span>\n </div>\n );\n}\n\n/**\n * A task on an M3 surface: `text-headline-small` title, a property grid, subtasks as an M3 list\n * with checkboxes, markdown description, and actions as M3 buttons (filled for the primary\n * transition, text for the others).\n */\nexport function TaskDetail({\n task,\n resolveAgentName,\n onStatusChange,\n onSubtaskToggle,\n onDelete,\n onClose,\n className,\n}: TaskDetailProps) {\n const ownerName = resolveAgentName?.(task.owner_agent_id) ?? task.owner_agent_id;\n const assigneeName = resolveAgentName?.(task.assigned_agent_id) ?? task.assigned_agent_id;\n const completedCount = task.subtasks.filter((s) => s.completed).length;\n\n return (\n <div className={clsx(\"flex flex-col gap-6 bg-surface p-6 text-on-surface\", className)}>\n {/* Header */}\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center gap-2\">\n <div className=\"flex flex-1 items-center gap-2\">\n <TaskStatusIcon status={task.status} size={20} />\n <TaskPriorityIcon priority={task.priority} size={18} />\n <span className=\"font-code text-body-small text-on-surface-variant\">\n SPC-{task.task_number}\n </span>\n </div>\n {onClose && (\n <CircleButton icon=\"close\" variant=\"standard\" onClick={onClose} aria-label=\"Close\" />\n )}\n </div>\n <h2 className=\"text-headline-small text-on-surface\">{task.title}</h2>\n </div>\n\n {/* Properties */}\n <div className=\"grid grid-cols-2 gap-x-6 gap-y-4 medium:grid-cols-4\">\n <Property label=\"Status\">\n {onStatusChange ? (\n <Select\n value={task.status}\n size=\"md\"\n onChange={(value) => onStatusChange(task, value as TaskStatus)}\n >\n {TASK_STATUS_ORDER.map((s) => (\n <SelectOption key={s} value={s}>\n {TASK_STATUS_LABEL[s]}\n </SelectOption>\n ))}\n </Select>\n ) : (\n TASK_STATUS_LABEL[task.status]\n )}\n </Property>\n <Property label=\"Priority\">\n <TaskPriorityIcon priority={task.priority} size={18} label=\"\" />\n {TASK_PRIORITY_LABEL[task.priority]}\n </Property>\n <Property label=\"Owner\">\n <span className=\"truncate\">{ownerName}</span>\n </Property>\n <Property label=\"Assigned\">\n <span className=\"truncate\">{assigneeName}</span>\n </Property>\n </div>\n\n {/* Subtasks */}\n {task.subtasks.length > 0 && (\n <section className=\"flex flex-col gap-2\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-title-small text-on-surface\">Subtasks</h3>\n <span className=\"text-body-small text-on-surface-variant\">\n {completedCount}/{task.subtasks.length}\n </span>\n </div>\n <ul className=\"m-0 list-none overflow-hidden rounded-medium border border-outline-variant p-0\">\n {task.subtasks.map((subtask, i) => (\n <li key={subtask.title}>\n <button\n type=\"button\"\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- M3 list item with a leading checkbox: the whole 48 dp row toggles and carries the state layer; a native checkbox input cannot host the row.\n role=\"checkbox\"\n aria-checked={subtask.completed}\n onClick={() => onSubtaskToggle?.(task, i, !subtask.completed)}\n className={clsx(\n \"flex min-h-12 w-full items-center gap-4 px-4 py-2 text-left text-body-large\",\n \"transition-colors duration-200 ease-standard hover:bg-on-surface/8 active:bg-on-surface/10\",\n focusRing,\n \"focus-visible:outline-offset-[-3px]\",\n i > 0 && \"border-t border-outline-variant\",\n )}\n >\n <span\n className={clsx(\n \"flex size-[18px] shrink-0 items-center justify-center rounded-[2px] transition-colors duration-200 ease-standard\",\n subtask.completed\n ? \"bg-primary text-on-primary\"\n : \"border-2 border-on-surface-variant\",\n )}\n >\n {subtask.completed && <Icon name=\"check\" size={16} weight={700} />}\n </span>\n <span\n className={clsx(\n \"min-w-0 flex-1\",\n subtask.completed\n ? \"text-on-surface-variant line-through\"\n : \"text-on-surface\",\n )}\n >\n {subtask.title}\n </span>\n </button>\n </li>\n ))}\n </ul>\n </section>\n )}\n\n {/* Description */}\n <section className=\"flex flex-col gap-2\">\n <h3 className=\"text-title-small text-on-surface\">Description</h3>\n {task.description ? (\n <Markdown content={task.description} size=\"medium\" />\n ) : (\n <p className=\"text-body-medium text-on-surface-variant\">No description</p>\n )}\n </section>\n\n {/* Timestamps */}\n <div className=\"flex flex-col gap-1 text-body-small text-on-surface-variant\">\n <span>Created {formatDate(task.created_at)}</span>\n <span>Updated {formatDate(task.updated_at)}</span>\n {task.completed_at && <span>Completed {formatDate(task.completed_at)}</span>}\n </div>\n\n {/* Actions */}\n {(onStatusChange || onDelete) && (\n <div className=\"flex flex-wrap items-center gap-2\">\n {onStatusChange && task.status === \"pending_approval\" && (\n <Button variant=\"filled\" size=\"lg\" onClick={() => onStatusChange(task, \"ready\")}>\n Approve\n </Button>\n )}\n {onStatusChange && task.status === \"backlog\" && (\n <Button variant=\"filled\" size=\"lg\" onClick={() => onStatusChange(task, \"in_progress\")}>\n Execute\n </Button>\n )}\n {onStatusChange && (task.status === \"in_progress\" || task.status === \"ready\") && (\n <Button variant=\"filled\" size=\"lg\" onClick={() => onStatusChange(task, \"done\")}>\n Mark Done\n </Button>\n )}\n {onStatusChange && task.status === \"done\" && (\n <Button variant=\"text\" size=\"lg\" onClick={() => onStatusChange(task, \"ready\")}>\n Reopen\n </Button>\n )}\n {onDelete && (\n <button\n type=\"button\"\n onClick={() => onDelete(task)}\n className={clsx(\n \"inline-flex h-10 items-center justify-center gap-2 rounded-full px-3 text-label-large text-error\",\n \"transition-colors duration-200 ease-standard hover:bg-error/8 active:bg-error/10\",\n focusRing,\n )}\n >\n <Icon name=\"delete\" size={18} />\n Delete\n </button>\n )}\n </div>\n )}\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/TaskCreateForm.tsx), MIT, rebuilt on Material Design 3.\n\nimport { Button, Input, Select, SelectOption, TextArea } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\nimport { useCallback, useEffect, useId, useRef, useState } from \"react\";\n\nimport type { TaskPriority } from \"./types\";\nimport { TASK_PRIORITY_LABEL } from \"./types\";\n\nexport interface TaskCreateFormData {\n title: string;\n description: string;\n priority: TaskPriority;\n}\n\nexport interface TaskCreateFormProps {\n onSubmit: (data: TaskCreateFormData) => void;\n onCancel?: () => void;\n defaultPriority?: TaskPriority;\n isSubmitting?: boolean;\n className?: string;\n}\n\nconst PRIORITIES: TaskPriority[] = [\"critical\", \"high\", \"medium\", \"low\"];\n\n/**\n * Inline task creation on an M3 surface: title and description text fields, a priority select,\n * and M3 actions (filled `Create`, text `Cancel`).\n */\nexport function TaskCreateForm({\n onSubmit,\n onCancel,\n defaultPriority = \"medium\",\n isSubmitting,\n className,\n}: TaskCreateFormProps) {\n const [title, setTitle] = useState(\"\");\n const [description, setDescription] = useState(\"\");\n const [priority, setPriority] = useState<TaskPriority>(defaultPriority);\n const titleInputId = useId();\n const descriptionInputId = useId();\n const titleInputRef = useRef<HTMLInputElement>(null);\n\n // Focus the title when the form mounts (replaces `autoFocus`).\n useEffect(() => {\n titleInputRef.current?.focus();\n }, []);\n\n const canSubmit = title.trim().length > 0 && !isSubmitting;\n\n const handleSubmit = useCallback(() => {\n if (!canSubmit) return;\n onSubmit({ title: title.trim(), description: description.trim(), priority });\n setTitle(\"\");\n setDescription(\"\");\n setPriority(defaultPriority);\n }, [canSubmit, onSubmit, title, description, priority, defaultPriority]);\n\n return (\n <div\n className={clsx(\n \"flex flex-col gap-3 rounded-medium bg-surface-container-low p-4 text-on-surface\",\n className,\n )}\n >\n <div className=\"flex items-center gap-2\">\n <label htmlFor={titleInputId} className=\"sr-only\">\n Task Title\n </label>\n <Input\n ref={titleInputRef}\n id={titleInputId}\n type=\"text\"\n size=\"lg\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleSubmit();\n if (e.key === \"Escape\") onCancel?.();\n }}\n placeholder=\"Task title...\"\n className=\"min-w-0 flex-1\"\n disabled={isSubmitting}\n />\n <Select\n value={priority}\n size=\"lg\"\n onChange={(value) => setPriority(value as TaskPriority)}\n disabled={isSubmitting}\n >\n {PRIORITIES.map((p) => (\n <SelectOption key={p} value={p}>\n {TASK_PRIORITY_LABEL[p]}\n </SelectOption>\n ))}\n </Select>\n </div>\n <label htmlFor={descriptionInputId} className=\"sr-only\">\n Description\n </label>\n <TextArea\n id={descriptionInputId}\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n placeholder=\"Description (optional)\"\n rows={2}\n className=\"w-full resize-none\"\n disabled={isSubmitting}\n />\n <div className=\"flex items-center justify-end gap-2\">\n {onCancel && (\n <Button variant=\"text\" size=\"lg\" onClick={onCancel} disabled={isSubmitting}>\n Cancel\n </Button>\n )}\n <Button variant=\"filled\" size=\"lg\" disabled={!canSubmit} onClick={handleSubmit}>\n Create\n </Button>\n </div>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/internal.tsx","../src/ToolCall.tsx","../src/Markdown.tsx","../src/MessageBubble.tsx","../src/InlineWorkerCard.tsx","../src/InlineBranchCard.tsx","../src/ModelSelector.tsx","../src/ChatComposer.tsx","../src/TaskStatusIcon.tsx","../src/TaskPriorityIcon.tsx","../src/TaskRow.tsx","../src/TaskList.tsx","../src/TaskDetail.tsx","../src/TaskCreateForm.tsx"],"names":["jsx","jsxs","clsx","useState","Icon","useId","AnimatePresence","motion","useRef","useEffect","forwardRef","useMemo","m3Durations","m3Easings","Popover","SelectPill","CircleButton","config","Fragment","Button","Select","SelectOption"],"mappings":"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","file":"index.js","sourcesContent":["// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/types.ts), MIT.\n\n// Tool execution types\nexport type ToolCallStatus = \"running\" | \"completed\" | \"error\";\n\nexport interface ToolCallPair {\n id: string;\n name: string;\n argsRaw: string;\n args: Record<string, unknown> | null;\n resultRaw: string | null;\n result: Record<string, unknown> | null;\n status: ToolCallStatus;\n /** Human-readable summary provided by live opencode parts */\n title?: string | null;\n}\n\n// Transcript step types — discriminated union matching the real API schema\n\nexport type ActionContent =\n | { type: \"text\"; text: string }\n | { type: \"tool_call\"; id: string; name: string; args: string };\n\nexport type TranscriptStep =\n | { type: \"action\"; content: ActionContent[] }\n | { type: \"user_text\"; text: string }\n | { type: \"system_text\"; text: string }\n | { type: \"tool_result\"; call_id: string; name: string; text: string };\n\n// Paired transcript item for rendering\n\nexport type TranscriptItem = { kind: \"text\"; text: string } | { kind: \"tool\"; pair: ToolCallPair };\n\n// ---------------------------------------------------------------------------\n// Task board types\n// ---------------------------------------------------------------------------\n\nexport type TaskStatus = \"pending_approval\" | \"backlog\" | \"ready\" | \"in_progress\" | \"done\";\nexport type TaskPriority = \"critical\" | \"high\" | \"medium\" | \"low\";\n\nexport interface Subtask {\n title: string;\n completed: boolean;\n}\n\nexport interface Task {\n id: string;\n task_number: number;\n title: string;\n description?: string | null;\n status: TaskStatus;\n priority: TaskPriority;\n owner_agent_id: string;\n assigned_agent_id: string;\n subtasks: Subtask[];\n metadata: unknown;\n worker_id?: string | null;\n created_by: string;\n created_at: string;\n updated_at: string;\n completed_at?: string | null;\n}\n\nexport const TASK_STATUS_ORDER: TaskStatus[] = [\n \"in_progress\",\n \"ready\",\n \"pending_approval\",\n \"backlog\",\n \"done\",\n];\n\nexport const TASK_STATUS_LABEL: Record<TaskStatus, string> = {\n in_progress: \"In Progress\",\n ready: \"Ready\",\n pending_approval: \"Pending Approval\",\n backlog: \"Backlog\",\n done: \"Done\",\n};\n\nexport const TASK_PRIORITY_LABEL: Record<TaskPriority, string> = {\n critical: \"Critical\",\n high: \"High\",\n medium: \"Medium\",\n low: \"Low\",\n};\n\n// Domain objects\nexport interface TaskInfo {\n id: string;\n title: string;\n status: string;\n priority: string;\n assignees: string[];\n conversation_id?: string;\n}\n\nexport interface MemoryInfo {\n id: string;\n type: string;\n content: string;\n source?: string;\n edges?: Array<{ target: string; relation: string }>;\n}\n\nexport interface CronJobInfo {\n id: string;\n name: string;\n schedule: string;\n last_run?: string;\n next_run?: string;\n status: string;\n}\n\nexport interface AgentInfo {\n id: string;\n name: string;\n detail: string;\n status?: string;\n}\n\nexport interface ModelOption {\n id: string;\n name: string;\n provider: string;\n context_window?: number;\n capabilities?: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nexport function tryParseJson(text: string): Record<string, unknown> | null {\n if (!text || text.trim().length === 0) return null;\n try {\n const parsed = JSON.parse(text);\n if (typeof parsed === \"object\" && parsed !== null && !Array.isArray(parsed)) {\n return parsed as Record<string, unknown>;\n }\n return null;\n } catch {\n return null;\n }\n}\n\nexport function isErrorResult(text: string, parsed: Record<string, unknown> | null): boolean {\n if (parsed?.error) return true;\n if (parsed?.status === \"error\") return true;\n if (parsed?.success === false) return true;\n if (typeof parsed?.exit_code === \"number\" && parsed.exit_code !== 0) return true;\n const lower = text.toLowerCase();\n return (\n lower.startsWith(\"error:\") ||\n lower.startsWith(\"error -\") ||\n lower.startsWith(\"failed:\") ||\n lower.startsWith(\"toolset error:\")\n );\n}\n\n// ---------------------------------------------------------------------------\n// Transcript → TranscriptItem[] pairing\n// ---------------------------------------------------------------------------\n\n/**\n * Walk a flat TranscriptStep[] and pair each tool_call with its tool_result\n * via call_id matching, plus emit standalone text steps. Returns an ordered\n * list of renderable items: text blocks and paired tool calls.\n */\nexport function pairTranscriptSteps(steps: TranscriptStep[]): TranscriptItem[] {\n const items: TranscriptItem[] = [];\n const resultsById = new Map<string, { name: string; text: string }>();\n\n // First pass: index all tool_result steps by call_id\n for (const step of steps) {\n if (step.type === \"tool_result\") {\n resultsById.set(step.call_id, { name: step.name, text: step.text });\n }\n }\n\n // Second pass: emit items in order\n for (const step of steps) {\n if (step.type === \"action\") {\n for (const content of step.content) {\n if (content.type === \"text\") {\n items.push({ kind: \"text\", text: content.text });\n } else if (content.type === \"tool_call\") {\n const result = resultsById.get(content.id);\n const parsedArgs = tryParseJson(content.args);\n const parsedResult = result ? tryParseJson(result.text) : null;\n\n const hasError = result ? isErrorResult(result.text, parsedResult) : false;\n\n items.push({\n kind: \"tool\",\n pair: {\n id: content.id,\n name: content.name,\n argsRaw: content.args,\n args: parsedArgs,\n resultRaw: result?.text ?? null,\n result: parsedResult,\n status: result ? (hasError ? \"error\" : \"completed\") : \"running\",\n },\n });\n }\n }\n }\n }\n\n return items;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Shared Material Design 3 building blocks for @aphrody/m3-ai (internal, not exported).\n\nimport { m3Durations, m3Easings } from \"@aphrody/m3-motion\";\nimport { clsx } from \"clsx\";\nimport type { ReactNode } from \"react\";\n\n/** The M3 focus indicator (contract: docs/design/SPACEUI-M3-FUSION.md, \"States\"). */\nexport const focusRing =\n \"outline-none focus-visible:outline-3 focus-visible:outline-secondary focus-visible:outline-offset-2\";\n\n/** Expand / collapse: enter on emphasized decelerate, exit on emphasized accelerate. */\nexport const expandMotion = {\n initial: { height: 0, opacity: 0 },\n animate: {\n height: \"auto\",\n opacity: 1,\n transition: { duration: m3Durations.medium2, ease: m3Easings.emphasizedDecelerate },\n },\n exit: {\n height: 0,\n opacity: 0,\n transition: { duration: m3Durations.short4, ease: m3Easings.emphasizedAccelerate },\n },\n} as const;\n\n/**\n * Indeterminate M3 circular progress indicator (active indicator on `primary` or the current\n * color, 4 dp track gap omitted at small sizes). Replaces the upstream Grid loader.\n */\nexport function CircularIndicator({\n size = 16,\n className,\n label = \"Loading\",\n}: {\n size?: number;\n className?: string;\n label?: string;\n}) {\n const stroke = size <= 16 ? 2 : size <= 24 ? 3 : 4;\n const r = (size - stroke) / 2;\n const c = 2 * Math.PI * r;\n return (\n <span\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- M3 circular indeterminate indicator is an animated SVG arc; a native <progress> cannot render it.\n role=\"progressbar\"\n aria-label={label}\n className={clsx(\"m3-circular-indicator inline-flex shrink-0 text-primary\", className)}\n style={{ width: size, height: size }}\n >\n <svg\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n className=\"animate-spin\"\n aria-hidden=\"true\"\n >\n <circle\n cx={size / 2}\n cy={size / 2}\n r={r}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={stroke}\n strokeLinecap=\"round\"\n strokeDasharray={`${c * 0.7} ${c}`}\n />\n </svg>\n </span>\n );\n}\n\nexport type ChipTone = \"primary\" | \"success\" | \"error\" | \"warning\" | \"neutral\";\n\nconst chipTones: Record<ChipTone, string> = {\n primary: \"bg-primary-container text-on-primary-container\",\n success: \"bg-success-container text-on-success-container\",\n error: \"bg-error-container text-on-error-container\",\n warning: \"bg-warning-container text-on-warning-container\",\n neutral: \"border border-outline-variant text-on-surface-variant\",\n};\n\n/** Non-interactive M3 assist chip used as a status label (dense, `rounded-small`). */\nexport function StatusChip({\n tone,\n icon,\n children,\n className,\n}: {\n tone: ChipTone;\n icon?: ReactNode;\n children: ReactNode;\n className?: string;\n}) {\n return (\n <span\n className={clsx(\n \"inline-flex h-6 shrink-0 items-center gap-1 rounded-small px-2 text-label-medium\",\n chipTones[tone],\n className,\n )}\n >\n {icon}\n {children}\n </span>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/ToolCall.tsx), MIT, rebuilt on Material Design 3.\n\nimport { useId, useState } from \"react\";\nimport { clsx } from \"clsx\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { Icon } from \"@aphrody/m3-primitives\";\nimport type { ToolCallPair, ToolCallStatus } from \"./types\";\nimport { CircularIndicator, StatusChip, expandMotion, focusRing } from \"./internal\";\n\n// ---------------------------------------------------------------------------\n// Tool-specific rendering\n// ---------------------------------------------------------------------------\n\ninterface ToolRenderer {\n summary(pair: ToolCallPair): string | null;\n argsView?(pair: ToolCallPair): React.ReactNode | null;\n resultView?(pair: ToolCallPair): React.ReactNode | null;\n}\n\nconst toolRenderers: Record<string, ToolRenderer> = {\n browser_launch: {\n summary(pair) {\n const headless = pair.args?.headless;\n return headless === false ? \"Launch browser (visible)\" : \"Launch browser\";\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text=\"Browser session started\" />;\n },\n },\n\n browser_navigate: {\n summary(pair) {\n const url = pair.args?.url;\n return url ? truncate(String(url), 60) : null;\n },\n resultView(pair) {\n if (!pair.result) return <ResultText text={pair.resultRaw} />;\n const title = pair.result.title as string | undefined;\n const url = pair.result.url as string | undefined;\n return (\n <div className=\"flex flex-col gap-1 px-3 py-2\">\n {title && (\n <p className=\"text-body-small text-on-surface-variant\">\n <span className=\"text-outline\">Title: </span>\n {title}\n </p>\n )}\n {url && <p className=\"font-code text-body-small text-outline\">{truncate(url, 80)}</p>}\n </div>\n );\n },\n },\n\n browser_snapshot: {\n summary(pair) {\n if (!pair.resultRaw) return \"Taking snapshot...\";\n const matches = pair.resultRaw.match(/\\[\\d+\\]/g);\n const count = matches?.length ?? 0;\n return count > 0 ? `${count} interactive element${count !== 1 ? \"s\" : \"\"}` : \"Page snapshot\";\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n },\n },\n\n browser_click: {\n summary(pair) {\n const index = pair.args?.index;\n return index !== undefined ? `Click element [${index}]` : \"Click\";\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text={pair.resultRaw} />;\n },\n },\n\n browser_type: {\n summary(pair) {\n const index = pair.args?.index;\n const hasSecret = pair.args?.secret !== undefined;\n const text = pair.args?.text;\n if (hasSecret) {\n return index !== undefined ? `Type secret into [${index}]` : \"Type secret\";\n }\n if (text) {\n const display = truncate(String(text), 30);\n return index !== undefined ? `Type \"${display}\" into [${index}]` : `Type \"${display}\"`;\n }\n return index !== undefined ? `Type into [${index}]` : \"Type\";\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text={pair.resultRaw} />;\n },\n },\n\n browser_press_key: {\n summary(pair) {\n const key = pair.args?.key;\n return key ? `Press ${key}` : \"Press key\";\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text={pair.resultRaw} />;\n },\n },\n\n browser_screenshot: {\n summary() {\n return \"Capture screenshot\";\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n if (pair.result?.base64) {\n const mimeType = (pair.result.mime_type as string) ?? \"image/png\";\n return (\n <div className=\"px-3 py-2\">\n <img\n src={`data:${mimeType};base64,${pair.result.base64}`}\n alt=\"Browser screenshot\"\n className=\"max-h-60 rounded-extra-small border border-outline-variant object-contain\"\n />\n </div>\n );\n }\n return <ResultLine text={truncate(pair.resultRaw, 100)} />;\n },\n },\n\n browser_evaluate: {\n summary(pair) {\n const expression = pair.args?.expression;\n return expression ? truncate(String(expression), 50) : \"Evaluate JS\";\n },\n argsView(pair) {\n const expression = pair.args?.expression;\n if (!expression) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <p className=\"mb-1 text-body-small font-medium text-outline\">JavaScript</p>\n <pre className=\"max-h-40 overflow-auto font-code text-body-small text-on-surface-variant\">\n {String(expression)}\n </pre>\n </div>\n );\n },\n },\n\n browser_tab_open: {\n summary(pair) {\n const url = pair.args?.url;\n return url ? `Open tab: ${truncate(String(url), 50)}` : \"Open new tab\";\n },\n },\n\n browser_tab_list: {\n summary() {\n return \"List tabs\";\n },\n },\n\n browser_tab_close: {\n summary(pair) {\n const tabId = pair.args?.tab_id;\n return tabId !== undefined ? `Close tab ${tabId}` : \"Close tab\";\n },\n },\n\n browser_close: {\n summary() {\n return \"Close browser\";\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text=\"Browser session closed\" />;\n },\n },\n\n shell: {\n summary(pair) {\n const command = pair.args?.command;\n if (!command) return null;\n if (pair.result && typeof pair.result.exit_code === \"number\") {\n const code = pair.result.exit_code;\n const cmdStr = truncate(String(command), 50);\n return code === 0 ? cmdStr : `${cmdStr} (exit ${code})`;\n }\n return truncate(String(command), 60);\n },\n argsView(pair) {\n const command = pair.args?.command;\n if (!command) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <pre className=\"max-h-40 overflow-auto font-code text-body-small text-on-surface-variant\">\n <span className=\"select-none text-outline\">$ </span>\n {String(command)}\n </pre>\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ShellResultView pair={pair} />;\n },\n },\n\n file_read: {\n summary(pair) {\n if (pair.title) return pair.title;\n const path = pair.args?.path;\n return path ? truncate(String(path), 60) : null;\n },\n argsView(pair) {\n const path = pair.args?.path;\n if (!path) return null;\n const offset = pair.args?.offset;\n const limit = pair.args?.limit;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <p className=\"font-code text-body-small text-on-surface-variant\">\n {String(path)}\n {offset ? ` (from line ${offset})` : \"\"}\n {limit ? ` (${limit} lines)` : \"\"}\n </p>\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={30} />;\n },\n },\n\n file_write: {\n summary(pair) {\n if (pair.title) return pair.title;\n const path = pair.args?.path;\n return path ? truncate(String(path), 60) : null;\n },\n argsView(pair) {\n const path = pair.args?.path;\n const content = pair.args?.content;\n if (!path && !content) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n {!!path && (\n <p className=\"mb-1 font-code text-body-small text-on-surface-variant\">{String(path)}</p>\n )}\n {!!content && (\n <pre className=\"max-h-40 overflow-auto font-code text-body-small text-outline\">\n {truncate(String(content), 2000)}\n </pre>\n )}\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text={truncate(pair.resultRaw, 100)} />;\n },\n },\n\n file_edit: {\n summary(pair) {\n if (pair.title) return pair.title;\n const path = pair.args?.path;\n return path ? truncate(String(path), 60) : null;\n },\n argsView(pair) {\n const path = pair.args?.path;\n const oldStr = pair.args?.old_string;\n const newStr = pair.args?.new_string;\n if (!path) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <p className=\"mb-1 font-code text-body-small text-on-surface-variant\">{String(path)}</p>\n {!!oldStr && (\n <div className=\"mt-1\">\n <p className=\"text-body-small font-medium text-error\">Old</p>\n <pre className=\"max-h-20 overflow-auto font-code text-body-small text-error\">\n {truncate(String(oldStr), 500)}\n </pre>\n </div>\n )}\n {!!newStr && (\n <div className=\"mt-1\">\n <p className=\"text-body-small font-medium text-success\">New</p>\n <pre className=\"max-h-20 overflow-auto font-code text-body-small text-success\">\n {truncate(String(newStr), 500)}\n </pre>\n </div>\n )}\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text={truncate(pair.resultRaw, 100)} />;\n },\n },\n\n file_list: {\n summary(pair) {\n if (pair.title) return pair.title;\n const path = pair.args?.path;\n return path ? truncate(String(path), 60) : null;\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={30} />;\n },\n },\n\n exec: {\n summary(pair) {\n const program = pair.args?.program;\n const cmdArgs = pair.args?.args;\n if (!program) return null;\n const parts = [String(program)];\n if (Array.isArray(cmdArgs)) {\n for (const arg of cmdArgs) parts.push(String(arg));\n }\n const full = parts.join(\" \");\n if (pair.result && typeof pair.result.exit_code === \"number\") {\n const code = pair.result.exit_code;\n const cmdStr = truncate(full, 50);\n return code === 0 ? cmdStr : `${cmdStr} (exit ${code})`;\n }\n return truncate(full, 60);\n },\n argsView(pair) {\n const program = pair.args?.program;\n if (!program) return null;\n const parts = [String(program)];\n const cmdArgs = pair.args?.args;\n if (Array.isArray(cmdArgs)) {\n for (const arg of cmdArgs) parts.push(String(arg));\n }\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <pre className=\"max-h-40 overflow-auto font-code text-body-small text-on-surface-variant\">\n <span className=\"select-none text-outline\">$ </span>\n {parts.join(\" \")}\n </pre>\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ShellResultView pair={pair} />;\n },\n },\n\n set_status: {\n summary(pair) {\n const kind = pair.args?.kind;\n const message = pair.args?.message;\n if (kind === \"outcome\") {\n return message ? `Outcome: ${truncate(String(message), 50)}` : \"Outcome set\";\n }\n return message ? truncate(String(message), 60) : null;\n },\n resultView() {\n return null;\n },\n },\n\n // OpenCode tools\n\n read: {\n summary(pair) {\n if (pair.title) return pair.title;\n const filePath = pair.args?.filePath ?? pair.args?.file_path;\n return filePath ? truncate(String(filePath), 60) : null;\n },\n argsView(pair) {\n const filePath = pair.args?.filePath ?? pair.args?.file_path;\n if (!filePath) return null;\n const offset = pair.args?.offset;\n const limit = pair.args?.limit;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <p className=\"font-code text-body-small text-on-surface-variant\">\n {String(filePath)}\n {offset ? ` (from line ${offset})` : \"\"}\n {limit ? ` (${limit} lines)` : \"\"}\n </p>\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={30} />;\n },\n },\n\n write: {\n summary(pair) {\n if (pair.title) return pair.title;\n const filePath = pair.args?.filePath ?? pair.args?.file_path;\n return filePath ? truncate(String(filePath), 60) : null;\n },\n argsView(pair) {\n const filePath = pair.args?.filePath ?? pair.args?.file_path;\n const content = pair.args?.content;\n if (!filePath && !content) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n {!!filePath && (\n <p className=\"mb-1 font-code text-body-small text-on-surface-variant\">\n {String(filePath)}\n </p>\n )}\n {!!content && (\n <pre className=\"max-h-40 overflow-auto font-code text-body-small text-outline\">\n {truncate(String(content), 2000)}\n </pre>\n )}\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text={truncate(pair.resultRaw, 100)} />;\n },\n },\n\n edit: {\n summary(pair) {\n if (pair.title) return pair.title;\n const filePath = pair.args?.filePath ?? pair.args?.file_path;\n return filePath ? truncate(String(filePath), 60) : null;\n },\n argsView(pair) {\n const filePath = pair.args?.filePath ?? pair.args?.file_path;\n const oldStr = pair.args?.oldString ?? pair.args?.old_string;\n const newStr = pair.args?.newString ?? pair.args?.new_string;\n if (!filePath) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <p className=\"mb-1 font-code text-body-small text-on-surface-variant\">\n {String(filePath)}\n </p>\n {!!oldStr && (\n <div className=\"mt-1\">\n <p className=\"text-body-small font-medium text-error\">Old</p>\n <pre className=\"max-h-20 overflow-auto font-code text-body-small text-error\">\n {truncate(String(oldStr), 500)}\n </pre>\n </div>\n )}\n {!!newStr && (\n <div className=\"mt-1\">\n <p className=\"text-body-small font-medium text-success\">New</p>\n <pre className=\"max-h-20 overflow-auto font-code text-body-small text-success\">\n {truncate(String(newStr), 500)}\n </pre>\n </div>\n )}\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ResultLine text={truncate(pair.resultRaw, 100)} />;\n },\n },\n\n bash: {\n summary(pair) {\n if (pair.title) return pair.title;\n const command = pair.args?.command;\n if (!command) return null;\n if (pair.result && typeof pair.result.exit_code === \"number\") {\n const code = pair.result.exit_code;\n const cmdStr = truncate(String(command), 50);\n return code === 0 ? cmdStr : `${cmdStr} (exit ${code})`;\n }\n return truncate(String(command), 60);\n },\n argsView(pair) {\n const command = pair.args?.command;\n if (!command) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <pre className=\"max-h-40 overflow-auto font-code text-body-small text-on-surface-variant\">\n <span className=\"select-none text-outline\">$ </span>\n {String(command)}\n </pre>\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <ShellResultView pair={pair} />;\n },\n },\n\n glob: {\n summary(pair) {\n if (pair.title) return pair.title;\n const pattern = pair.args?.pattern;\n return pattern ? truncate(String(pattern), 60) : null;\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n },\n },\n\n grep: {\n summary(pair) {\n if (pair.title) return pair.title;\n const pattern = pair.args?.pattern;\n const include = pair.args?.include;\n if (pattern && include) {\n return `/${pattern}/ in ${include}`;\n }\n return pattern ? `/${truncate(String(pattern), 40)}/` : null;\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n },\n },\n\n webfetch: {\n summary(pair) {\n if (pair.title) return pair.title;\n const url = pair.args?.url;\n return url ? truncate(String(url), 60) : null;\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n },\n },\n\n read_skill: {\n summary(pair) {\n if (pair.title) return pair.title;\n const name = pair.args?.name;\n return name ? String(name) : null;\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={30} />;\n },\n },\n\n web_search: {\n summary(pair) {\n if (pair.title) return pair.title;\n const query = pair.args?.query;\n const resultCount =\n pair.result?.result_count ??\n (Array.isArray(pair.result?.results) ? (pair.result!.results as unknown[]).length : null);\n const queryStr = query ? truncate(String(query), 50) : null;\n if (queryStr && resultCount != null) {\n return `${queryStr} (${resultCount} result${resultCount !== 1 ? \"s\" : \"\"})`;\n }\n return queryStr;\n },\n argsView(pair) {\n const query = pair.args?.query;\n if (!query) return null;\n const count = pair.args?.count;\n const freshness = pair.args?.freshness;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <p className=\"text-body-small text-on-surface-variant\">\n <span className=\"select-none text-outline\">Search: </span>\n {String(query)}\n </p>\n {!!(count || freshness) && (\n <p className=\"mt-0.5 text-body-small text-outline\">\n {count ? `${count} results` : \"\"}\n {count && freshness ? \" · \" : \"\"}\n {freshness ? `${freshness}` : \"\"}\n </p>\n )}\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n },\n },\n\n spacebot_docs: {\n summary(pair) {\n if (pair.title) return pair.title;\n const action = pair.args?.action;\n const docId = pair.args?.doc_id;\n if (action === \"read\" && docId) {\n return truncate(String(docId), 50);\n }\n return action ? String(action) : \"list\";\n },\n argsView(pair) {\n const action = pair.args?.action;\n const docId = pair.args?.doc_id;\n const query = pair.args?.query;\n if (!action && !docId) return null;\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n {!!docId && (\n <p className=\"font-code text-body-small text-on-surface-variant\">{String(docId)}</p>\n )}\n {!!query && (\n <p className=\"mt-0.5 text-body-small text-outline\">filter: {String(query)}</p>\n )}\n </div>\n );\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={30} />;\n },\n },\n\n todowrite: {\n summary(pair) {\n if (pair.title) return pair.title;\n return \"Update tasks\";\n },\n resultView() {\n return null;\n },\n },\n\n task: {\n summary(pair) {\n if (pair.title) return pair.title;\n const description = pair.args?.description;\n return description ? truncate(String(description), 60) : null;\n },\n resultView(pair) {\n if (!pair.resultRaw) return null;\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n },\n },\n};\n\nconst defaultRenderer: ToolRenderer = {\n summary(pair) {\n if (!pair.argsRaw || pair.argsRaw === \"{}\") return null;\n return truncate(pair.argsRaw, 60);\n },\n};\n\nfunction getRenderer(name: string): ToolRenderer {\n return toolRenderers[name] ?? defaultRenderer;\n}\n\n// ---------------------------------------------------------------------------\n// Shared sub-components\n// ---------------------------------------------------------------------------\n\nfunction ResultLine({ text }: { text: string }) {\n return <p className=\"px-3 py-2 text-body-small text-on-surface-variant\">{text}</p>;\n}\n\nfunction ResultText({ text }: { text: string | null }) {\n if (!text) return null;\n return (\n <pre className=\"max-h-60 overflow-auto whitespace-pre-wrap px-3 py-2 font-code text-body-small text-on-surface-variant\">\n {text}\n </pre>\n );\n}\n\nfunction CollapsiblePre({ text, maxLines = 20 }: { text: string; maxLines?: number }) {\n const [expanded, setExpanded] = useState(false);\n const lines = text.split(\"\\n\");\n const needsCollapse = lines.length > maxLines;\n const displayText =\n needsCollapse && !expanded ? lines.slice(0, maxLines).join(\"\\n\") + \"\\n...\" : text;\n\n return (\n <div>\n <pre className=\"max-h-80 overflow-auto whitespace-pre-wrap px-3 py-2 font-code text-body-small text-on-surface-variant\">\n {displayText}\n </pre>\n {needsCollapse && (\n <button\n type=\"button\"\n onClick={() => setExpanded(!expanded)}\n className={clsx(\n \"flex h-8 w-full items-center justify-center gap-1 border-t border-outline-variant px-3 text-label-medium text-primary\",\n \"transition-colors duration-200 ease-standard hover:bg-primary/8 active:bg-primary/10\",\n focusRing,\n )}\n >\n <Icon\n name=\"expand_more\"\n size={18}\n className={clsx(\n \"transition-transform duration-200 ease-standard\",\n expanded && \"rotate-180\",\n )}\n />\n {expanded ? \"Show less\" : `Show all ${lines.length} lines`}\n </button>\n )}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Shell result rendering\n// ---------------------------------------------------------------------------\n\nfunction ShellResultView({ pair }: { pair: ToolCallPair }) {\n const r = pair.result;\n\n if (!r || typeof r.exit_code !== \"number\") {\n return <CollapsiblePre text={pair.resultRaw!} maxLines={30} />;\n }\n\n const exitCode = r.exit_code as number;\n const stdout = typeof r.stdout === \"string\" ? r.stdout : \"\";\n const stderr = typeof r.stderr === \"string\" ? r.stderr : \"\";\n const hasStdout = stdout.trim().length > 0;\n const hasStderr = stderr.trim().length > 0;\n const isError = exitCode !== 0;\n\n if (!hasStdout && !hasStderr && exitCode === 0) {\n return <ResultLine text=\"Completed with no output\" />;\n }\n\n return (\n <div className=\"flex flex-col\">\n {isError && (\n <div className=\"flex items-center gap-1.5 border-b border-outline-variant px-3 py-1.5\">\n <span className=\"inline-flex h-6 items-center rounded-small bg-error px-2 font-code text-label-medium text-on-error\">\n exit {exitCode}\n </span>\n </div>\n )}\n\n {hasStdout && (\n <div className={hasStderr ? \"border-b border-outline-variant\" : \"\"}>\n <CollapsiblePre text={stdout.replace(/\\n$/, \"\")} maxLines={30} />\n </div>\n )}\n\n {hasStderr && (\n <div>\n <div className=\"flex items-center gap-1.5 px-3 pt-2 pb-0.5\">\n <span className={clsx(\"text-label-medium\", isError ? \"text-error\" : \"text-warning\")}>\n stderr\n </span>\n </div>\n <pre\n className={clsx(\n \"max-h-40 overflow-auto whitespace-pre-wrap px-3 pb-2 font-code text-body-small\",\n isError ? \"text-error\" : \"text-warning\",\n )}\n >\n {stderr.replace(/\\n$/, \"\")}\n </pre>\n </div>\n )}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Status display helpers\n// ---------------------------------------------------------------------------\n\n/** Material Symbols glyph per status (the running state shows a circular indicator). */\nconst STATUS_ICONS: Record<ToolCallStatus, string> = {\n running: \"pending\",\n completed: \"check_circle\",\n error: \"error\",\n};\n\nconst STATUS_COLORS: Record<ToolCallStatus, string> = {\n running: \"text-primary\",\n completed: \"text-success\",\n error: \"text-error\",\n};\n\nconst STATUS_LABELS: Record<ToolCallStatus, string> = {\n running: \"Running\",\n completed: \"Completed\",\n error: \"Error\",\n};\n\n/** Leading Material Symbol per tool family. */\nfunction toolIcon(name: string): string {\n if (name.startsWith(\"browser_\")) return \"language\";\n if (name.startsWith(\"file_\") || name === \"read\" || name === \"write\" || name === \"edit\") {\n return \"description\";\n }\n if (name === \"shell\" || name === \"exec\" || name === \"bash\") return \"terminal\";\n if (name === \"glob\" || name === \"grep\" || name === \"web_search\") return \"search\";\n if (name === \"webfetch\") return \"language\";\n if (name === \"set_status\") return \"schedule\";\n return \"build\";\n}\n\nfunction formatToolName(name: string): string {\n const overrides: Record<string, string> = {\n webfetch: \"Web Fetch\",\n todowrite: \"Todo\",\n read_skill: \"Read Skill\",\n web_search: \"Web Search\",\n spacebot_docs: \"Docs\",\n };\n if (overrides[name]) return overrides[name];\n\n const stripped = name\n .replace(/^browser_/, \"\")\n .replace(/^file_/, \"\")\n .replace(/^tab_/, \"Tab \");\n\n return stripped\n .split(\"_\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n}\n\nfunction toolCategory(name: string): string | null {\n if (name.startsWith(\"browser_\")) return \"Browser\";\n if (name.startsWith(\"file_\")) return \"File\";\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Main component\n// ---------------------------------------------------------------------------\n\nexport interface ToolCallProps {\n pair: ToolCallPair;\n /** Start expanded (uncontrolled). */\n defaultExpanded?: boolean;\n className?: string;\n}\n\n/**\n * A tool invocation as an M3 outlined card: status + tool name header (`text-label-large`),\n * summary, and an expandable body with arguments and result blocks in `font-code`.\n */\nexport function ToolCall({ pair, defaultExpanded = false, className }: ToolCallProps) {\n const [expanded, setExpanded] = useState(defaultExpanded);\n const bodyId = useId();\n const renderer = getRenderer(pair.name);\n const summary = renderer.summary(pair);\n const category = toolCategory(pair.name);\n const displayName = formatToolName(pair.name);\n const isError = pair.status === \"error\";\n\n const args = expanded ? renderArgs(pair, renderer) : null;\n const result = expanded ? renderResult(pair, renderer) : null;\n\n return (\n <div\n data-status={pair.status}\n className={clsx(\n \"m3-tool-call min-w-0 overflow-hidden rounded-medium border bg-surface-container-low text-on-surface\",\n isError ? \"border-error\" : \"border-outline-variant\",\n className,\n )}\n >\n <button\n type=\"button\"\n onClick={() => setExpanded(!expanded)}\n aria-expanded={expanded}\n aria-controls={bodyId}\n className={clsx(\n \"flex min-h-10 w-full items-center gap-2 rounded-medium px-3 py-2 text-left\",\n \"transition-colors duration-200 ease-standard hover:bg-on-surface/8 active:bg-on-surface/10\",\n focusRing,\n )}\n >\n <span\n className={clsx(\n \"flex size-5 shrink-0 items-center justify-center\",\n STATUS_COLORS[pair.status],\n )}\n >\n {pair.status === \"running\" ? (\n <CircularIndicator size={16} label=\"Running\" />\n ) : (\n <Icon\n name={STATUS_ICONS[pair.status]}\n size={18}\n filled\n label={STATUS_LABELS[pair.status]}\n />\n )}\n </span>\n <Icon name={toolIcon(pair.name)} size={18} className=\"shrink-0 text-on-surface-variant\" />\n {category && <span className=\"text-label-medium text-outline\">{category}</span>}\n <span className=\"shrink-0 text-label-large text-on-surface\">{displayName}</span>\n {summary && !expanded ? (\n <span className=\"min-w-0 flex-1 truncate text-body-small text-on-surface-variant\">\n {summary}\n </span>\n ) : (\n <span className=\"flex-1\" />\n )}\n {isError && (\n <StatusChip tone=\"error\" className=\"h-5 px-1.5 text-label-small\">\n error\n </StatusChip>\n )}\n <Icon\n name=\"expand_more\"\n size={20}\n className={clsx(\n \"shrink-0 text-on-surface-variant transition-transform duration-300 ease-emphasized\",\n expanded && \"rotate-180\",\n )}\n />\n </button>\n\n <AnimatePresence initial={false}>\n {expanded ? (\n <motion.div id={bodyId} key=\"body\" {...expandMotion} className=\"overflow-hidden\">\n <div className=\"flex flex-col gap-2 border-t border-outline-variant px-3 py-3\">\n {args}\n {result != null && result !== false ? (\n <div\n className={clsx(\n \"m3-tool-result overflow-hidden rounded-small\",\n isError\n ? \"bg-error-container text-on-error-container [&_.text-on-surface-variant]:text-on-error-container [&_.text-outline]:text-on-error-container/80\"\n : \"bg-surface-container-highest text-on-surface-variant\",\n )}\n >\n {result}\n </div>\n ) : null}\n </div>\n </motion.div>\n ) : null}\n </AnimatePresence>\n </div>\n );\n}\n\nfunction renderArgs(pair: ToolCallPair, renderer: ToolRenderer): React.ReactNode {\n if (renderer.argsView) {\n const custom = renderer.argsView(pair);\n if (custom) return custom;\n }\n\n if (pair.args && Object.keys(pair.args).length > 0) {\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <div className=\"flex flex-col gap-0.5\">\n {Object.entries(pair.args).map(([key, value]) => (\n <p key={key} className=\"font-code text-body-small\">\n <span className=\"text-outline\">{key}: </span>\n <span className=\"text-on-surface-variant\">{formatArgValue(key, value)}</span>\n </p>\n ))}\n </div>\n </div>\n );\n }\n\n if (pair.argsRaw && pair.argsRaw !== \"{}\" && pair.argsRaw.trim().length > 0) {\n return (\n <div className=\"rounded-small bg-surface-container-highest px-3 py-2\">\n <pre className=\"max-h-40 overflow-auto font-code text-body-small text-on-surface-variant\">\n {pair.argsRaw}\n </pre>\n </div>\n );\n }\n\n return null;\n}\n\nfunction renderResult(pair: ToolCallPair, renderer: ToolRenderer): React.ReactNode {\n if (pair.status === \"running\") {\n return (\n <div className=\"flex items-center gap-2 px-3 py-2 text-body-small text-on-surface-variant\">\n <CircularIndicator size={14} label=\"Running\" />\n Running...\n </div>\n );\n }\n\n if (renderer.resultView) {\n const custom = renderer.resultView(pair);\n if (custom !== undefined) return custom;\n }\n\n if (!pair.resultRaw) return null;\n\n if (pair.result && Object.keys(pair.result).length > 0) {\n return (\n <div className=\"px-3 py-2\">\n <div className=\"flex flex-col gap-0.5\">\n {Object.entries(pair.result).map(([key, value]) => (\n <p key={key} className=\"font-code text-body-small\">\n <span className=\"text-outline\">{key}: </span>\n <span className=\"text-on-surface-variant\">\n {typeof value === \"string\" ? truncate(value, 200) : JSON.stringify(value)}\n </span>\n </p>\n ))}\n </div>\n </div>\n );\n }\n\n return <CollapsiblePre text={pair.resultRaw} maxLines={20} />;\n}\n\nfunction formatArgValue(key: string, value: unknown): string {\n if (key === \"secret\" && typeof value === \"string\") {\n return \"***\";\n }\n if (typeof value === \"string\") {\n return truncate(value, 100);\n }\n if (typeof value === \"boolean\" || typeof value === \"number\") {\n return String(value);\n }\n return JSON.stringify(value);\n}\n\nfunction truncate(text: string, maxLen: number): string {\n if (text.length <= maxLen) return text;\n return text.slice(0, maxLen) + \"...\";\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/Markdown.tsx), MIT, rebuilt on Material Design 3.\n\n\"use client\";\n\nimport { Icon } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\nimport {\n forwardRef,\n isValidElement,\n useEffect,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport ReactMarkdown, { type Components } from \"react-markdown\";\nimport rehypeRaw from \"rehype-raw\";\nimport remarkGfm from \"remark-gfm\";\n\ntype MarkdownSize = \"small\" | \"medium\" | \"large\";\n\ninterface MarkdownProps {\n content: string;\n className?: string;\n /** Body typescale of paragraphs and lists: `text-body-small|medium|large`. Default `medium`. */\n size?: MarkdownSize;\n /**\n * Render raw HTML embedded in the markdown (rehype-raw). Off by default: only enable it for\n * trusted content.\n */\n allowHtml?: boolean;\n}\n\nconst bodyClass: Record<MarkdownSize, string> = {\n small: \"text-body-small\",\n medium: \"text-body-medium\",\n large: \"text-body-large\",\n};\n\nfunction extractText(node: ReactNode): string {\n if (typeof node === \"string\") return node;\n if (typeof node === \"number\") return String(node);\n if (Array.isArray(node)) return node.map(extractText).join(\"\");\n if (isValidElement(node)) return extractText((node.props as { children?: ReactNode }).children);\n return \"\";\n}\n\n// ---------------------------------------------------------------------------\n// Language detection & mapping\n// ---------------------------------------------------------------------------\n\nconst LANGUAGE_MAP: Record<string, string> = {\n typescript: \"TypeScript\",\n ts: \"TypeScript\",\n tsx: \"TSX\",\n javascript: \"JavaScript\",\n js: \"JavaScript\",\n jsx: \"JSX\",\n python: \"Python\",\n py: \"Python\",\n rust: \"Rust\",\n rs: \"Rust\",\n bash: \"Bash\",\n sh: \"Bash\",\n shell: \"Bash\",\n zsh: \"Bash\",\n json: \"JSON\",\n jsonc: \"JSONC\",\n sql: \"SQL\",\n html: \"HTML\",\n css: \"CSS\",\n scss: \"SCSS\",\n sass: \"Sass\",\n yaml: \"YAML\",\n yml: \"YAML\",\n markdown: \"Markdown\",\n md: \"Markdown\",\n go: \"Go\",\n golang: \"Go\",\n java: \"Java\",\n c: \"C\",\n cpp: \"C++\",\n \"c++\": \"C++\",\n csharp: \"C#\",\n cs: \"C#\",\n \"c#\": \"C#\",\n ruby: \"Ruby\",\n rb: \"Ruby\",\n php: \"PHP\",\n swift: \"Swift\",\n kotlin: \"Kotlin\",\n kt: \"Kotlin\",\n xml: \"XML\",\n toml: \"TOML\",\n dockerfile: \"Dockerfile\",\n docker: \"Dockerfile\",\n graphql: \"GraphQL\",\n gql: \"GraphQL\",\n wasm: \"WebAssembly\",\n lua: \"Lua\",\n r: \"R\",\n diff: \"Diff\",\n plaintext: \"Text\",\n text: \"Text\",\n txt: \"Text\",\n};\n\nexport function detectLanguage(raw?: string): { raw: string; label: string } {\n if (!raw) return { raw: \"\", label: \"Code\" };\n const cleaned = raw.replace(/^language-|^lang-/, \"\").toLowerCase().trim();\n if (LANGUAGE_MAP[cleaned]) {\n return { raw: cleaned, label: LANGUAGE_MAP[cleaned] };\n }\n const label =\n cleaned.length <= 3\n ? cleaned.toUpperCase()\n : cleaned.charAt(0).toUpperCase() + cleaned.slice(1);\n return { raw: cleaned, label };\n}\n\n// ---------------------------------------------------------------------------\n// CodeBlock component\n// ---------------------------------------------------------------------------\n\nexport interface CodeBlockProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onCopy\"> {\n code?: string;\n language?: string;\n onCopy?: (code: string) => void;\n children?: ReactNode;\n}\n\nexport function CodeBlock({\n code: explicitCode,\n language: explicitLang,\n onCopy,\n className,\n children,\n ...restProps\n}: CodeBlockProps) {\n // Strip node passed by ReactMarkdown to avoid rendering node=\"[object Object]\" in DOM\n const { node: _node, ...props } = restProps as Record<string, any>;\n\n const [copied, setCopied] = useState(false);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n };\n }, []);\n\n const childElement = isValidElement(children) ? children : null;\n const childProps = childElement\n ? (childElement.props as { className?: string; children?: ReactNode })\n : null;\n\n const rawLangMatch =\n explicitLang ??\n className?.match(/language-([a-zA-Z0-9_+#-]+)/)?.[1] ??\n childProps?.className?.match(/language-([a-zA-Z0-9_+#-]+)/)?.[1];\n\n const { raw: rawLang, label: languageLabel } = detectLanguage(rawLangMatch);\n\n const rawCode =\n explicitCode ??\n (childProps?.children ? extractText(childProps.children) : extractText(children));\n\n const codeContent = rawCode;\n const codeToCopy = rawCode.replace(/\\n$/, \"\");\n\n const handleCopy = async () => {\n try {\n if (typeof navigator !== \"undefined\" && navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(codeToCopy);\n }\n } catch {\n // Ignore clipboard API failures in non-secure or test environments\n }\n onCopy?.(codeToCopy);\n setCopied(true);\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => {\n setCopied(false);\n }, 2000);\n };\n\n return (\n <div\n className={clsx(\n \"my-3 overflow-hidden rounded-medium border border-outline-variant bg-surface-container-highest\",\n className,\n )}\n {...props}\n >\n <div className=\"flex items-center justify-between border-b border-outline-variant bg-surface-container px-3 py-1.5\">\n <span className=\"inline-flex items-center rounded-extra-small bg-surface-container-high px-2 py-0.5 text-label-small font-medium text-on-surface-variant border border-outline-variant/60\">\n {languageLabel}\n </span>\n <button\n type=\"button\"\n onClick={handleCopy}\n className={clsx(\n \"inline-flex items-center gap-1.5 rounded-small px-2 py-1 text-label-small font-medium transition-colors duration-200\",\n copied\n ? \"text-success\"\n : \"text-on-surface-variant hover:bg-on-surface/8 hover:text-on-surface active:bg-on-surface/12\",\n \"focus-visible:outline-2 focus-visible:outline-primary\",\n )}\n aria-label={copied ? \"Copied\" : \"Copy code\"}\n title={copied ? \"Copied!\" : \"Copy code\"}\n >\n <Icon\n name={copied ? \"check\" : \"content_copy\"}\n size={16}\n className={copied ? \"text-success\" : undefined}\n />\n <span>{copied ? \"Copied!\" : \"Copy\"}</span>\n </button>\n </div>\n <pre className=\"overflow-x-auto p-3 font-code text-body-small text-on-surface bg-surface-container-highest [&_code]:bg-transparent [&_code]:p-0 [&_code]:text-[length:inherit]\">\n <code className={rawLang ? `language-${rawLang}` : undefined}>{codeContent}</code>\n </pre>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Math formula rendering & typography\n// ---------------------------------------------------------------------------\n\nconst GREEK_AND_SYMBOLS: Record<string, string> = {\n // Greek letters (lowercase)\n alpha: \"α\",\n beta: \"β\",\n gamma: \"γ\",\n delta: \"δ\",\n epsilon: \"ε\",\n zeta: \"ζ\",\n eta: \"η\",\n theta: \"θ\",\n iota: \"ι\",\n kappa: \"κ\",\n lambda: \"λ\",\n mu: \"μ\",\n nu: \"ν\",\n xi: \"ξ\",\n pi: \"π\",\n rho: \"ρ\",\n sigma: \"σ\",\n tau: \"τ\",\n upsilon: \"υ\",\n phi: \"φ\",\n chi: \"χ\",\n psi: \"ψ\",\n omega: \"ω\",\n // Greek letters (uppercase)\n Gamma: \"Γ\",\n Delta: \"Δ\",\n Theta: \"Θ\",\n Lambda: \"Λ\",\n Xi: \"Ξ\",\n Pi: \"Π\",\n Sigma: \"Σ\",\n Phi: \"Φ\",\n Psi: \"Ψ\",\n Omega: \"Ω\",\n // Operators & Relations\n times: \"×\",\n div: \"÷\",\n pm: \"±\",\n mp: \"∓\",\n le: \"≤\",\n leq: \"≤\",\n ge: \"≥\",\n geq: \"≥\",\n approx: \"≈\",\n neq: \"≠\",\n ne: \"≠\",\n infty: \"∞\",\n cdot: \"·\",\n circ: \"°\",\n partial: \"∂\",\n nabla: \"∇\",\n sum: \"∑\",\n prod: \"∏\",\n int: \"∫\",\n sqrt: \"√\",\n in: \"∈\",\n notin: \"∉\",\n subset: \"⊂\",\n subseteq: \"⊆\",\n cup: \"∪\",\n cap: \"∩\",\n to: \"→\",\n rightarrow: \"→\",\n leftarrow: \"←\",\n leftrightarrow: \"↔\",\n Rightarrow: \"⇒\",\n Leftarrow: \"⇐\",\n Leftrightarrow: \"⇔\",\n forall: \"∀\",\n exists: \"∃\",\n};\n\nfunction formatSubSup(text: string): ReactNode {\n const parts = text.split(\n /(\\^\\{[^}]+\\}|\\^[-+]?[a-zA-Z0-9\\u0370-\\u03FF\\u2100-\\u214F]|_\\{[^}]+\\}|_[-+]?[a-zA-Z0-9\\u0370-\\u03FF\\u2100-\\u214F])/g,\n );\n if (parts.length === 1) return text;\n\n return parts.map((part, index) => {\n if (part.startsWith(\"^\")) {\n const val =\n part.startsWith(\"^{\") && part.endsWith(\"}\") ? part.slice(2, -1) : part.slice(1);\n return (\n <sup key={index} className=\"text-[0.75em] leading-none\">\n {val}\n </sup>\n );\n }\n if (part.startsWith(\"_\")) {\n const val =\n part.startsWith(\"_{\") && part.endsWith(\"}\") ? part.slice(2, -1) : part.slice(1);\n return (\n <sub key={index} className=\"text-[0.75em] leading-none\">\n {val}\n </sub>\n );\n }\n return part;\n });\n}\n\nexport function formatMathContent(math: string): ReactNode {\n // Step 1: Replace LaTeX symbol commands \\name (or \\\\name)\n const text = math.replace(/\\\\+([a-zA-Z]+)/g, (match, name) => {\n return GREEK_AND_SYMBOLS[name] ?? match;\n });\n\n // Step 2: Handle \\frac{num}{den}\n const fracRegex = /\\\\+frac\\{([^{}]+)\\}\\{([^{}]+)\\}/g;\n if (fracRegex.test(text)) {\n const parts: ReactNode[] = [];\n let lastIndex = 0;\n text.replace(fracRegex, (match, num, den, offset) => {\n if (offset > lastIndex) {\n parts.push(formatSubSup(text.slice(lastIndex, offset)));\n }\n parts.push(\n <span\n key={`frac-${offset}`}\n className=\"inline-flex flex-col items-center align-middle mx-1 text-center text-[0.85em] leading-none not-italic\"\n >\n <span className=\"border-b border-current px-0.5 pb-0.5\">{formatSubSup(num)}</span>\n <span className=\"px-0.5 pt-0.5\">{formatSubSup(den)}</span>\n </span>,\n );\n lastIndex = offset + match.length;\n return match;\n });\n if (lastIndex < text.length) {\n parts.push(formatSubSup(text.slice(lastIndex)));\n }\n return parts;\n }\n\n return formatSubSup(text);\n}\n\nexport interface InlineMathProps extends React.HTMLAttributes<HTMLSpanElement> {\n math: string;\n}\n\nexport function InlineMath({ math, className, ...props }: InlineMathProps) {\n return (\n <span\n className={clsx(\n \"inline-flex items-center px-1 font-serif italic font-medium text-primary\",\n className,\n )}\n {...props}\n >\n {formatMathContent(math)}\n </span>\n );\n}\n\nexport interface BlockMathProps extends React.HTMLAttributes<HTMLDivElement> {\n math: string;\n}\n\nexport function BlockMath({ math, className, ...props }: BlockMathProps) {\n return (\n <div\n className={clsx(\n \"my-3 flex justify-center overflow-x-auto rounded-medium bg-surface-container-low/40 px-4 py-2 text-title-medium font-serif italic font-medium text-primary\",\n className,\n )}\n {...props}\n >\n {formatMathContent(math)}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Remark plugin for recognizing $...$ and $$...$$ expressions\n// ---------------------------------------------------------------------------\n\nexport function remarkMathPlugin() {\n return (tree: any) => {\n function transformBlocks(parent: any) {\n if (!parent.children) return;\n const newChildren: any[] = [];\n for (const child of parent.children) {\n if (child.type === \"paragraph\" && Array.isArray(child.children)) {\n const hasBlockMath = child.children.some(\n (c: any) => c.type === \"text\" && /\\$\\$[\\s\\S]+?\\$\\$/.test(c.value),\n );\n if (hasBlockMath) {\n let currentParagraphChildren: any[] = [];\n for (const item of child.children) {\n if (item.type === \"text\" && /\\$\\$[\\s\\S]+?\\$\\$/.test(item.value)) {\n const parts = item.value.split(/(\\$\\$[\\s\\S]+?\\$\\$)/g);\n for (const part of parts) {\n if (part.startsWith(\"$$\") && part.endsWith(\"$$\") && part.length >= 4) {\n if (currentParagraphChildren.length > 0) {\n newChildren.push({\n type: \"paragraph\",\n children: currentParagraphChildren,\n });\n currentParagraphChildren = [];\n }\n const mathVal = part.slice(2, -2).trim();\n newChildren.push({\n type: \"mathBlock\",\n data: {\n hName: \"div\",\n hProperties: { className: \"math-block\", \"data-math\": mathVal },\n hChildren: [{ type: \"text\", value: mathVal }],\n },\n children: [{ type: \"text\", value: mathVal }],\n });\n } else if (part.trim().length > 0) {\n currentParagraphChildren.push({ type: \"text\", value: part });\n }\n }\n } else {\n currentParagraphChildren.push(item);\n }\n }\n if (currentParagraphChildren.length > 0) {\n newChildren.push({\n type: \"paragraph\",\n children: currentParagraphChildren,\n });\n }\n continue;\n }\n }\n transformBlocks(child);\n newChildren.push(child);\n }\n parent.children = newChildren;\n }\n\n function transformInlines(node: any) {\n if (!node.children) return;\n const newChildren: any[] = [];\n for (const child of node.children) {\n if (child.type === \"text\" && typeof child.value === \"string\" && child.value.includes(\"$\")) {\n const parts = child.value.split(/((?<!\\\\)\\$(?!\\s)[^$\\n]+?(?<!\\s)\\$(?!\\d))/g);\n for (const part of parts) {\n if (\n part.startsWith(\"$\") &&\n part.endsWith(\"$\") &&\n !part.startsWith(\"$$\") &&\n part.length > 2\n ) {\n const mathVal = part.slice(1, -1).trim();\n newChildren.push({\n type: \"mathInline\",\n data: {\n hName: \"span\",\n hProperties: { className: \"math-inline\", \"data-math\": mathVal },\n hChildren: [{ type: \"text\", value: mathVal }],\n },\n children: [{ type: \"text\", value: mathVal }],\n });\n } else if (part) {\n newChildren.push({ type: \"text\", value: part });\n }\n }\n } else {\n transformInlines(child);\n newChildren.push(child);\n }\n }\n node.children = newChildren;\n }\n\n transformBlocks(tree);\n transformInlines(tree);\n };\n}\n\n// ---------------------------------------------------------------------------\n// Element overrides mapping markdown onto M3 typescale and color roles\n// ---------------------------------------------------------------------------\n\nfunction m3Components(size: MarkdownSize): Components {\n const body = bodyClass[size];\n return {\n h1: ({ node: _node, className, children, ...props }) => (\n <h1\n className={clsx(\"mt-4 mb-2 text-headline-small text-on-surface first:mt-0\", className)}\n {...props}\n >\n {children}\n </h1>\n ),\n h2: ({ node: _node, className, children, ...props }) => (\n <h2\n className={clsx(\"mt-4 mb-2 text-title-large text-on-surface first:mt-0\", className)}\n {...props}\n >\n {children}\n </h2>\n ),\n h3: ({ node: _node, className, children, ...props }) => (\n <h3\n className={clsx(\"mt-3 mb-1.5 text-title-medium text-on-surface first:mt-0\", className)}\n {...props}\n >\n {children}\n </h3>\n ),\n h4: ({ node: _node, className, children, ...props }) => (\n <h4\n className={clsx(\"mt-3 mb-1 text-title-small text-on-surface first:mt-0\", className)}\n {...props}\n >\n {children}\n </h4>\n ),\n h5: ({ node: _node, className, children, ...props }) => (\n <h5\n className={clsx(\"mt-3 mb-1 text-title-small text-on-surface-variant first:mt-0\", className)}\n {...props}\n >\n {children}\n </h5>\n ),\n h6: ({ node: _node, className, children, ...props }) => (\n <h6\n className={clsx(\"mt-3 mb-1 text-label-large text-on-surface-variant first:mt-0\", className)}\n {...props}\n >\n {children}\n </h6>\n ),\n p: ({ node: _node, className, ...props }) => (\n <p className={clsx(\"my-2 first:mt-0 last:mb-0\", body, className)} {...props} />\n ),\n a: ({ node: _node, className, children, ...props }) => (\n <a\n className={clsx(\n \"text-primary underline underline-offset-2 hover:decoration-2\",\n \"rounded-extra-small outline-none focus-visible:outline-3 focus-visible:outline-secondary focus-visible:outline-offset-2\",\n className,\n )}\n {...props}\n >\n {children}\n </a>\n ),\n strong: ({ node: _node, className, ...props }) => (\n <strong className={clsx(\"font-semibold text-on-surface\", className)} {...props} />\n ),\n ul: ({ node: _node, className, ...props }) => (\n <ul\n className={clsx(\"my-2 list-disc pl-6 marker:text-on-surface-variant\", body, className)}\n {...props}\n />\n ),\n ol: ({ node: _node, className, ...props }) => (\n <ol\n className={clsx(\"my-2 list-decimal pl-6 marker:text-on-surface-variant\", body, className)}\n {...props}\n />\n ),\n li: ({ node: _node, className, ...props }) => (\n <li className={clsx(\"my-1\", className)} {...props} />\n ),\n blockquote: ({ node: _node, className, ...props }) => (\n <blockquote\n className={clsx(\n \"my-3 border-l-4 border-outline-variant pl-4 text-on-surface-variant\",\n className,\n )}\n {...props}\n />\n ),\n code: ({ node: _node, className, ...props }) => (\n <code\n className={clsx(\n \"rounded-extra-small bg-surface-container-highest px-1 py-0.5 font-code text-[0.9em] text-on-surface\",\n className,\n )}\n {...props}\n />\n ),\n pre: ({ node: _node, children, className, style }) => (\n <CodeBlock className={className} style={style}>\n {children}\n </CodeBlock>\n ),\n hr: ({ node: _node, className, ...props }) => (\n <hr className={clsx(\"my-4 border-outline-variant\", className)} {...props} />\n ),\n table: ({ node: _node, className, ...props }) => (\n <div className=\"my-3 overflow-x-auto rounded-small border border-outline-variant\">\n <table className={clsx(\"w-full border-collapse\", body, className)} {...props} />\n </div>\n ),\n thead: ({ node: _node, className, ...props }) => (\n <thead className={clsx(\"bg-surface-container\", className)} {...props} />\n ),\n th: ({ node: _node, className, ...props }) => (\n <th\n className={clsx(\n \"border-b border-outline-variant px-3 py-2 text-left text-title-small text-on-surface\",\n className,\n )}\n {...props}\n />\n ),\n td: ({ node: _node, className, ...props }) => (\n <td\n className={clsx(\"border-t border-outline-variant px-3 py-2 text-on-surface\", className)}\n {...props}\n />\n ),\n img: ({ node: _node, className, alt, ...props }) => (\n <img\n className={clsx(\"my-2 max-w-full rounded-medium\", className)}\n alt={alt ?? \"\"}\n {...props}\n />\n ),\n input: ({ node: _node, className, ...props }) => (\n <input className={clsx(\"mr-2 accent-primary\", className)} {...props} />\n ),\n div: ({ node: _node, className, children, ...props }) => {\n if (className?.includes(\"math-block\")) {\n const math =\n (props as Record<string, any>)[\"data-math\"] ?? extractText(children);\n return <BlockMath math={math} className={className} />;\n }\n return (\n <div className={className} {...props}>\n {children}\n </div>\n );\n },\n span: ({ node: _node, className, children, ...props }) => {\n if (className?.includes(\"math-inline\")) {\n const math =\n (props as Record<string, any>)[\"data-math\"] ?? extractText(children);\n return <InlineMath math={math} className={className} />;\n }\n return (\n <span className={className} {...props}>\n {children}\n </span>\n );\n },\n };\n}\n\nconst Markdown = forwardRef<HTMLDivElement, MarkdownProps>(\n ({ content, className, size = \"medium\", allowHtml = false }, ref) => {\n return (\n <div\n ref={ref}\n className={clsx(\"markdown min-w-0 text-on-surface\", bodyClass[size], className)}\n >\n <ReactMarkdown\n remarkPlugins={[remarkGfm, remarkMathPlugin]}\n rehypePlugins={allowHtml ? [rehypeRaw] : undefined}\n components={m3Components(size)}\n >\n {content}\n </ReactMarkdown>\n </div>\n );\n },\n);\n\nMarkdown.displayName = \"Markdown\";\n\nexport { Markdown };\nexport type { MarkdownProps };\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/MessageBubble.tsx), MIT, rebuilt on Material Design 3.\n\n\"use client\";\n\nimport { CircleButton } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\n\nimport { Markdown } from \"./Markdown\";\n\nexport interface MessageBubbleProps {\n content: string;\n isUser: boolean;\n isStreaming?: boolean;\n onCopy?: (content: string) => void;\n onDislike?: (content: string) => void;\n onFork?: () => void;\n variant?: \"default\" | \"codex\";\n className?: string;\n}\n\n/**\n * One chat turn. The user turn is an M3 bubble, the assistant turn is plain markdown\n * on the surface, as in M3 / Codex conversations.\n */\nexport function MessageBubble({\n content,\n isUser,\n isStreaming = false,\n onCopy,\n onDislike,\n onFork,\n variant = \"default\",\n className,\n}: MessageBubbleProps) {\n const isCodex = variant === \"codex\";\n\n return (\n <div\n className={clsx(\"group flex flex-col py-1.5 w-full\", isUser ? \"items-end\" : \"items-start\", className)}\n >\n <div\n className={clsx(\n \"min-w-0\",\n isUser\n ? isCodex\n ? \"max-w-[75%] rounded-[28px] bg-surface-container-high px-5 py-3 text-body-large text-on-surface shadow-xs\"\n : \"max-w-[80%] rounded-large rounded-br-extra-small bg-secondary-container px-4 py-2.5 text-body-large text-on-secondary-container\"\n : \"w-full max-w-full bg-transparent text-body-large text-on-surface\",\n )}\n aria-busy={isStreaming || undefined}\n >\n {isUser ? (\n <div className=\"whitespace-pre-wrap break-words\">{content}</div>\n ) : (\n <Markdown content={content} size=\"large\" className=\"break-words font-sans\" />\n )}\n </div>\n {!isUser && (onCopy || onDislike || onFork) ? (\n <div className=\"mt-1.5 flex items-center gap-1 opacity-0 transition-opacity duration-200 ease-standard group-focus-within:opacity-100 group-hover:opacity-100\">\n {onCopy && (\n <CircleButton\n icon=\"content_copy\"\n variant=\"standard\"\n size=\"sm\"\n onClick={() => onCopy(content)}\n aria-label={isStreaming ? \"Copy Streaming Message\" : \"Copy Message\"}\n title={isStreaming ? \"Copy streaming message\" : \"Copier\"}\n />\n )}\n {onDislike && (\n <CircleButton\n icon=\"thumb_down\"\n variant=\"standard\"\n size=\"sm\"\n onClick={() => onDislike(content)}\n aria-label=\"Dislike\"\n title=\"Je n'aime pas\"\n />\n )}\n {onFork && (\n <CircleButton\n icon=\"call_split\"\n variant=\"standard\"\n size=\"sm\"\n onClick={onFork}\n aria-label=\"Fork\"\n title=\"Bifurquer à partir de ce tour\"\n />\n )}\n </div>\n ) : null}\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/InlineWorkerCard.tsx), MIT, rebuilt on Material Design 3.\n\nimport { useId, useMemo, useState } from \"react\";\nimport { clsx } from \"clsx\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { Button, Icon } from \"@aphrody/m3-primitives\";\nimport { ToolCall } from \"./ToolCall\";\nimport { Markdown } from \"./Markdown\";\nimport type { TranscriptStep } from \"./types\";\nimport { pairTranscriptSteps } from \"./types\";\nimport { CircularIndicator, StatusChip, type ChipTone, expandMotion, focusRing } from \"./internal\";\n\n/** Collapse runs of 3+ spaces to 2, preventing Markdown 4-space code blocks. */\nfunction stripExcessWhitespace(text: string): string {\n return text.replace(/ {3,}/g, \" \");\n}\n\ninterface InlineWorkerCardProps {\n title: string;\n status: string;\n toolCallCount: number;\n liveStatus?: string | null;\n transcript: TranscriptStep[];\n isTranscriptLoading?: boolean;\n onCopyLogs?: () => void;\n onCancel?: () => void;\n className?: string;\n /** Start expanded (uncontrolled). */\n defaultExpanded?: boolean;\n}\n\nfunction statusTone(status: string): ChipTone {\n switch (status) {\n case \"running\":\n return \"primary\";\n case \"completed\":\n return \"success\";\n case \"failed\":\n case \"error\":\n case \"cancelled\":\n return \"error\";\n default:\n return \"neutral\";\n }\n}\n\n/** A worker run as an M3 filled card: header, status chip, expandable transcript. */\nfunction InlineWorkerCard({\n title,\n status,\n toolCallCount,\n liveStatus,\n transcript,\n isTranscriptLoading,\n onCopyLogs,\n onCancel,\n className,\n defaultExpanded = false,\n}: InlineWorkerCardProps) {\n const [expanded, setExpanded] = useState(defaultExpanded);\n const contentId = useId();\n\n const items = useMemo(() => pairTranscriptSteps(transcript), [transcript]);\n\n const isRunning = status === \"running\";\n const isDone = status === \"completed\";\n const tone = statusTone(status);\n\n return (\n <div className={clsx(\"group flex min-w-0 flex-col items-start\", className)}>\n <div className=\"min-w-0 max-w-full overflow-hidden rounded-medium bg-surface-container text-on-surface\">\n <button\n type=\"button\"\n onClick={() => setExpanded((v) => !v)}\n aria-expanded={expanded}\n aria-controls={contentId}\n className={clsx(\n \"flex w-full items-start gap-3 rounded-medium px-4 py-3 text-left transition-colors duration-200 ease-standard\",\n \"hover:bg-on-surface/8 active:bg-on-surface/10\",\n focusRing,\n )}\n >\n <div className=\"flex size-8 shrink-0 items-center justify-center\">\n {isRunning ? (\n <CircularIndicator size={20} label=\"Worker running\" />\n ) : isDone ? (\n <div className=\"flex size-8 items-center justify-center rounded-full bg-success-container text-on-success-container\">\n <Icon name=\"check_circle\" size={18} filled />\n </div>\n ) : tone === \"error\" ? (\n <div className=\"flex size-8 items-center justify-center rounded-full bg-error-container text-on-error-container\">\n <Icon name=\"error\" size={18} filled />\n </div>\n ) : (\n <div className=\"flex size-8 items-center justify-center rounded-full bg-surface-container-highest text-on-surface-variant\">\n <Icon name=\"build\" size={18} />\n </div>\n )}\n </div>\n\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <div className=\"line-clamp-2 min-w-0 flex-1 text-title-small text-on-surface\">\n {title}\n </div>\n <StatusChip tone={tone}>{status}</StatusChip>\n </div>\n <div className=\"mt-1 flex items-center gap-2 text-body-small text-on-surface-variant\">\n <span>{toolCallCount} tool calls</span>\n {liveStatus ? <span className=\"truncate text-outline\">{liveStatus}</span> : null}\n </div>\n </div>\n\n <Icon\n name=\"expand_more\"\n size={20}\n className={clsx(\n \"mt-1.5 shrink-0 text-on-surface-variant transition-transform duration-300 ease-emphasized\",\n expanded ? \"rotate-180\" : \"\",\n )}\n />\n </button>\n\n <AnimatePresence initial={false}>\n {expanded ? (\n <motion.div\n id={contentId}\n key=\"transcript\"\n {...expandMotion}\n className=\"overflow-hidden\"\n >\n <div className=\"flex flex-col gap-2 border-t border-outline-variant px-4 py-3\">\n {isTranscriptLoading ? (\n <div className=\"flex items-center gap-2 text-body-small text-on-surface-variant\">\n <CircularIndicator size={16} label=\"Loading transcript\" />\n Loading worker transcript...\n </div>\n ) : items.length > 0 ? (\n items.map((item) =>\n item.kind === \"tool\" ? (\n <ToolCall key={item.pair.id} pair={item.pair} />\n ) : (\n <Markdown\n key={`text-${item.text}`}\n content={stripExcessWhitespace(item.text)}\n size=\"small\"\n className=\"text-on-surface-variant\"\n />\n ),\n )\n ) : (\n <div className=\"text-body-small text-on-surface-variant\">No tool calls yet.</div>\n )}\n </div>\n </motion.div>\n ) : null}\n </AnimatePresence>\n </div>\n\n {(onCopyLogs || (onCancel && isRunning)) && (\n <div className=\"mt-1 flex gap-1 opacity-0 transition-opacity duration-200 ease-standard group-focus-within:opacity-100 group-hover:opacity-100\">\n {onCopyLogs && (\n <Button variant=\"text\" size=\"xs\" onClick={onCopyLogs} title=\"Copy logs\">\n <Icon name=\"content_copy\" size={18} />\n Copy\n </Button>\n )}\n {onCancel && isRunning && (\n <Button variant=\"text\" size=\"xs\" onClick={onCancel} title=\"Cancel\">\n <Icon name=\"stop\" size={18} />\n Cancel\n </Button>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport { InlineWorkerCard };\nexport type { InlineWorkerCardProps };\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/InlineBranchCard.tsx), MIT, rebuilt on Material Design 3.\n\nimport { useId, useState } from \"react\";\nimport { clsx } from \"clsx\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { Icon } from \"@aphrody/m3-primitives\";\nimport { Markdown } from \"./Markdown\";\nimport { CircularIndicator, StatusChip, expandMotion, focusRing } from \"./internal\";\n\ninterface InlineBranchCardProps {\n description: string;\n completedAt: string | null;\n conclusion?: string | null;\n className?: string;\n /** Start expanded (uncontrolled). */\n defaultExpanded?: boolean;\n}\n\n/** A thinking branch as an M3 filled card: header, status chip, expandable conclusion. */\nfunction InlineBranchCard({\n description,\n completedAt,\n conclusion,\n className,\n defaultExpanded = false,\n}: InlineBranchCardProps) {\n const [expanded, setExpanded] = useState(defaultExpanded);\n const isRunning = !completedAt;\n const contentId = useId();\n const canExpand = !!conclusion;\n\n return (\n <div className={clsx(\"group flex min-w-0 flex-col items-start\", className)}>\n <div className=\"min-w-0 max-w-full overflow-hidden rounded-medium bg-surface-container text-on-surface\">\n <button\n type=\"button\"\n onClick={() => canExpand && setExpanded((v) => !v)}\n aria-expanded={canExpand ? expanded : undefined}\n aria-controls={canExpand ? contentId : undefined}\n className={clsx(\n \"flex w-full items-start gap-3 rounded-medium px-4 py-3 text-left transition-colors duration-200 ease-standard\",\n canExpand && \"hover:bg-on-surface/8 active:bg-on-surface/10\",\n focusRing,\n )}\n >\n <div className=\"flex size-8 shrink-0 items-center justify-center\">\n {isRunning ? (\n <CircularIndicator size={20} label=\"Thinking\" />\n ) : (\n <div className=\"flex size-8 items-center justify-center rounded-full bg-primary-container text-on-primary-container\">\n <Icon name=\"alt_route\" size={18} />\n </div>\n )}\n </div>\n <div className=\"min-w-0 flex-1 self-center\">\n <div className=\"flex items-center gap-2\">\n <div className=\"line-clamp-2 min-w-0 flex-1 text-title-small text-on-surface\">\n {description}\n </div>\n <StatusChip tone={isRunning ? \"primary\" : \"success\"}>\n {isRunning ? \"thinking\" : \"done\"}\n </StatusChip>\n </div>\n </div>\n {canExpand && (\n <Icon\n name=\"expand_more\"\n size={20}\n className={clsx(\n \"mt-1.5 shrink-0 text-on-surface-variant transition-transform duration-300 ease-emphasized\",\n expanded ? \"rotate-180\" : \"\",\n )}\n />\n )}\n </button>\n <AnimatePresence initial={false}>\n {expanded && conclusion ? (\n <motion.div\n id={contentId}\n key=\"conclusion\"\n {...expandMotion}\n className=\"overflow-hidden\"\n >\n <div className=\"border-t border-outline-variant px-4 py-3\">\n <Markdown content={conclusion} size=\"small\" className=\"text-on-surface-variant\" />\n </div>\n </motion.div>\n ) : null}\n </AnimatePresence>\n </div>\n </div>\n );\n}\n\nexport { InlineBranchCard };\nexport type { InlineBranchCardProps };\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/ModelSelector.tsx), MIT, rebuilt on Material Design 3.\n\n\"use client\";\n\nimport {\n Icon,\n Popover,\n usePopover,\n SelectPill,\n type SelectPillProps,\n} from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\nimport { forwardRef, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { focusRing } from \"./internal\";\nimport type { ModelOption } from \"./types\";\n\nexport interface ModelSelectorProps {\n /** Available models */\n models: ModelOption[];\n /** Currently selected model ID */\n value: string;\n /** Called when a model is selected */\n onChange: (value: string) => void;\n /** Placeholder when nothing selected */\n placeholder?: string;\n /** Search placeholder */\n searchPlaceholder?: string;\n /** SelectPill variant */\n variant?: SelectPillProps[\"variant\"];\n /** SelectPill size */\n size?: SelectPillProps[\"size\"];\n /** Controlled popover (optional) */\n popover?: ReturnType<typeof usePopover>;\n /** Additional trigger className */\n className?: string;\n /** Disabled state */\n disabled?: boolean;\n}\n\n/** Group models by provider, keeping the order of first appearance. */\nexport function groupModelsByProvider(\n models: ModelOption[],\n search = \"\",\n): Record<string, ModelOption[]> {\n const q = search.trim().toLowerCase();\n const filtered = q\n ? models.filter((m) => m.name.toLowerCase().includes(q) || m.provider.toLowerCase().includes(q))\n : models;\n\n return filtered.reduce(\n (acc, model) => {\n if (!acc[model.provider]) acc[model.provider] = [];\n acc[model.provider].push(model);\n return acc;\n },\n {} as Record<string, ModelOption[]>,\n );\n}\n\nexport interface ModelOptionListProps {\n /** Models grouped by provider (see {@link groupModelsByProvider}). */\n grouped: Record<string, ModelOption[]>;\n /** Currently selected model ID */\n value: string;\n /** Called when a model is picked */\n onSelect: (value: string) => void;\n className?: string;\n}\n\n/**\n * The M3 menu list of the model selector: provider section headers (`text-title-small`),\n * 48 dp two-line items (`text-label-large` + `text-body-small` supporting text), the selected\n * item on `secondary-container`, capabilities as small outlined chips.\n */\nexport function ModelOptionList({ grouped, value, onSelect, className }: ModelOptionListProps) {\n const providers = Object.entries(grouped);\n return (\n <div\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- M3 menu whose options are rich rows (headers, supporting text, chips); a native <select>/<datalist> cannot render them.\n role=\"listbox\"\n aria-label=\"Models\"\n className={clsx(\"flex flex-col\", className)}\n >\n {providers.map(([provider, providerModels], groupIndex) => (\n <div\n key={provider}\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- provider section of the custom listbox with a visible M3 header row; <optgroup> only exists inside a native <select>.\n role=\"group\"\n aria-label={provider}\n className={clsx(groupIndex > 0 && \"mt-1 border-t border-outline-variant pt-1\")}\n >\n <div className=\"px-3 pt-2 pb-1 text-title-small text-on-surface-variant\">{provider}</div>\n {providerModels.map((model) => {\n const selected = model.id === value;\n return (\n <button\n key={model.id}\n type=\"button\"\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- M3 two-line menu item (label, supporting text, capability chips, check icon); a native <option> can only hold text.\n role=\"option\"\n aria-selected={selected}\n onClick={() => onSelect(model.id)}\n className={clsx(\n \"flex min-h-12 w-full items-center gap-3 px-3 py-2 text-left\",\n \"transition-colors duration-200 ease-standard\",\n selected\n ? \"bg-secondary-container text-on-secondary-container\"\n : \"text-on-surface hover:bg-on-surface/8 active:bg-on-surface/10\",\n focusRing,\n \"focus-visible:outline-offset-[-3px]\",\n )}\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate text-label-large\">{model.name}</div>\n {model.context_window || model.capabilities?.length ? (\n <div className=\"mt-0.5 flex flex-wrap items-center gap-1\">\n {model.context_window ? (\n <span\n className={clsx(\n \"text-body-small\",\n selected ? \"text-on-secondary-container\" : \"text-on-surface-variant\",\n )}\n >\n {model.context_window.toLocaleString()} tokens\n </span>\n ) : null}\n {model.capabilities?.map((capability) => (\n <span\n key={capability}\n className={clsx(\n \"inline-flex h-5 items-center rounded-small border border-outline-variant px-1.5 text-label-small\",\n selected ? \"text-on-secondary-container\" : \"text-on-surface-variant\",\n )}\n >\n {capability}\n </span>\n ))}\n </div>\n ) : null}\n </div>\n {selected && <Icon name=\"check\" size={20} className=\"shrink-0\" />}\n </button>\n );\n })}\n </div>\n ))}\n {providers.length === 0 && (\n <div className=\"px-3 py-3 text-center text-body-small text-on-surface-variant\">\n No models found\n </div>\n )}\n </div>\n );\n}\n\n/**\n * The menu's search field. It mounts with the popover content and takes focus then (replaces\n * `autoFocus`), so typing filters the list as soon as the menu opens.\n */\nfunction ModelSearchField({\n value,\n onChange,\n placeholder,\n}: {\n value: string;\n onChange: (value: string) => void;\n placeholder: string;\n}) {\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n inputRef.current?.focus();\n }, []);\n\n return (\n <div className=\"px-2 pb-2\">\n <label className=\"flex h-10 items-center gap-2 rounded-full bg-surface-container-high px-3 text-on-surface-variant focus-within:bg-surface-container-highest\">\n <Icon name=\"search\" size={20} className=\"shrink-0\" />\n <input\n ref={inputRef}\n value={value}\n onChange={(event) => onChange(event.target.value)}\n placeholder={placeholder}\n aria-label={placeholder}\n className=\"min-w-0 flex-1 bg-transparent text-body-large text-on-surface outline-none placeholder:text-on-surface-variant\"\n />\n </label>\n </div>\n );\n}\n\nexport const ModelSelector = forwardRef<HTMLButtonElement, ModelSelectorProps>(\n (\n {\n models,\n value,\n onChange,\n placeholder = \"Select model...\",\n searchPlaceholder = \"Search models...\",\n variant,\n size,\n popover: externalPopover,\n className,\n disabled,\n },\n ref,\n ) => {\n const internalPopover = usePopover();\n const popover = externalPopover ?? internalPopover;\n const [search, setSearch] = useState(\"\");\n\n const selectedModel = models.find((m) => m.id === value);\n\n const grouped = useMemo(() => groupModelsByProvider(models, search), [models, search]);\n\n return (\n <Popover.Root\n open={popover.open}\n onOpenChange={(open) => {\n popover.setOpen(open);\n if (!open) setSearch(\"\");\n }}\n >\n <Popover.Trigger asChild>\n <SelectPill\n ref={ref}\n variant={variant}\n size={size}\n disabled={disabled}\n aria-haspopup=\"listbox\"\n className={clsx(\"w-full\", className)}\n >\n {selectedModel?.name ?? placeholder}\n </SelectPill>\n </Popover.Trigger>\n <Popover.Content\n align=\"end\"\n sideOffset={8}\n style={{ width: 280 }}\n className=\"overflow-hidden rounded-extra-small! py-2\"\n >\n {/* Search */}\n <ModelSearchField value={search} onChange={setSearch} placeholder={searchPlaceholder} />\n\n {/* Grouped results */}\n <div className=\"max-h-[320px] overflow-y-auto\">\n <ModelOptionList\n grouped={grouped}\n value={value}\n onSelect={(id) => {\n onChange(id);\n popover.setOpen(false);\n setSearch(\"\");\n }}\n />\n </div>\n </Popover.Content>\n </Popover.Root>\n );\n },\n);\n\nModelSelector.displayName = \"ModelSelector\";\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/ChatComposer.tsx), MIT, rebuilt on Material Design 3.\n\n\"use client\";\n\nimport { CircleButton, Icon, Popover, SelectPill, usePopover } from \"@aphrody/m3-primitives\";\nimport { m3Durations, m3Easings } from \"@aphrody/m3-motion\";\nimport { clsx } from \"clsx\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { type ReactNode } from \"react\";\n\nimport { focusRing } from \"./internal\";\nimport { ModelSelector } from \"./ModelSelector\";\nimport type { ModelOption } from \"./types\";\n\nexport interface ChatComposerProps {\n /** Current draft text */\n draft: string;\n /** Called when draft changes */\n onDraftChange: (value: string) => void;\n /** Called when user hits send (Enter or send button) */\n onSend: () => void;\n /** Placeholder for the textarea */\n placeholder?: string;\n /** Show an optional heading above the composer */\n heading?: ReactNode;\n /** Disable the composer — draft can still change, but send/voice are blocked */\n isSending?: boolean;\n /** Project selector config — omit to hide */\n projectSelector?: {\n value: string;\n options: string[];\n onChange: (project: string) => void;\n popover: ReturnType<typeof usePopover>;\n };\n /** Model selector config — omit to hide */\n modelSelector?: {\n value: string;\n options: ModelOption[];\n onChange: (model: string) => void;\n };\n /** Voice button handler — omit to hide */\n onOpenVoice?: () => void;\n /** Optional content rendered at the far right of the toolbar (before send) */\n toolbarExtra?: ReactNode;\n /** Stop handler: while `isSending`, the send button becomes an M3 `stop` icon button. */\n onStop?: () => void;\n /** Additional className on the composer container */\n className?: string;\n}\n\nconst iconButtonEnter = {\n initial: { scale: 0.6, opacity: 0 },\n animate: {\n scale: 1,\n opacity: 1,\n transition: { duration: m3Durations.short4, ease: m3Easings.emphasizedDecelerate },\n },\n exit: {\n scale: 0.6,\n opacity: 0,\n transition: { duration: m3Durations.short3, ease: m3Easings.emphasizedAccelerate },\n },\n} as const;\n\n/**\n * Generic chat composer on the M3 search-bar anatomy: a `surface-container-high` container with\n * the extra-large (28 dp) shape, a `text-body-large` expanding textarea, an optional project\n * pill, model selector chip, a standard mic icon button and a filled send / stop icon button.\n */\nexport function ChatComposer({\n draft,\n onDraftChange,\n onSend,\n placeholder = \"Ask something...\",\n heading,\n isSending = false,\n projectSelector,\n modelSelector,\n onOpenVoice,\n toolbarExtra,\n onStop,\n className,\n}: ChatComposerProps) {\n const canSend = !isSending && draft.trim().length > 0;\n const showStop = isSending && !!onStop;\n\n return (\n <>\n {heading && (\n <div className=\"mb-3 flex items-center gap-2 px-1 text-title-small text-on-surface-variant\">\n <Icon name=\"auto_awesome\" size={18} filled className=\"text-primary\" />\n {heading}\n </div>\n )}\n\n <div\n className={clsx(\n \"m3-chat-composer rounded-extra-large bg-surface-container-high px-4 pt-3 pb-2 text-on-surface\",\n \"transition-colors duration-200 ease-standard focus-within:bg-surface-container-highest\",\n className,\n )}\n >\n <textarea\n value={draft}\n onChange={(event) => onDraftChange(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" && !event.shiftKey) {\n event.preventDefault();\n onSend();\n }\n }}\n placeholder={placeholder}\n aria-label={placeholder}\n rows={2}\n className=\"block w-full resize-none border-0 bg-transparent px-1 text-body-large text-on-surface caret-primary outline-none placeholder:text-on-surface-variant focus:outline-none focus:ring-0\"\n />\n\n <div className=\"mt-2 flex items-center justify-between gap-2\">\n {projectSelector ? (\n <div className=\"w-[210px]\">\n <Popover.Root\n open={projectSelector.popover.open}\n onOpenChange={projectSelector.popover.setOpen}\n >\n <Popover.Trigger asChild>\n <SelectPill className=\"w-full\" aria-haspopup=\"listbox\">\n {projectSelector.value}\n </SelectPill>\n </Popover.Trigger>\n <Popover.Content\n align=\"start\"\n sideOffset={8}\n className=\"min-w-[210px] overflow-hidden rounded-extra-small! py-2\"\n >\n <div\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- M3 menu in a popover with icon rows; a native <select>/<datalist> cannot render it.\n role=\"listbox\"\n aria-label=\"Projects\"\n >\n {projectSelector.options.map((option) => {\n const selected = option === projectSelector.value;\n return (\n <button\n key={option}\n type=\"button\"\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- M3 menu item with a check icon and state layer; a native <option> can only hold text.\n role=\"option\"\n aria-selected={selected}\n onClick={() => {\n projectSelector.onChange(option);\n projectSelector.popover.setOpen(false);\n }}\n className={clsx(\n \"flex h-12 w-full items-center gap-3 px-3 text-left text-label-large\",\n \"transition-colors duration-200 ease-standard\",\n selected\n ? \"bg-secondary-container text-on-secondary-container\"\n : \"text-on-surface hover:bg-on-surface/8\",\n focusRing,\n \"focus-visible:outline-offset-[-3px]\",\n )}\n >\n <span className=\"min-w-0 flex-1 truncate\">{option}</span>\n {selected && <Icon name=\"check\" size={20} />}\n </button>\n );\n })}\n </div>\n </Popover.Content>\n </Popover.Root>\n </div>\n ) : (\n <div />\n )}\n\n <motion.div layout className=\"flex items-center gap-1\">\n {modelSelector && (\n <div className=\"w-[180px]\">\n <ModelSelector\n models={modelSelector.options}\n value={modelSelector.value}\n onChange={modelSelector.onChange}\n size=\"md\"\n />\n </div>\n )}\n\n {toolbarExtra}\n\n {onOpenVoice && (\n <CircleButton\n icon=\"mic\"\n variant=\"standard\"\n onClick={onOpenVoice}\n disabled={isSending}\n aria-label=\"Open Voice Input\"\n />\n )}\n\n <AnimatePresence initial={false} mode=\"popLayout\">\n {showStop ? (\n <motion.button\n key=\"stop\"\n type=\"button\"\n {...iconButtonEnter}\n onClick={onStop}\n aria-label=\"Stop\"\n className={clsx(\n \"flex size-10 shrink-0 items-center justify-center rounded-full bg-primary text-on-primary\",\n \"transition-colors duration-200 ease-standard hover:bg-primary/92 active:bg-primary/90\",\n focusRing,\n )}\n >\n <Icon name=\"stop\" size={24} filled />\n </motion.button>\n ) : canSend ? (\n <motion.button\n key=\"send\"\n type=\"button\"\n {...iconButtonEnter}\n onClick={onSend}\n aria-label=\"Send\"\n className={clsx(\n \"flex size-10 shrink-0 items-center justify-center rounded-full bg-primary text-on-primary\",\n \"transition-colors duration-200 ease-standard hover:bg-primary/92 active:bg-primary/90\",\n focusRing,\n )}\n >\n <Icon name=\"arrow_upward\" size={24} />\n </motion.button>\n ) : null}\n </AnimatePresence>\n </motion.div>\n </div>\n </div>\n </>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/TaskStatusIcon.tsx), MIT, rebuilt on Material Design 3.\n\nimport { Icon } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\n\nimport type { TaskStatus } from \"./types\";\nimport { TASK_STATUS_LABEL } from \"./types\";\n\n/** Material Symbols glyph and M3 color role per status. */\nconst config: Record<TaskStatus, { icon: string; filled: boolean; color: string }> = {\n done: { icon: \"check_circle\", filled: true, color: \"text-success\" },\n in_progress: { icon: \"clock_loader_40\", filled: true, color: \"text-primary\" },\n ready: { icon: \"radio_button_checked\", filled: false, color: \"text-primary\" },\n pending_approval: { icon: \"schedule\", filled: false, color: \"text-warning\" },\n backlog: { icon: \"radio_button_unchecked\", filled: false, color: \"text-outline\" },\n};\n\nexport interface TaskStatusIconProps {\n status: TaskStatus;\n size?: number;\n className?: string;\n /** Accessible label; defaults to the status label. Pass `\"\"` for a decorative icon. */\n label?: string;\n}\n\nexport function TaskStatusIcon({ status, size = 16, className, label }: TaskStatusIconProps) {\n const { icon, filled, color } = config[status];\n return (\n <Icon\n name={icon}\n size={size}\n filled={filled}\n label={label ?? TASK_STATUS_LABEL[status]}\n data-status={status}\n className={clsx(color, className)}\n />\n );\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/TaskPriorityIcon.tsx), MIT, rebuilt on Material Design 3.\n\nimport { Icon } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\n\nimport type { TaskPriority } from \"./types\";\nimport { TASK_PRIORITY_LABEL } from \"./types\";\n\n/** Material Symbols glyph and M3 color role per priority. */\nconst config: Record<TaskPriority, { icon: string; filled: boolean; color: string }> = {\n critical: { icon: \"priority_high\", filled: true, color: \"text-error\" },\n high: { icon: \"keyboard_double_arrow_up\", filled: false, color: \"text-warning\" },\n medium: { icon: \"drag_handle\", filled: false, color: \"text-primary\" },\n low: { icon: \"keyboard_arrow_down\", filled: false, color: \"text-outline\" },\n};\n\nexport interface TaskPriorityIconProps {\n priority: TaskPriority;\n size?: number;\n className?: string;\n /** Accessible label; defaults to the priority label. Pass `\"\"` for a decorative icon. */\n label?: string;\n}\n\nexport function TaskPriorityIcon({ priority, size = 14, className, label }: TaskPriorityIconProps) {\n const { icon, filled, color } = config[priority];\n return (\n <Icon\n name={icon}\n size={size}\n filled={filled}\n weight={600}\n label={label ?? `${TASK_PRIORITY_LABEL[priority]} priority`}\n data-priority={priority}\n className={clsx(color, className)}\n />\n );\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/TaskRow.tsx), MIT, rebuilt on Material Design 3.\n\nimport { DropdownMenu, Icon } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\n\nimport { focusRing } from \"./internal\";\nimport { TaskPriorityIcon } from \"./TaskPriorityIcon\";\nimport { TaskStatusIcon } from \"./TaskStatusIcon\";\nimport type { Task, TaskStatus } from \"./types\";\nimport { TASK_STATUS_LABEL, TASK_STATUS_ORDER } from \"./types\";\n\nexport interface TaskRowProps {\n task: Task;\n onClick?: (task: Task) => void;\n isActive?: boolean;\n resolveAgentName?: (agentId: string) => string;\n onStatusChange?: (task: Task, status: TaskStatus) => void;\n onDelete?: (task: Task) => void;\n className?: string;\n}\n\n/** Column template shared with the {@link TaskList} header. */\nexport const TASK_ROW_GRID = \"20px 18px 72px 1fr 56px 96px 40px\";\n\n/** M3 list item height at desktop density (56 dp baseline, two density steps). */\nexport const TASK_ROW_HEIGHT = 48;\n\n/**\n * A task as a dense M3 list item: leading status and priority icons, `text-body-large` headline,\n * `text-body-small` supporting columns, `on-surface` 8 % hover, `secondary-container` selection\n * and a trailing overflow-menu icon button.\n */\nexport function TaskRow({\n task,\n onClick,\n isActive,\n resolveAgentName,\n onStatusChange,\n onDelete,\n className,\n}: TaskRowProps) {\n const completedSubtasks = task.subtasks.filter((s) => s.completed).length;\n const assigneeName = resolveAgentName?.(task.assigned_agent_id) ?? task.assigned_agent_id;\n const hasActions = onStatusChange || onDelete;\n const isRowInteractive = typeof onClick === \"function\";\n const handleRowKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.repeat) return;\n if (e.key === \"Enter\") {\n e.preventDefault();\n onClick?.(task);\n }\n };\n const handleRowKeyUp = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.repeat) return;\n if (e.key === \" \") {\n e.preventDefault();\n onClick?.(task);\n }\n };\n\n const rowClassName = clsx(\n \"task-row group grid w-full items-center border-b border-outline-variant text-left\",\n \"transition-colors duration-200 ease-standard\",\n focusRing,\n \"focus-visible:outline-offset-[-3px]\",\n isActive\n ? \"bg-secondary-container text-on-secondary-container\"\n : \"bg-transparent text-on-surface hover:bg-on-surface/8\",\n isRowInteractive && !isActive && \"active:bg-on-surface/10\",\n className,\n );\n const rowStyle: React.CSSProperties = {\n gridTemplateColumns: TASK_ROW_GRID,\n minHeight: TASK_ROW_HEIGHT,\n paddingLeft: 16,\n paddingRight: 8,\n gap: 12,\n };\n\n const content = (\n <>\n <TaskStatusIcon status={task.status} size={20} />\n <TaskPriorityIcon priority={task.priority} size={18} />\n\n <span\n className={clsx(\n \"truncate font-code text-body-small\",\n isActive ? \"text-on-secondary-container\" : \"text-on-surface-variant\",\n )}\n >\n SPC-{task.task_number}\n </span>\n\n <span className=\"min-w-0 truncate text-body-large\">{task.title}</span>\n\n <span\n className={clsx(\n \"text-right text-body-small\",\n isActive ? \"text-on-secondary-container\" : \"text-on-surface-variant\",\n )}\n >\n {task.subtasks.length > 0 ? `${completedSubtasks}/${task.subtasks.length}` : \"\"}\n </span>\n\n <span\n className={clsx(\n \"truncate text-right text-body-small\",\n isActive ? \"text-on-secondary-container\" : \"text-on-surface-variant\",\n )}\n >\n {assigneeName}\n </span>\n\n <span className=\"flex items-center justify-center\">\n {hasActions ? (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <button\n type=\"button\"\n aria-label=\"Task Actions\"\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") e.stopPropagation();\n }}\n className={clsx(\n \"flex size-8 items-center justify-center rounded-full text-on-surface-variant\",\n \"opacity-0 transition-[opacity,background-color] duration-200 ease-standard\",\n \"hover:bg-on-surface/8 active:bg-on-surface/10\",\n \"group-hover:opacity-100 group-focus-within:opacity-100 focus-visible:opacity-100 data-popup-open:opacity-100\",\n focusRing,\n )}\n >\n <Icon name=\"more_vert\" size={20} />\n </button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\" sideOffset={4}>\n {onStatusChange &&\n TASK_STATUS_ORDER.filter((s) => s !== task.status).map((s) => (\n <DropdownMenu.Item\n key={s}\n onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n onStatusChange(task, s);\n }}\n >\n <TaskStatusIcon status={s} size={20} label=\"\" />\n <span>{TASK_STATUS_LABEL[s]}</span>\n </DropdownMenu.Item>\n ))}\n {onStatusChange && onDelete && <DropdownMenu.Separator />}\n {onDelete && (\n <DropdownMenu.Item\n onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n onDelete(task);\n }}\n className=\"text-error\"\n >\n <Icon name=\"delete\" size={20} />\n <span>Delete</span>\n </DropdownMenu.Item>\n )}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n ) : null}\n </span>\n </>\n );\n\n if (!isRowInteractive) {\n return (\n <div aria-current={isActive ? \"true\" : undefined} className={rowClassName} style={rowStyle}>\n {content}\n </div>\n );\n }\n\n return (\n <div\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- the row hosts the overflow-menu <button>; a native <button> row would nest interactive content.\n role=\"button\"\n tabIndex={0}\n aria-current={isActive ? \"true\" : undefined}\n onClick={() => onClick(task)}\n onKeyDown={handleRowKeyDown}\n onKeyUp={handleRowKeyUp}\n className={rowClassName}\n style={rowStyle}\n >\n {content}\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/TaskList.tsx), MIT, rebuilt on Material Design 3.\n\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger, Icon } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\nimport { useMemo } from \"react\";\n\nimport { focusRing } from \"./internal\";\nimport { TASK_ROW_GRID, TaskRow } from \"./TaskRow\";\nimport { TaskStatusIcon } from \"./TaskStatusIcon\";\nimport type { Task, TaskStatus } from \"./types\";\nimport { TASK_STATUS_LABEL, TASK_STATUS_ORDER } from \"./types\";\n\nexport interface TaskListProps {\n tasks: Task[];\n groups?: TaskStatus[];\n collapsedGroups?: Set<TaskStatus>;\n onToggleGroup?: (status: TaskStatus) => void;\n activeTaskId?: string;\n onTaskClick: (task: Task) => void;\n onStatusChange?: (task: Task, status: TaskStatus) => void;\n onDelete?: (task: Task) => void;\n resolveAgentName?: (agentId: string) => string;\n className?: string;\n}\n\nconst GRID_STYLE = {\n gridTemplateColumns: TASK_ROW_GRID,\n paddingLeft: 16,\n paddingRight: 8,\n gap: 12,\n} as const;\n\n/**\n * Tasks grouped by status as an M3 list: a column header in `text-label-medium`, collapsible\n * section headers in `text-title-small`, `outline-variant` dividers.\n */\nexport function TaskList({\n tasks,\n groups = TASK_STATUS_ORDER,\n collapsedGroups,\n onToggleGroup,\n activeTaskId,\n onTaskClick,\n onStatusChange,\n onDelete,\n resolveAgentName,\n className,\n}: TaskListProps) {\n const grouped = useMemo(() => {\n const map = new Map<TaskStatus, Task[]>();\n for (const status of groups) map.set(status, []);\n for (const task of tasks) {\n const bucket = map.get(task.status);\n if (bucket) bucket.push(task);\n }\n return map;\n }, [tasks, groups]);\n\n return (\n <div className={clsx(\"flex flex-col bg-surface text-on-surface\", className)}>\n {/* Column header */}\n <div\n className=\"grid items-center border-b border-outline-variant text-label-medium text-on-surface-variant\"\n style={{ ...GRID_STYLE, height: 32 }}\n >\n <span />\n <span />\n <span>ID</span>\n <span>Title</span>\n <span className=\"text-right\">Subs</span>\n <span className=\"text-right\">Assignee</span>\n <span />\n </div>\n\n {/* Groups */}\n {groups.map((status) => {\n const items = grouped.get(status) ?? [];\n const isOpen = !collapsedGroups?.has(status);\n\n return (\n <Collapsible key={status} open={isOpen} onOpenChange={() => onToggleGroup?.(status)}>\n <CollapsibleTrigger\n className={clsx(\n \"grid w-full items-center rounded-none border-b border-outline-variant bg-surface-container-low\",\n \"text-title-small text-on-surface transition-colors duration-200 ease-standard\",\n \"hover:bg-on-surface/8 active:bg-on-surface/10\",\n focusRing,\n \"focus-visible:outline-offset-[-3px]\",\n )}\n style={{ ...GRID_STYLE, height: 40 }}\n >\n <span className=\"flex items-center justify-center text-on-surface-variant\">\n <Icon\n name=\"chevron_right\"\n size={20}\n className={clsx(\n \"shrink-0 transition-transform duration-300 ease-emphasized\",\n isOpen && \"rotate-90\",\n )}\n />\n </span>\n <span className=\"flex items-center justify-center\">\n <TaskStatusIcon status={status} size={18} label=\"\" />\n </span>\n <span className=\"col-span-5 flex items-center gap-1.5 text-left\">\n {TASK_STATUS_LABEL[status]}\n <span className=\"text-body-small text-on-surface-variant\">({items.length})</span>\n </span>\n </CollapsibleTrigger>\n\n <CollapsibleContent>\n {items.length > 0 ? (\n items.map((task) => (\n <TaskRow\n key={task.id}\n task={task}\n isActive={task.id === activeTaskId}\n onClick={onTaskClick}\n onStatusChange={onStatusChange}\n onDelete={onDelete}\n resolveAgentName={resolveAgentName}\n />\n ))\n ) : (\n <div className=\"border-b border-outline-variant px-4 py-3 text-body-small text-on-surface-variant\">\n No tasks\n </div>\n )}\n </CollapsibleContent>\n </Collapsible>\n );\n })}\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/TaskDetail.tsx), MIT, rebuilt on Material Design 3.\n\nimport { Button, CircleButton, Icon, Select, SelectOption } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\n\nimport { focusRing } from \"./internal\";\nimport { Markdown } from \"./Markdown\";\nimport { TaskPriorityIcon } from \"./TaskPriorityIcon\";\nimport { TaskStatusIcon } from \"./TaskStatusIcon\";\nimport type { Task, TaskStatus } from \"./types\";\nimport { TASK_PRIORITY_LABEL, TASK_STATUS_LABEL, TASK_STATUS_ORDER } from \"./types\";\n\nexport interface TaskDetailProps {\n task: Task;\n resolveAgentName?: (agentId: string) => string;\n onStatusChange?: (task: Task, status: TaskStatus) => void;\n onSubtaskToggle?: (task: Task, index: number, completed: boolean) => void;\n onDelete?: (task: Task) => void;\n onClose?: () => void;\n className?: string;\n}\n\nfunction formatDate(iso: string) {\n return new Date(iso).toLocaleDateString(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n}\n\nfunction Property({ label, children }: { label: string; children: React.ReactNode }) {\n return (\n <div className=\"flex min-w-0 flex-col gap-0.5\">\n <span className=\"text-label-medium text-on-surface-variant\">{label}</span>\n <span className=\"flex min-h-8 items-center gap-1.5 text-body-medium text-on-surface\">\n {children}\n </span>\n </div>\n );\n}\n\n/**\n * A task on an M3 surface: `text-headline-small` title, a property grid, subtasks as an M3 list\n * with checkboxes, markdown description, and actions as M3 buttons (filled for the primary\n * transition, text for the others).\n */\nexport function TaskDetail({\n task,\n resolveAgentName,\n onStatusChange,\n onSubtaskToggle,\n onDelete,\n onClose,\n className,\n}: TaskDetailProps) {\n const ownerName = resolveAgentName?.(task.owner_agent_id) ?? task.owner_agent_id;\n const assigneeName = resolveAgentName?.(task.assigned_agent_id) ?? task.assigned_agent_id;\n const completedCount = task.subtasks.filter((s) => s.completed).length;\n\n return (\n <div className={clsx(\"flex flex-col gap-6 bg-surface p-6 text-on-surface\", className)}>\n {/* Header */}\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center gap-2\">\n <div className=\"flex flex-1 items-center gap-2\">\n <TaskStatusIcon status={task.status} size={20} />\n <TaskPriorityIcon priority={task.priority} size={18} />\n <span className=\"font-code text-body-small text-on-surface-variant\">\n SPC-{task.task_number}\n </span>\n </div>\n {onClose && (\n <CircleButton icon=\"close\" variant=\"standard\" onClick={onClose} aria-label=\"Close\" />\n )}\n </div>\n <h2 className=\"text-headline-small text-on-surface\">{task.title}</h2>\n </div>\n\n {/* Properties */}\n <div className=\"grid grid-cols-2 gap-x-6 gap-y-4 medium:grid-cols-4\">\n <Property label=\"Status\">\n {onStatusChange ? (\n <Select\n value={task.status}\n size=\"md\"\n onChange={(value) => onStatusChange(task, value as TaskStatus)}\n >\n {TASK_STATUS_ORDER.map((s) => (\n <SelectOption key={s} value={s}>\n {TASK_STATUS_LABEL[s]}\n </SelectOption>\n ))}\n </Select>\n ) : (\n TASK_STATUS_LABEL[task.status]\n )}\n </Property>\n <Property label=\"Priority\">\n <TaskPriorityIcon priority={task.priority} size={18} label=\"\" />\n {TASK_PRIORITY_LABEL[task.priority]}\n </Property>\n <Property label=\"Owner\">\n <span className=\"truncate\">{ownerName}</span>\n </Property>\n <Property label=\"Assigned\">\n <span className=\"truncate\">{assigneeName}</span>\n </Property>\n </div>\n\n {/* Subtasks */}\n {task.subtasks.length > 0 && (\n <section className=\"flex flex-col gap-2\">\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-title-small text-on-surface\">Subtasks</h3>\n <span className=\"text-body-small text-on-surface-variant\">\n {completedCount}/{task.subtasks.length}\n </span>\n </div>\n <ul className=\"m-0 list-none overflow-hidden rounded-medium border border-outline-variant p-0\">\n {task.subtasks.map((subtask, i) => (\n <li key={subtask.title}>\n <button\n type=\"button\"\n // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- M3 list item with a leading checkbox: the whole 48 dp row toggles and carries the state layer; a native checkbox input cannot host the row.\n role=\"checkbox\"\n aria-checked={subtask.completed}\n onClick={() => onSubtaskToggle?.(task, i, !subtask.completed)}\n className={clsx(\n \"flex min-h-12 w-full items-center gap-4 px-4 py-2 text-left text-body-large\",\n \"transition-colors duration-200 ease-standard hover:bg-on-surface/8 active:bg-on-surface/10\",\n focusRing,\n \"focus-visible:outline-offset-[-3px]\",\n i > 0 && \"border-t border-outline-variant\",\n )}\n >\n <span\n className={clsx(\n \"flex size-[18px] shrink-0 items-center justify-center rounded-[2px] transition-colors duration-200 ease-standard\",\n subtask.completed\n ? \"bg-primary text-on-primary\"\n : \"border-2 border-on-surface-variant\",\n )}\n >\n {subtask.completed && <Icon name=\"check\" size={16} weight={700} />}\n </span>\n <span\n className={clsx(\n \"min-w-0 flex-1\",\n subtask.completed\n ? \"text-on-surface-variant line-through\"\n : \"text-on-surface\",\n )}\n >\n {subtask.title}\n </span>\n </button>\n </li>\n ))}\n </ul>\n </section>\n )}\n\n {/* Description */}\n <section className=\"flex flex-col gap-2\">\n <h3 className=\"text-title-small text-on-surface\">Description</h3>\n {task.description ? (\n <Markdown content={task.description} size=\"medium\" />\n ) : (\n <p className=\"text-body-medium text-on-surface-variant\">No description</p>\n )}\n </section>\n\n {/* Timestamps */}\n <div className=\"flex flex-col gap-1 text-body-small text-on-surface-variant\">\n <span>Created {formatDate(task.created_at)}</span>\n <span>Updated {formatDate(task.updated_at)}</span>\n {task.completed_at && <span>Completed {formatDate(task.completed_at)}</span>}\n </div>\n\n {/* Actions */}\n {(onStatusChange || onDelete) && (\n <div className=\"flex flex-wrap items-center gap-2\">\n {onStatusChange && task.status === \"pending_approval\" && (\n <Button variant=\"filled\" size=\"lg\" onClick={() => onStatusChange(task, \"ready\")}>\n Approve\n </Button>\n )}\n {onStatusChange && task.status === \"backlog\" && (\n <Button variant=\"filled\" size=\"lg\" onClick={() => onStatusChange(task, \"in_progress\")}>\n Execute\n </Button>\n )}\n {onStatusChange && (task.status === \"in_progress\" || task.status === \"ready\") && (\n <Button variant=\"filled\" size=\"lg\" onClick={() => onStatusChange(task, \"done\")}>\n Mark Done\n </Button>\n )}\n {onStatusChange && task.status === \"done\" && (\n <Button variant=\"text\" size=\"lg\" onClick={() => onStatusChange(task, \"ready\")}>\n Reopen\n </Button>\n )}\n {onDelete && (\n <button\n type=\"button\"\n onClick={() => onDelete(task)}\n className={clsx(\n \"inline-flex h-10 items-center justify-center gap-2 rounded-full px-3 text-label-large text-error\",\n \"transition-colors duration-200 ease-standard hover:bg-error/8 active:bg-error/10\",\n focusRing,\n )}\n >\n <Icon name=\"delete\" size={18} />\n Delete\n </button>\n )}\n </div>\n )}\n </div>\n );\n}\n","// SPDX-License-Identifier: Apache-2.0 AND MIT\n// Derived from SpaceUI (packages/aphrody-spaceui/packages/ai/src/TaskCreateForm.tsx), MIT, rebuilt on Material Design 3.\n\nimport { Button, Input, Select, SelectOption, TextArea } from \"@aphrody/m3-primitives\";\nimport { clsx } from \"clsx\";\nimport { useCallback, useEffect, useId, useRef, useState } from \"react\";\n\nimport type { TaskPriority } from \"./types\";\nimport { TASK_PRIORITY_LABEL } from \"./types\";\n\nexport interface TaskCreateFormData {\n title: string;\n description: string;\n priority: TaskPriority;\n}\n\nexport interface TaskCreateFormProps {\n onSubmit: (data: TaskCreateFormData) => void;\n onCancel?: () => void;\n defaultPriority?: TaskPriority;\n isSubmitting?: boolean;\n className?: string;\n}\n\nconst PRIORITIES: TaskPriority[] = [\"critical\", \"high\", \"medium\", \"low\"];\n\n/**\n * Inline task creation on an M3 surface: title and description text fields, a priority select,\n * and M3 actions (filled `Create`, text `Cancel`).\n */\nexport function TaskCreateForm({\n onSubmit,\n onCancel,\n defaultPriority = \"medium\",\n isSubmitting,\n className,\n}: TaskCreateFormProps) {\n const [title, setTitle] = useState(\"\");\n const [description, setDescription] = useState(\"\");\n const [priority, setPriority] = useState<TaskPriority>(defaultPriority);\n const titleInputId = useId();\n const descriptionInputId = useId();\n const titleInputRef = useRef<HTMLInputElement>(null);\n\n // Focus the title when the form mounts (replaces `autoFocus`).\n useEffect(() => {\n titleInputRef.current?.focus();\n }, []);\n\n const canSubmit = title.trim().length > 0 && !isSubmitting;\n\n const handleSubmit = useCallback(() => {\n if (!canSubmit) return;\n onSubmit({ title: title.trim(), description: description.trim(), priority });\n setTitle(\"\");\n setDescription(\"\");\n setPriority(defaultPriority);\n }, [canSubmit, onSubmit, title, description, priority, defaultPriority]);\n\n return (\n <div\n className={clsx(\n \"flex flex-col gap-3 rounded-medium bg-surface-container-low p-4 text-on-surface\",\n className,\n )}\n >\n <div className=\"flex items-center gap-2\">\n <label htmlFor={titleInputId} className=\"sr-only\">\n Task Title\n </label>\n <Input\n ref={titleInputRef}\n id={titleInputId}\n type=\"text\"\n size=\"lg\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleSubmit();\n if (e.key === \"Escape\") onCancel?.();\n }}\n placeholder=\"Task title...\"\n className=\"min-w-0 flex-1\"\n disabled={isSubmitting}\n />\n <Select\n value={priority}\n size=\"lg\"\n onChange={(value) => setPriority(value as TaskPriority)}\n disabled={isSubmitting}\n >\n {PRIORITIES.map((p) => (\n <SelectOption key={p} value={p}>\n {TASK_PRIORITY_LABEL[p]}\n </SelectOption>\n ))}\n </Select>\n </div>\n <label htmlFor={descriptionInputId} className=\"sr-only\">\n Description\n </label>\n <TextArea\n id={descriptionInputId}\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n placeholder=\"Description (optional)\"\n rows={2}\n className=\"w-full resize-none\"\n disabled={isSubmitting}\n />\n <div className=\"flex items-center justify-end gap-2\">\n {onCancel && (\n <Button variant=\"text\" size=\"lg\" onClick={onCancel} disabled={isSubmitting}>\n Cancel\n </Button>\n )}\n <Button variant=\"filled\" size=\"lg\" disabled={!canSubmit} onClick={handleSubmit}>\n Create\n </Button>\n </div>\n </div>\n );\n}\n"]}
|