@anvia/studio 1.0.13 → 1.0.14

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.
Files changed (26) hide show
  1. package/dist/ui/assets/graphs-page-D2jzO23K.js +2 -0
  2. package/dist/ui/assets/graphs-page-D2jzO23K.js.map +1 -0
  3. package/dist/ui/assets/{index-DWBW14h1.js → index-C0DKDUvj.js} +3 -3
  4. package/dist/ui/assets/{index-DWBW14h1.js.map → index-C0DKDUvj.js.map} +1 -1
  5. package/dist/ui/assets/{knowledge-page-1WgvGV4f.js → knowledge-page-BSI_VDOp.js} +2 -2
  6. package/dist/ui/assets/{knowledge-page-1WgvGV4f.js.map → knowledge-page-BSI_VDOp.js.map} +1 -1
  7. package/dist/ui/assets/{mcps-page-BV96jSfG.js → mcps-page-BL1FLksQ.js} +2 -2
  8. package/dist/ui/assets/{mcps-page-BV96jSfG.js.map → mcps-page-BL1FLksQ.js.map} +1 -1
  9. package/dist/ui/assets/{memory-page-DxClkjRl.js → memory-page-C20w55ut.js} +2 -2
  10. package/dist/ui/assets/{memory-page-DxClkjRl.js.map → memory-page-C20w55ut.js.map} +1 -1
  11. package/dist/ui/assets/{pipelines-page-ClO_uXn1.js → pipelines-page-BPCS5mwc.js} +2 -2
  12. package/dist/ui/assets/{pipelines-page-ClO_uXn1.js.map → pipelines-page-BPCS5mwc.js.map} +1 -1
  13. package/dist/ui/assets/{renderers-Cf55u6J4.js → renderers-CfrpUrJr.js} +2 -2
  14. package/dist/ui/assets/{renderers-Cf55u6J4.js.map → renderers-CfrpUrJr.js.map} +1 -1
  15. package/dist/ui/assets/{status-page-Ys5dQyMG.js → status-page-B-57_iOR.js} +2 -2
  16. package/dist/ui/assets/{status-page-Ys5dQyMG.js.map → status-page-B-57_iOR.js.map} +1 -1
  17. package/dist/ui/assets/{tool-runner-Cwfc3yY8.js → tool-runner-DcuNII62.js} +2 -2
  18. package/dist/ui/assets/{tool-runner-Cwfc3yY8.js.map → tool-runner-DcuNII62.js.map} +1 -1
  19. package/dist/ui/assets/{tools-page-BSgFqVi2.js → tools-page-D4wQGPOl.js} +2 -2
  20. package/dist/ui/assets/{tools-page-BSgFqVi2.js.map → tools-page-D4wQGPOl.js.map} +1 -1
  21. package/dist/ui/assets/{transcript-item-ChVGempt.js → transcript-item-B6OLwa1p.js} +2 -2
  22. package/dist/ui/assets/{transcript-item-ChVGempt.js.map → transcript-item-B6OLwa1p.js.map} +1 -1
  23. package/dist/ui/index.html +1 -1
  24. package/package.json +5 -5
  25. package/dist/ui/assets/graphs-page-ne3dJIrx.js +0 -2
  26. package/dist/ui/assets/graphs-page-ne3dJIrx.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tools-page-BSgFqVi2.js","names":[],"sources":["../../../src/ui/app/modules/tools/tools-page.tsx"],"sourcesContent":["import { type ReactNode, useEffect, useMemo, useRef, useState } from \"react\";\nimport type {\n StudioAgentToolMetadata,\n StudioAgentToolsSummary,\n StudioConfig,\n StudioToolRunResponse,\n} from \"../../../../types\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../components/ui/select\";\nimport {\n StudioEmptyState,\n StudioHeaderMetric,\n StudioPageContent,\n StudioPageHeader,\n StudioPageShell,\n} from \"../../components/ui/studio\";\nimport {\n approvalBadgeClass,\n formatJson,\n originBadgeClass,\n parseStudioToolRunResponse,\n schemaPropertyCount,\n schemaType,\n ToolMetaPill,\n ToolRunner,\n toolOriginLabel,\n} from \"./tool-runner\";\n\nexport function ToolsPage(props: {\n agents: StudioConfig[\"agents\"];\n selectedAgentId: string;\n summary: StudioAgentToolsSummary | undefined;\n enabled: boolean;\n loading: boolean;\n onSelectAgent: (agentId: string) => void;\n}) {\n const selectedAgent =\n props.agents.find((agent) => agent.id === props.selectedAgentId) ?? props.agents[0];\n const tools = useMemo(() => props.summary?.tools ?? [], [props.summary]);\n const [selectedToolName, setSelectedToolName] = useState(\"\");\n const [argsText, setArgsText] = useState(\"{}\");\n const [runState, setRunState] = useState<\"idle\" | \"running\">(\"idle\");\n const [runResponse, setRunResponse] = useState<StudioToolRunResponse | undefined>();\n const [runError, setRunError] = useState(\"\");\n const selectedTool = useMemo(\n () => tools.find((tool) => tool.name === selectedToolName) ?? tools[0],\n [selectedToolName, tools],\n );\n const selectedToolRunKey =\n selectedAgent === undefined || selectedTool === undefined\n ? \"\"\n : `${selectedAgent.id}:${selectedTool.name}`;\n const selectedToolRunKeyRef = useRef(selectedToolRunKey);\n const runRequestIdRef = useRef(0);\n const toolTotals = summarizeTools(tools);\n\n useEffect(() => {\n if (tools.length === 0) {\n setSelectedToolName(\"\");\n return;\n }\n if (!tools.some((tool) => tool.name === selectedToolName)) {\n setSelectedToolName(tools[0]?.name ?? \"\");\n }\n }, [selectedToolName, tools]);\n\n useEffect(() => {\n if (selectedToolRunKeyRef.current === selectedToolRunKey) {\n return;\n }\n selectedToolRunKeyRef.current = selectedToolRunKey;\n runRequestIdRef.current += 1;\n setRunState(\"idle\");\n setRunError(\"\");\n setRunResponse(undefined);\n }, [selectedToolRunKey]);\n\n async function runSelectedTool() {\n if (selectedAgent === undefined || selectedTool === undefined) {\n return;\n }\n let args: unknown;\n try {\n args = JSON.parse(argsText);\n } catch (parseError) {\n setRunError(parseError instanceof Error ? parseError.message : String(parseError));\n setRunResponse(undefined);\n return;\n }\n\n setRunState(\"running\");\n setRunError(\"\");\n setRunResponse(undefined);\n const runToolKey = selectedToolRunKey;\n const requestId = runRequestIdRef.current + 1;\n runRequestIdRef.current = requestId;\n const isCurrentRun = () =>\n runRequestIdRef.current === requestId && selectedToolRunKeyRef.current === runToolKey;\n try {\n const response = await fetch(\n `/agents/${encodeURIComponent(selectedAgent.id)}/tools/${encodeURIComponent(\n selectedTool.name,\n )}/runs`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ args }),\n },\n );\n const rawBody = await response.json();\n if (!isCurrentRun()) {\n return;\n }\n const body = parseStudioToolRunResponse(rawBody);\n if (body === undefined) {\n setRunError(`Unexpected Studio tool run response: ${formatJson(rawBody)}`);\n return;\n }\n setRunResponse(body);\n if (!response.ok || body.status === \"error\") {\n setRunError(formatJson(body.error ?? body));\n }\n } catch (error) {\n if (isCurrentRun()) {\n setRunError(error instanceof Error ? error.message : String(error));\n }\n } finally {\n if (isCurrentRun()) {\n setRunState(\"idle\");\n }\n }\n }\n\n return (\n <StudioPageShell className=\"grid-rows-[auto_minmax(0,1fr)]\" aria-label=\"Tools\">\n <StudioPageHeader\n title=\"Tools\"\n description=\"Tool definitions registered on Studio agents, including approval policy and input schema.\"\n action={\n <div className=\"flex min-w-0 flex-wrap justify-end gap-2 max-sm:justify-start\">\n <StudioHeaderMetric label=\"tools\" value={toolTotals.total} />\n <StudioHeaderMetric label=\"mcp\" value={toolTotals.mcp} />\n <StudioHeaderMetric label=\"static\" value={toolTotals.static} />\n <StudioHeaderMetric label=\"dynamic\" value={toolTotals.dynamic} />\n <StudioHeaderMetric label=\"approvals\" value={toolTotals.approvals} />\n {props.agents.length > 1 ? (\n <Select value={selectedAgent?.id ?? \"\"} onValueChange={props.onSelectAgent}>\n <SelectTrigger className=\"h-8 min-h-8 w-64 rounded-md border-border text-xs max-sm:w-full\">\n <SelectValue placeholder=\"Agent\" />\n </SelectTrigger>\n <SelectContent align=\"end\">\n {props.agents.map((agent) => (\n <SelectItem value={agent.id} key={agent.id}>\n {agent.name ?? agent.id}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : null}\n </div>\n }\n />\n\n <StudioPageContent className=\"overflow-auto\">\n {!props.enabled ? (\n <StudioEmptyState\n title=\"Tools unavailable\"\n text=\"No registered Studio agent exposes static or dynamic tools.\"\n />\n ) : props.loading ? (\n <StudioEmptyState title=\"Loading tools\" text=\"Reading registered tool metadata.\" />\n ) : tools.length === 0 ? (\n <StudioEmptyState title=\"No tools\" text=\"The selected agent has no registered tools.\" />\n ) : (\n <div className=\"grid w-full gap-5\">\n <ToolRegistryTable\n selectedToolName={selectedTool?.name ?? \"\"}\n tools={tools}\n onSelectTool={setSelectedToolName}\n />\n <ToolRunner\n argsText={argsText}\n runError={runError}\n runResponse={runResponse}\n runState={runState}\n selectedTool={selectedTool}\n onArgsTextChange={setArgsText}\n onRun={() => void runSelectedTool()}\n />\n </div>\n )}\n </StudioPageContent>\n </StudioPageShell>\n );\n}\n\nfunction ToolRegistryTable(props: {\n tools: StudioAgentToolMetadata[];\n selectedToolName: string;\n onSelectTool: (toolName: string) => void;\n}) {\n return (\n <div className=\"min-w-[1040px]\">\n <table className=\"w-full border-separate border-spacing-0 text-left\">\n <thead className=\"sticky top-0 z-10 bg-header backdrop-blur\">\n <tr>\n <ToolTableHead>Tool</ToolTableHead>\n <ToolTableHead>Origin</ToolTableHead>\n <ToolTableHead>Schema</ToolTableHead>\n <ToolTableHead>Approval</ToolTableHead>\n <ToolTableHead>Run</ToolTableHead>\n </tr>\n </thead>\n <tbody>\n {props.tools.map((tool) => (\n <ToolRegistryRow\n active={props.selectedToolName === tool.name}\n key={`${tool.source}:${tool.name}`}\n tool={tool}\n onSelectTool={props.onSelectTool}\n />\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n\nfunction ToolRegistryRow(props: {\n tool: StudioAgentToolMetadata;\n active: boolean;\n onSelectTool: (toolName: string) => void;\n}) {\n const propertyCount = schemaPropertyCount(props.tool.parameters);\n return (\n <tr>\n <ToolTableCell>\n <div className=\"grid min-w-0 gap-1.5\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"min-w-0 truncate text-sm font-semibold text-foreground\">\n {props.tool.name}\n </span>\n {props.active ? <Badge className={selectedBadge}>selected</Badge> : null}\n </div>\n <span className=\"min-w-0 truncate text-xs font-medium text-muted-foreground\">\n {props.tool.agentId}\n </span>\n <p className=\"m-0 max-w-[64ch] truncate text-sm leading-6 text-muted-foreground\">\n {props.tool.description}\n </p>\n </div>\n </ToolTableCell>\n <ToolTableCell>\n <Badge className={originBadgeClass(props.tool)}>{toolOriginLabel(props.tool)}</Badge>\n </ToolTableCell>\n <ToolTableCell>\n <div className=\"flex min-w-0 flex-wrap gap-2\">\n <ToolMetaPill>{schemaType(props.tool.parameters)}</ToolMetaPill>\n <ToolMetaPill>\n {propertyCount} {propertyCount === 1 ? \"field\" : \"fields\"}\n </ToolMetaPill>\n </div>\n </ToolTableCell>\n <ToolTableCell>\n <div className=\"grid min-w-0 gap-1.5\">\n <Badge className={approvalBadgeClass(props.tool.approval.required)}>\n {props.tool.approval.required ? \"required\" : \"none\"}\n </Badge>\n {props.tool.approval.reason === undefined ? null : (\n <span\n className=\"max-w-[280px] truncate text-xs leading-5 text-muted-foreground\"\n title={props.tool.approval.reason}\n >\n {props.tool.approval.reason}\n </span>\n )}\n </div>\n </ToolTableCell>\n <ToolTableCell>\n <Button\n className=\"h-8 min-h-8 rounded-md px-3 text-xs\"\n type=\"button\"\n variant={props.active ? \"secondary\" : \"ghost\"}\n onClick={() => props.onSelectTool(props.tool.name)}\n >\n {props.active ? \"Selected\" : \"Use\"}\n </Button>\n </ToolTableCell>\n </tr>\n );\n}\n\nfunction ToolTableHead(props: { children: string }) {\n return (\n <th className=\"border-b border-hair py-2.5 pr-5 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground first:pl-0\">\n {props.children}\n </th>\n );\n}\n\nfunction ToolTableCell(props: { children: ReactNode }) {\n return (\n <td className=\"border-b border-hair py-3.5 pr-5 align-top first:pl-0\">{props.children}</td>\n );\n}\n\nfunction summarizeTools(tools: StudioAgentToolMetadata[]) {\n return tools.reduce(\n (totals, tool) => {\n totals.total += 1;\n if (tool.source === \"dynamic\") {\n totals.dynamic += 1;\n } else {\n totals.static += 1;\n }\n if (tool.mcpServerName !== undefined) {\n totals.mcp += 1;\n }\n if (tool.approval.required) {\n totals.approvals += 1;\n }\n return totals;\n },\n { approvals: 0, dynamic: 0, mcp: 0, static: 0, total: 0 },\n );\n}\n\nconst selectedBadge = \"border-hair bg-row-selected text-foreground\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"tools-page-D4wQGPOl.js","names":[],"sources":["../../../src/ui/app/modules/tools/tools-page.tsx"],"sourcesContent":["import { type ReactNode, useEffect, useMemo, useRef, useState } from \"react\";\nimport type {\n StudioAgentToolMetadata,\n StudioAgentToolsSummary,\n StudioConfig,\n StudioToolRunResponse,\n} from \"../../../../types\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../components/ui/select\";\nimport {\n StudioEmptyState,\n StudioHeaderMetric,\n StudioPageContent,\n StudioPageHeader,\n StudioPageShell,\n} from \"../../components/ui/studio\";\nimport {\n approvalBadgeClass,\n formatJson,\n originBadgeClass,\n parseStudioToolRunResponse,\n schemaPropertyCount,\n schemaType,\n ToolMetaPill,\n ToolRunner,\n toolOriginLabel,\n} from \"./tool-runner\";\n\nexport function ToolsPage(props: {\n agents: StudioConfig[\"agents\"];\n selectedAgentId: string;\n summary: StudioAgentToolsSummary | undefined;\n enabled: boolean;\n loading: boolean;\n onSelectAgent: (agentId: string) => void;\n}) {\n const selectedAgent =\n props.agents.find((agent) => agent.id === props.selectedAgentId) ?? props.agents[0];\n const tools = useMemo(() => props.summary?.tools ?? [], [props.summary]);\n const [selectedToolName, setSelectedToolName] = useState(\"\");\n const [argsText, setArgsText] = useState(\"{}\");\n const [runState, setRunState] = useState<\"idle\" | \"running\">(\"idle\");\n const [runResponse, setRunResponse] = useState<StudioToolRunResponse | undefined>();\n const [runError, setRunError] = useState(\"\");\n const selectedTool = useMemo(\n () => tools.find((tool) => tool.name === selectedToolName) ?? tools[0],\n [selectedToolName, tools],\n );\n const selectedToolRunKey =\n selectedAgent === undefined || selectedTool === undefined\n ? \"\"\n : `${selectedAgent.id}:${selectedTool.name}`;\n const selectedToolRunKeyRef = useRef(selectedToolRunKey);\n const runRequestIdRef = useRef(0);\n const toolTotals = summarizeTools(tools);\n\n useEffect(() => {\n if (tools.length === 0) {\n setSelectedToolName(\"\");\n return;\n }\n if (!tools.some((tool) => tool.name === selectedToolName)) {\n setSelectedToolName(tools[0]?.name ?? \"\");\n }\n }, [selectedToolName, tools]);\n\n useEffect(() => {\n if (selectedToolRunKeyRef.current === selectedToolRunKey) {\n return;\n }\n selectedToolRunKeyRef.current = selectedToolRunKey;\n runRequestIdRef.current += 1;\n setRunState(\"idle\");\n setRunError(\"\");\n setRunResponse(undefined);\n }, [selectedToolRunKey]);\n\n async function runSelectedTool() {\n if (selectedAgent === undefined || selectedTool === undefined) {\n return;\n }\n let args: unknown;\n try {\n args = JSON.parse(argsText);\n } catch (parseError) {\n setRunError(parseError instanceof Error ? parseError.message : String(parseError));\n setRunResponse(undefined);\n return;\n }\n\n setRunState(\"running\");\n setRunError(\"\");\n setRunResponse(undefined);\n const runToolKey = selectedToolRunKey;\n const requestId = runRequestIdRef.current + 1;\n runRequestIdRef.current = requestId;\n const isCurrentRun = () =>\n runRequestIdRef.current === requestId && selectedToolRunKeyRef.current === runToolKey;\n try {\n const response = await fetch(\n `/agents/${encodeURIComponent(selectedAgent.id)}/tools/${encodeURIComponent(\n selectedTool.name,\n )}/runs`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ args }),\n },\n );\n const rawBody = await response.json();\n if (!isCurrentRun()) {\n return;\n }\n const body = parseStudioToolRunResponse(rawBody);\n if (body === undefined) {\n setRunError(`Unexpected Studio tool run response: ${formatJson(rawBody)}`);\n return;\n }\n setRunResponse(body);\n if (!response.ok || body.status === \"error\") {\n setRunError(formatJson(body.error ?? body));\n }\n } catch (error) {\n if (isCurrentRun()) {\n setRunError(error instanceof Error ? error.message : String(error));\n }\n } finally {\n if (isCurrentRun()) {\n setRunState(\"idle\");\n }\n }\n }\n\n return (\n <StudioPageShell className=\"grid-rows-[auto_minmax(0,1fr)]\" aria-label=\"Tools\">\n <StudioPageHeader\n title=\"Tools\"\n description=\"Tool definitions registered on Studio agents, including approval policy and input schema.\"\n action={\n <div className=\"flex min-w-0 flex-wrap justify-end gap-2 max-sm:justify-start\">\n <StudioHeaderMetric label=\"tools\" value={toolTotals.total} />\n <StudioHeaderMetric label=\"mcp\" value={toolTotals.mcp} />\n <StudioHeaderMetric label=\"static\" value={toolTotals.static} />\n <StudioHeaderMetric label=\"dynamic\" value={toolTotals.dynamic} />\n <StudioHeaderMetric label=\"approvals\" value={toolTotals.approvals} />\n {props.agents.length > 1 ? (\n <Select value={selectedAgent?.id ?? \"\"} onValueChange={props.onSelectAgent}>\n <SelectTrigger className=\"h-8 min-h-8 w-64 rounded-md border-border text-xs max-sm:w-full\">\n <SelectValue placeholder=\"Agent\" />\n </SelectTrigger>\n <SelectContent align=\"end\">\n {props.agents.map((agent) => (\n <SelectItem value={agent.id} key={agent.id}>\n {agent.name ?? agent.id}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : null}\n </div>\n }\n />\n\n <StudioPageContent className=\"overflow-auto\">\n {!props.enabled ? (\n <StudioEmptyState\n title=\"Tools unavailable\"\n text=\"No registered Studio agent exposes static or dynamic tools.\"\n />\n ) : props.loading ? (\n <StudioEmptyState title=\"Loading tools\" text=\"Reading registered tool metadata.\" />\n ) : tools.length === 0 ? (\n <StudioEmptyState title=\"No tools\" text=\"The selected agent has no registered tools.\" />\n ) : (\n <div className=\"grid w-full gap-5\">\n <ToolRegistryTable\n selectedToolName={selectedTool?.name ?? \"\"}\n tools={tools}\n onSelectTool={setSelectedToolName}\n />\n <ToolRunner\n argsText={argsText}\n runError={runError}\n runResponse={runResponse}\n runState={runState}\n selectedTool={selectedTool}\n onArgsTextChange={setArgsText}\n onRun={() => void runSelectedTool()}\n />\n </div>\n )}\n </StudioPageContent>\n </StudioPageShell>\n );\n}\n\nfunction ToolRegistryTable(props: {\n tools: StudioAgentToolMetadata[];\n selectedToolName: string;\n onSelectTool: (toolName: string) => void;\n}) {\n return (\n <div className=\"min-w-[1040px]\">\n <table className=\"w-full border-separate border-spacing-0 text-left\">\n <thead className=\"sticky top-0 z-10 bg-header backdrop-blur\">\n <tr>\n <ToolTableHead>Tool</ToolTableHead>\n <ToolTableHead>Origin</ToolTableHead>\n <ToolTableHead>Schema</ToolTableHead>\n <ToolTableHead>Approval</ToolTableHead>\n <ToolTableHead>Run</ToolTableHead>\n </tr>\n </thead>\n <tbody>\n {props.tools.map((tool) => (\n <ToolRegistryRow\n active={props.selectedToolName === tool.name}\n key={`${tool.source}:${tool.name}`}\n tool={tool}\n onSelectTool={props.onSelectTool}\n />\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n\nfunction ToolRegistryRow(props: {\n tool: StudioAgentToolMetadata;\n active: boolean;\n onSelectTool: (toolName: string) => void;\n}) {\n const propertyCount = schemaPropertyCount(props.tool.parameters);\n return (\n <tr>\n <ToolTableCell>\n <div className=\"grid min-w-0 gap-1.5\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"min-w-0 truncate text-sm font-semibold text-foreground\">\n {props.tool.name}\n </span>\n {props.active ? <Badge className={selectedBadge}>selected</Badge> : null}\n </div>\n <span className=\"min-w-0 truncate text-xs font-medium text-muted-foreground\">\n {props.tool.agentId}\n </span>\n <p className=\"m-0 max-w-[64ch] truncate text-sm leading-6 text-muted-foreground\">\n {props.tool.description}\n </p>\n </div>\n </ToolTableCell>\n <ToolTableCell>\n <Badge className={originBadgeClass(props.tool)}>{toolOriginLabel(props.tool)}</Badge>\n </ToolTableCell>\n <ToolTableCell>\n <div className=\"flex min-w-0 flex-wrap gap-2\">\n <ToolMetaPill>{schemaType(props.tool.parameters)}</ToolMetaPill>\n <ToolMetaPill>\n {propertyCount} {propertyCount === 1 ? \"field\" : \"fields\"}\n </ToolMetaPill>\n </div>\n </ToolTableCell>\n <ToolTableCell>\n <div className=\"grid min-w-0 gap-1.5\">\n <Badge className={approvalBadgeClass(props.tool.approval.required)}>\n {props.tool.approval.required ? \"required\" : \"none\"}\n </Badge>\n {props.tool.approval.reason === undefined ? null : (\n <span\n className=\"max-w-[280px] truncate text-xs leading-5 text-muted-foreground\"\n title={props.tool.approval.reason}\n >\n {props.tool.approval.reason}\n </span>\n )}\n </div>\n </ToolTableCell>\n <ToolTableCell>\n <Button\n className=\"h-8 min-h-8 rounded-md px-3 text-xs\"\n type=\"button\"\n variant={props.active ? \"secondary\" : \"ghost\"}\n onClick={() => props.onSelectTool(props.tool.name)}\n >\n {props.active ? \"Selected\" : \"Use\"}\n </Button>\n </ToolTableCell>\n </tr>\n );\n}\n\nfunction ToolTableHead(props: { children: string }) {\n return (\n <th className=\"border-b border-hair py-2.5 pr-5 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground first:pl-0\">\n {props.children}\n </th>\n );\n}\n\nfunction ToolTableCell(props: { children: ReactNode }) {\n return (\n <td className=\"border-b border-hair py-3.5 pr-5 align-top first:pl-0\">{props.children}</td>\n );\n}\n\nfunction summarizeTools(tools: StudioAgentToolMetadata[]) {\n return tools.reduce(\n (totals, tool) => {\n totals.total += 1;\n if (tool.source === \"dynamic\") {\n totals.dynamic += 1;\n } else {\n totals.static += 1;\n }\n if (tool.mcpServerName !== undefined) {\n totals.mcp += 1;\n }\n if (tool.approval.required) {\n totals.approvals += 1;\n }\n return totals;\n },\n { approvals: 0, dynamic: 0, mcp: 0, static: 0, total: 0 },\n );\n}\n\nconst selectedBadge = \"border-hair bg-row-selected text-foreground\";\n"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import{i as e,r as t,s as n,t as r}from"./utils-DzstcfqT.js";import{a as i,t as a}from"./button-B_AoswCu.js";import{n as o,t as s}from"./Check.es-DgvuCllR.js";import{t as c}from"./Copy.es-DV7tb_eC.js";import{n as l,t as u}from"./icon-DyadsXLr.js";import{t as d}from"./textarea-fAtCF2cf.js";import{t as f}from"./badge-C3fkxijh.js";import{i as p,r as m}from"./renderers-Cf55u6J4.js";var h=n(e(),1),g=new Map([[`bold`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M224,196h-4V40a12,12,0,0,0-12-12H152a12,12,0,0,0-12,12V76H96A12,12,0,0,0,84,88v36H48a12,12,0,0,0-12,12v60H32a12,12,0,0,0,0,24H224a12,12,0,0,0,0-24ZM164,52h32V196H164Zm-56,48h32v96H108ZM60,148H84v48H60Z`}))],[`duotone`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M208,40V208H152V40Z`,opacity:`0.2`}),h.createElement(`path`,{d:`M224,200h-8V40a8,8,0,0,0-8-8H152a8,8,0,0,0-8,8V80H96a8,8,0,0,0-8,8v40H48a8,8,0,0,0-8,8v64H32a8,8,0,0,0,0,16H224a8,8,0,0,0,0-16ZM160,48h40V200H160ZM104,96h40V200H104ZM56,144H88v56H56Z`}))],[`fill`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M232,208a8,8,0,0,1-8,8H32a8,8,0,0,1,0-16h8V136a8,8,0,0,1,8-8H72a8,8,0,0,1,8,8v64H96V88a8,8,0,0,1,8-8h32a8,8,0,0,1,8,8V200h16V40a8,8,0,0,1,8-8h40a8,8,0,0,1,8,8V200h8A8,8,0,0,1,232,208Z`}))],[`light`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M224,202H214V40a6,6,0,0,0-6-6H152a6,6,0,0,0-6,6V82H96a6,6,0,0,0-6,6v42H48a6,6,0,0,0-6,6v66H32a6,6,0,0,0,0,12H224a6,6,0,0,0,0-12ZM158,46h44V202H158ZM102,94h44V202H102ZM54,142H90v60H54Z`}))],[`regular`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M224,200h-8V40a8,8,0,0,0-8-8H152a8,8,0,0,0-8,8V80H96a8,8,0,0,0-8,8v40H48a8,8,0,0,0-8,8v64H32a8,8,0,0,0,0,16H224a8,8,0,0,0,0-16ZM160,48h40V200H160ZM104,96h40V200H104ZM56,144H88v56H56Z`}))],[`thin`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M224,204H212V40a4,4,0,0,0-4-4H152a4,4,0,0,0-4,4V84H96a4,4,0,0,0-4,4v44H48a4,4,0,0,0-4,4v68H32a4,4,0,0,0,0,8H224a4,4,0,0,0,0-8ZM156,44h48V204H156ZM100,92h48V204H100ZM52,140H92v64H52Z`}))]]),_=new Map([[`bold`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M219.71,117.38a12,12,0,0,0-7.25-8.52L161.28,88.39l10.59-70.61a12,12,0,0,0-20.64-10l-112,120a12,12,0,0,0,4.31,19.33l51.18,20.47L84.13,238.22a12,12,0,0,0,20.64,10l112-120A12,12,0,0,0,219.71,117.38ZM113.6,203.55l6.27-41.77a12,12,0,0,0-7.41-12.92L68.74,131.37,142.4,52.45l-6.27,41.77a12,12,0,0,0,7.41,12.92l43.72,17.49Z`}))],[`duotone`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M96,240l16-80L48,136,160,16,144,96l64,24Z`,opacity:`0.2`}),h.createElement(`path`,{d:`M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z`}))],[`fill`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M213.85,125.46l-112,120a8,8,0,0,1-13.69-7l14.66-73.33L45.19,143.49a8,8,0,0,1-3-13l112-120a8,8,0,0,1,13.69,7L153.18,90.9l57.63,21.61a8,8,0,0,1,3,12.95Z`}))],[`light`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M213.84,118.63a6,6,0,0,0-3.73-4.25L150.88,92.17l15-75a6,6,0,0,0-10.27-5.27l-112,120a6,6,0,0,0,2.28,9.71l59.23,22.21-15,75a6,6,0,0,0,3.14,6.52A6.07,6.07,0,0,0,96,246a6,6,0,0,0,4.39-1.91l112-120A6,6,0,0,0,213.84,118.63ZM106,220.46l11.85-59.28a6,6,0,0,0-3.77-6.8l-55.6-20.85,91.46-98L138.12,94.82a6,6,0,0,0,3.77,6.8l55.6,20.85Z`}))],[`regular`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z`}))],[`thin`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M211.89,119.09a4,4,0,0,0-2.49-2.84l-60.81-22.8,15.33-76.67a4,4,0,0,0-6.84-3.51l-112,120a4,4,0,0,0-1,3.64,4,4,0,0,0,2.49,2.84l60.81,22.8L92.08,239.22a4,4,0,0,0,6.84,3.51l112-120A4,4,0,0,0,211.89,119.09ZM102.68,227l13.24-66.2a4,4,0,0,0-2.52-4.53L55,134.36,153.32,29l-13.24,66.2a4,4,0,0,0,2.52,4.53L201,121.64Z`}))]]),v=new Map([[`bold`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M200,164a36.07,36.07,0,0,0-33.94,24H72a28,28,0,0,1,0-56h96a44,44,0,0,0,0-88H72a12,12,0,0,0,0,24h96a20,20,0,0,1,0,40H72a52,52,0,0,0,0,104h94.06A36,36,0,1,0,200,164Zm0,48a12,12,0,1,1,12-12A12,12,0,0,1,200,212Z`}))],[`duotone`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M224,200a24,24,0,1,1-24-24A24,24,0,0,1,224,200Z`,opacity:`0.2`}),h.createElement(`path`,{d:`M200,168a32.06,32.06,0,0,0-31,24H72a32,32,0,0,1,0-64h96a40,40,0,0,0,0-80H72a8,8,0,0,0,0,16h96a24,24,0,0,1,0,48H72a48,48,0,0,0,0,96h97a32,32,0,1,0,31-40Zm0,48a16,16,0,1,1,16-16A16,16,0,0,1,200,216Z`}))],[`fill`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M228,200a28,28,0,0,1-54.83,8H72a48,48,0,0,1,0-96h96a24,24,0,0,0,0-48H72a8,8,0,0,1,0-16h96a40,40,0,0,1,0,80H72a32,32,0,0,0,0,64H173.17A28,28,0,0,1,228,200Z`}))],[`light`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M200,170a30.05,30.05,0,0,0-29.4,24H72a34,34,0,0,1,0-68h96a38,38,0,0,0,0-76H72a6,6,0,0,0,0,12h96a26,26,0,0,1,0,52H72a46,46,0,0,0,0,92h98.6A30,30,0,1,0,200,170Zm0,48a18,18,0,1,1,18-18A18,18,0,0,1,200,218Z`}))],[`regular`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M200,168a32.06,32.06,0,0,0-31,24H72a32,32,0,0,1,0-64h96a40,40,0,0,0,0-80H72a8,8,0,0,0,0,16h96a24,24,0,0,1,0,48H72a48,48,0,0,0,0,96h97a32,32,0,1,0,31-40Zm0,48a16,16,0,1,1,16-16A16,16,0,0,1,200,216Z`}))],[`thin`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M200,172a28,28,0,0,0-27.71,24H72a36,36,0,0,1,0-72h96a36,36,0,0,0,0-72H72a4,4,0,0,0,0,8h96a28,28,0,0,1,0,56H72a44,44,0,0,0,0,88H172.29A28,28,0,1,0,200,172Zm0,48a20,20,0,1,1,20-20A20,20,0,0,1,200,220Z`}))]]),y=h.forwardRef((e,t)=>h.createElement(l,{ref:t,...e,weights:g}));y.displayName=`ChartBarIcon`;var b=y,x=h.forwardRef((e,t)=>h.createElement(l,{ref:t,...e,weights:_}));x.displayName=`LightningIcon`;var S=x,C=h.forwardRef((e,t)=>h.createElement(l,{ref:t,...e,weights:v}));C.displayName=`PathIcon`;var w=C,T=t();function E(e){return e.durationMs===void 0?null:(0,T.jsx)(`span`,{"aria-live":`off`,className:r(`inline-flex items-center gap-1.5 text-xs font-medium tabular-nums text-muted-foreground`,e.className),children:D(e.durationMs)})}function D(e){let t=Math.floor((Number.isFinite(e)?Math.max(0,e):0)/1e3),n=Math.floor(t/60),r=t%60;return`Finished - ${n===0?`${r}s`:`${n}m ${r}s`}`}var O=(0,h.memo)(function(e){let t=e.displayText??(`text`in e.entry?e.entry.text:``);if(e.entry.kind===`reasoning`)return(0,T.jsxs)(`article`,{className:`max-w-205 justify-self-start text-muted-foreground`,"data-entry-id":String(e.entry.entryId),"data-entry-kind":`reasoning`,children:[(0,T.jsx)(`div`,{className:`mb-1 text-xs font-semibold uppercase text-muted-foreground`,children:`Reasoning`}),(0,T.jsx)(m,{live:e.live,size:`base`,text:t})]});if(e.entry.kind===`tool`)return(0,T.jsx)(B,{entry:e.entry,live:e.live,decidingApprovals:e.decidingApprovals,answeringQuestions:e.answeringQuestions,onApprovalDecision:e.onApprovalDecision,onQuestionAnswer:e.onQuestionAnswer});let n=e.entry.role===`assistant`?e.entry.traceId:void 0,i=e.entry.role===`assistant`&&z(t),a=e.entry.role===`assistant`&&`tone`in e.entry&&e.entry.tone===`error`,o=e.entry.role===`assistant`&&`tone`in e.entry&&e.entry.tone===`pending`,s=e.entry.role===`assistant`&&!o&&e.entry.text.trim().length>0,c=e.entry.durationMs??e.metrics?.durationMs,l=s||c!==void 0;return e.entry.role===`user`?(0,T.jsxs)(`article`,{className:`grid w-fit max-w-[min(64ch,82%)] justify-items-end justify-self-end self-start text-foreground`,"data-entry-id":String(e.entry.entryId),"data-entry-kind":`message`,children:[e.entry.text.trim().length===0?null:(0,T.jsx)(`div`,{className:`rounded-lg bg-muted px-4 py-2.5`,children:(0,T.jsx)(m,{size:`base`,text:e.entry.text})}),e.entry.attachments===void 0?null:(0,T.jsx)(R,{attachments:e.entry.attachments})]}):(0,T.jsxs)(`article`,{className:r(`self-start`,i?`w-full max-w-full`:`max-w-[min(82ch,100%)]`,e.entry.role===`assistant`&&r(`justify-self-start text-foreground`,a&&`text-destructive`)),"data-entry-id":String(e.entry.entryId),"data-entry-kind":`message`,children:[o?(0,T.jsx)(L,{}):null,t.trim().length===0?null:(0,T.jsx)(m,{live:e.live,size:`base`,text:t}),l?(0,T.jsx)(k,{metrics:e.metrics,showActions:s,text:e.entry.text,traceId:n,durationMs:c,onOpenTrace:e.onOpenTrace}):null]})});function k(e){let[t,n]=(0,h.useState)(!1),r=e.traceId;async function i(){if(!(typeof navigator>`u`||navigator.clipboard===void 0))try{await navigator.clipboard.writeText(e.text),n(!0),window.setTimeout(()=>n(!1),1200)}catch{n(!1)}}return(0,T.jsxs)(`div`,{className:`mt-3 flex min-w-0 items-center gap-1.5`,children:[e.showActions?(0,T.jsx)(a,{"aria-label":t?`Response copied`:`Copy response`,className:`h-8 min-h-8 w-8 rounded-lg border border-hair bg-muted p-0 text-muted-foreground shadow-none hover:border-foreground hover:bg-transparent hover:text-foreground`,title:t?`Copied`:`Copy response`,type:`button`,variant:`ghost`,onClick:()=>void i(),children:(0,T.jsx)(u,{icon:t?s:c,"aria-hidden":`true`})}):null,e.showActions?(0,T.jsxs)(`div`,{className:`group relative`,children:[(0,T.jsx)(a,{"aria-label":`Response metrics`,className:`h-8 min-h-8 w-8 rounded-lg border border-hair bg-muted p-0 text-muted-foreground shadow-none hover:border-foreground hover:bg-transparent hover:text-foreground`,title:P(e.metrics),type:`button`,variant:`ghost`,children:(0,T.jsx)(u,{icon:b,"aria-hidden":`true`})}),(0,T.jsx)(`div`,{className:`pointer-events-none absolute left-0 top-full z-30 mt-2 hidden w-64 rounded-lg border border-hair bg-popover p-3 text-popover-foreground shadow-md group-focus-within:grid group-hover:grid`,role:`tooltip`,children:(0,T.jsx)(A,{metrics:e.metrics})})]}):null,!e.showActions||r===void 0?null:(0,T.jsx)(a,{"aria-label":`Open trace ${r}`,className:`h-8 min-h-8 w-8 rounded-lg border border-hair bg-muted p-0 text-muted-foreground shadow-none hover:border-foreground hover:bg-transparent hover:text-foreground`,title:`Open trace ${r}`,type:`button`,variant:`ghost`,onClick:()=>e.onOpenTrace(r),children:(0,T.jsx)(u,{icon:w,"aria-hidden":`true`})}),(0,T.jsx)(E,{className:e.showActions?`ml-1.5`:void 0,durationMs:e.durationMs})]})}function A(e){let t=M(e.metrics);return(0,T.jsxs)(`div`,{className:`grid min-w-0 gap-2 text-xs leading-5`,children:[(0,T.jsx)(`div`,{className:`font-semibold text-foreground`,children:`Response metrics`}),(0,T.jsxs)(`div`,{className:`grid min-w-0 gap-1`,children:[(0,T.jsx)(j,{label:`Cost`,value:`Unavailable`}),t.length===0?(0,T.jsx)(`div`,{className:`text-muted-foreground`,children:`No usage metrics yet`}):t.map(e=>(0,T.jsx)(j,{label:e.label,value:e.value},e.label))]})]})}function j(e){return(0,T.jsxs)(`div`,{className:`flex min-w-0 items-center justify-between gap-3`,children:[(0,T.jsx)(`span`,{className:`text-muted-foreground`,children:e.label}),(0,T.jsx)(`span`,{className:`shrink-0 font-medium tabular-nums text-foreground`,children:e.value})]})}function M(e){let t=[],n=e?.usage;return n?.totalTokens!==void 0&&t.push({label:`Total`,value:`${F(n.totalTokens)} tokens`}),n?.inputTokens!==void 0&&t.push({label:`Input`,value:F(n.inputTokens)}),n?.outputTokens!==void 0&&t.push({label:`Output`,value:F(n.outputTokens)}),N(t,`Cached`,n,`cachedInputTokens`),N(t,`Cache create`,n,`cacheCreationInputTokens`),e?.durationMs!==void 0&&t.push({label:`Duration`,value:I(e.durationMs)}),t}function N(e,t,n,r){let i=n?.[r];i!==void 0&&i>0&&e.push({label:t,value:F(i)})}function P(e){let t=M(e);return t.length===0?`Cost unavailable. No usage metrics yet.`:[`Cost unavailable`,...t.map(e=>`${e.label}: ${e.value}`)].join(`. `)}function F(e){return e.toLocaleString()}function I(e){return e<1e3?`${e}ms`:`${(e/1e3).toFixed(1)}s`}function L(){return(0,T.jsxs)(`div`,{"aria-label":`Assistant is thinking`,"aria-live":`polite`,className:`inline-flex min-h-8 items-center gap-2 py-1 text-muted-foreground`,role:`status`,children:[(0,T.jsx)(`span`,{className:`text-base font-medium`,children:`Thinking`}),(0,T.jsxs)(`span`,{className:`flex items-center gap-1`,"aria-hidden":`true`,children:[(0,T.jsx)(`span`,{className:`size-1 animate-pulse rounded-full bg-current motion-reduce:animate-none`}),(0,T.jsx)(`span`,{className:`size-1 animate-pulse rounded-full bg-current [animation-delay:150ms] motion-reduce:animate-none`}),(0,T.jsx)(`span`,{className:`size-1 animate-pulse rounded-full bg-current [animation-delay:300ms] motion-reduce:animate-none`})]})]})}function R(e){return(0,T.jsx)(`div`,{className:`mt-2 flex max-w-full flex-wrap gap-2`,children:e.attachments.map((e,t)=>{let n=`${e.kind}-${e.name??e.mediaType??t}-${t}`;if(e.kind===`image`){let t=e.url??(e.data===void 0?void 0:`data:${e.mediaType??`image/png`};base64,${e.data}`);return(0,T.jsx)(`div`,{className:`overflow-hidden rounded-lg border border-hair bg-card`,children:t===void 0?(0,T.jsx)(`div`,{className:`grid h-20 w-24 place-items-center px-2 text-center text-xs text-muted-foreground`,children:`Image`}):(0,T.jsx)(`img`,{alt:e.name??`Attached image`,className:`h-20 w-24 object-cover`,src:t})},n)}return(0,T.jsx)(`span`,{className:`inline-flex max-w-full items-center gap-1.5 rounded-lg border border-hair bg-card px-2 py-1 text-xs font-medium text-muted-foreground`,children:(0,T.jsx)(`span`,{className:`min-w-0 truncate`,children:e.name??e.mediaType??`Document`})},n)})})}function z(e){let t=e.split(`
1
+ import{i as e,r as t,s as n,t as r}from"./utils-DzstcfqT.js";import{a as i,t as a}from"./button-B_AoswCu.js";import{n as o,t as s}from"./Check.es-DgvuCllR.js";import{t as c}from"./Copy.es-DV7tb_eC.js";import{n as l,t as u}from"./icon-DyadsXLr.js";import{t as d}from"./textarea-fAtCF2cf.js";import{t as f}from"./badge-C3fkxijh.js";import{i as p,r as m}from"./renderers-CfrpUrJr.js";var h=n(e(),1),g=new Map([[`bold`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M224,196h-4V40a12,12,0,0,0-12-12H152a12,12,0,0,0-12,12V76H96A12,12,0,0,0,84,88v36H48a12,12,0,0,0-12,12v60H32a12,12,0,0,0,0,24H224a12,12,0,0,0,0-24ZM164,52h32V196H164Zm-56,48h32v96H108ZM60,148H84v48H60Z`}))],[`duotone`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M208,40V208H152V40Z`,opacity:`0.2`}),h.createElement(`path`,{d:`M224,200h-8V40a8,8,0,0,0-8-8H152a8,8,0,0,0-8,8V80H96a8,8,0,0,0-8,8v40H48a8,8,0,0,0-8,8v64H32a8,8,0,0,0,0,16H224a8,8,0,0,0,0-16ZM160,48h40V200H160ZM104,96h40V200H104ZM56,144H88v56H56Z`}))],[`fill`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M232,208a8,8,0,0,1-8,8H32a8,8,0,0,1,0-16h8V136a8,8,0,0,1,8-8H72a8,8,0,0,1,8,8v64H96V88a8,8,0,0,1,8-8h32a8,8,0,0,1,8,8V200h16V40a8,8,0,0,1,8-8h40a8,8,0,0,1,8,8V200h8A8,8,0,0,1,232,208Z`}))],[`light`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M224,202H214V40a6,6,0,0,0-6-6H152a6,6,0,0,0-6,6V82H96a6,6,0,0,0-6,6v42H48a6,6,0,0,0-6,6v66H32a6,6,0,0,0,0,12H224a6,6,0,0,0,0-12ZM158,46h44V202H158ZM102,94h44V202H102ZM54,142H90v60H54Z`}))],[`regular`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M224,200h-8V40a8,8,0,0,0-8-8H152a8,8,0,0,0-8,8V80H96a8,8,0,0,0-8,8v40H48a8,8,0,0,0-8,8v64H32a8,8,0,0,0,0,16H224a8,8,0,0,0,0-16ZM160,48h40V200H160ZM104,96h40V200H104ZM56,144H88v56H56Z`}))],[`thin`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M224,204H212V40a4,4,0,0,0-4-4H152a4,4,0,0,0-4,4V84H96a4,4,0,0,0-4,4v44H48a4,4,0,0,0-4,4v68H32a4,4,0,0,0,0,8H224a4,4,0,0,0,0-8ZM156,44h48V204H156ZM100,92h48V204H100ZM52,140H92v64H52Z`}))]]),_=new Map([[`bold`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M219.71,117.38a12,12,0,0,0-7.25-8.52L161.28,88.39l10.59-70.61a12,12,0,0,0-20.64-10l-112,120a12,12,0,0,0,4.31,19.33l51.18,20.47L84.13,238.22a12,12,0,0,0,20.64,10l112-120A12,12,0,0,0,219.71,117.38ZM113.6,203.55l6.27-41.77a12,12,0,0,0-7.41-12.92L68.74,131.37,142.4,52.45l-6.27,41.77a12,12,0,0,0,7.41,12.92l43.72,17.49Z`}))],[`duotone`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M96,240l16-80L48,136,160,16,144,96l64,24Z`,opacity:`0.2`}),h.createElement(`path`,{d:`M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z`}))],[`fill`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M213.85,125.46l-112,120a8,8,0,0,1-13.69-7l14.66-73.33L45.19,143.49a8,8,0,0,1-3-13l112-120a8,8,0,0,1,13.69,7L153.18,90.9l57.63,21.61a8,8,0,0,1,3,12.95Z`}))],[`light`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M213.84,118.63a6,6,0,0,0-3.73-4.25L150.88,92.17l15-75a6,6,0,0,0-10.27-5.27l-112,120a6,6,0,0,0,2.28,9.71l59.23,22.21-15,75a6,6,0,0,0,3.14,6.52A6.07,6.07,0,0,0,96,246a6,6,0,0,0,4.39-1.91l112-120A6,6,0,0,0,213.84,118.63ZM106,220.46l11.85-59.28a6,6,0,0,0-3.77-6.8l-55.6-20.85,91.46-98L138.12,94.82a6,6,0,0,0,3.77,6.8l55.6,20.85Z`}))],[`regular`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z`}))],[`thin`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M211.89,119.09a4,4,0,0,0-2.49-2.84l-60.81-22.8,15.33-76.67a4,4,0,0,0-6.84-3.51l-112,120a4,4,0,0,0-1,3.64,4,4,0,0,0,2.49,2.84l60.81,22.8L92.08,239.22a4,4,0,0,0,6.84,3.51l112-120A4,4,0,0,0,211.89,119.09ZM102.68,227l13.24-66.2a4,4,0,0,0-2.52-4.53L55,134.36,153.32,29l-13.24,66.2a4,4,0,0,0,2.52,4.53L201,121.64Z`}))]]),v=new Map([[`bold`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M200,164a36.07,36.07,0,0,0-33.94,24H72a28,28,0,0,1,0-56h96a44,44,0,0,0,0-88H72a12,12,0,0,0,0,24h96a20,20,0,0,1,0,40H72a52,52,0,0,0,0,104h94.06A36,36,0,1,0,200,164Zm0,48a12,12,0,1,1,12-12A12,12,0,0,1,200,212Z`}))],[`duotone`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M224,200a24,24,0,1,1-24-24A24,24,0,0,1,224,200Z`,opacity:`0.2`}),h.createElement(`path`,{d:`M200,168a32.06,32.06,0,0,0-31,24H72a32,32,0,0,1,0-64h96a40,40,0,0,0,0-80H72a8,8,0,0,0,0,16h96a24,24,0,0,1,0,48H72a48,48,0,0,0,0,96h97a32,32,0,1,0,31-40Zm0,48a16,16,0,1,1,16-16A16,16,0,0,1,200,216Z`}))],[`fill`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M228,200a28,28,0,0,1-54.83,8H72a48,48,0,0,1,0-96h96a24,24,0,0,0,0-48H72a8,8,0,0,1,0-16h96a40,40,0,0,1,0,80H72a32,32,0,0,0,0,64H173.17A28,28,0,0,1,228,200Z`}))],[`light`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M200,170a30.05,30.05,0,0,0-29.4,24H72a34,34,0,0,1,0-68h96a38,38,0,0,0,0-76H72a6,6,0,0,0,0,12h96a26,26,0,0,1,0,52H72a46,46,0,0,0,0,92h98.6A30,30,0,1,0,200,170Zm0,48a18,18,0,1,1,18-18A18,18,0,0,1,200,218Z`}))],[`regular`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M200,168a32.06,32.06,0,0,0-31,24H72a32,32,0,0,1,0-64h96a40,40,0,0,0,0-80H72a8,8,0,0,0,0,16h96a24,24,0,0,1,0,48H72a48,48,0,0,0,0,96h97a32,32,0,1,0,31-40Zm0,48a16,16,0,1,1,16-16A16,16,0,0,1,200,216Z`}))],[`thin`,h.createElement(h.Fragment,null,h.createElement(`path`,{d:`M200,172a28,28,0,0,0-27.71,24H72a36,36,0,0,1,0-72h96a36,36,0,0,0,0-72H72a4,4,0,0,0,0,8h96a28,28,0,0,1,0,56H72a44,44,0,0,0,0,88H172.29A28,28,0,1,0,200,172Zm0,48a20,20,0,1,1,20-20A20,20,0,0,1,200,220Z`}))]]),y=h.forwardRef((e,t)=>h.createElement(l,{ref:t,...e,weights:g}));y.displayName=`ChartBarIcon`;var b=y,x=h.forwardRef((e,t)=>h.createElement(l,{ref:t,...e,weights:_}));x.displayName=`LightningIcon`;var S=x,C=h.forwardRef((e,t)=>h.createElement(l,{ref:t,...e,weights:v}));C.displayName=`PathIcon`;var w=C,T=t();function E(e){return e.durationMs===void 0?null:(0,T.jsx)(`span`,{"aria-live":`off`,className:r(`inline-flex items-center gap-1.5 text-xs font-medium tabular-nums text-muted-foreground`,e.className),children:D(e.durationMs)})}function D(e){let t=Math.floor((Number.isFinite(e)?Math.max(0,e):0)/1e3),n=Math.floor(t/60),r=t%60;return`Finished - ${n===0?`${r}s`:`${n}m ${r}s`}`}var O=(0,h.memo)(function(e){let t=e.displayText??(`text`in e.entry?e.entry.text:``);if(e.entry.kind===`reasoning`)return(0,T.jsxs)(`article`,{className:`max-w-205 justify-self-start text-muted-foreground`,"data-entry-id":String(e.entry.entryId),"data-entry-kind":`reasoning`,children:[(0,T.jsx)(`div`,{className:`mb-1 text-xs font-semibold uppercase text-muted-foreground`,children:`Reasoning`}),(0,T.jsx)(m,{live:e.live,size:`base`,text:t})]});if(e.entry.kind===`tool`)return(0,T.jsx)(B,{entry:e.entry,live:e.live,decidingApprovals:e.decidingApprovals,answeringQuestions:e.answeringQuestions,onApprovalDecision:e.onApprovalDecision,onQuestionAnswer:e.onQuestionAnswer});let n=e.entry.role===`assistant`?e.entry.traceId:void 0,i=e.entry.role===`assistant`&&z(t),a=e.entry.role===`assistant`&&`tone`in e.entry&&e.entry.tone===`error`,o=e.entry.role===`assistant`&&`tone`in e.entry&&e.entry.tone===`pending`,s=e.entry.role===`assistant`&&!o&&e.entry.text.trim().length>0,c=e.entry.durationMs??e.metrics?.durationMs,l=s||c!==void 0;return e.entry.role===`user`?(0,T.jsxs)(`article`,{className:`grid w-fit max-w-[min(64ch,82%)] justify-items-end justify-self-end self-start text-foreground`,"data-entry-id":String(e.entry.entryId),"data-entry-kind":`message`,children:[e.entry.text.trim().length===0?null:(0,T.jsx)(`div`,{className:`rounded-lg bg-muted px-4 py-2.5`,children:(0,T.jsx)(m,{size:`base`,text:e.entry.text})}),e.entry.attachments===void 0?null:(0,T.jsx)(R,{attachments:e.entry.attachments})]}):(0,T.jsxs)(`article`,{className:r(`self-start`,i?`w-full max-w-full`:`max-w-[min(82ch,100%)]`,e.entry.role===`assistant`&&r(`justify-self-start text-foreground`,a&&`text-destructive`)),"data-entry-id":String(e.entry.entryId),"data-entry-kind":`message`,children:[o?(0,T.jsx)(L,{}):null,t.trim().length===0?null:(0,T.jsx)(m,{live:e.live,size:`base`,text:t}),l?(0,T.jsx)(k,{metrics:e.metrics,showActions:s,text:e.entry.text,traceId:n,durationMs:c,onOpenTrace:e.onOpenTrace}):null]})});function k(e){let[t,n]=(0,h.useState)(!1),r=e.traceId;async function i(){if(!(typeof navigator>`u`||navigator.clipboard===void 0))try{await navigator.clipboard.writeText(e.text),n(!0),window.setTimeout(()=>n(!1),1200)}catch{n(!1)}}return(0,T.jsxs)(`div`,{className:`mt-3 flex min-w-0 items-center gap-1.5`,children:[e.showActions?(0,T.jsx)(a,{"aria-label":t?`Response copied`:`Copy response`,className:`h-8 min-h-8 w-8 rounded-lg border border-hair bg-muted p-0 text-muted-foreground shadow-none hover:border-foreground hover:bg-transparent hover:text-foreground`,title:t?`Copied`:`Copy response`,type:`button`,variant:`ghost`,onClick:()=>void i(),children:(0,T.jsx)(u,{icon:t?s:c,"aria-hidden":`true`})}):null,e.showActions?(0,T.jsxs)(`div`,{className:`group relative`,children:[(0,T.jsx)(a,{"aria-label":`Response metrics`,className:`h-8 min-h-8 w-8 rounded-lg border border-hair bg-muted p-0 text-muted-foreground shadow-none hover:border-foreground hover:bg-transparent hover:text-foreground`,title:P(e.metrics),type:`button`,variant:`ghost`,children:(0,T.jsx)(u,{icon:b,"aria-hidden":`true`})}),(0,T.jsx)(`div`,{className:`pointer-events-none absolute left-0 top-full z-30 mt-2 hidden w-64 rounded-lg border border-hair bg-popover p-3 text-popover-foreground shadow-md group-focus-within:grid group-hover:grid`,role:`tooltip`,children:(0,T.jsx)(A,{metrics:e.metrics})})]}):null,!e.showActions||r===void 0?null:(0,T.jsx)(a,{"aria-label":`Open trace ${r}`,className:`h-8 min-h-8 w-8 rounded-lg border border-hair bg-muted p-0 text-muted-foreground shadow-none hover:border-foreground hover:bg-transparent hover:text-foreground`,title:`Open trace ${r}`,type:`button`,variant:`ghost`,onClick:()=>e.onOpenTrace(r),children:(0,T.jsx)(u,{icon:w,"aria-hidden":`true`})}),(0,T.jsx)(E,{className:e.showActions?`ml-1.5`:void 0,durationMs:e.durationMs})]})}function A(e){let t=M(e.metrics);return(0,T.jsxs)(`div`,{className:`grid min-w-0 gap-2 text-xs leading-5`,children:[(0,T.jsx)(`div`,{className:`font-semibold text-foreground`,children:`Response metrics`}),(0,T.jsxs)(`div`,{className:`grid min-w-0 gap-1`,children:[(0,T.jsx)(j,{label:`Cost`,value:`Unavailable`}),t.length===0?(0,T.jsx)(`div`,{className:`text-muted-foreground`,children:`No usage metrics yet`}):t.map(e=>(0,T.jsx)(j,{label:e.label,value:e.value},e.label))]})]})}function j(e){return(0,T.jsxs)(`div`,{className:`flex min-w-0 items-center justify-between gap-3`,children:[(0,T.jsx)(`span`,{className:`text-muted-foreground`,children:e.label}),(0,T.jsx)(`span`,{className:`shrink-0 font-medium tabular-nums text-foreground`,children:e.value})]})}function M(e){let t=[],n=e?.usage;return n?.totalTokens!==void 0&&t.push({label:`Total`,value:`${F(n.totalTokens)} tokens`}),n?.inputTokens!==void 0&&t.push({label:`Input`,value:F(n.inputTokens)}),n?.outputTokens!==void 0&&t.push({label:`Output`,value:F(n.outputTokens)}),N(t,`Cached`,n,`cachedInputTokens`),N(t,`Cache create`,n,`cacheCreationInputTokens`),e?.durationMs!==void 0&&t.push({label:`Duration`,value:I(e.durationMs)}),t}function N(e,t,n,r){let i=n?.[r];i!==void 0&&i>0&&e.push({label:t,value:F(i)})}function P(e){let t=M(e);return t.length===0?`Cost unavailable. No usage metrics yet.`:[`Cost unavailable`,...t.map(e=>`${e.label}: ${e.value}`)].join(`. `)}function F(e){return e.toLocaleString()}function I(e){return e<1e3?`${e}ms`:`${(e/1e3).toFixed(1)}s`}function L(){return(0,T.jsxs)(`div`,{"aria-label":`Assistant is thinking`,"aria-live":`polite`,className:`inline-flex min-h-8 items-center gap-2 py-1 text-muted-foreground`,role:`status`,children:[(0,T.jsx)(`span`,{className:`text-base font-medium`,children:`Thinking`}),(0,T.jsxs)(`span`,{className:`flex items-center gap-1`,"aria-hidden":`true`,children:[(0,T.jsx)(`span`,{className:`size-1 animate-pulse rounded-full bg-current motion-reduce:animate-none`}),(0,T.jsx)(`span`,{className:`size-1 animate-pulse rounded-full bg-current [animation-delay:150ms] motion-reduce:animate-none`}),(0,T.jsx)(`span`,{className:`size-1 animate-pulse rounded-full bg-current [animation-delay:300ms] motion-reduce:animate-none`})]})]})}function R(e){return(0,T.jsx)(`div`,{className:`mt-2 flex max-w-full flex-wrap gap-2`,children:e.attachments.map((e,t)=>{let n=`${e.kind}-${e.name??e.mediaType??t}-${t}`;if(e.kind===`image`){let t=e.url??(e.data===void 0?void 0:`data:${e.mediaType??`image/png`};base64,${e.data}`);return(0,T.jsx)(`div`,{className:`overflow-hidden rounded-lg border border-hair bg-card`,children:t===void 0?(0,T.jsx)(`div`,{className:`grid h-20 w-24 place-items-center px-2 text-center text-xs text-muted-foreground`,children:`Image`}):(0,T.jsx)(`img`,{alt:e.name??`Attached image`,className:`h-20 w-24 object-cover`,src:t})},n)}return(0,T.jsx)(`span`,{className:`inline-flex max-w-full items-center gap-1.5 rounded-lg border border-hair bg-card px-2 py-1 text-xs font-medium text-muted-foreground`,children:(0,T.jsx)(`span`,{className:`min-w-0 truncate`,children:e.name??e.mediaType??`Document`})},n)})})}function z(e){let t=e.split(`
2
2
  `);return t.some((e,n)=>{let r=t[n+1];return e.includes(`|`)&&r!==void 0&&/^\s*\|?\s*:?-{3,}:?\s*(\|\s*:?-{3,}:?\s*)+\|?\s*$/.test(r)})}function B(e){let[t,n]=(0,h.useState)(e.entry.approval?.status!==`pending`&&e.entry.question?.status!==`pending`),i=e.entry.approval,s=e.entry.question,c=e.entry.childEvents??[],l=e.entry.args!==void 0||e.entry.result!==void 0||c.length>0||i!==void 0||s!==void 0,d=i?.status===`pending`,f=s?.status===`pending`,m=i?.status===`cancelled`||s?.status===`cancelled`,g=i?.status===`rejected`,_=i?.status===`timed_out`,v=i!==void 0&&e.decidingApprovals.has(i.id),y=s!==void 0&&e.answeringQuestions.has(s.id),b=d?`Approval required`:f?`Input required`:m?`Cancelled`:g?`Rejected`:_?`Timed out`:e.live===!0&&e.entry.result===void 0?`Running`:void 0;return(0,T.jsxs)(`article`,{className:`w-full justify-self-start text-foreground`,"data-entry-id":String(e.entry.entryId),"data-entry-kind":`tool`,children:[(0,T.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2 py-0.5`,children:[(0,T.jsxs)(a,{"aria-expanded":l?!t:void 0,"aria-label":`${t?`Expand`:`Collapse`} ${e.entry.toolName} tool call`,className:`h-auto min-h-9 min-w-0 flex-1 justify-start gap-2.5 rounded-lg border-0 bg-transparent px-1 py-0.5 text-left text-inherit shadow-none hover:bg-transparent hover:text-inherit`,type:`button`,variant:`ghost`,onClick:()=>n(e=>!e),children:[(0,T.jsx)(`span`,{className:`grid size-6 shrink-0 place-items-center rounded-md border border-hair bg-muted text-muted-foreground`,"data-tool-icon":`action`,children:(0,T.jsx)(u,{icon:S,className:`size-2.5`,weight:`fill`,"aria-hidden":`true`})}),(0,T.jsx)(`strong`,{className:`min-w-0 truncate font-mono text-sm font-medium text-foreground`,children:e.entry.toolName}),b===void 0?null:(0,T.jsxs)(`span`,{className:`ml-auto inline-flex shrink-0 items-center gap-1.5 text-sm font-normal text-muted-foreground`,children:[(0,T.jsx)(`span`,{className:r(`size-1.5 rounded-full bg-dim`,b===`Running`&&`animate-pulse bg-foreground motion-reduce:animate-none`,(m||g||_)&&`bg-destructive`),"aria-hidden":`true`}),b]}),l?(0,T.jsx)(`span`,{className:`grid size-6 shrink-0 place-items-center text-muted-foreground`,children:(0,T.jsx)(u,{icon:o,className:r(`size-4 transition-transform`,t&&`-rotate-90`),"aria-hidden":`true`})}):null]}),d&&i!==void 0?(0,T.jsx)(K,{disabled:v,onDecision:t=>e.onApprovalDecision(i.id,t)}):null]}),t||!l?null:(0,T.jsxs)(`div`,{className:`ml-8 grid gap-3 py-2`,children:[i===void 0?null:(0,T.jsx)(G,{approval:i}),s===void 0?null:(0,T.jsx)(H,{disabled:y,question:s,onAnswer:t=>e.onQuestionAnswer(s.id,t)}),s!==void 0||e.entry.args===void 0?null:(0,T.jsx)(p,{title:`Input`,value:e.entry.args}),c.length===0?null:(0,T.jsx)(V,{events:c}),s!==void 0||e.entry.result===void 0?null:(0,T.jsx)(p,{title:`Output`,value:e.entry.result})]})]})}function V(e){return(0,T.jsxs)(`div`,{className:`overflow-hidden rounded-none border border-hair bg-background`,children:[(0,T.jsx)(`div`,{className:`bg-muted px-3 py-2 text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground`,children:`Subagent activity`}),(0,T.jsx)(`div`,{className:`grid gap-3 p-3`,children:e.events.map(e=>{let t=e.agentName??e.agentId;return e.kind===`message`||e.kind===`reasoning`?(0,T.jsxs)(`div`,{className:`grid gap-1 rounded-none border border-hair bg-card p-3`,children:[(0,T.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,T.jsx)(f,{className:`border-border bg-muted px-1.5 py-0.5 text-xs uppercase text-muted-foreground`,children:e.kind===`reasoning`?`Reasoning`:`Response`}),(0,T.jsx)(`span`,{className:`min-w-0 truncate text-xs font-semibold text-muted-foreground`,children:t})]}),(0,T.jsx)(m,{size:`base`,text:e.text})]},`${e.kind}-${e.agentId}-${e.text}`):(0,T.jsxs)(`div`,{className:`grid gap-2 rounded-none border border-hair bg-card p-3`,children:[(0,T.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,T.jsx)(f,{className:`border-hair bg-muted px-1.5 py-0.5 text-xs uppercase text-foreground`,children:`Tool`}),(0,T.jsxs)(`span`,{className:`min-w-0 truncate text-xs font-semibold text-muted-foreground`,children:[t,` / `,e.toolName]})]}),e.args===void 0?null:(0,T.jsx)(p,{title:`Input`,value:e.args}),e.result===void 0?null:(0,T.jsx)(p,{title:`Output`,value:e.result})]},`${e.kind}-${e.agentId}-${e.toolName}-${e.callId??e.args??e.result??``}`)})})]})}function H(e){let[t,n]=(0,h.useState)({}),[r,i]=(0,h.useState)(0),o=e.question.status===`pending`,s=e.question.questions.length,c=e.question.questions.map(e=>{let n=t[e.id],r=n?.customValue?.trim()??``,i=r.length>0?r:n?.answer,a={questionId:e.id,answer:i?.trim()??``};return n?.choice!==void 0&&(a.choice=n.choice),r.length>0&&(a.custom=!0),a}),l=s===0?0:Math.min(r,s-1),u=e.question.questions[l],d=c[l]?.answer??``,f=c.filter(e=>e.answer.length>0).length,p=d.length>0,m=o&&c.every(e=>e.answer.length>0),g=l===0,_=l>=s-1;if(u===void 0)return(0,T.jsx)(`div`,{className:`rounded-none border border-border bg-background p-4 text-sm font-medium text-muted-foreground`,children:`No questions`});let v=()=>i(e=>Math.max(0,e-1)),y=()=>i(t=>Math.min(e.question.questions.length-1,t+1)),b=(e,t)=>n(n=>({...n,[e]:t}));return(0,T.jsxs)(`div`,{className:`grid gap-3`,children:[e.question.status===`cancelled`?(0,T.jsx)(`div`,{className:`rounded-none border border-hair bg-muted px-3 py-2.5 text-sm font-medium text-muted-foreground`,children:`Question cancelled`}):null,(0,T.jsx)(U,{disabled:e.disabled||!o,index:l,total:s,question:u,value:t[u.id],answer:e.question.answers?.find(e=>e.questionId===u.id),onChange:e=>b(u.id,e),onAdvance:_?void 0:y},u.id),o?(0,T.jsxs)(`div`,{className:`flex min-w-0 items-center justify-between gap-3 rounded-none bg-muted px-3 py-2`,children:[(0,T.jsxs)(`div`,{className:`min-w-0 text-xs font-semibold uppercase tracking-[0.2em] text-muted-foreground`,children:[f,`/`,s,` answered`]}),(0,T.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[g?null:(0,T.jsx)(a,{type:`button`,variant:`secondary`,onClick:v,children:`Back`}),_?(0,T.jsx)(a,{className:`h-9 min-h-9 px-4`,disabled:e.disabled||!m,type:`button`,onClick:()=>e.onAnswer(c),children:`Submit answers`}):(0,T.jsx)(a,{className:`h-9 min-h-9 px-4`,disabled:e.disabled||!p,type:`button`,onClick:y,children:`Next question`})]})]}):s>1?(0,T.jsxs)(`div`,{className:`flex min-w-0 items-center justify-between gap-3 rounded-none bg-muted px-3 py-2`,children:[(0,T.jsx)(`div`,{className:`min-w-0 text-xs font-semibold uppercase tracking-[0.2em] text-foreground`,children:`Answered`}),(0,T.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[(0,T.jsx)(a,{disabled:g,type:`button`,variant:`secondary`,onClick:v,children:`Back`}),(0,T.jsx)(a,{disabled:_,type:`button`,variant:`secondary`,onClick:y,children:`Next`})]})]}):null]})}function U(e){let t=e.answer?.answer,n=W(e.value),i=t===void 0?n.length>0?`Ready`:`Waiting`:`Answered`;return(0,T.jsxs)(`section`,{className:`grid gap-4 rounded-none border border-hair bg-background p-4`,children:[(0,T.jsxs)(`div`,{className:`flex min-w-0 items-start justify-between gap-4`,children:[(0,T.jsxs)(`div`,{className:`grid min-w-0 gap-2`,children:[(0,T.jsxs)(`div`,{className:` text-xs font-semibold uppercase tracking-[0.2em] text-muted-foreground`,children:[`Question `,e.index+1,` of `,e.total]}),(0,T.jsx)(`h3`,{className:`m-0 text-base font-semibold leading-7 text-foreground [overflow-wrap:anywhere]`,children:e.question.question})]}),(0,T.jsx)(`span`,{className:r(`shrink-0 text-xs font-semibold uppercase tracking-[0.18em]`,i===`Answered`&&`text-foreground`,i===`Ready`&&`text-foreground`,i===`Waiting`&&`text-muted-foreground`),children:i})]}),t===void 0?null:(0,T.jsx)(`div`,{className:`rounded-lg border border-hair bg-muted px-3 py-2 text-sm font-medium text-foreground`,children:t}),t===void 0&&e.question.choices.length>0?(0,T.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:e.question.choices.map(t=>{let n=e.value?.choice===t.value;return(0,T.jsx)(a,{className:r(`h-8 min-h-8 px-3 text-xs`,n&&`border-foreground`),disabled:e.disabled,size:`sm`,type:`button`,variant:n?`default`:`secondary`,onClick:()=>{e.onChange({answer:t.value,choice:t.value,customValue:e.value?.customValue??``}),e.onAdvance?.()},children:t.label},t.value)})}):null,t!==void 0||e.question.choices.length>0&&!e.question.allowCustom?null:(0,T.jsx)(d,{className:`min-h-24 text-sm`,disabled:e.disabled,placeholder:`Type a custom answer`,rows:3,value:e.value?.customValue??``,onChange:t=>e.onChange({...e.value,customValue:t.currentTarget.value})})]})}function W(e){let t=e?.customValue?.trim()??``;return t.length>0?t:e?.answer?.trim()??``}function G(e){return(0,T.jsxs)(`div`,{className:`grid gap-2 rounded-none border border-hair bg-muted px-3 py-2.5`,children:[(0,T.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,T.jsx)(f,{className:r(`border-hair bg-background px-1.5 py-0.5 text-xs uppercase text-muted-foreground`,e.approval.status===`approved`&&`text-foreground`,e.approval.status===`rejected`&&`text-destructive`),children:`Approval`}),(0,T.jsx)(`div`,{className:`min-w-0`,children:(0,T.jsx)(`div`,{className:`text-sm font-medium text-foreground`,children:i(e.approval)})})]}),e.approval.reason===void 0?null:(0,T.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground [overflow-wrap:anywhere]`,children:e.approval.reason})]})}function K(e){return(0,T.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[(0,T.jsx)(a,{className:`h-8 min-h-8 border-0 bg-transparent px-3 text-sm text-muted-foreground shadow-none hover:bg-status-danger-fill hover:text-destructive`,disabled:e.disabled,size:`sm`,type:`button`,variant:`ghost`,onClick:()=>e.onDecision(!1),children:`Reject`}),(0,T.jsx)(a,{className:`h-8 min-h-8 px-3 text-sm`,disabled:e.disabled,size:`sm`,type:`button`,onClick:()=>e.onDecision(!0),children:`Approve`})]})}export{O as TranscriptItem};
3
- //# sourceMappingURL=transcript-item-ChVGempt.js.map
3
+ //# sourceMappingURL=transcript-item-B6OLwa1p.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transcript-item-ChVGempt.js","names":["e","a","e","m","n","t","e","r","r","e","m"],"sources":["../../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@phosphor-icons/react/dist/defs/ChartBar.es.js","../../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@phosphor-icons/react/dist/defs/Lightning.es.js","../../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@phosphor-icons/react/dist/defs/Path.es.js","../../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@phosphor-icons/react/dist/csr/ChartBar.es.js","../../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@phosphor-icons/react/dist/csr/Lightning.es.js","../../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@phosphor-icons/react/dist/csr/Path.es.js","../../../src/ui/app/modules/playground/working-duration.tsx","../../../src/ui/app/modules/playground/transcript-item.tsx"],"sourcesContent":["import * as a from \"react\";\nconst e = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,196h-4V40a12,12,0,0,0-12-12H152a12,12,0,0,0-12,12V76H96A12,12,0,0,0,84,88v36H48a12,12,0,0,0-12,12v60H32a12,12,0,0,0,0,24H224a12,12,0,0,0,0-24ZM164,52h32V196H164Zm-56,48h32v96H108ZM60,148H84v48H60Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M208,40V208H152V40Z\", opacity: \"0.2\" }), /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,200h-8V40a8,8,0,0,0-8-8H152a8,8,0,0,0-8,8V80H96a8,8,0,0,0-8,8v40H48a8,8,0,0,0-8,8v64H32a8,8,0,0,0,0,16H224a8,8,0,0,0,0-16ZM160,48h40V200H160ZM104,96h40V200H104ZM56,144H88v56H56Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M232,208a8,8,0,0,1-8,8H32a8,8,0,0,1,0-16h8V136a8,8,0,0,1,8-8H72a8,8,0,0,1,8,8v64H96V88a8,8,0,0,1,8-8h32a8,8,0,0,1,8,8V200h16V40a8,8,0,0,1,8-8h40a8,8,0,0,1,8,8V200h8A8,8,0,0,1,232,208Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,202H214V40a6,6,0,0,0-6-6H152a6,6,0,0,0-6,6V82H96a6,6,0,0,0-6,6v42H48a6,6,0,0,0-6,6v66H32a6,6,0,0,0,0,12H224a6,6,0,0,0,0-12ZM158,46h44V202H158ZM102,94h44V202H102ZM54,142H90v60H54Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,200h-8V40a8,8,0,0,0-8-8H152a8,8,0,0,0-8,8V80H96a8,8,0,0,0-8,8v40H48a8,8,0,0,0-8,8v64H32a8,8,0,0,0,0,16H224a8,8,0,0,0,0-16ZM160,48h40V200H160ZM104,96h40V200H104ZM56,144H88v56H56Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,204H212V40a4,4,0,0,0-4-4H152a4,4,0,0,0-4,4V84H96a4,4,0,0,0-4,4v44H48a4,4,0,0,0-4,4v68H32a4,4,0,0,0,0,8H224a4,4,0,0,0,0-8ZM156,44h48V204H156ZM100,92h48V204H100ZM52,140H92v64H52Z\" }))\n ]\n]);\nexport {\n e as default\n};\n","import * as l from \"react\";\nconst a = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ l.createElement(l.Fragment, null, /* @__PURE__ */ l.createElement(\"path\", { d: \"M219.71,117.38a12,12,0,0,0-7.25-8.52L161.28,88.39l10.59-70.61a12,12,0,0,0-20.64-10l-112,120a12,12,0,0,0,4.31,19.33l51.18,20.47L84.13,238.22a12,12,0,0,0,20.64,10l112-120A12,12,0,0,0,219.71,117.38ZM113.6,203.55l6.27-41.77a12,12,0,0,0-7.41-12.92L68.74,131.37,142.4,52.45l-6.27,41.77a12,12,0,0,0,7.41,12.92l43.72,17.49Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ l.createElement(l.Fragment, null, /* @__PURE__ */ l.createElement(\"path\", { d: \"M96,240l16-80L48,136,160,16,144,96l64,24Z\", opacity: \"0.2\" }), /* @__PURE__ */ l.createElement(\"path\", { d: \"M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ l.createElement(l.Fragment, null, /* @__PURE__ */ l.createElement(\"path\", { d: \"M213.85,125.46l-112,120a8,8,0,0,1-13.69-7l14.66-73.33L45.19,143.49a8,8,0,0,1-3-13l112-120a8,8,0,0,1,13.69,7L153.18,90.9l57.63,21.61a8,8,0,0,1,3,12.95Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ l.createElement(l.Fragment, null, /* @__PURE__ */ l.createElement(\"path\", { d: \"M213.84,118.63a6,6,0,0,0-3.73-4.25L150.88,92.17l15-75a6,6,0,0,0-10.27-5.27l-112,120a6,6,0,0,0,2.28,9.71l59.23,22.21-15,75a6,6,0,0,0,3.14,6.52A6.07,6.07,0,0,0,96,246a6,6,0,0,0,4.39-1.91l112-120A6,6,0,0,0,213.84,118.63ZM106,220.46l11.85-59.28a6,6,0,0,0-3.77-6.8l-55.6-20.85,91.46-98L138.12,94.82a6,6,0,0,0,3.77,6.8l55.6,20.85Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ l.createElement(l.Fragment, null, /* @__PURE__ */ l.createElement(\"path\", { d: \"M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ l.createElement(l.Fragment, null, /* @__PURE__ */ l.createElement(\"path\", { d: \"M211.89,119.09a4,4,0,0,0-2.49-2.84l-60.81-22.8,15.33-76.67a4,4,0,0,0-6.84-3.51l-112,120a4,4,0,0,0-1,3.64,4,4,0,0,0,2.49,2.84l60.81,22.8L92.08,239.22a4,4,0,0,0,6.84,3.51l112-120A4,4,0,0,0,211.89,119.09ZM102.68,227l13.24-66.2a4,4,0,0,0-2.52-4.53L55,134.36,153.32,29l-13.24,66.2a4,4,0,0,0,2.52,4.53L201,121.64Z\" }))\n ]\n]);\nexport {\n a as default\n};\n","import * as a from \"react\";\nconst e = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M200,164a36.07,36.07,0,0,0-33.94,24H72a28,28,0,0,1,0-56h96a44,44,0,0,0,0-88H72a12,12,0,0,0,0,24h96a20,20,0,0,1,0,40H72a52,52,0,0,0,0,104h94.06A36,36,0,1,0,200,164Zm0,48a12,12,0,1,1,12-12A12,12,0,0,1,200,212Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,200a24,24,0,1,1-24-24A24,24,0,0,1,224,200Z\", opacity: \"0.2\" }), /* @__PURE__ */ a.createElement(\"path\", { d: \"M200,168a32.06,32.06,0,0,0-31,24H72a32,32,0,0,1,0-64h96a40,40,0,0,0,0-80H72a8,8,0,0,0,0,16h96a24,24,0,0,1,0,48H72a48,48,0,0,0,0,96h97a32,32,0,1,0,31-40Zm0,48a16,16,0,1,1,16-16A16,16,0,0,1,200,216Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M228,200a28,28,0,0,1-54.83,8H72a48,48,0,0,1,0-96h96a24,24,0,0,0,0-48H72a8,8,0,0,1,0-16h96a40,40,0,0,1,0,80H72a32,32,0,0,0,0,64H173.17A28,28,0,0,1,228,200Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M200,170a30.05,30.05,0,0,0-29.4,24H72a34,34,0,0,1,0-68h96a38,38,0,0,0,0-76H72a6,6,0,0,0,0,12h96a26,26,0,0,1,0,52H72a46,46,0,0,0,0,92h98.6A30,30,0,1,0,200,170Zm0,48a18,18,0,1,1,18-18A18,18,0,0,1,200,218Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M200,168a32.06,32.06,0,0,0-31,24H72a32,32,0,0,1,0-64h96a40,40,0,0,0,0-80H72a8,8,0,0,0,0,16h96a24,24,0,0,1,0,48H72a48,48,0,0,0,0,96h97a32,32,0,1,0,31-40Zm0,48a16,16,0,1,1,16-16A16,16,0,0,1,200,216Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M200,172a28,28,0,0,0-27.71,24H72a36,36,0,0,1,0-72h96a36,36,0,0,0,0-72H72a4,4,0,0,0,0,8h96a28,28,0,0,1,0,56H72a44,44,0,0,0,0,88H172.29A28,28,0,1,0,200,172Zm0,48a20,20,0,1,1,20-20A20,20,0,0,1,200,220Z\" }))\n ]\n]);\nexport {\n e as default\n};\n","import * as r from \"react\";\nimport e from \"../lib/IconBase.es.js\";\nimport m from \"../defs/ChartBar.es.js\";\nconst a = r.forwardRef((o, t) => /* @__PURE__ */ r.createElement(e, { ref: t, ...o, weights: m }));\na.displayName = \"ChartBarIcon\";\nconst n = a;\nexport {\n n as ChartBar,\n a as ChartBarIcon\n};\n","import * as o from \"react\";\nimport e from \"../lib/IconBase.es.js\";\nimport r from \"../defs/Lightning.es.js\";\nconst t = o.forwardRef((n, i) => /* @__PURE__ */ o.createElement(e, { ref: i, ...n, weights: r }));\nt.displayName = \"LightningIcon\";\nconst c = t;\nexport {\n c as Lightning,\n t as LightningIcon\n};\n","import * as o from \"react\";\nimport r from \"../lib/IconBase.es.js\";\nimport m from \"../defs/Path.es.js\";\nconst t = o.forwardRef((a, e) => /* @__PURE__ */ o.createElement(r, { ref: e, ...a, weights: m }));\nt.displayName = \"PathIcon\";\nconst n = t;\nexport {\n n as Path,\n t as PathIcon\n};\n","import { cn } from \"../../lib/utils\";\n\nexport function WorkingDuration(props: {\n className?: string | undefined;\n durationMs?: number | undefined;\n}) {\n if (props.durationMs === undefined) {\n return null;\n }\n\n return (\n <span\n aria-live=\"off\"\n className={cn(\n \"inline-flex items-center gap-1.5 text-xs font-medium tabular-nums text-muted-foreground\",\n props.className,\n )}\n >\n {formatWorkingDuration(props.durationMs)}\n </span>\n );\n}\n\nexport function formatWorkingDuration(durationMs: number): string {\n const normalizedDurationMs = Number.isFinite(durationMs) ? Math.max(0, durationMs) : 0;\n const totalSeconds = Math.floor(normalizedDurationMs / 1_000);\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n const duration = minutes === 0 ? `${seconds}s` : `${minutes}m ${seconds}s`;\n return `Finished - ${duration}`;\n}\n","import { CaretDown, ChartBar, Check, Copy, Lightning, Path } from \"@phosphor-icons/react\";\nimport { memo, useState } from \"react\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport { StudioIcon } from \"../../components/ui/icon\";\nimport { Textarea } from \"../../components/ui/textarea\";\nimport { cn } from \"../../lib/utils\";\nimport { approvalLabel } from \"../shared/format\";\nimport { MarkdownText, ToolPayload } from \"../shared/renderers\";\nimport type { ToolApproval, ToolMessage, ToolQuestion, TranscriptEntry } from \"../shared/types\";\nimport type { AssistantResponseMetrics, ResponseUsageMetrics } from \"./response-metrics\";\nimport { WorkingDuration } from \"./working-duration\";\n\nexport const TranscriptItem = memo(function TranscriptItem(props: {\n entry: TranscriptEntry;\n displayText?: string | undefined;\n live?: boolean | undefined;\n metrics?: AssistantResponseMetrics | undefined;\n decidingApprovals: Set<string>;\n answeringQuestions: Set<string>;\n onApprovalDecision: (approvalId: string, approved: boolean) => void;\n onQuestionAnswer: (\n questionId: string,\n answers: Array<{ questionId: string; answer: string; choice?: string; custom?: boolean }>,\n ) => void;\n onOpenTrace: (traceId: string) => void;\n}) {\n const displayText = props.displayText ?? (\"text\" in props.entry ? props.entry.text : \"\");\n if (props.entry.kind === \"reasoning\") {\n return (\n <article\n className=\"max-w-205 justify-self-start text-muted-foreground\"\n data-entry-id={String(props.entry.entryId)}\n data-entry-kind=\"reasoning\"\n >\n <div className=\"mb-1 text-xs font-semibold uppercase text-muted-foreground\">Reasoning</div>\n <MarkdownText live={props.live} size=\"base\" text={displayText} />\n </article>\n );\n }\n\n if (props.entry.kind === \"tool\") {\n return (\n <ToolEntry\n entry={props.entry}\n live={props.live}\n decidingApprovals={props.decidingApprovals}\n answeringQuestions={props.answeringQuestions}\n onApprovalDecision={props.onApprovalDecision}\n onQuestionAnswer={props.onQuestionAnswer}\n />\n );\n }\n\n const traceId = props.entry.role === \"assistant\" ? props.entry.traceId : undefined;\n const hasTable = props.entry.role === \"assistant\" && hasMarkdownTable(displayText);\n const isError =\n props.entry.role === \"assistant\" && \"tone\" in props.entry && props.entry.tone === \"error\";\n const isPending =\n props.entry.role === \"assistant\" && \"tone\" in props.entry && props.entry.tone === \"pending\";\n const showAssistantActions =\n props.entry.role === \"assistant\" && !isPending && props.entry.text.trim().length > 0;\n const persistedDurationMs = props.entry.durationMs ?? props.metrics?.durationMs;\n const showAssistantFooter = showAssistantActions || persistedDurationMs !== undefined;\n\n if (props.entry.role === \"user\") {\n return (\n <article\n className=\"grid w-fit max-w-[min(64ch,82%)] justify-items-end justify-self-end self-start text-foreground\"\n data-entry-id={String(props.entry.entryId)}\n data-entry-kind=\"message\"\n >\n {props.entry.text.trim().length === 0 ? null : (\n <div className=\"rounded-lg bg-muted px-4 py-2.5\">\n <MarkdownText size=\"base\" text={props.entry.text} />\n </div>\n )}\n {props.entry.attachments !== undefined ? (\n <MessageAttachments attachments={props.entry.attachments} />\n ) : null}\n </article>\n );\n }\n\n return (\n <article\n className={cn(\n \"self-start\",\n hasTable ? \"w-full max-w-full\" : \"max-w-[min(82ch,100%)]\",\n props.entry.role === \"assistant\" &&\n cn(\"justify-self-start text-foreground\", isError && \"text-destructive\"),\n )}\n data-entry-id={String(props.entry.entryId)}\n data-entry-kind=\"message\"\n >\n {isPending ? <AssistantLoadingIndicator /> : null}\n {displayText.trim().length === 0 ? null : (\n <MarkdownText live={props.live} size=\"base\" text={displayText} />\n )}\n {showAssistantFooter ? (\n <AssistantResponseFooter\n metrics={props.metrics}\n showActions={showAssistantActions}\n text={props.entry.text}\n traceId={traceId}\n durationMs={persistedDurationMs}\n onOpenTrace={props.onOpenTrace}\n />\n ) : null}\n </article>\n );\n});\n\nfunction AssistantResponseFooter(props: {\n durationMs?: number | undefined;\n metrics?: AssistantResponseMetrics | undefined;\n showActions: boolean;\n text: string;\n traceId?: string | undefined;\n onOpenTrace: (traceId: string) => void;\n}) {\n const [copied, setCopied] = useState(false);\n const traceId = props.traceId;\n\n async function copyResponse() {\n if (typeof navigator === \"undefined\" || navigator.clipboard === undefined) {\n return;\n }\n try {\n await navigator.clipboard.writeText(props.text);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 1200);\n } catch {\n setCopied(false);\n }\n }\n\n return (\n <div className=\"mt-3 flex min-w-0 items-center gap-1.5\">\n {props.showActions ? (\n <Button\n aria-label={copied ? \"Response copied\" : \"Copy response\"}\n className=\"h-8 min-h-8 w-8 rounded-lg border border-hair bg-muted p-0 text-muted-foreground shadow-none hover:border-foreground hover:bg-transparent hover:text-foreground\"\n title={copied ? \"Copied\" : \"Copy response\"}\n type=\"button\"\n variant=\"ghost\"\n onClick={() => void copyResponse()}\n >\n <StudioIcon icon={copied ? Check : Copy} aria-hidden=\"true\" />\n </Button>\n ) : null}\n {props.showActions ? (\n <div className=\"group relative\">\n <Button\n aria-label=\"Response metrics\"\n className=\"h-8 min-h-8 w-8 rounded-lg border border-hair bg-muted p-0 text-muted-foreground shadow-none hover:border-foreground hover:bg-transparent hover:text-foreground\"\n title={metricsTitle(props.metrics)}\n type=\"button\"\n variant=\"ghost\"\n >\n <StudioIcon icon={ChartBar} aria-hidden=\"true\" />\n </Button>\n <div\n className=\"pointer-events-none absolute left-0 top-full z-30 mt-2 hidden w-64 rounded-lg border border-hair bg-popover p-3 text-popover-foreground shadow-md group-focus-within:grid group-hover:grid\"\n role=\"tooltip\"\n >\n <ResponseMetricsTooltip metrics={props.metrics} />\n </div>\n </div>\n ) : null}\n {!props.showActions || traceId === undefined ? null : (\n <Button\n aria-label={`Open trace ${traceId}`}\n className=\"h-8 min-h-8 w-8 rounded-lg border border-hair bg-muted p-0 text-muted-foreground shadow-none hover:border-foreground hover:bg-transparent hover:text-foreground\"\n title={`Open trace ${traceId}`}\n type=\"button\"\n variant=\"ghost\"\n onClick={() => props.onOpenTrace(traceId)}\n >\n <StudioIcon icon={Path} aria-hidden=\"true\" />\n </Button>\n )}\n <WorkingDuration\n className={props.showActions ? \"ml-1.5\" : undefined}\n durationMs={props.durationMs}\n />\n </div>\n );\n}\n\nfunction ResponseMetricsTooltip(props: { metrics?: AssistantResponseMetrics | undefined }) {\n const rows = responseMetricRows(props.metrics);\n return (\n <div className=\"grid min-w-0 gap-2 text-xs leading-5\">\n <div className=\"font-semibold text-foreground\">Response metrics</div>\n <div className=\"grid min-w-0 gap-1\">\n <MetricRow label=\"Cost\" value=\"Unavailable\" />\n {rows.length === 0 ? (\n <div className=\"text-muted-foreground\">No usage metrics yet</div>\n ) : (\n rows.map((row) => <MetricRow label={row.label} value={row.value} key={row.label} />)\n )}\n </div>\n </div>\n );\n}\n\nfunction MetricRow(props: { label: string; value: string }) {\n return (\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <span className=\"text-muted-foreground\">{props.label}</span>\n <span className=\"shrink-0 font-medium tabular-nums text-foreground\">{props.value}</span>\n </div>\n );\n}\n\nfunction responseMetricRows(metrics: AssistantResponseMetrics | undefined): Array<{\n label: string;\n value: string;\n}> {\n const rows: Array<{ label: string; value: string }> = [];\n const usage = metrics?.usage;\n if (usage?.totalTokens !== undefined) {\n rows.push({ label: \"Total\", value: `${formatMetricNumber(usage.totalTokens)} tokens` });\n }\n if (usage?.inputTokens !== undefined) {\n rows.push({ label: \"Input\", value: formatMetricNumber(usage.inputTokens) });\n }\n if (usage?.outputTokens !== undefined) {\n rows.push({ label: \"Output\", value: formatMetricNumber(usage.outputTokens) });\n }\n pushOptionalUsageRow(rows, \"Cached\", usage, \"cachedInputTokens\");\n pushOptionalUsageRow(rows, \"Cache create\", usage, \"cacheCreationInputTokens\");\n if (metrics?.durationMs !== undefined) {\n rows.push({ label: \"Duration\", value: formatResponseDuration(metrics.durationMs) });\n }\n return rows;\n}\n\nfunction pushOptionalUsageRow(\n rows: Array<{ label: string; value: string }>,\n label: string,\n usage: ResponseUsageMetrics | undefined,\n key: keyof ResponseUsageMetrics,\n) {\n const value = usage?.[key];\n if (value !== undefined && value > 0) {\n rows.push({ label, value: formatMetricNumber(value) });\n }\n}\n\nfunction metricsTitle(metrics: AssistantResponseMetrics | undefined): string {\n const rows = responseMetricRows(metrics);\n if (rows.length === 0) {\n return \"Cost unavailable. No usage metrics yet.\";\n }\n return [\"Cost unavailable\", ...rows.map((row) => `${row.label}: ${row.value}`)].join(\". \");\n}\n\nfunction formatMetricNumber(value: number): string {\n return value.toLocaleString();\n}\n\nfunction formatResponseDuration(value: number): string {\n if (value < 1000) {\n return `${value}ms`;\n }\n return `${(value / 1000).toFixed(1)}s`;\n}\n\nfunction AssistantLoadingIndicator() {\n return (\n <div\n aria-label=\"Assistant is thinking\"\n aria-live=\"polite\"\n className=\"inline-flex min-h-8 items-center gap-2 py-1 text-muted-foreground\"\n role=\"status\"\n >\n <span className=\"text-base font-medium\">Thinking</span>\n <span className=\"flex items-center gap-1\" aria-hidden=\"true\">\n <span className=\"size-1 animate-pulse rounded-full bg-current motion-reduce:animate-none\" />\n <span className=\"size-1 animate-pulse rounded-full bg-current [animation-delay:150ms] motion-reduce:animate-none\" />\n <span className=\"size-1 animate-pulse rounded-full bg-current [animation-delay:300ms] motion-reduce:animate-none\" />\n </span>\n </div>\n );\n}\n\nfunction MessageAttachments(props: {\n attachments: NonNullable<Extract<TranscriptEntry, { kind: \"message\" }>[\"attachments\"]>;\n}) {\n return (\n <div className=\"mt-2 flex max-w-full flex-wrap gap-2\">\n {props.attachments.map((attachment, index) => {\n const key = `${attachment.kind}-${attachment.name ?? attachment.mediaType ?? index}-${index}`;\n if (attachment.kind === \"image\") {\n const src =\n attachment.url ??\n (attachment.data === undefined\n ? undefined\n : `data:${attachment.mediaType ?? \"image/png\"};base64,${attachment.data}`);\n return (\n <div className=\"overflow-hidden rounded-lg border border-hair bg-card\" key={key}>\n {src === undefined ? (\n <div className=\"grid h-20 w-24 place-items-center px-2 text-center text-xs text-muted-foreground\">\n Image\n </div>\n ) : (\n <img\n alt={attachment.name ?? \"Attached image\"}\n className=\"h-20 w-24 object-cover\"\n src={src}\n />\n )}\n </div>\n );\n }\n return (\n <span\n className=\"inline-flex max-w-full items-center gap-1.5 rounded-lg border border-hair bg-card px-2 py-1 text-xs font-medium text-muted-foreground\"\n key={key}\n >\n <span className=\"min-w-0 truncate\">\n {attachment.name ?? attachment.mediaType ?? \"Document\"}\n </span>\n </span>\n );\n })}\n </div>\n );\n}\n\nfunction hasMarkdownTable(text: string): boolean {\n const lines = text.split(\"\\n\");\n return lines.some((line, index) => {\n const next = lines[index + 1];\n return (\n line.includes(\"|\") &&\n next !== undefined &&\n /^\\s*\\|?\\s*:?-{3,}:?\\s*(\\|\\s*:?-{3,}:?\\s*)+\\|?\\s*$/.test(next)\n );\n });\n}\n\nfunction ToolEntry(props: {\n entry: ToolMessage;\n live?: boolean | undefined;\n decidingApprovals: Set<string>;\n answeringQuestions: Set<string>;\n onApprovalDecision: (approvalId: string, approved: boolean) => void;\n onQuestionAnswer: (\n questionId: string,\n answers: Array<{ questionId: string; answer: string; choice?: string; custom?: boolean }>,\n ) => void;\n}) {\n const [collapsed, setCollapsed] = useState(\n props.entry.approval?.status !== \"pending\" && props.entry.question?.status !== \"pending\",\n );\n const approval = props.entry.approval;\n const question = props.entry.question;\n const childEvents = props.entry.childEvents ?? [];\n const hasPayload =\n props.entry.args !== undefined ||\n props.entry.result !== undefined ||\n childEvents.length > 0 ||\n approval !== undefined ||\n question !== undefined;\n const pendingApproval = approval?.status === \"pending\";\n const pendingQuestion = question?.status === \"pending\";\n const cancelledInteraction = approval?.status === \"cancelled\" || question?.status === \"cancelled\";\n const rejectedApproval = approval?.status === \"rejected\";\n const timedOutApproval = approval?.status === \"timed_out\";\n const deciding = approval !== undefined && props.decidingApprovals.has(approval.id);\n const answering = question !== undefined && props.answeringQuestions.has(question.id);\n const status = pendingApproval\n ? \"Approval required\"\n : pendingQuestion\n ? \"Input required\"\n : cancelledInteraction\n ? \"Cancelled\"\n : rejectedApproval\n ? \"Rejected\"\n : timedOutApproval\n ? \"Timed out\"\n : props.live === true && props.entry.result === undefined\n ? \"Running\"\n : undefined;\n\n return (\n <article\n className=\"w-full justify-self-start text-foreground\"\n data-entry-id={String(props.entry.entryId)}\n data-entry-kind=\"tool\"\n >\n <div className=\"flex min-w-0 items-center gap-2 py-0.5\">\n <Button\n aria-expanded={hasPayload ? !collapsed : undefined}\n aria-label={`${collapsed ? \"Expand\" : \"Collapse\"} ${props.entry.toolName} tool call`}\n className=\"h-auto min-h-9 min-w-0 flex-1 justify-start gap-2.5 rounded-lg border-0 bg-transparent px-1 py-0.5 text-left text-inherit shadow-none hover:bg-transparent hover:text-inherit\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => setCollapsed((current) => !current)}\n >\n <span\n className=\"grid size-6 shrink-0 place-items-center rounded-md border border-hair bg-muted text-muted-foreground\"\n data-tool-icon=\"action\"\n >\n <StudioIcon icon={Lightning} className=\"size-2.5\" weight=\"fill\" aria-hidden=\"true\" />\n </span>\n <strong className=\"min-w-0 truncate font-mono text-sm font-medium text-foreground\">\n {props.entry.toolName}\n </strong>\n {status === undefined ? null : (\n <span className=\"ml-auto inline-flex shrink-0 items-center gap-1.5 text-sm font-normal text-muted-foreground\">\n <span\n className={cn(\n \"size-1.5 rounded-full bg-dim\",\n status === \"Running\" && \"animate-pulse bg-foreground motion-reduce:animate-none\",\n (cancelledInteraction || rejectedApproval || timedOutApproval) &&\n \"bg-destructive\",\n )}\n aria-hidden=\"true\"\n />\n {status}\n </span>\n )}\n {hasPayload ? (\n <span className=\"grid size-6 shrink-0 place-items-center text-muted-foreground\">\n <StudioIcon\n icon={CaretDown}\n className={cn(\"size-4 transition-transform\", collapsed && \"-rotate-90\")}\n aria-hidden=\"true\"\n />\n </span>\n ) : null}\n </Button>\n {pendingApproval && approval !== undefined ? (\n <ToolApprovalActions\n disabled={deciding}\n onDecision={(approved) => props.onApprovalDecision(approval.id, approved)}\n />\n ) : null}\n </div>\n {collapsed || !hasPayload ? null : (\n <div className=\"ml-8 grid gap-3 py-2\">\n {approval === undefined ? null : <ToolApprovalPanel approval={approval} />}\n {question === undefined ? null : (\n <ToolQuestionPanel\n disabled={answering}\n question={question}\n onAnswer={(answers) => props.onQuestionAnswer(question.id, answers)}\n />\n )}\n {question !== undefined || props.entry.args === undefined ? null : (\n <ToolPayload title=\"Input\" value={props.entry.args} />\n )}\n {childEvents.length === 0 ? null : <ChildAgentActivity events={childEvents} />}\n {question !== undefined || props.entry.result === undefined ? null : (\n <ToolPayload title=\"Output\" value={props.entry.result} />\n )}\n </div>\n )}\n </article>\n );\n}\n\nfunction ChildAgentActivity(props: { events: NonNullable<ToolMessage[\"childEvents\"]> }) {\n return (\n <div className=\"overflow-hidden rounded-none border border-hair bg-background\">\n <div className=\"bg-muted px-3 py-2 text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground\">\n Subagent activity\n </div>\n <div className=\"grid gap-3 p-3\">\n {props.events.map((event) => {\n const agentLabel = event.agentName ?? event.agentId;\n if (event.kind === \"message\" || event.kind === \"reasoning\") {\n return (\n <div\n className=\"grid gap-1 rounded-none border border-hair bg-card p-3\"\n key={`${event.kind}-${event.agentId}-${event.text}`}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge className=\"border-border bg-muted px-1.5 py-0.5 text-xs uppercase text-muted-foreground\">\n {event.kind === \"reasoning\" ? \"Reasoning\" : \"Response\"}\n </Badge>\n <span className=\"min-w-0 truncate text-xs font-semibold text-muted-foreground\">\n {agentLabel}\n </span>\n </div>\n <MarkdownText size=\"base\" text={event.text} />\n </div>\n );\n }\n return (\n <div\n className=\"grid gap-2 rounded-none border border-hair bg-card p-3\"\n key={`${event.kind}-${event.agentId}-${event.toolName}-${event.callId ?? event.args ?? event.result ?? \"\"}`}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge className=\"border-hair bg-muted px-1.5 py-0.5 text-xs uppercase text-foreground\">\n Tool\n </Badge>\n <span className=\"min-w-0 truncate text-xs font-semibold text-muted-foreground\">\n {agentLabel} / {event.toolName}\n </span>\n </div>\n {event.args === undefined ? null : <ToolPayload title=\"Input\" value={event.args} />}\n {event.result === undefined ? null : (\n <ToolPayload title=\"Output\" value={event.result} />\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\nfunction ToolQuestionPanel(props: {\n question: ToolQuestion;\n disabled: boolean;\n onAnswer: (\n answers: Array<{ questionId: string; answer: string; choice?: string; custom?: boolean }>,\n ) => void;\n}) {\n const [values, setValues] = useState<Record<string, QuestionDraft>>({});\n const [activeQuestionIndex, setActiveQuestionIndex] = useState(0);\n const pending = props.question.status === \"pending\";\n const total = props.question.questions.length;\n\n const answers = props.question.questions.map((question) => {\n const draft = values[question.id];\n const customAnswer = draft?.customValue?.trim() ?? \"\";\n const answer = customAnswer.length > 0 ? customAnswer : draft?.answer;\n const normalized: { questionId: string; answer: string; choice?: string; custom?: boolean } = {\n questionId: question.id,\n answer: answer?.trim() ?? \"\",\n };\n if (draft?.choice !== undefined) normalized.choice = draft.choice;\n if (customAnswer.length > 0) normalized.custom = true;\n return normalized;\n });\n const activeIndex = total === 0 ? 0 : Math.min(activeQuestionIndex, total - 1);\n const activeQuestion = props.question.questions[activeIndex];\n const activeAnswer = answers[activeIndex]?.answer ?? \"\";\n const answeredCount = answers.filter((answer) => answer.answer.length > 0).length;\n const canAdvance = activeAnswer.length > 0;\n const canSubmit = pending && answers.every((answer) => answer.answer.length > 0);\n const firstQuestion = activeIndex === 0;\n const lastQuestion = activeIndex >= total - 1;\n\n if (activeQuestion === undefined) {\n return (\n <div className=\"rounded-none border border-border bg-background p-4 text-sm font-medium text-muted-foreground\">\n No questions\n </div>\n );\n }\n\n const goPrevious = () => setActiveQuestionIndex((current) => Math.max(0, current - 1));\n const goNext = () =>\n setActiveQuestionIndex((current) => Math.min(props.question.questions.length - 1, current + 1));\n const updateDraft = (questionId: string, value: QuestionDraft) =>\n setValues((current) => ({\n ...current,\n [questionId]: value,\n }));\n\n return (\n <div className=\"grid gap-3\">\n {props.question.status === \"cancelled\" ? (\n <div className=\"rounded-none border border-hair bg-muted px-3 py-2.5 text-sm font-medium text-muted-foreground\">\n Question cancelled\n </div>\n ) : null}\n <QuestionPromptControl\n key={activeQuestion.id}\n disabled={props.disabled || !pending}\n index={activeIndex}\n total={total}\n question={activeQuestion}\n value={values[activeQuestion.id]}\n answer={props.question.answers?.find((answer) => answer.questionId === activeQuestion.id)}\n onChange={(value) => updateDraft(activeQuestion.id, value)}\n onAdvance={lastQuestion ? undefined : goNext}\n />\n {pending ? (\n <div className=\"flex min-w-0 items-center justify-between gap-3 rounded-none bg-muted px-3 py-2\">\n <div className=\"min-w-0 text-xs font-semibold uppercase tracking-[0.2em] text-muted-foreground\">\n {answeredCount}/{total} answered\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n {firstQuestion ? null : (\n <Button type=\"button\" variant=\"secondary\" onClick={goPrevious}>\n Back\n </Button>\n )}\n {lastQuestion ? (\n <Button\n className=\"h-9 min-h-9 px-4\"\n disabled={props.disabled || !canSubmit}\n type=\"button\"\n onClick={() => props.onAnswer(answers)}\n >\n Submit answers\n </Button>\n ) : (\n <Button\n className=\"h-9 min-h-9 px-4\"\n disabled={props.disabled || !canAdvance}\n type=\"button\"\n onClick={goNext}\n >\n Next question\n </Button>\n )}\n </div>\n </div>\n ) : total > 1 ? (\n <div className=\"flex min-w-0 items-center justify-between gap-3 rounded-none bg-muted px-3 py-2\">\n <div className=\"min-w-0 text-xs font-semibold uppercase tracking-[0.2em] text-foreground\">\n Answered\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n <Button disabled={firstQuestion} type=\"button\" variant=\"secondary\" onClick={goPrevious}>\n Back\n </Button>\n <Button disabled={lastQuestion} type=\"button\" variant=\"secondary\" onClick={goNext}>\n Next\n </Button>\n </div>\n </div>\n ) : null}\n </div>\n );\n}\n\ntype QuestionDraft = {\n answer?: string;\n choice?: string;\n customValue?: string;\n};\n\nfunction QuestionPromptControl(props: {\n question: ToolQuestion[\"questions\"][number];\n value: QuestionDraft | undefined;\n answer: NonNullable<ToolQuestion[\"answers\"]>[number] | undefined;\n disabled: boolean;\n index: number;\n total: number;\n onChange: (value: QuestionDraft) => void;\n onAdvance: (() => void) | undefined;\n}) {\n const submittedAnswer = props.answer?.answer;\n const draftAnswer = questionDraftAnswer(props.value);\n const state =\n submittedAnswer !== undefined ? \"Answered\" : draftAnswer.length > 0 ? \"Ready\" : \"Waiting\";\n\n return (\n <section className=\"grid gap-4 rounded-none border border-hair bg-background p-4\">\n <div className=\"flex min-w-0 items-start justify-between gap-4\">\n <div className=\"grid min-w-0 gap-2\">\n <div className=\" text-xs font-semibold uppercase tracking-[0.2em] text-muted-foreground\">\n Question {props.index + 1} of {props.total}\n </div>\n <h3 className=\"m-0 text-base font-semibold leading-7 text-foreground [overflow-wrap:anywhere]\">\n {props.question.question}\n </h3>\n </div>\n <span\n className={cn(\n \"shrink-0 text-xs font-semibold uppercase tracking-[0.18em]\",\n state === \"Answered\" && \"text-foreground\",\n state === \"Ready\" && \"text-foreground\",\n state === \"Waiting\" && \"text-muted-foreground\",\n )}\n >\n {state}\n </span>\n </div>\n {submittedAnswer === undefined ? null : (\n <div className=\"rounded-lg border border-hair bg-muted px-3 py-2 text-sm font-medium text-foreground\">\n {submittedAnswer}\n </div>\n )}\n {submittedAnswer !== undefined ? null : props.question.choices.length > 0 ? (\n <div className=\"flex flex-wrap gap-2\">\n {props.question.choices.map((choice) => {\n const active = props.value?.choice === choice.value;\n return (\n <Button\n key={choice.value}\n className={cn(\"h-8 min-h-8 px-3 text-xs\", active && \"border-foreground\")}\n disabled={props.disabled}\n size=\"sm\"\n type=\"button\"\n variant={active ? \"default\" : \"secondary\"}\n onClick={() => {\n props.onChange({\n answer: choice.value,\n choice: choice.value,\n customValue: props.value?.customValue ?? \"\",\n });\n props.onAdvance?.();\n }}\n >\n {choice.label}\n </Button>\n );\n })}\n </div>\n ) : null}\n {submittedAnswer !== undefined ||\n (props.question.choices.length > 0 && !props.question.allowCustom) ? null : (\n <Textarea\n className=\"min-h-24 text-sm\"\n disabled={props.disabled}\n placeholder=\"Type a custom answer\"\n rows={3}\n value={props.value?.customValue ?? \"\"}\n onChange={(event) =>\n props.onChange({\n ...props.value,\n customValue: event.currentTarget.value,\n })\n }\n />\n )}\n </section>\n );\n}\n\nfunction questionDraftAnswer(value: QuestionDraft | undefined): string {\n const customAnswer = value?.customValue?.trim() ?? \"\";\n return customAnswer.length > 0 ? customAnswer : (value?.answer?.trim() ?? \"\");\n}\n\nfunction ToolApprovalPanel(props: { approval: ToolApproval }) {\n return (\n <div className=\"grid gap-2 rounded-none border border-hair bg-muted px-3 py-2.5\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge\n className={cn(\n \"border-hair bg-background px-1.5 py-0.5 text-xs uppercase text-muted-foreground\",\n props.approval.status === \"approved\" && \"text-foreground\",\n props.approval.status === \"rejected\" && \"text-destructive\",\n )}\n >\n Approval\n </Badge>\n <div className=\"min-w-0\">\n <div className=\"text-sm font-medium text-foreground\">{approvalLabel(props.approval)}</div>\n </div>\n </div>\n {props.approval.reason === undefined ? null : (\n <div className=\"text-xs font-medium text-muted-foreground [overflow-wrap:anywhere]\">\n {props.approval.reason}\n </div>\n )}\n </div>\n );\n}\n\nfunction ToolApprovalActions(props: {\n disabled: boolean;\n onDecision: (approved: boolean) => void;\n}) {\n return (\n <div className=\"flex shrink-0 items-center gap-1\">\n <Button\n className=\"h-8 min-h-8 border-0 bg-transparent px-3 text-sm text-muted-foreground shadow-none hover:bg-status-danger-fill hover:text-destructive\"\n disabled={props.disabled}\n size=\"sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => props.onDecision(false)}\n >\n Reject\n </Button>\n <Button\n className=\"h-8 min-h-8 px-3 text-sm\"\n disabled={props.disabled}\n size=\"sm\"\n type=\"button\"\n onClick={() => props.onDecision(true)}\n >\n Approve\n </Button>\n </div>\n );\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5],"mappings":"4YACMA,EAAoB,IAAI,IAAI,CAChC,CACE,OACgB,EAAE,cAAA,EAAgB,SAAU,KAAsB,EAAE,cAAc,OAAQ,CAAE,EAAG,2MAA4M,CAAC,CAAC,CAC/S,EACA,CACE,UACgB,EAAE,cAAA,EAAgB,SAAU,KAAsB,EAAE,cAAc,OAAQ,CAAE,EAAG,sBAAuB,QAAS,KAAM,CAAC,EAAmB,EAAE,cAAc,OAAQ,CAAE,EAAG,wLAAyL,CAAC,CAAC,CACnX,EACA,CACE,OACgB,EAAE,cAAA,EAAgB,SAAU,KAAsB,EAAE,cAAc,OAAQ,CAAE,EAAG,yLAA0L,CAAC,CAAC,CAC7R,EACA,CACE,QACgB,EAAE,cAAA,EAAgB,SAAU,KAAsB,EAAE,cAAc,OAAQ,CAAE,EAAG,yLAA0L,CAAC,CAAC,CAC7R,EACA,CACE,UACgB,EAAE,cAAA,EAAgB,SAAU,KAAsB,EAAE,cAAc,OAAQ,CAAE,EAAG,wLAAyL,CAAC,CAAC,CAC5R,EACA,CACE,OACgB,EAAE,cAAA,EAAgB,SAAU,KAAsB,EAAE,cAAc,OAAQ,CAAE,EAAG,uLAAwL,CAAC,CAAC,CAC3R,CACF,CAAC,ECzBKC,EAAoB,IAAI,IAAI,CAChC,CACE,OACgB,EAAE,cAAA,EAAgB,SAAU,KAAsB,EAAE,cAAc,OAAQ,CAAE,EAAG,6TAA8T,CAAC,CAAC,CACja,EACA,CACE,UACgB,EAAE,cAAA,EAAgB,SAAU,KAAsB,EAAE,cAAc,OAAQ,CAAE,EAAG,4CAA6C,QAAS,KAAM,CAAC,EAAmB,EAAE,cAAc,OAAQ,CAAE,EAAG,sRAAuR,CAAC,CAAC,CACve,EACA,CACE,OACgB,EAAE,cAAA,EAAgB,SAAU,KAAsB,EAAE,cAAc,OAAQ,CAAE,EAAG,wJAAyJ,CAAC,CAAC,CAC5P,EACA,CACE,QACgB,EAAE,cAAA,EAAgB,SAAU,KAAsB,EAAE,cAAc,OAAQ,CAAE,EAAG,sUAAuU,CAAC,CAAC,CAC1a,EACA,CACE,UACgB,EAAE,cAAA,EAAgB,SAAU,KAAsB,EAAE,cAAc,OAAQ,CAAE,EAAG,sRAAuR,CAAC,CAAC,CAC1X,EACA,CACE,OACgB,EAAE,cAAA,EAAgB,SAAU,KAAsB,EAAE,cAAc,OAAQ,CAAE,EAAG,qTAAsT,CAAC,CAAC,CACzZ,CACF,CAAC,ECzBK,EAAoB,IAAI,IAAI,CAChC,CACE,OACgB,EAAE,cAAA,EAAgB,SAAU,KAAsB,EAAE,cAAc,OAAQ,CAAE,EAAG,iNAAkN,CAAC,CAAC,CACrT,EACA,CACE,UACgB,EAAE,cAAA,EAAgB,SAAU,KAAsB,EAAE,cAAc,OAAQ,CAAE,EAAG,kDAAmD,QAAS,KAAM,CAAC,EAAmB,EAAE,cAAc,OAAQ,CAAE,EAAG,sMAAuM,CAAC,CAAC,CAC7Z,EACA,CACE,OACgB,EAAE,cAAA,EAAgB,SAAU,KAAsB,EAAE,cAAc,OAAQ,CAAE,EAAG,4JAA6J,CAAC,CAAC,CAChQ,EACA,CACE,QACgB,EAAE,cAAA,EAAgB,SAAU,KAAsB,EAAE,cAAc,OAAQ,CAAE,EAAG,4MAA6M,CAAC,CAAC,CAChT,EACA,CACE,UACgB,EAAE,cAAA,EAAgB,SAAU,KAAsB,EAAE,cAAc,OAAQ,CAAE,EAAG,sMAAuM,CAAC,CAAC,CAC1S,EACA,CACE,OACgB,EAAE,cAAA,EAAgB,SAAU,KAAsB,EAAE,cAAc,OAAQ,CAAE,EAAG,wMAAyM,CAAC,CAAC,CAC5S,CACF,CAAC,ECvBK,EAAA,EAAM,YAAY,EAAG,IAAsB,EAAE,cAAcC,EAAG,CAAE,IAAK,EAAG,GAAG,EAAG,QAASC,CAAE,CAAC,CAAC,EACjG,EAAE,YAAc,eAChB,IAAMC,EAAI,ECFJC,EAAAA,EAAM,YAAY,EAAG,IAAsB,EAAE,cAAcC,EAAG,CAAE,IAAK,EAAG,GAAG,EAAG,QAASC,CAAE,CAAC,CAAC,EACjG,EAAE,YAAc,gBAChB,IAAM,EAAIF,ECFJ,EAAA,EAAM,YAAY,EAAG,IAAsB,EAAE,cAAcG,EAAG,CAAE,IAAKC,EAAG,GAAG,EAAG,QAASC,CAAE,CAAC,CAAC,EACjG,EAAE,YAAc,WAChB,IAAM,EAAI,QCHV,SAAgB,EAAgB,EAG7B,CAKD,OAJI,EAAM,aAAe,IAAA,GAChB,MAIP,EAAA,EAAA,IAAA,CAAC,OAAD,CACE,YAAU,MACV,UAAW,EACT,0FACA,EAAM,SACR,EAEC,SAAA,EAAsB,EAAM,UAAU,CACnC,CAAA,CAEV,CAEA,SAAgB,EAAsB,EAA4B,CAEhE,IAAM,EAAe,KAAK,OADG,OAAO,SAAS,CAAU,EAAI,KAAK,IAAI,EAAG,CAAU,EAAI,GAC9B,GAAK,EACtD,EAAU,KAAK,MAAM,EAAe,EAAE,EACtC,EAAU,EAAe,GAE/B,MAAO,cADU,IAAY,EAAI,GAAG,EAAQ,GAAK,GAAG,EAAQ,IAAI,EAAQ,IAE1E,CCjBA,IAAa,GAAA,EAAiB,EAAA,KAAA,CAAK,SAAwB,EAaxD,CACD,IAAM,EAAc,EAAM,cAAgB,SAAU,EAAM,MAAQ,EAAM,MAAM,KAAO,IACrF,GAAI,EAAM,MAAM,OAAS,YACvB,OACE,EAAA,EAAA,KAAA,CAAC,UAAD,CACE,UAAU,qDACV,gBAAe,OAAO,EAAM,MAAM,OAAO,EACzC,kBAAgB,YAHlB,SAAA,EAKE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,6DAA6D,SAAA,WAAc,CAAA,GAC1F,EAAA,EAAA,IAAA,CAAC,EAAD,CAAc,KAAM,EAAM,KAAM,KAAK,OAAO,KAAM,CAAc,CAAA,CACzD,IAIb,GAAI,EAAM,MAAM,OAAS,OACvB,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,MAAO,EAAM,MACb,KAAM,EAAM,KACZ,kBAAmB,EAAM,kBACzB,mBAAoB,EAAM,mBAC1B,mBAAoB,EAAM,mBAC1B,iBAAkB,EAAM,gBACzB,CAAA,EAIL,IAAM,EAAU,EAAM,MAAM,OAAS,YAAc,EAAM,MAAM,QAAU,IAAA,GACnE,EAAW,EAAM,MAAM,OAAS,aAAe,EAAiB,CAAW,EAC3E,EACJ,EAAM,MAAM,OAAS,aAAe,SAAU,EAAM,OAAS,EAAM,MAAM,OAAS,QAC9E,EACJ,EAAM,MAAM,OAAS,aAAe,SAAU,EAAM,OAAS,EAAM,MAAM,OAAS,UAC9E,EACJ,EAAM,MAAM,OAAS,aAAe,CAAC,GAAa,EAAM,MAAM,KAAK,KAAK,CAAC,CAAC,OAAS,EAC/E,EAAsB,EAAM,MAAM,YAAc,EAAM,SAAS,WAC/D,EAAsB,GAAwB,IAAwB,IAAA,GAqB5E,OAnBI,EAAM,MAAM,OAAS,QAErB,EAAA,EAAA,KAAA,CAAC,UAAD,CACE,UAAU,iGACV,gBAAe,OAAO,EAAM,MAAM,OAAO,EACzC,kBAAgB,UAHlB,SAAA,CAKG,EAAM,MAAM,KAAK,KAAK,CAAC,CAAC,SAAW,EAAI,MACtC,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,kCACb,UAAA,EAAA,EAAA,IAAA,CAAC,EAAD,CAAc,KAAK,OAAO,KAAM,EAAM,MAAM,IAAO,CAAA,CAChD,CAAA,EAEN,EAAM,MAAM,cAAgB,IAAA,GAEzB,MADF,EAAA,EAAA,IAAA,CAAC,EAAD,CAAoB,YAAa,EAAM,MAAM,WAAc,CAAA,CAEtD,KAKX,EAAA,EAAA,KAAA,CAAC,UAAD,CACE,UAAW,EACT,aACA,EAAW,oBAAsB,yBACjC,EAAM,MAAM,OAAS,aACnB,EAAG,qCAAsC,GAAW,kBAAkB,CAC1E,EACA,gBAAe,OAAO,EAAM,MAAM,OAAO,EACzC,kBAAgB,UARlB,SAAA,CAUG,GAAY,EAAA,EAAA,IAAA,CAAC,EAAD,CAA4B,CAAA,EAAI,KAC5C,EAAY,KAAK,CAAC,CAAC,SAAW,EAAI,MACjC,EAAA,EAAA,IAAA,CAAC,EAAD,CAAc,KAAM,EAAM,KAAM,KAAK,OAAO,KAAM,CAAc,CAAA,EAEjE,GACC,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,QAAS,EAAM,QACf,YAAa,EACb,KAAM,EAAM,MAAM,KACT,UACT,WAAY,EACZ,YAAa,EAAM,WACpB,CAAA,EACC,IACG,GAEb,CAAC,EAED,SAAS,EAAwB,EAO9B,CACD,GAAM,CAAC,EAAQ,IAAA,EAAa,EAAA,SAAA,CAAS,EAAK,EACpC,EAAU,EAAM,QAEtB,eAAe,GAAe,CACxB,YAAO,UAAc,KAAe,UAAU,YAAc,IAAA,IAGhE,GAAI,CACF,MAAM,UAAU,UAAU,UAAU,EAAM,IAAI,EAC9C,EAAU,EAAI,EACd,OAAO,eAAiB,EAAU,EAAK,EAAG,IAAI,CAChD,MAAQ,CACN,EAAU,EAAK,CACjB,CACF,CAEA,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,yCAAf,SAAA,CACG,EAAM,aACL,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,aAAY,EAAS,kBAAoB,gBACzC,UAAU,kKACV,MAAO,EAAS,SAAW,gBAC3B,KAAK,SACL,QAAQ,QACR,YAAe,KAAK,EAAa,EAEjC,UAAA,EAAA,EAAA,IAAA,CAAC,EAAD,CAAY,KAAM,EAAS,EAAQ,EAAM,cAAY,MAAQ,CAAA,CACvD,CAAA,EACN,KACH,EAAM,aACL,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,iBAAf,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,aAAW,mBACX,UAAU,kKACV,MAAO,EAAa,EAAM,OAAO,EACjC,KAAK,SACL,QAAQ,QAER,UAAA,EAAA,EAAA,IAAA,CAAC,EAAD,CAAY,KAAM,EAAU,cAAY,MAAQ,CAAA,CAC1C,CAAA,GACR,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,UAAU,6LACV,KAAK,UAEL,UAAA,EAAA,EAAA,IAAA,CAAC,EAAD,CAAwB,QAAS,EAAM,OAAU,CAAA,CAC9C,CAAA,CACF,CACH,CAAA,EAAA,KACH,CAAC,EAAM,aAAe,IAAY,IAAA,GAAY,MAC7C,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,aAAY,cAAc,IAC1B,UAAU,kKACV,MAAO,cAAc,IACrB,KAAK,SACL,QAAQ,QACR,YAAe,EAAM,YAAY,CAAO,EAExC,UAAA,EAAA,EAAA,IAAA,CAAC,EAAD,CAAY,KAAM,EAAM,cAAY,MAAQ,CAAA,CACtC,CAAA,GAEV,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,UAAW,EAAM,YAAc,SAAW,IAAA,GAC1C,WAAY,EAAM,UACnB,CAAA,CACE,GAET,CAEA,SAAS,EAAuB,EAA2D,CACzF,IAAM,EAAO,EAAmB,EAAM,OAAO,EAC7C,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,uCAAf,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,gCAAgC,SAAA,kBAAqB,CAAA,GACpE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,qBAAf,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAW,MAAM,OAAO,MAAM,aAAe,CAAA,EAC5C,EAAK,SAAW,GACf,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,wBAAwB,SAAA,sBAAyB,CAAA,EAEhE,EAAK,IAAK,IAAQ,EAAA,EAAA,IAAA,CAAC,EAAD,CAAW,MAAO,EAAI,MAAO,MAAO,EAAI,KAAwB,EAAZ,EAAI,KAAQ,CAAC,CAElF,CACF,CAAA,CAAA,GAET,CAEA,SAAS,EAAU,EAAyC,CAC1D,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,kDAAf,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,wBAAyB,SAAA,EAAM,KAAY,CAAA,GAC3D,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,oDAAqD,SAAA,EAAM,KAAY,CAAA,CACpF,GAET,CAEA,SAAS,EAAmB,EAGzB,CACD,IAAM,EAAgD,CAAC,EACjD,EAAQ,GAAS,MAevB,OAdI,GAAO,cAAgB,IAAA,IACzB,EAAK,KAAK,CAAE,MAAO,QAAS,MAAO,GAAG,EAAmB,EAAM,WAAW,EAAE,QAAS,CAAC,EAEpF,GAAO,cAAgB,IAAA,IACzB,EAAK,KAAK,CAAE,MAAO,QAAS,MAAO,EAAmB,EAAM,WAAW,CAAE,CAAC,EAExE,GAAO,eAAiB,IAAA,IAC1B,EAAK,KAAK,CAAE,MAAO,SAAU,MAAO,EAAmB,EAAM,YAAY,CAAE,CAAC,EAE9E,EAAqB,EAAM,SAAU,EAAO,mBAAmB,EAC/D,EAAqB,EAAM,eAAgB,EAAO,0BAA0B,EACxE,GAAS,aAAe,IAAA,IAC1B,EAAK,KAAK,CAAE,MAAO,WAAY,MAAO,EAAuB,EAAQ,UAAU,CAAE,CAAC,EAE7E,CACT,CAEA,SAAS,EACP,EACA,EACA,EACA,EACA,CACA,IAAM,EAAQ,IAAQ,GAClB,IAAU,IAAA,IAAa,EAAQ,GACjC,EAAK,KAAK,CAAE,QAAO,MAAO,EAAmB,CAAK,CAAE,CAAC,CAEzD,CAEA,SAAS,EAAa,EAAuD,CAC3E,IAAM,EAAO,EAAmB,CAAO,EAIvC,OAHI,EAAK,SAAW,EACX,0CAEF,CAAC,mBAAoB,GAAG,EAAK,IAAK,GAAQ,GAAG,EAAI,MAAM,IAAI,EAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAC3F,CAEA,SAAS,EAAmB,EAAuB,CACjD,OAAO,EAAM,eAAe,CAC9B,CAEA,SAAS,EAAuB,EAAuB,CAIrD,OAHI,EAAQ,IACH,GAAG,EAAM,IAEX,IAAI,EAAQ,IAAA,CAAM,QAAQ,CAAC,EAAE,EACtC,CAEA,SAAS,GAA4B,CACnC,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CACE,aAAW,wBACX,YAAU,SACV,UAAU,oEACV,KAAK,SAJP,SAAA,EAME,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,wBAAwB,SAAA,UAAc,CAAA,GACtD,EAAA,EAAA,KAAA,CAAC,OAAD,CAAM,UAAU,0BAA0B,cAAY,OAAtD,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,yEAA2E,CAAA,GAC3F,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,iGAAmG,CAAA,GACnH,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,iGAAmG,CAAA,CAC/G,CACH,CAAA,CAAA,GAET,CAEA,SAAS,EAAmB,EAEzB,CACD,OACE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,uCACZ,SAAA,EAAM,YAAY,KAAK,EAAY,IAAU,CAC5C,IAAM,EAAM,GAAG,EAAW,KAAK,GAAG,EAAW,MAAQ,EAAW,WAAa,EAAM,GAAG,IACtF,GAAI,EAAW,OAAS,QAAS,CAC/B,IAAM,EACJ,EAAW,MACV,EAAW,OAAS,IAAA,GACjB,IAAA,GACA,QAAQ,EAAW,WAAa,YAAY,UAAU,EAAW,QACvE,OACE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,wDACZ,SAAA,IAAQ,IAAA,IACP,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,mFAAmF,SAAA,OAE7F,CAAA,GAEL,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,IAAK,EAAW,MAAQ,iBACxB,UAAU,yBACL,KACN,CAAA,CAEA,EAZuE,CAYvE,CAET,CACA,OACE,EAAA,EAAA,IAAA,CAAC,OAAD,CACE,UAAU,wIAGV,UAAA,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,mBACb,SAAA,EAAW,MAAQ,EAAW,WAAa,UACxC,CAAA,CACF,EALC,CAKD,CAEV,CAAC,CACE,CAAA,CAET,CAEA,SAAS,EAAiB,EAAuB,CAC/C,IAAM,EAAQ,EAAK,MAAM;CAAI,EAC7B,OAAO,EAAM,MAAM,EAAM,IAAU,CACjC,IAAM,EAAO,EAAM,EAAQ,GAC3B,OACE,EAAK,SAAS,GAAG,GACjB,IAAS,IAAA,IACT,oDAAoD,KAAK,CAAI,CAEjE,CAAC,CACH,CAEA,SAAS,EAAU,EAUhB,CACD,GAAM,CAAC,EAAW,IAAA,EAAgB,EAAA,SAAA,CAChC,EAAM,MAAM,UAAU,SAAW,WAAa,EAAM,MAAM,UAAU,SAAW,SACjF,EACM,EAAW,EAAM,MAAM,SACvB,EAAW,EAAM,MAAM,SACvB,EAAc,EAAM,MAAM,aAAe,CAAC,EAC1C,EACJ,EAAM,MAAM,OAAS,IAAA,IACrB,EAAM,MAAM,SAAW,IAAA,IACvB,EAAY,OAAS,GACrB,IAAa,IAAA,IACb,IAAa,IAAA,GACT,EAAkB,GAAU,SAAW,UACvC,EAAkB,GAAU,SAAW,UACvC,EAAuB,GAAU,SAAW,aAAe,GAAU,SAAW,YAChF,EAAmB,GAAU,SAAW,WACxC,EAAmB,GAAU,SAAW,YACxC,EAAW,IAAa,IAAA,IAAa,EAAM,kBAAkB,IAAI,EAAS,EAAE,EAC5E,EAAY,IAAa,IAAA,IAAa,EAAM,mBAAmB,IAAI,EAAS,EAAE,EAC9E,EAAS,EACX,oBACA,EACE,iBACA,EACE,YACA,EACE,WACA,EACE,YACA,EAAM,OAAS,IAAQ,EAAM,MAAM,SAAW,IAAA,GAC5C,UACA,IAAA,GAEd,OACE,EAAA,EAAA,KAAA,CAAC,UAAD,CACE,UAAU,4CACV,gBAAe,OAAO,EAAM,MAAM,OAAO,EACzC,kBAAgB,OAHlB,SAAA,EAKE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,yCAAf,SAAA,EACE,EAAA,EAAA,KAAA,CAAC,EAAD,CACE,gBAAe,EAAa,CAAC,EAAY,IAAA,GACzC,aAAY,GAAG,EAAY,SAAW,WAAW,GAAG,EAAM,MAAM,SAAS,YACzE,UAAU,gLACV,KAAK,SACL,QAAQ,QACR,YAAe,EAAc,GAAY,CAAC,CAAO,EANnD,SAAA,EAQE,EAAA,EAAA,IAAA,CAAC,OAAD,CACE,UAAU,uGACV,iBAAe,SAEf,UAAA,EAAA,EAAA,IAAA,CAAC,EAAD,CAAY,KAAM,EAAW,UAAU,WAAW,OAAO,OAAO,cAAY,MAAQ,CAAA,CAChF,CAAA,GACN,EAAA,EAAA,IAAA,CAAC,SAAD,CAAQ,UAAU,iEACf,SAAA,EAAM,MAAM,QACP,CAAA,EACP,IAAW,IAAA,GAAY,MACtB,EAAA,EAAA,KAAA,CAAC,OAAD,CAAM,UAAU,8FAAhB,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,OAAD,CACE,UAAW,EACT,+BACA,IAAW,WAAa,0DACvB,GAAwB,GAAoB,IAC3C,gBACJ,EACA,cAAY,MACb,CAAA,EACA,CACG,IAEP,GACC,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,gEACd,UAAA,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,KAAM,EACN,UAAW,EAAG,8BAA+B,GAAa,YAAY,EACtE,cAAY,MACb,CAAA,CACG,CAAA,EACJ,IACE,CACP,CAAA,EAAA,GAAmB,IAAa,IAAA,IAC/B,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,SAAU,EACV,WAAa,GAAa,EAAM,mBAAmB,EAAS,GAAI,CAAQ,CACzE,CAAA,EACC,IACD,CACJ,CAAA,EAAA,GAAa,CAAC,EAAa,MAC1B,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,uBAAf,SAAA,CACG,IAAa,IAAA,GAAY,MAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAA6B,UAAW,CAAA,EACxE,IAAa,IAAA,GAAY,MACxB,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,SAAU,EACA,WACV,SAAW,GAAY,EAAM,iBAAiB,EAAS,GAAI,CAAO,CACnE,CAAA,EAEF,IAAa,IAAA,IAAa,EAAM,MAAM,OAAS,IAAA,GAAY,MAC1D,EAAA,EAAA,IAAA,CAAC,EAAD,CAAa,MAAM,QAAQ,MAAO,EAAM,MAAM,IAAO,CAAA,EAEtD,EAAY,SAAW,EAAI,MAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAoB,OAAQ,CAAc,CAAA,EAC5E,IAAa,IAAA,IAAa,EAAM,MAAM,SAAW,IAAA,GAAY,MAC5D,EAAA,EAAA,IAAA,CAAC,EAAD,CAAa,MAAM,SAAS,MAAO,EAAM,MAAM,MAAS,CAAA,CAEvD,CAEA,CAAA,CAAA,GAEb,CAEA,SAAS,EAAmB,EAA4D,CACtF,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,gEAAf,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,6FAA6F,SAAA,mBAEvG,CAAA,GACL,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,iBACZ,SAAA,EAAM,OAAO,IAAK,GAAU,CAC3B,IAAM,EAAa,EAAM,WAAa,EAAM,QAmB5C,OAlBI,EAAM,OAAS,WAAa,EAAM,OAAS,aAE3C,EAAA,EAAA,KAAA,CAAC,MAAD,CACE,UAAU,yDADZ,SAAA,EAIE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,kCAAf,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAO,UAAU,+EACd,SAAA,EAAM,OAAS,YAAc,YAAc,UACvC,CAAA,GACP,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,+DACb,SAAA,CACG,CAAA,CACH,CACL,CAAA,GAAA,EAAA,EAAA,IAAA,CAAC,EAAD,CAAc,KAAK,OAAO,KAAM,EAAM,IAAO,CAAA,CAC1C,CAXE,EAAA,GAAG,EAAM,KAAK,GAAG,EAAM,QAAQ,GAAG,EAAM,MAW1C,GAIP,EAAA,EAAA,KAAA,CAAC,MAAD,CACE,UAAU,yDADZ,SAAA,EAIE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,kCAAf,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAO,UAAU,uEAAuE,SAAA,MAEjF,CAAA,GACP,EAAA,EAAA,KAAA,CAAC,OAAD,CAAM,UAAU,+DAAhB,SAAA,CACG,EAAW,MAAI,EAAM,QAClB,CACH,CAAA,CAAA,IACJ,EAAM,OAAS,IAAA,GAAY,MAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAa,MAAM,QAAQ,MAAO,EAAM,IAAO,CAAA,EACjF,EAAM,SAAW,IAAA,GAAY,MAC5B,EAAA,EAAA,IAAA,CAAC,EAAD,CAAa,MAAM,SAAS,MAAO,EAAM,MAAS,CAAA,CAEjD,CAdE,EAAA,GAAG,EAAM,KAAK,GAAG,EAAM,QAAQ,GAAG,EAAM,SAAS,GAAG,EAAM,QAAU,EAAM,MAAQ,EAAM,QAAU,IAcpG,CAET,CAAC,CACE,CAAA,CACF,GAET,CAEA,SAAS,EAAkB,EAMxB,CACD,GAAM,CAAC,EAAQ,IAAA,EAAa,EAAA,SAAA,CAAwC,CAAC,CAAC,EAChE,CAAC,EAAqB,IAAA,EAA0B,EAAA,SAAA,CAAS,CAAC,EAC1D,EAAU,EAAM,SAAS,SAAW,UACpC,EAAQ,EAAM,SAAS,UAAU,OAEjC,EAAU,EAAM,SAAS,UAAU,IAAK,GAAa,CACzD,IAAM,EAAQ,EAAO,EAAS,IACxB,EAAe,GAAO,aAAa,KAAK,GAAK,GAC7C,EAAS,EAAa,OAAS,EAAI,EAAe,GAAO,OACzD,EAAwF,CAC5F,WAAY,EAAS,GACrB,OAAQ,GAAQ,KAAK,GAAK,EAC5B,EAGA,OAFI,GAAO,SAAW,IAAA,KAAW,EAAW,OAAS,EAAM,QACvD,EAAa,OAAS,IAAG,EAAW,OAAS,IAC1C,CACT,CAAC,EACK,EAAc,IAAU,EAAI,EAAI,KAAK,IAAI,EAAqB,EAAQ,CAAC,EACvE,EAAiB,EAAM,SAAS,UAAU,GAC1C,EAAe,EAAQ,EAAY,EAAE,QAAU,GAC/C,EAAgB,EAAQ,OAAQ,GAAW,EAAO,OAAO,OAAS,CAAC,CAAC,CAAC,OACrE,EAAa,EAAa,OAAS,EACnC,EAAY,GAAW,EAAQ,MAAO,GAAW,EAAO,OAAO,OAAS,CAAC,EACzE,EAAgB,IAAgB,EAChC,EAAe,GAAe,EAAQ,EAE5C,GAAI,IAAmB,IAAA,GACrB,OACE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,gGAAgG,SAAA,cAE1G,CAAA,EAIT,IAAM,MAAmB,EAAwB,GAAY,KAAK,IAAI,EAAG,EAAU,CAAC,CAAC,EAC/E,MACJ,EAAwB,GAAY,KAAK,IAAI,EAAM,SAAS,UAAU,OAAS,EAAG,EAAU,CAAC,CAAC,EAC1F,GAAe,EAAoB,IACvC,EAAW,IAAa,CACtB,GAAG,GACF,GAAa,CAChB,EAAE,EAEJ,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,aAAf,SAAA,CACG,EAAM,SAAS,SAAW,aACzB,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,iGAAiG,SAAA,oBAE3G,CAAA,EACH,MACJ,EAAA,EAAA,IAAA,CAAC,EAAD,CAEE,SAAU,EAAM,UAAY,CAAC,EAC7B,MAAO,EACA,QACP,SAAU,EACV,MAAO,EAAO,EAAe,IAC7B,OAAQ,EAAM,SAAS,SAAS,KAAM,GAAW,EAAO,aAAe,EAAe,EAAE,EACxF,SAAW,GAAU,EAAY,EAAe,GAAI,CAAK,EACzD,UAAW,EAAe,IAAA,GAAY,CACvC,EATM,EAAe,EASrB,EACA,GACC,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,kFAAf,SAAA,EACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,iFAAf,SAAA,CACG,EAAc,IAAE,EAAM,WACpB,CACL,CAAA,GAAA,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,mCAAf,SAAA,CACG,EAAgB,MACf,EAAA,EAAA,IAAA,CAAC,EAAD,CAAQ,KAAK,SAAS,QAAQ,YAAY,QAAS,EAAY,SAAA,MAEvD,CAAA,EAET,GACC,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,UAAU,mBACV,SAAU,EAAM,UAAY,CAAC,EAC7B,KAAK,SACL,YAAe,EAAM,SAAS,CAAO,EACtC,SAAA,gBAEO,CAAA,GAER,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,UAAU,mBACV,SAAU,EAAM,UAAY,CAAC,EAC7B,KAAK,SACL,QAAS,EACV,SAAA,eAEO,CAAA,CAEP,CACF,CAAA,CAAA,CACH,CAAA,EAAA,EAAQ,GACV,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,kFAAf,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,2EAA2E,SAAA,UAErF,CAAA,GACL,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,mCAAf,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAQ,SAAU,EAAe,KAAK,SAAS,QAAQ,YAAY,QAAS,EAAY,SAAA,MAEhF,CAAA,GACR,EAAA,EAAA,IAAA,CAAC,EAAD,CAAQ,SAAU,EAAc,KAAK,SAAS,QAAQ,YAAY,QAAS,EAAQ,SAAA,MAE3E,CAAA,CACL,CACF,CAAA,CAAA,CACH,CAAA,EAAA,IACD,GAET,CAQA,SAAS,EAAsB,EAS5B,CACD,IAAM,EAAkB,EAAM,QAAQ,OAChC,EAAc,EAAoB,EAAM,KAAK,EAC7C,EACJ,IAAoB,IAAA,GAAyB,EAAY,OAAS,EAAI,QAAU,UAAhD,WAElC,OACE,EAAA,EAAA,KAAA,CAAC,UAAD,CAAS,UAAU,+DAAnB,SAAA,EACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,iDAAf,SAAA,EACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,qBAAf,SAAA,EACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,0EAAf,SAAA,CAAyF,YAC7E,EAAM,MAAQ,EAAE,OAAK,EAAM,KAClC,CACL,CAAA,GAAA,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAU,iFACX,SAAA,EAAM,SAAS,QACd,CAAA,CACD,CACL,CAAA,GAAA,EAAA,EAAA,IAAA,CAAC,OAAD,CACE,UAAW,EACT,6DACA,IAAU,YAAc,kBACxB,IAAU,SAAW,kBACrB,IAAU,WAAa,uBACzB,EAEC,SAAA,CACG,CAAA,CACH,IACJ,IAAoB,IAAA,GAAY,MAC/B,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,uFACZ,SAAA,CACE,CAAA,EAEN,IAAoB,IAAA,IAAmB,EAAM,SAAS,QAAQ,OAAS,GACtE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,uBACZ,SAAA,EAAM,SAAS,QAAQ,IAAK,GAAW,CACtC,IAAM,EAAS,EAAM,OAAO,SAAW,EAAO,MAC9C,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAEE,UAAW,EAAG,2BAA4B,GAAU,mBAAmB,EACvE,SAAU,EAAM,SAChB,KAAK,KACL,KAAK,SACL,QAAS,EAAS,UAAY,YAC9B,YAAe,CACb,EAAM,SAAS,CACb,OAAQ,EAAO,MACf,OAAQ,EAAO,MACf,YAAa,EAAM,OAAO,aAAe,EAC3C,CAAC,EACD,EAAM,YAAY,CACpB,EAEC,SAAA,EAAO,KACF,EAhBD,EAAO,KAgBN,CAEZ,CAAC,CACE,CAAA,EACH,KACH,IAAoB,IAAA,IACpB,EAAM,SAAS,QAAQ,OAAS,GAAK,CAAC,EAAM,SAAS,YAAe,MACnE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,UAAU,mBACV,SAAU,EAAM,SAChB,YAAY,uBACZ,KAAM,EACN,MAAO,EAAM,OAAO,aAAe,GACnC,SAAW,GACT,EAAM,SAAS,CACb,GAAG,EAAM,MACT,YAAa,EAAM,cAAc,KACnC,CAAC,CAEJ,CAAA,CAEI,GAEb,CAEA,SAAS,EAAoB,EAA0C,CACrE,IAAM,EAAe,GAAO,aAAa,KAAK,GAAK,GACnD,OAAO,EAAa,OAAS,EAAI,EAAgB,GAAO,QAAQ,KAAK,GAAK,EAC5E,CAEA,SAAS,EAAkB,EAAmC,CAC5D,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,kEAAf,SAAA,EACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,kCAAf,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,UAAW,EACT,kFACA,EAAM,SAAS,SAAW,YAAc,kBACxC,EAAM,SAAS,SAAW,YAAc,kBAC1C,EACD,SAAA,UAEM,CAAA,GACP,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,UACb,UAAA,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,sCAAuC,SAAA,EAAc,EAAM,QAAQ,CAAO,CAAA,CACtF,CAAA,CACF,CACJ,CAAA,EAAA,EAAM,SAAS,SAAW,IAAA,GAAY,MACrC,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,qEACZ,SAAA,EAAM,SAAS,MACb,CAAA,CAEJ,GAET,CAEA,SAAS,EAAoB,EAG1B,CACD,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,mCAAf,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,UAAU,wIACV,SAAU,EAAM,SAChB,KAAK,KACL,KAAK,SACL,QAAQ,QACR,YAAe,EAAM,WAAW,EAAK,EACtC,SAAA,QAEO,CAAA,GACR,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,UAAU,2BACV,SAAU,EAAM,SAChB,KAAK,KACL,KAAK,SACL,YAAe,EAAM,WAAW,EAAI,EACrC,SAAA,SAEO,CAAA,CACL,GAET"}
1
+ {"version":3,"file":"transcript-item-B6OLwa1p.js","names":["e","a","e","m","n","t","e","r","r","e","m"],"sources":["../../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@phosphor-icons/react/dist/defs/ChartBar.es.js","../../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@phosphor-icons/react/dist/defs/Lightning.es.js","../../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@phosphor-icons/react/dist/defs/Path.es.js","../../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@phosphor-icons/react/dist/csr/ChartBar.es.js","../../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@phosphor-icons/react/dist/csr/Lightning.es.js","../../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@phosphor-icons/react/dist/csr/Path.es.js","../../../src/ui/app/modules/playground/working-duration.tsx","../../../src/ui/app/modules/playground/transcript-item.tsx"],"sourcesContent":["import * as a from \"react\";\nconst e = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,196h-4V40a12,12,0,0,0-12-12H152a12,12,0,0,0-12,12V76H96A12,12,0,0,0,84,88v36H48a12,12,0,0,0-12,12v60H32a12,12,0,0,0,0,24H224a12,12,0,0,0,0-24ZM164,52h32V196H164Zm-56,48h32v96H108ZM60,148H84v48H60Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M208,40V208H152V40Z\", opacity: \"0.2\" }), /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,200h-8V40a8,8,0,0,0-8-8H152a8,8,0,0,0-8,8V80H96a8,8,0,0,0-8,8v40H48a8,8,0,0,0-8,8v64H32a8,8,0,0,0,0,16H224a8,8,0,0,0,0-16ZM160,48h40V200H160ZM104,96h40V200H104ZM56,144H88v56H56Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M232,208a8,8,0,0,1-8,8H32a8,8,0,0,1,0-16h8V136a8,8,0,0,1,8-8H72a8,8,0,0,1,8,8v64H96V88a8,8,0,0,1,8-8h32a8,8,0,0,1,8,8V200h16V40a8,8,0,0,1,8-8h40a8,8,0,0,1,8,8V200h8A8,8,0,0,1,232,208Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,202H214V40a6,6,0,0,0-6-6H152a6,6,0,0,0-6,6V82H96a6,6,0,0,0-6,6v42H48a6,6,0,0,0-6,6v66H32a6,6,0,0,0,0,12H224a6,6,0,0,0,0-12ZM158,46h44V202H158ZM102,94h44V202H102ZM54,142H90v60H54Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,200h-8V40a8,8,0,0,0-8-8H152a8,8,0,0,0-8,8V80H96a8,8,0,0,0-8,8v40H48a8,8,0,0,0-8,8v64H32a8,8,0,0,0,0,16H224a8,8,0,0,0,0-16ZM160,48h40V200H160ZM104,96h40V200H104ZM56,144H88v56H56Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,204H212V40a4,4,0,0,0-4-4H152a4,4,0,0,0-4,4V84H96a4,4,0,0,0-4,4v44H48a4,4,0,0,0-4,4v68H32a4,4,0,0,0,0,8H224a4,4,0,0,0,0-8ZM156,44h48V204H156ZM100,92h48V204H100ZM52,140H92v64H52Z\" }))\n ]\n]);\nexport {\n e as default\n};\n","import * as l from \"react\";\nconst a = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ l.createElement(l.Fragment, null, /* @__PURE__ */ l.createElement(\"path\", { d: \"M219.71,117.38a12,12,0,0,0-7.25-8.52L161.28,88.39l10.59-70.61a12,12,0,0,0-20.64-10l-112,120a12,12,0,0,0,4.31,19.33l51.18,20.47L84.13,238.22a12,12,0,0,0,20.64,10l112-120A12,12,0,0,0,219.71,117.38ZM113.6,203.55l6.27-41.77a12,12,0,0,0-7.41-12.92L68.74,131.37,142.4,52.45l-6.27,41.77a12,12,0,0,0,7.41,12.92l43.72,17.49Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ l.createElement(l.Fragment, null, /* @__PURE__ */ l.createElement(\"path\", { d: \"M96,240l16-80L48,136,160,16,144,96l64,24Z\", opacity: \"0.2\" }), /* @__PURE__ */ l.createElement(\"path\", { d: \"M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ l.createElement(l.Fragment, null, /* @__PURE__ */ l.createElement(\"path\", { d: \"M213.85,125.46l-112,120a8,8,0,0,1-13.69-7l14.66-73.33L45.19,143.49a8,8,0,0,1-3-13l112-120a8,8,0,0,1,13.69,7L153.18,90.9l57.63,21.61a8,8,0,0,1,3,12.95Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ l.createElement(l.Fragment, null, /* @__PURE__ */ l.createElement(\"path\", { d: \"M213.84,118.63a6,6,0,0,0-3.73-4.25L150.88,92.17l15-75a6,6,0,0,0-10.27-5.27l-112,120a6,6,0,0,0,2.28,9.71l59.23,22.21-15,75a6,6,0,0,0,3.14,6.52A6.07,6.07,0,0,0,96,246a6,6,0,0,0,4.39-1.91l112-120A6,6,0,0,0,213.84,118.63ZM106,220.46l11.85-59.28a6,6,0,0,0-3.77-6.8l-55.6-20.85,91.46-98L138.12,94.82a6,6,0,0,0,3.77,6.8l55.6,20.85Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ l.createElement(l.Fragment, null, /* @__PURE__ */ l.createElement(\"path\", { d: \"M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ l.createElement(l.Fragment, null, /* @__PURE__ */ l.createElement(\"path\", { d: \"M211.89,119.09a4,4,0,0,0-2.49-2.84l-60.81-22.8,15.33-76.67a4,4,0,0,0-6.84-3.51l-112,120a4,4,0,0,0-1,3.64,4,4,0,0,0,2.49,2.84l60.81,22.8L92.08,239.22a4,4,0,0,0,6.84,3.51l112-120A4,4,0,0,0,211.89,119.09ZM102.68,227l13.24-66.2a4,4,0,0,0-2.52-4.53L55,134.36,153.32,29l-13.24,66.2a4,4,0,0,0,2.52,4.53L201,121.64Z\" }))\n ]\n]);\nexport {\n a as default\n};\n","import * as a from \"react\";\nconst e = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M200,164a36.07,36.07,0,0,0-33.94,24H72a28,28,0,0,1,0-56h96a44,44,0,0,0,0-88H72a12,12,0,0,0,0,24h96a20,20,0,0,1,0,40H72a52,52,0,0,0,0,104h94.06A36,36,0,1,0,200,164Zm0,48a12,12,0,1,1,12-12A12,12,0,0,1,200,212Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,200a24,24,0,1,1-24-24A24,24,0,0,1,224,200Z\", opacity: \"0.2\" }), /* @__PURE__ */ a.createElement(\"path\", { d: \"M200,168a32.06,32.06,0,0,0-31,24H72a32,32,0,0,1,0-64h96a40,40,0,0,0,0-80H72a8,8,0,0,0,0,16h96a24,24,0,0,1,0,48H72a48,48,0,0,0,0,96h97a32,32,0,1,0,31-40Zm0,48a16,16,0,1,1,16-16A16,16,0,0,1,200,216Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M228,200a28,28,0,0,1-54.83,8H72a48,48,0,0,1,0-96h96a24,24,0,0,0,0-48H72a8,8,0,0,1,0-16h96a40,40,0,0,1,0,80H72a32,32,0,0,0,0,64H173.17A28,28,0,0,1,228,200Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M200,170a30.05,30.05,0,0,0-29.4,24H72a34,34,0,0,1,0-68h96a38,38,0,0,0,0-76H72a6,6,0,0,0,0,12h96a26,26,0,0,1,0,52H72a46,46,0,0,0,0,92h98.6A30,30,0,1,0,200,170Zm0,48a18,18,0,1,1,18-18A18,18,0,0,1,200,218Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M200,168a32.06,32.06,0,0,0-31,24H72a32,32,0,0,1,0-64h96a40,40,0,0,0,0-80H72a8,8,0,0,0,0,16h96a24,24,0,0,1,0,48H72a48,48,0,0,0,0,96h97a32,32,0,1,0,31-40Zm0,48a16,16,0,1,1,16-16A16,16,0,0,1,200,216Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M200,172a28,28,0,0,0-27.71,24H72a36,36,0,0,1,0-72h96a36,36,0,0,0,0-72H72a4,4,0,0,0,0,8h96a28,28,0,0,1,0,56H72a44,44,0,0,0,0,88H172.29A28,28,0,1,0,200,172Zm0,48a20,20,0,1,1,20-20A20,20,0,0,1,200,220Z\" }))\n ]\n]);\nexport {\n e as default\n};\n","import * as r from \"react\";\nimport e from \"../lib/IconBase.es.js\";\nimport m from \"../defs/ChartBar.es.js\";\nconst a = r.forwardRef((o, t) => /* @__PURE__ */ r.createElement(e, { ref: t, ...o, weights: m }));\na.displayName = \"ChartBarIcon\";\nconst n = a;\nexport {\n n as ChartBar,\n a as ChartBarIcon\n};\n","import * as o from \"react\";\nimport e from \"../lib/IconBase.es.js\";\nimport r from \"../defs/Lightning.es.js\";\nconst t = o.forwardRef((n, i) => /* @__PURE__ */ o.createElement(e, { ref: i, ...n, weights: r }));\nt.displayName = \"LightningIcon\";\nconst c = t;\nexport {\n c as Lightning,\n t as LightningIcon\n};\n","import * as o from \"react\";\nimport r from \"../lib/IconBase.es.js\";\nimport m from \"../defs/Path.es.js\";\nconst t = o.forwardRef((a, e) => /* @__PURE__ */ o.createElement(r, { ref: e, ...a, weights: m }));\nt.displayName = \"PathIcon\";\nconst n = t;\nexport {\n n as Path,\n t as PathIcon\n};\n","import { cn } from \"../../lib/utils\";\n\nexport function WorkingDuration(props: {\n className?: string | undefined;\n durationMs?: number | undefined;\n}) {\n if (props.durationMs === undefined) {\n return null;\n }\n\n return (\n <span\n aria-live=\"off\"\n className={cn(\n \"inline-flex items-center gap-1.5 text-xs font-medium tabular-nums text-muted-foreground\",\n props.className,\n )}\n >\n {formatWorkingDuration(props.durationMs)}\n </span>\n );\n}\n\nexport function formatWorkingDuration(durationMs: number): string {\n const normalizedDurationMs = Number.isFinite(durationMs) ? Math.max(0, durationMs) : 0;\n const totalSeconds = Math.floor(normalizedDurationMs / 1_000);\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n const duration = minutes === 0 ? `${seconds}s` : `${minutes}m ${seconds}s`;\n return `Finished - ${duration}`;\n}\n","import { CaretDown, ChartBar, Check, Copy, Lightning, Path } from \"@phosphor-icons/react\";\nimport { memo, useState } from \"react\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport { StudioIcon } from \"../../components/ui/icon\";\nimport { Textarea } from \"../../components/ui/textarea\";\nimport { cn } from \"../../lib/utils\";\nimport { approvalLabel } from \"../shared/format\";\nimport { MarkdownText, ToolPayload } from \"../shared/renderers\";\nimport type { ToolApproval, ToolMessage, ToolQuestion, TranscriptEntry } from \"../shared/types\";\nimport type { AssistantResponseMetrics, ResponseUsageMetrics } from \"./response-metrics\";\nimport { WorkingDuration } from \"./working-duration\";\n\nexport const TranscriptItem = memo(function TranscriptItem(props: {\n entry: TranscriptEntry;\n displayText?: string | undefined;\n live?: boolean | undefined;\n metrics?: AssistantResponseMetrics | undefined;\n decidingApprovals: Set<string>;\n answeringQuestions: Set<string>;\n onApprovalDecision: (approvalId: string, approved: boolean) => void;\n onQuestionAnswer: (\n questionId: string,\n answers: Array<{ questionId: string; answer: string; choice?: string; custom?: boolean }>,\n ) => void;\n onOpenTrace: (traceId: string) => void;\n}) {\n const displayText = props.displayText ?? (\"text\" in props.entry ? props.entry.text : \"\");\n if (props.entry.kind === \"reasoning\") {\n return (\n <article\n className=\"max-w-205 justify-self-start text-muted-foreground\"\n data-entry-id={String(props.entry.entryId)}\n data-entry-kind=\"reasoning\"\n >\n <div className=\"mb-1 text-xs font-semibold uppercase text-muted-foreground\">Reasoning</div>\n <MarkdownText live={props.live} size=\"base\" text={displayText} />\n </article>\n );\n }\n\n if (props.entry.kind === \"tool\") {\n return (\n <ToolEntry\n entry={props.entry}\n live={props.live}\n decidingApprovals={props.decidingApprovals}\n answeringQuestions={props.answeringQuestions}\n onApprovalDecision={props.onApprovalDecision}\n onQuestionAnswer={props.onQuestionAnswer}\n />\n );\n }\n\n const traceId = props.entry.role === \"assistant\" ? props.entry.traceId : undefined;\n const hasTable = props.entry.role === \"assistant\" && hasMarkdownTable(displayText);\n const isError =\n props.entry.role === \"assistant\" && \"tone\" in props.entry && props.entry.tone === \"error\";\n const isPending =\n props.entry.role === \"assistant\" && \"tone\" in props.entry && props.entry.tone === \"pending\";\n const showAssistantActions =\n props.entry.role === \"assistant\" && !isPending && props.entry.text.trim().length > 0;\n const persistedDurationMs = props.entry.durationMs ?? props.metrics?.durationMs;\n const showAssistantFooter = showAssistantActions || persistedDurationMs !== undefined;\n\n if (props.entry.role === \"user\") {\n return (\n <article\n className=\"grid w-fit max-w-[min(64ch,82%)] justify-items-end justify-self-end self-start text-foreground\"\n data-entry-id={String(props.entry.entryId)}\n data-entry-kind=\"message\"\n >\n {props.entry.text.trim().length === 0 ? null : (\n <div className=\"rounded-lg bg-muted px-4 py-2.5\">\n <MarkdownText size=\"base\" text={props.entry.text} />\n </div>\n )}\n {props.entry.attachments !== undefined ? (\n <MessageAttachments attachments={props.entry.attachments} />\n ) : null}\n </article>\n );\n }\n\n return (\n <article\n className={cn(\n \"self-start\",\n hasTable ? \"w-full max-w-full\" : \"max-w-[min(82ch,100%)]\",\n props.entry.role === \"assistant\" &&\n cn(\"justify-self-start text-foreground\", isError && \"text-destructive\"),\n )}\n data-entry-id={String(props.entry.entryId)}\n data-entry-kind=\"message\"\n >\n {isPending ? <AssistantLoadingIndicator /> : null}\n {displayText.trim().length === 0 ? null : (\n <MarkdownText live={props.live} size=\"base\" text={displayText} />\n )}\n {showAssistantFooter ? (\n <AssistantResponseFooter\n metrics={props.metrics}\n showActions={showAssistantActions}\n text={props.entry.text}\n traceId={traceId}\n durationMs={persistedDurationMs}\n onOpenTrace={props.onOpenTrace}\n />\n ) : null}\n </article>\n );\n});\n\nfunction AssistantResponseFooter(props: {\n durationMs?: number | undefined;\n metrics?: AssistantResponseMetrics | undefined;\n showActions: boolean;\n text: string;\n traceId?: string | undefined;\n onOpenTrace: (traceId: string) => void;\n}) {\n const [copied, setCopied] = useState(false);\n const traceId = props.traceId;\n\n async function copyResponse() {\n if (typeof navigator === \"undefined\" || navigator.clipboard === undefined) {\n return;\n }\n try {\n await navigator.clipboard.writeText(props.text);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 1200);\n } catch {\n setCopied(false);\n }\n }\n\n return (\n <div className=\"mt-3 flex min-w-0 items-center gap-1.5\">\n {props.showActions ? (\n <Button\n aria-label={copied ? \"Response copied\" : \"Copy response\"}\n className=\"h-8 min-h-8 w-8 rounded-lg border border-hair bg-muted p-0 text-muted-foreground shadow-none hover:border-foreground hover:bg-transparent hover:text-foreground\"\n title={copied ? \"Copied\" : \"Copy response\"}\n type=\"button\"\n variant=\"ghost\"\n onClick={() => void copyResponse()}\n >\n <StudioIcon icon={copied ? Check : Copy} aria-hidden=\"true\" />\n </Button>\n ) : null}\n {props.showActions ? (\n <div className=\"group relative\">\n <Button\n aria-label=\"Response metrics\"\n className=\"h-8 min-h-8 w-8 rounded-lg border border-hair bg-muted p-0 text-muted-foreground shadow-none hover:border-foreground hover:bg-transparent hover:text-foreground\"\n title={metricsTitle(props.metrics)}\n type=\"button\"\n variant=\"ghost\"\n >\n <StudioIcon icon={ChartBar} aria-hidden=\"true\" />\n </Button>\n <div\n className=\"pointer-events-none absolute left-0 top-full z-30 mt-2 hidden w-64 rounded-lg border border-hair bg-popover p-3 text-popover-foreground shadow-md group-focus-within:grid group-hover:grid\"\n role=\"tooltip\"\n >\n <ResponseMetricsTooltip metrics={props.metrics} />\n </div>\n </div>\n ) : null}\n {!props.showActions || traceId === undefined ? null : (\n <Button\n aria-label={`Open trace ${traceId}`}\n className=\"h-8 min-h-8 w-8 rounded-lg border border-hair bg-muted p-0 text-muted-foreground shadow-none hover:border-foreground hover:bg-transparent hover:text-foreground\"\n title={`Open trace ${traceId}`}\n type=\"button\"\n variant=\"ghost\"\n onClick={() => props.onOpenTrace(traceId)}\n >\n <StudioIcon icon={Path} aria-hidden=\"true\" />\n </Button>\n )}\n <WorkingDuration\n className={props.showActions ? \"ml-1.5\" : undefined}\n durationMs={props.durationMs}\n />\n </div>\n );\n}\n\nfunction ResponseMetricsTooltip(props: { metrics?: AssistantResponseMetrics | undefined }) {\n const rows = responseMetricRows(props.metrics);\n return (\n <div className=\"grid min-w-0 gap-2 text-xs leading-5\">\n <div className=\"font-semibold text-foreground\">Response metrics</div>\n <div className=\"grid min-w-0 gap-1\">\n <MetricRow label=\"Cost\" value=\"Unavailable\" />\n {rows.length === 0 ? (\n <div className=\"text-muted-foreground\">No usage metrics yet</div>\n ) : (\n rows.map((row) => <MetricRow label={row.label} value={row.value} key={row.label} />)\n )}\n </div>\n </div>\n );\n}\n\nfunction MetricRow(props: { label: string; value: string }) {\n return (\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <span className=\"text-muted-foreground\">{props.label}</span>\n <span className=\"shrink-0 font-medium tabular-nums text-foreground\">{props.value}</span>\n </div>\n );\n}\n\nfunction responseMetricRows(metrics: AssistantResponseMetrics | undefined): Array<{\n label: string;\n value: string;\n}> {\n const rows: Array<{ label: string; value: string }> = [];\n const usage = metrics?.usage;\n if (usage?.totalTokens !== undefined) {\n rows.push({ label: \"Total\", value: `${formatMetricNumber(usage.totalTokens)} tokens` });\n }\n if (usage?.inputTokens !== undefined) {\n rows.push({ label: \"Input\", value: formatMetricNumber(usage.inputTokens) });\n }\n if (usage?.outputTokens !== undefined) {\n rows.push({ label: \"Output\", value: formatMetricNumber(usage.outputTokens) });\n }\n pushOptionalUsageRow(rows, \"Cached\", usage, \"cachedInputTokens\");\n pushOptionalUsageRow(rows, \"Cache create\", usage, \"cacheCreationInputTokens\");\n if (metrics?.durationMs !== undefined) {\n rows.push({ label: \"Duration\", value: formatResponseDuration(metrics.durationMs) });\n }\n return rows;\n}\n\nfunction pushOptionalUsageRow(\n rows: Array<{ label: string; value: string }>,\n label: string,\n usage: ResponseUsageMetrics | undefined,\n key: keyof ResponseUsageMetrics,\n) {\n const value = usage?.[key];\n if (value !== undefined && value > 0) {\n rows.push({ label, value: formatMetricNumber(value) });\n }\n}\n\nfunction metricsTitle(metrics: AssistantResponseMetrics | undefined): string {\n const rows = responseMetricRows(metrics);\n if (rows.length === 0) {\n return \"Cost unavailable. No usage metrics yet.\";\n }\n return [\"Cost unavailable\", ...rows.map((row) => `${row.label}: ${row.value}`)].join(\". \");\n}\n\nfunction formatMetricNumber(value: number): string {\n return value.toLocaleString();\n}\n\nfunction formatResponseDuration(value: number): string {\n if (value < 1000) {\n return `${value}ms`;\n }\n return `${(value / 1000).toFixed(1)}s`;\n}\n\nfunction AssistantLoadingIndicator() {\n return (\n <div\n aria-label=\"Assistant is thinking\"\n aria-live=\"polite\"\n className=\"inline-flex min-h-8 items-center gap-2 py-1 text-muted-foreground\"\n role=\"status\"\n >\n <span className=\"text-base font-medium\">Thinking</span>\n <span className=\"flex items-center gap-1\" aria-hidden=\"true\">\n <span className=\"size-1 animate-pulse rounded-full bg-current motion-reduce:animate-none\" />\n <span className=\"size-1 animate-pulse rounded-full bg-current [animation-delay:150ms] motion-reduce:animate-none\" />\n <span className=\"size-1 animate-pulse rounded-full bg-current [animation-delay:300ms] motion-reduce:animate-none\" />\n </span>\n </div>\n );\n}\n\nfunction MessageAttachments(props: {\n attachments: NonNullable<Extract<TranscriptEntry, { kind: \"message\" }>[\"attachments\"]>;\n}) {\n return (\n <div className=\"mt-2 flex max-w-full flex-wrap gap-2\">\n {props.attachments.map((attachment, index) => {\n const key = `${attachment.kind}-${attachment.name ?? attachment.mediaType ?? index}-${index}`;\n if (attachment.kind === \"image\") {\n const src =\n attachment.url ??\n (attachment.data === undefined\n ? undefined\n : `data:${attachment.mediaType ?? \"image/png\"};base64,${attachment.data}`);\n return (\n <div className=\"overflow-hidden rounded-lg border border-hair bg-card\" key={key}>\n {src === undefined ? (\n <div className=\"grid h-20 w-24 place-items-center px-2 text-center text-xs text-muted-foreground\">\n Image\n </div>\n ) : (\n <img\n alt={attachment.name ?? \"Attached image\"}\n className=\"h-20 w-24 object-cover\"\n src={src}\n />\n )}\n </div>\n );\n }\n return (\n <span\n className=\"inline-flex max-w-full items-center gap-1.5 rounded-lg border border-hair bg-card px-2 py-1 text-xs font-medium text-muted-foreground\"\n key={key}\n >\n <span className=\"min-w-0 truncate\">\n {attachment.name ?? attachment.mediaType ?? \"Document\"}\n </span>\n </span>\n );\n })}\n </div>\n );\n}\n\nfunction hasMarkdownTable(text: string): boolean {\n const lines = text.split(\"\\n\");\n return lines.some((line, index) => {\n const next = lines[index + 1];\n return (\n line.includes(\"|\") &&\n next !== undefined &&\n /^\\s*\\|?\\s*:?-{3,}:?\\s*(\\|\\s*:?-{3,}:?\\s*)+\\|?\\s*$/.test(next)\n );\n });\n}\n\nfunction ToolEntry(props: {\n entry: ToolMessage;\n live?: boolean | undefined;\n decidingApprovals: Set<string>;\n answeringQuestions: Set<string>;\n onApprovalDecision: (approvalId: string, approved: boolean) => void;\n onQuestionAnswer: (\n questionId: string,\n answers: Array<{ questionId: string; answer: string; choice?: string; custom?: boolean }>,\n ) => void;\n}) {\n const [collapsed, setCollapsed] = useState(\n props.entry.approval?.status !== \"pending\" && props.entry.question?.status !== \"pending\",\n );\n const approval = props.entry.approval;\n const question = props.entry.question;\n const childEvents = props.entry.childEvents ?? [];\n const hasPayload =\n props.entry.args !== undefined ||\n props.entry.result !== undefined ||\n childEvents.length > 0 ||\n approval !== undefined ||\n question !== undefined;\n const pendingApproval = approval?.status === \"pending\";\n const pendingQuestion = question?.status === \"pending\";\n const cancelledInteraction = approval?.status === \"cancelled\" || question?.status === \"cancelled\";\n const rejectedApproval = approval?.status === \"rejected\";\n const timedOutApproval = approval?.status === \"timed_out\";\n const deciding = approval !== undefined && props.decidingApprovals.has(approval.id);\n const answering = question !== undefined && props.answeringQuestions.has(question.id);\n const status = pendingApproval\n ? \"Approval required\"\n : pendingQuestion\n ? \"Input required\"\n : cancelledInteraction\n ? \"Cancelled\"\n : rejectedApproval\n ? \"Rejected\"\n : timedOutApproval\n ? \"Timed out\"\n : props.live === true && props.entry.result === undefined\n ? \"Running\"\n : undefined;\n\n return (\n <article\n className=\"w-full justify-self-start text-foreground\"\n data-entry-id={String(props.entry.entryId)}\n data-entry-kind=\"tool\"\n >\n <div className=\"flex min-w-0 items-center gap-2 py-0.5\">\n <Button\n aria-expanded={hasPayload ? !collapsed : undefined}\n aria-label={`${collapsed ? \"Expand\" : \"Collapse\"} ${props.entry.toolName} tool call`}\n className=\"h-auto min-h-9 min-w-0 flex-1 justify-start gap-2.5 rounded-lg border-0 bg-transparent px-1 py-0.5 text-left text-inherit shadow-none hover:bg-transparent hover:text-inherit\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => setCollapsed((current) => !current)}\n >\n <span\n className=\"grid size-6 shrink-0 place-items-center rounded-md border border-hair bg-muted text-muted-foreground\"\n data-tool-icon=\"action\"\n >\n <StudioIcon icon={Lightning} className=\"size-2.5\" weight=\"fill\" aria-hidden=\"true\" />\n </span>\n <strong className=\"min-w-0 truncate font-mono text-sm font-medium text-foreground\">\n {props.entry.toolName}\n </strong>\n {status === undefined ? null : (\n <span className=\"ml-auto inline-flex shrink-0 items-center gap-1.5 text-sm font-normal text-muted-foreground\">\n <span\n className={cn(\n \"size-1.5 rounded-full bg-dim\",\n status === \"Running\" && \"animate-pulse bg-foreground motion-reduce:animate-none\",\n (cancelledInteraction || rejectedApproval || timedOutApproval) &&\n \"bg-destructive\",\n )}\n aria-hidden=\"true\"\n />\n {status}\n </span>\n )}\n {hasPayload ? (\n <span className=\"grid size-6 shrink-0 place-items-center text-muted-foreground\">\n <StudioIcon\n icon={CaretDown}\n className={cn(\"size-4 transition-transform\", collapsed && \"-rotate-90\")}\n aria-hidden=\"true\"\n />\n </span>\n ) : null}\n </Button>\n {pendingApproval && approval !== undefined ? (\n <ToolApprovalActions\n disabled={deciding}\n onDecision={(approved) => props.onApprovalDecision(approval.id, approved)}\n />\n ) : null}\n </div>\n {collapsed || !hasPayload ? null : (\n <div className=\"ml-8 grid gap-3 py-2\">\n {approval === undefined ? null : <ToolApprovalPanel approval={approval} />}\n {question === undefined ? null : (\n <ToolQuestionPanel\n disabled={answering}\n question={question}\n onAnswer={(answers) => props.onQuestionAnswer(question.id, answers)}\n />\n )}\n {question !== undefined || props.entry.args === undefined ? null : (\n <ToolPayload title=\"Input\" value={props.entry.args} />\n )}\n {childEvents.length === 0 ? null : <ChildAgentActivity events={childEvents} />}\n {question !== undefined || props.entry.result === undefined ? null : (\n <ToolPayload title=\"Output\" value={props.entry.result} />\n )}\n </div>\n )}\n </article>\n );\n}\n\nfunction ChildAgentActivity(props: { events: NonNullable<ToolMessage[\"childEvents\"]> }) {\n return (\n <div className=\"overflow-hidden rounded-none border border-hair bg-background\">\n <div className=\"bg-muted px-3 py-2 text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground\">\n Subagent activity\n </div>\n <div className=\"grid gap-3 p-3\">\n {props.events.map((event) => {\n const agentLabel = event.agentName ?? event.agentId;\n if (event.kind === \"message\" || event.kind === \"reasoning\") {\n return (\n <div\n className=\"grid gap-1 rounded-none border border-hair bg-card p-3\"\n key={`${event.kind}-${event.agentId}-${event.text}`}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge className=\"border-border bg-muted px-1.5 py-0.5 text-xs uppercase text-muted-foreground\">\n {event.kind === \"reasoning\" ? \"Reasoning\" : \"Response\"}\n </Badge>\n <span className=\"min-w-0 truncate text-xs font-semibold text-muted-foreground\">\n {agentLabel}\n </span>\n </div>\n <MarkdownText size=\"base\" text={event.text} />\n </div>\n );\n }\n return (\n <div\n className=\"grid gap-2 rounded-none border border-hair bg-card p-3\"\n key={`${event.kind}-${event.agentId}-${event.toolName}-${event.callId ?? event.args ?? event.result ?? \"\"}`}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge className=\"border-hair bg-muted px-1.5 py-0.5 text-xs uppercase text-foreground\">\n Tool\n </Badge>\n <span className=\"min-w-0 truncate text-xs font-semibold text-muted-foreground\">\n {agentLabel} / {event.toolName}\n </span>\n </div>\n {event.args === undefined ? null : <ToolPayload title=\"Input\" value={event.args} />}\n {event.result === undefined ? null : (\n <ToolPayload title=\"Output\" value={event.result} />\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\nfunction ToolQuestionPanel(props: {\n question: ToolQuestion;\n disabled: boolean;\n onAnswer: (\n answers: Array<{ questionId: string; answer: string; choice?: string; custom?: boolean }>,\n ) => void;\n}) {\n const [values, setValues] = useState<Record<string, QuestionDraft>>({});\n const [activeQuestionIndex, setActiveQuestionIndex] = useState(0);\n const pending = props.question.status === \"pending\";\n const total = props.question.questions.length;\n\n const answers = props.question.questions.map((question) => {\n const draft = values[question.id];\n const customAnswer = draft?.customValue?.trim() ?? \"\";\n const answer = customAnswer.length > 0 ? customAnswer : draft?.answer;\n const normalized: { questionId: string; answer: string; choice?: string; custom?: boolean } = {\n questionId: question.id,\n answer: answer?.trim() ?? \"\",\n };\n if (draft?.choice !== undefined) normalized.choice = draft.choice;\n if (customAnswer.length > 0) normalized.custom = true;\n return normalized;\n });\n const activeIndex = total === 0 ? 0 : Math.min(activeQuestionIndex, total - 1);\n const activeQuestion = props.question.questions[activeIndex];\n const activeAnswer = answers[activeIndex]?.answer ?? \"\";\n const answeredCount = answers.filter((answer) => answer.answer.length > 0).length;\n const canAdvance = activeAnswer.length > 0;\n const canSubmit = pending && answers.every((answer) => answer.answer.length > 0);\n const firstQuestion = activeIndex === 0;\n const lastQuestion = activeIndex >= total - 1;\n\n if (activeQuestion === undefined) {\n return (\n <div className=\"rounded-none border border-border bg-background p-4 text-sm font-medium text-muted-foreground\">\n No questions\n </div>\n );\n }\n\n const goPrevious = () => setActiveQuestionIndex((current) => Math.max(0, current - 1));\n const goNext = () =>\n setActiveQuestionIndex((current) => Math.min(props.question.questions.length - 1, current + 1));\n const updateDraft = (questionId: string, value: QuestionDraft) =>\n setValues((current) => ({\n ...current,\n [questionId]: value,\n }));\n\n return (\n <div className=\"grid gap-3\">\n {props.question.status === \"cancelled\" ? (\n <div className=\"rounded-none border border-hair bg-muted px-3 py-2.5 text-sm font-medium text-muted-foreground\">\n Question cancelled\n </div>\n ) : null}\n <QuestionPromptControl\n key={activeQuestion.id}\n disabled={props.disabled || !pending}\n index={activeIndex}\n total={total}\n question={activeQuestion}\n value={values[activeQuestion.id]}\n answer={props.question.answers?.find((answer) => answer.questionId === activeQuestion.id)}\n onChange={(value) => updateDraft(activeQuestion.id, value)}\n onAdvance={lastQuestion ? undefined : goNext}\n />\n {pending ? (\n <div className=\"flex min-w-0 items-center justify-between gap-3 rounded-none bg-muted px-3 py-2\">\n <div className=\"min-w-0 text-xs font-semibold uppercase tracking-[0.2em] text-muted-foreground\">\n {answeredCount}/{total} answered\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n {firstQuestion ? null : (\n <Button type=\"button\" variant=\"secondary\" onClick={goPrevious}>\n Back\n </Button>\n )}\n {lastQuestion ? (\n <Button\n className=\"h-9 min-h-9 px-4\"\n disabled={props.disabled || !canSubmit}\n type=\"button\"\n onClick={() => props.onAnswer(answers)}\n >\n Submit answers\n </Button>\n ) : (\n <Button\n className=\"h-9 min-h-9 px-4\"\n disabled={props.disabled || !canAdvance}\n type=\"button\"\n onClick={goNext}\n >\n Next question\n </Button>\n )}\n </div>\n </div>\n ) : total > 1 ? (\n <div className=\"flex min-w-0 items-center justify-between gap-3 rounded-none bg-muted px-3 py-2\">\n <div className=\"min-w-0 text-xs font-semibold uppercase tracking-[0.2em] text-foreground\">\n Answered\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n <Button disabled={firstQuestion} type=\"button\" variant=\"secondary\" onClick={goPrevious}>\n Back\n </Button>\n <Button disabled={lastQuestion} type=\"button\" variant=\"secondary\" onClick={goNext}>\n Next\n </Button>\n </div>\n </div>\n ) : null}\n </div>\n );\n}\n\ntype QuestionDraft = {\n answer?: string;\n choice?: string;\n customValue?: string;\n};\n\nfunction QuestionPromptControl(props: {\n question: ToolQuestion[\"questions\"][number];\n value: QuestionDraft | undefined;\n answer: NonNullable<ToolQuestion[\"answers\"]>[number] | undefined;\n disabled: boolean;\n index: number;\n total: number;\n onChange: (value: QuestionDraft) => void;\n onAdvance: (() => void) | undefined;\n}) {\n const submittedAnswer = props.answer?.answer;\n const draftAnswer = questionDraftAnswer(props.value);\n const state =\n submittedAnswer !== undefined ? \"Answered\" : draftAnswer.length > 0 ? \"Ready\" : \"Waiting\";\n\n return (\n <section className=\"grid gap-4 rounded-none border border-hair bg-background p-4\">\n <div className=\"flex min-w-0 items-start justify-between gap-4\">\n <div className=\"grid min-w-0 gap-2\">\n <div className=\" text-xs font-semibold uppercase tracking-[0.2em] text-muted-foreground\">\n Question {props.index + 1} of {props.total}\n </div>\n <h3 className=\"m-0 text-base font-semibold leading-7 text-foreground [overflow-wrap:anywhere]\">\n {props.question.question}\n </h3>\n </div>\n <span\n className={cn(\n \"shrink-0 text-xs font-semibold uppercase tracking-[0.18em]\",\n state === \"Answered\" && \"text-foreground\",\n state === \"Ready\" && \"text-foreground\",\n state === \"Waiting\" && \"text-muted-foreground\",\n )}\n >\n {state}\n </span>\n </div>\n {submittedAnswer === undefined ? null : (\n <div className=\"rounded-lg border border-hair bg-muted px-3 py-2 text-sm font-medium text-foreground\">\n {submittedAnswer}\n </div>\n )}\n {submittedAnswer !== undefined ? null : props.question.choices.length > 0 ? (\n <div className=\"flex flex-wrap gap-2\">\n {props.question.choices.map((choice) => {\n const active = props.value?.choice === choice.value;\n return (\n <Button\n key={choice.value}\n className={cn(\"h-8 min-h-8 px-3 text-xs\", active && \"border-foreground\")}\n disabled={props.disabled}\n size=\"sm\"\n type=\"button\"\n variant={active ? \"default\" : \"secondary\"}\n onClick={() => {\n props.onChange({\n answer: choice.value,\n choice: choice.value,\n customValue: props.value?.customValue ?? \"\",\n });\n props.onAdvance?.();\n }}\n >\n {choice.label}\n </Button>\n );\n })}\n </div>\n ) : null}\n {submittedAnswer !== undefined ||\n (props.question.choices.length > 0 && !props.question.allowCustom) ? null : (\n <Textarea\n className=\"min-h-24 text-sm\"\n disabled={props.disabled}\n placeholder=\"Type a custom answer\"\n rows={3}\n value={props.value?.customValue ?? \"\"}\n onChange={(event) =>\n props.onChange({\n ...props.value,\n customValue: event.currentTarget.value,\n })\n }\n />\n )}\n </section>\n );\n}\n\nfunction questionDraftAnswer(value: QuestionDraft | undefined): string {\n const customAnswer = value?.customValue?.trim() ?? \"\";\n return customAnswer.length > 0 ? customAnswer : (value?.answer?.trim() ?? \"\");\n}\n\nfunction ToolApprovalPanel(props: { approval: ToolApproval }) {\n return (\n <div className=\"grid gap-2 rounded-none border border-hair bg-muted px-3 py-2.5\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge\n className={cn(\n \"border-hair bg-background px-1.5 py-0.5 text-xs uppercase text-muted-foreground\",\n props.approval.status === \"approved\" && \"text-foreground\",\n props.approval.status === \"rejected\" && \"text-destructive\",\n )}\n >\n Approval\n </Badge>\n <div className=\"min-w-0\">\n <div className=\"text-sm font-medium text-foreground\">{approvalLabel(props.approval)}</div>\n </div>\n </div>\n {props.approval.reason === undefined ? null : (\n <div className=\"text-xs font-medium text-muted-foreground [overflow-wrap:anywhere]\">\n {props.approval.reason}\n </div>\n )}\n </div>\n );\n}\n\nfunction ToolApprovalActions(props: {\n disabled: boolean;\n onDecision: (approved: boolean) => void;\n}) {\n return (\n <div className=\"flex shrink-0 items-center gap-1\">\n <Button\n className=\"h-8 min-h-8 border-0 bg-transparent px-3 text-sm text-muted-foreground shadow-none hover:bg-status-danger-fill hover:text-destructive\"\n disabled={props.disabled}\n size=\"sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => props.onDecision(false)}\n >\n Reject\n </Button>\n <Button\n className=\"h-8 min-h-8 px-3 text-sm\"\n disabled={props.disabled}\n size=\"sm\"\n type=\"button\"\n onClick={() => props.onDecision(true)}\n >\n Approve\n </Button>\n </div>\n );\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5],"mappings":"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"}
@@ -30,7 +30,7 @@
30
30
  favicon.href = favicon.href.replace("favicon-dark.svg", `favicon-${theme}.svg`);
31
31
  })();
32
32
  </script>
33
- <script type="module" crossorigin src="/ui/assets/index-DWBW14h1.js"></script>
33
+ <script type="module" crossorigin src="/ui/assets/index-C0DKDUvj.js"></script>
34
34
  <link rel="modulepreload" crossorigin href="/ui/assets/utils-DzstcfqT.js">
35
35
  <link rel="modulepreload" crossorigin href="/ui/assets/button-B_AoswCu.js">
36
36
  <link rel="modulepreload" crossorigin href="/ui/assets/dist-Dr6EWOhl.js">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anvia/studio",
3
- "version": "1.0.13",
3
+ "version": "1.0.14",
4
4
  "description": "Studio UI and HTTP runtime for Anvia agents.",
5
5
  "author": "anvia",
6
6
  "maintainer": "Indra Zulfi",
@@ -46,11 +46,11 @@
46
46
  "react-dom": "^19.2.8",
47
47
  "tailwind-merge": "^3.6.0",
48
48
  "ws": "^8.21.3",
49
- "@anvia/graph": "1.0.11",
50
- "@anvia/react": "1.0.10",
51
- "@anvia/react-ui": "1.0.10",
49
+ "@anvia/client": "1.0.10",
50
+ "@anvia/react": "1.0.11",
51
+ "@anvia/react-ui": "1.0.11",
52
52
  "@anvia/server": "1.0.10",
53
- "@anvia/client": "1.0.10"
53
+ "@anvia/graph": "1.0.11"
54
54
  },
55
55
  "devDependencies": {
56
56
  "@tailwindcss/typography": "^0.5.19",
@@ -1,2 +0,0 @@
1
- import{i as e,r as t,s as n}from"./utils-DzstcfqT.js";import{s as r,t as i}from"./button-B_AoswCu.js";import{t as a}from"./request-DbgMKweq.js";import{t as o}from"./ArrowClockwise.es-5vr4h4OH.js";import{t as s}from"./MagnifyingGlass.es-yzEp9c89.js";import{n as c}from"./icon-DyadsXLr.js";import{a as l,i as u,n as d,r as f,t as p}from"./select-BdCBnmXx.js";import{a as m,o as h,s as g,t as _}from"./studio-DzEdCFsX.js";import{a as v,i as y,n as b,o as x,r as S,s as C,t as w}from"./style-BstB0PNS.js";import{t as T}from"./input-DuERdYTl.js";import{t as E}from"./renderers-Cf55u6J4.js";var D=n(e(),1),O=new Map([[`bold`,D.createElement(D.Fragment,null,D.createElement(`path`,{d:`M228,128a12,12,0,0,1-12,12H140v76a12,12,0,0,1-24,0V140H40a12,12,0,0,1,0-24h76V40a12,12,0,0,1,24,0v76h76A12,12,0,0,1,228,128Z`}))],[`duotone`,D.createElement(D.Fragment,null,D.createElement(`path`,{d:`M216,56V200a16,16,0,0,1-16,16H56a16,16,0,0,1-16-16V56A16,16,0,0,1,56,40H200A16,16,0,0,1,216,56Z`,opacity:`0.2`}),D.createElement(`path`,{d:`M224,128a8,8,0,0,1-8,8H136v80a8,8,0,0,1-16,0V136H40a8,8,0,0,1,0-16h80V40a8,8,0,0,1,16,0v80h80A8,8,0,0,1,224,128Z`}))],[`fill`,D.createElement(D.Fragment,null,D.createElement(`path`,{d:`M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM184,136H136v48a8,8,0,0,1-16,0V136H72a8,8,0,0,1,0-16h48V72a8,8,0,0,1,16,0v48h48a8,8,0,0,1,0,16Z`}))],[`light`,D.createElement(D.Fragment,null,D.createElement(`path`,{d:`M222,128a6,6,0,0,1-6,6H134v82a6,6,0,0,1-12,0V134H40a6,6,0,0,1,0-12h82V40a6,6,0,0,1,12,0v82h82A6,6,0,0,1,222,128Z`}))],[`regular`,D.createElement(D.Fragment,null,D.createElement(`path`,{d:`M224,128a8,8,0,0,1-8,8H136v80a8,8,0,0,1-16,0V136H40a8,8,0,0,1,0-16h80V40a8,8,0,0,1,16,0v80h80A8,8,0,0,1,224,128Z`}))],[`thin`,D.createElement(D.Fragment,null,D.createElement(`path`,{d:`M220,128a4,4,0,0,1-4,4H132v84a4,4,0,0,1-8,0V132H40a4,4,0,0,1,0-8h84V40a4,4,0,0,1,8,0v84h84A4,4,0,0,1,220,128Z`}))]]),k=D.forwardRef((e,t)=>D.createElement(c,{ref:t,...e,weights:O}));k.displayName=`PlusIcon`;var A=k,j=t(),M={graphEntity:F};function N(e,t){let n=t.trim().toLocaleLowerCase(),r=e.nodes.filter(e=>R(e,n)),i=new Set(r.map(e=>e.id));return{nodes:I(r),edges:e.relationships.filter(e=>i.has(e.from)&&i.has(e.to)).map(e=>L(e))}}function P(e){for(let t of[`name`,`title`,`label`]){let n=e.properties[t];if(typeof n==`string`&&n.trim().length>0)return n}return e.key===void 0?`${e.type} ${e.id}`:e.key}function F(e){return(0,j.jsxs)(`article`,{className:[`relative w-[180px] rounded-xl border bg-card px-3 py-2.5 text-left shadow-sm transition`,e.selected?`border-foreground shadow-md`:`border-border/80`].join(` `),children:[(0,j.jsx)(y,{type:`target`,position:C.Top,className:`!size-1.5 !border-0 !bg-muted-foreground/50`}),(0,j.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2.5`,children:[(0,j.jsx)(`span`,{className:[`size-2.5 shrink-0 rounded-full`,e.data.color].join(` `)}),(0,j.jsxs)(`div`,{className:`min-w-0`,children:[(0,j.jsx)(`div`,{className:`truncate text-sm font-semibold text-foreground`,children:e.data.label}),(0,j.jsx)(`div`,{className:`mt-0.5 truncate text-[10px] font-semibold uppercase tracking-[0.14em] text-muted-foreground`,children:e.data.type})]})]}),(0,j.jsx)(y,{type:`source`,position:C.Bottom,className:`!size-1.5 !border-0 !bg-muted-foreground/50`})]})}function I(e){return e.map((e,t)=>{let n=t*2.399963,r=180*Math.sqrt(t);return{id:e.id,type:`graphEntity`,position:{x:Math.cos(n)*r,y:Math.sin(n)*r},data:{label:P(e),type:e.type,color:B(e.type)}}})}function L(e){return{id:e.id,source:e.from,target:e.to,label:e.type,type:`smoothstep`,markerEnd:{type:x.ArrowClosed,width:14,height:14},labelStyle:{fontSize:10,fontWeight:600},style:{strokeWidth:1.5}}}function R(e,t){return t.length===0||[e.type,e.key,...Object.values(e.identity),...z(e)].some(e=>String(e??``).toLocaleLowerCase().includes(t))}function z(e){let t=[];for(let[n,r]of Object.entries(e.properties))t.push(n,Array.isArray(r)?r.join(` `):String(r));return t}function B(e){let t=[`bg-emerald-500`,`bg-sky-500`,`bg-violet-500`,`bg-amber-500`,`bg-rose-500`,`bg-cyan-500`,`bg-fuchsia-500`],n=0;for(let t of e)n=n*31+t.charCodeAt(0)>>>0;return t[n%t.length]??`bg-muted-foreground`}var V={nodes:[],relationships:[],truncated:{nodes:!1,relationships:!1}};function H(e){let{onError:t,onStatus:n}=e,[i,o]=(0,D.useState)(e.graphs[0]?.id??``),[c,l]=(0,D.useState)([]),[u,d]=(0,D.useState)([]),[f,p]=(0,D.useState)(V),[y,x]=(0,D.useState)(),[C,E]=(0,D.useState)(``),[O,k]=(0,D.useState)(!1),A=e.graphs.find(e=>e.id===i)??e.graphs[0],P=f.nodes.find(e=>e.id===y),F=(0,D.useMemo)(()=>N(f,C),[f,C]),I=(0,D.useCallback)(async(e,i,o)=>{if(A!==void 0){k(!0),n(`Loading graph`);try{let t=await a(`/graphs/${encodeURIComponent(A.id)}/explore`,`Graph explorer`,o,`no-store`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e)});p(e=>i?q(e,t):t),x(e=>i&&e!==void 0?e:t.nodes[0]?.id),n(`Connected`)}catch(e){if(o?.aborted===!0)return;let i=r(e);t(i),n(`Graph error`)}finally{o?.aborted!==!0&&k(!1)}}},[A,t,n]);if((0,D.useEffect)(()=>{if(A===void 0)return;let e=A.nodeTypes.map(e=>e.name),t=A.relationshipTypes.map(e=>e.name);o(A.id),l(e),d(t),p(V),x(void 0);let n=new AbortController;return I({mode:`overview`,nodeTypes:e,relationships:t},!1,n.signal),()=>n.abort()},[I,A]),!e.enabled||e.graphs.length===0)return(0,j.jsx)(m,{"aria-label":`Graphs`,children:(0,j.jsx)(_,{title:e.enabled?`No graphs`:`Graph explorer unavailable`,text:e.enabled?`Register a graph in Studio to inspect its nodes and relationships.`:`This Studio runtime does not expose a graph explorer.`})});function L(){I({mode:`overview`,nodeTypes:c,relationships:u},!1)}function R(){P!==void 0&&I({mode:`expand`,nodeIds:[P.id],nodeTypes:c,relationships:u,direction:`both`,maxDepth:1},!0)}return(0,j.jsx)(m,{"aria-label":`Graphs`,children:(0,j.jsx)(`div`,{className:`grid min-h-0 min-w-0 pb-6 pr-6`,children:(0,j.jsxs)(g,{className:`grid grid-cols-[minmax(0,2fr)_340px] max-lg:grid-cols-1`,children:[(0,j.jsxs)(`div`,{className:`relative min-h-0 min-w-0 overflow-hidden border-r border-border/80 bg-card/25 max-lg:min-h-96 max-lg:border-b max-lg:border-r-0`,children:[(0,j.jsxs)(`div`,{className:`absolute left-4 top-4 z-10 flex max-w-[calc(100%-2rem)] items-center gap-2 rounded-xl border border-border/80 bg-background/90 p-2 shadow-sm backdrop-blur`,children:[(0,j.jsxs)(`div`,{className:`relative min-w-0 flex-1`,children:[(0,j.jsx)(s,{className:`pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground`}),(0,j.jsx)(T,{"aria-label":`Search loaded nodes`,className:`w-64 pl-8`,placeholder:`Search loaded nodes`,value:C,onChange:e=>E(e.currentTarget.value)})]}),(0,j.jsxs)(h,{children:[F.nodes.length,` nodes`]}),(0,j.jsxs)(h,{children:[F.edges.length,` relations`]})]}),O&&f.nodes.length===0?(0,j.jsx)(`div`,{className:`grid h-full min-h-96 place-items-center text-sm text-muted-foreground`,children:`Loading graph…`}):null,!O&&f.nodes.length===0?(0,j.jsx)(_,{className:`h-full border-0`,title:`No nodes found`,text:`Try another graph or broaden the selected node and relationship types.`}):null,f.nodes.length>0?(0,j.jsxs)(v,{nodes:F.nodes,edges:F.edges,className:`graph-explorer-flow`,colorMode:e.theme,nodeTypes:M,fitView:!0,fitViewOptions:{padding:.2,maxZoom:1},minZoom:.2,maxZoom:1.7,proOptions:{hideAttribution:!0},defaultEdgeOptions:{focusable:!0},style:{"--xy-edge-stroke":`var(--muted-foreground)`,"--xy-edge-stroke-width":`1.4`,"--xy-edge-stroke-selected":`var(--foreground)`},onNodeClick:(e,t)=>x(t.id),children:[(0,j.jsx)(w,{variant:b.Dots,gap:16,size:1.5,color:`var(--muted-foreground)`,className:`opacity-30`}),(0,j.jsx)(S,{showInteractive:!1})]},`${A?.id}:${f.nodes.length}:${f.relationships.length}`):null]}),(0,j.jsx)(U,{graph:A,graphs:e.graphs,loading:O,result:f,selectedGraphId:i,selectedNode:P,selectedNodeTypes:c,selectedRelationships:u,onExpand:R,onReload:L,onSelectGraph:o,onToggleNodeType:e=>l(t=>K(t,e)),onToggleRelationship:e=>d(t=>K(t,e))})]})})})}function U(e){let t=e.result.truncated.nodes||e.result.truncated.relationships;return(0,j.jsxs)(`aside`,{className:`grid min-h-0 grid-rows-[auto_minmax(0,1fr)] overflow-hidden bg-background/70`,children:[(0,j.jsxs)(`header`,{className:`grid gap-3 border-b border-border/80 bg-card/35 p-4`,children:[(0,j.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,j.jsxs)(`div`,{className:`min-w-0`,children:[(0,j.jsx)(`h1`,{className:`truncate text-base font-semibold`,children:e.graph?.name??`Graph explorer`}),(0,j.jsx)(`p`,{className:`mt-1 line-clamp-2 text-xs leading-5 text-muted-foreground`,children:e.graph?.description??`Explore a bounded view of nodes and relationships.`})]}),t?(0,j.jsx)(h,{title:`The configured result limit was reached`,children:`Limited`}):null]}),(0,j.jsxs)(p,{value:e.selectedGraphId,onValueChange:e.onSelectGraph,children:[(0,j.jsx)(u,{className:`h-8 w-full text-xs`,children:(0,j.jsx)(l,{placeholder:`Select graph`})}),(0,j.jsx)(d,{children:e.graphs.map(e=>(0,j.jsx)(f,{value:e.id,children:e.name??e.id},e.id))})]}),(0,j.jsxs)(`div`,{className:`flex gap-2`,children:[(0,j.jsxs)(i,{className:`flex-1`,variant:`secondary`,disabled:e.loading||e.selectedNodeTypes.length===0,onClick:e.onReload,children:[(0,j.jsx)(o,{}),` Refresh`]}),(0,j.jsxs)(i,{className:`flex-1`,disabled:e.loading||e.selectedNode===void 0,onClick:e.onExpand,children:[(0,j.jsx)(A,{}),` Expand`]})]})]}),(0,j.jsxs)(`div`,{className:`min-h-0 overflow-y-auto p-4`,children:[(0,j.jsx)(W,{label:`Node types`,items:e.graph?.nodeTypes.map(e=>e.name)??[],selected:e.selectedNodeTypes,onToggle:e.onToggleNodeType}),(0,j.jsx)(W,{label:`Relationships`,items:e.graph?.relationshipTypes.map(e=>e.name)??[],selected:e.selectedRelationships,onToggle:e.onToggleRelationship}),(0,j.jsx)(`div`,{className:`mt-5 border-t border-border/80 pt-4`,children:e.selectedNode===void 0?(0,j.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Select a node to inspect its properties.`}):(0,j.jsx)(G,{node:e.selectedNode})})]})]})}function W(e){return(0,j.jsxs)(`section`,{className:`mb-4`,children:[(0,j.jsx)(`h2`,{className:`mb-2 text-[10px] font-semibold uppercase tracking-[0.16em] text-muted-foreground`,children:e.label}),(0,j.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:e.items.map(t=>{let n=e.selected.includes(t);return(0,j.jsx)(`button`,{type:`button`,"aria-pressed":n,className:[`rounded-full border px-2 py-1 text-xs transition-colors`,n?`border-foreground/30 bg-foreground text-background`:`border-border bg-card text-muted-foreground hover:text-foreground`].join(` `),onClick:()=>e.onToggle(t),children:t},t)})})]})}function G(e){let t=JSON.stringify({identity:e.node.identity,properties:e.node.properties},null,2);return(0,j.jsxs)(`section`,{children:[(0,j.jsx)(h,{children:e.node.type}),(0,j.jsx)(`h2`,{className:`mt-2 break-words text-base font-semibold`,children:P(e.node)}),(0,j.jsxs)(`p`,{className:`mt-1 break-all text-xs text-muted-foreground`,children:[`ID `,e.node.id]}),(0,j.jsx)(`pre`,{className:`mt-4 overflow-x-auto rounded-xl border border-border/80 bg-card p-3 text-xs leading-5`,children:(0,j.jsx)(`code`,{children:(0,j.jsx)(E,{text:t})})})]})}function K(e,t){return e.includes(t)?e.filter(e=>e!==t):[...e,t]}function q(e,t){let n=new Map(e.nodes.map(e=>[e.id,e])),r=new Map(e.relationships.map(e=>[e.id,e]));for(let e of t.nodes)n.set(e.id,e);for(let e of t.relationships)r.set(e.id,e);return{nodes:[...n.values()],relationships:[...r.values()],truncated:{nodes:e.truncated.nodes||t.truncated.nodes,relationships:e.truncated.relationships||t.truncated.relationships}}}export{H as GraphsPage};
2
- //# sourceMappingURL=graphs-page-ne3dJIrx.js.map