@assistant-ui/react-devtools 1.2.18 → 1.2.20
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/DevToolsModal.d.ts +2 -3
- package/dist/DevToolsModal.d.ts.map +1 -1
- package/dist/data/createInProcessClient.d.ts +3 -6
- package/dist/data/createInProcessClient.d.ts.map +1 -1
- package/dist/data/createInProcessClient.js +1 -3
- package/dist/data/createInProcessClient.js.map +1 -1
- package/dist/data/projectApi.d.ts +1 -2
- package/dist/data/projectApi.d.ts.map +1 -1
- package/dist/data/types.d.ts +6 -6
- package/dist/data/types.d.ts.map +1 -1
- package/dist/data/useDevToolsClient.d.ts +2 -3
- package/dist/data/useDevToolsClient.d.ts.map +1 -1
- package/dist/shell/DevToolsOverlay.d.ts +2 -3
- package/dist/shell/DevToolsOverlay.d.ts.map +1 -1
- package/dist/shell/DevToolsPanel.d.ts +2 -3
- package/dist/shell/DevToolsPanel.d.ts.map +1 -1
- package/dist/shell/ShadowRoot.d.ts +2 -3
- package/dist/shell/ShadowRoot.d.ts.map +1 -1
- package/dist/shell/SplitLayout.d.ts +3 -4
- package/dist/shell/SplitLayout.d.ts.map +1 -1
- package/dist/shell/registry.d.ts +4 -5
- package/dist/shell/registry.d.ts.map +1 -1
- package/dist/shell/tabs/ActivityTab.d.ts +1 -2
- package/dist/shell/tabs/ActivityTab.d.ts.map +1 -1
- package/dist/shell/tabs/ContextTab.d.ts +1 -2
- package/dist/shell/tabs/ContextTab.d.ts.map +1 -1
- package/dist/shell/tabs/RawTab.d.ts +1 -2
- package/dist/shell/tabs/RawTab.d.ts.map +1 -1
- package/dist/shell/tabs/ThreadTab.d.ts +1 -2
- package/dist/shell/tabs/ThreadTab.d.ts.map +1 -1
- package/dist/shell/tabs/navSelection.d.ts +1 -2
- package/dist/shell/tabs/navSelection.d.ts.map +1 -1
- package/dist/styles/panel.generated.d.ts +1 -2
- package/dist/styles/panel.generated.d.ts.map +1 -1
- package/dist/styles/panel.generated.js +1 -1
- package/dist/styles/panel.generated.js.map +1 -1
- package/dist/types.d.ts +1 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/common.d.ts +13 -14
- package/dist/utils/common.d.ts.map +1 -1
- package/dist/utils/diff.d.ts +2 -3
- package/dist/utils/diff.d.ts.map +1 -1
- package/dist/utils/serialization.d.ts +5 -6
- package/dist/utils/serialization.d.ts.map +1 -1
- package/dist/utils/serialization.js +13 -4
- package/dist/utils/serialization.js.map +1 -1
- package/dist/utils/toolNormalization.d.ts +2 -3
- package/dist/utils/toolNormalization.d.ts.map +1 -1
- package/dist/utils/unserializable.d.ts +2 -3
- package/dist/utils/unserializable.d.ts.map +1 -1
- package/dist/views/activity/EventLogRow.d.ts +2 -3
- package/dist/views/activity/EventLogRow.d.ts.map +1 -1
- package/dist/views/activity/EventStreamPane.d.ts +1 -2
- package/dist/views/activity/EventStreamPane.d.ts.map +1 -1
- package/dist/views/activity/OrphansPane.d.ts +1 -2
- package/dist/views/activity/OrphansPane.d.ts.map +1 -1
- package/dist/views/activity/RunDetailPane.d.ts +1 -2
- package/dist/views/activity/RunDetailPane.d.ts.map +1 -1
- package/dist/views/activity/activityNodes.d.ts +6 -7
- package/dist/views/activity/activityNodes.d.ts.map +1 -1
- package/dist/views/attachments/AttachmentList.d.ts +1 -2
- package/dist/views/attachments/AttachmentList.d.ts.map +1 -1
- package/dist/views/attachments/MediaPartView.d.ts +3 -4
- package/dist/views/attachments/MediaPartView.d.ts.map +1 -1
- package/dist/views/attachments/formatBytes.d.ts +3 -4
- package/dist/views/attachments/formatBytes.d.ts.map +1 -1
- package/dist/views/attachments/parseAttachment.d.ts +2 -3
- package/dist/views/attachments/parseAttachment.d.ts.map +1 -1
- package/dist/views/attachments/types.d.ts +2 -3
- package/dist/views/attachments/types.d.ts.map +1 -1
- package/dist/views/context/ContextDetail.d.ts +1 -2
- package/dist/views/context/ContextDetail.d.ts.map +1 -1
- package/dist/views/context/ToolUIsView.d.ts +1 -2
- package/dist/views/context/ToolUIsView.d.ts.map +1 -1
- package/dist/views/context/contextNodes.d.ts +4 -5
- package/dist/views/context/contextNodes.d.ts.map +1 -1
- package/dist/views/mcp/McpView.d.ts +1 -2
- package/dist/views/mcp/McpView.d.ts.map +1 -1
- package/dist/views/mcp/parse.d.ts +1 -2
- package/dist/views/mcp/parse.d.ts.map +1 -1
- package/dist/views/mcp/types.d.ts +3 -4
- package/dist/views/mcp/types.d.ts.map +1 -1
- package/dist/views/message/ChainOfThought.d.ts +1 -2
- package/dist/views/message/ChainOfThought.d.ts.map +1 -1
- package/dist/views/message/MessageDetailPane.d.ts +2 -3
- package/dist/views/message/MessageDetailPane.d.ts.map +1 -1
- package/dist/views/message/MessageItem.d.ts +1 -2
- package/dist/views/message/MessageItem.d.ts.map +1 -1
- package/dist/views/message/MessageList.d.ts +1 -2
- package/dist/views/message/MessageList.d.ts.map +1 -1
- package/dist/views/message/MessageMetrics.d.ts +1 -2
- package/dist/views/message/MessageMetrics.d.ts.map +1 -1
- package/dist/views/message/MessageMetrics.js +1 -1
- package/dist/views/message/MessageMetrics.js.map +1 -1
- package/dist/views/message/MessageTimeline.d.ts +3 -4
- package/dist/views/message/MessageTimeline.d.ts.map +1 -1
- package/dist/views/message/PartDisclosure.d.ts +1 -2
- package/dist/views/message/PartDisclosure.d.ts.map +1 -1
- package/dist/views/message/PartView.d.ts +1 -2
- package/dist/views/message/PartView.d.ts.map +1 -1
- package/dist/views/message/RoleLabel.d.ts +1 -2
- package/dist/views/message/RoleLabel.d.ts.map +1 -1
- package/dist/views/message/StatusBadge.d.ts +1 -2
- package/dist/views/message/StatusBadge.d.ts.map +1 -1
- package/dist/views/message/ToolCallView.d.ts +1 -2
- package/dist/views/message/ToolCallView.d.ts.map +1 -1
- package/dist/views/message/TtftBar.d.ts +2 -3
- package/dist/views/message/TtftBar.d.ts.map +1 -1
- package/dist/views/message/TtftBar.js +2 -2
- package/dist/views/message/TtftBar.js.map +1 -1
- package/dist/views/message/messagePlainText.d.ts +1 -2
- package/dist/views/message/messagePlainText.d.ts.map +1 -1
- package/dist/views/message/parse.d.ts +4 -5
- package/dist/views/message/parse.d.ts.map +1 -1
- package/dist/views/message/types.d.ts +17 -18
- package/dist/views/message/types.d.ts.map +1 -1
- package/dist/views/model-context/ModelContextView.d.ts +4 -5
- package/dist/views/model-context/ModelContextView.d.ts.map +1 -1
- package/dist/views/nav.d.ts +4 -5
- package/dist/views/nav.d.ts.map +1 -1
- package/dist/views/raw/RawDetail.d.ts +1 -2
- package/dist/views/raw/RawDetail.d.ts.map +1 -1
- package/dist/views/raw/rawNodes.d.ts +4 -5
- package/dist/views/raw/rawNodes.d.ts.map +1 -1
- package/dist/views/raw/statePreview.d.ts +1 -2
- package/dist/views/raw/statePreview.d.ts.map +1 -1
- package/dist/views/runs/PayloadDiff.d.ts +1 -2
- package/dist/views/runs/PayloadDiff.d.ts.map +1 -1
- package/dist/views/runs/parse.d.ts +1 -2
- package/dist/views/runs/parse.d.ts.map +1 -1
- package/dist/views/runs/types.d.ts +3 -4
- package/dist/views/runs/types.d.ts.map +1 -1
- package/dist/views/scopes/ScopesView.d.ts +1 -2
- package/dist/views/scopes/ScopesView.d.ts.map +1 -1
- package/dist/views/scopes/parse.d.ts +1 -2
- package/dist/views/scopes/parse.d.ts.map +1 -1
- package/dist/views/scopes/types.d.ts +1 -2
- package/dist/views/scopes/types.d.ts.map +1 -1
- package/dist/views/thread/ComposerAttachments.d.ts +1 -2
- package/dist/views/thread/ComposerAttachments.d.ts.map +1 -1
- package/dist/views/thread/ComposerFlags.d.ts +1 -2
- package/dist/views/thread/ComposerFlags.d.ts.map +1 -1
- package/dist/views/thread/ComposerQueue.d.ts +1 -2
- package/dist/views/thread/ComposerQueue.d.ts.map +1 -1
- package/dist/views/thread/ConversationList.d.ts +2 -3
- package/dist/views/thread/ConversationList.d.ts.map +1 -1
- package/dist/views/thread/ConversationStatusDot.d.ts +3 -4
- package/dist/views/thread/ConversationStatusDot.d.ts.map +1 -1
- package/dist/views/thread/ThreadDetails.d.ts +1 -2
- package/dist/views/thread/ThreadDetails.d.ts.map +1 -1
- package/dist/views/thread/Transcript.d.ts +3 -4
- package/dist/views/thread/Transcript.d.ts.map +1 -1
- package/dist/views/thread/Transcript.js +1 -1
- package/dist/views/thread/Transcript.js.map +1 -1
- package/dist/views/thread/resolve.d.ts +2 -3
- package/dist/views/thread/resolve.d.ts.map +1 -1
- package/dist/views/thread/types.d.ts +7 -7
- package/dist/views/thread/types.d.ts.map +1 -1
- package/dist/views/thread/utils.d.ts +4 -5
- package/dist/views/thread/utils.d.ts.map +1 -1
- package/dist/views/ui/CenteredMessage.d.ts +1 -2
- package/dist/views/ui/CenteredMessage.d.ts.map +1 -1
- package/dist/views/ui/Chip.d.ts +1 -2
- package/dist/views/ui/Chip.d.ts.map +1 -1
- package/dist/views/ui/ControlButton.d.ts +1 -2
- package/dist/views/ui/ControlButton.d.ts.map +1 -1
- package/dist/views/ui/CopyButton.d.ts +2 -3
- package/dist/views/ui/CopyButton.d.ts.map +1 -1
- package/dist/views/ui/CopyButton.js +3 -3
- package/dist/views/ui/CopyButton.js.map +1 -1
- package/dist/views/ui/EmptyState.d.ts +1 -2
- package/dist/views/ui/EmptyState.d.ts.map +1 -1
- package/dist/views/ui/InfoCard.d.ts +1 -2
- package/dist/views/ui/InfoCard.d.ts.map +1 -1
- package/dist/views/ui/JSONTree.d.ts +1 -2
- package/dist/views/ui/JSONTree.d.ts.map +1 -1
- package/dist/views/ui/JSONTree.js +51 -72
- package/dist/views/ui/JSONTree.js.map +1 -1
- package/dist/views/ui/PaneHeader.d.ts +2 -3
- package/dist/views/ui/PaneHeader.d.ts.map +1 -1
- package/dist/views/ui/RailTime.d.ts +1 -2
- package/dist/views/ui/RailTime.d.ts.map +1 -1
- package/dist/views/ui/SectionLabel.d.ts +1 -2
- package/dist/views/ui/SectionLabel.d.ts.map +1 -1
- package/dist/views/ui/SelectableRow.d.ts +1 -2
- package/dist/views/ui/SelectableRow.d.ts.map +1 -1
- package/dist/views/ui/Sparkline.d.ts +1 -2
- package/dist/views/ui/Sparkline.d.ts.map +1 -1
- package/dist/views/ui/SummaryItem.d.ts +2 -3
- package/dist/views/ui/SummaryItem.d.ts.map +1 -1
- package/dist/views/ui/ToneBadge.d.ts +1 -2
- package/dist/views/ui/ToneBadge.d.ts.map +1 -1
- package/dist/views/ui/badgeTone.d.ts +7 -8
- package/dist/views/ui/badgeTone.d.ts.map +1 -1
- package/dist/views/ui/getInlineJson.d.ts +4 -0
- package/dist/views/ui/getInlineJson.d.ts.map +1 -0
- package/dist/views/ui/getInlineJson.js +22 -0
- package/dist/views/ui/getInlineJson.js.map +1 -0
- package/dist/views/ui/useCopyToClipboard.d.ts +1 -2
- package/dist/views/ui/useCopyToClipboard.d.ts.map +1 -1
- package/package.json +16 -13
- package/src/data/createInProcessClient.ts +1 -3
- package/src/styles/panel.generated.ts +1 -1
- package/src/utils/serialization.test.ts +19 -0
- package/src/utils/serialization.ts +32 -7
- package/src/views/message/MessageMetrics.tsx +2 -3
- package/src/views/message/TtftBar.test.tsx +20 -0
- package/src/views/message/TtftBar.tsx +2 -2
- package/src/views/thread/Transcript.tsx +1 -6
- package/src/views/ui/CopyButton.tsx +3 -3
- package/src/views/ui/JSONTree.interaction.test.tsx +118 -0
- package/src/views/ui/JSONTree.tsx +29 -28
- package/src/views/ui/JSONTree.work.test.tsx +60 -0
- package/src/views/ui/getInlineJson.test.ts +83 -0
- package/src/views/ui/getInlineJson.ts +38 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Transcript.js","names":["memo","useCallback","useEffect","useMemo","useRef","useState","clsx","truncate","StatusBadge","MessagePreview","PartPreview","messageStepCount","RoleLabel","Chip","PaneHeader","PaneHeaderStack","RailTime","RAIL_STATUS_BADGE_CLASS","SelectableRow","Sparkline","ToneBadge","ComposerPreview","ThreadPreview","MetricSeries","label","values","format","value","messageNodeId","id","formatTokens","toFixed","String","textOf","parts","filter","part","Extract","type","map","text","join","trim","rowSummary","message","tool","find","toolName","rowStepHint","tools","texts","hints","push","length","railStatus","isOptimistic","status","railAttachmentCount","attachments","TurnRow","t0","$","_c","selected","nodeId","onSelect","rowRef","t1","t2","summary","t3","stepHint","attachmentCount","t4","t5","t6","role","t7","reason","undefined","t8","t9","t10","createdAt","t11","t12","t13","t14","t15","t16","GhostComposer","composer","Symbol","for","textLength","canSend","queue","collect","messages","pick","metricSeries","timing","tokensPerSecond","firstTokenTime","streamStartTime","Math","round","usage","outputTokens","series","TranscriptHeader","thread","expanded","setExpanded","reduce","_temp2","_temp3","errors","tokens","_temp4","Boolean","statParts","trendSeries","stats","canExpand","isRunning","_temp5","titleRow","t17","_temp6","t18","Transcript","selection","selectedRef","prevSelectionRef","handleSelect","current","scrollIntoView","block","nodeId_0","_temp","sum","message_0","sum_0","message_1","inputTokens","prev","entry"],"sources":["../../../src/views/thread/Transcript.tsx"],"sourcesContent":["import { memo, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport clsx from \"clsx\";\nimport { truncate } from \"../../utils/common\";\nimport { StatusBadge } from \"../message\";\nimport type { MessagePreview, PartPreview } from \"../message\";\nimport { messageStepCount } from \"../message/MessageTimeline\";\nimport { RoleLabel } from \"../message/RoleLabel\";\nimport {\n Chip,\n PaneHeader,\n PaneHeaderStack,\n RailTime,\n RAIL_STATUS_BADGE_CLASS,\n SelectableRow,\n Sparkline,\n ToneBadge,\n} from \"../ui\";\nimport type { ComposerPreview, ThreadPreview } from \"./types\";\n\ninterface MetricSeries {\n label: string;\n values: number[];\n format: (value: number) => string;\n}\n\nexport const messageNodeId = (id: string) => `msg:${id}`;\n\nconst formatTokens = (value: number) =>\n value >= 1000 ? `${(value / 1000).toFixed(1)}k` : String(value);\n\nconst textOf = (parts: readonly PartPreview[]) =>\n parts\n .filter(\n (part): part is Extract<PartPreview, { type: \"text\" }> =>\n part.type === \"text\",\n )\n .map((part) => part.text)\n .join(\"\\n\")\n .trim();\n\nconst rowSummary = (message: MessagePreview) => {\n const text = textOf(message.parts);\n if (text) return truncate(text, 72);\n const tool = message.parts.find(\n (part): part is Extract<PartPreview, { type: \"tool-call\" }> =>\n part.type === \"tool-call\",\n );\n if (tool) return tool.toolName;\n return \"—\";\n};\n\nconst rowStepHint = (message: MessagePreview) => {\n const { tools, texts } = messageStepCount(message.parts);\n const hints: string[] = [];\n if (tools > 1) hints.push(`${tools} tools`);\n if (texts > 1) hints.push(`${texts} msgs`);\n return hints.length ? hints.join(\" · \") : null;\n};\n\nconst railStatus = (message: MessagePreview) => {\n if (message.isOptimistic) return null;\n if (!message.status || message.status.type === \"complete\") return null;\n return message.status;\n};\n\nconst railAttachmentCount = (message: MessagePreview) => {\n if (message.attachments.length > 0) return message.attachments.length;\n return message.parts.filter(\n (part) =>\n part.type === \"image\" || part.type === \"file\" || part.type === \"audio\",\n ).length;\n};\n\nconst TurnRow = memo(function TurnRow({\n message,\n selected,\n nodeId,\n onSelect,\n rowRef,\n}: {\n message: MessagePreview;\n selected: boolean;\n nodeId: string;\n onSelect: (nodeId: string) => void;\n rowRef?: React.Ref<HTMLButtonElement> | undefined;\n}) {\n const status = railStatus(message);\n const summary = rowSummary(message);\n const stepHint = rowStepHint(message);\n const attachmentCount = railAttachmentCount(message);\n\n return (\n <SelectableRow\n ref={rowRef}\n selected={selected}\n onSelect={() => onSelect(nodeId)}\n dense\n >\n <div\n className=\"flex h-10 flex-col justify-center gap-0.5\"\n title={stepHint ? `${stepHint}\\n${summary}` : summary}\n >\n <div className=\"flex min-w-0 items-center justify-between gap-2\">\n <div className=\"flex min-w-0 items-center gap-1.5\">\n <RoleLabel role={message.role} compact />\n {message.isOptimistic ? (\n <ToneBadge\n tone=\"amber\"\n size=\"sm\"\n className={RAIL_STATUS_BADGE_CLASS}\n >\n opt\n </ToneBadge>\n ) : status ? (\n <StatusBadge\n type={status.type}\n reason={\"reason\" in status ? status.reason : undefined}\n compact\n size=\"sm\"\n className={RAIL_STATUS_BADGE_CLASS}\n />\n ) : null}\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n {attachmentCount > 0 ? (\n <span\n className=\"text-muted-foreground text-[10px] leading-none\"\n title={`${attachmentCount} attachment${attachmentCount === 1 ? \"\" : \"s\"}`}\n >\n 📎{attachmentCount}\n </span>\n ) : null}\n <RailTime value={message.createdAt} />\n </div>\n </div>\n <p className=\"text-foreground min-w-0 truncate text-[12px] leading-tight\">\n {stepHint ? (\n <span className=\"text-muted-foreground\">{stepHint} · </span>\n ) : null}\n {summary}\n </p>\n </div>\n </SelectableRow>\n );\n});\n\nconst GhostComposer = ({ composer }: { composer: ComposerPreview }) => (\n <div className=\"border-border text-muted-foreground flex items-center gap-2 border-t px-3 py-2 text-[11px]\">\n <span className=\"text-foreground font-medium\">draft</span>\n <span>{composer.role ?? \"user\"}</span>\n <span>· {composer.textLength} chars</span>\n {composer.canSend ? <Chip>can send</Chip> : null}\n {composer.queue.length ? <Chip>{composer.queue.length} queued</Chip> : null}\n </div>\n);\n\nconst collect = (\n messages: readonly MessagePreview[],\n pick: (message: MessagePreview) => number | undefined,\n): number[] =>\n messages.map(pick).filter((value): value is number => value !== undefined);\n\nconst metricSeries = (messages: readonly MessagePreview[]): MetricSeries[] =>\n [\n {\n label: \"tok/s\",\n values: collect(messages, (message) => message.timing?.tokensPerSecond),\n format: (value: number) => value.toFixed(1),\n },\n {\n label: \"TTFT\",\n values: collect(messages, (message) =>\n message.timing?.firstTokenTime !== undefined &&\n message.timing?.streamStartTime !== undefined\n ? message.timing.firstTokenTime - message.timing.streamStartTime\n : undefined,\n ),\n format: (value: number) => `${Math.round(value)}ms`,\n },\n {\n label: \"output\",\n values: collect(messages, (message) => message.usage?.outputTokens),\n format: (value: number) => String(value),\n },\n ].filter((series) => series.values.length >= 3);\n\nexport const TranscriptHeader = memo(function TranscriptHeader({\n thread,\n}: {\n thread: ThreadPreview;\n}) {\n const [expanded, setExpanded] = useState(false);\n const messages = thread.messages;\n\n const { stats, series, canExpand } = useMemo(() => {\n const tools = messages.reduce(\n (sum, message) =>\n sum + message.parts.filter((part) => part.type === \"tool-call\").length,\n 0,\n );\n const errors = messages.filter(\n (message) => message.status?.type === \"incomplete\",\n ).length;\n const tokens = messages.reduce(\n (sum, message) =>\n sum +\n (message.usage\n ? message.usage.inputTokens + message.usage.outputTokens\n : 0),\n 0,\n );\n\n const statParts = [\n `${messages.length} msg${messages.length === 1 ? \"\" : \"s\"}`,\n tokens ? `${formatTokens(tokens)} tok` : null,\n tools ? `${tools} tool${tools === 1 ? \"\" : \"s\"}` : null,\n errors ? `${errors} err` : null,\n ].filter(Boolean);\n\n const trendSeries = metricSeries(messages);\n\n return {\n stats: statParts,\n series: trendSeries,\n canExpand: trendSeries.length > 0,\n };\n }, [messages]);\n\n const titleRow = (\n <PaneHeader\n borderless={canExpand && expanded}\n trailing={\n <>\n {thread.isRunning ? (\n <ToneBadge tone=\"blue\" size=\"sm\">\n running\n </ToneBadge>\n ) : null}\n {canExpand ? (\n <button\n type=\"button\"\n onClick={() => setExpanded((prev) => !prev)}\n className=\"text-muted-foreground hover:text-foreground text-[11px] leading-none\"\n >\n <span\n className={clsx(\n \"inline-block transition-transform\",\n expanded && \"rotate-90\",\n )}\n >\n ›\n </span>{\" \"}\n trends\n </button>\n ) : null}\n </>\n }\n >\n {stats.join(\" · \")}\n </PaneHeader>\n );\n\n if (canExpand && expanded) {\n return (\n <PaneHeaderStack header={titleRow}>\n {series.map((entry) => (\n <div\n key={entry.label}\n className=\"flex items-center justify-between gap-3 px-3 py-1.5\"\n >\n <div className=\"flex flex-col\">\n <span className=\"text-muted-foreground text-[10px]\">\n {entry.label}\n </span>\n <span className=\"text-foreground text-[12px] font-medium tabular-nums\">\n {entry.format(entry.values[entry.values.length - 1]!)}\n </span>\n </div>\n <Sparkline values={entry.values} className=\"h-6 w-24\" />\n </div>\n ))}\n </PaneHeaderStack>\n );\n }\n\n return titleRow;\n});\n\nexport const Transcript = ({\n thread,\n selection,\n onSelect,\n}: {\n thread: ThreadPreview;\n selection: string | null;\n onSelect: (nodeId: string) => void;\n}) => {\n const selectedRef = useRef<HTMLButtonElement>(null);\n const prevSelectionRef = useRef(selection);\n const handleSelect = useCallback(\n (nodeId: string) => onSelect(nodeId),\n [onSelect],\n );\n\n useEffect(() => {\n if (prevSelectionRef.current === selection) return;\n prevSelectionRef.current = selection;\n selectedRef.current?.scrollIntoView({ block: \"nearest\" });\n }, [selection]);\n\n return (\n <>\n {thread.messages.map((message) => {\n const nodeId = messageNodeId(message.id);\n const selected = selection === nodeId;\n return (\n <TurnRow\n key={message.id}\n message={message}\n nodeId={nodeId}\n selected={selected}\n onSelect={handleSelect}\n rowRef={selected ? selectedRef : undefined}\n />\n );\n })}\n {thread.composer && thread.composer.textLength > 0 ? (\n <GhostComposer composer={thread.composer} />\n ) : null}\n </>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Transcript.js","names":["memo","useCallback","useEffect","useMemo","useRef","useState","clsx","truncate","StatusBadge","MessagePreview","PartPreview","messageStepCount","RoleLabel","Chip","PaneHeader","PaneHeaderStack","RailTime","RAIL_STATUS_BADGE_CLASS","SelectableRow","Sparkline","ToneBadge","ComposerPreview","ThreadPreview","MetricSeries","label","values","format","value","messageNodeId","id","formatTokens","toFixed","String","textOf","parts","filter","part","Extract","type","map","text","join","trim","rowSummary","message","tool","find","toolName","rowStepHint","tools","texts","hints","push","length","railStatus","isOptimistic","status","railAttachmentCount","attachments","TurnRow","t0","$","_c","selected","nodeId","onSelect","rowRef","t1","t2","summary","t3","stepHint","attachmentCount","t4","t5","t6","role","t7","reason","undefined","t8","t9","t10","createdAt","t11","t12","t13","t14","t15","t16","GhostComposer","composer","Symbol","for","textLength","canSend","queue","collect","messages","pick","metricSeries","timing","tokensPerSecond","firstTokenTime","Math","round","usage","outputTokens","series","TranscriptHeader","thread","expanded","setExpanded","reduce","_temp2","_temp3","errors","tokens","_temp4","Boolean","statParts","trendSeries","stats","canExpand","isRunning","_temp5","titleRow","t17","_temp6","t18","Transcript","selection","selectedRef","prevSelectionRef","handleSelect","current","scrollIntoView","block","nodeId_0","_temp","sum","message_0","sum_0","message_1","inputTokens","prev","entry"],"sources":["../../../src/views/thread/Transcript.tsx"],"sourcesContent":["import { memo, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport clsx from \"clsx\";\nimport { truncate } from \"../../utils/common\";\nimport { StatusBadge } from \"../message\";\nimport type { MessagePreview, PartPreview } from \"../message\";\nimport { messageStepCount } from \"../message/MessageTimeline\";\nimport { RoleLabel } from \"../message/RoleLabel\";\nimport {\n Chip,\n PaneHeader,\n PaneHeaderStack,\n RailTime,\n RAIL_STATUS_BADGE_CLASS,\n SelectableRow,\n Sparkline,\n ToneBadge,\n} from \"../ui\";\nimport type { ComposerPreview, ThreadPreview } from \"./types\";\n\ninterface MetricSeries {\n label: string;\n values: number[];\n format: (value: number) => string;\n}\n\nexport const messageNodeId = (id: string) => `msg:${id}`;\n\nconst formatTokens = (value: number) =>\n value >= 1000 ? `${(value / 1000).toFixed(1)}k` : String(value);\n\nconst textOf = (parts: readonly PartPreview[]) =>\n parts\n .filter(\n (part): part is Extract<PartPreview, { type: \"text\" }> =>\n part.type === \"text\",\n )\n .map((part) => part.text)\n .join(\"\\n\")\n .trim();\n\nconst rowSummary = (message: MessagePreview) => {\n const text = textOf(message.parts);\n if (text) return truncate(text, 72);\n const tool = message.parts.find(\n (part): part is Extract<PartPreview, { type: \"tool-call\" }> =>\n part.type === \"tool-call\",\n );\n if (tool) return tool.toolName;\n return \"—\";\n};\n\nconst rowStepHint = (message: MessagePreview) => {\n const { tools, texts } = messageStepCount(message.parts);\n const hints: string[] = [];\n if (tools > 1) hints.push(`${tools} tools`);\n if (texts > 1) hints.push(`${texts} msgs`);\n return hints.length ? hints.join(\" · \") : null;\n};\n\nconst railStatus = (message: MessagePreview) => {\n if (message.isOptimistic) return null;\n if (!message.status || message.status.type === \"complete\") return null;\n return message.status;\n};\n\nconst railAttachmentCount = (message: MessagePreview) => {\n if (message.attachments.length > 0) return message.attachments.length;\n return message.parts.filter(\n (part) =>\n part.type === \"image\" || part.type === \"file\" || part.type === \"audio\",\n ).length;\n};\n\nconst TurnRow = memo(function TurnRow({\n message,\n selected,\n nodeId,\n onSelect,\n rowRef,\n}: {\n message: MessagePreview;\n selected: boolean;\n nodeId: string;\n onSelect: (nodeId: string) => void;\n rowRef?: React.Ref<HTMLButtonElement> | undefined;\n}) {\n const status = railStatus(message);\n const summary = rowSummary(message);\n const stepHint = rowStepHint(message);\n const attachmentCount = railAttachmentCount(message);\n\n return (\n <SelectableRow\n ref={rowRef}\n selected={selected}\n onSelect={() => onSelect(nodeId)}\n dense\n >\n <div\n className=\"flex h-10 flex-col justify-center gap-0.5\"\n title={stepHint ? `${stepHint}\\n${summary}` : summary}\n >\n <div className=\"flex min-w-0 items-center justify-between gap-2\">\n <div className=\"flex min-w-0 items-center gap-1.5\">\n <RoleLabel role={message.role} compact />\n {message.isOptimistic ? (\n <ToneBadge\n tone=\"amber\"\n size=\"sm\"\n className={RAIL_STATUS_BADGE_CLASS}\n >\n opt\n </ToneBadge>\n ) : status ? (\n <StatusBadge\n type={status.type}\n reason={\"reason\" in status ? status.reason : undefined}\n compact\n size=\"sm\"\n className={RAIL_STATUS_BADGE_CLASS}\n />\n ) : null}\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n {attachmentCount > 0 ? (\n <span\n className=\"text-muted-foreground text-[10px] leading-none\"\n title={`${attachmentCount} attachment${attachmentCount === 1 ? \"\" : \"s\"}`}\n >\n 📎{attachmentCount}\n </span>\n ) : null}\n <RailTime value={message.createdAt} />\n </div>\n </div>\n <p className=\"text-foreground min-w-0 truncate text-[12px] leading-tight\">\n {stepHint ? (\n <span className=\"text-muted-foreground\">{stepHint} · </span>\n ) : null}\n {summary}\n </p>\n </div>\n </SelectableRow>\n );\n});\n\nconst GhostComposer = ({ composer }: { composer: ComposerPreview }) => (\n <div className=\"border-border text-muted-foreground flex items-center gap-2 border-t px-3 py-2 text-[11px]\">\n <span className=\"text-foreground font-medium\">draft</span>\n <span>{composer.role ?? \"user\"}</span>\n <span>· {composer.textLength} chars</span>\n {composer.canSend ? <Chip>can send</Chip> : null}\n {composer.queue.length ? <Chip>{composer.queue.length} queued</Chip> : null}\n </div>\n);\n\nconst collect = (\n messages: readonly MessagePreview[],\n pick: (message: MessagePreview) => number | undefined,\n): number[] =>\n messages.map(pick).filter((value): value is number => value !== undefined);\n\nconst metricSeries = (messages: readonly MessagePreview[]): MetricSeries[] =>\n [\n {\n label: \"tok/s\",\n values: collect(messages, (message) => message.timing?.tokensPerSecond),\n format: (value: number) => value.toFixed(1),\n },\n {\n label: \"TTFT\",\n values: collect(messages, (message) => message.timing?.firstTokenTime),\n format: (value: number) => `${Math.round(value)}ms`,\n },\n {\n label: \"output\",\n values: collect(messages, (message) => message.usage?.outputTokens),\n format: (value: number) => String(value),\n },\n ].filter((series) => series.values.length >= 3);\n\nexport const TranscriptHeader = memo(function TranscriptHeader({\n thread,\n}: {\n thread: ThreadPreview;\n}) {\n const [expanded, setExpanded] = useState(false);\n const messages = thread.messages;\n\n const { stats, series, canExpand } = useMemo(() => {\n const tools = messages.reduce(\n (sum, message) =>\n sum + message.parts.filter((part) => part.type === \"tool-call\").length,\n 0,\n );\n const errors = messages.filter(\n (message) => message.status?.type === \"incomplete\",\n ).length;\n const tokens = messages.reduce(\n (sum, message) =>\n sum +\n (message.usage\n ? message.usage.inputTokens + message.usage.outputTokens\n : 0),\n 0,\n );\n\n const statParts = [\n `${messages.length} msg${messages.length === 1 ? \"\" : \"s\"}`,\n tokens ? `${formatTokens(tokens)} tok` : null,\n tools ? `${tools} tool${tools === 1 ? \"\" : \"s\"}` : null,\n errors ? `${errors} err` : null,\n ].filter(Boolean);\n\n const trendSeries = metricSeries(messages);\n\n return {\n stats: statParts,\n series: trendSeries,\n canExpand: trendSeries.length > 0,\n };\n }, [messages]);\n\n const titleRow = (\n <PaneHeader\n borderless={canExpand && expanded}\n trailing={\n <>\n {thread.isRunning ? (\n <ToneBadge tone=\"blue\" size=\"sm\">\n running\n </ToneBadge>\n ) : null}\n {canExpand ? (\n <button\n type=\"button\"\n onClick={() => setExpanded((prev) => !prev)}\n className=\"text-muted-foreground hover:text-foreground text-[11px] leading-none\"\n >\n <span\n className={clsx(\n \"inline-block transition-transform\",\n expanded && \"rotate-90\",\n )}\n >\n ›\n </span>{\" \"}\n trends\n </button>\n ) : null}\n </>\n }\n >\n {stats.join(\" · \")}\n </PaneHeader>\n );\n\n if (canExpand && expanded) {\n return (\n <PaneHeaderStack header={titleRow}>\n {series.map((entry) => (\n <div\n key={entry.label}\n className=\"flex items-center justify-between gap-3 px-3 py-1.5\"\n >\n <div className=\"flex flex-col\">\n <span className=\"text-muted-foreground text-[10px]\">\n {entry.label}\n </span>\n <span className=\"text-foreground text-[12px] font-medium tabular-nums\">\n {entry.format(entry.values[entry.values.length - 1]!)}\n </span>\n </div>\n <Sparkline values={entry.values} className=\"h-6 w-24\" />\n </div>\n ))}\n </PaneHeaderStack>\n );\n }\n\n return titleRow;\n});\n\nexport const Transcript = ({\n thread,\n selection,\n onSelect,\n}: {\n thread: ThreadPreview;\n selection: string | null;\n onSelect: (nodeId: string) => void;\n}) => {\n const selectedRef = useRef<HTMLButtonElement>(null);\n const prevSelectionRef = useRef(selection);\n const handleSelect = useCallback(\n (nodeId: string) => onSelect(nodeId),\n [onSelect],\n );\n\n useEffect(() => {\n if (prevSelectionRef.current === selection) return;\n prevSelectionRef.current = selection;\n selectedRef.current?.scrollIntoView({ block: \"nearest\" });\n }, [selection]);\n\n return (\n <>\n {thread.messages.map((message) => {\n const nodeId = messageNodeId(message.id);\n const selected = selection === nodeId;\n return (\n <TurnRow\n key={message.id}\n message={message}\n nodeId={nodeId}\n selected={selected}\n onSelect={handleSelect}\n rowRef={selected ? selectedRef : undefined}\n />\n );\n })}\n {thread.composer && thread.composer.textLength > 0 ? (\n <GhostComposer composer={thread.composer} />\n ) : null}\n </>\n );\n};\n"],"mappings":"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"}
|
|
@@ -4,9 +4,8 @@ import { ThreadListPreview, ThreadPreview } from "./types.js";
|
|
|
4
4
|
* Picks the thread to show for a selected conversation id, preferring a cached
|
|
5
5
|
* snapshot, then the live main thread, then the single-thread runtime state.
|
|
6
6
|
*/
|
|
7
|
-
declare const resolveThreadForId: (state: Record<string, unknown>, snapshots: Readonly<Record<string, unknown>> | undefined, threadId: string, threadList: ThreadListPreview | null) => ThreadPreview | null;
|
|
7
|
+
export declare const resolveThreadForId: (state: Record<string, unknown>, snapshots: Readonly<Record<string, unknown>> | undefined, threadId: string, threadList: ThreadListPreview | null) => ThreadPreview | null;
|
|
8
8
|
/** Picks the thread to show when the runtime exposes no conversation list. */
|
|
9
|
-
declare const resolveSingleThread: (state: Record<string, unknown>) => ThreadPreview | null;
|
|
9
|
+
export declare const resolveSingleThread: (state: Record<string, unknown>) => ThreadPreview | null;
|
|
10
10
|
//#endregion
|
|
11
|
-
export { resolveSingleThread, resolveThreadForId };
|
|
12
11
|
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.d.ts","names":[],"sources":["../../../src/views/thread/resolve.ts"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","names":[],"sources":["../../../src/views/thread/resolve.ts"],"mappings":";;;;;;qBAOa,qBACX,OAAO,yBACP,WAAW,SAAS,sCACpB,kBACA,YAAY,6BACX;;qBAeU,sBACX,OAAO,4BACN"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AttachmentPreview } from "../attachments/types.js";
|
|
2
2
|
import { MessagePreview } from "../message/types.js";
|
|
3
3
|
//#region src/views/thread/types.d.ts
|
|
4
|
-
interface ThreadListItemPreview {
|
|
4
|
+
export interface ThreadListItemPreview {
|
|
5
5
|
id: string;
|
|
6
6
|
title?: string;
|
|
7
7
|
status?: string;
|
|
@@ -9,14 +9,14 @@ interface ThreadListItemPreview {
|
|
|
9
9
|
remoteId?: string;
|
|
10
10
|
lastMessageAt?: string;
|
|
11
11
|
}
|
|
12
|
-
interface SuggestionPreview {
|
|
12
|
+
export interface SuggestionPreview {
|
|
13
13
|
prompt?: string;
|
|
14
14
|
}
|
|
15
|
-
interface ComposerQueueItem {
|
|
15
|
+
export interface ComposerQueueItem {
|
|
16
16
|
id?: string;
|
|
17
17
|
prompt: string;
|
|
18
18
|
}
|
|
19
|
-
interface ComposerPreview {
|
|
19
|
+
export interface ComposerPreview {
|
|
20
20
|
textLength: number;
|
|
21
21
|
role?: string;
|
|
22
22
|
attachments: AttachmentPreview[];
|
|
@@ -27,7 +27,7 @@ interface ComposerPreview {
|
|
|
27
27
|
type?: string;
|
|
28
28
|
queue: ComposerQueueItem[];
|
|
29
29
|
}
|
|
30
|
-
interface ThreadPreview {
|
|
30
|
+
export interface ThreadPreview {
|
|
31
31
|
isDisabled?: boolean;
|
|
32
32
|
isLoading?: boolean;
|
|
33
33
|
isRunning?: boolean;
|
|
@@ -36,7 +36,7 @@ interface ThreadPreview {
|
|
|
36
36
|
capabilities: string[];
|
|
37
37
|
composer?: ComposerPreview;
|
|
38
38
|
}
|
|
39
|
-
interface ThreadListPreview {
|
|
39
|
+
export interface ThreadListPreview {
|
|
40
40
|
mainThreadId?: string;
|
|
41
41
|
newThreadId?: string | null;
|
|
42
42
|
threadIds: string[];
|
|
@@ -45,5 +45,5 @@ interface ThreadListPreview {
|
|
|
45
45
|
main?: ThreadPreview;
|
|
46
46
|
}
|
|
47
47
|
//#endregion
|
|
48
|
-
export {
|
|
48
|
+
export type { AttachmentPreview };
|
|
49
49
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/views/thread/types.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/views/thread/types.ts"],"mappings":";;;iBAKiB;EACf;EACA;EACA;EACA;EACA;EACA;;iBAGe;EACf;;iBAGe;EACf;EACA;;iBAGe;EACf;EACA;EACA,aAAa;EACb;EACA;EACA;EACA;EACA;EACA,OAAO;;iBAGQ;EACf;EACA;EACA;EACA,UAAU;EACV,aAAa;EACb;EACA,WAAW;;iBAGI;EACf;EACA;EACA;EACA;EACA,aAAa;EACb,OAAO"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { ComposerPreview, ThreadListItemPreview, ThreadListPreview, ThreadPreview } from "./types.js";
|
|
2
2
|
//#region src/views/thread/utils.d.ts
|
|
3
|
-
declare const parseComposerPreview: (value: unknown) => ComposerPreview | undefined;
|
|
4
|
-
declare const parseThreadListItemPreview: (value: unknown) => ThreadListItemPreview | null;
|
|
5
|
-
declare const parseThreadPreview: (value: unknown) => ThreadPreview | null;
|
|
6
|
-
declare const parseThreadListPreview: (value: unknown) => ThreadListPreview | null;
|
|
3
|
+
export declare const parseComposerPreview: (value: unknown) => ComposerPreview | undefined;
|
|
4
|
+
export declare const parseThreadListItemPreview: (value: unknown) => ThreadListItemPreview | null;
|
|
5
|
+
export declare const parseThreadPreview: (value: unknown) => ThreadPreview | null;
|
|
6
|
+
export declare const parseThreadListPreview: (value: unknown) => ThreadListPreview | null;
|
|
7
7
|
//#endregion
|
|
8
|
-
export { parseComposerPreview, parseThreadListItemPreview, parseThreadListPreview, parseThreadPreview };
|
|
9
8
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","names":[],"sources":["../../../src/views/thread/utils.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","names":[],"sources":["../../../src/views/thread/utils.ts"],"mappings":";;qBAmBa,uBACX,mBACC;qBAyCU,6BACX,mBACC;qBAmBU,qBAAsB,mBAAiB;qBAsCvC,yBACX,mBACC"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { ReactNode } from "react";
|
|
2
2
|
//#region src/views/ui/CenteredMessage.d.ts
|
|
3
|
-
declare const CenteredMessage: ({ children }: {
|
|
3
|
+
export declare const CenteredMessage: ({ children }: {
|
|
4
4
|
children: ReactNode;
|
|
5
5
|
}) => import("react").JSX.Element;
|
|
6
6
|
//#endregion
|
|
7
|
-
export { CenteredMessage };
|
|
8
7
|
//# sourceMappingURL=CenteredMessage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CenteredMessage.d.ts","names":[],"sources":["../../../src/views/ui/CenteredMessage.tsx"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"CenteredMessage.d.ts","names":[],"sources":["../../../src/views/ui/CenteredMessage.tsx"],"mappings":";;qBAEa,oBAAmB;EAAgB,UAAU;sBAAW,IAAA"}
|
package/dist/views/ui/Chip.d.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { ReactNode } from "react";
|
|
2
2
|
//#region src/views/ui/Chip.d.ts
|
|
3
|
-
declare const Chip: ({ className, children }: {
|
|
3
|
+
export declare const Chip: ({ className, children }: {
|
|
4
4
|
className?: string | undefined;
|
|
5
5
|
children: ReactNode;
|
|
6
6
|
}) => import("react").JSX.Element;
|
|
7
7
|
//#endregion
|
|
8
|
-
export { Chip };
|
|
9
8
|
//# sourceMappingURL=Chip.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chip.d.ts","names":[],"sources":["../../../src/views/ui/Chip.tsx"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"Chip.d.ts","names":[],"sources":["../../../src/views/ui/Chip.tsx"],"mappings":";;qBAIa,SAAQ,WAAA;EAInB;EACA,UAAU;sBACX,IAAA"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { ButtonHTMLAttributes } from "react";
|
|
2
2
|
//#region src/views/ui/ControlButton.d.ts
|
|
3
|
-
declare const ControlButton: ({ className, ...props }: ButtonHTMLAttributes<HTMLButtonElement>) => import("react").JSX.Element;
|
|
3
|
+
export declare const ControlButton: ({ className, ...props }: ButtonHTMLAttributes<HTMLButtonElement>) => import("react").JSX.Element;
|
|
4
4
|
//#endregion
|
|
5
|
-
export { ControlButton };
|
|
6
5
|
//# sourceMappingURL=ControlButton.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ControlButton.d.ts","names":[],"sources":["../../../src/views/ui/ControlButton.tsx"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"ControlButton.d.ts","names":[],"sources":["../../../src/views/ui/ControlButton.tsx"],"mappings":";;qBAGa,kBAAiB,cAAA,SAG3B,qBAAqB,uCAAkB,IAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
//#region src/views/ui/CopyButton.d.ts
|
|
2
|
-
declare const CopyButton: ({ value, label, copiedLabel, className, iconOnly, size }: {
|
|
3
|
-
value: string;
|
|
2
|
+
export declare const CopyButton: ({ value, label, copiedLabel, className, iconOnly, size }: {
|
|
3
|
+
value: string | (() => string);
|
|
4
4
|
label?: string;
|
|
5
5
|
copiedLabel?: string;
|
|
6
6
|
className?: string | undefined;
|
|
@@ -8,5 +8,4 @@ declare const CopyButton: ({ value, label, copiedLabel, className, iconOnly, siz
|
|
|
8
8
|
size?: "default" | "sm";
|
|
9
9
|
}) => import("react").JSX.Element;
|
|
10
10
|
//#endregion
|
|
11
|
-
export { CopyButton };
|
|
12
11
|
//# sourceMappingURL=CopyButton.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CopyButton.d.ts","names":[],"sources":["../../../src/views/ui/CopyButton.tsx"],"mappings":";
|
|
1
|
+
{"version":3,"file":"CopyButton.d.ts","names":[],"sources":["../../../src/views/ui/CopyButton.tsx"],"mappings":";qBA6Ba,eAAc,OAAA,OAAA,aAAA,WAAA,UAAA;EAQzB;EACA;EACA;EACA;EACA;EACA;sBACD,IAAA"}
|
|
@@ -56,11 +56,11 @@ const CopyButton = (t0) => {
|
|
|
56
56
|
const { isCopied, copy } = useCopyToClipboard();
|
|
57
57
|
let t5;
|
|
58
58
|
if ($[0] !== value) {
|
|
59
|
-
t5 = value.trim();
|
|
59
|
+
t5 = typeof value === "string" && !value.trim();
|
|
60
60
|
$[0] = value;
|
|
61
61
|
$[1] = t5;
|
|
62
62
|
} else t5 = $[1];
|
|
63
|
-
const empty =
|
|
63
|
+
const empty = t5;
|
|
64
64
|
const iconPx = size === "sm" ? 10 : 12;
|
|
65
65
|
const t6 = isCopied ? copiedLabel : label;
|
|
66
66
|
const t7 = isCopied ? copiedLabel : label;
|
|
@@ -68,7 +68,7 @@ const CopyButton = (t0) => {
|
|
|
68
68
|
if ($[2] !== copy || $[3] !== value) {
|
|
69
69
|
t8 = (event) => {
|
|
70
70
|
event.stopPropagation();
|
|
71
|
-
copy(value);
|
|
71
|
+
copy(typeof value === "function" ? value() : value);
|
|
72
72
|
};
|
|
73
73
|
$[2] = copy;
|
|
74
74
|
$[3] = value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CopyButton.js","names":["clsx","useCopyToClipboard","ClipboardIcon","t0","$","_c","size","t1","undefined","t2","t3","Symbol","for","t4","CopyButton","value","label","copiedLabel","className","iconOnly","isCopied","copy","t5","trim","empty","iconPx","t6","t7","t8","event","stopPropagation","t9","t10","t11","t12","t13"],"sources":["../../../src/views/ui/CopyButton.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport { useCopyToClipboard } from \"./useCopyToClipboard\";\n\nconst ClipboardIcon = ({ size = 12 }: { size?: number }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <rect\n x=\"9\"\n y=\"9\"\n width=\"11\"\n height=\"11\"\n rx=\"1.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n />\n <path\n d=\"M7 15H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h7a2 2 0 0 1 2 2v1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n />\n </svg>\n);\n\nexport const CopyButton = ({\n value,\n label = \"Copy\",\n copiedLabel = \"Copied\",\n className,\n iconOnly = false,\n size = \"default\",\n}: {\n value: string;\n label?: string;\n copiedLabel?: string;\n className?: string | undefined;\n iconOnly?: boolean;\n size?: \"default\" | \"sm\";\n}) => {\n const { isCopied, copy } = useCopyToClipboard();\n const empty = !value.trim();\n const iconPx = size === \"sm\" ? 10 : 12;\n\n return (\n <button\n type=\"button\"\n disabled={empty}\n aria-label={isCopied ? copiedLabel : label}\n title={isCopied ? copiedLabel : label}\n onClick={(event) => {\n event.stopPropagation();\n copy(value);\n }}\n className={clsx(\n \"text-muted-foreground hover:text-foreground inline-flex shrink-0 items-center justify-center rounded transition-colors disabled:pointer-events-none disabled:opacity-40\",\n iconOnly\n ? size === \"sm\"\n ? \"hover:bg-accent/60 size-4\"\n : \"hover:bg-accent/60 size-6\"\n : \"hover:bg-accent/60 h-6 gap-1 px-1.5 text-[10px] font-medium\",\n className,\n )}\n >\n <ClipboardIcon size={iconPx} />\n {!iconOnly ? <span>{isCopied ? copiedLabel : label}</span> : null}\n </button>\n );\n};\n"],"mappings":";;;;;AAGA,MAAME,iBAAgBC,OAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CAAC,MAAA,EAAAC,MAAAC,OAAAJ;CAAE,MAAAG,OAAAC,OAAAC,KAAAA,IAAA,KAAAD;CAAS,IAAAE;CAAA,IAAAC;CAAA,IAAAN,EAAA,OAAAO,OAAAC,IAAA,2BAAA,GAAA;EAQ9BH,KAAA,oBAAA,QAAA;GACI,GAAA;GACA,GAAA;GACI,OAAA;GACC,QAAA;GACJ,IAAA;GACI,QAAA;GACK,aAAA;EAAM,CAAA;EAEpBC,KAAA,oBAAA,QAAA;GACI,GAAA;GACK,QAAA;GACK,aAAA;GACE,eAAA;EAAO,CAAA;EACrBN,EAAA,KAAAK;EAAAL,EAAA,KAAAM;CAAA,OAAA;EAAAD,KAAAL,EAAA;EAAAM,KAAAN,EAAA;CAAA;CAAA,IAAAS;CAAA,IAAAT,EAAA,OAAAE,MAAA;EArBJO,KAAA,qBAAA,OAAA;GACSP,OAAAA;GACCA,QAAAA;GACA,SAAA;GACH,MAAA;GACO,eAAA;GALd,UAAA,CAOEG,IASAC,EAMI;;EAAAN,EAAA,KAAAE;EAAAF,EAAA,KAAAS;CAAA,OAAAA,KAAAT,EAAA;CAAA,OAtBNS;AAsBM;AAGR,MAAaC,cAAaX,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAC,MAAA,EAAAU,OAAAC,OAAAT,IAAAU,aAAAR,IAAAS,WAAAC,UAAAT,IAAAJ,MAAAO,OAAAV;CAEzB,MAAAa,QAAAT,OAAAC,KAAAA,IAAA,SAAAD;CACA,MAAAU,cAAAR,OAAAD,KAAAA,IAAA,WAAAC;CAEA,MAAAU,WAAAT,OAAAF,KAAAA,IAAA,QAAAE;CACA,MAAAJ,OAAAO,OAAAL,KAAAA,IAAA,YAAAK;CASA,MAAA,EAAAO,UAAAC,SAA2BpB,mBAAmB;CAAE,IAAAqB;CAAA,IAAAlB,EAAA,OAAAW,OAAA;
|
|
1
|
+
{"version":3,"file":"CopyButton.js","names":["clsx","useCopyToClipboard","ClipboardIcon","t0","$","_c","size","t1","undefined","t2","t3","Symbol","for","t4","CopyButton","value","label","copiedLabel","className","iconOnly","isCopied","copy","t5","trim","empty","iconPx","t6","t7","t8","event","stopPropagation","t9","t10","t11","t12","t13"],"sources":["../../../src/views/ui/CopyButton.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport { useCopyToClipboard } from \"./useCopyToClipboard\";\n\nconst ClipboardIcon = ({ size = 12 }: { size?: number }) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <rect\n x=\"9\"\n y=\"9\"\n width=\"11\"\n height=\"11\"\n rx=\"1.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n />\n <path\n d=\"M7 15H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h7a2 2 0 0 1 2 2v1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n />\n </svg>\n);\n\nexport const CopyButton = ({\n value,\n label = \"Copy\",\n copiedLabel = \"Copied\",\n className,\n iconOnly = false,\n size = \"default\",\n}: {\n value: string | (() => string);\n label?: string;\n copiedLabel?: string;\n className?: string | undefined;\n iconOnly?: boolean;\n size?: \"default\" | \"sm\";\n}) => {\n const { isCopied, copy } = useCopyToClipboard();\n const empty = typeof value === \"string\" && !value.trim();\n const iconPx = size === \"sm\" ? 10 : 12;\n\n return (\n <button\n type=\"button\"\n disabled={empty}\n aria-label={isCopied ? copiedLabel : label}\n title={isCopied ? copiedLabel : label}\n onClick={(event) => {\n event.stopPropagation();\n copy(typeof value === \"function\" ? value() : value);\n }}\n className={clsx(\n \"text-muted-foreground hover:text-foreground inline-flex shrink-0 items-center justify-center rounded transition-colors disabled:pointer-events-none disabled:opacity-40\",\n iconOnly\n ? size === \"sm\"\n ? \"hover:bg-accent/60 size-4\"\n : \"hover:bg-accent/60 size-6\"\n : \"hover:bg-accent/60 h-6 gap-1 px-1.5 text-[10px] font-medium\",\n className,\n )}\n >\n <ClipboardIcon size={iconPx} />\n {!iconOnly ? <span>{isCopied ? copiedLabel : label}</span> : null}\n </button>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { ReactNode } from "react";
|
|
2
2
|
//#region src/views/ui/EmptyState.d.ts
|
|
3
|
-
declare const EmptyState: ({ children }: {
|
|
3
|
+
export declare const EmptyState: ({ children }: {
|
|
4
4
|
children: ReactNode;
|
|
5
5
|
}) => import("react").JSX.Element;
|
|
6
6
|
//#endregion
|
|
7
|
-
export { EmptyState };
|
|
8
7
|
//# sourceMappingURL=EmptyState.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmptyState.d.ts","names":[],"sources":["../../../src/views/ui/EmptyState.tsx"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"EmptyState.d.ts","names":[],"sources":["../../../src/views/ui/EmptyState.tsx"],"mappings":";;qBAEa,eAAc;EAAgB,UAAU;sBAAW,IAAA"}
|
|
@@ -5,12 +5,11 @@ import { ReactNode } from "react";
|
|
|
5
5
|
* content. No box, no nesting; sections are separated by whitespace on the
|
|
6
6
|
* panel surface.
|
|
7
7
|
*/
|
|
8
|
-
declare const InfoCard: ({ title, count, action, children }: {
|
|
8
|
+
export declare const InfoCard: ({ title, count, action, children }: {
|
|
9
9
|
title?: ReactNode;
|
|
10
10
|
count?: ReactNode;
|
|
11
11
|
action?: ReactNode;
|
|
12
12
|
children: ReactNode;
|
|
13
13
|
}) => import("react").JSX.Element;
|
|
14
14
|
//#endregion
|
|
15
|
-
export { InfoCard };
|
|
16
15
|
//# sourceMappingURL=InfoCard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InfoCard.d.ts","names":[],"sources":["../../../src/views/ui/InfoCard.tsx"],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"InfoCard.d.ts","names":[],"sources":["../../../src/views/ui/InfoCard.tsx"],"mappings":";;;;;;;qBAOa,aAAY,OAAA,OAAA,QAAA;EAMvB,QAAQ;EACR,QAAQ;EACR,SAAS;EACT,UAAU;sBACX,IAAA"}
|
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Recursive JSON view. `compact` fits tool rows; copy always provides formatted JSON.
|
|
4
4
|
*/
|
|
5
|
-
declare const JSONTree: ({ value, openDepth, compact }: {
|
|
5
|
+
export declare const JSONTree: ({ value, openDepth, compact }: {
|
|
6
6
|
value: unknown;
|
|
7
7
|
openDepth?: number;
|
|
8
8
|
compact?: boolean;
|
|
9
9
|
}) => import("react").JSX.Element;
|
|
10
10
|
//#endregion
|
|
11
|
-
export { JSONTree };
|
|
12
11
|
//# sourceMappingURL=JSONTree.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JSONTree.d.ts","names":[],"sources":["../../../src/views/ui/JSONTree.tsx"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"JSONTree.d.ts","names":[],"sources":["../../../src/views/ui/JSONTree.tsx"],"mappings":";;;;qBA0Ma,aAAY,OAAA,WAAA;EAKvB;EACA;EACA;sBACD,IAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CopyButton } from "./CopyButton.js";
|
|
2
|
+
import { getInlineJson } from "./getInlineJson.js";
|
|
2
3
|
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
3
4
|
import { useState } from "@assistant-ui/tap/react-shim";
|
|
4
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -7,26 +8,17 @@ import clsx from "clsx";
|
|
|
7
8
|
const ENTRY_LIMIT = 100;
|
|
8
9
|
const INLINE_MAX = 88;
|
|
9
10
|
const isContainer = (value) => value !== null && typeof value === "object";
|
|
10
|
-
const entriesOf = (value) => {
|
|
11
|
-
if (Array.isArray(value)) return value.map((item, index) => ({
|
|
11
|
+
const entriesOf = (value, keys, limit) => {
|
|
12
|
+
if (Array.isArray(value)) return value.slice(0, limit).map((item, index) => ({
|
|
12
13
|
key: String(index),
|
|
13
14
|
value: item
|
|
14
15
|
}));
|
|
15
|
-
return
|
|
16
|
+
return keys.slice(0, limit).map((key) => ({
|
|
16
17
|
key,
|
|
17
|
-
value
|
|
18
|
+
value: value[key]
|
|
18
19
|
}));
|
|
19
20
|
};
|
|
20
|
-
const summaryOf = (value) => {
|
|
21
|
-
if (Array.isArray(value)) return `[${value.length}]`;
|
|
22
|
-
return `{${Object.keys(value).length}}`;
|
|
23
|
-
};
|
|
24
21
|
const serialize = (value, compact) => JSON.stringify(value, null, compact ? 0 : 2);
|
|
25
|
-
const isInline = (value, compact) => {
|
|
26
|
-
if (!compact) return false;
|
|
27
|
-
if (!isContainer(value)) return true;
|
|
28
|
-
return serialize(value, true).length <= INLINE_MAX;
|
|
29
|
-
};
|
|
30
22
|
const Leaf = (t0) => {
|
|
31
23
|
const $ = c(6);
|
|
32
24
|
const { value } = t0;
|
|
@@ -72,7 +64,7 @@ const Leaf = (t0) => {
|
|
|
72
64
|
return t2;
|
|
73
65
|
};
|
|
74
66
|
const TreeNode = (t0) => {
|
|
75
|
-
const $ = c(
|
|
67
|
+
const $ = c(34);
|
|
76
68
|
const { name, value, depth, openDepth, compact } = t0;
|
|
77
69
|
const [open, setOpen] = useState(depth < openDepth);
|
|
78
70
|
const [showAll, setShowAll] = useState(false);
|
|
@@ -114,9 +106,10 @@ const TreeNode = (t0) => {
|
|
|
114
106
|
}
|
|
115
107
|
let t1;
|
|
116
108
|
if ($[10] !== compact || $[11] !== depth || $[12] !== name || $[13] !== open || $[14] !== openDepth || $[15] !== showAll || $[16] !== value) {
|
|
117
|
-
const
|
|
118
|
-
const
|
|
119
|
-
const
|
|
109
|
+
const keys = Array.isArray(value) ? [] : Object.keys(value);
|
|
110
|
+
const count = Array.isArray(value) ? value.length : keys.length;
|
|
111
|
+
const shown = open ? entriesOf(value, keys, showAll ? count : ENTRY_LIMIT) : [];
|
|
112
|
+
const hidden = count - shown.length;
|
|
120
113
|
let t2;
|
|
121
114
|
if ($[18] === Symbol.for("react.memo_cache_sentinel")) {
|
|
122
115
|
t2 = () => setOpen(_temp);
|
|
@@ -151,23 +144,18 @@ const TreeNode = (t0) => {
|
|
|
151
144
|
$[25] = name;
|
|
152
145
|
$[26] = t8;
|
|
153
146
|
} else t8 = $[26];
|
|
154
|
-
|
|
155
|
-
if ($[27] !== value) {
|
|
156
|
-
t9 = summaryOf(value);
|
|
157
|
-
$[27] = value;
|
|
158
|
-
$[28] = t9;
|
|
159
|
-
} else t9 = $[28];
|
|
147
|
+
const t9 = Array.isArray(value) ? `[${count}]` : `{${count}}`;
|
|
160
148
|
let t10;
|
|
161
|
-
if ($[
|
|
149
|
+
if ($[27] !== t9) {
|
|
162
150
|
t10 = /* @__PURE__ */ jsx("span", {
|
|
163
151
|
className: "opacity-60",
|
|
164
152
|
children: t9
|
|
165
153
|
});
|
|
166
|
-
$[
|
|
167
|
-
$[
|
|
168
|
-
} else t10 = $[
|
|
154
|
+
$[27] = t9;
|
|
155
|
+
$[28] = t10;
|
|
156
|
+
} else t10 = $[28];
|
|
169
157
|
let t11;
|
|
170
|
-
if ($[
|
|
158
|
+
if ($[29] !== t10 || $[30] !== t4 || $[31] !== t7 || $[32] !== t8) {
|
|
171
159
|
t11 = /* @__PURE__ */ jsxs("button", {
|
|
172
160
|
type: "button",
|
|
173
161
|
onClick: t2,
|
|
@@ -178,12 +166,12 @@ const TreeNode = (t0) => {
|
|
|
178
166
|
t10
|
|
179
167
|
]
|
|
180
168
|
});
|
|
181
|
-
$[
|
|
182
|
-
$[
|
|
183
|
-
$[
|
|
184
|
-
$[
|
|
185
|
-
$[
|
|
186
|
-
} else t11 = $[
|
|
169
|
+
$[29] = t10;
|
|
170
|
+
$[30] = t4;
|
|
171
|
+
$[31] = t7;
|
|
172
|
+
$[32] = t8;
|
|
173
|
+
$[33] = t11;
|
|
174
|
+
} else t11 = $[33];
|
|
187
175
|
t1 = /* @__PURE__ */ jsxs("div", {
|
|
188
176
|
className: "min-w-0",
|
|
189
177
|
children: [t11, open ? /* @__PURE__ */ jsxs("div", {
|
|
@@ -326,64 +314,55 @@ const TreeWithCopy = (t0) => {
|
|
|
326
314
|
* Recursive JSON view. `compact` fits tool rows; copy always provides formatted JSON.
|
|
327
315
|
*/
|
|
328
316
|
const JSONTree = (t0) => {
|
|
329
|
-
const $ = c(
|
|
317
|
+
const $ = c(14);
|
|
330
318
|
const { value, openDepth: t1, compact: t2 } = t0;
|
|
331
319
|
const openDepth = t1 === void 0 ? 1 : t1;
|
|
332
320
|
const compact = t2 === void 0 ? false : t2;
|
|
333
321
|
let t3;
|
|
334
322
|
if ($[0] !== compact || $[1] !== value) {
|
|
335
|
-
t3 =
|
|
323
|
+
t3 = !isContainer(value) ? serialize(value, compact) : compact ? getInlineJson(value, INLINE_MAX) : void 0;
|
|
336
324
|
$[0] = compact;
|
|
337
325
|
$[1] = value;
|
|
338
326
|
$[2] = t3;
|
|
339
327
|
} else t3 = $[2];
|
|
340
|
-
const
|
|
328
|
+
const serialized = t3;
|
|
341
329
|
let t4;
|
|
342
|
-
if ($[3] !==
|
|
343
|
-
t4 =
|
|
344
|
-
$[3] =
|
|
345
|
-
$[4] =
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
t5 = JSON.stringify(value, null, 2);
|
|
353
|
-
$[7] = value;
|
|
354
|
-
$[8] = t5;
|
|
355
|
-
} else t5 = $[8];
|
|
356
|
-
const copyText = t5;
|
|
357
|
-
if (isLeaf) {
|
|
358
|
-
let t6;
|
|
359
|
-
if ($[9] !== compact || $[10] !== copyText || $[11] !== serialized) {
|
|
360
|
-
t6 = /* @__PURE__ */ jsx(InlineJson, {
|
|
330
|
+
if ($[3] !== value) {
|
|
331
|
+
t4 = () => JSON.stringify(value, null, 2);
|
|
332
|
+
$[3] = value;
|
|
333
|
+
$[4] = t4;
|
|
334
|
+
} else t4 = $[4];
|
|
335
|
+
const copyText = t4;
|
|
336
|
+
if (serialized !== void 0) {
|
|
337
|
+
let t5;
|
|
338
|
+
if ($[5] !== compact || $[6] !== copyText || $[7] !== serialized) {
|
|
339
|
+
t5 = /* @__PURE__ */ jsx(InlineJson, {
|
|
361
340
|
serialized,
|
|
362
341
|
copyText,
|
|
363
342
|
compact
|
|
364
343
|
});
|
|
365
|
-
$[
|
|
366
|
-
$[
|
|
367
|
-
$[
|
|
368
|
-
$[
|
|
369
|
-
} else
|
|
370
|
-
return
|
|
344
|
+
$[5] = compact;
|
|
345
|
+
$[6] = copyText;
|
|
346
|
+
$[7] = serialized;
|
|
347
|
+
$[8] = t5;
|
|
348
|
+
} else t5 = $[8];
|
|
349
|
+
return t5;
|
|
371
350
|
}
|
|
372
|
-
let
|
|
373
|
-
if ($[
|
|
374
|
-
|
|
351
|
+
let t5;
|
|
352
|
+
if ($[9] !== compact || $[10] !== copyText || $[11] !== openDepth || $[12] !== value) {
|
|
353
|
+
t5 = /* @__PURE__ */ jsx(TreeWithCopy, {
|
|
375
354
|
value,
|
|
376
355
|
openDepth,
|
|
377
356
|
copyText,
|
|
378
357
|
compact
|
|
379
358
|
});
|
|
380
|
-
$[
|
|
381
|
-
$[
|
|
382
|
-
$[
|
|
383
|
-
$[
|
|
384
|
-
$[
|
|
385
|
-
} else
|
|
386
|
-
return
|
|
359
|
+
$[9] = compact;
|
|
360
|
+
$[10] = copyText;
|
|
361
|
+
$[11] = openDepth;
|
|
362
|
+
$[12] = value;
|
|
363
|
+
$[13] = t5;
|
|
364
|
+
} else t5 = $[13];
|
|
365
|
+
return t5;
|
|
387
366
|
};
|
|
388
367
|
function _temp(prev) {
|
|
389
368
|
return !prev;
|