@amodalai/react 0.1.10 → 0.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"widget.js","sources":["../src/widget/FormattedText.tsx","../src/widget/ToolCallCard.tsx","../src/widget/KBProposalCard.tsx","../src/widget/SkillPill.tsx","../src/widget/StreamingIndicator.tsx","../src/widget/AskUserCard.tsx","../src/widget/widgets/EntityCard.tsx","../src/widget/widgets/EntityList.tsx","../src/widget/widgets/ScopeMap.tsx","../src/widget/widgets/AlertCard.tsx","../src/widget/widgets/Timeline.tsx","../src/widget/widgets/Comparison.tsx","../src/widget/widgets/DataTable.tsx","../src/widget/widgets/ScoreBreakdown.tsx","../src/widget/widgets/StatusBoard.tsx","../src/widget/widgets/CredentialInput.tsx","../src/widget/widgets/DocumentPreview.tsx","../src/widget/widgets/InfoCard.tsx","../src/widget/widgets/Metric.tsx","../src/widget/widgets/WidgetRenderer.tsx","../src/widget/MessageList.tsx","../src/widget/InputBar.tsx","../src/widget/TagEditor.tsx","../src/widget/SessionHistory.tsx","../src/widget/ChatWidget.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\n/**\n * Lightweight markdown-to-HTML renderer for chat text.\n * Handles: headers, bold, italic, inline code, code blocks, bullet lists, links, line breaks.\n * No external dependencies.\n */\n\n/** Escape HTML entities to prevent XSS. */\nfunction escapeHtml(text: string): string {\n return text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;');\n}\n\n/** Convert inline markdown (bold, italic, code, links) to HTML. */\nfunction inlineMarkdown(text: string): string {\n let html = escapeHtml(text);\n // Inline code: `code`\n html = html.replace(/`([^`]+)`/g, '<code class=\"pcw-md-code\">$1</code>');\n // Bold + italic: ***text*** or ___text___\n html = html.replace(/\\*\\*\\*(.+?)\\*\\*\\*/g, '<strong><em>$1</em></strong>');\n // Bold: **text** or __text__\n html = html.replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>');\n html = html.replace(/__(.+?)__/g, '<strong>$1</strong>');\n // Italic: *text* or _text_ (but not mid-word underscores)\n html = html.replace(/\\*(.+?)\\*/g, '<em>$1</em>');\n html = html.replace(/(?<!\\w)_(.+?)_(?!\\w)/g, '<em>$1</em>');\n // Links: [text](url)\n html = html.replace(\n /\\[([^\\]]+)\\]\\(([^)]+)\\)/g,\n '<a href=\"$2\" target=\"_blank\" rel=\"noopener noreferrer\">$1</a>',\n );\n return html;\n}\n\n/** Convert a markdown string to HTML. */\nfunction markdownToHtml(markdown: string): string {\n const lines = markdown.split('\\n');\n const output: string[] = [];\n let inCodeBlock = false;\n let codeLines: string[] = [];\n let inList = false;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n\n // Code block toggle\n if (line.startsWith('```')) {\n if (inCodeBlock) {\n output.push(`<pre class=\"pcw-md-codeblock\"><code>${escapeHtml(codeLines.join('\\n'))}</code></pre>`);\n codeLines = [];\n inCodeBlock = false;\n } else {\n if (inList) { output.push('</ul>'); inList = false; }\n inCodeBlock = true;\n }\n continue;\n }\n\n if (inCodeBlock) {\n codeLines.push(line);\n continue;\n }\n\n // Empty line\n if (line.trim() === '') {\n if (inList) { output.push('</ul>'); inList = false; }\n continue;\n }\n\n // Headers\n const headerMatch = /^(#{1,4})\\s+(.+)$/.exec(line);\n if (headerMatch) {\n if (inList) { output.push('</ul>'); inList = false; }\n const level = headerMatch[1].length;\n output.push(`<h${String(level)} class=\"pcw-md-h${String(level)}\">${inlineMarkdown(headerMatch[2])}</h${String(level)}>`);\n continue;\n }\n\n // Bullet list item: - text or * text or number. text\n const listMatch = /^(\\s*)[-*]\\s+(.+)$/.exec(line) ?? /^(\\s*)\\d+\\.\\s+(.+)$/.exec(line);\n if (listMatch) {\n if (!inList) { output.push('<ul class=\"pcw-md-list\">'); inList = true; }\n output.push(`<li>${inlineMarkdown(listMatch[2])}</li>`);\n continue;\n }\n\n // Regular paragraph\n if (inList) { output.push('</ul>'); inList = false; }\n output.push(`<p>${inlineMarkdown(line)}</p>`);\n }\n\n // Close any open blocks\n if (inCodeBlock) {\n output.push(`<pre class=\"pcw-md-codeblock\"><code>${escapeHtml(codeLines.join('\\n'))}</code></pre>`);\n }\n if (inList) {\n output.push('</ul>');\n }\n\n return output.join('\\n');\n}\n\ninterface FormattedTextProps {\n text: string;\n className?: string;\n}\n\nexport function FormattedText({ text, className }: FormattedTextProps) {\n const html = markdownToHtml(text);\n return (\n <div\n className={`pcw-formatted-text${className ? ` ${className}` : ''}`}\n dangerouslySetInnerHTML={{ __html: html }}\n />\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useState } from 'react';\nimport type { ToolCallInfo, SubagentEventInfo } from '../types';\nimport { FormattedText } from './FormattedText';\n\ninterface ToolCallCardProps {\n toolCall: ToolCallInfo;\n}\n\nfunction SubagentEventRow({ event }: { event: SubagentEventInfo }) {\n const [expanded, setExpanded] = useState(false);\n const hasDetail = Boolean(event.result || event.error || event.toolArgs);\n\n return (\n <div className=\"pcw-subagent-row\">\n <button\n type=\"button\"\n className={`pcw-subagent-row__header${hasDetail ? '' : ' pcw-subagent-row__header--static'}`}\n onClick={() => { if (hasDetail) setExpanded(!expanded); }}\n >\n {hasDetail && (\n <span className=\"pcw-subagent-row__chevron\">{expanded ? '\\u25BC' : '\\u25B6'}</span>\n )}\n <span className={`pcw-subagent-row__icon${event.error ? ' pcw-subagent-row__icon--error' : ''}`}>\n {event.error ? '\\u2717' : '\\u2713'}\n </span>\n <span className=\"pcw-subagent-row__name\">{event.toolName ?? 'unknown'}</span>\n </button>\n {expanded && (\n <div className=\"pcw-subagent-row__detail\">\n {event.error && <pre className=\"pcw-subagent-row__error\">{event.error}</pre>}\n {event.result && <pre className=\"pcw-subagent-row__result\">{event.result}</pre>}\n {event.toolArgs && (\n <pre className=\"pcw-subagent-row__args\">{JSON.stringify(event.toolArgs, null, 2)}</pre>\n )}\n </div>\n )}\n </div>\n );\n}\n\n/** Format dispatch parameters into a readable args summary. */\nfunction DispatchArgs({ params }: { params: Record<string, unknown> }) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- dispatch params from server\n const subagent = params['subagent'] as string | undefined;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- dispatch params from server\n const task = params['task'] as string | undefined;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- dispatch params from server\n const instruction = params['instruction'] as string | undefined;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- dispatch params from server\n const kbTags = params['kb_tags'] as string[] | undefined;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- dispatch params from server\n const tools = params['tools'] as string[] | undefined;\n\n return (\n <div className=\"pcw-dispatch-args\">\n {subagent && (\n <div className=\"pcw-dispatch-args__row\">\n <span className=\"pcw-dispatch-args__label\">agent</span>\n <span className=\"pcw-dispatch-args__value pcw-dispatch-args__value--mono\">{subagent}</span>\n </div>\n )}\n {task && (\n <div className=\"pcw-dispatch-args__row\">\n <span className=\"pcw-dispatch-args__label\">task</span>\n <span className=\"pcw-dispatch-args__value\">{task}</span>\n </div>\n )}\n {instruction && !task && (\n <div className=\"pcw-dispatch-args__row\">\n <span className=\"pcw-dispatch-args__label\">instruction</span>\n <span className=\"pcw-dispatch-args__value\">{instruction}</span>\n </div>\n )}\n {kbTags && kbTags.length > 0 && (\n <div className=\"pcw-dispatch-args__row\">\n <span className=\"pcw-dispatch-args__label\">kb</span>\n <span className=\"pcw-dispatch-args__value pcw-dispatch-args__tags\">\n {kbTags.map((t) => (\n <span key={t} className=\"pcw-dispatch-args__tag\">{t}</span>\n ))}\n </span>\n </div>\n )}\n {tools && tools.length > 0 && (\n <div className=\"pcw-dispatch-args__row\">\n <span className=\"pcw-dispatch-args__label\">tools</span>\n <span className=\"pcw-dispatch-args__value pcw-dispatch-args__tags\">\n {tools.map((t) => (\n <span key={t} className=\"pcw-dispatch-args__tag\">{t}</span>\n ))}\n </span>\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Collapse consecutive thought events into text blocks, keeping tool call\n * events inline between them. Returns an ordered list of render segments.\n */\ntype InlineSegment =\n | { kind: 'text'; text: string }\n | { kind: 'tool'; event: SubagentEventInfo };\n\nfunction buildInlineSegments(events: SubagentEventInfo[] | undefined): InlineSegment[] {\n if (!events || events.length === 0) return [];\n const segments: InlineSegment[] = [];\n let pendingText = '';\n for (const e of events) {\n if (e.eventType === 'thought' && e.text) {\n pendingText += e.text;\n } else if (e.eventType === 'tool_call_start' || e.eventType === 'tool_call_end') {\n if (pendingText) {\n segments.push({ kind: 'text', text: pendingText });\n pendingText = '';\n }\n segments.push({ kind: 'tool', event: e });\n }\n // skip 'complete' and 'error' — handled separately\n }\n if (pendingText) {\n segments.push({ kind: 'text', text: pendingText });\n }\n return segments;\n}\n\n/** Render an inline tool call row (for running subagent events). */\nfunction InlineToolRow({ event }: { event: SubagentEventInfo }) {\n const isEnd = event.eventType === 'tool_call_end';\n const icon = event.error ? '\\u2717' : isEnd ? '\\u2713' : '\\u29BF';\n const iconClass = event.error\n ? 'pcw-subagent-row__icon--error'\n : isEnd\n ? ''\n : 'pcw-subagent-row__icon--running';\n return (\n <div className=\"pcw-subagent-inline-tool\">\n <span className={`pcw-subagent-row__icon ${iconClass}`}>{icon}</span>\n <span className=\"pcw-subagent-row__name\">{event.toolName ?? 'unknown'}</span>\n </div>\n );\n}\n\nfunction DispatchToolCallCard({ toolCall }: ToolCallCardProps) {\n const [detailsOpen, setDetailsOpen] = useState(false);\n const statusClass = `pcw-tool-call__status pcw-tool-call__status--${toolCall.status}`;\n\n const summary = toolCall.duration_ms\n ? `dispatch (${String(toolCall.duration_ms)}ms)`\n : 'dispatch';\n\n const completeEvent = toolCall.subagentEvents?.find(\n (e) => e.eventType === 'complete',\n );\n\n const segments = buildInlineSegments(toolCall.subagentEvents);\n const hasActivity = segments.length > 0;\n const toolCallCount = segments.filter((s) => s.kind === 'tool' && s.event.eventType === 'tool_call_end').length;\n const hasDetails = hasActivity || Boolean(completeEvent?.text);\n\n return (\n <div className=\"pcw-tool-call\">\n <div className=\"pcw-tool-call__header pcw-tool-call__header--static\">\n <span className=\"pcw-tool-call__name\">{summary}</span>\n <span className={statusClass}>{toolCall.status}</span>\n </div>\n {toolCall.parameters && <DispatchArgs params={toolCall.parameters} />}\n {toolCall.status === 'running' && hasActivity && (\n <div className=\"pcw-dispatch-streaming\">\n {segments.map((seg, i) =>\n seg.kind === 'text' ? (\n <FormattedText key={i} text={seg.text} />\n ) : (\n <InlineToolRow key={i} event={seg.event} />\n ),\n )}\n </div>\n )}\n {toolCall.status !== 'running' && hasDetails && (\n <div className=\"pcw-dispatch-details\">\n <button\n type=\"button\"\n className=\"pcw-dispatch-details__toggle\"\n onClick={() => setDetailsOpen(!detailsOpen)}\n >\n <span className=\"pcw-tool-call__chevron\">{detailsOpen ? '\\u25BC' : '\\u25B6'}</span>\n <span>details</span>\n {toolCallCount > 0 && (\n <span className=\"pcw-dispatch-details__count\">\n {String(toolCallCount)} tool calls\n </span>\n )}\n </button>\n {detailsOpen && (\n <div className=\"pcw-dispatch-details__body\">\n {completeEvent?.text && (\n <FormattedText text={completeEvent.text} className=\"pcw-tool-call__subagent-summary\" />\n )}\n {segments.length > 0 && (\n <div className=\"pcw-tool-call__subagent\">\n {segments.map((seg, i) =>\n seg.kind === 'text' ? (\n <FormattedText key={i} text={seg.text} className=\"pcw-dispatch-inline-text\" />\n ) : (\n <SubagentEventRow key={i} event={seg.event} />\n ),\n )}\n </div>\n )}\n </div>\n )}\n </div>\n )}\n {toolCall.error && <p className=\"pcw-tool-call__error\">{toolCall.error}</p>}\n </div>\n );\n}\n\nexport function ToolCallCard({ toolCall }: ToolCallCardProps) {\n const [expanded, setExpanded] = useState(false);\n\n // Use the specialized layout for dispatch tool calls\n if (toolCall.toolName === 'dispatch') {\n return <DispatchToolCallCard toolCall={toolCall} />;\n }\n const statusClass = `pcw-tool-call__status pcw-tool-call__status--${toolCall.status}`;\n\n const summary = toolCall.duration_ms\n ? `${toolCall.toolName} (${String(toolCall.duration_ms)}ms)`\n : toolCall.toolName;\n\n return (\n <div className=\"pcw-tool-call\">\n <button\n type=\"button\"\n className=\"pcw-tool-call__header\"\n onClick={() => setExpanded(!expanded)}\n >\n <span className=\"pcw-tool-call__chevron\">{expanded ? '\\u25BC' : '\\u25B6'}</span>\n <span className=\"pcw-tool-call__name\">{summary}</span>\n <span className={statusClass}>{toolCall.status}</span>\n </button>\n {expanded && toolCall.parameters && (\n <pre className=\"pcw-tool-call__details\">\n {JSON.stringify(toolCall.parameters, null, 2)}\n </pre>\n )}\n {toolCall.error && <p className=\"pcw-tool-call__error\">{toolCall.error}</p>}\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport type { KBProposalInfo } from '../types';\n\ninterface KBProposalCardProps {\n proposal: KBProposalInfo;\n}\n\nexport function KBProposalCard({ proposal }: KBProposalCardProps) {\n return (\n <div className=\"pcw-kb-proposal\">\n <div className=\"pcw-kb-proposal__header\">\n <span className=\"pcw-kb-proposal__icon\">{'\\uD83D\\uDCA1'}</span>\n <span className=\"pcw-kb-proposal__title\">{proposal.title}</span>\n <span className=\"pcw-kb-proposal__scope\">{proposal.scope}</span>\n </div>\n <p className=\"pcw-kb-proposal__reasoning\">{proposal.reasoning}</p>\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\ninterface SkillPillProps {\n skill: string;\n}\n\nexport function SkillPill({ skill }: SkillPillProps) {\n return <span className=\"pcw-skill-pill\">Using: {skill}</span>;\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nexport function StreamingIndicator() {\n return (\n <div className=\"pcw-streaming\" aria-label=\"Streaming\">\n <span className=\"pcw-streaming__dot\" />\n <span className=\"pcw-streaming__dot\" />\n <span className=\"pcw-streaming__dot\" />\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useState } from 'react';\nimport type { AskUserQuestion, AskUserBlock } from '../types';\n\ninterface AskUserCardProps {\n block: AskUserBlock;\n onSubmit: (askId: string, answers: Record<string, string>) => void;\n}\n\nfunction QuestionField({\n question,\n index,\n value,\n onChange,\n disabled,\n}: {\n question: AskUserQuestion;\n index: number;\n value: string;\n onChange: (value: string) => void;\n disabled: boolean;\n}) {\n const fieldId = `ask-user-q-${String(index)}`;\n\n switch (question.type) {\n case 'text':\n return (\n <div className=\"pcw-ask-user__field\">\n <label htmlFor={fieldId} className=\"pcw-ask-user__label\">\n {question.header && <span className=\"pcw-ask-user__header\">{question.header}</span>}\n {question.question}\n </label>\n <textarea\n id={fieldId}\n className=\"pcw-ask-user__textarea\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={question.placeholder ?? ''}\n disabled={disabled}\n rows={3}\n />\n </div>\n );\n\n case 'yesno':\n return (\n <div className=\"pcw-ask-user__field\">\n <span className=\"pcw-ask-user__label\">\n {question.header && <span className=\"pcw-ask-user__header\">{question.header}</span>}\n {question.question}\n </span>\n <div className=\"pcw-ask-user__yesno\">\n <button\n type=\"button\"\n className={`pcw-ask-user__yesno-btn ${value === 'yes' ? 'pcw-ask-user__yesno-btn--active' : ''}`}\n onClick={() => onChange('yes')}\n disabled={disabled}\n >\n Yes\n </button>\n <button\n type=\"button\"\n className={`pcw-ask-user__yesno-btn ${value === 'no' ? 'pcw-ask-user__yesno-btn--active' : ''}`}\n onClick={() => onChange('no')}\n disabled={disabled}\n >\n No\n </button>\n </div>\n </div>\n );\n\n case 'choice': {\n const options = question.options ?? [];\n if (question.multiSelect) {\n const selected = value ? value.split(',').filter(Boolean) : [];\n const toggle = (label: string) => {\n const next = selected.includes(label)\n ? selected.filter((s) => s !== label)\n : [...selected, label];\n onChange(next.join(','));\n };\n return (\n <div className=\"pcw-ask-user__field\">\n <span className=\"pcw-ask-user__label\">\n {question.header && <span className=\"pcw-ask-user__header\">{question.header}</span>}\n {question.question}\n </span>\n <div className=\"pcw-ask-user__choices\">\n {options.map((opt) => (\n <label key={opt.label} className=\"pcw-ask-user__choice\">\n <input\n type=\"checkbox\"\n checked={selected.includes(opt.label)}\n onChange={() => toggle(opt.label)}\n disabled={disabled}\n />\n <span className=\"pcw-ask-user__choice-label\">{opt.label}</span>\n {opt.description && (\n <span className=\"pcw-ask-user__choice-desc\">{opt.description}</span>\n )}\n </label>\n ))}\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"pcw-ask-user__field\">\n <span className=\"pcw-ask-user__label\">\n {question.header && <span className=\"pcw-ask-user__header\">{question.header}</span>}\n {question.question}\n </span>\n <div className=\"pcw-ask-user__choices\">\n {options.map((opt) => (\n <label key={opt.label} className=\"pcw-ask-user__choice\">\n <input\n type=\"radio\"\n name={fieldId}\n checked={value === opt.label}\n onChange={() => onChange(opt.label)}\n disabled={disabled}\n />\n <span className=\"pcw-ask-user__choice-label\">{opt.label}</span>\n {opt.description && (\n <span className=\"pcw-ask-user__choice-desc\">{opt.description}</span>\n )}\n </label>\n ))}\n </div>\n </div>\n );\n }\n\n default:\n return null;\n }\n}\n\nexport function AskUserCard({ block, onSubmit }: AskUserCardProps) {\n const [answers, setAnswers] = useState<Record<string, string>>({});\n const [submitting, setSubmitting] = useState(false);\n const isSubmitted = block.status === 'submitted';\n const disabled = isSubmitted || submitting;\n\n const handleSubmit = () => {\n setSubmitting(true);\n onSubmit(block.askId, answers);\n };\n\n // Show read-only summary after submission\n if (isSubmitted && block.answers) {\n return (\n <div className=\"pcw-ask-user pcw-ask-user--submitted\">\n {block.questions.map((q, i) => (\n <div key={`${q.header}-${String(i)}`} className=\"pcw-ask-user__summary\">\n <span className=\"pcw-ask-user__summary-q\">{q.question}</span>\n <span className=\"pcw-ask-user__summary-a\">{block.answers?.[String(i)] ?? ''}</span>\n </div>\n ))}\n </div>\n );\n }\n\n return (\n <div className=\"pcw-ask-user\">\n {block.questions.map((q, i) => (\n <QuestionField\n key={`${q.header}-${String(i)}`}\n question={q}\n index={i}\n value={answers[String(i)] ?? ''}\n onChange={(v) => setAnswers((prev) => ({ ...prev, [String(i)]: v }))}\n disabled={disabled}\n />\n ))}\n <button\n type=\"button\"\n className=\"pcw-ask-user__submit\"\n onClick={handleSubmit}\n disabled={disabled}\n >\n {submitting ? 'Submitting...' : 'Submit'}\n </button>\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useCallback } from 'react';\nimport type { WidgetProps } from './WidgetRenderer';\nimport type { InteractionEvent } from '../../events/types';\n\ninterface EntityCardData {\n mac: string;\n manufacturer: string;\n protocols: string[];\n zone: string;\n zone_name?: string;\n suspicion_score: number;\n score_factors?: Record<string, number>;\n tag_status: string;\n dwell_time_minutes?: number;\n signal_strength_dbm?: number;\n first_seen?: string;\n last_seen?: string;\n}\n\nexport function EntityCard({ data, sendMessage, onInteraction }: WidgetProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- widget data from LLM\n const d = data as unknown as EntityCardData;\n const scorePercent = Math.min(100, Math.max(0, d.suspicion_score));\n\n const handleMouseEnter = useCallback(() => {\n const event: InteractionEvent = {\n type: 'entity_hovered',\n entity: { entityType: 'device', entityId: d.mac, source: 'widget:entity-card' },\n timestamp: new Date().toISOString(),\n };\n onInteraction?.(event);\n }, [d.mac, onInteraction]);\n\n const handleMouseLeave = useCallback(() => {\n const event: InteractionEvent = {\n type: 'entity_unhovered',\n entity: { entityType: 'device', entityId: d.mac, source: 'widget:entity-card' },\n timestamp: new Date().toISOString(),\n };\n onInteraction?.(event);\n }, [d.mac, onInteraction]);\n\n const handleClick = useCallback(() => {\n const event: InteractionEvent = {\n type: 'entity_clicked',\n entity: { entityType: 'device', entityId: d.mac, source: 'widget:entity-card' },\n timestamp: new Date().toISOString(),\n };\n onInteraction?.(event);\n }, [d.mac, onInteraction]);\n\n return (\n <div\n className=\"pcw-widget-card pcw-entity-card\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onClick={handleClick}\n data-testid=\"entity-card\"\n >\n <div className=\"pcw-entity-card__header\">\n <span className=\"pcw-entity-card__mac\">{d.mac}</span>\n <span className=\"pcw-entity-card__mfr\">{d.manufacturer}</span>\n </div>\n {Array.isArray(d.protocols) && d.protocols.length > 0 && (\n <div className=\"pcw-entity-card__protocols\">\n {d.protocols.map((p) => (\n <span key={p} className=\"pcw-entity-card__protocol-badge\">{p}</span>\n ))}\n </div>\n )}\n <div className=\"pcw-entity-card__zone\">\n Zone {d.zone}{d.zone_name ? ` (${d.zone_name})` : ''}\n </div>\n <div className=\"pcw-score-bar\">\n <div className=\"pcw-score-bar__label\">\n Score: {d.suspicion_score}\n </div>\n <div className=\"pcw-score-bar__track\">\n <div\n className=\"pcw-score-bar__fill\"\n style={{ width: `${String(scorePercent)}%` }}\n />\n </div>\n </div>\n {d.score_factors && Object.keys(d.score_factors).length > 0 && (\n <div className=\"pcw-entity-card__factors\">\n {Object.entries(d.score_factors).map(([key, val]) => (\n <div key={key} className=\"pcw-entity-card__factor\">\n <span>{key.replace(/_/g, ' ')}</span>\n <span>+{val}</span>\n </div>\n ))}\n </div>\n )}\n <div className=\"pcw-entity-card__meta\">\n <span>Tag: {d.tag_status}</span>\n {d.dwell_time_minutes != null && <span>Dwell: {d.dwell_time_minutes}min</span>}\n </div>\n <div className=\"pcw-entity-card__actions\">\n <button\n type=\"button\"\n className=\"pcw-entity-card__btn\"\n onClick={() => sendMessage(`Investigate device ${d.mac} in Zone ${d.zone}`)}\n >\n Investigate\n </button>\n <button\n type=\"button\"\n className=\"pcw-entity-card__btn pcw-entity-card__btn--secondary\"\n onClick={() => sendMessage(`Tag device ${d.mac} as suspicious`)}\n >\n Tag\n </button>\n </div>\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useState } from 'react';\nimport type { WidgetProps } from './WidgetRenderer';\n\ninterface EntityEntry {\n mac: string;\n manufacturer: string;\n protocols: string[];\n zone: string;\n suspicion_score: number;\n tag_status: string;\n}\n\ninterface EntityListData {\n devices: EntityEntry[];\n title?: string;\n sort?: string;\n max_display?: number;\n}\n\nexport function EntityList({ data, sendMessage }: WidgetProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- widget data from LLM\n const d = data as unknown as EntityListData;\n const [expanded, setExpanded] = useState<string | null>(null);\n const [sortKey, setSortKey] = useState(d.sort ?? 'suspicion_score');\n\n const sorted = [...d.devices].sort((a, b) => {\n if (sortKey === 'suspicion_score') return b.suspicion_score - a.suspicion_score;\n if (sortKey === 'mac') return a.mac.localeCompare(b.mac);\n if (sortKey === 'zone') return a.zone.localeCompare(b.zone);\n return 0;\n });\n\n const displayCount = d.max_display ?? sorted.length;\n const visible = sorted.slice(0, displayCount);\n\n return (\n <div className=\"pcw-widget-card pcw-entity-list\">\n {d.title && <div className=\"pcw-entity-list__title\">{d.title}</div>}\n <div className=\"pcw-entity-list__sort\">\n Sort:\n {['suspicion_score', 'mac', 'zone'].map((key) => (\n <button\n key={key}\n type=\"button\"\n className={`pcw-entity-list__sort-btn ${sortKey === key ? 'pcw-entity-list__sort-btn--active' : ''}`}\n onClick={() => setSortKey(key)}\n >\n {key.replace(/_/g, ' ')}\n </button>\n ))}\n </div>\n <table className=\"pcw-data-table__table\">\n <thead>\n <tr>\n <th>MAC</th>\n <th>Mfr</th>\n <th>Zone</th>\n <th>Score</th>\n <th>Tag</th>\n </tr>\n </thead>\n <tbody>\n {visible.map((device) => (\n <tr\n key={device.mac}\n className={`pcw-entity-list__row ${expanded === device.mac ? 'pcw-entity-list__row--expanded' : ''}`}\n onClick={() => setExpanded(expanded === device.mac ? null : device.mac)}\n >\n <td className=\"pcw-entity-list__mac\">{device.mac}</td>\n <td>{device.manufacturer}</td>\n <td>{device.zone}</td>\n <td>{device.suspicion_score}</td>\n <td>{device.tag_status}</td>\n </tr>\n ))}\n </tbody>\n </table>\n {expanded && (\n <div className=\"pcw-entity-list__detail\">\n <button\n type=\"button\"\n className=\"pcw-entity-card__btn\"\n onClick={() => sendMessage(`Tell me more about device ${expanded}`)}\n >\n Investigate {expanded}\n </button>\n </div>\n )}\n {sorted.length > displayCount && (\n <div className=\"pcw-entity-list__more\">\n +{sorted.length - displayCount} more devices\n </div>\n )}\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useCallback } from 'react';\nimport type { WidgetProps } from './WidgetRenderer';\nimport type { InteractionEvent } from '../../events/types';\n\ninterface ScopeMapData {\n highlight_zones?: string[];\n highlight_devices?: string[];\n label?: string;\n show_all_devices?: boolean;\n}\n\nconst ZONE_POSITIONS: Record<string, { x: number; y: number; w: number; h: number }> = {\n A: { x: 10, y: 10, w: 80, h: 60 },\n B: { x: 100, y: 10, w: 80, h: 60 },\n C: { x: 190, y: 10, w: 80, h: 60 },\n D: { x: 10, y: 80, w: 125, h: 60 },\n E: { x: 145, y: 80, w: 125, h: 60 },\n};\n\nconst ZONE_LABELS: Record<string, string> = {\n A: 'Lobby',\n B: 'Offices',\n C: 'Server Room',\n D: 'Warehouse',\n E: 'Parking',\n};\n\nexport function ScopeMap({ data, onInteraction }: WidgetProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- widget data from LLM\n const d = data as unknown as ScopeMapData;\n const highlighted = new Set(d.highlight_zones ?? []);\n\n const emitZoneInteraction = useCallback(\n (type: 'entity_hovered' | 'entity_unhovered' | 'entity_clicked', zoneId: string) => {\n const event: InteractionEvent = {\n type,\n entity: { entityType: 'zone', entityId: zoneId, source: 'widget:scope-map' },\n timestamp: new Date().toISOString(),\n };\n onInteraction?.(event);\n },\n [onInteraction],\n );\n\n const emitDeviceInteraction = useCallback(\n (type: 'entity_hovered' | 'entity_unhovered' | 'entity_clicked', mac: string) => {\n const event: InteractionEvent = {\n type,\n entity: { entityType: 'device', entityId: mac, source: 'widget:scope-map' },\n timestamp: new Date().toISOString(),\n };\n onInteraction?.(event);\n },\n [onInteraction],\n );\n\n return (\n <div className=\"pcw-widget-card pcw-scope-map\">\n {d.label && <div className=\"pcw-scope-map__label\">{d.label}</div>}\n <svg viewBox=\"0 0 280 150\" className=\"pcw-scope-map__svg\">\n {Object.entries(ZONE_POSITIONS).map(([zoneId, pos]) => (\n <g key={zoneId}>\n <rect\n x={pos.x}\n y={pos.y}\n width={pos.w}\n height={pos.h}\n rx={4}\n className={highlighted.has(zoneId)\n ? 'pcw-scope-map__zone pcw-scope-map__zone--highlight'\n : 'pcw-scope-map__zone'}\n data-testid={`zone-${zoneId}`}\n onMouseEnter={() => emitZoneInteraction('entity_hovered', zoneId)}\n onMouseLeave={() => emitZoneInteraction('entity_unhovered', zoneId)}\n onClick={() => emitZoneInteraction('entity_clicked', zoneId)}\n style={{ cursor: 'pointer' }}\n />\n <text\n x={pos.x + pos.w / 2}\n y={pos.y + pos.h / 2 - 6}\n textAnchor=\"middle\"\n className=\"pcw-scope-map__zone-label\"\n style={{ pointerEvents: 'none' }}\n >\n Zone {zoneId}\n </text>\n <text\n x={pos.x + pos.w / 2}\n y={pos.y + pos.h / 2 + 8}\n textAnchor=\"middle\"\n className=\"pcw-scope-map__zone-name\"\n style={{ pointerEvents: 'none' }}\n >\n {ZONE_LABELS[zoneId] ?? ''}\n </text>\n </g>\n ))}\n </svg>\n {d.highlight_devices && d.highlight_devices.length > 0 && (\n <div className=\"pcw-scope-map__devices\">\n {d.highlight_devices.map((mac) => (\n <span\n key={mac}\n className=\"pcw-scope-map__device-badge\"\n data-testid={`device-badge-${mac}`}\n onMouseEnter={() => emitDeviceInteraction('entity_hovered', mac)}\n onMouseLeave={() => emitDeviceInteraction('entity_unhovered', mac)}\n onClick={() => emitDeviceInteraction('entity_clicked', mac)}\n style={{ cursor: 'pointer' }}\n >\n {mac}\n </span>\n ))}\n </div>\n )}\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport type { WidgetProps } from './WidgetRenderer';\n\ninterface AlertCardData {\n id: string;\n type: string;\n zone: string;\n severity: 'low' | 'medium' | 'high' | 'critical';\n description: string;\n involved_devices: string[];\n protocols_involved?: string[];\n detected_at: string;\n}\n\nconst SEVERITY_CLASSES: Record<string, string> = {\n low: 'pcw-alert-card__severity--low',\n medium: 'pcw-alert-card__severity--medium',\n high: 'pcw-alert-card__severity--high',\n critical: 'pcw-alert-card__severity--critical',\n};\n\nexport function AlertCard({ data, sendMessage }: WidgetProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- widget data from LLM\n const d = data as unknown as AlertCardData;\n\n return (\n <div className=\"pcw-widget-card pcw-alert-card\">\n <div className=\"pcw-alert-card__header\">\n <span className={`pcw-alert-card__severity ${SEVERITY_CLASSES[d.severity] ?? ''}`}>\n {d.severity.toUpperCase()}\n </span>\n <span className=\"pcw-alert-card__type\">{d.type.replace(/_/g, ' ')}</span>\n <span className=\"pcw-alert-card__zone\">Zone {d.zone}</span>\n </div>\n <p className=\"pcw-alert-card__description\">{d.description}</p>\n <div className=\"pcw-alert-card__devices\">\n {d.involved_devices.map((mac) => (\n <button\n key={mac}\n type=\"button\"\n className=\"pcw-alert-card__device-link\"\n onClick={() => sendMessage(`Tell me about device ${mac}`)}\n >\n {mac}\n </button>\n ))}\n </div>\n {d.protocols_involved && d.protocols_involved.length > 0 && (\n <div className=\"pcw-alert-card__protocols\">\n {d.protocols_involved.map((p) => (\n <span key={p} className=\"pcw-entity-card__protocol-badge\">{p}</span>\n ))}\n </div>\n )}\n <div className=\"pcw-alert-card__time\">\n {new Date(d.detected_at).toLocaleString()}\n </div>\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport type { WidgetProps } from './WidgetRenderer';\n\ninterface TimelineEvent {\n timestamp: string;\n label: string;\n type?: string;\n severity?: string;\n device?: string;\n}\n\ninterface TimelineData {\n events: TimelineEvent[];\n label?: string;\n}\n\nconst EVENT_COLORS: Record<string, string> = {\n device_seen: '#3b82f6',\n zone_change: '#8b5cf6',\n alert: '#ef4444',\n tag_change: '#10b981',\n custom: '#6b7280',\n};\n\nexport function Timeline({ data, sendMessage }: WidgetProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- widget data from LLM\n const d = data as unknown as TimelineData;\n\n return (\n <div className=\"pcw-widget-card pcw-timeline\">\n {d.label && <div className=\"pcw-timeline__label\">{d.label}</div>}\n <div className=\"pcw-timeline__events\">\n {d.events.map((event, i) => {\n const color = EVENT_COLORS[event.type ?? 'custom'] ?? EVENT_COLORS['custom'];\n return (\n <div key={`${event.timestamp}-${String(i)}`} className=\"pcw-timeline__event\">\n <div className=\"pcw-timeline__marker\" style={{ backgroundColor: color }} />\n <div className=\"pcw-timeline__content\">\n <span className=\"pcw-timeline__time\">\n {new Date(event.timestamp).toLocaleTimeString(undefined, {\n hour: '2-digit',\n minute: '2-digit',\n })}\n </span>\n <span className=\"pcw-timeline__event-label\">{event.label}</span>\n {event.device && (\n <button\n type=\"button\"\n className=\"pcw-alert-card__device-link\"\n onClick={() => sendMessage(`Tell me about device ${event.device}`)}\n >\n {event.device}\n </button>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport type { WidgetProps } from './WidgetRenderer';\n\ninterface ComparisonItem {\n mac: string;\n manufacturer: string;\n protocols: string[];\n zone: string;\n suspicion_score: number;\n tag_status: string;\n}\n\ninterface ComparisonData {\n items: ComparisonItem[];\n title?: string;\n highlight_differences?: boolean;\n}\n\nexport function Comparison({ data, sendMessage }: WidgetProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- widget data from LLM\n const d = data as unknown as ComparisonData;\n\n return (\n <div className=\"pcw-widget-card pcw-comparison\">\n {d.title && <div className=\"pcw-comparison__title\">{d.title}</div>}\n <div className=\"pcw-comparison__grid\">\n {d.items.map((item) => (\n <div key={item.mac} className=\"pcw-comparison__item\">\n <div className=\"pcw-comparison__mac\">{item.mac}</div>\n <div className=\"pcw-comparison__detail\">{item.manufacturer}</div>\n <div className=\"pcw-comparison__detail\">\n {item.protocols.join(', ')}\n </div>\n <div className=\"pcw-comparison__detail\">Zone {item.zone}</div>\n <div className=\"pcw-comparison__score\">Score: {item.suspicion_score}</div>\n <div className=\"pcw-comparison__detail\">Tag: {item.tag_status}</div>\n <button\n type=\"button\"\n className=\"pcw-entity-card__btn\"\n onClick={() => sendMessage(`Investigate device ${item.mac}`)}\n >\n Investigate\n </button>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useState, useCallback } from 'react';\nimport type { WidgetProps } from './WidgetRenderer';\n\ninterface DataTableColumn {\n key: string;\n label: string;\n}\n\ninterface DataTableData {\n columns: DataTableColumn[];\n rows: Array<Record<string, unknown>>;\n title?: string;\n sortable?: boolean;\n}\n\nexport function DataTable({ data }: WidgetProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- widget data from LLM\n const d = data as unknown as Partial<DataTableData>;\n const columns = d.columns ?? [];\n const rows = d.rows ?? [];\n const [sortCol, setSortCol] = useState<string | null>(null);\n const [sortDir, setSortDir] = useState<'asc' | 'desc'>('asc');\n\n const handleSort = useCallback(\n (key: string) => {\n if (!d.sortable) return;\n if (sortCol === key) {\n setSortDir((prev) => (prev === 'asc' ? 'desc' : 'asc'));\n } else {\n setSortCol(key);\n setSortDir('asc');\n }\n },\n [d.sortable, sortCol],\n );\n\n const sortedRows = sortCol\n ? [...rows].sort((a, b) => {\n const aVal = a[sortCol];\n const bVal = b[sortCol];\n if (typeof aVal === 'number' && typeof bVal === 'number') {\n return sortDir === 'asc' ? aVal - bVal : bVal - aVal;\n }\n const aStr = String(aVal ?? '');\n const bStr = String(bVal ?? '');\n return sortDir === 'asc' ? aStr.localeCompare(bStr) : bStr.localeCompare(aStr);\n })\n : rows;\n\n return (\n <div className=\"pcw-widget-card pcw-data-table\">\n {d.title && <div className=\"pcw-data-table__title\">{d.title}</div>}\n <div className=\"pcw-data-table__scroll\">\n <table className=\"pcw-data-table__table\">\n <thead>\n <tr>\n {columns.map((col) => (\n <th\n key={col.key}\n onClick={() => handleSort(col.key)}\n className={d.sortable ? 'pcw-data-table__sortable' : ''}\n >\n {col.label}\n {sortCol === col.key && (sortDir === 'asc' ? ' ▲' : ' ▼')}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {sortedRows.map((row, i) => (\n <tr key={String(i)}>\n {columns.map((col) => (\n <td key={col.key}>{String(row[col.key] ?? '')}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport type { WidgetProps } from './WidgetRenderer';\n\ninterface ScoreBreakdownData {\n label?: string;\n total_score: number;\n max_score?: number;\n factors: Array<{\n name: string;\n value: number;\n max?: number;\n description?: string;\n }>;\n}\n\nexport function ScoreBreakdown({ data }: WidgetProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- widget data from LLM\n const d = data as unknown as ScoreBreakdownData;\n const maxScore = d.max_score ?? 100;\n const scorePercent = Math.min(100, Math.max(0, (d.total_score / maxScore) * 100));\n\n return (\n <div className=\"pcw-widget-card pcw-score-breakdown\">\n {d.label && <div className=\"pcw-score-breakdown__label\">{d.label}</div>}\n <div className=\"pcw-score-bar\">\n <div className=\"pcw-score-bar__label\">\n Score: {d.total_score}{maxScore !== 100 ? ` / ${maxScore}` : ''}\n </div>\n <div className=\"pcw-score-bar__track\">\n <div\n className=\"pcw-score-bar__fill\"\n style={{ width: `${String(scorePercent)}%` }}\n />\n </div>\n </div>\n <div className=\"pcw-score-breakdown__factors\">\n {d.factors.map((factor) => {\n const factorMax = factor.max ?? maxScore;\n const factorPercent = Math.min(100, Math.max(0, (factor.value / factorMax) * 100));\n return (\n <div key={factor.name} className=\"pcw-score-breakdown__factor\">\n <div className=\"pcw-score-breakdown__factor-header\">\n <span className=\"pcw-score-breakdown__factor-name\">\n {factor.name.replace(/_/g, ' ')}\n </span>\n <span className=\"pcw-score-breakdown__factor-value\">+{factor.value}</span>\n </div>\n <div className=\"pcw-score-breakdown__factor-bar\">\n <div\n className=\"pcw-score-breakdown__factor-fill\"\n style={{ width: `${String(factorPercent)}%` }}\n />\n </div>\n {factor.description && (\n <div className=\"pcw-score-breakdown__factor-desc\">{factor.description}</div>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport type { WidgetProps } from './WidgetRenderer';\n\ninterface StatusItem {\n id: string;\n label: string;\n severity: 'low' | 'medium' | 'high' | 'critical';\n status: string;\n description?: string;\n updated_at?: string;\n}\n\ninterface StatusBoardData {\n title?: string;\n items: StatusItem[];\n}\n\nconst SEVERITY_ORDER: Record<string, number> = {\n critical: 0,\n high: 1,\n medium: 2,\n low: 3,\n};\n\nexport function StatusBoard({ data, sendMessage }: WidgetProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- widget data from LLM\n const d = data as unknown as StatusBoardData;\n\n const sorted = [...d.items].sort(\n (a, b) => (SEVERITY_ORDER[a.severity] ?? 4) - (SEVERITY_ORDER[b.severity] ?? 4),\n );\n\n return (\n <div className=\"pcw-widget-card pcw-status-board\">\n {d.title && <div className=\"pcw-status-board__title\">{d.title}</div>}\n <div className=\"pcw-status-board__items\">\n {sorted.map((item) => (\n <div\n key={item.id}\n className={`pcw-status-board__item pcw-status-board__item--${item.severity}`}\n onClick={() => sendMessage(`Tell me more about ${item.label}`)}\n style={{ cursor: 'pointer' }}\n >\n <div className=\"pcw-status-board__item-header\">\n <span className={`pcw-status-board__severity pcw-status-board__severity--${item.severity}`}>\n {item.severity.toUpperCase()}\n </span>\n <span className=\"pcw-status-board__item-label\">{item.label}</span>\n <span className=\"pcw-status-board__item-status\">{item.status}</span>\n </div>\n {item.description && (\n <div className=\"pcw-status-board__item-desc\">{item.description}</div>\n )}\n </div>\n ))}\n </div>\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useState, useCallback } from 'react';\nimport type { WidgetProps } from './WidgetRenderer';\n\ninterface CredentialField {\n name: string;\n label: string;\n type: 'text' | 'password';\n required?: boolean;\n}\n\ninterface CredentialInputData {\n connection_name: string;\n tenant_id: string;\n fields: CredentialField[];\n}\n\ntype SubmitStatus = 'idle' | 'submitting' | 'success' | 'error';\n\nexport function CredentialInput({ data, sendMessage }: WidgetProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- widget data from LLM\n const d = data as unknown as CredentialInputData;\n\n const [values, setValues] = useState<Record<string, string>>({});\n const [status, setStatus] = useState<SubmitStatus>('idle');\n const [errorMessage, setErrorMessage] = useState('');\n\n const handleChange = useCallback((fieldName: string, value: string) => {\n setValues((prev) => ({ ...prev, [fieldName]: value }));\n }, []);\n\n const handleSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault();\n setStatus('submitting');\n setErrorMessage('');\n\n try {\n const origin = window.location.origin;\n const url = `${origin}/api/tenants/${d.tenant_id}/secrets`;\n\n for (const field of d.fields) {\n const response = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n name: field.name,\n value: values[field.name] ?? '',\n connection_name: d.connection_name,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to save ${field.label}: ${String(response.status)}`);\n }\n }\n\n setStatus('success');\n // Clear values from memory after successful submission\n setValues({});\n sendMessage(`Credentials for ${d.connection_name} have been saved.`);\n } catch (err) {\n setStatus('error');\n setErrorMessage(err instanceof Error ? err.message : 'Failed to save credentials');\n }\n },\n [d.tenant_id, d.connection_name, d.fields, values, sendMessage],\n );\n\n if (status === 'success') {\n return (\n <div className=\"pcw-widget-card pcw-widget-card--credential-input\">\n <div className=\"pcw-credential-input__status pcw-credential-input__status--success\">\n Credentials for {d.connection_name} saved successfully.\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"pcw-widget-card pcw-widget-card--credential-input\">\n <div className=\"pcw-credential-input__title\">\n Configure {d.connection_name}\n </div>\n <form\n onSubmit={(e) => {\n void handleSubmit(e);\n }}\n >\n {d.fields.map((field) => (\n <div key={field.name} className=\"pcw-credential-input__field\">\n <label className=\"pcw-credential-input__label\" htmlFor={`pcw-cred-${field.name}`}>\n {field.label}\n {field.required && <span aria-hidden=\"true\"> *</span>}\n </label>\n <input\n id={`pcw-cred-${field.name}`}\n className=\"pcw-credential-input__input\"\n type={field.type}\n required={field.required}\n autoComplete={field.type === 'password' ? 'new-password' : 'off'}\n value={values[field.name] ?? ''}\n disabled={status === 'submitting'}\n onChange={(e) => handleChange(field.name, e.target.value)}\n />\n </div>\n ))}\n {status === 'error' && (\n <div className=\"pcw-credential-input__status pcw-credential-input__status--error\">\n {errorMessage}\n </div>\n )}\n <button\n type=\"submit\"\n className=\"pcw-credential-input__submit\"\n disabled={status === 'submitting'}\n >\n {status === 'submitting' ? 'Saving...' : 'Save Credentials'}\n </button>\n </form>\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useState, useCallback } from 'react';\nimport type { WidgetProps } from './WidgetRenderer';\n\ninterface DocumentPreviewData {\n preview_id: string;\n resource_type: 'kb_document' | 'tool' | 'skill' | 'subagent' | 'automation';\n title: string;\n body: string;\n category?: string;\n action: 'create' | 'update';\n proposal_id?: string;\n}\n\nconst ACTION_LABELS: Record<string, string> = {\n create: 'New',\n update: 'Update',\n};\n\nexport function DocumentPreview({ data, sendMessage }: WidgetProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- widget data from LLM\n const d = data as unknown as DocumentPreviewData;\n\n const [editing, setEditing] = useState(false);\n const [editedBody, setEditedBody] = useState(d.body);\n const [approved, setApproved] = useState(false);\n\n const handleApprove = useCallback(() => {\n setApproved(true);\n sendMessage(`I've approved the ${d.resource_type} '${d.preview_id}'.`);\n }, [d.resource_type, d.preview_id, sendMessage]);\n\n const handleEditFirst = useCallback(() => {\n setEditing(true);\n }, []);\n\n const handleApproveWithEdits = useCallback(() => {\n setApproved(true);\n setEditing(false);\n sendMessage(\n `I've approved the ${d.resource_type} '${d.preview_id}' with edits:\\n\\n${editedBody}`,\n );\n }, [d.resource_type, d.preview_id, editedBody, sendMessage]);\n\n if (approved) {\n return (\n <div className=\"pcw-widget-card pcw-widget-card--document-preview\">\n <div className=\"pcw-document-preview__header\">\n <span className=\"pcw-document-preview__title\">{d.title}</span>\n <span className=\"pcw-document-preview__badge pcw-document-preview__badge--approved\">\n Approved\n </span>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"pcw-widget-card pcw-widget-card--document-preview\">\n <div className=\"pcw-document-preview__header\">\n <span className=\"pcw-document-preview__title\">{d.title}</span>\n {d.category && (\n <span className=\"pcw-document-preview__badge pcw-document-preview__badge--category\">\n {d.category}\n </span>\n )}\n <span className=\"pcw-document-preview__badge pcw-document-preview__badge--action\">\n {ACTION_LABELS[d.action] ?? d.action}\n </span>\n </div>\n {editing ? (\n <div className=\"pcw-document-preview__editor-container\">\n <textarea\n className=\"pcw-document-preview__editor\"\n value={editedBody}\n onChange={(e) => setEditedBody(e.target.value)}\n rows={12}\n />\n <div className=\"pcw-document-preview__actions\">\n <button\n type=\"button\"\n className=\"pcw-document-preview__btn pcw-document-preview__btn--primary\"\n onClick={handleApproveWithEdits}\n >\n Approve with edits\n </button>\n <button\n type=\"button\"\n className=\"pcw-document-preview__btn pcw-document-preview__btn--secondary\"\n onClick={() => {\n setEditing(false);\n setEditedBody(d.body);\n }}\n >\n Cancel\n </button>\n </div>\n </div>\n ) : (\n <>\n <pre className=\"pcw-document-preview__body\">\n <code>{d.body}</code>\n </pre>\n <div className=\"pcw-document-preview__actions\">\n <button\n type=\"button\"\n className=\"pcw-document-preview__btn pcw-document-preview__btn--primary\"\n onClick={handleApprove}\n >\n Approve\n </button>\n <button\n type=\"button\"\n className=\"pcw-document-preview__btn pcw-document-preview__btn--secondary\"\n onClick={handleEditFirst}\n >\n Edit First\n </button>\n </div>\n </>\n )}\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport type { WidgetProps } from './WidgetRenderer';\n\ninterface InfoCardData {\n title: string;\n subtitle?: string;\n description?: string;\n fields: Array<{ label: string; value: string | number | boolean }>;\n tags?: string[];\n status?: 'ok' | 'warning' | 'critical' | 'info';\n actions?: Array<{ label: string; message: string }>;\n}\n\nexport function InfoCard({ data, sendMessage }: WidgetProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- widget data from LLM\n const d = data as unknown as Partial<InfoCardData>;\n const title = d.title ?? 'Untitled';\n const fields = Array.isArray(d.fields) ? d.fields : [];\n const tags = Array.isArray(d.tags) ? d.tags : [];\n const actions = Array.isArray(d.actions) ? d.actions : [];\n\n return (\n <div className=\"pcw-widget-card pcw-info-card\" data-testid=\"info-card\">\n <div className=\"pcw-info-card__header\">\n <span className=\"pcw-info-card__title\">{title}</span>\n {d.status && (\n <span className={`pcw-info-card__status pcw-info-card__status--${d.status}`}>\n {d.status}\n </span>\n )}\n </div>\n {d.subtitle && (\n <div className=\"pcw-info-card__subtitle\">{d.subtitle}</div>\n )}\n {d.description && (\n <p className=\"pcw-info-card__description\">{d.description}</p>\n )}\n {fields.length > 0 && (\n <div className=\"pcw-info-card__fields\">\n {fields.map((f) => (\n <div key={f.label} className=\"pcw-info-card__field\">\n <span className=\"pcw-info-card__field-label\">{f.label}</span>\n <span className=\"pcw-info-card__field-value\">{String(f.value)}</span>\n </div>\n ))}\n </div>\n )}\n {tags.length > 0 && (\n <div className=\"pcw-info-card__tags\">\n {tags.map((t) => (\n <span key={t} className=\"pcw-info-card__tag\">{t}</span>\n ))}\n </div>\n )}\n {actions.length > 0 && (\n <div className=\"pcw-info-card__actions\">\n {actions.map((a) => (\n <button\n key={a.label}\n type=\"button\"\n className=\"pcw-info-card__btn\"\n onClick={() => sendMessage(a.message)}\n >\n {a.label}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport type { WidgetProps } from './WidgetRenderer';\n\ninterface MetricData {\n label: string;\n value: number | string;\n unit?: string;\n trend?: 'up' | 'down' | 'flat';\n description?: string;\n previous_value?: number | string;\n}\n\nconst TREND_ARROWS: Record<string, string> = {\n up: '\\u2191',\n down: '\\u2193',\n flat: '\\u2192',\n};\n\nexport function Metric({ data }: WidgetProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- widget data from LLM\n const d = data as unknown as Partial<MetricData>;\n const label = d.label ?? 'Metric';\n const value = d.value ?? '—';\n\n return (\n <div className=\"pcw-widget-card pcw-metric\" data-testid=\"metric\">\n <div className=\"pcw-metric__label\">{label}</div>\n <div className=\"pcw-metric__value-row\">\n <span className=\"pcw-metric__value\">{String(value)}</span>\n {d.unit && <span className=\"pcw-metric__unit\">{d.unit}</span>}\n {d.trend && (\n <span className={`pcw-metric__trend pcw-metric__trend--${d.trend}`}>\n {TREND_ARROWS[d.trend] ?? ''}\n </span>\n )}\n </div>\n {d.description && (\n <div className=\"pcw-metric__description\">{d.description}</div>\n )}\n {d.previous_value != null && (\n <div className=\"pcw-metric__previous\">\n Previous: {String(d.previous_value)}{d.unit ? ` ${d.unit}` : ''}\n </div>\n )}\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { Component, type ComponentType, type ReactNode } from 'react';\nimport type { InteractionEvent } from '../../events/types';\nimport { EntityCard } from './EntityCard';\nimport { EntityList } from './EntityList';\nimport { ScopeMap } from './ScopeMap';\nimport { AlertCard } from './AlertCard';\nimport { Timeline } from './Timeline';\nimport { Comparison } from './Comparison';\nimport { DataTable } from './DataTable';\nimport { ScoreBreakdown } from './ScoreBreakdown';\nimport { StatusBoard } from './StatusBoard';\nimport { CredentialInput } from './CredentialInput';\nimport { DocumentPreview } from './DocumentPreview';\nimport { InfoCard } from './InfoCard';\nimport { Metric } from './Metric';\n\n/**\n * Props that every widget component receives.\n */\nexport interface WidgetProps<T = Record<string, unknown>> {\n data: T;\n sendMessage: (text: string) => void;\n onInteraction?: (event: InteractionEvent) => void;\n}\n\n/**\n * Map of widget type string → component.\n */\nexport type WidgetRegistry = Record<string, ComponentType<WidgetProps>>;\n\nconst platformWidgets: WidgetRegistry = {\n 'entity-card': EntityCard,\n 'entity-list': EntityList,\n 'scope-map': ScopeMap,\n 'alert-card': AlertCard,\n 'timeline': Timeline,\n 'comparison': Comparison,\n 'data-table': DataTable,\n 'score-breakdown': ScoreBreakdown,\n 'status-board': StatusBoard,\n 'credential-input': CredentialInput,\n 'document-preview': DocumentPreview,\n 'info-card': InfoCard,\n 'metric': Metric,\n};\n\n/**\n * Error boundary that catches widget render errors and falls back to JSON.\n */\nclass WidgetErrorBoundary extends Component<\n { widgetType: string; data: Record<string, unknown>; children: ReactNode },\n { error: Error | null }\n> {\n constructor(props: { widgetType: string; data: Record<string, unknown>; children: ReactNode }) {\n super(props);\n this.state = { error: null };\n }\n\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n\n render() {\n if (this.state.error) {\n return (\n <div className=\"pcw-widget-card pcw-widget-card--generic\">\n <div className=\"pcw-widget-card__header\">\n <span className=\"pcw-widget-card__type\">{this.props.widgetType}</span>\n <span style={{ color: 'var(--pcw-error, #ef4444)', fontSize: '12px', marginLeft: '8px' }}>\n render error\n </span>\n </div>\n <pre className=\"pcw-widget-card__json\">\n {JSON.stringify(this.props.data, null, 2)}\n </pre>\n </div>\n );\n }\n return this.props.children;\n }\n}\n\ninterface WidgetRendererProps {\n widgetType: string;\n data: Record<string, unknown>;\n sendMessage: (text: string) => void;\n customWidgets?: WidgetRegistry;\n onInteraction?: (event: InteractionEvent) => void;\n}\n\n/**\n * Renders a widget by looking up the type in custom widgets first,\n * then platform widgets, then falling back to a generic JSON display.\n */\nexport function WidgetRenderer({\n widgetType,\n data,\n sendMessage,\n customWidgets,\n onInteraction,\n}: WidgetRendererProps) {\n // Check custom widgets first, then platform widgets\n const WidgetComponent = customWidgets?.[widgetType] ?? platformWidgets[widgetType];\n\n if (WidgetComponent) {\n return (\n <WidgetErrorBoundary widgetType={widgetType} data={data}>\n <WidgetComponent data={data} sendMessage={sendMessage} onInteraction={onInteraction} />\n </WidgetErrorBoundary>\n );\n }\n\n // Fallback: render as formatted JSON\n return (\n <div className=\"pcw-widget-card pcw-widget-card--generic\">\n <div className=\"pcw-widget-card__header\">\n <span className=\"pcw-widget-card__type\">{widgetType}</span>\n </div>\n <pre className=\"pcw-widget-card__json\">\n {JSON.stringify(data, null, 2)}\n </pre>\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useEffect, useRef } from 'react';\nimport type { ChatMessage, AssistantTextMessage } from '../types';\nimport type { InteractionEvent } from '../events/types';\nimport { ToolCallCard } from './ToolCallCard';\nimport { KBProposalCard } from './KBProposalCard';\nimport { SkillPill } from './SkillPill';\nimport { FormattedText } from './FormattedText';\nimport { StreamingIndicator } from './StreamingIndicator';\nimport { AskUserCard } from './AskUserCard';\nimport { WidgetRenderer } from './widgets/WidgetRenderer';\nimport type { WidgetRegistry } from './widgets/WidgetRenderer';\n\ninterface MessageListProps {\n messages: ChatMessage[];\n isStreaming: boolean;\n sendMessage?: (text: string) => void;\n customWidgets?: WidgetRegistry;\n onInteraction?: (event: InteractionEvent) => void;\n onAskUserSubmit?: (askId: string, answers: Record<string, string>) => void;\n emptyStateText?: string;\n}\n\nfunction AssistantBubble({\n message,\n sendMessage,\n customWidgets,\n onInteraction,\n onAskUserSubmit,\n}: {\n message: AssistantTextMessage;\n sendMessage?: (text: string) => void;\n customWidgets?: WidgetRegistry;\n onInteraction?: (event: InteractionEvent) => void;\n onAskUserSubmit?: (askId: string, answers: Record<string, string>) => void;\n}) {\n const hasContentBlocks = message.contentBlocks && message.contentBlocks.length > 0;\n const hasExtras =\n message.toolCalls.length > 0 ||\n message.skillActivations.length > 0 ||\n message.kbProposals.length > 0;\n\n // If we have content blocks, render them in order for proper interleaving\n if (hasContentBlocks) {\n // Tool calls are already in contentBlocks — only render KB proposals separately\n const hasKBProposals = message.kbProposals.length > 0;\n return (\n <div className=\"pcw-bubble pcw-bubble--assistant\">\n {message.skillActivations.map((skill) => (\n <SkillPill key={skill} skill={skill} />\n ))}\n {message.contentBlocks.map((block, i) => {\n switch (block.type) {\n case 'text':\n return block.text.length > 0 ? (\n <FormattedText key={`text-${String(i)}`} text={block.text} className=\"pcw-bubble__text\" />\n ) : null;\n case 'widget':\n return (\n <WidgetRenderer\n key={`widget-${String(i)}`}\n widgetType={block.widgetType}\n data={block.data}\n sendMessage={sendMessage ?? (() => {})}\n customWidgets={customWidgets}\n onInteraction={onInteraction}\n />\n );\n case 'tool_calls':\n return (\n <div key={`tools-${String(i)}`} className=\"pcw-bubble__extras\">\n {block.calls.map((tc) => (\n <ToolCallCard key={tc.toolId} toolCall={tc} />\n ))}\n </div>\n );\n case 'ask_user':\n return (\n <AskUserCard\n key={`ask-${block.askId}`}\n block={block}\n onSubmit={onAskUserSubmit ?? (() => {})}\n />\n );\n default:\n return null;\n }\n })}\n {hasKBProposals && (\n <div className=\"pcw-bubble__extras\">\n {message.kbProposals.map((proposal, idx) => (\n <KBProposalCard key={`${proposal.title}-${String(idx)}`} proposal={proposal} />\n ))}\n </div>\n )}\n </div>\n );\n }\n\n // Fallback: legacy rendering without content blocks\n return (\n <div className=\"pcw-bubble pcw-bubble--assistant\">\n {message.skillActivations.map((skill) => (\n <SkillPill key={skill} skill={skill} />\n ))}\n {message.text.length > 0 && <FormattedText className=\"pcw-bubble__text\" text={message.text} />}\n {hasExtras && (\n <div className=\"pcw-bubble__extras\">\n {message.toolCalls.map((tc) => (\n <ToolCallCard key={tc.toolId} toolCall={tc} />\n ))}\n {message.kbProposals.map((proposal, idx) => (\n <KBProposalCard key={`${proposal.title}-${String(idx)}`} proposal={proposal} />\n ))}\n </div>\n )}\n </div>\n );\n}\n\nexport function MessageList({ messages, isStreaming, sendMessage, customWidgets, onInteraction, onAskUserSubmit, emptyStateText }: MessageListProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const shouldAutoScroll = useRef(true);\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n\n const handleScroll = () => {\n const threshold = 100;\n shouldAutoScroll.current =\n el.scrollHeight - el.scrollTop - el.clientHeight < threshold;\n };\n\n el.addEventListener('scroll', handleScroll);\n return () => el.removeEventListener('scroll', handleScroll);\n }, []);\n\n useEffect(() => {\n if (shouldAutoScroll.current && containerRef.current) {\n containerRef.current.scrollTop = containerRef.current.scrollHeight;\n }\n }, [messages, isStreaming]);\n\n if (messages.length === 0) {\n return (\n <div className=\"pcw-messages--empty\">\n <p>{emptyStateText ?? 'Send a message to start a conversation.'}</p>\n </div>\n );\n }\n\n return (\n <div ref={containerRef} className=\"pcw-messages\">\n {messages.map((msg) => {\n switch (msg.type) {\n case 'user':\n return (\n <div key={msg.id} className=\"pcw-bubble pcw-bubble--user\">\n <p className=\"pcw-bubble__text\">{msg.text}</p>\n </div>\n );\n case 'assistant_text':\n return (\n <AssistantBubble\n key={msg.id}\n message={msg}\n sendMessage={sendMessage}\n customWidgets={customWidgets}\n onInteraction={onInteraction}\n onAskUserSubmit={onAskUserSubmit}\n />\n );\n case 'error':\n return (\n <div key={msg.id} className=\"pcw-error\">\n {msg.message}\n </div>\n );\n default:\n return null;\n }\n })}\n {isStreaming && <StreamingIndicator />}\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useCallback, useRef, useState } from 'react';\nimport type { KeyboardEvent } from 'react';\n\ninterface InputBarProps {\n onSend: (text: string) => void;\n onStop?: () => void;\n disabled: boolean;\n isStreaming?: boolean;\n placeholder: string;\n}\n\nfunction SendIcon() {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\" />\n <polygon points=\"22 2 15 22 11 13 2 9 22 2\" />\n </svg>\n );\n}\n\nfunction StopIcon() {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\" />\n </svg>\n );\n}\n\nexport function InputBar({ onSend, onStop, disabled, isStreaming, placeholder }: InputBarProps) {\n const [value, setValue] = useState('');\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n const handleSend = useCallback(() => {\n const trimmed = value.trim();\n if (trimmed.length === 0) return;\n onSend(trimmed);\n setValue('');\n if (textareaRef.current) {\n textareaRef.current.style.height = 'auto';\n }\n }, [value, onSend]);\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSend();\n }\n },\n [handleSend],\n );\n\n const handleInput = useCallback(() => {\n const el = textareaRef.current;\n if (!el) return;\n el.style.height = 'auto';\n el.style.height = `${String(Math.min(el.scrollHeight, 120))}px`;\n }, []);\n\n return (\n <div className=\"pcw-input\">\n <textarea\n ref={textareaRef}\n className=\"pcw-input__textarea\"\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={handleKeyDown}\n onInput={handleInput}\n placeholder={placeholder}\n disabled={disabled && !isStreaming}\n rows={1}\n />\n {isStreaming ? (\n <button\n type=\"button\"\n className=\"pcw-input__send pcw-input__stop\"\n onClick={onStop}\n aria-label=\"Stop generating\"\n >\n <StopIcon />\n </button>\n ) : (\n <button\n type=\"button\"\n className=\"pcw-input__send\"\n onClick={handleSend}\n disabled={disabled || value.trim().length === 0}\n aria-label=\"Send message\"\n >\n <SendIcon />\n </button>\n )}\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useCallback, useState } from 'react';\n\nexport interface TagEditorProps {\n tags: string[];\n onSave: (tags: string[]) => void;\n}\n\nexport function TagEditor({ tags, onSave }: TagEditorProps) {\n const [isEditing, setIsEditing] = useState(false);\n const [inputValue, setInputValue] = useState('');\n\n const handleRemove = useCallback(\n (tag: string) => {\n onSave(tags.filter((t) => t !== tag));\n },\n [tags, onSave],\n );\n\n const handleAdd = useCallback(() => {\n const trimmed = inputValue.trim();\n if (trimmed && !tags.includes(trimmed)) {\n onSave([...tags, trimmed]);\n }\n setInputValue('');\n setIsEditing(false);\n }, [inputValue, tags, onSave]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleAdd();\n } else if (e.key === 'Escape') {\n setInputValue('');\n setIsEditing(false);\n }\n },\n [handleAdd],\n );\n\n return (\n <div className=\"pcw-tag-editor\">\n {tags.map((tag) => (\n <span key={tag} className=\"pcw-tag-badge\">\n {tag}\n <button\n type=\"button\"\n className=\"pcw-tag-remove\"\n onClick={() => handleRemove(tag)}\n aria-label={`Remove tag ${tag}`}\n >\n x\n </button>\n </span>\n ))}\n {isEditing ? (\n <input\n className=\"pcw-tag-input\"\n type=\"text\"\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onKeyDown={handleKeyDown}\n onBlur={handleAdd}\n placeholder=\"Add tag...\"\n autoFocus\n />\n ) : (\n <button\n type=\"button\"\n className=\"pcw-tag-add-btn\"\n onClick={() => setIsEditing(true)}\n aria-label=\"Add tag\"\n >\n +\n </button>\n )}\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useCallback, useState } from 'react';\nimport type { SessionHistoryItem } from '../client/chat-api';\nimport { TagEditor } from './TagEditor';\n\nexport interface SessionHistoryProps {\n sessions: SessionHistoryItem[];\n isLoading: boolean;\n allTags: string[];\n onSelectSession: (sessionId: string) => void;\n onNewChat: () => void;\n onClose: () => void;\n onUpdateTags: (sessionId: string, tags: string[]) => void;\n}\n\nfunction timeAgo(dateStr: string): string {\n const now = Date.now();\n const then = new Date(dateStr).getTime();\n const diff = now - then;\n const minutes = Math.floor(diff / 60000);\n if (minutes < 1) return 'just now';\n if (minutes < 60) return `${String(minutes)}m ago`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${String(hours)}h ago`;\n const days = Math.floor(hours / 24);\n return `${String(days)}d ago`;\n}\n\nexport function SessionHistory({\n sessions,\n isLoading,\n allTags,\n onSelectSession,\n onNewChat,\n onClose,\n onUpdateTags,\n}: SessionHistoryProps) {\n const [filterTags, setFilterTags] = useState<string[]>([]);\n const [editingTagsId, setEditingTagsId] = useState<string | null>(null);\n\n const toggleFilter = useCallback((tag: string) => {\n setFilterTags((prev) =>\n prev.includes(tag)\n ? prev.filter((t) => t !== tag)\n : [...prev, tag],\n );\n }, []);\n\n const filteredSessions =\n filterTags.length > 0\n ? sessions.filter((s) => filterTags.some((tag) => s.tags.includes(tag)))\n : sessions;\n\n return (\n <div className=\"pcw-history-drawer\" data-testid=\"session-history\">\n <div className=\"pcw-history-header\">\n <h3 className=\"pcw-history-title\">Session History</h3>\n <button\n type=\"button\"\n className=\"pcw-history-close\"\n onClick={onClose}\n aria-label=\"Close history\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} width={16} height={16}>\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n\n <button\n type=\"button\"\n className=\"pcw-history-new-chat\"\n onClick={onNewChat}\n >\n + New Chat\n </button>\n\n {allTags.length > 0 && (\n <div className=\"pcw-history-filters\">\n {allTags.map((tag) => (\n <button\n key={tag}\n type=\"button\"\n className={`pcw-filter-chip ${filterTags.includes(tag) ? 'pcw-filter-chip--active' : ''}`}\n onClick={() => toggleFilter(tag)}\n >\n {tag}\n </button>\n ))}\n </div>\n )}\n\n <div className=\"pcw-history-list\">\n {isLoading && (\n <div className=\"pcw-history-loading\">Loading sessions...</div>\n )}\n\n {!isLoading && filteredSessions.length === 0 && (\n <div className=\"pcw-history-empty\">No past sessions</div>\n )}\n\n {filteredSessions.map((session) => (\n <div\n key={session.id}\n className=\"pcw-history-item\"\n >\n <button\n type=\"button\"\n className=\"pcw-history-item-content\"\n onClick={() => onSelectSession(session.id)}\n >\n <div className=\"pcw-history-item-title\">\n {session.title ?? `Session ${session.id.slice(0, 8)}`}\n </div>\n <div className=\"pcw-history-item-meta\">\n <span className=\"pcw-history-item-time\">{timeAgo(session.created_at)}</span>\n <span className=\"pcw-history-item-count\">\n {String(session.message_count)} msg{session.message_count !== 1 ? 's' : ''}\n </span>\n </div>\n </button>\n\n <div className=\"pcw-history-item-tags\">\n {editingTagsId === session.id ? (\n <TagEditor\n tags={session.tags}\n onSave={(tags) => {\n onUpdateTags(session.id, tags);\n setEditingTagsId(null);\n }}\n />\n ) : (\n <div className=\"pcw-history-item-tag-list\">\n {session.tags.map((tag) => (\n <span key={tag} className=\"pcw-tag-badge pcw-tag-badge--small\">{tag}</span>\n ))}\n <button\n type=\"button\"\n className=\"pcw-tag-edit-btn\"\n onClick={(e) => {\n e.stopPropagation();\n setEditingTagsId(session.id);\n }}\n aria-label=\"Edit tags\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} width={12} height={12}>\n <path d=\"M20.59 13.41l-7.17 7.17a2 2 0 01-2.83 0L2 12V2h10l8.59 8.59a2 2 0 010 2.82z\" />\n <line x1=\"7\" y1=\"7\" x2=\"7.01\" y2=\"7\" />\n </svg>\n </button>\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport type { WidgetConfig } from '../types';\nimport type { InteractionEvent } from '../events/types';\nimport type { WidgetRegistry } from './widgets/WidgetRenderer';\nimport { useChat } from '../hooks/useChat';\nimport { useSessionHistory } from '../hooks/useSessionHistory';\nimport { applyTheme, mergeTheme } from '../theme';\nimport { MessageList } from './MessageList';\nimport { InputBar } from './InputBar';\nimport { SessionHistory } from './SessionHistory';\nimport './widget.css';\n\nfunction ChatIcon() {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\" />\n </svg>\n );\n}\n\nfunction CloseIcon() {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n );\n}\n\nexport type ChatWidgetProps = WidgetConfig & {\n widgets?: WidgetRegistry;\n /** Enable session history drawer. */\n historyEnabled?: boolean;\n};\n\nexport function ChatWidget({\n serverUrl,\n user,\n getToken,\n theme,\n position = 'floating',\n defaultOpen = false,\n onToolCall,\n onKBProposal,\n onEvent,\n entityExtractors,\n widgets: customWidgets,\n historyEnabled = false,\n showInput = true,\n sessionType,\n deployId,\n initialMessage,\n resumeSessionId,\n onStreamEnd,\n onSessionCreated,\n}: ChatWidgetProps) {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n const [showHistory, setShowHistory] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const mergedTheme = mergeTheme(theme);\n\n const { messages, send, stop, isStreaming, error, reset, eventBus, submitAskUserResponse, loadSession, isHistorical } = useChat({\n serverUrl,\n user,\n getToken,\n onToolCall,\n onKBProposal,\n onEvent,\n entityExtractors,\n sessionType,\n deployId,\n initialMessage,\n resumeSessionId,\n onStreamEnd,\n onSessionCreated,\n });\n\n const history = useSessionHistory({\n serverUrl,\n getToken,\n enabled: historyEnabled && showHistory,\n });\n\n const handleInteraction = useCallback(\n (event: InteractionEvent) => {\n eventBus.emitInteraction(event);\n onEvent?.(event);\n },\n [eventBus, onEvent],\n );\n\n const handleSelectSession = useCallback(\n (sessionId: string) => {\n loadSession(sessionId);\n setShowHistory(false);\n },\n [loadSession],\n );\n\n const handleNewChat = useCallback(() => {\n reset();\n setShowHistory(false);\n }, [reset]);\n\n // Apply theme as CSS custom properties\n useEffect(() => {\n if (containerRef.current && theme) {\n applyTheme(containerRef.current, theme);\n }\n }, [theme]);\n\n const positionClass = `pcw-widget pcw-widget--${position}`;\n\n // Inline mode is always visible\n if (position === 'inline') {\n return (\n <div ref={containerRef} className={positionClass} data-testid=\"chat-widget\">\n <ChatHeader\n title={mergedTheme.headerText}\n onReset={reset}\n historyEnabled={historyEnabled}\n onToggleHistory={() => setShowHistory((v) => !v)}\n isHistorical={isHistorical}\n />\n {showHistory && (\n <SessionHistory\n sessions={history.sessions}\n isLoading={history.isLoading}\n allTags={history.allTags}\n onSelectSession={handleSelectSession}\n onNewChat={handleNewChat}\n onClose={() => setShowHistory(false)}\n onUpdateTags={history.updateTags}\n />\n )}\n <MessageList messages={messages} isStreaming={isStreaming} sendMessage={send} customWidgets={customWidgets} onInteraction={handleInteraction} onAskUserSubmit={submitAskUserResponse} emptyStateText={mergedTheme.emptyStateText} />\n {error && <div className=\"pcw-error\">{error}</div>}\n {showInput && (\n <InputBar\n onSend={send}\n onStop={stop}\n disabled={isStreaming}\n isStreaming={isStreaming}\n placeholder={isHistorical ? 'Send a message to start a new chat...' : mergedTheme.placeholder}\n />\n )}\n </div>\n );\n }\n\n // For non-inline positions, support open/close toggle\n if (!isOpen) {\n if (position === 'floating') {\n return (\n <button\n type=\"button\"\n className=\"pcw-toggle\"\n onClick={() => setIsOpen(true)}\n aria-label=\"Open chat\"\n >\n <ChatIcon />\n </button>\n );\n }\n return null;\n }\n\n return (\n <div ref={containerRef} className={positionClass} data-testid=\"chat-widget\">\n <ChatHeader\n title={mergedTheme.headerText}\n onClose={() => setIsOpen(false)}\n onReset={reset}\n showClose\n historyEnabled={historyEnabled}\n onToggleHistory={() => setShowHistory((v) => !v)}\n isHistorical={isHistorical}\n />\n {showHistory && (\n <SessionHistory\n sessions={history.sessions}\n isLoading={history.isLoading}\n allTags={history.allTags}\n onSelectSession={handleSelectSession}\n onNewChat={handleNewChat}\n onClose={() => setShowHistory(false)}\n onUpdateTags={history.updateTags}\n />\n )}\n <MessageList messages={messages} isStreaming={isStreaming} onInteraction={handleInteraction} onAskUserSubmit={submitAskUserResponse} emptyStateText={mergedTheme.emptyStateText} />\n {error && <div className=\"pcw-error\">{error}</div>}\n {showInput && (\n <InputBar\n onSend={send}\n onStop={stop}\n disabled={isStreaming}\n isStreaming={isStreaming}\n placeholder={isHistorical ? 'Send a message to start a new chat...' : mergedTheme.placeholder}\n />\n )}\n </div>\n );\n}\n\nfunction HistoryIcon() {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" width={16} height={16}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12 6 12 12 16 14\" />\n </svg>\n );\n}\n\ninterface ChatHeaderProps {\n title: string;\n onClose?: () => void;\n onReset?: () => void;\n showClose?: boolean;\n historyEnabled?: boolean;\n onToggleHistory?: () => void;\n isHistorical?: boolean;\n}\n\nfunction ChatHeader({ title, onClose, onReset, showClose = false, historyEnabled, onToggleHistory, isHistorical }: ChatHeaderProps) {\n return (\n <div className=\"pcw-header\">\n <div style={{ display: 'flex', gap: '4px', alignItems: 'center' }}>\n {historyEnabled && onToggleHistory && (\n <button\n type=\"button\"\n className=\"pcw-header__close\"\n onClick={onToggleHistory}\n aria-label=\"Session history\"\n title=\"Session history\"\n >\n <HistoryIcon />\n </button>\n )}\n <h3 className=\"pcw-header__title\">\n {title}\n {isHistorical && <span className=\"pcw-header__badge\">History</span>}\n </h3>\n </div>\n <div style={{ display: 'flex', gap: '4px', alignItems: 'center' }}>\n {onReset && (\n <button\n type=\"button\"\n className=\"pcw-header__close\"\n onClick={onReset}\n aria-label=\"New conversation\"\n title=\"New conversation\"\n >\n {'\\u21BB'}\n </button>\n )}\n {showClose && onClose && (\n <button\n type=\"button\"\n className=\"pcw-header__close\"\n onClick={onClose}\n aria-label=\"Close chat\"\n >\n <CloseIcon />\n </button>\n )}\n </div>\n </div>\n );\n}\n"],"names":["escapeHtml","text","inlineMarkdown","html","markdownToHtml","markdown","lines","output","inCodeBlock","codeLines","inList","i","line","headerMatch","level","listMatch","FormattedText","className","jsx","SubagentEventRow","event","expanded","setExpanded","useState","hasDetail","jsxs","DispatchArgs","params","subagent","task","instruction","kbTags","tools","t","buildInlineSegments","events","segments","pendingText","e","InlineToolRow","isEnd","icon","iconClass","DispatchToolCallCard","toolCall","detailsOpen","setDetailsOpen","statusClass","summary","completeEvent","_a","hasActivity","toolCallCount","s","hasDetails","seg","ToolCallCard","KBProposalCard","proposal","SkillPill","skill","StreamingIndicator","QuestionField","question","index","value","onChange","disabled","fieldId","options","selected","toggle","label","next","opt","AskUserCard","block","onSubmit","answers","setAnswers","submitting","setSubmitting","isSubmitted","handleSubmit","q","v","prev","EntityCard","data","sendMessage","onInteraction","d","scorePercent","handleMouseEnter","useCallback","handleMouseLeave","handleClick","key","val","EntityList","sortKey","setSortKey","sorted","a","b","displayCount","visible","device","ZONE_POSITIONS","ZONE_LABELS","ScopeMap","highlighted","emitZoneInteraction","type","zoneId","emitDeviceInteraction","mac","pos","SEVERITY_CLASSES","AlertCard","p","EVENT_COLORS","Timeline","color","Comparison","item","DataTable","columns","rows","sortCol","setSortCol","sortDir","setSortDir","handleSort","sortedRows","aVal","bVal","aStr","bStr","col","row","ScoreBreakdown","maxScore","factor","factorMax","factorPercent","SEVERITY_ORDER","StatusBoard","CredentialInput","values","setValues","status","setStatus","errorMessage","setErrorMessage","handleChange","fieldName","url","field","response","err","ACTION_LABELS","DocumentPreview","editing","setEditing","editedBody","setEditedBody","approved","setApproved","handleApprove","handleEditFirst","handleApproveWithEdits","Fragment","InfoCard","title","fields","tags","actions","f","TREND_ARROWS","Metric","platformWidgets","WidgetErrorBoundary","Component","props","error","WidgetRenderer","widgetType","customWidgets","WidgetComponent","AssistantBubble","message","onAskUserSubmit","hasContentBlocks","hasExtras","hasKBProposals","tc","idx","MessageList","messages","isStreaming","emptyStateText","containerRef","useRef","shouldAutoScroll","useEffect","el","handleScroll","msg","SendIcon","StopIcon","InputBar","onSend","onStop","placeholder","setValue","textareaRef","handleSend","trimmed","handleKeyDown","handleInput","TagEditor","onSave","isEditing","setIsEditing","inputValue","setInputValue","handleRemove","tag","handleAdd","timeAgo","dateStr","now","then","diff","minutes","hours","days","SessionHistory","sessions","isLoading","allTags","onSelectSession","onNewChat","onClose","onUpdateTags","filterTags","setFilterTags","editingTagsId","setEditingTagsId","toggleFilter","filteredSessions","session","ChatIcon","CloseIcon","ChatWidget","serverUrl","user","getToken","theme","position","defaultOpen","onToolCall","onKBProposal","onEvent","entityExtractors","historyEnabled","showInput","sessionType","deployId","initialMessage","resumeSessionId","onStreamEnd","onSessionCreated","isOpen","setIsOpen","showHistory","setShowHistory","mergedTheme","mergeTheme","send","stop","reset","eventBus","submitAskUserResponse","loadSession","isHistorical","useChat","history","useSessionHistory","handleInteraction","handleSelectSession","sessionId","handleNewChat","applyTheme","positionClass","ChatHeader","HistoryIcon","onReset","showClose","onToggleHistory"],"mappings":"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"}
1
+ {"version":3,"file":"widget.js","sources":["../src/widget/FormattedText.tsx","../src/widget/ToolCallCard.tsx","../src/widget/KBProposalCard.tsx","../src/widget/SkillPill.tsx","../src/widget/StreamingIndicator.tsx","../src/widget/AskUserCard.tsx","../src/widget/widgets/EntityCard.tsx","../src/widget/widgets/EntityList.tsx","../src/widget/widgets/ScopeMap.tsx","../src/widget/widgets/AlertCard.tsx","../src/widget/widgets/Timeline.tsx","../src/widget/widgets/Comparison.tsx","../src/widget/widgets/DataTable.tsx","../src/widget/widgets/ScoreBreakdown.tsx","../src/widget/widgets/StatusBoard.tsx","../src/widget/widgets/CredentialInput.tsx","../src/widget/widgets/DocumentPreview.tsx","../src/widget/widgets/InfoCard.tsx","../src/widget/widgets/Metric.tsx","../src/widget/widgets/WidgetRenderer.tsx","../src/widget/MessageList.tsx","../src/widget/InputBar.tsx","../src/widget/TagEditor.tsx","../src/widget/SessionHistory.tsx","../src/widget/ChatWidget.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\n/**\n * Lightweight markdown-to-HTML renderer for chat text.\n * Handles: headers, bold, italic, inline code, code blocks, bullet lists, links, line breaks.\n * No external dependencies.\n */\n\n/** Escape HTML entities to prevent XSS. */\nfunction escapeHtml(text: string): string {\n return text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;');\n}\n\n/** Convert inline markdown (bold, italic, code, links) to HTML. */\nfunction inlineMarkdown(text: string): string {\n let html = escapeHtml(text);\n // Inline code: `code`\n html = html.replace(/`([^`]+)`/g, '<code class=\"pcw-md-code\">$1</code>');\n // Bold + italic: ***text*** or ___text___\n html = html.replace(/\\*\\*\\*(.+?)\\*\\*\\*/g, '<strong><em>$1</em></strong>');\n // Bold: **text** or __text__\n html = html.replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>');\n html = html.replace(/__(.+?)__/g, '<strong>$1</strong>');\n // Italic: *text* or _text_ (but not mid-word underscores)\n html = html.replace(/\\*(.+?)\\*/g, '<em>$1</em>');\n html = html.replace(/(?<!\\w)_(.+?)_(?!\\w)/g, '<em>$1</em>');\n // Links: [text](url)\n html = html.replace(\n /\\[([^\\]]+)\\]\\(([^)]+)\\)/g,\n '<a href=\"$2\" target=\"_blank\" rel=\"noopener noreferrer\">$1</a>',\n );\n return html;\n}\n\n/** Convert a markdown string to HTML. */\nfunction markdownToHtml(markdown: string): string {\n const lines = markdown.split('\\n');\n const output: string[] = [];\n let inCodeBlock = false;\n let codeLines: string[] = [];\n let inList = false;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n\n // Code block toggle\n if (line.startsWith('```')) {\n if (inCodeBlock) {\n output.push(`<pre class=\"pcw-md-codeblock\"><code>${escapeHtml(codeLines.join('\\n'))}</code></pre>`);\n codeLines = [];\n inCodeBlock = false;\n } else {\n if (inList) { output.push('</ul>'); inList = false; }\n inCodeBlock = true;\n }\n continue;\n }\n\n if (inCodeBlock) {\n codeLines.push(line);\n continue;\n }\n\n // Empty line\n if (line.trim() === '') {\n if (inList) { output.push('</ul>'); inList = false; }\n continue;\n }\n\n // Headers\n const headerMatch = /^(#{1,4})\\s+(.+)$/.exec(line);\n if (headerMatch) {\n if (inList) { output.push('</ul>'); inList = false; }\n const level = headerMatch[1].length;\n output.push(`<h${String(level)} class=\"pcw-md-h${String(level)}\">${inlineMarkdown(headerMatch[2])}</h${String(level)}>`);\n continue;\n }\n\n // Bullet list item: - text or * text or number. text\n const listMatch = /^(\\s*)[-*]\\s+(.+)$/.exec(line) ?? /^(\\s*)\\d+\\.\\s+(.+)$/.exec(line);\n if (listMatch) {\n if (!inList) { output.push('<ul class=\"pcw-md-list\">'); inList = true; }\n output.push(`<li>${inlineMarkdown(listMatch[2])}</li>`);\n continue;\n }\n\n // Regular paragraph\n if (inList) { output.push('</ul>'); inList = false; }\n output.push(`<p>${inlineMarkdown(line)}</p>`);\n }\n\n // Close any open blocks\n if (inCodeBlock) {\n output.push(`<pre class=\"pcw-md-codeblock\"><code>${escapeHtml(codeLines.join('\\n'))}</code></pre>`);\n }\n if (inList) {\n output.push('</ul>');\n }\n\n return output.join('\\n');\n}\n\ninterface FormattedTextProps {\n text: string;\n className?: string;\n}\n\nexport function FormattedText({ text, className }: FormattedTextProps) {\n const html = markdownToHtml(text);\n return (\n <div\n className={`pcw-formatted-text${className ? ` ${className}` : ''}`}\n dangerouslySetInnerHTML={{ __html: html }}\n />\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useState } from 'react';\nimport type { ToolCallInfo, SubagentEventInfo } from '../types';\nimport { FormattedText } from './FormattedText';\n\ninterface ToolCallCardProps {\n toolCall: ToolCallInfo;\n}\n\nfunction SubagentEventRow({ event }: { event: SubagentEventInfo }) {\n const [expanded, setExpanded] = useState(false);\n const hasDetail = Boolean(event.result || event.error || event.toolArgs);\n\n return (\n <div className=\"pcw-subagent-row\">\n <button\n type=\"button\"\n className={`pcw-subagent-row__header${hasDetail ? '' : ' pcw-subagent-row__header--static'}`}\n onClick={() => { if (hasDetail) setExpanded(!expanded); }}\n >\n {hasDetail && (\n <span className=\"pcw-subagent-row__chevron\">{expanded ? '\\u25BC' : '\\u25B6'}</span>\n )}\n <span className={`pcw-subagent-row__icon${event.error ? ' pcw-subagent-row__icon--error' : ''}`}>\n {event.error ? '\\u2717' : '\\u2713'}\n </span>\n <span className=\"pcw-subagent-row__name\">{event.toolName ?? 'unknown'}</span>\n </button>\n {expanded && (\n <div className=\"pcw-subagent-row__detail\">\n {event.error && <pre className=\"pcw-subagent-row__error\">{event.error}</pre>}\n {event.result && <pre className=\"pcw-subagent-row__result\">{event.result}</pre>}\n {event.toolArgs && (\n <pre className=\"pcw-subagent-row__args\">{JSON.stringify(event.toolArgs, null, 2)}</pre>\n )}\n </div>\n )}\n </div>\n );\n}\n\n/** Format dispatch parameters into a readable args summary. */\nfunction DispatchArgs({ params }: { params: Record<string, unknown> }) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- dispatch params from server\n const subagent = params['subagent'] as string | undefined;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- dispatch params from server\n const task = params['task'] as string | undefined;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- dispatch params from server\n const instruction = params['instruction'] as string | undefined;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- dispatch params from server\n const kbTags = params['kb_tags'] as string[] | undefined;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- dispatch params from server\n const tools = params['tools'] as string[] | undefined;\n\n return (\n <div className=\"pcw-dispatch-args\">\n {subagent && (\n <div className=\"pcw-dispatch-args__row\">\n <span className=\"pcw-dispatch-args__label\">agent</span>\n <span className=\"pcw-dispatch-args__value pcw-dispatch-args__value--mono\">{subagent}</span>\n </div>\n )}\n {task && (\n <div className=\"pcw-dispatch-args__row\">\n <span className=\"pcw-dispatch-args__label\">task</span>\n <span className=\"pcw-dispatch-args__value\">{task}</span>\n </div>\n )}\n {instruction && !task && (\n <div className=\"pcw-dispatch-args__row\">\n <span className=\"pcw-dispatch-args__label\">instruction</span>\n <span className=\"pcw-dispatch-args__value\">{instruction}</span>\n </div>\n )}\n {kbTags && kbTags.length > 0 && (\n <div className=\"pcw-dispatch-args__row\">\n <span className=\"pcw-dispatch-args__label\">kb</span>\n <span className=\"pcw-dispatch-args__value pcw-dispatch-args__tags\">\n {kbTags.map((t) => (\n <span key={t} className=\"pcw-dispatch-args__tag\">{t}</span>\n ))}\n </span>\n </div>\n )}\n {tools && tools.length > 0 && (\n <div className=\"pcw-dispatch-args__row\">\n <span className=\"pcw-dispatch-args__label\">tools</span>\n <span className=\"pcw-dispatch-args__value pcw-dispatch-args__tags\">\n {tools.map((t) => (\n <span key={t} className=\"pcw-dispatch-args__tag\">{t}</span>\n ))}\n </span>\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Collapse consecutive thought events into text blocks, keeping tool call\n * events inline between them. Returns an ordered list of render segments.\n */\ntype InlineSegment =\n | { kind: 'text'; text: string }\n | { kind: 'tool'; event: SubagentEventInfo };\n\nfunction buildInlineSegments(events: SubagentEventInfo[] | undefined): InlineSegment[] {\n if (!events || events.length === 0) return [];\n const segments: InlineSegment[] = [];\n let pendingText = '';\n for (const e of events) {\n if (e.eventType === 'thought' && e.text) {\n pendingText += e.text;\n } else if (e.eventType === 'tool_call_start' || e.eventType === 'tool_call_end') {\n if (pendingText) {\n segments.push({ kind: 'text', text: pendingText });\n pendingText = '';\n }\n segments.push({ kind: 'tool', event: e });\n }\n // skip 'complete' and 'error' — handled separately\n }\n if (pendingText) {\n segments.push({ kind: 'text', text: pendingText });\n }\n return segments;\n}\n\n/** Render an inline tool call row (for running subagent events). */\nfunction InlineToolRow({ event }: { event: SubagentEventInfo }) {\n const isEnd = event.eventType === 'tool_call_end';\n const icon = event.error ? '\\u2717' : isEnd ? '\\u2713' : '\\u29BF';\n const iconClass = event.error\n ? 'pcw-subagent-row__icon--error'\n : isEnd\n ? ''\n : 'pcw-subagent-row__icon--running';\n return (\n <div className=\"pcw-subagent-inline-tool\">\n <span className={`pcw-subagent-row__icon ${iconClass}`}>{icon}</span>\n <span className=\"pcw-subagent-row__name\">{event.toolName ?? 'unknown'}</span>\n </div>\n );\n}\n\nfunction DispatchToolCallCard({ toolCall }: ToolCallCardProps) {\n const [detailsOpen, setDetailsOpen] = useState(false);\n const statusClass = `pcw-tool-call__status pcw-tool-call__status--${toolCall.status}`;\n\n const summary = toolCall.duration_ms\n ? `dispatch (${String(toolCall.duration_ms)}ms)`\n : 'dispatch';\n\n const completeEvent = toolCall.subagentEvents?.find(\n (e) => e.eventType === 'complete',\n );\n\n const segments = buildInlineSegments(toolCall.subagentEvents);\n const hasActivity = segments.length > 0;\n const toolCallCount = segments.filter((s) => s.kind === 'tool' && s.event.eventType === 'tool_call_end').length;\n const hasDetails = hasActivity || Boolean(completeEvent?.text);\n\n return (\n <div className=\"pcw-tool-call\">\n <div className=\"pcw-tool-call__header pcw-tool-call__header--static\">\n <span className=\"pcw-tool-call__name\">{summary}</span>\n <span className={statusClass}>{toolCall.status}</span>\n </div>\n {toolCall.parameters && <DispatchArgs params={toolCall.parameters} />}\n {toolCall.status === 'running' && hasActivity && (\n <div className=\"pcw-dispatch-streaming\">\n {segments.map((seg, i) =>\n seg.kind === 'text' ? (\n <FormattedText key={i} text={seg.text} />\n ) : (\n <InlineToolRow key={i} event={seg.event} />\n ),\n )}\n </div>\n )}\n {toolCall.status !== 'running' && hasDetails && (\n <div className=\"pcw-dispatch-details\">\n <button\n type=\"button\"\n className=\"pcw-dispatch-details__toggle\"\n onClick={() => setDetailsOpen(!detailsOpen)}\n >\n <span className=\"pcw-tool-call__chevron\">{detailsOpen ? '\\u25BC' : '\\u25B6'}</span>\n <span>details</span>\n {toolCallCount > 0 && (\n <span className=\"pcw-dispatch-details__count\">\n {String(toolCallCount)} tool calls\n </span>\n )}\n </button>\n {detailsOpen && (\n <div className=\"pcw-dispatch-details__body\">\n {completeEvent?.text && (\n <FormattedText text={completeEvent.text} className=\"pcw-tool-call__subagent-summary\" />\n )}\n {segments.length > 0 && (\n <div className=\"pcw-tool-call__subagent\">\n {segments.map((seg, i) =>\n seg.kind === 'text' ? (\n <FormattedText key={i} text={seg.text} className=\"pcw-dispatch-inline-text\" />\n ) : (\n <SubagentEventRow key={i} event={seg.event} />\n ),\n )}\n </div>\n )}\n </div>\n )}\n </div>\n )}\n {toolCall.error && <p className=\"pcw-tool-call__error\">{toolCall.error}</p>}\n </div>\n );\n}\n\nexport function ToolCallCard({ toolCall }: ToolCallCardProps) {\n const [expanded, setExpanded] = useState(false);\n\n // Use the specialized layout for dispatch tool calls\n if (toolCall.toolName === 'dispatch') {\n return <DispatchToolCallCard toolCall={toolCall} />;\n }\n const statusClass = `pcw-tool-call__status pcw-tool-call__status--${toolCall.status}`;\n\n const summary = toolCall.duration_ms\n ? `${toolCall.toolName} (${String(toolCall.duration_ms)}ms)`\n : toolCall.toolName;\n\n return (\n <div className=\"pcw-tool-call\">\n <button\n type=\"button\"\n className=\"pcw-tool-call__header\"\n onClick={() => setExpanded(!expanded)}\n >\n <span className=\"pcw-tool-call__chevron\">{expanded ? '\\u25BC' : '\\u25B6'}</span>\n <span className=\"pcw-tool-call__name\">{summary}</span>\n <span className={statusClass}>{toolCall.status}</span>\n </button>\n {expanded && toolCall.parameters && (\n <pre className=\"pcw-tool-call__details\">\n {JSON.stringify(toolCall.parameters, null, 2)}\n </pre>\n )}\n {toolCall.error && <p className=\"pcw-tool-call__error\">{toolCall.error}</p>}\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport type { KBProposalInfo } from '../types';\n\ninterface KBProposalCardProps {\n proposal: KBProposalInfo;\n}\n\nexport function KBProposalCard({ proposal }: KBProposalCardProps) {\n return (\n <div className=\"pcw-kb-proposal\">\n <div className=\"pcw-kb-proposal__header\">\n <span className=\"pcw-kb-proposal__icon\">{'\\uD83D\\uDCA1'}</span>\n <span className=\"pcw-kb-proposal__title\">{proposal.title}</span>\n <span className=\"pcw-kb-proposal__scope\">{proposal.scope}</span>\n </div>\n <p className=\"pcw-kb-proposal__reasoning\">{proposal.reasoning}</p>\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\ninterface SkillPillProps {\n skill: string;\n}\n\nexport function SkillPill({ skill }: SkillPillProps) {\n return <span className=\"pcw-skill-pill\">Using: {skill}</span>;\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nexport function StreamingIndicator() {\n return (\n <div className=\"pcw-streaming\" aria-label=\"Streaming\">\n <span className=\"pcw-streaming__dot\" />\n <span className=\"pcw-streaming__dot\" />\n <span className=\"pcw-streaming__dot\" />\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useState } from 'react';\nimport type { AskUserQuestion, AskUserBlock } from '../types';\n\ninterface AskUserCardProps {\n block: AskUserBlock;\n onSubmit: (askId: string, answers: Record<string, string>) => void;\n}\n\nfunction QuestionField({\n question,\n index,\n value,\n onChange,\n disabled,\n}: {\n question: AskUserQuestion;\n index: number;\n value: string;\n onChange: (value: string) => void;\n disabled: boolean;\n}) {\n const fieldId = `ask-user-q-${String(index)}`;\n\n switch (question.type) {\n case 'text':\n return (\n <div className=\"pcw-ask-user__field\">\n <label htmlFor={fieldId} className=\"pcw-ask-user__label\">\n {question.header && <span className=\"pcw-ask-user__header\">{question.header}</span>}\n {question.question}\n </label>\n <textarea\n id={fieldId}\n className=\"pcw-ask-user__textarea\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={question.placeholder ?? ''}\n disabled={disabled}\n rows={3}\n />\n </div>\n );\n\n case 'yesno':\n return (\n <div className=\"pcw-ask-user__field\">\n <span className=\"pcw-ask-user__label\">\n {question.header && <span className=\"pcw-ask-user__header\">{question.header}</span>}\n {question.question}\n </span>\n <div className=\"pcw-ask-user__yesno\">\n <button\n type=\"button\"\n className={`pcw-ask-user__yesno-btn ${value === 'yes' ? 'pcw-ask-user__yesno-btn--active' : ''}`}\n onClick={() => onChange('yes')}\n disabled={disabled}\n >\n Yes\n </button>\n <button\n type=\"button\"\n className={`pcw-ask-user__yesno-btn ${value === 'no' ? 'pcw-ask-user__yesno-btn--active' : ''}`}\n onClick={() => onChange('no')}\n disabled={disabled}\n >\n No\n </button>\n </div>\n </div>\n );\n\n case 'choice': {\n const options = question.options ?? [];\n if (question.multiSelect) {\n const selected = value ? value.split(',').filter(Boolean) : [];\n const toggle = (label: string) => {\n const next = selected.includes(label)\n ? selected.filter((s) => s !== label)\n : [...selected, label];\n onChange(next.join(','));\n };\n return (\n <div className=\"pcw-ask-user__field\">\n <span className=\"pcw-ask-user__label\">\n {question.header && <span className=\"pcw-ask-user__header\">{question.header}</span>}\n {question.question}\n </span>\n <div className=\"pcw-ask-user__choices\">\n {options.map((opt) => (\n <label key={opt.label} className=\"pcw-ask-user__choice\">\n <input\n type=\"checkbox\"\n checked={selected.includes(opt.label)}\n onChange={() => toggle(opt.label)}\n disabled={disabled}\n />\n <span className=\"pcw-ask-user__choice-label\">{opt.label}</span>\n {opt.description && (\n <span className=\"pcw-ask-user__choice-desc\">{opt.description}</span>\n )}\n </label>\n ))}\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"pcw-ask-user__field\">\n <span className=\"pcw-ask-user__label\">\n {question.header && <span className=\"pcw-ask-user__header\">{question.header}</span>}\n {question.question}\n </span>\n <div className=\"pcw-ask-user__choices\">\n {options.map((opt) => (\n <label key={opt.label} className=\"pcw-ask-user__choice\">\n <input\n type=\"radio\"\n name={fieldId}\n checked={value === opt.label}\n onChange={() => onChange(opt.label)}\n disabled={disabled}\n />\n <span className=\"pcw-ask-user__choice-label\">{opt.label}</span>\n {opt.description && (\n <span className=\"pcw-ask-user__choice-desc\">{opt.description}</span>\n )}\n </label>\n ))}\n </div>\n </div>\n );\n }\n\n default:\n return null;\n }\n}\n\nexport function AskUserCard({ block, onSubmit }: AskUserCardProps) {\n const [answers, setAnswers] = useState<Record<string, string>>({});\n const [submitting, setSubmitting] = useState(false);\n const isSubmitted = block.status === 'submitted';\n const disabled = isSubmitted || submitting;\n\n const handleSubmit = () => {\n setSubmitting(true);\n onSubmit(block.askId, answers);\n };\n\n // Show read-only summary after submission\n if (isSubmitted && block.answers) {\n return (\n <div className=\"pcw-ask-user pcw-ask-user--submitted\">\n {block.questions.map((q, i) => (\n <div key={`${q.header}-${String(i)}`} className=\"pcw-ask-user__summary\">\n <span className=\"pcw-ask-user__summary-q\">{q.question}</span>\n <span className=\"pcw-ask-user__summary-a\">{block.answers?.[String(i)] ?? ''}</span>\n </div>\n ))}\n </div>\n );\n }\n\n return (\n <div className=\"pcw-ask-user\">\n {block.questions.map((q, i) => (\n <QuestionField\n key={`${q.header}-${String(i)}`}\n question={q}\n index={i}\n value={answers[String(i)] ?? ''}\n onChange={(v) => setAnswers((prev) => ({ ...prev, [String(i)]: v }))}\n disabled={disabled}\n />\n ))}\n <button\n type=\"button\"\n className=\"pcw-ask-user__submit\"\n onClick={handleSubmit}\n disabled={disabled}\n >\n {submitting ? 'Submitting...' : 'Submit'}\n </button>\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useCallback } from 'react';\nimport type { WidgetProps } from './WidgetRenderer';\nimport type { InteractionEvent } from '../../events/types';\n\ninterface EntityCardData {\n mac: string;\n manufacturer: string;\n protocols: string[];\n zone: string;\n zone_name?: string;\n suspicion_score: number;\n score_factors?: Record<string, number>;\n tag_status: string;\n dwell_time_minutes?: number;\n signal_strength_dbm?: number;\n first_seen?: string;\n last_seen?: string;\n}\n\nexport function EntityCard({ data, sendMessage, onInteraction }: WidgetProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- widget data from LLM\n const d = data as unknown as EntityCardData;\n const scorePercent = Math.min(100, Math.max(0, d.suspicion_score));\n\n const handleMouseEnter = useCallback(() => {\n const event: InteractionEvent = {\n type: 'entity_hovered',\n entity: { entityType: 'device', entityId: d.mac, source: 'widget:entity-card' },\n timestamp: new Date().toISOString(),\n };\n onInteraction?.(event);\n }, [d.mac, onInteraction]);\n\n const handleMouseLeave = useCallback(() => {\n const event: InteractionEvent = {\n type: 'entity_unhovered',\n entity: { entityType: 'device', entityId: d.mac, source: 'widget:entity-card' },\n timestamp: new Date().toISOString(),\n };\n onInteraction?.(event);\n }, [d.mac, onInteraction]);\n\n const handleClick = useCallback(() => {\n const event: InteractionEvent = {\n type: 'entity_clicked',\n entity: { entityType: 'device', entityId: d.mac, source: 'widget:entity-card' },\n timestamp: new Date().toISOString(),\n };\n onInteraction?.(event);\n }, [d.mac, onInteraction]);\n\n return (\n <div\n className=\"pcw-widget-card pcw-entity-card\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onClick={handleClick}\n data-testid=\"entity-card\"\n >\n <div className=\"pcw-entity-card__header\">\n <span className=\"pcw-entity-card__mac\">{d.mac}</span>\n <span className=\"pcw-entity-card__mfr\">{d.manufacturer}</span>\n </div>\n {Array.isArray(d.protocols) && d.protocols.length > 0 && (\n <div className=\"pcw-entity-card__protocols\">\n {d.protocols.map((p) => (\n <span key={p} className=\"pcw-entity-card__protocol-badge\">{p}</span>\n ))}\n </div>\n )}\n <div className=\"pcw-entity-card__zone\">\n Zone {d.zone}{d.zone_name ? ` (${d.zone_name})` : ''}\n </div>\n <div className=\"pcw-score-bar\">\n <div className=\"pcw-score-bar__label\">\n Score: {d.suspicion_score}\n </div>\n <div className=\"pcw-score-bar__track\">\n <div\n className=\"pcw-score-bar__fill\"\n style={{ width: `${String(scorePercent)}%` }}\n />\n </div>\n </div>\n {d.score_factors && Object.keys(d.score_factors).length > 0 && (\n <div className=\"pcw-entity-card__factors\">\n {Object.entries(d.score_factors).map(([key, val]) => (\n <div key={key} className=\"pcw-entity-card__factor\">\n <span>{key.replace(/_/g, ' ')}</span>\n <span>+{val}</span>\n </div>\n ))}\n </div>\n )}\n <div className=\"pcw-entity-card__meta\">\n <span>Tag: {d.tag_status}</span>\n {d.dwell_time_minutes != null && <span>Dwell: {d.dwell_time_minutes}min</span>}\n </div>\n <div className=\"pcw-entity-card__actions\">\n <button\n type=\"button\"\n className=\"pcw-entity-card__btn\"\n onClick={() => sendMessage(`Investigate device ${d.mac} in Zone ${d.zone}`)}\n >\n Investigate\n </button>\n <button\n type=\"button\"\n className=\"pcw-entity-card__btn pcw-entity-card__btn--secondary\"\n onClick={() => sendMessage(`Tag device ${d.mac} as suspicious`)}\n >\n Tag\n </button>\n </div>\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useState } from 'react';\nimport type { WidgetProps } from './WidgetRenderer';\n\ninterface EntityEntry {\n mac: string;\n manufacturer: string;\n protocols: string[];\n zone: string;\n suspicion_score: number;\n tag_status: string;\n}\n\ninterface EntityListData {\n devices: EntityEntry[];\n title?: string;\n sort?: string;\n max_display?: number;\n}\n\nexport function EntityList({ data, sendMessage }: WidgetProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- widget data from LLM\n const d = data as unknown as EntityListData;\n const [expanded, setExpanded] = useState<string | null>(null);\n const [sortKey, setSortKey] = useState(d.sort ?? 'suspicion_score');\n\n const sorted = [...d.devices].sort((a, b) => {\n if (sortKey === 'suspicion_score') return b.suspicion_score - a.suspicion_score;\n if (sortKey === 'mac') return a.mac.localeCompare(b.mac);\n if (sortKey === 'zone') return a.zone.localeCompare(b.zone);\n return 0;\n });\n\n const displayCount = d.max_display ?? sorted.length;\n const visible = sorted.slice(0, displayCount);\n\n return (\n <div className=\"pcw-widget-card pcw-entity-list\">\n {d.title && <div className=\"pcw-entity-list__title\">{d.title}</div>}\n <div className=\"pcw-entity-list__sort\">\n Sort:\n {['suspicion_score', 'mac', 'zone'].map((key) => (\n <button\n key={key}\n type=\"button\"\n className={`pcw-entity-list__sort-btn ${sortKey === key ? 'pcw-entity-list__sort-btn--active' : ''}`}\n onClick={() => setSortKey(key)}\n >\n {key.replace(/_/g, ' ')}\n </button>\n ))}\n </div>\n <table className=\"pcw-data-table__table\">\n <thead>\n <tr>\n <th>MAC</th>\n <th>Mfr</th>\n <th>Zone</th>\n <th>Score</th>\n <th>Tag</th>\n </tr>\n </thead>\n <tbody>\n {visible.map((device) => (\n <tr\n key={device.mac}\n className={`pcw-entity-list__row ${expanded === device.mac ? 'pcw-entity-list__row--expanded' : ''}`}\n onClick={() => setExpanded(expanded === device.mac ? null : device.mac)}\n >\n <td className=\"pcw-entity-list__mac\">{device.mac}</td>\n <td>{device.manufacturer}</td>\n <td>{device.zone}</td>\n <td>{device.suspicion_score}</td>\n <td>{device.tag_status}</td>\n </tr>\n ))}\n </tbody>\n </table>\n {expanded && (\n <div className=\"pcw-entity-list__detail\">\n <button\n type=\"button\"\n className=\"pcw-entity-card__btn\"\n onClick={() => sendMessage(`Tell me more about device ${expanded}`)}\n >\n Investigate {expanded}\n </button>\n </div>\n )}\n {sorted.length > displayCount && (\n <div className=\"pcw-entity-list__more\">\n +{sorted.length - displayCount} more devices\n </div>\n )}\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useCallback } from 'react';\nimport type { WidgetProps } from './WidgetRenderer';\nimport type { InteractionEvent } from '../../events/types';\n\ninterface ScopeMapData {\n highlight_zones?: string[];\n highlight_devices?: string[];\n label?: string;\n show_all_devices?: boolean;\n}\n\nconst ZONE_POSITIONS: Record<string, { x: number; y: number; w: number; h: number }> = {\n A: { x: 10, y: 10, w: 80, h: 60 },\n B: { x: 100, y: 10, w: 80, h: 60 },\n C: { x: 190, y: 10, w: 80, h: 60 },\n D: { x: 10, y: 80, w: 125, h: 60 },\n E: { x: 145, y: 80, w: 125, h: 60 },\n};\n\nconst ZONE_LABELS: Record<string, string> = {\n A: 'Lobby',\n B: 'Offices',\n C: 'Server Room',\n D: 'Warehouse',\n E: 'Parking',\n};\n\nexport function ScopeMap({ data, onInteraction }: WidgetProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- widget data from LLM\n const d = data as unknown as ScopeMapData;\n const highlighted = new Set(d.highlight_zones ?? []);\n\n const emitZoneInteraction = useCallback(\n (type: 'entity_hovered' | 'entity_unhovered' | 'entity_clicked', zoneId: string) => {\n const event: InteractionEvent = {\n type,\n entity: { entityType: 'zone', entityId: zoneId, source: 'widget:scope-map' },\n timestamp: new Date().toISOString(),\n };\n onInteraction?.(event);\n },\n [onInteraction],\n );\n\n const emitDeviceInteraction = useCallback(\n (type: 'entity_hovered' | 'entity_unhovered' | 'entity_clicked', mac: string) => {\n const event: InteractionEvent = {\n type,\n entity: { entityType: 'device', entityId: mac, source: 'widget:scope-map' },\n timestamp: new Date().toISOString(),\n };\n onInteraction?.(event);\n },\n [onInteraction],\n );\n\n return (\n <div className=\"pcw-widget-card pcw-scope-map\">\n {d.label && <div className=\"pcw-scope-map__label\">{d.label}</div>}\n <svg viewBox=\"0 0 280 150\" className=\"pcw-scope-map__svg\">\n {Object.entries(ZONE_POSITIONS).map(([zoneId, pos]) => (\n <g key={zoneId}>\n <rect\n x={pos.x}\n y={pos.y}\n width={pos.w}\n height={pos.h}\n rx={4}\n className={highlighted.has(zoneId)\n ? 'pcw-scope-map__zone pcw-scope-map__zone--highlight'\n : 'pcw-scope-map__zone'}\n data-testid={`zone-${zoneId}`}\n onMouseEnter={() => emitZoneInteraction('entity_hovered', zoneId)}\n onMouseLeave={() => emitZoneInteraction('entity_unhovered', zoneId)}\n onClick={() => emitZoneInteraction('entity_clicked', zoneId)}\n style={{ cursor: 'pointer' }}\n />\n <text\n x={pos.x + pos.w / 2}\n y={pos.y + pos.h / 2 - 6}\n textAnchor=\"middle\"\n className=\"pcw-scope-map__zone-label\"\n style={{ pointerEvents: 'none' }}\n >\n Zone {zoneId}\n </text>\n <text\n x={pos.x + pos.w / 2}\n y={pos.y + pos.h / 2 + 8}\n textAnchor=\"middle\"\n className=\"pcw-scope-map__zone-name\"\n style={{ pointerEvents: 'none' }}\n >\n {ZONE_LABELS[zoneId] ?? ''}\n </text>\n </g>\n ))}\n </svg>\n {d.highlight_devices && d.highlight_devices.length > 0 && (\n <div className=\"pcw-scope-map__devices\">\n {d.highlight_devices.map((mac) => (\n <span\n key={mac}\n className=\"pcw-scope-map__device-badge\"\n data-testid={`device-badge-${mac}`}\n onMouseEnter={() => emitDeviceInteraction('entity_hovered', mac)}\n onMouseLeave={() => emitDeviceInteraction('entity_unhovered', mac)}\n onClick={() => emitDeviceInteraction('entity_clicked', mac)}\n style={{ cursor: 'pointer' }}\n >\n {mac}\n </span>\n ))}\n </div>\n )}\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport type { WidgetProps } from './WidgetRenderer';\n\ninterface AlertCardData {\n id: string;\n type: string;\n zone: string;\n severity: 'low' | 'medium' | 'high' | 'critical';\n description: string;\n involved_devices: string[];\n protocols_involved?: string[];\n detected_at: string;\n}\n\nconst SEVERITY_CLASSES: Record<string, string> = {\n low: 'pcw-alert-card__severity--low',\n medium: 'pcw-alert-card__severity--medium',\n high: 'pcw-alert-card__severity--high',\n critical: 'pcw-alert-card__severity--critical',\n};\n\nexport function AlertCard({ data, sendMessage }: WidgetProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- widget data from LLM\n const d = data as unknown as AlertCardData;\n\n return (\n <div className=\"pcw-widget-card pcw-alert-card\">\n <div className=\"pcw-alert-card__header\">\n <span className={`pcw-alert-card__severity ${SEVERITY_CLASSES[d.severity] ?? ''}`}>\n {d.severity.toUpperCase()}\n </span>\n <span className=\"pcw-alert-card__type\">{d.type.replace(/_/g, ' ')}</span>\n <span className=\"pcw-alert-card__zone\">Zone {d.zone}</span>\n </div>\n <p className=\"pcw-alert-card__description\">{d.description}</p>\n <div className=\"pcw-alert-card__devices\">\n {d.involved_devices.map((mac) => (\n <button\n key={mac}\n type=\"button\"\n className=\"pcw-alert-card__device-link\"\n onClick={() => sendMessage(`Tell me about device ${mac}`)}\n >\n {mac}\n </button>\n ))}\n </div>\n {d.protocols_involved && d.protocols_involved.length > 0 && (\n <div className=\"pcw-alert-card__protocols\">\n {d.protocols_involved.map((p) => (\n <span key={p} className=\"pcw-entity-card__protocol-badge\">{p}</span>\n ))}\n </div>\n )}\n <div className=\"pcw-alert-card__time\">\n {new Date(d.detected_at).toLocaleString()}\n </div>\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport type { WidgetProps } from './WidgetRenderer';\n\ninterface TimelineEvent {\n timestamp: string;\n label: string;\n type?: string;\n severity?: string;\n device?: string;\n}\n\ninterface TimelineData {\n events: TimelineEvent[];\n label?: string;\n}\n\nconst EVENT_COLORS: Record<string, string> = {\n device_seen: '#3b82f6',\n zone_change: '#8b5cf6',\n alert: '#ef4444',\n tag_change: '#10b981',\n custom: '#6b7280',\n};\n\nexport function Timeline({ data, sendMessage }: WidgetProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- widget data from LLM\n const d = data as unknown as TimelineData;\n\n return (\n <div className=\"pcw-widget-card pcw-timeline\">\n {d.label && <div className=\"pcw-timeline__label\">{d.label}</div>}\n <div className=\"pcw-timeline__events\">\n {d.events.map((event, i) => {\n const color = EVENT_COLORS[event.type ?? 'custom'] ?? EVENT_COLORS['custom'];\n return (\n <div key={`${event.timestamp}-${String(i)}`} className=\"pcw-timeline__event\">\n <div className=\"pcw-timeline__marker\" style={{ backgroundColor: color }} />\n <div className=\"pcw-timeline__content\">\n <span className=\"pcw-timeline__time\">\n {new Date(event.timestamp).toLocaleTimeString(undefined, {\n hour: '2-digit',\n minute: '2-digit',\n })}\n </span>\n <span className=\"pcw-timeline__event-label\">{event.label}</span>\n {event.device && (\n <button\n type=\"button\"\n className=\"pcw-alert-card__device-link\"\n onClick={() => sendMessage(`Tell me about device ${event.device}`)}\n >\n {event.device}\n </button>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport type { WidgetProps } from './WidgetRenderer';\n\ninterface ComparisonItem {\n mac: string;\n manufacturer: string;\n protocols: string[];\n zone: string;\n suspicion_score: number;\n tag_status: string;\n}\n\ninterface ComparisonData {\n items: ComparisonItem[];\n title?: string;\n highlight_differences?: boolean;\n}\n\nexport function Comparison({ data, sendMessage }: WidgetProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- widget data from LLM\n const d = data as unknown as ComparisonData;\n\n return (\n <div className=\"pcw-widget-card pcw-comparison\">\n {d.title && <div className=\"pcw-comparison__title\">{d.title}</div>}\n <div className=\"pcw-comparison__grid\">\n {d.items.map((item) => (\n <div key={item.mac} className=\"pcw-comparison__item\">\n <div className=\"pcw-comparison__mac\">{item.mac}</div>\n <div className=\"pcw-comparison__detail\">{item.manufacturer}</div>\n <div className=\"pcw-comparison__detail\">\n {item.protocols.join(', ')}\n </div>\n <div className=\"pcw-comparison__detail\">Zone {item.zone}</div>\n <div className=\"pcw-comparison__score\">Score: {item.suspicion_score}</div>\n <div className=\"pcw-comparison__detail\">Tag: {item.tag_status}</div>\n <button\n type=\"button\"\n className=\"pcw-entity-card__btn\"\n onClick={() => sendMessage(`Investigate device ${item.mac}`)}\n >\n Investigate\n </button>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useState, useCallback } from 'react';\nimport type { WidgetProps } from './WidgetRenderer';\n\ninterface DataTableColumn {\n key: string;\n label: string;\n}\n\ninterface DataTableData {\n columns: DataTableColumn[];\n rows: Array<Record<string, unknown>>;\n title?: string;\n sortable?: boolean;\n}\n\nexport function DataTable({ data }: WidgetProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- widget data from LLM\n const d = data as unknown as Partial<DataTableData>;\n const columns = d.columns ?? [];\n const rows = d.rows ?? [];\n const [sortCol, setSortCol] = useState<string | null>(null);\n const [sortDir, setSortDir] = useState<'asc' | 'desc'>('asc');\n\n const handleSort = useCallback(\n (key: string) => {\n if (!d.sortable) return;\n if (sortCol === key) {\n setSortDir((prev) => (prev === 'asc' ? 'desc' : 'asc'));\n } else {\n setSortCol(key);\n setSortDir('asc');\n }\n },\n [d.sortable, sortCol],\n );\n\n const sortedRows = sortCol\n ? [...rows].sort((a, b) => {\n const aVal = a[sortCol];\n const bVal = b[sortCol];\n if (typeof aVal === 'number' && typeof bVal === 'number') {\n return sortDir === 'asc' ? aVal - bVal : bVal - aVal;\n }\n const aStr = String(aVal ?? '');\n const bStr = String(bVal ?? '');\n return sortDir === 'asc' ? aStr.localeCompare(bStr) : bStr.localeCompare(aStr);\n })\n : rows;\n\n return (\n <div className=\"pcw-widget-card pcw-data-table\">\n {d.title && <div className=\"pcw-data-table__title\">{d.title}</div>}\n <div className=\"pcw-data-table__scroll\">\n <table className=\"pcw-data-table__table\">\n <thead>\n <tr>\n {columns.map((col) => (\n <th\n key={col.key}\n onClick={() => handleSort(col.key)}\n className={d.sortable ? 'pcw-data-table__sortable' : ''}\n >\n {col.label}\n {sortCol === col.key && (sortDir === 'asc' ? ' ▲' : ' ▼')}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {sortedRows.map((row, i) => (\n <tr key={String(i)}>\n {columns.map((col) => (\n <td key={col.key}>{String(row[col.key] ?? '')}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport type { WidgetProps } from './WidgetRenderer';\n\ninterface ScoreBreakdownData {\n label?: string;\n total_score: number;\n max_score?: number;\n factors: Array<{\n name: string;\n value: number;\n max?: number;\n description?: string;\n }>;\n}\n\nexport function ScoreBreakdown({ data }: WidgetProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- widget data from LLM\n const d = data as unknown as ScoreBreakdownData;\n const maxScore = d.max_score ?? 100;\n const scorePercent = Math.min(100, Math.max(0, (d.total_score / maxScore) * 100));\n\n return (\n <div className=\"pcw-widget-card pcw-score-breakdown\">\n {d.label && <div className=\"pcw-score-breakdown__label\">{d.label}</div>}\n <div className=\"pcw-score-bar\">\n <div className=\"pcw-score-bar__label\">\n Score: {d.total_score}{maxScore !== 100 ? ` / ${maxScore}` : ''}\n </div>\n <div className=\"pcw-score-bar__track\">\n <div\n className=\"pcw-score-bar__fill\"\n style={{ width: `${String(scorePercent)}%` }}\n />\n </div>\n </div>\n <div className=\"pcw-score-breakdown__factors\">\n {d.factors.map((factor) => {\n const factorMax = factor.max ?? maxScore;\n const factorPercent = Math.min(100, Math.max(0, (factor.value / factorMax) * 100));\n return (\n <div key={factor.name} className=\"pcw-score-breakdown__factor\">\n <div className=\"pcw-score-breakdown__factor-header\">\n <span className=\"pcw-score-breakdown__factor-name\">\n {factor.name.replace(/_/g, ' ')}\n </span>\n <span className=\"pcw-score-breakdown__factor-value\">+{factor.value}</span>\n </div>\n <div className=\"pcw-score-breakdown__factor-bar\">\n <div\n className=\"pcw-score-breakdown__factor-fill\"\n style={{ width: `${String(factorPercent)}%` }}\n />\n </div>\n {factor.description && (\n <div className=\"pcw-score-breakdown__factor-desc\">{factor.description}</div>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport type { WidgetProps } from './WidgetRenderer';\n\ninterface StatusItem {\n id: string;\n label: string;\n severity: 'low' | 'medium' | 'high' | 'critical';\n status: string;\n description?: string;\n updated_at?: string;\n}\n\ninterface StatusBoardData {\n title?: string;\n items: StatusItem[];\n}\n\nconst SEVERITY_ORDER: Record<string, number> = {\n critical: 0,\n high: 1,\n medium: 2,\n low: 3,\n};\n\nexport function StatusBoard({ data, sendMessage }: WidgetProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- widget data from LLM\n const d = data as unknown as StatusBoardData;\n\n const sorted = [...d.items].sort(\n (a, b) => (SEVERITY_ORDER[a.severity] ?? 4) - (SEVERITY_ORDER[b.severity] ?? 4),\n );\n\n return (\n <div className=\"pcw-widget-card pcw-status-board\">\n {d.title && <div className=\"pcw-status-board__title\">{d.title}</div>}\n <div className=\"pcw-status-board__items\">\n {sorted.map((item) => (\n <div\n key={item.id}\n className={`pcw-status-board__item pcw-status-board__item--${item.severity}`}\n onClick={() => sendMessage(`Tell me more about ${item.label}`)}\n style={{ cursor: 'pointer' }}\n >\n <div className=\"pcw-status-board__item-header\">\n <span className={`pcw-status-board__severity pcw-status-board__severity--${item.severity}`}>\n {item.severity.toUpperCase()}\n </span>\n <span className=\"pcw-status-board__item-label\">{item.label}</span>\n <span className=\"pcw-status-board__item-status\">{item.status}</span>\n </div>\n {item.description && (\n <div className=\"pcw-status-board__item-desc\">{item.description}</div>\n )}\n </div>\n ))}\n </div>\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useState, useCallback } from 'react';\nimport type { WidgetProps } from './WidgetRenderer';\n\ninterface CredentialField {\n name: string;\n label: string;\n type: 'text' | 'password';\n required?: boolean;\n}\n\ninterface CredentialInputData {\n connection_name: string;\n app_id: string;\n fields: CredentialField[];\n}\n\ntype SubmitStatus = 'idle' | 'submitting' | 'success' | 'error';\n\nexport function CredentialInput({ data, sendMessage }: WidgetProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- widget data from LLM\n const d = data as unknown as CredentialInputData;\n\n const [values, setValues] = useState<Record<string, string>>({});\n const [status, setStatus] = useState<SubmitStatus>('idle');\n const [errorMessage, setErrorMessage] = useState('');\n\n const handleChange = useCallback((fieldName: string, value: string) => {\n setValues((prev) => ({ ...prev, [fieldName]: value }));\n }, []);\n\n const handleSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault();\n setStatus('submitting');\n setErrorMessage('');\n\n try {\n const origin = window.location.origin;\n const url = `${origin}/api/apps/${d.app_id}/secrets`;\n\n for (const field of d.fields) {\n const response = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n name: field.name,\n value: values[field.name] ?? '',\n connection_name: d.connection_name,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to save ${field.label}: ${String(response.status)}`);\n }\n }\n\n setStatus('success');\n // Clear values from memory after successful submission\n setValues({});\n sendMessage(`Credentials for ${d.connection_name} have been saved.`);\n } catch (err) {\n setStatus('error');\n setErrorMessage(err instanceof Error ? err.message : 'Failed to save credentials');\n }\n },\n [d.app_id, d.connection_name, d.fields, values, sendMessage],\n );\n\n if (status === 'success') {\n return (\n <div className=\"pcw-widget-card pcw-widget-card--credential-input\">\n <div className=\"pcw-credential-input__status pcw-credential-input__status--success\">\n Credentials for {d.connection_name} saved successfully.\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"pcw-widget-card pcw-widget-card--credential-input\">\n <div className=\"pcw-credential-input__title\">\n Configure {d.connection_name}\n </div>\n <form\n onSubmit={(e) => {\n void handleSubmit(e);\n }}\n >\n {d.fields.map((field) => (\n <div key={field.name} className=\"pcw-credential-input__field\">\n <label className=\"pcw-credential-input__label\" htmlFor={`pcw-cred-${field.name}`}>\n {field.label}\n {field.required && <span aria-hidden=\"true\"> *</span>}\n </label>\n <input\n id={`pcw-cred-${field.name}`}\n className=\"pcw-credential-input__input\"\n type={field.type}\n required={field.required}\n autoComplete={field.type === 'password' ? 'new-password' : 'off'}\n value={values[field.name] ?? ''}\n disabled={status === 'submitting'}\n onChange={(e) => handleChange(field.name, e.target.value)}\n />\n </div>\n ))}\n {status === 'error' && (\n <div className=\"pcw-credential-input__status pcw-credential-input__status--error\">\n {errorMessage}\n </div>\n )}\n <button\n type=\"submit\"\n className=\"pcw-credential-input__submit\"\n disabled={status === 'submitting'}\n >\n {status === 'submitting' ? 'Saving...' : 'Save Credentials'}\n </button>\n </form>\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useState, useCallback } from 'react';\nimport type { WidgetProps } from './WidgetRenderer';\n\ninterface DocumentPreviewData {\n preview_id: string;\n resource_type: 'kb_document' | 'tool' | 'skill' | 'subagent' | 'automation';\n title: string;\n body: string;\n category?: string;\n action: 'create' | 'update';\n proposal_id?: string;\n}\n\nconst ACTION_LABELS: Record<string, string> = {\n create: 'New',\n update: 'Update',\n};\n\nexport function DocumentPreview({ data, sendMessage }: WidgetProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- widget data from LLM\n const d = data as unknown as DocumentPreviewData;\n\n const [editing, setEditing] = useState(false);\n const [editedBody, setEditedBody] = useState(d.body);\n const [approved, setApproved] = useState(false);\n\n const handleApprove = useCallback(() => {\n setApproved(true);\n sendMessage(`I've approved the ${d.resource_type} '${d.preview_id}'.`);\n }, [d.resource_type, d.preview_id, sendMessage]);\n\n const handleEditFirst = useCallback(() => {\n setEditing(true);\n }, []);\n\n const handleApproveWithEdits = useCallback(() => {\n setApproved(true);\n setEditing(false);\n sendMessage(\n `I've approved the ${d.resource_type} '${d.preview_id}' with edits:\\n\\n${editedBody}`,\n );\n }, [d.resource_type, d.preview_id, editedBody, sendMessage]);\n\n if (approved) {\n return (\n <div className=\"pcw-widget-card pcw-widget-card--document-preview\">\n <div className=\"pcw-document-preview__header\">\n <span className=\"pcw-document-preview__title\">{d.title}</span>\n <span className=\"pcw-document-preview__badge pcw-document-preview__badge--approved\">\n Approved\n </span>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"pcw-widget-card pcw-widget-card--document-preview\">\n <div className=\"pcw-document-preview__header\">\n <span className=\"pcw-document-preview__title\">{d.title}</span>\n {d.category && (\n <span className=\"pcw-document-preview__badge pcw-document-preview__badge--category\">\n {d.category}\n </span>\n )}\n <span className=\"pcw-document-preview__badge pcw-document-preview__badge--action\">\n {ACTION_LABELS[d.action] ?? d.action}\n </span>\n </div>\n {editing ? (\n <div className=\"pcw-document-preview__editor-container\">\n <textarea\n className=\"pcw-document-preview__editor\"\n value={editedBody}\n onChange={(e) => setEditedBody(e.target.value)}\n rows={12}\n />\n <div className=\"pcw-document-preview__actions\">\n <button\n type=\"button\"\n className=\"pcw-document-preview__btn pcw-document-preview__btn--primary\"\n onClick={handleApproveWithEdits}\n >\n Approve with edits\n </button>\n <button\n type=\"button\"\n className=\"pcw-document-preview__btn pcw-document-preview__btn--secondary\"\n onClick={() => {\n setEditing(false);\n setEditedBody(d.body);\n }}\n >\n Cancel\n </button>\n </div>\n </div>\n ) : (\n <>\n <pre className=\"pcw-document-preview__body\">\n <code>{d.body}</code>\n </pre>\n <div className=\"pcw-document-preview__actions\">\n <button\n type=\"button\"\n className=\"pcw-document-preview__btn pcw-document-preview__btn--primary\"\n onClick={handleApprove}\n >\n Approve\n </button>\n <button\n type=\"button\"\n className=\"pcw-document-preview__btn pcw-document-preview__btn--secondary\"\n onClick={handleEditFirst}\n >\n Edit First\n </button>\n </div>\n </>\n )}\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport type { WidgetProps } from './WidgetRenderer';\n\ninterface InfoCardData {\n title: string;\n subtitle?: string;\n description?: string;\n fields: Array<{ label: string; value: string | number | boolean }>;\n tags?: string[];\n status?: 'ok' | 'warning' | 'critical' | 'info';\n actions?: Array<{ label: string; message: string }>;\n}\n\nexport function InfoCard({ data, sendMessage }: WidgetProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- widget data from LLM\n const d = data as unknown as Partial<InfoCardData>;\n const title = d.title ?? 'Untitled';\n const fields = Array.isArray(d.fields) ? d.fields : [];\n const tags = Array.isArray(d.tags) ? d.tags : [];\n const actions = Array.isArray(d.actions) ? d.actions : [];\n\n return (\n <div className=\"pcw-widget-card pcw-info-card\" data-testid=\"info-card\">\n <div className=\"pcw-info-card__header\">\n <span className=\"pcw-info-card__title\">{title}</span>\n {d.status && (\n <span className={`pcw-info-card__status pcw-info-card__status--${d.status}`}>\n {d.status}\n </span>\n )}\n </div>\n {d.subtitle && (\n <div className=\"pcw-info-card__subtitle\">{d.subtitle}</div>\n )}\n {d.description && (\n <p className=\"pcw-info-card__description\">{d.description}</p>\n )}\n {fields.length > 0 && (\n <div className=\"pcw-info-card__fields\">\n {fields.map((f) => (\n <div key={f.label} className=\"pcw-info-card__field\">\n <span className=\"pcw-info-card__field-label\">{f.label}</span>\n <span className=\"pcw-info-card__field-value\">{String(f.value)}</span>\n </div>\n ))}\n </div>\n )}\n {tags.length > 0 && (\n <div className=\"pcw-info-card__tags\">\n {tags.map((t) => (\n <span key={t} className=\"pcw-info-card__tag\">{t}</span>\n ))}\n </div>\n )}\n {actions.length > 0 && (\n <div className=\"pcw-info-card__actions\">\n {actions.map((a) => (\n <button\n key={a.label}\n type=\"button\"\n className=\"pcw-info-card__btn\"\n onClick={() => sendMessage(a.message)}\n >\n {a.label}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport type { WidgetProps } from './WidgetRenderer';\n\ninterface MetricData {\n label: string;\n value: number | string;\n unit?: string;\n trend?: 'up' | 'down' | 'flat';\n description?: string;\n previous_value?: number | string;\n}\n\nconst TREND_ARROWS: Record<string, string> = {\n up: '\\u2191',\n down: '\\u2193',\n flat: '\\u2192',\n};\n\nexport function Metric({ data }: WidgetProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- widget data from LLM\n const d = data as unknown as Partial<MetricData>;\n const label = d.label ?? 'Metric';\n const value = d.value ?? '—';\n\n return (\n <div className=\"pcw-widget-card pcw-metric\" data-testid=\"metric\">\n <div className=\"pcw-metric__label\">{label}</div>\n <div className=\"pcw-metric__value-row\">\n <span className=\"pcw-metric__value\">{String(value)}</span>\n {d.unit && <span className=\"pcw-metric__unit\">{d.unit}</span>}\n {d.trend && (\n <span className={`pcw-metric__trend pcw-metric__trend--${d.trend}`}>\n {TREND_ARROWS[d.trend] ?? ''}\n </span>\n )}\n </div>\n {d.description && (\n <div className=\"pcw-metric__description\">{d.description}</div>\n )}\n {d.previous_value != null && (\n <div className=\"pcw-metric__previous\">\n Previous: {String(d.previous_value)}{d.unit ? ` ${d.unit}` : ''}\n </div>\n )}\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { Component, type ComponentType, type ReactNode } from 'react';\nimport type { InteractionEvent } from '../../events/types';\nimport { EntityCard } from './EntityCard';\nimport { EntityList } from './EntityList';\nimport { ScopeMap } from './ScopeMap';\nimport { AlertCard } from './AlertCard';\nimport { Timeline } from './Timeline';\nimport { Comparison } from './Comparison';\nimport { DataTable } from './DataTable';\nimport { ScoreBreakdown } from './ScoreBreakdown';\nimport { StatusBoard } from './StatusBoard';\nimport { CredentialInput } from './CredentialInput';\nimport { DocumentPreview } from './DocumentPreview';\nimport { InfoCard } from './InfoCard';\nimport { Metric } from './Metric';\n\n/**\n * Props that every widget component receives.\n */\nexport interface WidgetProps<T = Record<string, unknown>> {\n data: T;\n sendMessage: (text: string) => void;\n onInteraction?: (event: InteractionEvent) => void;\n}\n\n/**\n * Map of widget type string → component.\n */\nexport type WidgetRegistry = Record<string, ComponentType<WidgetProps>>;\n\nconst platformWidgets: WidgetRegistry = {\n 'entity-card': EntityCard,\n 'entity-list': EntityList,\n 'scope-map': ScopeMap,\n 'alert-card': AlertCard,\n 'timeline': Timeline,\n 'comparison': Comparison,\n 'data-table': DataTable,\n 'score-breakdown': ScoreBreakdown,\n 'status-board': StatusBoard,\n 'credential-input': CredentialInput,\n 'document-preview': DocumentPreview,\n 'info-card': InfoCard,\n 'metric': Metric,\n};\n\n/**\n * Error boundary that catches widget render errors and falls back to JSON.\n */\nclass WidgetErrorBoundary extends Component<\n { widgetType: string; data: Record<string, unknown>; children: ReactNode },\n { error: Error | null }\n> {\n constructor(props: { widgetType: string; data: Record<string, unknown>; children: ReactNode }) {\n super(props);\n this.state = { error: null };\n }\n\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n\n render() {\n if (this.state.error) {\n return (\n <div className=\"pcw-widget-card pcw-widget-card--generic\">\n <div className=\"pcw-widget-card__header\">\n <span className=\"pcw-widget-card__type\">{this.props.widgetType}</span>\n <span style={{ color: 'var(--pcw-error, #ef4444)', fontSize: '12px', marginLeft: '8px' }}>\n render error\n </span>\n </div>\n <pre className=\"pcw-widget-card__json\">\n {JSON.stringify(this.props.data, null, 2)}\n </pre>\n </div>\n );\n }\n return this.props.children;\n }\n}\n\ninterface WidgetRendererProps {\n widgetType: string;\n data: Record<string, unknown>;\n sendMessage: (text: string) => void;\n customWidgets?: WidgetRegistry;\n onInteraction?: (event: InteractionEvent) => void;\n}\n\n/**\n * Renders a widget by looking up the type in custom widgets first,\n * then platform widgets, then falling back to a generic JSON display.\n */\nexport function WidgetRenderer({\n widgetType,\n data,\n sendMessage,\n customWidgets,\n onInteraction,\n}: WidgetRendererProps) {\n // Check custom widgets first, then platform widgets\n const WidgetComponent = customWidgets?.[widgetType] ?? platformWidgets[widgetType];\n\n if (WidgetComponent) {\n return (\n <WidgetErrorBoundary widgetType={widgetType} data={data}>\n <WidgetComponent data={data} sendMessage={sendMessage} onInteraction={onInteraction} />\n </WidgetErrorBoundary>\n );\n }\n\n // Fallback: render as formatted JSON\n return (\n <div className=\"pcw-widget-card pcw-widget-card--generic\">\n <div className=\"pcw-widget-card__header\">\n <span className=\"pcw-widget-card__type\">{widgetType}</span>\n </div>\n <pre className=\"pcw-widget-card__json\">\n {JSON.stringify(data, null, 2)}\n </pre>\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useEffect, useRef } from 'react';\nimport type { ChatMessage, AssistantTextMessage } from '../types';\nimport type { InteractionEvent } from '../events/types';\nimport { ToolCallCard } from './ToolCallCard';\nimport { KBProposalCard } from './KBProposalCard';\nimport { SkillPill } from './SkillPill';\nimport { FormattedText } from './FormattedText';\nimport { StreamingIndicator } from './StreamingIndicator';\nimport { AskUserCard } from './AskUserCard';\nimport { WidgetRenderer } from './widgets/WidgetRenderer';\nimport type { WidgetRegistry } from './widgets/WidgetRenderer';\n\ninterface MessageListProps {\n messages: ChatMessage[];\n isStreaming: boolean;\n sendMessage?: (text: string) => void;\n customWidgets?: WidgetRegistry;\n onInteraction?: (event: InteractionEvent) => void;\n onAskUserSubmit?: (askId: string, answers: Record<string, string>) => void;\n emptyStateText?: string;\n}\n\nfunction AssistantBubble({\n message,\n sendMessage,\n customWidgets,\n onInteraction,\n onAskUserSubmit,\n}: {\n message: AssistantTextMessage;\n sendMessage?: (text: string) => void;\n customWidgets?: WidgetRegistry;\n onInteraction?: (event: InteractionEvent) => void;\n onAskUserSubmit?: (askId: string, answers: Record<string, string>) => void;\n}) {\n const hasContentBlocks = message.contentBlocks && message.contentBlocks.length > 0;\n const hasExtras =\n message.toolCalls.length > 0 ||\n message.skillActivations.length > 0 ||\n message.kbProposals.length > 0;\n\n // If we have content blocks, render them in order for proper interleaving\n if (hasContentBlocks) {\n // Tool calls are already in contentBlocks — only render KB proposals separately\n const hasKBProposals = message.kbProposals.length > 0;\n return (\n <div className=\"pcw-bubble pcw-bubble--assistant\">\n {message.skillActivations.map((skill) => (\n <SkillPill key={skill} skill={skill} />\n ))}\n {message.contentBlocks.map((block, i) => {\n switch (block.type) {\n case 'text':\n return block.text.length > 0 ? (\n <FormattedText key={`text-${String(i)}`} text={block.text} className=\"pcw-bubble__text\" />\n ) : null;\n case 'widget':\n return (\n <WidgetRenderer\n key={`widget-${String(i)}`}\n widgetType={block.widgetType}\n data={block.data}\n sendMessage={sendMessage ?? (() => {})}\n customWidgets={customWidgets}\n onInteraction={onInteraction}\n />\n );\n case 'tool_calls':\n return (\n <div key={`tools-${String(i)}`} className=\"pcw-bubble__extras\">\n {block.calls.map((tc) => (\n <ToolCallCard key={tc.toolId} toolCall={tc} />\n ))}\n </div>\n );\n case 'ask_user':\n return (\n <AskUserCard\n key={`ask-${block.askId}`}\n block={block}\n onSubmit={onAskUserSubmit ?? (() => {})}\n />\n );\n default:\n return null;\n }\n })}\n {hasKBProposals && (\n <div className=\"pcw-bubble__extras\">\n {message.kbProposals.map((proposal, idx) => (\n <KBProposalCard key={`${proposal.title}-${String(idx)}`} proposal={proposal} />\n ))}\n </div>\n )}\n </div>\n );\n }\n\n // Fallback: legacy rendering without content blocks\n return (\n <div className=\"pcw-bubble pcw-bubble--assistant\">\n {message.skillActivations.map((skill) => (\n <SkillPill key={skill} skill={skill} />\n ))}\n {message.text.length > 0 && <FormattedText className=\"pcw-bubble__text\" text={message.text} />}\n {hasExtras && (\n <div className=\"pcw-bubble__extras\">\n {message.toolCalls.map((tc) => (\n <ToolCallCard key={tc.toolId} toolCall={tc} />\n ))}\n {message.kbProposals.map((proposal, idx) => (\n <KBProposalCard key={`${proposal.title}-${String(idx)}`} proposal={proposal} />\n ))}\n </div>\n )}\n </div>\n );\n}\n\nexport function MessageList({ messages, isStreaming, sendMessage, customWidgets, onInteraction, onAskUserSubmit, emptyStateText }: MessageListProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const shouldAutoScroll = useRef(true);\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n\n const handleScroll = () => {\n const threshold = 100;\n shouldAutoScroll.current =\n el.scrollHeight - el.scrollTop - el.clientHeight < threshold;\n };\n\n el.addEventListener('scroll', handleScroll);\n return () => el.removeEventListener('scroll', handleScroll);\n }, []);\n\n useEffect(() => {\n if (shouldAutoScroll.current && containerRef.current) {\n containerRef.current.scrollTop = containerRef.current.scrollHeight;\n }\n }, [messages, isStreaming]);\n\n if (messages.length === 0) {\n return (\n <div className=\"pcw-messages--empty\">\n <p>{emptyStateText ?? 'Send a message to start a conversation.'}</p>\n </div>\n );\n }\n\n return (\n <div ref={containerRef} className=\"pcw-messages\">\n {messages.map((msg) => {\n switch (msg.type) {\n case 'user':\n return (\n <div key={msg.id} className=\"pcw-bubble pcw-bubble--user\">\n <p className=\"pcw-bubble__text\">{msg.text}</p>\n </div>\n );\n case 'assistant_text':\n return (\n <AssistantBubble\n key={msg.id}\n message={msg}\n sendMessage={sendMessage}\n customWidgets={customWidgets}\n onInteraction={onInteraction}\n onAskUserSubmit={onAskUserSubmit}\n />\n );\n case 'error':\n return (\n <div key={msg.id} className=\"pcw-error\">\n {msg.message}\n </div>\n );\n default:\n return null;\n }\n })}\n {isStreaming && <StreamingIndicator />}\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useCallback, useRef, useState } from 'react';\nimport type { KeyboardEvent } from 'react';\n\ninterface InputBarProps {\n onSend: (text: string) => void;\n onStop?: () => void;\n disabled: boolean;\n isStreaming?: boolean;\n placeholder: string;\n}\n\nfunction SendIcon() {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\" />\n <polygon points=\"22 2 15 22 11 13 2 9 22 2\" />\n </svg>\n );\n}\n\nfunction StopIcon() {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\" />\n </svg>\n );\n}\n\nexport function InputBar({ onSend, onStop, disabled, isStreaming, placeholder }: InputBarProps) {\n const [value, setValue] = useState('');\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n const handleSend = useCallback(() => {\n const trimmed = value.trim();\n if (trimmed.length === 0) return;\n onSend(trimmed);\n setValue('');\n if (textareaRef.current) {\n textareaRef.current.style.height = 'auto';\n }\n }, [value, onSend]);\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSend();\n }\n },\n [handleSend],\n );\n\n const handleInput = useCallback(() => {\n const el = textareaRef.current;\n if (!el) return;\n el.style.height = 'auto';\n el.style.height = `${String(Math.min(el.scrollHeight, 120))}px`;\n }, []);\n\n return (\n <div className=\"pcw-input\">\n <textarea\n ref={textareaRef}\n className=\"pcw-input__textarea\"\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={handleKeyDown}\n onInput={handleInput}\n placeholder={placeholder}\n disabled={disabled && !isStreaming}\n rows={1}\n />\n {isStreaming ? (\n <button\n type=\"button\"\n className=\"pcw-input__send pcw-input__stop\"\n onClick={onStop}\n aria-label=\"Stop generating\"\n >\n <StopIcon />\n </button>\n ) : (\n <button\n type=\"button\"\n className=\"pcw-input__send\"\n onClick={handleSend}\n disabled={disabled || value.trim().length === 0}\n aria-label=\"Send message\"\n >\n <SendIcon />\n </button>\n )}\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useCallback, useState } from 'react';\n\nexport interface TagEditorProps {\n tags: string[];\n onSave: (tags: string[]) => void;\n}\n\nexport function TagEditor({ tags, onSave }: TagEditorProps) {\n const [isEditing, setIsEditing] = useState(false);\n const [inputValue, setInputValue] = useState('');\n\n const handleRemove = useCallback(\n (tag: string) => {\n onSave(tags.filter((t) => t !== tag));\n },\n [tags, onSave],\n );\n\n const handleAdd = useCallback(() => {\n const trimmed = inputValue.trim();\n if (trimmed && !tags.includes(trimmed)) {\n onSave([...tags, trimmed]);\n }\n setInputValue('');\n setIsEditing(false);\n }, [inputValue, tags, onSave]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleAdd();\n } else if (e.key === 'Escape') {\n setInputValue('');\n setIsEditing(false);\n }\n },\n [handleAdd],\n );\n\n return (\n <div className=\"pcw-tag-editor\">\n {tags.map((tag) => (\n <span key={tag} className=\"pcw-tag-badge\">\n {tag}\n <button\n type=\"button\"\n className=\"pcw-tag-remove\"\n onClick={() => handleRemove(tag)}\n aria-label={`Remove tag ${tag}`}\n >\n x\n </button>\n </span>\n ))}\n {isEditing ? (\n <input\n className=\"pcw-tag-input\"\n type=\"text\"\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onKeyDown={handleKeyDown}\n onBlur={handleAdd}\n placeholder=\"Add tag...\"\n autoFocus\n />\n ) : (\n <button\n type=\"button\"\n className=\"pcw-tag-add-btn\"\n onClick={() => setIsEditing(true)}\n aria-label=\"Add tag\"\n >\n +\n </button>\n )}\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useCallback, useState } from 'react';\nimport type { SessionHistoryItem } from '../client/chat-api';\nimport { TagEditor } from './TagEditor';\n\nexport interface SessionHistoryProps {\n sessions: SessionHistoryItem[];\n isLoading: boolean;\n allTags: string[];\n onSelectSession: (sessionId: string) => void;\n onNewChat: () => void;\n onClose: () => void;\n onUpdateTags: (sessionId: string, tags: string[]) => void;\n}\n\nfunction timeAgo(dateStr: string): string {\n const now = Date.now();\n const then = new Date(dateStr).getTime();\n const diff = now - then;\n const minutes = Math.floor(diff / 60000);\n if (minutes < 1) return 'just now';\n if (minutes < 60) return `${String(minutes)}m ago`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${String(hours)}h ago`;\n const days = Math.floor(hours / 24);\n return `${String(days)}d ago`;\n}\n\nexport function SessionHistory({\n sessions,\n isLoading,\n allTags,\n onSelectSession,\n onNewChat,\n onClose,\n onUpdateTags,\n}: SessionHistoryProps) {\n const [filterTags, setFilterTags] = useState<string[]>([]);\n const [editingTagsId, setEditingTagsId] = useState<string | null>(null);\n\n const toggleFilter = useCallback((tag: string) => {\n setFilterTags((prev) =>\n prev.includes(tag)\n ? prev.filter((t) => t !== tag)\n : [...prev, tag],\n );\n }, []);\n\n const filteredSessions =\n filterTags.length > 0\n ? sessions.filter((s) => filterTags.some((tag) => s.tags.includes(tag)))\n : sessions;\n\n return (\n <div className=\"pcw-history-drawer\" data-testid=\"session-history\">\n <div className=\"pcw-history-header\">\n <h3 className=\"pcw-history-title\">Session History</h3>\n <button\n type=\"button\"\n className=\"pcw-history-close\"\n onClick={onClose}\n aria-label=\"Close history\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} width={16} height={16}>\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n\n <button\n type=\"button\"\n className=\"pcw-history-new-chat\"\n onClick={onNewChat}\n >\n + New Chat\n </button>\n\n {allTags.length > 0 && (\n <div className=\"pcw-history-filters\">\n {allTags.map((tag) => (\n <button\n key={tag}\n type=\"button\"\n className={`pcw-filter-chip ${filterTags.includes(tag) ? 'pcw-filter-chip--active' : ''}`}\n onClick={() => toggleFilter(tag)}\n >\n {tag}\n </button>\n ))}\n </div>\n )}\n\n <div className=\"pcw-history-list\">\n {isLoading && (\n <div className=\"pcw-history-loading\">Loading sessions...</div>\n )}\n\n {!isLoading && filteredSessions.length === 0 && (\n <div className=\"pcw-history-empty\">No past sessions</div>\n )}\n\n {filteredSessions.map((session) => (\n <div\n key={session.id}\n className=\"pcw-history-item\"\n >\n <button\n type=\"button\"\n className=\"pcw-history-item-content\"\n onClick={() => onSelectSession(session.id)}\n >\n <div className=\"pcw-history-item-title\">\n {session.title ?? `Session ${session.id.slice(0, 8)}`}\n </div>\n <div className=\"pcw-history-item-meta\">\n <span className=\"pcw-history-item-time\">{timeAgo(session.created_at)}</span>\n <span className=\"pcw-history-item-count\">\n {String(session.message_count)} msg{session.message_count !== 1 ? 's' : ''}\n </span>\n </div>\n </button>\n\n <div className=\"pcw-history-item-tags\">\n {editingTagsId === session.id ? (\n <TagEditor\n tags={session.tags}\n onSave={(tags) => {\n onUpdateTags(session.id, tags);\n setEditingTagsId(null);\n }}\n />\n ) : (\n <div className=\"pcw-history-item-tag-list\">\n {session.tags.map((tag) => (\n <span key={tag} className=\"pcw-tag-badge pcw-tag-badge--small\">{tag}</span>\n ))}\n <button\n type=\"button\"\n className=\"pcw-tag-edit-btn\"\n onClick={(e) => {\n e.stopPropagation();\n setEditingTagsId(session.id);\n }}\n aria-label=\"Edit tags\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} width={12} height={12}>\n <path d=\"M20.59 13.41l-7.17 7.17a2 2 0 01-2.83 0L2 12V2h10l8.59 8.59a2 2 0 010 2.82z\" />\n <line x1=\"7\" y1=\"7\" x2=\"7.01\" y2=\"7\" />\n </svg>\n </button>\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport type { WidgetConfig } from '../types';\nimport type { InteractionEvent } from '../events/types';\nimport type { WidgetRegistry } from './widgets/WidgetRenderer';\nimport { useChat } from '../hooks/useChat';\nimport { useSessionHistory } from '../hooks/useSessionHistory';\nimport { applyTheme, mergeTheme } from '../theme';\nimport { MessageList } from './MessageList';\nimport { InputBar } from './InputBar';\nimport { SessionHistory } from './SessionHistory';\nimport './widget.css';\n\nfunction ChatIcon() {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\" />\n </svg>\n );\n}\n\nfunction CloseIcon() {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n );\n}\n\nexport type ChatWidgetProps = WidgetConfig & {\n widgets?: WidgetRegistry;\n /** Enable session history drawer. */\n historyEnabled?: boolean;\n};\n\nexport function ChatWidget({\n serverUrl,\n user,\n getToken,\n theme,\n position = 'floating',\n defaultOpen = false,\n onToolCall,\n onKBProposal,\n onEvent,\n entityExtractors,\n widgets: customWidgets,\n historyEnabled = false,\n showInput = true,\n sessionType,\n deployId,\n initialMessage,\n resumeSessionId,\n onStreamEnd,\n onSessionCreated,\n}: ChatWidgetProps) {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n const [showHistory, setShowHistory] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const mergedTheme = mergeTheme(theme);\n\n const { messages, send, stop, isStreaming, error, reset, eventBus, submitAskUserResponse, loadSession, isHistorical } = useChat({\n serverUrl,\n user,\n getToken,\n onToolCall,\n onKBProposal,\n onEvent,\n entityExtractors,\n sessionType,\n deployId,\n initialMessage,\n resumeSessionId,\n onStreamEnd,\n onSessionCreated,\n });\n\n const history = useSessionHistory({\n serverUrl,\n getToken,\n enabled: historyEnabled && showHistory,\n });\n\n const handleInteraction = useCallback(\n (event: InteractionEvent) => {\n eventBus.emitInteraction(event);\n onEvent?.(event);\n },\n [eventBus, onEvent],\n );\n\n const handleSelectSession = useCallback(\n (sessionId: string) => {\n loadSession(sessionId);\n setShowHistory(false);\n },\n [loadSession],\n );\n\n const handleNewChat = useCallback(() => {\n reset();\n setShowHistory(false);\n }, [reset]);\n\n // Apply theme as CSS custom properties\n useEffect(() => {\n if (containerRef.current && theme) {\n applyTheme(containerRef.current, theme);\n }\n }, [theme]);\n\n const positionClass = `pcw-widget pcw-widget--${position}`;\n\n // Inline mode is always visible\n if (position === 'inline') {\n return (\n <div ref={containerRef} className={positionClass} data-testid=\"chat-widget\">\n <ChatHeader\n title={mergedTheme.headerText}\n onReset={reset}\n historyEnabled={historyEnabled}\n onToggleHistory={() => setShowHistory((v) => !v)}\n isHistorical={isHistorical}\n />\n {showHistory && (\n <SessionHistory\n sessions={history.sessions}\n isLoading={history.isLoading}\n allTags={history.allTags}\n onSelectSession={handleSelectSession}\n onNewChat={handleNewChat}\n onClose={() => setShowHistory(false)}\n onUpdateTags={history.updateTags}\n />\n )}\n <MessageList messages={messages} isStreaming={isStreaming} sendMessage={send} customWidgets={customWidgets} onInteraction={handleInteraction} onAskUserSubmit={submitAskUserResponse} emptyStateText={mergedTheme.emptyStateText} />\n {error && <div className=\"pcw-error\">{error}</div>}\n {showInput && (\n <InputBar\n onSend={send}\n onStop={stop}\n disabled={isStreaming}\n isStreaming={isStreaming}\n placeholder={isHistorical ? 'Send a message to start a new chat...' : mergedTheme.placeholder}\n />\n )}\n </div>\n );\n }\n\n // For non-inline positions, support open/close toggle\n if (!isOpen) {\n if (position === 'floating') {\n return (\n <button\n type=\"button\"\n className=\"pcw-toggle\"\n onClick={() => setIsOpen(true)}\n aria-label=\"Open chat\"\n >\n <ChatIcon />\n </button>\n );\n }\n return null;\n }\n\n return (\n <div ref={containerRef} className={positionClass} data-testid=\"chat-widget\">\n <ChatHeader\n title={mergedTheme.headerText}\n onClose={() => setIsOpen(false)}\n onReset={reset}\n showClose\n historyEnabled={historyEnabled}\n onToggleHistory={() => setShowHistory((v) => !v)}\n isHistorical={isHistorical}\n />\n {showHistory && (\n <SessionHistory\n sessions={history.sessions}\n isLoading={history.isLoading}\n allTags={history.allTags}\n onSelectSession={handleSelectSession}\n onNewChat={handleNewChat}\n onClose={() => setShowHistory(false)}\n onUpdateTags={history.updateTags}\n />\n )}\n <MessageList messages={messages} isStreaming={isStreaming} onInteraction={handleInteraction} onAskUserSubmit={submitAskUserResponse} emptyStateText={mergedTheme.emptyStateText} />\n {error && <div className=\"pcw-error\">{error}</div>}\n {showInput && (\n <InputBar\n onSend={send}\n onStop={stop}\n disabled={isStreaming}\n isStreaming={isStreaming}\n placeholder={isHistorical ? 'Send a message to start a new chat...' : mergedTheme.placeholder}\n />\n )}\n </div>\n );\n}\n\nfunction HistoryIcon() {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" width={16} height={16}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12 6 12 12 16 14\" />\n </svg>\n );\n}\n\ninterface ChatHeaderProps {\n title: string;\n onClose?: () => void;\n onReset?: () => void;\n showClose?: boolean;\n historyEnabled?: boolean;\n onToggleHistory?: () => void;\n isHistorical?: boolean;\n}\n\nfunction ChatHeader({ title, onClose, onReset, showClose = false, historyEnabled, onToggleHistory, isHistorical }: ChatHeaderProps) {\n return (\n <div className=\"pcw-header\">\n <div style={{ display: 'flex', gap: '4px', alignItems: 'center' }}>\n {historyEnabled && onToggleHistory && (\n <button\n type=\"button\"\n className=\"pcw-header__close\"\n onClick={onToggleHistory}\n aria-label=\"Session history\"\n title=\"Session history\"\n >\n <HistoryIcon />\n </button>\n )}\n <h3 className=\"pcw-header__title\">\n {title}\n {isHistorical && <span className=\"pcw-header__badge\">History</span>}\n </h3>\n </div>\n <div style={{ display: 'flex', gap: '4px', alignItems: 'center' }}>\n {onReset && (\n <button\n type=\"button\"\n className=\"pcw-header__close\"\n onClick={onReset}\n aria-label=\"New conversation\"\n title=\"New conversation\"\n >\n {'\\u21BB'}\n </button>\n )}\n {showClose && onClose && (\n <button\n type=\"button\"\n className=\"pcw-header__close\"\n onClick={onClose}\n aria-label=\"Close chat\"\n >\n <CloseIcon />\n </button>\n )}\n </div>\n </div>\n );\n}\n"],"names":["escapeHtml","text","inlineMarkdown","html","markdownToHtml","markdown","lines","output","inCodeBlock","codeLines","inList","i","line","headerMatch","level","listMatch","FormattedText","className","jsx","SubagentEventRow","event","expanded","setExpanded","useState","hasDetail","jsxs","DispatchArgs","params","subagent","task","instruction","kbTags","tools","t","buildInlineSegments","events","segments","pendingText","e","InlineToolRow","isEnd","icon","iconClass","DispatchToolCallCard","toolCall","detailsOpen","setDetailsOpen","statusClass","summary","completeEvent","_a","hasActivity","toolCallCount","s","hasDetails","seg","ToolCallCard","KBProposalCard","proposal","SkillPill","skill","StreamingIndicator","QuestionField","question","index","value","onChange","disabled","fieldId","options","selected","toggle","label","next","opt","AskUserCard","block","onSubmit","answers","setAnswers","submitting","setSubmitting","isSubmitted","handleSubmit","q","v","prev","EntityCard","data","sendMessage","onInteraction","d","scorePercent","handleMouseEnter","useCallback","handleMouseLeave","handleClick","key","val","EntityList","sortKey","setSortKey","sorted","a","b","displayCount","visible","device","ZONE_POSITIONS","ZONE_LABELS","ScopeMap","highlighted","emitZoneInteraction","type","zoneId","emitDeviceInteraction","mac","pos","SEVERITY_CLASSES","AlertCard","p","EVENT_COLORS","Timeline","color","Comparison","item","DataTable","columns","rows","sortCol","setSortCol","sortDir","setSortDir","handleSort","sortedRows","aVal","bVal","aStr","bStr","col","row","ScoreBreakdown","maxScore","factor","factorMax","factorPercent","SEVERITY_ORDER","StatusBoard","CredentialInput","values","setValues","status","setStatus","errorMessage","setErrorMessage","handleChange","fieldName","url","field","response","err","ACTION_LABELS","DocumentPreview","editing","setEditing","editedBody","setEditedBody","approved","setApproved","handleApprove","handleEditFirst","handleApproveWithEdits","Fragment","InfoCard","title","fields","tags","actions","f","TREND_ARROWS","Metric","platformWidgets","WidgetErrorBoundary","Component","props","error","WidgetRenderer","widgetType","customWidgets","WidgetComponent","AssistantBubble","message","onAskUserSubmit","hasContentBlocks","hasExtras","hasKBProposals","tc","idx","MessageList","messages","isStreaming","emptyStateText","containerRef","useRef","shouldAutoScroll","useEffect","el","handleScroll","msg","SendIcon","StopIcon","InputBar","onSend","onStop","placeholder","setValue","textareaRef","handleSend","trimmed","handleKeyDown","handleInput","TagEditor","onSave","isEditing","setIsEditing","inputValue","setInputValue","handleRemove","tag","handleAdd","timeAgo","dateStr","now","then","diff","minutes","hours","days","SessionHistory","sessions","isLoading","allTags","onSelectSession","onNewChat","onClose","onUpdateTags","filterTags","setFilterTags","editingTagsId","setEditingTagsId","toggleFilter","filteredSessions","session","ChatIcon","CloseIcon","ChatWidget","serverUrl","user","getToken","theme","position","defaultOpen","onToolCall","onKBProposal","onEvent","entityExtractors","historyEnabled","showInput","sessionType","deployId","initialMessage","resumeSessionId","onStreamEnd","onSessionCreated","isOpen","setIsOpen","showHistory","setShowHistory","mergedTheme","mergeTheme","send","stop","reset","eventBus","submitAskUserResponse","loadSession","isHistorical","useChat","history","useSessionHistory","handleInteraction","handleSelectSession","sessionId","handleNewChat","applyTheme","positionClass","ChatHeader","HistoryIcon","onReset","showClose","onToggleHistory"],"mappings":"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"}