@amodalai/react 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/ChatClient.d.ts +76 -0
- package/dist/client/ChatClient.d.ts.map +1 -0
- package/dist/client/ChatStream.d.ts +63 -0
- package/dist/client/ChatStream.d.ts.map +1 -0
- package/dist/client/EventEmitter.d.ts +16 -0
- package/dist/client/EventEmitter.d.ts.map +1 -0
- package/dist/client/chat-api.d.ts +80 -0
- package/dist/client/chat-api.d.ts.map +1 -0
- package/dist/client/index.d.ts +7 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client.js +437 -123
- package/dist/client.js.map +1 -1
- package/dist/event-bus-h26clqbZ.js +297 -0
- package/dist/event-bus-h26clqbZ.js.map +1 -0
- package/dist/events/entity-extractor.d.ts +7 -0
- package/dist/events/entity-extractor.d.ts.map +1 -0
- package/dist/events/event-bus.d.ts +27 -0
- package/dist/events/event-bus.d.ts.map +1 -0
- package/dist/events/index.d.ts +9 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/types.d.ts +72 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/hooks/useAmodalChat.d.ts.map +1 -1
- package/dist/hooks/useChat.d.ts +52 -0
- package/dist/hooks/useChat.d.ts.map +1 -0
- package/dist/hooks/useSessionHistory.d.ts +17 -0
- package/dist/hooks/useSessionHistory.d.ts.map +1 -0
- package/dist/hooks/useWidgetEvents.d.ts +17 -0
- package/dist/hooks/useWidgetEvents.d.ts.map +1 -0
- package/dist/index.d.ts +17 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/react.css +5 -0
- package/dist/react.js +245 -222
- package/dist/react.js.map +1 -1
- package/dist/theme-BaBR_tym.js +691 -0
- package/dist/theme-BaBR_tym.js.map +1 -0
- package/dist/theme.d.ts +11 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/types.d.ts +106 -8
- package/dist/types.d.ts.map +1 -1
- package/dist/umd-entry.d.ts +21 -0
- package/dist/umd-entry.d.ts.map +1 -0
- package/dist/widget/AskUserCard.d.ts +8 -0
- package/dist/widget/AskUserCard.d.ts.map +1 -0
- package/dist/widget/ChatWidget.d.ts +9 -0
- package/dist/widget/ChatWidget.d.ts.map +1 -0
- package/dist/widget/FormattedText.d.ts +12 -0
- package/dist/widget/FormattedText.d.ts.map +1 -0
- package/dist/widget/InputBar.d.ts +15 -0
- package/dist/widget/InputBar.d.ts.map +1 -0
- package/dist/widget/KBProposalCard.d.ts +7 -0
- package/dist/widget/KBProposalCard.d.ts.map +1 -0
- package/dist/widget/MessageList.d.ts +15 -0
- package/dist/widget/MessageList.d.ts.map +1 -0
- package/dist/widget/SessionHistory.d.ts +12 -0
- package/dist/widget/SessionHistory.d.ts.map +1 -0
- package/dist/widget/SkillPill.d.ts +11 -0
- package/dist/widget/SkillPill.d.ts.map +1 -0
- package/dist/widget/StreamingIndicator.d.ts +7 -0
- package/dist/widget/StreamingIndicator.d.ts.map +1 -0
- package/dist/widget/TagEditor.d.ts +11 -0
- package/dist/widget/TagEditor.d.ts.map +1 -0
- package/dist/widget/ToolCallCard.d.ts +7 -0
- package/dist/widget/ToolCallCard.d.ts.map +1 -0
- package/dist/widget/index.d.ts +33 -0
- package/dist/widget/index.d.ts.map +1 -0
- package/dist/widget/widgets/AlertCard.d.ts +3 -0
- package/dist/widget/widgets/AlertCard.d.ts.map +1 -0
- package/dist/widget/widgets/Comparison.d.ts +3 -0
- package/dist/widget/widgets/Comparison.d.ts.map +1 -0
- package/dist/widget/widgets/CredentialInput.d.ts +3 -0
- package/dist/widget/widgets/CredentialInput.d.ts.map +1 -0
- package/dist/widget/widgets/DataTable.d.ts +3 -0
- package/dist/widget/widgets/DataTable.d.ts.map +1 -0
- package/dist/widget/widgets/DocumentPreview.d.ts +3 -0
- package/dist/widget/widgets/DocumentPreview.d.ts.map +1 -0
- package/dist/widget/widgets/EntityCard.d.ts +3 -0
- package/dist/widget/widgets/EntityCard.d.ts.map +1 -0
- package/dist/widget/widgets/EntityList.d.ts +3 -0
- package/dist/widget/widgets/EntityList.d.ts.map +1 -0
- package/dist/widget/widgets/InfoCard.d.ts +3 -0
- package/dist/widget/widgets/InfoCard.d.ts.map +1 -0
- package/dist/widget/widgets/Metric.d.ts +3 -0
- package/dist/widget/widgets/Metric.d.ts.map +1 -0
- package/dist/widget/widgets/ScopeMap.d.ts +3 -0
- package/dist/widget/widgets/ScopeMap.d.ts.map +1 -0
- package/dist/widget/widgets/ScoreBreakdown.d.ts +3 -0
- package/dist/widget/widgets/ScoreBreakdown.d.ts.map +1 -0
- package/dist/widget/widgets/StatusBoard.d.ts +3 -0
- package/dist/widget/widgets/StatusBoard.d.ts.map +1 -0
- package/dist/widget/widgets/Timeline.d.ts +3 -0
- package/dist/widget/widgets/Timeline.d.ts.map +1 -0
- package/dist/widget/widgets/WidgetRenderer.d.ts +28 -0
- package/dist/widget/widgets/WidgetRenderer.d.ts.map +1 -0
- package/dist/widget.js +1668 -0
- package/dist/widget.js.map +1 -0
- package/package.json +8 -1
|
@@ -0,0 +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, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"');\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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amodalai/react",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "React bindings for Amodal agent runtime",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -27,6 +27,12 @@
|
|
|
27
27
|
"import": "./dist/client.js",
|
|
28
28
|
"default": "./dist/client.js"
|
|
29
29
|
},
|
|
30
|
+
"./widget": {
|
|
31
|
+
"types": "./dist/widget/index.d.ts",
|
|
32
|
+
"import": "./dist/widget.js",
|
|
33
|
+
"default": "./dist/widget.js"
|
|
34
|
+
},
|
|
35
|
+
"./widget/style.css": "./dist/react.css",
|
|
30
36
|
"./style.css": "./dist/react.css"
|
|
31
37
|
},
|
|
32
38
|
"files": [
|
|
@@ -57,6 +63,7 @@
|
|
|
57
63
|
"build": "tsc --noEmit && vite build",
|
|
58
64
|
"typecheck": "tsc --noEmit",
|
|
59
65
|
"test": "vitest run",
|
|
66
|
+
"test:ci": "vitest run",
|
|
60
67
|
"lint": "eslint src/"
|
|
61
68
|
}
|
|
62
69
|
}
|