@anvia/studio 0.7.22 → 0.7.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ui/assets/{evals-page-0x7pIugn.js → evals-page-DC-njvlP.js} +2 -2
- package/dist/ui/assets/{evals-page-0x7pIugn.js.map → evals-page-DC-njvlP.js.map} +1 -1
- package/dist/ui/assets/index-Bc7sqnn5.js +55 -0
- package/dist/ui/assets/index-Bc7sqnn5.js.map +1 -0
- package/dist/ui/assets/{knowledge-page-CYLD4cys.js → knowledge-page-BciniOcu.js} +2 -2
- package/dist/ui/assets/{knowledge-page-CYLD4cys.js.map → knowledge-page-BciniOcu.js.map} +1 -1
- package/dist/ui/assets/{mcps-page-Qd4wgj-B.js → mcps-page-Dd_gbvBb.js} +2 -2
- package/dist/ui/assets/{mcps-page-Qd4wgj-B.js.map → mcps-page-Dd_gbvBb.js.map} +1 -1
- package/dist/ui/assets/{memory-page-krtr9o5d.js → memory-page-K1u-LDDz.js} +2 -2
- package/dist/ui/assets/{memory-page-krtr9o5d.js.map → memory-page-K1u-LDDz.js.map} +1 -1
- package/dist/ui/assets/{pipelines-page-DNpoe4kw.js → pipelines-page-GOtnu1I3.js} +2 -2
- package/dist/ui/assets/{pipelines-page-DNpoe4kw.js.map → pipelines-page-GOtnu1I3.js.map} +1 -1
- package/dist/ui/assets/{sessions-page-Cg-xwPD0.js → sessions-page-zABdhQUl.js} +2 -2
- package/dist/ui/assets/{sessions-page-Cg-xwPD0.js.map → sessions-page-zABdhQUl.js.map} +1 -1
- package/dist/ui/assets/{status-page-vgm2JUc7.js → status-page-BVw1UGMb.js} +2 -2
- package/dist/ui/assets/{status-page-vgm2JUc7.js.map → status-page-BVw1UGMb.js.map} +1 -1
- package/dist/ui/assets/{tool-runner-zwr5Bxg2.js → tool-runner-qP32ZAwv.js} +2 -2
- package/dist/ui/assets/{tool-runner-zwr5Bxg2.js.map → tool-runner-qP32ZAwv.js.map} +1 -1
- package/dist/ui/assets/{tools-page-CmmxKJfO.js → tools-page-Brv85Xnm.js} +2 -2
- package/dist/ui/assets/{tools-page-CmmxKJfO.js.map → tools-page-Brv85Xnm.js.map} +1 -1
- package/dist/ui/assets/{trace-browser-FXCuGeXt.js → trace-browser-mWVtzrMg.js} +2 -2
- package/dist/ui/assets/{trace-browser-FXCuGeXt.js.map → trace-browser-mWVtzrMg.js.map} +1 -1
- package/dist/ui/assets/{transcript-item-BF9qx3gB.js → transcript-item-CsKPOoJ7.js} +2 -2
- package/dist/ui/assets/{transcript-item-BF9qx3gB.js.map → transcript-item-CsKPOoJ7.js.map} +1 -1
- package/dist/ui/index.html +1 -1
- package/package.json +4 -4
- package/dist/ui/assets/index-NsFU1TN1.js +0 -55
- package/dist/ui/assets/index-NsFU1TN1.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-browser-FXCuGeXt.js","names":["ScrollArea","Fragment"],"sources":["../../../../../node_modules/.pnpm/@hugeicons+core-free-icons@4.2.2/node_modules/@hugeicons/core-free-icons/dist/esm/ArrowLeft02Icon.js","../../../../../node_modules/.pnpm/@hugeicons+core-free-icons@4.2.2/node_modules/@hugeicons/core-free-icons/dist/esm/ArrowRight01Icon.js","../../../../../node_modules/.pnpm/@hugeicons+core-free-icons@4.2.2/node_modules/@hugeicons/core-free-icons/dist/esm/ArrowTurnBackwardIcon.js","../../../../../node_modules/.pnpm/@hugeicons+core-free-icons@4.2.2/node_modules/@hugeicons/core-free-icons/dist/esm/CpuIcon.js","../../../../../node_modules/.pnpm/@hugeicons+core-free-icons@4.2.2/node_modules/@hugeicons/core-free-icons/dist/esm/GitBranchIcon.js","../../../../../node_modules/.pnpm/@hugeicons+core-free-icons@4.2.2/node_modules/@hugeicons/core-free-icons/dist/esm/Settings02Icon.js","../../../src/ui/app/modules/tracing/trace-browser-detail.tsx","../../../src/ui/app/components/ui/card.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-scroll-area@1.2.13_@types+react-dom@19.2.3_@types+react@19.2.14__@types_4fe787a049943a86784dbab50fe5086f/node_modules/@radix-ui/react-scroll-area/dist/index.mjs","../../../src/ui/app/components/ui/scroll-area.tsx","../../../src/ui/app/modules/tracing/trace-browser.tsx"],"sourcesContent":["const ArrowLeft02Icon = [\n [\"path\", { d: \"M5.5 12.002H19\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"0\" }],\n [\"path\", { d: \"M10.9999 18.002C10.9999 18.002 4.99998 13.583 4.99997 12.0019C4.99996 10.4208 11 6.00195 11 6.00195\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"1\" }]\n];\n\nexport { ArrowLeft02Icon as default };\n//# sourceMappingURL=ArrowLeft02Icon.js.map\n","const ArrowRight01Icon = [\n [\"path\", { d: \"M9.00005 6C9.00005 6 15 10.4189 15 12C15 13.5812 9 18 9 18\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"0\" }]\n];\n\nexport { ArrowRight01Icon as default };\n//# sourceMappingURL=ArrowRight01Icon.js.map\n","const ArrowTurnBackwardIcon = [\n [\"path\", { d: \"M11 6H15.5C17.9853 6 20 8.01472 20 10.5C20 12.9853 17.9853 15 15.5 15H4\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"0\" }],\n [\"path\", { d: \"M6.99998 12C6.99998 12 4.00001 14.2095 4 15C3.99999 15.7906 7 18 7 18\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"1\" }]\n];\n\nexport { ArrowTurnBackwardIcon as default };\n//# sourceMappingURL=ArrowTurnBackwardIcon.js.map\n","const CpuIcon = [\n [\"path\", { d: \"M4 12C4 8.22876 4 6.34315 5.17157 5.17157C6.34315 4 8.22876 4 12 4C15.7712 4 17.6569 4 18.8284 5.17157C20 6.34315 20 8.22876 20 12C20 15.7712 20 17.6569 18.8284 18.8284C17.6569 20 15.7712 20 12 20C8.22876 20 6.34315 20 5.17157 18.8284C4 17.6569 4 15.7712 4 12Z\", stroke: \"currentColor\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"0\" }],\n [\"path\", { d: \"M9.5 2V4\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"1\" }],\n [\"path\", { d: \"M14.5 2V4\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"2\" }],\n [\"path\", { d: \"M9.5 20V22\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"3\" }],\n [\"path\", { d: \"M14.5 20V22\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"4\" }],\n [\"path\", { d: \"M13 9L9 13\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"5\" }],\n [\"path\", { d: \"M15 13L13 15\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"6\" }],\n [\"path\", { d: \"M22 14.5L20 14.5\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"7\" }],\n [\"path\", { d: \"M4 9.5L2 9.5\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"8\" }],\n [\"path\", { d: \"M4 14.5L2 14.5\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"9\" }],\n [\"path\", { d: \"M22 9.5L20 9.5\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"10\" }]\n];\n\nexport { CpuIcon as default };\n//# sourceMappingURL=CpuIcon.js.map\n","const GitBranchIcon = [\n [\"path\", { d: \"M7 19H13C15.8284 19 17.2426 19 18.1213 18.1213C19 17.2426 19 15.8284 19 13V10M19 10C19.7002 10 21.0085 11.9943 21.5 12.5M19 10C18.2998 10 16.9915 11.9943 16.5 12.5\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"0\" }],\n [\"path\", { d: \"M5 7L5 17\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"1\" }],\n [\"circle\", { cx: \"5\", cy: \"5\", r: \"2\", stroke: \"currentColor\", strokeWidth: \"1.5\", key: \"2\" }],\n [\"circle\", { cx: \"19\", cy: \"5\", r: \"2\", stroke: \"currentColor\", strokeWidth: \"1.5\", key: \"3\" }],\n [\"circle\", { cx: \"5\", cy: \"19\", r: \"2\", stroke: \"currentColor\", strokeWidth: \"1.5\", key: \"4\" }]\n];\n\nexport { GitBranchIcon as default };\n//# sourceMappingURL=GitBranchIcon.js.map\n","const Settings02Icon = [\n [\"path\", { d: \"M15.5 12C15.5 13.933 13.933 15.5 12 15.5C10.067 15.5 8.5 13.933 8.5 12C8.5 10.067 10.067 8.5 12 8.5C13.933 8.5 15.5 10.067 15.5 12Z\", stroke: \"currentColor\", strokeWidth: \"1.5\", key: \"0\" }],\n [\"path\", { d: \"M21.011 14.0965C21.5329 13.9558 21.7939 13.8854 21.8969 13.7508C22 13.6163 22 13.3998 22 12.9669V11.0332C22 10.6003 22 10.3838 21.8969 10.2493C21.7938 10.1147 21.5329 10.0443 21.011 9.90358C19.0606 9.37759 17.8399 7.33851 18.3433 5.40087C18.4817 4.86799 18.5509 4.60156 18.4848 4.44529C18.4187 4.28902 18.2291 4.18134 17.8497 3.96596L16.125 2.98673C15.7528 2.77539 15.5667 2.66972 15.3997 2.69222C15.2326 2.71472 15.0442 2.90273 14.6672 3.27873C13.208 4.73448 10.7936 4.73442 9.33434 3.27864C8.95743 2.90263 8.76898 2.71463 8.60193 2.69212C8.43489 2.66962 8.24877 2.77529 7.87653 2.98663L6.15184 3.96587C5.77253 4.18123 5.58287 4.28891 5.51678 4.44515C5.45068 4.6014 5.51987 4.86787 5.65825 5.4008C6.16137 7.3385 4.93972 9.37763 2.98902 9.9036C2.46712 10.0443 2.20617 10.1147 2.10308 10.2492C2 10.3838 2 10.6003 2 11.0332V12.9669C2 13.3998 2 13.6163 2.10308 13.7508C2.20615 13.8854 2.46711 13.9558 2.98902 14.0965C4.9394 14.6225 6.16008 16.6616 5.65672 18.5992C5.51829 19.1321 5.44907 19.3985 5.51516 19.5548C5.58126 19.7111 5.77092 19.8188 6.15025 20.0341L7.87495 21.0134C8.24721 21.2247 8.43334 21.3304 8.6004 21.3079C8.76746 21.2854 8.95588 21.0973 9.33271 20.7213C10.7927 19.2644 13.2088 19.2643 14.6689 20.7212C15.0457 21.0973 15.2341 21.2853 15.4012 21.3078C15.5682 21.3303 15.7544 21.2246 16.1266 21.0133L17.8513 20.034C18.2307 19.8187 18.4204 19.711 18.4864 19.5547C18.5525 19.3984 18.4833 19.132 18.3448 18.5991C17.8412 16.6616 19.0609 14.6226 21.011 14.0965Z\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeWidth: \"1.5\", key: \"1\" }]\n];\n\nexport { Settings02Icon as default };\n//# sourceMappingURL=Settings02Icon.js.map\n","import {\n ArrowDown01Icon,\n ArrowRight01Icon,\n ArrowTurnBackwardIcon,\n ChatIcon,\n CpuIcon,\n GitBranchIcon,\n PathIcon,\n Robot01Icon,\n Settings02Icon,\n Wrench01Icon,\n} from \"@hugeicons/core-free-icons\";\nimport { useState } from \"react\";\nimport type { StudioTrace } from \"../../../../types\";\nimport { StudioIcon } from \"../../components/ui/icon\";\nimport { formatToolValue, formatTraceTime, formatUsage } from \"../shared/format\";\nimport { isRecord } from \"../shared/object\";\nimport { messageText } from \"../shared/transcript\";\nimport type { TraceInspectorKey, TraceObservationItem } from \"../shared/types\";\n\nexport function rawTraceJson(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2) ?? \"undefined\";\n } catch {\n return String(value);\n }\n}\n\nexport function TraceJsonTree(props: { value: unknown }) {\n return (\n <div className=\"overflow-x-auto rounded-lg bg-card/85 px-4 py-4 text-sm leading-6 text-foreground\">\n <JsonNode depth={0} path=\"$\" value={props.value} />\n </div>\n );\n}\n\nconst jsonIndentSize = 16;\nconst jsonDisclosureGutter = 20;\n\nfunction JsonNode(props: {\n arrayIndex?: number | undefined;\n depth: number;\n path: string;\n propertyKey?: string | undefined;\n trailingComma?: boolean | undefined;\n value: unknown;\n}) {\n if (isJsonBranch(props.value)) {\n return (\n <JsonBranch\n arrayIndex={props.arrayIndex}\n depth={props.depth}\n path={props.path}\n propertyKey={props.propertyKey}\n trailingComma={props.trailingComma}\n value={props.value}\n />\n );\n }\n\n return (\n <div\n className=\"min-w-max whitespace-pre\"\n style={{ paddingLeft: `${jsonContentIndent(props.depth)}px` }}\n >\n <JsonNodeLabel arrayIndex={props.arrayIndex} propertyKey={props.propertyKey} />\n <JsonPrimitive value={props.value} />\n {props.trailingComma ? <span className=\"text-foreground\">,</span> : null}\n </div>\n );\n}\n\nfunction JsonBranch(props: {\n arrayIndex?: number | undefined;\n depth: number;\n path: string;\n propertyKey?: string | undefined;\n trailingComma?: boolean | undefined;\n value: Record<string, unknown> | unknown[];\n}) {\n const [open, setOpen] = useState(props.depth === 0);\n const arrayValue = Array.isArray(props.value) ? props.value : undefined;\n const entries =\n arrayValue === undefined\n ? Object.entries(props.value as Record<string, unknown>)\n : arrayValue.map((item, index): [string, unknown] => [String(index), item]);\n const opening = arrayValue === undefined ? \"{\" : \"[\";\n const closing = arrayValue === undefined ? \"}\" : \"]\";\n const collapsed = arrayValue === undefined ? \"{…}\" : \"[…]\";\n\n if (entries.length === 0) {\n return (\n <div\n className=\"min-w-max whitespace-pre\"\n style={{ paddingLeft: `${jsonContentIndent(props.depth)}px` }}\n >\n <JsonNodeLabel arrayIndex={props.arrayIndex} propertyKey={props.propertyKey} />\n <span className=\"text-foreground\">\n {opening}\n {closing}\n {props.trailingComma ? \",\" : \"\"}\n </span>\n </div>\n );\n }\n\n return (\n <div className=\"grid min-w-max\">\n <button\n aria-expanded={open}\n className=\"grid min-w-max grid-cols-[16px_auto] items-center gap-1 rounded-lg py-0.5 pr-2 text-left transition duration-200 hover:bg-accent/45 hover:text-accent-foreground\"\n onClick={() => setOpen((current) => !current)}\n style={{ paddingLeft: `${props.depth * jsonIndentSize}px` }}\n type=\"button\"\n >\n <span className=\"grid h-4 w-4 place-items-center text-muted-foreground [&_svg]:h-3 [&_svg]:w-3\">\n {open ? (\n <StudioIcon icon={ArrowDown01Icon} aria-hidden=\"true\" />\n ) : (\n <StudioIcon icon={ArrowRight01Icon} aria-hidden=\"true\" />\n )}\n </span>\n <span className=\"whitespace-pre\">\n <JsonNodeLabel arrayIndex={props.arrayIndex} propertyKey={props.propertyKey} />\n {open ? (\n <span className=\"text-foreground\">{opening}</span>\n ) : (\n <span className=\"text-muted-foreground\">{collapsed}</span>\n )}\n {!open && props.trailingComma ? <span className=\"text-foreground\">,</span> : null}\n </span>\n </button>\n {open ? (\n <>\n {entries.map(([key, value], index) => (\n <JsonNode\n arrayIndex={arrayValue === undefined ? undefined : Number(key)}\n depth={props.depth + 1}\n key={`${props.path}.${key}`}\n path={`${props.path}.${key}`}\n propertyKey={arrayValue === undefined ? key : undefined}\n trailingComma={index < entries.length - 1}\n value={value}\n />\n ))}\n <div\n className=\"min-w-max whitespace-pre text-foreground\"\n style={{ paddingLeft: `${jsonContentIndent(props.depth)}px` }}\n >\n {closing}\n {props.trailingComma ? \",\" : \"\"}\n </div>\n </>\n ) : null}\n </div>\n );\n}\n\nfunction jsonContentIndent(depth: number): number {\n return depth * jsonIndentSize + jsonDisclosureGutter;\n}\n\nfunction JsonNodeLabel(props: {\n arrayIndex?: number | undefined;\n propertyKey?: string | undefined;\n}) {\n if (props.propertyKey !== undefined) {\n return (\n <>\n <span className=\"text-muted-foreground\">{JSON.stringify(props.propertyKey)}</span>\n <span className=\"text-foreground\">: </span>\n </>\n );\n }\n if (props.arrayIndex !== undefined) {\n return (\n <>\n <span className=\"text-muted-foreground\">[{props.arrayIndex}]</span>\n <span className=\"text-foreground\"> </span>\n </>\n );\n }\n return null;\n}\n\nfunction JsonPrimitive(props: { value: unknown }) {\n if (typeof props.value === \"string\") {\n return <span className=\"text-foreground\">{JSON.stringify(props.value)}</span>;\n }\n if (typeof props.value === \"number\") {\n return <span className=\"text-foreground\">{String(props.value)}</span>;\n }\n if (typeof props.value === \"boolean\") {\n return <span className=\"text-chart-4\">{String(props.value)}</span>;\n }\n if (props.value === null) {\n return <span className=\"text-muted-foreground\">null</span>;\n }\n if (props.value === undefined) {\n return <span className=\"text-muted-foreground\">undefined</span>;\n }\n return <span className=\"text-foreground\">{rawTraceJson(props.value)}</span>;\n}\n\nfunction isJsonBranch(value: unknown): value is Record<string, unknown> | unknown[] {\n return Array.isArray(value) || isRecord(value);\n}\n\nexport function jsonSyntaxTokens(\n json: string,\n): Array<{ text: string; type: JsonTokenType; start: number }> {\n const tokenPattern =\n /(\"(?:\\\\u[\\da-fA-F]{4}|\\\\[^u]|[^\\\\\"])*\"(?=\\s*:)|\"(?:\\\\u[\\da-fA-F]{4}|\\\\[^u]|[^\\\\\"])*\"|-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?|\\btrue\\b|\\bfalse\\b|\\bnull\\b)/g;\n const tokens: Array<{ text: string; type: JsonTokenType; start: number }> = [];\n let cursor = 0;\n for (const match of json.matchAll(tokenPattern)) {\n const text = match[0];\n const index = match.index ?? 0;\n if (index > cursor) {\n tokens.push({ text: json.slice(cursor, index), type: \"plain\", start: cursor });\n }\n tokens.push({\n text,\n type: jsonTokenType(text, json.slice(index + text.length)),\n start: index,\n });\n cursor = index + text.length;\n }\n if (cursor < json.length) {\n tokens.push({ text: json.slice(cursor), type: \"plain\", start: cursor });\n }\n return tokens;\n}\n\ntype JsonTokenType = \"plain\" | \"key\" | \"string\" | \"number\" | \"boolean\" | \"null\";\n\nfunction jsonTokenType(text: string, followingText: string): JsonTokenType {\n if (text.startsWith('\"')) {\n return followingText.trimStart().startsWith(\":\") ? \"key\" : \"string\";\n }\n if (text === \"true\" || text === \"false\") {\n return \"boolean\";\n }\n if (text === \"null\") {\n return \"null\";\n }\n return \"number\";\n}\n\nexport function isNeutralTraceRow(row: { label: string }): boolean {\n return row.label === \"Message Id\";\n}\n\nexport function TraceRowIcon(props: { label: string }) {\n const className = \"h-3.5 w-3.5 shrink-0\";\n switch (props.label) {\n case \"System prompt\":\n return <StudioIcon icon={Settings02Icon} aria-hidden=\"true\" className={className} />;\n case \"Prompt\":\n return <StudioIcon icon={ChatIcon} aria-hidden=\"true\" className={className} />;\n case \"Output\":\n case \"Assistant output\":\n return <StudioIcon icon={ArrowTurnBackwardIcon} aria-hidden=\"true\" className={className} />;\n default:\n return null;\n }\n}\n\nexport function plainTraceValue(\n title: string,\n value: unknown,\n): Array<{ label: string; text: string }> {\n if (title === \"Output\") {\n const outputRows = plainTraceOutput(value);\n if (outputRows.length > 0) {\n return outputRows;\n }\n }\n const messageRows = plainTraceInput(value, title);\n if (messageRows.length > 0) {\n return messageRows;\n }\n if (!isRecord(value)) {\n return [{ label: title, text: plainTraceText(value) }];\n }\n\n const rows: Array<{ label: string; text: string }> = [];\n for (const [key, item] of Object.entries(value)) {\n const nestedMessages = plainTraceInput(item, key);\n if (nestedMessages.length > 0) {\n rows.push(...nestedMessages);\n continue;\n }\n rows.push({ label: traceLabelText(key), text: plainTraceText(item) });\n }\n return rows.length > 0 ? rows : [{ label: title, text: \"Empty object\" }];\n}\n\nfunction plainTraceOutput(value: unknown): Array<{ label: string; text: string }> {\n if (!isRecord(value)) {\n return [];\n }\n const rows: Array<{ label: string; text: string }> = [];\n const choiceRows = plainTraceInput(value.choice, \"choice\");\n rows.push(...choiceRows);\n if (typeof value.messageId === \"string\" && value.messageId.length > 0) {\n rows.push({ label: \"Message Id\", text: value.messageId });\n }\n return rows;\n}\n\nfunction plainTraceInput(\n value: unknown,\n parentKey?: string,\n): Array<{ label: string; text: string }> {\n if (typeof value === \"string\" && parentKey === undefined) {\n return [{ label: \"Value\", text: value }];\n }\n if (Array.isArray(value)) {\n if (parentKey === \"chatHistory\") {\n return chatHistoryRows(value);\n }\n if (parentKey === \"history\") {\n return conversationHistoryRows(value);\n }\n return value\n .map((item, index) => ({\n label: traceArrayItemLabel(item, index, parentKey),\n text: messageText(item) || formatToolValue(item),\n }))\n .filter((item) => item.text.length > 0);\n }\n if (!isRecord(value)) {\n return [];\n }\n\n const chatHistory = Array.isArray(value.chatHistory) ? value.chatHistory : undefined;\n if (chatHistory !== undefined) {\n const rows = systemPromptRows(value);\n rows.push(...plainTraceInput(chatHistory, \"chatHistory\"));\n return rows;\n }\n\n if (Array.isArray(value.prompt)) {\n return plainTraceInput(value.prompt, \"prompt\");\n }\n\n const rows: Array<{ label: string; text: string }> = [];\n rows.push(...systemPromptRows(value));\n\n const history = Array.isArray(value.history) ? value.history : [];\n if (history.length > 0) {\n rows.push(...plainTraceInput(history, \"history\"));\n }\n\n const promptText = messageText(value.prompt);\n if (promptText.length > 0) {\n rows.push({ label: history.length > 0 ? \"Current prompt\" : \"Prompt\", text: promptText });\n }\n\n return rows;\n}\n\nfunction chatHistoryRows(value: unknown[]): Array<{ label: string; text: string }> {\n const messages = value\n .map((item, index) => ({\n label: traceArrayItemLabel(item, index, \"chatHistory\"),\n text: messageText(item) || formatToolValue(item),\n }))\n .filter((item) => item.text.length > 0);\n const current = messages.at(-1);\n const history = messages.slice(0, -1);\n const rows: Array<{ label: string; text: string }> = [];\n if (history.length > 0) {\n rows.push({\n label: `Conversation history (${history.length})`,\n text: history.map((item, index) => `${index + 1}. ${item.label}\\n${item.text}`).join(\"\\n\\n\"),\n });\n }\n if (current !== undefined) {\n rows.push({\n label: history.length > 0 ? \"Current prompt\" : \"Prompt\",\n text: current.text,\n });\n }\n return rows;\n}\n\nfunction conversationHistoryRows(value: unknown[]): Array<{ label: string; text: string }> {\n const messages = value\n .map((item, index) => ({\n label: traceArrayItemLabel(item, index, \"history\"),\n text: messageText(item) || formatToolValue(item),\n }))\n .filter((item) => item.text.length > 0);\n if (messages.length === 0) {\n return [];\n }\n return [\n {\n label: `Conversation history (${messages.length})`,\n text: messages.map((item, index) => `${index + 1}. ${item.label}\\n${item.text}`).join(\"\\n\\n\"),\n },\n ];\n}\n\nfunction traceArrayItemLabel(item: unknown, index: number, parentKey: string | undefined): string {\n if (isRecord(item)) {\n const type = typeof item.type === \"string\" ? item.type : undefined;\n if (parentKey === \"choice\") {\n if (type === \"text\") {\n return \"Assistant output\";\n }\n if (type === \"reasoning\") {\n return \"Reasoning\";\n }\n }\n if (type === \"reasoning\") {\n return \"Reasoning\";\n }\n if (typeof item.role === \"string\") {\n return traceLabelText(item.role);\n }\n if (type !== undefined) {\n return traceLabelText(type);\n }\n }\n\n const prefix = parentKey === undefined ? \"Item\" : `${traceLabelText(parentKey)} item`;\n return `${prefix} ${index + 1}`;\n}\n\nfunction traceLabelText(value: string): string {\n return value\n .replace(/[_-]+/g, \" \")\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .trim()\n .replace(/\\b\\w/g, (letter) => letter.toUpperCase());\n}\n\nfunction systemPromptRows(value: Record<string, unknown>): Array<{ label: string; text: string }> {\n const instructions = value.instructions;\n if (typeof instructions !== \"string\" || instructions.trim().length === 0) {\n return [];\n }\n return [{ label: \"System prompt\", text: instructions }];\n}\n\nfunction plainTraceText(value: unknown): string {\n if (value === undefined) {\n return \"undefined\";\n }\n if (value === null) {\n return \"null\";\n }\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nexport function traceTurns(trace: StudioTrace): Array<{\n turn: number;\n observations: TraceObservationItem[];\n durationMs?: number;\n}> {\n const grouped = new Map<number, TraceObservationItem[]>();\n for (const observation of trace.observations) {\n const turn = Number.isFinite(observation.turn) ? observation.turn : grouped.size + 1;\n grouped.set(turn, [...(grouped.get(turn) ?? []), observation]);\n }\n return [...grouped.entries()]\n .sort(([left], [right]) => left - right)\n .map(([turn, observations]) => ({\n turn,\n observations,\n durationMs: observations.reduce(\n (total, observation) => total + (observation.durationMs ?? 0),\n 0,\n ),\n }));\n}\n\nexport type TraceObservationNode = {\n observation: TraceObservationItem;\n children: TraceObservationNode[];\n};\n\nexport function traceObservationTree(observations: TraceObservationItem[]): TraceObservationNode[] {\n const nodes = new Map<string, TraceObservationNode>();\n for (const observation of observations) {\n nodes.set(observation.id, { observation, children: [] });\n }\n\n const roots: TraceObservationNode[] = [];\n for (const observation of observations) {\n const node = nodes.get(observation.id);\n if (node === undefined) {\n continue;\n }\n const parentId = observation.parentObservationId;\n const parent = parentId === undefined ? undefined : nodes.get(parentId);\n if (parent === undefined) {\n roots.push(node);\n } else {\n parent.children.push(node);\n }\n }\n return roots;\n}\n\nexport function selectedTraceDetail(\n trace: StudioTrace,\n turns: Array<{ turn: number; observations: TraceObservationItem[]; durationMs?: number }>,\n activeKey: TraceInspectorKey,\n): {\n title: string;\n tone: \"trace\" | \"agent\" | \"turn\" | StudioTrace[\"observations\"][number][\"kind\"];\n startedAt: string;\n durationMs: number | undefined;\n firstDeltaMs: number | undefined;\n usage: string;\n input?: unknown;\n output?: unknown;\n error?: unknown;\n metadata: unknown;\n} {\n if (activeKey === \"agent\") {\n return {\n title: \"agent.run\",\n tone: \"agent\",\n startedAt: formatTraceTime(trace.startedAt),\n durationMs: trace.durationMs,\n firstDeltaMs: firstDeltaMsFromObservations(trace.observations),\n usage: formatUsage(trace.usage),\n input: trace.input,\n output: trace.output,\n error: trace.error,\n metadata: traceDetailMetadata(trace),\n };\n }\n if (activeKey.startsWith(\"turn:\")) {\n const turnNumber = Number(activeKey.slice(\"turn:\".length));\n const turn = turns.find((item) => item.turn === turnNumber);\n return {\n title: `turn.${Number.isFinite(turnNumber) ? turnNumber : 1}`,\n tone: \"turn\",\n startedAt: formatTraceTime(turn?.observations[0]?.startedAt ?? trace.startedAt),\n durationMs: turn?.durationMs,\n firstDeltaMs: firstDeltaMsFromObservations(turn?.observations ?? []),\n usage: turnUsageText(turn?.observations ?? []),\n input: turn?.observations[0]?.input,\n output: turn?.observations.at(-1)?.output,\n metadata: turnDetailMetadata(turnNumber, turn?.observations ?? []),\n };\n }\n if (activeKey.startsWith(\"observation:\")) {\n const observationId = activeKey.slice(\"observation:\".length);\n const observation = trace.observations.find((item) => item.id === observationId);\n if (observation !== undefined) {\n return {\n title: traceObservationLabel(observation),\n tone: observation.kind,\n startedAt: formatTraceTime(observation.startedAt),\n durationMs: observation.durationMs,\n firstDeltaMs: firstDeltaMsFromMetadata(observation.metadata),\n usage: observationUsageText(observation),\n input: observation.input,\n output: observation.output,\n error: observation.error,\n metadata: observationDetailMetadata(observation),\n };\n }\n }\n return {\n title: trace.name ?? \"Agent\",\n tone: \"trace\",\n startedAt: formatTraceTime(trace.startedAt),\n durationMs: trace.durationMs,\n firstDeltaMs: firstDeltaMsFromObservations(trace.observations),\n usage: formatUsage(trace.usage),\n input: trace.input,\n output: trace.output,\n error: trace.error,\n metadata: traceDetailMetadata(trace),\n };\n}\n\nexport function traceDetailMetadata(trace: StudioTrace): Record<string, unknown> {\n const metadata = isRecord(trace.metadata) ? trace.metadata : {};\n const traceGroup = compactTraceMetadata({\n status: trace.status,\n traceId: trace.trace?.traceId ?? trace.id,\n observationId: trace.trace?.observationId,\n sessionId: trace.sessionId,\n observationCount: trace.observationCount,\n messageCount: traceMessageCount(metadata.messages),\n startedAt: trace.startedAt,\n endedAt: trace.endedAt,\n durationMs: trace.durationMs,\n });\n return compactTraceMetadata({\n ...metadata,\n status: trace.status,\n traceId: trace.trace?.traceId ?? trace.id,\n observationId: trace.trace?.observationId,\n sessionId: trace.sessionId,\n observationCount: trace.observationCount,\n messageCount: traceMessageCount(metadata.messages),\n startedAt: trace.startedAt,\n endedAt: trace.endedAt,\n durationMs: trace.durationMs,\n trace: isRecord(metadata.trace) ? metadata.trace : traceGroup,\n });\n}\n\nfunction turnDetailMetadata(\n turn: number,\n observations: TraceObservationItem[],\n): Record<string, unknown> {\n return compactTraceMetadata({\n turn,\n observationCount: observations.length,\n generationCount: observations.filter((observation) => observation.kind === \"generation\").length,\n toolCount: observations.filter((observation) => observation.kind === \"tool\").length,\n agentCount: observations.filter((observation) => observation.kind === \"agent\").length,\n firstDeltaMs: firstDeltaMsFromObservations(observations),\n status: observationStatusSummary(observations),\n startedAt: observations[0]?.startedAt,\n endedAt: observations.at(-1)?.endedAt,\n });\n}\n\nexport function observationDetailMetadata(\n observation: TraceObservationItem,\n): Record<string, unknown> {\n const metadata = isRecord(observation.metadata) ? observation.metadata : {};\n const base = compactTraceMetadata({\n ...metadata,\n status: observation.status,\n kind: observation.kind,\n turn: observation.turn,\n parentObservationId: observation.parentObservationId ?? null,\n startedAt: observation.startedAt,\n endedAt: observation.endedAt ?? null,\n durationMs: observation.durationMs,\n });\n return compactTraceMetadata({\n ...base,\n trace: isRecord(base.trace)\n ? base.trace\n : compactTraceMetadata({\n status: observation.status,\n kind: observation.kind,\n turn: observation.turn,\n parentObservationId: observation.parentObservationId ?? null,\n startedAt: observation.startedAt,\n endedAt: observation.endedAt ?? null,\n durationMs: observation.durationMs,\n }),\n modelInfo: isRecord(base.modelInfo) ? base.modelInfo : modelInfoMetadata(base),\n modelCall: isRecord(base.modelCall) ? base.modelCall : modelCallMetadata(base),\n response: isRecord(base.response) ? base.response : responseMetadata(base),\n tools: isRecord(base.tools) ? base.tools : toolsMetadata(base),\n timing: isRecord(base.timing) ? base.timing : timingMetadata(base),\n });\n}\n\nfunction modelInfoMetadata(metadata: Record<string, unknown>): Record<string, unknown> | undefined {\n const group = compactTraceMetadata({\n provider: metadata.provider,\n model: metadata.model,\n requestedModel: metadata.requestedModel,\n defaultModel: metadata.defaultModel,\n });\n return Object.keys(group).length === 0 ? undefined : group;\n}\n\nfunction modelCallMetadata(metadata: Record<string, unknown>): Record<string, unknown> | undefined {\n const request = compactTraceMetadata({\n messageCount: metadata.historyCount,\n documentCount: metadata.documentCount,\n toolCount: metadata.toolCount,\n toolNames: metadata.toolNames,\n temperature: metadata.temperature,\n maxTokens: metadata.maxTokens,\n toolChoice: metadata.toolChoice,\n hasOutputSchema: metadata.hasOutputSchema,\n additionalParamKeys: metadata.additionalParamKeys,\n });\n const group = compactTraceMetadata({\n request: Object.keys(request).length === 0 ? undefined : request,\n providerRequest: metadata.providerRequest,\n });\n return Object.keys(group).length === 0 ? undefined : group;\n}\n\nfunction responseMetadata(metadata: Record<string, unknown>): Record<string, unknown> | undefined {\n const group = compactTraceMetadata({\n messageId: metadata.messageId,\n usage: metadata.usage,\n providerResponse: metadata.providerResponse,\n });\n return Object.keys(group).length === 0 ? undefined : group;\n}\n\nfunction toolsMetadata(metadata: Record<string, unknown>): Record<string, unknown> | undefined {\n const group = compactTraceMetadata({\n count: metadata.toolCount,\n names: metadata.toolNames,\n toolChoice: metadata.toolChoice,\n internalCallId: metadata.internalCallId,\n toolCallId: metadata.toolCallId,\n skipped: metadata.skipped,\n description: metadata.toolDescription,\n parameterKeys: metadata.parameterKeys,\n requiredParameterKeys: metadata.requiredParameterKeys,\n approvalRequired: metadata.approvalRequired,\n mcpServerName: metadata.mcpServerName,\n argumentBytes: metadata.argumentBytes,\n resultBytes: metadata.resultBytes,\n });\n return Object.keys(group).length === 0 ? undefined : group;\n}\n\nfunction timingMetadata(metadata: Record<string, unknown>): Record<string, unknown> | undefined {\n const group = compactTraceMetadata({\n firstDeltaMs: metadata.firstDeltaMs,\n durationMs: metadata.durationMs,\n startedAt: metadata.startedAt,\n endedAt: metadata.endedAt,\n });\n return Object.keys(group).length === 0 ? undefined : group;\n}\n\nexport function observationStatusSummary(observations: TraceObservationItem[]): string {\n if (observations.length === 0) {\n return \"empty\";\n }\n if (observations.some((observation) => observation.status === \"error\")) {\n return \"error\";\n }\n if (observations.some((observation) => observation.status === \"running\")) {\n return \"running\";\n }\n return \"success\";\n}\n\nfunction traceMessageCount(value: unknown): number | undefined {\n return Array.isArray(value) ? value.length : undefined;\n}\n\nexport function compactTraceMetadata(values: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(Object.entries(values).filter(([, value]) => value !== undefined));\n}\n\nexport function traceObservationLabel(observation: TraceObservationItem): string {\n if (observation.kind === \"agent\") {\n return observation.name;\n }\n return observation.kind === \"tool\" ? `tool.${observation.name}` : observation.name;\n}\n\nexport function firstDeltaMsFromObservations(\n observations: TraceObservationItem[],\n): number | undefined {\n for (const observation of observations) {\n const firstDeltaMs = firstDeltaMsFromMetadata(observation.metadata);\n if (firstDeltaMs !== undefined) {\n return firstDeltaMs;\n }\n }\n return undefined;\n}\n\nfunction firstDeltaMsFromMetadata(metadata: unknown): number | undefined {\n if (!isRecord(metadata) || typeof metadata.firstDeltaMs !== \"number\") {\n return undefined;\n }\n return metadata.firstDeltaMs;\n}\n\nexport function statusDotClass(status: StudioTrace[\"status\"]): string {\n switch (status) {\n case \"success\":\n return \"bg-foreground\";\n case \"error\":\n return \"bg-destructive\";\n case \"running\":\n return \"bg-muted-foreground\";\n }\n}\n\nexport function TraceToneIcon(props: {\n tone: \"trace\" | \"agent\" | \"turn\" | StudioTrace[\"observations\"][number][\"kind\"];\n}) {\n switch (props.tone) {\n case \"trace\":\n return <StudioIcon icon={PathIcon} aria-hidden=\"true\" />;\n case \"agent\":\n return <StudioIcon icon={Robot01Icon} aria-hidden=\"true\" />;\n case \"turn\":\n return <StudioIcon icon={GitBranchIcon} aria-hidden=\"true\" />;\n case \"generation\":\n return <StudioIcon icon={CpuIcon} aria-hidden=\"true\" />;\n case \"tool\":\n return <StudioIcon icon={Wrench01Icon} aria-hidden=\"true\" />;\n }\n}\n\nexport function traceToneIconClass(\n tone: \"trace\" | \"agent\" | \"turn\" | StudioTrace[\"observations\"][number][\"kind\"],\n): string {\n switch (tone) {\n case \"trace\":\n return \"bg-foreground text-background\";\n case \"agent\":\n return \"bg-muted-foreground text-background\";\n case \"turn\":\n return \"bg-chart-4 text-background\";\n case \"generation\":\n return \"bg-foreground text-background\";\n case \"tool\":\n return \"bg-destructive text-background\";\n }\n}\n\nexport function observationUsageText(observation: TraceObservationItem): string {\n if (!isRecord(observation.output) || !isRecord(observation.output.usage)) {\n return \"\";\n }\n return formatUsageValue(observation.output.usage);\n}\n\nexport function turnUsageText(observations: TraceObservationItem[]): string {\n const totals = observations\n .map(observationUsageText)\n .filter((usage) => usage.length > 0)\n .join(\" + \");\n return totals;\n}\n\nfunction formatUsageValue(value: Record<string, unknown>): string {\n const input = typeof value.inputTokens === \"number\" ? value.inputTokens : 0;\n const output = typeof value.outputTokens === \"number\" ? value.outputTokens : 0;\n const total = typeof value.totalTokens === \"number\" ? value.totalTokens : input + output;\n if (total === 0) {\n return \"\";\n }\n return `${input} -> ${output} (Σ ${total})`;\n}\n","import type * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function Card({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n className={cn(\n \"rounded-xl border border-border/80 bg-card/95 text-card-foreground shadow-sm shadow-black/20\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div className={cn(\"grid gap-1.5 p-4\", className)} {...props} />;\n}\n\nexport function CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div className={cn(\"p-4 pt-0\", className)} {...props} />;\n}\n","\"use client\";\n\n// src/scroll-area.tsx\nimport * as React2 from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { clamp } from \"@radix-ui/number\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\n\n// src/use-state-machine.ts\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n return React.useReducer((state, event) => {\n const nextState = machine[state][event];\n return nextState ?? state;\n }, initialState);\n}\n\n// src/scroll-area.tsx\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar SCROLL_AREA_NAME = \"ScrollArea\";\nvar [createScrollAreaContext, createScrollAreaScope] = createContextScope(SCROLL_AREA_NAME);\nvar [ScrollAreaProvider, useScrollAreaContext] = createScrollAreaContext(SCROLL_AREA_NAME);\nvar ScrollArea = React2.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeScrollArea,\n type = \"hover\",\n dir,\n scrollHideDelay = 600,\n ...scrollAreaProps\n } = props;\n const [scrollArea, setScrollArea] = React2.useState(null);\n const [viewport, setViewport] = React2.useState(null);\n const [content, setContent] = React2.useState(null);\n const [scrollbarX, setScrollbarX] = React2.useState(null);\n const [scrollbarY, setScrollbarY] = React2.useState(null);\n const [cornerWidth, setCornerWidth] = React2.useState(0);\n const [cornerHeight, setCornerHeight] = React2.useState(0);\n const [scrollbarXEnabled, setScrollbarXEnabled] = React2.useState(false);\n const [scrollbarYEnabled, setScrollbarYEnabled] = React2.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, setScrollArea);\n const direction = useDirection(dir);\n return /* @__PURE__ */ jsx(\n ScrollAreaProvider,\n {\n scope: __scopeScrollArea,\n type,\n dir: direction,\n scrollHideDelay,\n scrollArea,\n viewport,\n onViewportChange: setViewport,\n content,\n onContentChange: setContent,\n scrollbarX,\n onScrollbarXChange: setScrollbarX,\n scrollbarXEnabled,\n onScrollbarXEnabledChange: setScrollbarXEnabled,\n scrollbarY,\n onScrollbarYChange: setScrollbarY,\n scrollbarYEnabled,\n onScrollbarYEnabledChange: setScrollbarYEnabled,\n onCornerWidthChange: setCornerWidth,\n onCornerHeightChange: setCornerHeight,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n dir: direction,\n ...scrollAreaProps,\n ref: composedRefs,\n style: {\n position: \"relative\",\n // Pass corner sizes as CSS vars to reduce re-renders of context consumers\n \"--radix-scroll-area-corner-width\": cornerWidth + \"px\",\n \"--radix-scroll-area-corner-height\": cornerHeight + \"px\",\n ...props.style\n }\n }\n )\n }\n );\n }\n);\nScrollArea.displayName = SCROLL_AREA_NAME;\nvar VIEWPORT_NAME = \"ScrollAreaViewport\";\nvar ScrollAreaViewport = React2.forwardRef(\n (props, forwardedRef) => {\n const { __scopeScrollArea, children, nonce, ...viewportProps } = props;\n const context = useScrollAreaContext(VIEWPORT_NAME, __scopeScrollArea);\n const ref = React2.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, context.onViewportChange);\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(ScrollAreaViewportStyle, { nonce }),\n /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-radix-scroll-area-viewport\": \"\",\n ...viewportProps,\n ref: composedRefs,\n style: {\n /**\n * We don't support `visible` because the intention is to have at least one scrollbar\n * if this component is used and `visible` will behave like `auto` in that case\n * https://developer.mozilla.org/en-US/docs/Web/CSS/overflow#description\n *\n * We don't handle `auto` because the intention is for the native implementation\n * to be hidden if using this component. We just want to ensure the node is scrollable\n * so could have used either `scroll` or `auto` here. We picked `scroll` to prevent\n * the browser from having to work out whether to render native scrollbars or not,\n * we tell it to with the intention of hiding them in CSS.\n */\n overflowX: context.scrollbarXEnabled ? \"scroll\" : \"hidden\",\n overflowY: context.scrollbarYEnabled ? \"scroll\" : \"hidden\",\n ...props.style\n },\n children: /* @__PURE__ */ jsx(\"div\", { ref: context.onContentChange, style: { minWidth: \"100%\", display: \"table\" }, children })\n }\n )\n ] });\n }\n);\nScrollAreaViewport.displayName = VIEWPORT_NAME;\nvar ScrollAreaViewportStyle = React2.memo(\n ({ nonce }) => {\n return /* @__PURE__ */ jsx(\n \"style\",\n {\n dangerouslySetInnerHTML: {\n __html: `[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}`\n },\n nonce\n }\n );\n },\n (prevProps, nextProps) => prevProps.nonce === nextProps.nonce\n);\nvar SCROLLBAR_NAME = \"ScrollAreaScrollbar\";\nvar ScrollAreaScrollbar = React2.forwardRef(\n (props, forwardedRef) => {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const { onScrollbarXEnabledChange, onScrollbarYEnabledChange } = context;\n const isHorizontal = props.orientation === \"horizontal\";\n React2.useEffect(() => {\n isHorizontal ? onScrollbarXEnabledChange(true) : onScrollbarYEnabledChange(true);\n return () => {\n isHorizontal ? onScrollbarXEnabledChange(false) : onScrollbarYEnabledChange(false);\n };\n }, [isHorizontal, onScrollbarXEnabledChange, onScrollbarYEnabledChange]);\n return context.type === \"hover\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarHover, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === \"scroll\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarScroll, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === \"auto\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarAuto, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === \"always\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarVisible, { ...scrollbarProps, ref: forwardedRef, \"data-state\": \"visible\" }) : null;\n }\n);\nScrollAreaScrollbar.displayName = SCROLLBAR_NAME;\nvar ScrollAreaScrollbarHover = React2.forwardRef((props, forwardedRef) => {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [visible, setVisible] = React2.useState(false);\n React2.useEffect(() => {\n const scrollArea = context.scrollArea;\n let hideTimer = 0;\n if (scrollArea) {\n const handlePointerEnter = () => {\n window.clearTimeout(hideTimer);\n setVisible(true);\n };\n const handlePointerLeave = () => {\n hideTimer = window.setTimeout(() => setVisible(false), context.scrollHideDelay);\n };\n scrollArea.addEventListener(\"pointerenter\", handlePointerEnter);\n scrollArea.addEventListener(\"pointerleave\", handlePointerLeave);\n return () => {\n window.clearTimeout(hideTimer);\n scrollArea.removeEventListener(\"pointerenter\", handlePointerEnter);\n scrollArea.removeEventListener(\"pointerleave\", handlePointerLeave);\n };\n }\n }, [context.scrollArea, context.scrollHideDelay]);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || visible, children: /* @__PURE__ */ jsx(\n ScrollAreaScrollbarAuto,\n {\n \"data-state\": visible ? \"visible\" : \"hidden\",\n ...scrollbarProps,\n ref: forwardedRef\n }\n ) });\n});\nvar ScrollAreaScrollbarScroll = React2.forwardRef((props, forwardedRef) => {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const isHorizontal = props.orientation === \"horizontal\";\n const debounceScrollEnd = useDebounceCallback(() => send(\"SCROLL_END\"), 100);\n const [state, send] = useStateMachine(\"hidden\", {\n hidden: {\n SCROLL: \"scrolling\"\n },\n scrolling: {\n SCROLL_END: \"idle\",\n POINTER_ENTER: \"interacting\"\n },\n interacting: {\n SCROLL: \"interacting\",\n POINTER_LEAVE: \"idle\"\n },\n idle: {\n HIDE: \"hidden\",\n SCROLL: \"scrolling\",\n POINTER_ENTER: \"interacting\"\n }\n });\n React2.useEffect(() => {\n if (state === \"idle\") {\n const hideTimer = window.setTimeout(() => send(\"HIDE\"), context.scrollHideDelay);\n return () => window.clearTimeout(hideTimer);\n }\n }, [state, context.scrollHideDelay, send]);\n React2.useEffect(() => {\n const viewport = context.viewport;\n const scrollDirection = isHorizontal ? \"scrollLeft\" : \"scrollTop\";\n if (viewport) {\n let prevScrollPos = viewport[scrollDirection];\n const handleScroll = () => {\n const scrollPos = viewport[scrollDirection];\n const hasScrollInDirectionChanged = prevScrollPos !== scrollPos;\n if (hasScrollInDirectionChanged) {\n send(\"SCROLL\");\n debounceScrollEnd();\n }\n prevScrollPos = scrollPos;\n };\n viewport.addEventListener(\"scroll\", handleScroll);\n return () => viewport.removeEventListener(\"scroll\", handleScroll);\n }\n }, [context.viewport, isHorizontal, send, debounceScrollEnd]);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || state !== \"hidden\", children: /* @__PURE__ */ jsx(\n ScrollAreaScrollbarVisible,\n {\n \"data-state\": state === \"hidden\" ? \"hidden\" : \"visible\",\n ...scrollbarProps,\n ref: forwardedRef,\n onPointerEnter: composeEventHandlers(props.onPointerEnter, () => send(\"POINTER_ENTER\")),\n onPointerLeave: composeEventHandlers(props.onPointerLeave, () => send(\"POINTER_LEAVE\"))\n }\n ) });\n});\nvar ScrollAreaScrollbarAuto = React2.forwardRef((props, forwardedRef) => {\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const { forceMount, ...scrollbarProps } = props;\n const [visible, setVisible] = React2.useState(false);\n const isHorizontal = props.orientation === \"horizontal\";\n const handleResize = useDebounceCallback(() => {\n if (context.viewport) {\n const isOverflowX = context.viewport.offsetWidth < context.viewport.scrollWidth;\n const isOverflowY = context.viewport.offsetHeight < context.viewport.scrollHeight;\n setVisible(isHorizontal ? isOverflowX : isOverflowY);\n }\n }, 10);\n useResizeObserver(context.viewport, handleResize);\n useResizeObserver(context.content, handleResize);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || visible, children: /* @__PURE__ */ jsx(\n ScrollAreaScrollbarVisible,\n {\n \"data-state\": visible ? \"visible\" : \"hidden\",\n ...scrollbarProps,\n ref: forwardedRef\n }\n ) });\n});\nvar ScrollAreaScrollbarVisible = React2.forwardRef((props, forwardedRef) => {\n const { orientation = \"vertical\", ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const thumbRef = React2.useRef(null);\n const pointerOffsetRef = React2.useRef(0);\n const [sizes, setSizes] = React2.useState({\n content: 0,\n viewport: 0,\n scrollbar: { size: 0, paddingStart: 0, paddingEnd: 0 }\n });\n const thumbRatio = getThumbRatio(sizes.viewport, sizes.content);\n const commonProps = {\n ...scrollbarProps,\n sizes,\n onSizesChange: setSizes,\n hasThumb: Boolean(thumbRatio > 0 && thumbRatio < 1),\n onThumbChange: (thumb) => thumbRef.current = thumb,\n onThumbPointerUp: () => pointerOffsetRef.current = 0,\n onThumbPointerDown: (pointerPos) => pointerOffsetRef.current = pointerPos\n };\n function getScrollPosition(pointerPos, dir) {\n return getScrollPositionFromPointer(pointerPos, pointerOffsetRef.current, sizes, dir);\n }\n if (orientation === \"horizontal\") {\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarX,\n {\n ...commonProps,\n ref: forwardedRef,\n onThumbPositionChange: () => {\n if (context.viewport && thumbRef.current) {\n const scrollPos = context.viewport.scrollLeft;\n const offset = getThumbOffsetFromScroll(scrollPos, sizes, context.dir);\n thumbRef.current.style.transform = `translate3d(${offset}px, 0, 0)`;\n }\n },\n onWheelScroll: (scrollPos) => {\n if (context.viewport) context.viewport.scrollLeft = scrollPos;\n },\n onDragScroll: (pointerPos) => {\n if (context.viewport) {\n context.viewport.scrollLeft = getScrollPosition(pointerPos, context.dir);\n }\n }\n }\n );\n }\n if (orientation === \"vertical\") {\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarY,\n {\n ...commonProps,\n ref: forwardedRef,\n onThumbPositionChange: () => {\n if (context.viewport && thumbRef.current) {\n const scrollPos = context.viewport.scrollTop;\n const offset = getThumbOffsetFromScroll(scrollPos, sizes);\n thumbRef.current.style.transform = `translate3d(0, ${offset}px, 0)`;\n }\n },\n onWheelScroll: (scrollPos) => {\n if (context.viewport) context.viewport.scrollTop = scrollPos;\n },\n onDragScroll: (pointerPos) => {\n if (context.viewport) context.viewport.scrollTop = getScrollPosition(pointerPos);\n }\n }\n );\n }\n return null;\n});\nvar ScrollAreaScrollbarX = React2.forwardRef((props, forwardedRef) => {\n const { sizes, onSizesChange, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [computedStyle, setComputedStyle] = React2.useState();\n const ref = React2.useRef(null);\n const composeRefs = useComposedRefs(forwardedRef, ref, context.onScrollbarXChange);\n React2.useEffect(() => {\n if (ref.current) setComputedStyle(getComputedStyle(ref.current));\n }, [ref]);\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarImpl,\n {\n \"data-orientation\": \"horizontal\",\n ...scrollbarProps,\n ref: composeRefs,\n sizes,\n style: {\n bottom: 0,\n left: context.dir === \"rtl\" ? \"var(--radix-scroll-area-corner-width)\" : 0,\n right: context.dir === \"ltr\" ? \"var(--radix-scroll-area-corner-width)\" : 0,\n \"--radix-scroll-area-thumb-width\": getThumbSize(sizes) + \"px\",\n ...props.style\n },\n onThumbPointerDown: (pointerPos) => props.onThumbPointerDown(pointerPos.x),\n onDragScroll: (pointerPos) => props.onDragScroll(pointerPos.x),\n onWheelScroll: (event, maxScrollPos) => {\n if (context.viewport) {\n const scrollPos = context.viewport.scrollLeft + event.deltaX;\n props.onWheelScroll(scrollPos);\n if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos)) {\n event.preventDefault();\n }\n }\n },\n onResize: () => {\n if (ref.current && context.viewport && computedStyle) {\n onSizesChange({\n content: context.viewport.scrollWidth,\n viewport: context.viewport.offsetWidth,\n scrollbar: {\n size: ref.current.clientWidth,\n paddingStart: toInt(computedStyle.paddingLeft),\n paddingEnd: toInt(computedStyle.paddingRight)\n }\n });\n }\n }\n }\n );\n});\nvar ScrollAreaScrollbarY = React2.forwardRef((props, forwardedRef) => {\n const { sizes, onSizesChange, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [computedStyle, setComputedStyle] = React2.useState();\n const ref = React2.useRef(null);\n const composeRefs = useComposedRefs(forwardedRef, ref, context.onScrollbarYChange);\n React2.useEffect(() => {\n if (ref.current) setComputedStyle(getComputedStyle(ref.current));\n }, [ref]);\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarImpl,\n {\n \"data-orientation\": \"vertical\",\n ...scrollbarProps,\n ref: composeRefs,\n sizes,\n style: {\n top: 0,\n right: context.dir === \"ltr\" ? 0 : void 0,\n left: context.dir === \"rtl\" ? 0 : void 0,\n bottom: \"var(--radix-scroll-area-corner-height)\",\n \"--radix-scroll-area-thumb-height\": getThumbSize(sizes) + \"px\",\n ...props.style\n },\n onThumbPointerDown: (pointerPos) => props.onThumbPointerDown(pointerPos.y),\n onDragScroll: (pointerPos) => props.onDragScroll(pointerPos.y),\n onWheelScroll: (event, maxScrollPos) => {\n if (context.viewport) {\n const scrollPos = context.viewport.scrollTop + event.deltaY;\n props.onWheelScroll(scrollPos);\n if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos)) {\n event.preventDefault();\n }\n }\n },\n onResize: () => {\n if (ref.current && context.viewport && computedStyle) {\n onSizesChange({\n content: context.viewport.scrollHeight,\n viewport: context.viewport.offsetHeight,\n scrollbar: {\n size: ref.current.clientHeight,\n paddingStart: toInt(computedStyle.paddingTop),\n paddingEnd: toInt(computedStyle.paddingBottom)\n }\n });\n }\n }\n }\n );\n});\nvar [ScrollbarProvider, useScrollbarContext] = createScrollAreaContext(SCROLLBAR_NAME);\nvar ScrollAreaScrollbarImpl = React2.forwardRef((props, forwardedRef) => {\n const {\n __scopeScrollArea,\n sizes,\n hasThumb,\n onThumbChange,\n onThumbPointerUp,\n onThumbPointerDown,\n onThumbPositionChange,\n onDragScroll,\n onWheelScroll,\n onResize,\n ...scrollbarProps\n } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, __scopeScrollArea);\n const [scrollbar, setScrollbar] = React2.useState(null);\n const composeRefs = useComposedRefs(forwardedRef, setScrollbar);\n const rectRef = React2.useRef(null);\n const prevWebkitUserSelectRef = React2.useRef(\"\");\n const viewport = context.viewport;\n const maxScrollPos = sizes.content - sizes.viewport;\n const handleWheelScroll = useCallbackRef(onWheelScroll);\n const handleThumbPositionChange = useCallbackRef(onThumbPositionChange);\n const handleResize = useDebounceCallback(onResize, 10);\n function handleDragScroll(event) {\n if (rectRef.current) {\n const x = event.clientX - rectRef.current.left;\n const y = event.clientY - rectRef.current.top;\n onDragScroll({ x, y });\n }\n }\n React2.useEffect(() => {\n const handleWheel = (event) => {\n const element = event.target;\n const isScrollbarWheel = scrollbar?.contains(element);\n if (isScrollbarWheel) handleWheelScroll(event, maxScrollPos);\n };\n document.addEventListener(\"wheel\", handleWheel, { passive: false });\n return () => document.removeEventListener(\"wheel\", handleWheel, { passive: false });\n }, [viewport, scrollbar, maxScrollPos, handleWheelScroll]);\n React2.useEffect(handleThumbPositionChange, [sizes, handleThumbPositionChange]);\n useResizeObserver(scrollbar, handleResize);\n useResizeObserver(context.content, handleResize);\n return /* @__PURE__ */ jsx(\n ScrollbarProvider,\n {\n scope: __scopeScrollArea,\n scrollbar,\n hasThumb,\n onThumbChange: useCallbackRef(onThumbChange),\n onThumbPointerUp: useCallbackRef(onThumbPointerUp),\n onThumbPositionChange: handleThumbPositionChange,\n onThumbPointerDown: useCallbackRef(onThumbPointerDown),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...scrollbarProps,\n ref: composeRefs,\n style: { position: \"absolute\", ...scrollbarProps.style },\n onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {\n const mainPointer = 0;\n if (event.button === mainPointer) {\n const element = event.target;\n element.setPointerCapture(event.pointerId);\n rectRef.current = scrollbar.getBoundingClientRect();\n prevWebkitUserSelectRef.current = document.body.style.webkitUserSelect;\n document.body.style.webkitUserSelect = \"none\";\n if (context.viewport) context.viewport.style.scrollBehavior = \"auto\";\n handleDragScroll(event);\n }\n }),\n onPointerMove: composeEventHandlers(props.onPointerMove, handleDragScroll),\n onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {\n const element = event.target;\n if (element.hasPointerCapture(event.pointerId)) {\n element.releasePointerCapture(event.pointerId);\n }\n document.body.style.webkitUserSelect = prevWebkitUserSelectRef.current;\n if (context.viewport) context.viewport.style.scrollBehavior = \"\";\n rectRef.current = null;\n })\n }\n )\n }\n );\n});\nvar THUMB_NAME = \"ScrollAreaThumb\";\nvar ScrollAreaThumb = React2.forwardRef(\n (props, forwardedRef) => {\n const { forceMount, ...thumbProps } = props;\n const scrollbarContext = useScrollbarContext(THUMB_NAME, props.__scopeScrollArea);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || scrollbarContext.hasThumb, children: /* @__PURE__ */ jsx(ScrollAreaThumbImpl, { ref: forwardedRef, ...thumbProps }) });\n }\n);\nvar ScrollAreaThumbImpl = React2.forwardRef(\n (props, forwardedRef) => {\n const { __scopeScrollArea, style, ...thumbProps } = props;\n const scrollAreaContext = useScrollAreaContext(THUMB_NAME, __scopeScrollArea);\n const scrollbarContext = useScrollbarContext(THUMB_NAME, __scopeScrollArea);\n const { onThumbPositionChange } = scrollbarContext;\n const composedRef = useComposedRefs(forwardedRef, scrollbarContext.onThumbChange);\n const removeUnlinkedScrollListenerRef = React2.useRef(void 0);\n const debounceScrollEnd = useDebounceCallback(() => {\n if (removeUnlinkedScrollListenerRef.current) {\n removeUnlinkedScrollListenerRef.current();\n removeUnlinkedScrollListenerRef.current = void 0;\n }\n }, 100);\n React2.useEffect(() => {\n const viewport = scrollAreaContext.viewport;\n if (viewport) {\n const handleScroll = () => {\n debounceScrollEnd();\n if (!removeUnlinkedScrollListenerRef.current) {\n const listener = addUnlinkedScrollListener(viewport, onThumbPositionChange);\n removeUnlinkedScrollListenerRef.current = listener;\n onThumbPositionChange();\n }\n };\n onThumbPositionChange();\n viewport.addEventListener(\"scroll\", handleScroll);\n return () => viewport.removeEventListener(\"scroll\", handleScroll);\n }\n }, [scrollAreaContext.viewport, debounceScrollEnd, onThumbPositionChange]);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": scrollbarContext.hasThumb ? \"visible\" : \"hidden\",\n ...thumbProps,\n ref: composedRef,\n style: {\n width: \"var(--radix-scroll-area-thumb-width)\",\n height: \"var(--radix-scroll-area-thumb-height)\",\n ...style\n },\n onPointerDownCapture: composeEventHandlers(props.onPointerDownCapture, (event) => {\n const thumb = event.target;\n const thumbRect = thumb.getBoundingClientRect();\n const x = event.clientX - thumbRect.left;\n const y = event.clientY - thumbRect.top;\n scrollbarContext.onThumbPointerDown({ x, y });\n }),\n onPointerUp: composeEventHandlers(props.onPointerUp, scrollbarContext.onThumbPointerUp)\n }\n );\n }\n);\nScrollAreaThumb.displayName = THUMB_NAME;\nvar CORNER_NAME = \"ScrollAreaCorner\";\nvar ScrollAreaCorner = React2.forwardRef(\n (props, forwardedRef) => {\n const context = useScrollAreaContext(CORNER_NAME, props.__scopeScrollArea);\n const hasBothScrollbarsVisible = Boolean(context.scrollbarX && context.scrollbarY);\n const hasCorner = context.type !== \"scroll\" && hasBothScrollbarsVisible;\n return hasCorner ? /* @__PURE__ */ jsx(ScrollAreaCornerImpl, { ...props, ref: forwardedRef }) : null;\n }\n);\nScrollAreaCorner.displayName = CORNER_NAME;\nvar ScrollAreaCornerImpl = React2.forwardRef((props, forwardedRef) => {\n const { __scopeScrollArea, ...cornerProps } = props;\n const context = useScrollAreaContext(CORNER_NAME, __scopeScrollArea);\n const [width, setWidth] = React2.useState(0);\n const [height, setHeight] = React2.useState(0);\n const hasSize = Boolean(width && height);\n useResizeObserver(context.scrollbarX, () => {\n const height2 = context.scrollbarX?.offsetHeight || 0;\n context.onCornerHeightChange(height2);\n setHeight(height2);\n });\n useResizeObserver(context.scrollbarY, () => {\n const width2 = context.scrollbarY?.offsetWidth || 0;\n context.onCornerWidthChange(width2);\n setWidth(width2);\n });\n return hasSize ? /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...cornerProps,\n ref: forwardedRef,\n style: {\n width,\n height,\n position: \"absolute\",\n right: context.dir === \"ltr\" ? 0 : void 0,\n left: context.dir === \"rtl\" ? 0 : void 0,\n bottom: 0,\n ...props.style\n }\n }\n ) : null;\n});\nfunction toInt(value) {\n return value ? parseInt(value, 10) : 0;\n}\nfunction getThumbRatio(viewportSize, contentSize) {\n const ratio = viewportSize / contentSize;\n return isNaN(ratio) ? 0 : ratio;\n}\nfunction getThumbSize(sizes) {\n const ratio = getThumbRatio(sizes.viewport, sizes.content);\n const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;\n const thumbSize = (sizes.scrollbar.size - scrollbarPadding) * ratio;\n return Math.max(thumbSize, 18);\n}\nfunction getScrollPositionFromPointer(pointerPos, pointerOffset, sizes, dir = \"ltr\") {\n const thumbSizePx = getThumbSize(sizes);\n const thumbCenter = thumbSizePx / 2;\n const offset = pointerOffset || thumbCenter;\n const thumbOffsetFromEnd = thumbSizePx - offset;\n const minPointerPos = sizes.scrollbar.paddingStart + offset;\n const maxPointerPos = sizes.scrollbar.size - sizes.scrollbar.paddingEnd - thumbOffsetFromEnd;\n const maxScrollPos = sizes.content - sizes.viewport;\n const scrollRange = dir === \"ltr\" ? [0, maxScrollPos] : [maxScrollPos * -1, 0];\n const interpolate = linearScale([minPointerPos, maxPointerPos], scrollRange);\n return interpolate(pointerPos);\n}\nfunction getThumbOffsetFromScroll(scrollPos, sizes, dir = \"ltr\") {\n const thumbSizePx = getThumbSize(sizes);\n const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;\n const scrollbar = sizes.scrollbar.size - scrollbarPadding;\n const maxScrollPos = sizes.content - sizes.viewport;\n const maxThumbPos = scrollbar - thumbSizePx;\n const scrollClampRange = dir === \"ltr\" ? [0, maxScrollPos] : [maxScrollPos * -1, 0];\n const scrollWithoutMomentum = clamp(scrollPos, scrollClampRange);\n const interpolate = linearScale([0, maxScrollPos], [0, maxThumbPos]);\n return interpolate(scrollWithoutMomentum);\n}\nfunction linearScale(input, output) {\n return (value) => {\n if (input[0] === input[1] || output[0] === output[1]) return output[0];\n const ratio = (output[1] - output[0]) / (input[1] - input[0]);\n return output[0] + ratio * (value - input[0]);\n };\n}\nfunction isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos) {\n return scrollPos > 0 && scrollPos < maxScrollPos;\n}\nvar addUnlinkedScrollListener = (node, handler = () => {\n}) => {\n let prevPosition = { left: node.scrollLeft, top: node.scrollTop };\n let rAF = 0;\n (function loop() {\n const position = { left: node.scrollLeft, top: node.scrollTop };\n const isHorizontalScroll = prevPosition.left !== position.left;\n const isVerticalScroll = prevPosition.top !== position.top;\n if (isHorizontalScroll || isVerticalScroll) handler();\n prevPosition = position;\n rAF = window.requestAnimationFrame(loop);\n })();\n return () => window.cancelAnimationFrame(rAF);\n};\nfunction useDebounceCallback(callback, delay) {\n const handleCallback = useCallbackRef(callback);\n const debounceTimerRef = React2.useRef(0);\n React2.useEffect(() => () => window.clearTimeout(debounceTimerRef.current), []);\n return React2.useCallback(() => {\n window.clearTimeout(debounceTimerRef.current);\n debounceTimerRef.current = window.setTimeout(handleCallback, delay);\n }, [handleCallback, delay]);\n}\nfunction useResizeObserver(element, onResize) {\n const handleResize = useCallbackRef(onResize);\n useLayoutEffect(() => {\n let rAF = 0;\n if (element) {\n const resizeObserver = new ResizeObserver(() => {\n cancelAnimationFrame(rAF);\n rAF = window.requestAnimationFrame(handleResize);\n });\n resizeObserver.observe(element);\n return () => {\n window.cancelAnimationFrame(rAF);\n resizeObserver.unobserve(element);\n };\n }\n }, [element, handleResize]);\n}\nvar Root = ScrollArea;\nvar Viewport = ScrollAreaViewport;\nvar Scrollbar = ScrollAreaScrollbar;\nvar Thumb = ScrollAreaThumb;\nvar Corner = ScrollAreaCorner;\nexport {\n Corner,\n Root,\n ScrollArea,\n ScrollAreaCorner,\n ScrollAreaScrollbar,\n ScrollAreaThumb,\n ScrollAreaViewport,\n Scrollbar,\n Thumb,\n Viewport,\n createScrollAreaScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\";\nimport type * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root className={cn(\"relative overflow-hidden\", className)} {...props}>\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n );\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n orientation={orientation}\n className={cn(\n \"flex touch-none select-none transition-colors\",\n orientation === \"vertical\" && \"h-full w-2.5 border-l border-l-transparent p-px\",\n orientation === \"horizontal\" && \"h-2.5 flex-col border-t border-t-transparent p-px\",\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-lg bg-muted-foreground/40\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n );\n}\n","import { ArrowLeft02Icon } from \"@hugeicons/core-free-icons\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport {\n firstDeltaMsFromObservations,\n isNeutralTraceRow,\n observationUsageText,\n plainTraceValue,\n selectedTraceDetail,\n statusDotClass,\n TraceJsonTree,\n type TraceObservationNode,\n TraceRowIcon,\n TraceToneIcon,\n traceObservationLabel,\n traceObservationTree,\n traceToneIconClass,\n traceTurns,\n} from \"./trace-browser-detail\";\n\nexport {\n compactTraceMetadata,\n firstDeltaMsFromObservations,\n jsonSyntaxTokens,\n observationDetailMetadata,\n observationStatusSummary,\n observationUsageText,\n plainTraceValue,\n rawTraceJson,\n selectedTraceDetail,\n traceDetailMetadata,\n traceObservationLabel,\n traceObservationTree,\n traceTurns,\n turnUsageText,\n} from \"./trace-browser-detail\";\n\nimport type { StudioConfig, StudioTrace } from \"../../../../types\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport { Card } from \"../../components/ui/card\";\nimport { StudioIcon } from \"../../components/ui/icon\";\nimport { ScrollArea } from \"../../components/ui/scroll-area\";\nimport { cn } from \"../../lib/utils\";\nimport { emptyFallback, formatDuration, formatTraceDate, traceAgentLabel } from \"../shared/format\";\nimport type { TraceInspectorKey, TraceLoadState, TraceObservationItem } from \"../shared/types\";\n\nexport function TraceBrowser(props: {\n agents: StudioConfig[\"agents\"];\n traces: StudioTrace[];\n tracesEnabled: boolean;\n traceLoadState: TraceLoadState;\n selectedTraceId: string;\n traceSessionDetailId: string | undefined;\n onRefresh: () => void;\n onSelectTrace: (traceId: string) => void;\n onShowSessionTraces: (sessionId: string) => void;\n}) {\n if (!props.tracesEnabled) {\n return (\n <div className=\"w-full rounded-lg border border-dashed border-border p-8 text-sm font-medium text-muted-foreground\">\n Tracing is disabled\n </div>\n );\n }\n\n const selectedTrace =\n props.selectedTraceId.length === 0\n ? undefined\n : props.traces.find((trace) => trace.id === props.selectedTraceId);\n const selectedSessionTraces =\n selectedTrace === undefined || props.traceSessionDetailId !== selectedTrace.sessionId\n ? []\n : props.traces.filter((trace) => trace.sessionId === selectedTrace.sessionId);\n\n return (\n <section\n className=\"grid h-full min-h-0 w-full content-stretch pb-6 pl-0 pr-6\"\n aria-label=\"Tracing\"\n >\n {props.selectedTraceId.length === 0 ? (\n <TraceTable\n agents={props.agents}\n traces={props.traces}\n traceLoadState={props.traceLoadState}\n onSelectTrace={props.onSelectTrace}\n />\n ) : (\n <TraceDetailRoute\n selectedTrace={selectedTrace}\n selectedSessionTraces={selectedSessionTraces}\n selectedTraceId={props.selectedTraceId}\n traceLoadState={props.traceLoadState}\n onBack={() => props.onSelectTrace(\"\")}\n onShowSessionTraces={props.onShowSessionTraces}\n />\n )}\n </section>\n );\n}\n\nfunction TraceTable(props: {\n agents: StudioConfig[\"agents\"];\n traces: StudioTrace[];\n traceLoadState: TraceLoadState;\n onSelectTrace: (traceId: string) => void;\n}) {\n return (\n <Card\n className=\"min-h-0 overflow-hidden rounded-xl border-border/80 bg-card/80\"\n aria-label=\"Traces\"\n >\n <ScrollArea className=\"h-full min-h-0\">\n <div className=\"grid min-w-280 gap-1 p-2\">\n <div className=\"sticky top-0 z-10 grid min-h-11 grid-cols-[minmax(220px,1.3fr)_150px_120px_120px_120px_120px_110px_90px] items-center gap-4 rounded-lg border border-border/60 bg-card/95 px-4 text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground backdrop-blur\">\n <span>Trace</span>\n <span>Session</span>\n <span>Agent</span>\n <span>Status</span>\n <span>Started</span>\n <span>Duration</span>\n <span>First delta</span>\n <span>Events</span>\n </div>\n {props.traceLoadState === \"loading\" && props.traces.length === 0 ? (\n <div className=\"px-5 py-4 text-sm font-medium text-muted-foreground\">\n Loading traces\n </div>\n ) : null}\n {props.traceLoadState === \"idle\" && props.traces.length === 0 ? (\n <div className=\"px-5 py-4 text-sm font-medium text-muted-foreground\">\n No traces found\n </div>\n ) : null}\n {props.traces.map((trace) => (\n <Button\n className=\"grid h-auto min-h-14 w-full grid-cols-[minmax(220px,1.3fr)_150px_120px_120px_120px_120px_110px_90px] items-center justify-start gap-4 whitespace-normal rounded-lg border border-transparent bg-transparent px-4 py-2.5 text-left text-muted-foreground shadow-none transition duration-200 hover:border-border/70 hover:bg-accent/70 hover:text-accent-foreground\"\n type=\"button\"\n variant=\"ghost\"\n key={trace.id}\n onClick={() => props.onSelectTrace(trace.id)}\n >\n <span className=\"min-w-0 truncate text-xs font-medium text-muted-foreground\">\n {trace.id}\n </span>\n <span className=\"min-w-0 truncate text-xs font-medium\">{trace.sessionId}</span>\n <span className=\"min-w-0 truncate text-xs font-medium\">\n {traceAgentLabel(props.agents, trace)}\n </span>\n <span className=\"flex min-w-0 items-center gap-2 text-xs font-medium capitalize\">\n <span\n className={cn(\"h-2.5 w-2.5 shrink-0 rounded-lg\", statusDotClass(trace.status))}\n />\n <span className=\"min-w-0 truncate\">{trace.status}</span>\n </span>\n <span className=\"min-w-0 truncate text-xs font-medium\">\n {formatTraceDate(trace.startedAt)}\n </span>\n <span className=\"min-w-0 truncate text-xs font-medium\">\n {emptyFallback(formatDuration(trace.durationMs))}\n </span>\n <span className=\"min-w-0 truncate text-xs font-medium\">\n {emptyFallback(formatDuration(firstDeltaMsFromObservations(trace.observations)))}\n </span>\n <span className=\"min-w-0 truncate text-xs font-medium tabular-nums\">\n {trace.observationCount}\n </span>\n </Button>\n ))}\n </div>\n </ScrollArea>\n </Card>\n );\n}\n\nfunction TraceDetailRoute(props: {\n selectedTrace: StudioTrace | undefined;\n selectedSessionTraces: StudioTrace[];\n selectedTraceId: string;\n traceLoadState: TraceLoadState;\n onBack: () => void;\n onShowSessionTraces: (sessionId: string) => void;\n}) {\n return (\n <div className=\"grid h-full min-h-0 min-w-0 grid-rows-[auto_minmax(0,1fr)] gap-2 overflow-hidden rounded-xl border border-border/80 bg-card/70 p-2 shadow-sm\">\n <header className=\"grid min-h-16 grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-3 overflow-hidden rounded-lg border border-border/60 bg-card/95 px-4 py-3\">\n <Button\n aria-label=\"Back to traces\"\n className=\"h-8 min-h-8 w-8 text-muted-foreground hover:text-foreground\"\n size=\"icon\"\n type=\"button\"\n variant=\"ghost\"\n onClick={props.onBack}\n >\n <StudioIcon icon={ArrowLeft02Icon} aria-hidden=\"true\" />\n </Button>\n <div className=\"grid min-w-0 gap-1\">\n <strong className=\"min-w-0 truncate text-sm font-semibold text-foreground\">\n {props.selectedTrace?.name ?? \"Trace detail\"}\n </strong>\n <span className=\"flex min-w-0 items-center gap-2 overflow-hidden text-xs font-medium text-muted-foreground\">\n {props.selectedTrace === undefined ? (\n props.traceLoadState === \"loading\" ? (\n \"Loading trace\"\n ) : (\n \"Trace not found\"\n )\n ) : (\n <>\n <span\n className={cn(\n \"h-2 w-2 shrink-0 rounded-lg\",\n statusDotClass(props.selectedTrace.status),\n )}\n />\n <span className=\"shrink-0 capitalize\">{props.selectedTrace.status}</span>\n <span className=\"shrink-0\" aria-hidden=\"true\">\n /\n </span>\n <span className=\"min-w-0 flex-1 truncate\">\n Session <span className=\" font-semibold\">{props.selectedTrace.sessionId}</span>\n </span>\n </>\n )}\n </span>\n </div>\n <span className=\"hidden max-w-[42vw] truncate rounded-lg bg-muted px-2 py-1 text-xs font-medium text-muted-foreground md:block\">\n {props.selectedTraceId}\n </span>\n </header>\n <div className=\"min-h-0 min-w-0 overflow-hidden\">\n {props.selectedTrace === undefined ? (\n <Card className=\"grid h-full place-items-center rounded-lg border-border bg-card p-6 text-sm font-medium text-muted-foreground\">\n {props.traceLoadState === \"loading\" ? \"Loading trace\" : \"Trace not found\"}\n </Card>\n ) : (\n <TracePanel\n traces={\n props.selectedSessionTraces.length > 0\n ? props.selectedSessionTraces\n : [props.selectedTrace]\n }\n onShowSessionTraces={props.onShowSessionTraces}\n />\n )}\n </div>\n </div>\n );\n}\n\nfunction TracePanel(props: {\n traces: StudioTrace[];\n onShowSessionTraces: (sessionId: string) => void;\n}) {\n const orderedTraces = useMemo(\n () =>\n [...props.traces].sort(\n (left, right) => Date.parse(left.startedAt) - Date.parse(right.startedAt),\n ),\n [props.traces],\n );\n const firstTraceId = orderedTraces[0]?.id ?? \"\";\n const [activeTraceId, setActiveTraceId] = useState(firstTraceId);\n const [activeKey, setActiveKey] = useState<TraceInspectorKey>(\"trace\");\n useEffect(() => {\n setActiveTraceId(firstTraceId);\n setActiveKey(\"trace\");\n }, [firstTraceId]);\n\n const activeTrace = orderedTraces.find((trace) => trace.id === activeTraceId) ?? orderedTraces[0];\n const turns = activeTrace === undefined ? [] : traceTurns(activeTrace);\n const selectTimelineItem = (traceId: string, key: TraceInspectorKey) => {\n setActiveTraceId(traceId);\n setActiveKey(key);\n };\n\n if (activeTrace === undefined) {\n return (\n <section\n className=\"grid h-full min-h-0 w-full place-items-center text-sm font-medium text-muted-foreground\"\n aria-label=\"Traces\"\n >\n No trace selected\n </section>\n );\n }\n\n return (\n <section\n className=\"grid h-full min-h-0 w-full content-stretch overflow-hidden\"\n aria-label=\"Traces\"\n >\n <div className=\"grid h-full min-h-0 grid-cols-[320px_minmax(0,1fr)] overflow-hidden max-md:grid-cols-1\">\n <nav\n className=\"grid min-h-0 auto-rows-min content-start overflow-auto border-r border-border/80 bg-card/35 pr-2 max-md:max-h-80 max-md:border-b max-md:border-r-0\"\n aria-label=\"Trace timeline\"\n >\n <div className=\"sticky top-0 z-30 flex min-h-11 items-center justify-between bg-card/90 py-0 pl-0 pr-5 text-xs font-medium text-muted-foreground backdrop-blur\">\n <span>Search</span>\n <strong className=\"text-foreground\">Timeline</strong>\n </div>\n {orderedTraces.map((trace) => {\n const traceActive = activeTrace.id === trace.id;\n const traceTurnItems = traceTurns(trace);\n return (\n <div className=\"contents\" key={trace.id}>\n <TraceTreeRow\n active={traceActive && activeKey === \"trace\"}\n ancestorLevels={[]}\n hasChildren={true}\n isLastSibling={true}\n level={0}\n tone=\"trace\"\n title={trace.name ?? \"Agent\"}\n subtitle={formatDuration(trace.durationMs)}\n onSelect={() => selectTimelineItem(trace.id, \"trace\")}\n />\n <TraceTreeRow\n active={traceActive && activeKey === \"agent\"}\n ancestorLevels={[]}\n hasChildren={traceTurnItems.length > 0}\n isLastSibling={true}\n level={1}\n tone=\"agent\"\n title=\"agent.run\"\n subtitle={formatDuration(trace.durationMs)}\n onSelect={() => selectTimelineItem(trace.id, \"agent\")}\n />\n {traceTurnItems.map((turn) => (\n <div className=\"contents\" key={`${trace.id}:turn:${turn.turn}`}>\n <TraceTreeRow\n active={traceActive && activeKey === `turn:${turn.turn}`}\n ancestorLevels={[]}\n hasChildren={turn.observations.length > 0}\n isLastSibling={turn.turn === traceTurnItems.at(-1)?.turn}\n level={2}\n tone=\"turn\"\n title={`turn.${turn.turn}`}\n subtitle={formatDuration(turn.durationMs)}\n onSelect={() => selectTimelineItem(trace.id, `turn:${turn.turn}`)}\n />\n <TraceObservationRows\n activeKey={activeKey}\n isLastTurn={turn.turn === traceTurnItems.at(-1)?.turn}\n observations={turn.observations}\n onSelect={(observationId) =>\n selectTimelineItem(trace.id, `observation:${observationId}`)\n }\n traceActive={traceActive}\n />\n </div>\n ))}\n </div>\n );\n })}\n </nav>\n <TraceDetailPane\n trace={activeTrace}\n turns={turns}\n activeKey={activeKey}\n onShowSessionTraces={props.onShowSessionTraces}\n />\n </div>\n </section>\n );\n}\n\nfunction TraceTreeRow(props: {\n active: boolean;\n ancestorLevels: number[];\n hasChildren: boolean;\n isLastSibling: boolean;\n level: number;\n tone: \"trace\" | \"agent\" | \"turn\" | StudioTrace[\"observations\"][number][\"kind\"];\n title: string;\n subtitle: string;\n onSelect: () => void;\n}) {\n const levelOffset = 22;\n const baseLeft = 12;\n const iconSize = 20;\n const iconCenter = baseLeft + iconSize / 2;\n const lineTop = 18;\n const xForLevel = (level: number) => iconCenter + level * levelOffset;\n\n return (\n <Button\n className={cn(\n \"relative grid h-auto min-h-0 w-full min-w-0 grid-cols-[20px_minmax(0,1fr)] items-start justify-start gap-2 whitespace-normal rounded-lg border-0 bg-transparent px-3 py-2.5 text-left text-muted-foreground shadow-none transition duration-200 hover:bg-accent/70 hover:text-accent-foreground\",\n props.active && \"bg-muted/45 text-foreground hover:bg-muted/45 hover:text-foreground\",\n )}\n type=\"button\"\n variant=\"ghost\"\n onClick={props.onSelect}\n style={{ paddingLeft: `${baseLeft + props.level * levelOffset}px` }}\n >\n {props.ancestorLevels.map((level) => (\n <span\n className=\"pointer-events-none absolute inset-y-0 w-px bg-muted-foreground/35\"\n style={{ left: `${xForLevel(level)}px` }}\n aria-hidden=\"true\"\n key={`ancestor-line-${level}`}\n />\n ))}\n {props.level > 0 ? (\n <>\n <span\n className=\"pointer-events-none absolute top-0 w-px bg-muted-foreground/35\"\n style={{\n left: `${xForLevel(props.level - 1)}px`,\n height: `${lineTop}px`,\n }}\n aria-hidden=\"true\"\n />\n {props.isLastSibling ? null : (\n <span\n className=\"pointer-events-none absolute bottom-0 w-px bg-muted-foreground/35\"\n style={{\n left: `${xForLevel(props.level - 1)}px`,\n top: `${lineTop}px`,\n }}\n aria-hidden=\"true\"\n />\n )}\n <span\n className=\"pointer-events-none absolute h-px bg-muted-foreground/35\"\n style={{\n left: `${xForLevel(props.level - 1)}px`,\n top: `${lineTop}px`,\n width: `${levelOffset}px`,\n }}\n aria-hidden=\"true\"\n />\n </>\n ) : null}\n {props.hasChildren ? (\n <span\n className=\"pointer-events-none absolute bottom-0 w-px bg-muted-foreground/35\"\n style={{\n left: `${xForLevel(props.level)}px`,\n top: `${lineTop}px`,\n }}\n aria-hidden=\"true\"\n />\n ) : null}\n <span\n className={cn(\n \"relative z-10 grid h-5 w-5 place-items-center rounded-lg bg-transparent [&_svg]:h-3 [&_svg]:w-3 [&_svg]:opacity-100\",\n traceToneIconClass(props.tone),\n )}\n >\n <TraceToneIcon tone={props.tone} />\n </span>\n <span className=\"grid min-w-0 gap-0.5\">\n <strong className=\"min-w-0 truncate text-sm font-medium leading-5 text-current\">\n {props.title}\n </strong>\n <span className=\"min-w-0 truncate text-xs font-medium text-muted-foreground\">\n {props.subtitle}\n </span>\n </span>\n </Button>\n );\n}\n\nfunction TraceObservationRows(props: {\n activeKey: TraceInspectorKey;\n isLastTurn: boolean;\n observations: TraceObservationItem[];\n traceActive: boolean;\n onSelect: (observationId: string) => void;\n}) {\n const roots = traceObservationTree(props.observations);\n return (\n <>\n {roots.map((node, index) => (\n <TraceObservationNodeRow\n activeKey={props.activeKey}\n ancestorLevels={props.isLastTurn ? [] : [1]}\n isLastSibling={index === roots.length - 1}\n key={node.observation.id}\n level={3}\n node={node}\n onSelect={props.onSelect}\n traceActive={props.traceActive}\n />\n ))}\n </>\n );\n}\n\nfunction TraceObservationNodeRow(props: {\n activeKey: TraceInspectorKey;\n ancestorLevels: number[];\n isLastSibling: boolean;\n level: number;\n node: TraceObservationNode;\n traceActive: boolean;\n onSelect: (observationId: string) => void;\n}) {\n const usageText = observationUsageText(props.node.observation);\n const childAncestorLevels = props.isLastSibling\n ? props.ancestorLevels\n : [...props.ancestorLevels, props.level];\n return (\n <>\n <TraceTreeRow\n active={props.traceActive && props.activeKey === `observation:${props.node.observation.id}`}\n ancestorLevels={props.ancestorLevels}\n hasChildren={props.node.children.length > 0}\n isLastSibling={props.isLastSibling}\n level={props.level}\n tone={props.node.observation.kind}\n title={traceObservationLabel(props.node.observation)}\n subtitle={\n usageText.length > 0\n ? `${formatDuration(props.node.observation.durationMs)} · ${usageText}`\n : formatDuration(props.node.observation.durationMs)\n }\n onSelect={() => props.onSelect(props.node.observation.id)}\n />\n {props.node.children.map((child, index) => (\n <TraceObservationNodeRow\n activeKey={props.activeKey}\n ancestorLevels={childAncestorLevels}\n isLastSibling={index === props.node.children.length - 1}\n key={child.observation.id}\n level={props.level + 1}\n node={child}\n onSelect={props.onSelect}\n traceActive={props.traceActive}\n />\n ))}\n </>\n );\n}\n\nfunction TraceDetailPane(props: {\n trace: StudioTrace;\n turns: Array<{ turn: number; observations: TraceObservationItem[]; durationMs?: number }>;\n activeKey: TraceInspectorKey;\n onShowSessionTraces: (sessionId: string) => void;\n}) {\n const selected = selectedTraceDetail(props.trace, props.turns, props.activeKey);\n return (\n <section\n className=\"grid min-h-0 grid-rows-[auto_minmax(0,1fr)] overflow-hidden bg-card/70\"\n aria-label=\"Trace detail\"\n >\n <header className=\"border-b border-border/60 bg-card/70 px-6 py-5\">\n <div className=\"grid min-w-0 gap-5\">\n <div className=\"flex min-w-0 items-start justify-between gap-4\">\n <div className=\"flex min-w-0 items-center gap-3\">\n <span\n className={cn(\n \"grid h-8 w-8 shrink-0 place-items-center rounded-lg bg-foreground text-background [&_svg]:h-4 [&_svg]:w-4 [&_svg]:opacity-100\",\n selected.tone !== \"trace\" && \"bg-muted text-foreground\",\n traceToneIconClass(selected.tone),\n )}\n >\n <TraceToneIcon tone={selected.tone} />\n </span>\n <div className=\"grid min-w-0 gap-1\">\n <h2 className=\"m-0 min-w-0 truncate text-2xl font-semibold leading-none tracking-[-0.01em] text-foreground\">\n {selected.title}\n </h2>\n <div className=\" text-xs font-medium text-muted-foreground\">\n {selected.startedAt}\n </div>\n </div>\n </div>\n </div>\n <div className=\"grid min-w-0 grid-cols-[repeat(auto-fit,minmax(150px,1fr))] gap-2\">\n <TraceMetric label=\"Duration\" value={formatDuration(selected.durationMs)} />\n {selected.firstDeltaMs === undefined ? null : (\n <TraceMetric label=\"First delta\" value={formatDuration(selected.firstDeltaMs)} />\n )}\n {selected.usage.length === 0 ? null : (\n <TraceMetric label=\"Usage\" value={selected.usage} />\n )}\n <button\n className=\"grid min-w-0 gap-1 rounded-lg bg-card/85 px-4 py-3 text-left transition duration-200 hover:bg-accent hover:text-accent-foreground\"\n type=\"button\"\n onClick={() => props.onShowSessionTraces(props.trace.sessionId)}\n >\n <span className=\" text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n Session\n </span>\n <span className=\"min-w-0 truncate text-sm font-semibold text-current\">\n {props.trace.sessionId}\n </span>\n </button>\n </div>\n </div>\n </header>\n <div className=\"min-w-0 overflow-auto\">\n <div className=\"grid min-w-0 content-start gap-6 p-6\">\n {selected.input === undefined ? null : (\n <TraceDataSection title=\"Input\" value={selected.input} />\n )}\n {selected.output === undefined ? null : (\n <TraceDataSection title=\"Output\" value={selected.output} tone=\"success\" />\n )}\n {selected.error === undefined ? null : (\n <TraceDataSection title=\"Error\" value={selected.error} tone=\"error\" />\n )}\n <TraceDataSection title=\"Metadata\" value={selected.metadata} rawJson />\n </div>\n </div>\n </section>\n );\n}\n\nfunction TraceMetric(props: { label: string; value: string }) {\n return (\n <div className=\"grid min-w-0 gap-1 rounded-lg bg-card/85 px-4 py-3\">\n <span className=\" text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n {props.label}\n </span>\n <span className=\"min-w-0 truncate text-sm font-semibold text-foreground\">{props.value}</span>\n </div>\n );\n}\n\nfunction TraceDataSection(props: {\n title: string;\n value: unknown;\n tone?: \"success\" | \"error\";\n compact?: boolean;\n rawJson?: boolean;\n}) {\n const rows = plainTraceValue(props.title, props.value);\n return (\n <section className=\"grid min-w-0 gap-3\">\n <div className=\"flex items-center gap-3\">\n <h3 className=\"m-0 text-lg font-semibold leading-tight text-foreground\">{props.title}</h3>\n <span className=\"h-px flex-1 bg-border/80\" aria-hidden=\"true\" />\n </div>\n {props.rawJson ? (\n <TraceJsonTree value={props.value} />\n ) : (\n <div className=\"grid min-w-0 gap-3\">\n {rows.map((item) => (\n <article\n className={cn(\n \"grid min-w-0 gap-3 rounded-lg bg-card/85 px-4 py-4\",\n props.compact &&\n \"grid-cols-[150px_minmax(0,1fr)] items-start gap-4 max-lg:grid-cols-1\",\n )}\n key={`${item.label}-${item.text}`}\n >\n <span className=\"flex min-w-0 items-center gap-2 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n <TraceRowIcon label={item.label} />\n {item.label}\n </span>\n <TraceRowContent compact={props.compact} item={item} tone={props.tone} />\n </article>\n ))}\n </div>\n )}\n </section>\n );\n}\n\nfunction TraceRowContent(props: {\n compact?: boolean | undefined;\n item: { label: string; text: string };\n tone?: \"success\" | \"error\" | undefined;\n}) {\n const historyItems = conversationHistoryItems(props.item);\n if (historyItems.length > 0) {\n return (\n <div className=\"grid min-w-0 gap-5\">\n {historyItems.map((item) => (\n <div className=\"grid min-w-0 gap-2\" key={`${item.index}-${item.role}-${item.text}`}>\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\" text-xs font-semibold tabular-nums text-muted-foreground\">\n {item.index}\n </span>\n <Badge\n className={cn(\n \"px-1.5 py-0.5\",\n item.role === \"User\" &&\n \"border-border/80 bg-muted-foreground/15 text-muted-foreground\",\n item.role === \"Assistant\" && \"border-border/80 bg-foreground/15 text-foreground\",\n item.role === \"Tool\" &&\n \"border-destructive/40 bg-destructive/15 text-destructive\",\n )}\n >\n {item.role}\n </Badge>\n </div>\n <p className=\"m-0 whitespace-pre-wrap text-sm leading-7 text-foreground [overflow-wrap:anywhere]\">\n {item.text}\n </p>\n </div>\n ))}\n </div>\n );\n }\n\n return (\n <p\n className={cn(\n \"m-0 whitespace-pre-wrap text-sm leading-7 text-foreground [overflow-wrap:anywhere]\",\n props.compact && \" text-sm leading-6\",\n props.tone === \"success\" && !isNeutralTraceRow(props.item) && \"text-foreground\",\n props.tone === \"error\" && \"text-destructive\",\n )}\n >\n {props.item.text}\n </p>\n );\n}\n\nfunction conversationHistoryItems(row: {\n label: string;\n text: string;\n}): Array<{ index: string; role: string; text: string }> {\n if (!row.label.startsWith(\"Conversation history\")) {\n return [];\n }\n return row.text\n .split(\"\\n\\n\")\n .flatMap((block): Array<{ index: string; role: string; text: string }> => {\n const [heading, ...content] = block.split(\"\\n\");\n const match = /^(\\d+)\\.\\s+(.+)$/.exec(heading ?? \"\");\n if (match === null) {\n return [];\n }\n return [\n {\n index: match[1] ?? \"\",\n role: match[2] ?? \"Message\",\n text: content.join(\"\\n\"),\n },\n ];\n });\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,8],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"trace-browser-mWVtzrMg.js","names":["ScrollArea","Fragment"],"sources":["../../../../../node_modules/.pnpm/@hugeicons+core-free-icons@4.2.2/node_modules/@hugeicons/core-free-icons/dist/esm/ArrowLeft02Icon.js","../../../../../node_modules/.pnpm/@hugeicons+core-free-icons@4.2.2/node_modules/@hugeicons/core-free-icons/dist/esm/ArrowRight01Icon.js","../../../../../node_modules/.pnpm/@hugeicons+core-free-icons@4.2.2/node_modules/@hugeicons/core-free-icons/dist/esm/ArrowTurnBackwardIcon.js","../../../../../node_modules/.pnpm/@hugeicons+core-free-icons@4.2.2/node_modules/@hugeicons/core-free-icons/dist/esm/CpuIcon.js","../../../../../node_modules/.pnpm/@hugeicons+core-free-icons@4.2.2/node_modules/@hugeicons/core-free-icons/dist/esm/GitBranchIcon.js","../../../../../node_modules/.pnpm/@hugeicons+core-free-icons@4.2.2/node_modules/@hugeicons/core-free-icons/dist/esm/Settings02Icon.js","../../../src/ui/app/modules/tracing/trace-browser-detail.tsx","../../../src/ui/app/components/ui/card.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-scroll-area@1.2.13_@types+react-dom@19.2.3_@types+react@19.2.14__@types_4fe787a049943a86784dbab50fe5086f/node_modules/@radix-ui/react-scroll-area/dist/index.mjs","../../../src/ui/app/components/ui/scroll-area.tsx","../../../src/ui/app/modules/tracing/trace-browser.tsx"],"sourcesContent":["const ArrowLeft02Icon = [\n [\"path\", { d: \"M5.5 12.002H19\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"0\" }],\n [\"path\", { d: \"M10.9999 18.002C10.9999 18.002 4.99998 13.583 4.99997 12.0019C4.99996 10.4208 11 6.00195 11 6.00195\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"1\" }]\n];\n\nexport { ArrowLeft02Icon as default };\n//# sourceMappingURL=ArrowLeft02Icon.js.map\n","const ArrowRight01Icon = [\n [\"path\", { d: \"M9.00005 6C9.00005 6 15 10.4189 15 12C15 13.5812 9 18 9 18\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"0\" }]\n];\n\nexport { ArrowRight01Icon as default };\n//# sourceMappingURL=ArrowRight01Icon.js.map\n","const ArrowTurnBackwardIcon = [\n [\"path\", { d: \"M11 6H15.5C17.9853 6 20 8.01472 20 10.5C20 12.9853 17.9853 15 15.5 15H4\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"0\" }],\n [\"path\", { d: \"M6.99998 12C6.99998 12 4.00001 14.2095 4 15C3.99999 15.7906 7 18 7 18\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"1\" }]\n];\n\nexport { ArrowTurnBackwardIcon as default };\n//# sourceMappingURL=ArrowTurnBackwardIcon.js.map\n","const CpuIcon = [\n [\"path\", { d: \"M4 12C4 8.22876 4 6.34315 5.17157 5.17157C6.34315 4 8.22876 4 12 4C15.7712 4 17.6569 4 18.8284 5.17157C20 6.34315 20 8.22876 20 12C20 15.7712 20 17.6569 18.8284 18.8284C17.6569 20 15.7712 20 12 20C8.22876 20 6.34315 20 5.17157 18.8284C4 17.6569 4 15.7712 4 12Z\", stroke: \"currentColor\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"0\" }],\n [\"path\", { d: \"M9.5 2V4\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"1\" }],\n [\"path\", { d: \"M14.5 2V4\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"2\" }],\n [\"path\", { d: \"M9.5 20V22\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"3\" }],\n [\"path\", { d: \"M14.5 20V22\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"4\" }],\n [\"path\", { d: \"M13 9L9 13\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"5\" }],\n [\"path\", { d: \"M15 13L13 15\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"6\" }],\n [\"path\", { d: \"M22 14.5L20 14.5\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"7\" }],\n [\"path\", { d: \"M4 9.5L2 9.5\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"8\" }],\n [\"path\", { d: \"M4 14.5L2 14.5\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"9\" }],\n [\"path\", { d: \"M22 9.5L20 9.5\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"10\" }]\n];\n\nexport { CpuIcon as default };\n//# sourceMappingURL=CpuIcon.js.map\n","const GitBranchIcon = [\n [\"path\", { d: \"M7 19H13C15.8284 19 17.2426 19 18.1213 18.1213C19 17.2426 19 15.8284 19 13V10M19 10C19.7002 10 21.0085 11.9943 21.5 12.5M19 10C18.2998 10 16.9915 11.9943 16.5 12.5\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"0\" }],\n [\"path\", { d: \"M5 7L5 17\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\", key: \"1\" }],\n [\"circle\", { cx: \"5\", cy: \"5\", r: \"2\", stroke: \"currentColor\", strokeWidth: \"1.5\", key: \"2\" }],\n [\"circle\", { cx: \"19\", cy: \"5\", r: \"2\", stroke: \"currentColor\", strokeWidth: \"1.5\", key: \"3\" }],\n [\"circle\", { cx: \"5\", cy: \"19\", r: \"2\", stroke: \"currentColor\", strokeWidth: \"1.5\", key: \"4\" }]\n];\n\nexport { GitBranchIcon as default };\n//# sourceMappingURL=GitBranchIcon.js.map\n","const Settings02Icon = [\n [\"path\", { d: \"M15.5 12C15.5 13.933 13.933 15.5 12 15.5C10.067 15.5 8.5 13.933 8.5 12C8.5 10.067 10.067 8.5 12 8.5C13.933 8.5 15.5 10.067 15.5 12Z\", stroke: \"currentColor\", strokeWidth: \"1.5\", key: \"0\" }],\n [\"path\", { d: \"M21.011 14.0965C21.5329 13.9558 21.7939 13.8854 21.8969 13.7508C22 13.6163 22 13.3998 22 12.9669V11.0332C22 10.6003 22 10.3838 21.8969 10.2493C21.7938 10.1147 21.5329 10.0443 21.011 9.90358C19.0606 9.37759 17.8399 7.33851 18.3433 5.40087C18.4817 4.86799 18.5509 4.60156 18.4848 4.44529C18.4187 4.28902 18.2291 4.18134 17.8497 3.96596L16.125 2.98673C15.7528 2.77539 15.5667 2.66972 15.3997 2.69222C15.2326 2.71472 15.0442 2.90273 14.6672 3.27873C13.208 4.73448 10.7936 4.73442 9.33434 3.27864C8.95743 2.90263 8.76898 2.71463 8.60193 2.69212C8.43489 2.66962 8.24877 2.77529 7.87653 2.98663L6.15184 3.96587C5.77253 4.18123 5.58287 4.28891 5.51678 4.44515C5.45068 4.6014 5.51987 4.86787 5.65825 5.4008C6.16137 7.3385 4.93972 9.37763 2.98902 9.9036C2.46712 10.0443 2.20617 10.1147 2.10308 10.2492C2 10.3838 2 10.6003 2 11.0332V12.9669C2 13.3998 2 13.6163 2.10308 13.7508C2.20615 13.8854 2.46711 13.9558 2.98902 14.0965C4.9394 14.6225 6.16008 16.6616 5.65672 18.5992C5.51829 19.1321 5.44907 19.3985 5.51516 19.5548C5.58126 19.7111 5.77092 19.8188 6.15025 20.0341L7.87495 21.0134C8.24721 21.2247 8.43334 21.3304 8.6004 21.3079C8.76746 21.2854 8.95588 21.0973 9.33271 20.7213C10.7927 19.2644 13.2088 19.2643 14.6689 20.7212C15.0457 21.0973 15.2341 21.2853 15.4012 21.3078C15.5682 21.3303 15.7544 21.2246 16.1266 21.0133L17.8513 20.034C18.2307 19.8187 18.4204 19.711 18.4864 19.5547C18.5525 19.3984 18.4833 19.132 18.3448 18.5991C17.8412 16.6616 19.0609 14.6226 21.011 14.0965Z\", stroke: \"currentColor\", strokeLinecap: \"round\", strokeWidth: \"1.5\", key: \"1\" }]\n];\n\nexport { Settings02Icon as default };\n//# sourceMappingURL=Settings02Icon.js.map\n","import {\n ArrowDown01Icon,\n ArrowRight01Icon,\n ArrowTurnBackwardIcon,\n ChatIcon,\n CpuIcon,\n GitBranchIcon,\n PathIcon,\n Robot01Icon,\n Settings02Icon,\n Wrench01Icon,\n} from \"@hugeicons/core-free-icons\";\nimport { useState } from \"react\";\nimport type { StudioTrace } from \"../../../../types\";\nimport { StudioIcon } from \"../../components/ui/icon\";\nimport { formatToolValue, formatTraceTime, formatUsage } from \"../shared/format\";\nimport { isRecord } from \"../shared/object\";\nimport { messageText } from \"../shared/transcript\";\nimport type { TraceInspectorKey, TraceObservationItem } from \"../shared/types\";\n\nexport function rawTraceJson(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2) ?? \"undefined\";\n } catch {\n return String(value);\n }\n}\n\nexport function TraceJsonTree(props: { value: unknown }) {\n return (\n <div className=\"overflow-x-auto rounded-lg bg-card/85 px-4 py-4 text-sm leading-6 text-foreground\">\n <JsonNode depth={0} path=\"$\" value={props.value} />\n </div>\n );\n}\n\nconst jsonIndentSize = 16;\nconst jsonDisclosureGutter = 20;\n\nfunction JsonNode(props: {\n arrayIndex?: number | undefined;\n depth: number;\n path: string;\n propertyKey?: string | undefined;\n trailingComma?: boolean | undefined;\n value: unknown;\n}) {\n if (isJsonBranch(props.value)) {\n return (\n <JsonBranch\n arrayIndex={props.arrayIndex}\n depth={props.depth}\n path={props.path}\n propertyKey={props.propertyKey}\n trailingComma={props.trailingComma}\n value={props.value}\n />\n );\n }\n\n return (\n <div\n className=\"min-w-max whitespace-pre\"\n style={{ paddingLeft: `${jsonContentIndent(props.depth)}px` }}\n >\n <JsonNodeLabel arrayIndex={props.arrayIndex} propertyKey={props.propertyKey} />\n <JsonPrimitive value={props.value} />\n {props.trailingComma ? <span className=\"text-foreground\">,</span> : null}\n </div>\n );\n}\n\nfunction JsonBranch(props: {\n arrayIndex?: number | undefined;\n depth: number;\n path: string;\n propertyKey?: string | undefined;\n trailingComma?: boolean | undefined;\n value: Record<string, unknown> | unknown[];\n}) {\n const [open, setOpen] = useState(props.depth === 0);\n const arrayValue = Array.isArray(props.value) ? props.value : undefined;\n const entries =\n arrayValue === undefined\n ? Object.entries(props.value as Record<string, unknown>)\n : arrayValue.map((item, index): [string, unknown] => [String(index), item]);\n const opening = arrayValue === undefined ? \"{\" : \"[\";\n const closing = arrayValue === undefined ? \"}\" : \"]\";\n const collapsed = arrayValue === undefined ? \"{…}\" : \"[…]\";\n\n if (entries.length === 0) {\n return (\n <div\n className=\"min-w-max whitespace-pre\"\n style={{ paddingLeft: `${jsonContentIndent(props.depth)}px` }}\n >\n <JsonNodeLabel arrayIndex={props.arrayIndex} propertyKey={props.propertyKey} />\n <span className=\"text-foreground\">\n {opening}\n {closing}\n {props.trailingComma ? \",\" : \"\"}\n </span>\n </div>\n );\n }\n\n return (\n <div className=\"grid min-w-max\">\n <button\n aria-expanded={open}\n className=\"grid min-w-max grid-cols-[16px_auto] items-center gap-1 rounded-lg py-0.5 pr-2 text-left transition duration-200 hover:bg-accent/45 hover:text-accent-foreground\"\n onClick={() => setOpen((current) => !current)}\n style={{ paddingLeft: `${props.depth * jsonIndentSize}px` }}\n type=\"button\"\n >\n <span className=\"grid h-4 w-4 place-items-center text-muted-foreground [&_svg]:h-3 [&_svg]:w-3\">\n {open ? (\n <StudioIcon icon={ArrowDown01Icon} aria-hidden=\"true\" />\n ) : (\n <StudioIcon icon={ArrowRight01Icon} aria-hidden=\"true\" />\n )}\n </span>\n <span className=\"whitespace-pre\">\n <JsonNodeLabel arrayIndex={props.arrayIndex} propertyKey={props.propertyKey} />\n {open ? (\n <span className=\"text-foreground\">{opening}</span>\n ) : (\n <span className=\"text-muted-foreground\">{collapsed}</span>\n )}\n {!open && props.trailingComma ? <span className=\"text-foreground\">,</span> : null}\n </span>\n </button>\n {open ? (\n <>\n {entries.map(([key, value], index) => (\n <JsonNode\n arrayIndex={arrayValue === undefined ? undefined : Number(key)}\n depth={props.depth + 1}\n key={`${props.path}.${key}`}\n path={`${props.path}.${key}`}\n propertyKey={arrayValue === undefined ? key : undefined}\n trailingComma={index < entries.length - 1}\n value={value}\n />\n ))}\n <div\n className=\"min-w-max whitespace-pre text-foreground\"\n style={{ paddingLeft: `${jsonContentIndent(props.depth)}px` }}\n >\n {closing}\n {props.trailingComma ? \",\" : \"\"}\n </div>\n </>\n ) : null}\n </div>\n );\n}\n\nfunction jsonContentIndent(depth: number): number {\n return depth * jsonIndentSize + jsonDisclosureGutter;\n}\n\nfunction JsonNodeLabel(props: {\n arrayIndex?: number | undefined;\n propertyKey?: string | undefined;\n}) {\n if (props.propertyKey !== undefined) {\n return (\n <>\n <span className=\"text-muted-foreground\">{JSON.stringify(props.propertyKey)}</span>\n <span className=\"text-foreground\">: </span>\n </>\n );\n }\n if (props.arrayIndex !== undefined) {\n return (\n <>\n <span className=\"text-muted-foreground\">[{props.arrayIndex}]</span>\n <span className=\"text-foreground\"> </span>\n </>\n );\n }\n return null;\n}\n\nfunction JsonPrimitive(props: { value: unknown }) {\n if (typeof props.value === \"string\") {\n return <span className=\"text-foreground\">{JSON.stringify(props.value)}</span>;\n }\n if (typeof props.value === \"number\") {\n return <span className=\"text-foreground\">{String(props.value)}</span>;\n }\n if (typeof props.value === \"boolean\") {\n return <span className=\"text-chart-4\">{String(props.value)}</span>;\n }\n if (props.value === null) {\n return <span className=\"text-muted-foreground\">null</span>;\n }\n if (props.value === undefined) {\n return <span className=\"text-muted-foreground\">undefined</span>;\n }\n return <span className=\"text-foreground\">{rawTraceJson(props.value)}</span>;\n}\n\nfunction isJsonBranch(value: unknown): value is Record<string, unknown> | unknown[] {\n return Array.isArray(value) || isRecord(value);\n}\n\nexport function jsonSyntaxTokens(\n json: string,\n): Array<{ text: string; type: JsonTokenType; start: number }> {\n const tokenPattern =\n /(\"(?:\\\\u[\\da-fA-F]{4}|\\\\[^u]|[^\\\\\"])*\"(?=\\s*:)|\"(?:\\\\u[\\da-fA-F]{4}|\\\\[^u]|[^\\\\\"])*\"|-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?|\\btrue\\b|\\bfalse\\b|\\bnull\\b)/g;\n const tokens: Array<{ text: string; type: JsonTokenType; start: number }> = [];\n let cursor = 0;\n for (const match of json.matchAll(tokenPattern)) {\n const text = match[0];\n const index = match.index ?? 0;\n if (index > cursor) {\n tokens.push({ text: json.slice(cursor, index), type: \"plain\", start: cursor });\n }\n tokens.push({\n text,\n type: jsonTokenType(text, json.slice(index + text.length)),\n start: index,\n });\n cursor = index + text.length;\n }\n if (cursor < json.length) {\n tokens.push({ text: json.slice(cursor), type: \"plain\", start: cursor });\n }\n return tokens;\n}\n\ntype JsonTokenType = \"plain\" | \"key\" | \"string\" | \"number\" | \"boolean\" | \"null\";\n\nfunction jsonTokenType(text: string, followingText: string): JsonTokenType {\n if (text.startsWith('\"')) {\n return followingText.trimStart().startsWith(\":\") ? \"key\" : \"string\";\n }\n if (text === \"true\" || text === \"false\") {\n return \"boolean\";\n }\n if (text === \"null\") {\n return \"null\";\n }\n return \"number\";\n}\n\nexport function isNeutralTraceRow(row: { label: string }): boolean {\n return row.label === \"Message Id\";\n}\n\nexport function TraceRowIcon(props: { label: string }) {\n const className = \"h-3.5 w-3.5 shrink-0\";\n switch (props.label) {\n case \"System prompt\":\n return <StudioIcon icon={Settings02Icon} aria-hidden=\"true\" className={className} />;\n case \"Prompt\":\n return <StudioIcon icon={ChatIcon} aria-hidden=\"true\" className={className} />;\n case \"Output\":\n case \"Assistant output\":\n return <StudioIcon icon={ArrowTurnBackwardIcon} aria-hidden=\"true\" className={className} />;\n default:\n return null;\n }\n}\n\nexport function plainTraceValue(\n title: string,\n value: unknown,\n): Array<{ label: string; text: string }> {\n if (title === \"Output\") {\n const outputRows = plainTraceOutput(value);\n if (outputRows.length > 0) {\n return outputRows;\n }\n }\n const messageRows = plainTraceInput(value, title);\n if (messageRows.length > 0) {\n return messageRows;\n }\n if (!isRecord(value)) {\n return [{ label: title, text: plainTraceText(value) }];\n }\n\n const rows: Array<{ label: string; text: string }> = [];\n for (const [key, item] of Object.entries(value)) {\n const nestedMessages = plainTraceInput(item, key);\n if (nestedMessages.length > 0) {\n rows.push(...nestedMessages);\n continue;\n }\n rows.push({ label: traceLabelText(key), text: plainTraceText(item) });\n }\n return rows.length > 0 ? rows : [{ label: title, text: \"Empty object\" }];\n}\n\nfunction plainTraceOutput(value: unknown): Array<{ label: string; text: string }> {\n if (!isRecord(value)) {\n return [];\n }\n const rows: Array<{ label: string; text: string }> = [];\n const choiceRows = plainTraceInput(value.choice, \"choice\");\n rows.push(...choiceRows);\n if (typeof value.messageId === \"string\" && value.messageId.length > 0) {\n rows.push({ label: \"Message Id\", text: value.messageId });\n }\n return rows;\n}\n\nfunction plainTraceInput(\n value: unknown,\n parentKey?: string,\n): Array<{ label: string; text: string }> {\n if (typeof value === \"string\" && parentKey === undefined) {\n return [{ label: \"Value\", text: value }];\n }\n if (Array.isArray(value)) {\n if (parentKey === \"chatHistory\") {\n return chatHistoryRows(value);\n }\n if (parentKey === \"history\") {\n return conversationHistoryRows(value);\n }\n return value\n .map((item, index) => ({\n label: traceArrayItemLabel(item, index, parentKey),\n text: messageText(item) || formatToolValue(item),\n }))\n .filter((item) => item.text.length > 0);\n }\n if (!isRecord(value)) {\n return [];\n }\n\n const chatHistory = Array.isArray(value.chatHistory) ? value.chatHistory : undefined;\n if (chatHistory !== undefined) {\n const rows = systemPromptRows(value);\n rows.push(...plainTraceInput(chatHistory, \"chatHistory\"));\n return rows;\n }\n\n if (Array.isArray(value.prompt)) {\n return plainTraceInput(value.prompt, \"prompt\");\n }\n\n const rows: Array<{ label: string; text: string }> = [];\n rows.push(...systemPromptRows(value));\n\n const history = Array.isArray(value.history) ? value.history : [];\n if (history.length > 0) {\n rows.push(...plainTraceInput(history, \"history\"));\n }\n\n const promptText = messageText(value.prompt);\n if (promptText.length > 0) {\n rows.push({ label: history.length > 0 ? \"Current prompt\" : \"Prompt\", text: promptText });\n }\n\n return rows;\n}\n\nfunction chatHistoryRows(value: unknown[]): Array<{ label: string; text: string }> {\n const messages = value\n .map((item, index) => ({\n label: traceArrayItemLabel(item, index, \"chatHistory\"),\n text: messageText(item) || formatToolValue(item),\n }))\n .filter((item) => item.text.length > 0);\n const current = messages.at(-1);\n const history = messages.slice(0, -1);\n const rows: Array<{ label: string; text: string }> = [];\n if (history.length > 0) {\n rows.push({\n label: `Conversation history (${history.length})`,\n text: history.map((item, index) => `${index + 1}. ${item.label}\\n${item.text}`).join(\"\\n\\n\"),\n });\n }\n if (current !== undefined) {\n rows.push({\n label: history.length > 0 ? \"Current prompt\" : \"Prompt\",\n text: current.text,\n });\n }\n return rows;\n}\n\nfunction conversationHistoryRows(value: unknown[]): Array<{ label: string; text: string }> {\n const messages = value\n .map((item, index) => ({\n label: traceArrayItemLabel(item, index, \"history\"),\n text: messageText(item) || formatToolValue(item),\n }))\n .filter((item) => item.text.length > 0);\n if (messages.length === 0) {\n return [];\n }\n return [\n {\n label: `Conversation history (${messages.length})`,\n text: messages.map((item, index) => `${index + 1}. ${item.label}\\n${item.text}`).join(\"\\n\\n\"),\n },\n ];\n}\n\nfunction traceArrayItemLabel(item: unknown, index: number, parentKey: string | undefined): string {\n if (isRecord(item)) {\n const type = typeof item.type === \"string\" ? item.type : undefined;\n if (parentKey === \"choice\") {\n if (type === \"text\") {\n return \"Assistant output\";\n }\n if (type === \"reasoning\") {\n return \"Reasoning\";\n }\n }\n if (type === \"reasoning\") {\n return \"Reasoning\";\n }\n if (typeof item.role === \"string\") {\n return traceLabelText(item.role);\n }\n if (type !== undefined) {\n return traceLabelText(type);\n }\n }\n\n const prefix = parentKey === undefined ? \"Item\" : `${traceLabelText(parentKey)} item`;\n return `${prefix} ${index + 1}`;\n}\n\nfunction traceLabelText(value: string): string {\n return value\n .replace(/[_-]+/g, \" \")\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .trim()\n .replace(/\\b\\w/g, (letter) => letter.toUpperCase());\n}\n\nfunction systemPromptRows(value: Record<string, unknown>): Array<{ label: string; text: string }> {\n const instructions = value.instructions;\n if (typeof instructions !== \"string\" || instructions.trim().length === 0) {\n return [];\n }\n return [{ label: \"System prompt\", text: instructions }];\n}\n\nfunction plainTraceText(value: unknown): string {\n if (value === undefined) {\n return \"undefined\";\n }\n if (value === null) {\n return \"null\";\n }\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nexport function traceTurns(trace: StudioTrace): Array<{\n turn: number;\n observations: TraceObservationItem[];\n durationMs?: number;\n}> {\n const grouped = new Map<number, TraceObservationItem[]>();\n for (const observation of trace.observations) {\n const turn = Number.isFinite(observation.turn) ? observation.turn : grouped.size + 1;\n grouped.set(turn, [...(grouped.get(turn) ?? []), observation]);\n }\n return [...grouped.entries()]\n .sort(([left], [right]) => left - right)\n .map(([turn, observations]) => ({\n turn,\n observations,\n durationMs: observations.reduce(\n (total, observation) => total + (observation.durationMs ?? 0),\n 0,\n ),\n }));\n}\n\nexport type TraceObservationNode = {\n observation: TraceObservationItem;\n children: TraceObservationNode[];\n};\n\nexport function traceObservationTree(observations: TraceObservationItem[]): TraceObservationNode[] {\n const nodes = new Map<string, TraceObservationNode>();\n for (const observation of observations) {\n nodes.set(observation.id, { observation, children: [] });\n }\n\n const roots: TraceObservationNode[] = [];\n for (const observation of observations) {\n const node = nodes.get(observation.id);\n if (node === undefined) {\n continue;\n }\n const parentId = observation.parentObservationId;\n const parent = parentId === undefined ? undefined : nodes.get(parentId);\n if (parent === undefined) {\n roots.push(node);\n } else {\n parent.children.push(node);\n }\n }\n return roots;\n}\n\nexport function selectedTraceDetail(\n trace: StudioTrace,\n turns: Array<{ turn: number; observations: TraceObservationItem[]; durationMs?: number }>,\n activeKey: TraceInspectorKey,\n): {\n title: string;\n tone: \"trace\" | \"agent\" | \"turn\" | StudioTrace[\"observations\"][number][\"kind\"];\n startedAt: string;\n durationMs: number | undefined;\n firstDeltaMs: number | undefined;\n usage: string;\n input?: unknown;\n output?: unknown;\n error?: unknown;\n metadata: unknown;\n} {\n if (activeKey === \"agent\") {\n return {\n title: \"agent.run\",\n tone: \"agent\",\n startedAt: formatTraceTime(trace.startedAt),\n durationMs: trace.durationMs,\n firstDeltaMs: firstDeltaMsFromObservations(trace.observations),\n usage: formatUsage(trace.usage),\n input: trace.input,\n output: trace.output,\n error: trace.error,\n metadata: traceDetailMetadata(trace),\n };\n }\n if (activeKey.startsWith(\"turn:\")) {\n const turnNumber = Number(activeKey.slice(\"turn:\".length));\n const turn = turns.find((item) => item.turn === turnNumber);\n return {\n title: `turn.${Number.isFinite(turnNumber) ? turnNumber : 1}`,\n tone: \"turn\",\n startedAt: formatTraceTime(turn?.observations[0]?.startedAt ?? trace.startedAt),\n durationMs: turn?.durationMs,\n firstDeltaMs: firstDeltaMsFromObservations(turn?.observations ?? []),\n usage: turnUsageText(turn?.observations ?? []),\n input: turn?.observations[0]?.input,\n output: turn?.observations.at(-1)?.output,\n metadata: turnDetailMetadata(turnNumber, turn?.observations ?? []),\n };\n }\n if (activeKey.startsWith(\"observation:\")) {\n const observationId = activeKey.slice(\"observation:\".length);\n const observation = trace.observations.find((item) => item.id === observationId);\n if (observation !== undefined) {\n return {\n title: traceObservationLabel(observation),\n tone: observation.kind,\n startedAt: formatTraceTime(observation.startedAt),\n durationMs: observation.durationMs,\n firstDeltaMs: firstDeltaMsFromMetadata(observation.metadata),\n usage: observationUsageText(observation),\n input: observation.input,\n output: observation.output,\n error: observation.error,\n metadata: observationDetailMetadata(observation),\n };\n }\n }\n return {\n title: trace.name ?? \"Agent\",\n tone: \"trace\",\n startedAt: formatTraceTime(trace.startedAt),\n durationMs: trace.durationMs,\n firstDeltaMs: firstDeltaMsFromObservations(trace.observations),\n usage: formatUsage(trace.usage),\n input: trace.input,\n output: trace.output,\n error: trace.error,\n metadata: traceDetailMetadata(trace),\n };\n}\n\nexport function traceDetailMetadata(trace: StudioTrace): Record<string, unknown> {\n const metadata = isRecord(trace.metadata) ? trace.metadata : {};\n const traceGroup = compactTraceMetadata({\n status: trace.status,\n traceId: trace.trace?.traceId ?? trace.id,\n observationId: trace.trace?.observationId,\n sessionId: trace.sessionId,\n observationCount: trace.observationCount,\n messageCount: traceMessageCount(metadata.messages),\n startedAt: trace.startedAt,\n endedAt: trace.endedAt,\n durationMs: trace.durationMs,\n });\n return compactTraceMetadata({\n ...metadata,\n status: trace.status,\n traceId: trace.trace?.traceId ?? trace.id,\n observationId: trace.trace?.observationId,\n sessionId: trace.sessionId,\n observationCount: trace.observationCount,\n messageCount: traceMessageCount(metadata.messages),\n startedAt: trace.startedAt,\n endedAt: trace.endedAt,\n durationMs: trace.durationMs,\n trace: isRecord(metadata.trace) ? metadata.trace : traceGroup,\n });\n}\n\nfunction turnDetailMetadata(\n turn: number,\n observations: TraceObservationItem[],\n): Record<string, unknown> {\n return compactTraceMetadata({\n turn,\n observationCount: observations.length,\n generationCount: observations.filter((observation) => observation.kind === \"generation\").length,\n toolCount: observations.filter((observation) => observation.kind === \"tool\").length,\n agentCount: observations.filter((observation) => observation.kind === \"agent\").length,\n firstDeltaMs: firstDeltaMsFromObservations(observations),\n status: observationStatusSummary(observations),\n startedAt: observations[0]?.startedAt,\n endedAt: observations.at(-1)?.endedAt,\n });\n}\n\nexport function observationDetailMetadata(\n observation: TraceObservationItem,\n): Record<string, unknown> {\n const metadata = isRecord(observation.metadata) ? observation.metadata : {};\n const base = compactTraceMetadata({\n ...metadata,\n status: observation.status,\n kind: observation.kind,\n turn: observation.turn,\n parentObservationId: observation.parentObservationId ?? null,\n startedAt: observation.startedAt,\n endedAt: observation.endedAt ?? null,\n durationMs: observation.durationMs,\n });\n return compactTraceMetadata({\n ...base,\n trace: isRecord(base.trace)\n ? base.trace\n : compactTraceMetadata({\n status: observation.status,\n kind: observation.kind,\n turn: observation.turn,\n parentObservationId: observation.parentObservationId ?? null,\n startedAt: observation.startedAt,\n endedAt: observation.endedAt ?? null,\n durationMs: observation.durationMs,\n }),\n modelInfo: isRecord(base.modelInfo) ? base.modelInfo : modelInfoMetadata(base),\n modelCall: isRecord(base.modelCall) ? base.modelCall : modelCallMetadata(base),\n response: isRecord(base.response) ? base.response : responseMetadata(base),\n tools: isRecord(base.tools) ? base.tools : toolsMetadata(base),\n timing: isRecord(base.timing) ? base.timing : timingMetadata(base),\n });\n}\n\nfunction modelInfoMetadata(metadata: Record<string, unknown>): Record<string, unknown> | undefined {\n const group = compactTraceMetadata({\n provider: metadata.provider,\n model: metadata.model,\n requestedModel: metadata.requestedModel,\n defaultModel: metadata.defaultModel,\n });\n return Object.keys(group).length === 0 ? undefined : group;\n}\n\nfunction modelCallMetadata(metadata: Record<string, unknown>): Record<string, unknown> | undefined {\n const request = compactTraceMetadata({\n messageCount: metadata.historyCount,\n documentCount: metadata.documentCount,\n toolCount: metadata.toolCount,\n toolNames: metadata.toolNames,\n temperature: metadata.temperature,\n maxTokens: metadata.maxTokens,\n toolChoice: metadata.toolChoice,\n hasOutputSchema: metadata.hasOutputSchema,\n additionalParamKeys: metadata.additionalParamKeys,\n });\n const group = compactTraceMetadata({\n request: Object.keys(request).length === 0 ? undefined : request,\n providerRequest: metadata.providerRequest,\n });\n return Object.keys(group).length === 0 ? undefined : group;\n}\n\nfunction responseMetadata(metadata: Record<string, unknown>): Record<string, unknown> | undefined {\n const group = compactTraceMetadata({\n messageId: metadata.messageId,\n usage: metadata.usage,\n providerResponse: metadata.providerResponse,\n });\n return Object.keys(group).length === 0 ? undefined : group;\n}\n\nfunction toolsMetadata(metadata: Record<string, unknown>): Record<string, unknown> | undefined {\n const group = compactTraceMetadata({\n count: metadata.toolCount,\n names: metadata.toolNames,\n toolChoice: metadata.toolChoice,\n internalCallId: metadata.internalCallId,\n toolCallId: metadata.toolCallId,\n skipped: metadata.skipped,\n description: metadata.toolDescription,\n parameterKeys: metadata.parameterKeys,\n requiredParameterKeys: metadata.requiredParameterKeys,\n approvalRequired: metadata.approvalRequired,\n mcpServerName: metadata.mcpServerName,\n argumentBytes: metadata.argumentBytes,\n resultBytes: metadata.resultBytes,\n });\n return Object.keys(group).length === 0 ? undefined : group;\n}\n\nfunction timingMetadata(metadata: Record<string, unknown>): Record<string, unknown> | undefined {\n const group = compactTraceMetadata({\n firstDeltaMs: metadata.firstDeltaMs,\n durationMs: metadata.durationMs,\n startedAt: metadata.startedAt,\n endedAt: metadata.endedAt,\n });\n return Object.keys(group).length === 0 ? undefined : group;\n}\n\nexport function observationStatusSummary(observations: TraceObservationItem[]): string {\n if (observations.length === 0) {\n return \"empty\";\n }\n if (observations.some((observation) => observation.status === \"error\")) {\n return \"error\";\n }\n if (observations.some((observation) => observation.status === \"running\")) {\n return \"running\";\n }\n return \"success\";\n}\n\nfunction traceMessageCount(value: unknown): number | undefined {\n return Array.isArray(value) ? value.length : undefined;\n}\n\nexport function compactTraceMetadata(values: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(Object.entries(values).filter(([, value]) => value !== undefined));\n}\n\nexport function traceObservationLabel(observation: TraceObservationItem): string {\n if (observation.kind === \"agent\") {\n return observation.name;\n }\n return observation.kind === \"tool\" ? `tool.${observation.name}` : observation.name;\n}\n\nexport function firstDeltaMsFromObservations(\n observations: TraceObservationItem[],\n): number | undefined {\n for (const observation of observations) {\n const firstDeltaMs = firstDeltaMsFromMetadata(observation.metadata);\n if (firstDeltaMs !== undefined) {\n return firstDeltaMs;\n }\n }\n return undefined;\n}\n\nfunction firstDeltaMsFromMetadata(metadata: unknown): number | undefined {\n if (!isRecord(metadata) || typeof metadata.firstDeltaMs !== \"number\") {\n return undefined;\n }\n return metadata.firstDeltaMs;\n}\n\nexport function statusDotClass(status: StudioTrace[\"status\"]): string {\n switch (status) {\n case \"success\":\n return \"bg-foreground\";\n case \"error\":\n return \"bg-destructive\";\n case \"running\":\n return \"bg-muted-foreground\";\n }\n}\n\nexport function TraceToneIcon(props: {\n tone: \"trace\" | \"agent\" | \"turn\" | StudioTrace[\"observations\"][number][\"kind\"];\n}) {\n switch (props.tone) {\n case \"trace\":\n return <StudioIcon icon={PathIcon} aria-hidden=\"true\" />;\n case \"agent\":\n return <StudioIcon icon={Robot01Icon} aria-hidden=\"true\" />;\n case \"turn\":\n return <StudioIcon icon={GitBranchIcon} aria-hidden=\"true\" />;\n case \"generation\":\n return <StudioIcon icon={CpuIcon} aria-hidden=\"true\" />;\n case \"tool\":\n return <StudioIcon icon={Wrench01Icon} aria-hidden=\"true\" />;\n }\n}\n\nexport function traceToneIconClass(\n tone: \"trace\" | \"agent\" | \"turn\" | StudioTrace[\"observations\"][number][\"kind\"],\n): string {\n switch (tone) {\n case \"trace\":\n return \"bg-foreground text-background\";\n case \"agent\":\n return \"bg-muted-foreground text-background\";\n case \"turn\":\n return \"bg-chart-4 text-background\";\n case \"generation\":\n return \"bg-foreground text-background\";\n case \"tool\":\n return \"bg-destructive text-background\";\n }\n}\n\nexport function observationUsageText(observation: TraceObservationItem): string {\n if (!isRecord(observation.output) || !isRecord(observation.output.usage)) {\n return \"\";\n }\n return formatUsageValue(observation.output.usage);\n}\n\nexport function turnUsageText(observations: TraceObservationItem[]): string {\n const totals = observations\n .map(observationUsageText)\n .filter((usage) => usage.length > 0)\n .join(\" + \");\n return totals;\n}\n\nfunction formatUsageValue(value: Record<string, unknown>): string {\n const input = typeof value.inputTokens === \"number\" ? value.inputTokens : 0;\n const output = typeof value.outputTokens === \"number\" ? value.outputTokens : 0;\n const total = typeof value.totalTokens === \"number\" ? value.totalTokens : input + output;\n if (total === 0) {\n return \"\";\n }\n return `${input} -> ${output} (Σ ${total})`;\n}\n","import type * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function Card({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n className={cn(\n \"rounded-xl border border-border/80 bg-card/95 text-card-foreground shadow-sm shadow-black/20\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div className={cn(\"grid gap-1.5 p-4\", className)} {...props} />;\n}\n\nexport function CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div className={cn(\"p-4 pt-0\", className)} {...props} />;\n}\n","\"use client\";\n\n// src/scroll-area.tsx\nimport * as React2 from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { clamp } from \"@radix-ui/number\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\n\n// src/use-state-machine.ts\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n return React.useReducer((state, event) => {\n const nextState = machine[state][event];\n return nextState ?? state;\n }, initialState);\n}\n\n// src/scroll-area.tsx\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar SCROLL_AREA_NAME = \"ScrollArea\";\nvar [createScrollAreaContext, createScrollAreaScope] = createContextScope(SCROLL_AREA_NAME);\nvar [ScrollAreaProvider, useScrollAreaContext] = createScrollAreaContext(SCROLL_AREA_NAME);\nvar ScrollArea = React2.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeScrollArea,\n type = \"hover\",\n dir,\n scrollHideDelay = 600,\n ...scrollAreaProps\n } = props;\n const [scrollArea, setScrollArea] = React2.useState(null);\n const [viewport, setViewport] = React2.useState(null);\n const [content, setContent] = React2.useState(null);\n const [scrollbarX, setScrollbarX] = React2.useState(null);\n const [scrollbarY, setScrollbarY] = React2.useState(null);\n const [cornerWidth, setCornerWidth] = React2.useState(0);\n const [cornerHeight, setCornerHeight] = React2.useState(0);\n const [scrollbarXEnabled, setScrollbarXEnabled] = React2.useState(false);\n const [scrollbarYEnabled, setScrollbarYEnabled] = React2.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, setScrollArea);\n const direction = useDirection(dir);\n return /* @__PURE__ */ jsx(\n ScrollAreaProvider,\n {\n scope: __scopeScrollArea,\n type,\n dir: direction,\n scrollHideDelay,\n scrollArea,\n viewport,\n onViewportChange: setViewport,\n content,\n onContentChange: setContent,\n scrollbarX,\n onScrollbarXChange: setScrollbarX,\n scrollbarXEnabled,\n onScrollbarXEnabledChange: setScrollbarXEnabled,\n scrollbarY,\n onScrollbarYChange: setScrollbarY,\n scrollbarYEnabled,\n onScrollbarYEnabledChange: setScrollbarYEnabled,\n onCornerWidthChange: setCornerWidth,\n onCornerHeightChange: setCornerHeight,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n dir: direction,\n ...scrollAreaProps,\n ref: composedRefs,\n style: {\n position: \"relative\",\n // Pass corner sizes as CSS vars to reduce re-renders of context consumers\n \"--radix-scroll-area-corner-width\": cornerWidth + \"px\",\n \"--radix-scroll-area-corner-height\": cornerHeight + \"px\",\n ...props.style\n }\n }\n )\n }\n );\n }\n);\nScrollArea.displayName = SCROLL_AREA_NAME;\nvar VIEWPORT_NAME = \"ScrollAreaViewport\";\nvar ScrollAreaViewport = React2.forwardRef(\n (props, forwardedRef) => {\n const { __scopeScrollArea, children, nonce, ...viewportProps } = props;\n const context = useScrollAreaContext(VIEWPORT_NAME, __scopeScrollArea);\n const ref = React2.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, context.onViewportChange);\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(ScrollAreaViewportStyle, { nonce }),\n /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-radix-scroll-area-viewport\": \"\",\n ...viewportProps,\n ref: composedRefs,\n style: {\n /**\n * We don't support `visible` because the intention is to have at least one scrollbar\n * if this component is used and `visible` will behave like `auto` in that case\n * https://developer.mozilla.org/en-US/docs/Web/CSS/overflow#description\n *\n * We don't handle `auto` because the intention is for the native implementation\n * to be hidden if using this component. We just want to ensure the node is scrollable\n * so could have used either `scroll` or `auto` here. We picked `scroll` to prevent\n * the browser from having to work out whether to render native scrollbars or not,\n * we tell it to with the intention of hiding them in CSS.\n */\n overflowX: context.scrollbarXEnabled ? \"scroll\" : \"hidden\",\n overflowY: context.scrollbarYEnabled ? \"scroll\" : \"hidden\",\n ...props.style\n },\n children: /* @__PURE__ */ jsx(\"div\", { ref: context.onContentChange, style: { minWidth: \"100%\", display: \"table\" }, children })\n }\n )\n ] });\n }\n);\nScrollAreaViewport.displayName = VIEWPORT_NAME;\nvar ScrollAreaViewportStyle = React2.memo(\n ({ nonce }) => {\n return /* @__PURE__ */ jsx(\n \"style\",\n {\n dangerouslySetInnerHTML: {\n __html: `[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}`\n },\n nonce\n }\n );\n },\n (prevProps, nextProps) => prevProps.nonce === nextProps.nonce\n);\nvar SCROLLBAR_NAME = \"ScrollAreaScrollbar\";\nvar ScrollAreaScrollbar = React2.forwardRef(\n (props, forwardedRef) => {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const { onScrollbarXEnabledChange, onScrollbarYEnabledChange } = context;\n const isHorizontal = props.orientation === \"horizontal\";\n React2.useEffect(() => {\n isHorizontal ? onScrollbarXEnabledChange(true) : onScrollbarYEnabledChange(true);\n return () => {\n isHorizontal ? onScrollbarXEnabledChange(false) : onScrollbarYEnabledChange(false);\n };\n }, [isHorizontal, onScrollbarXEnabledChange, onScrollbarYEnabledChange]);\n return context.type === \"hover\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarHover, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === \"scroll\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarScroll, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === \"auto\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarAuto, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === \"always\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarVisible, { ...scrollbarProps, ref: forwardedRef, \"data-state\": \"visible\" }) : null;\n }\n);\nScrollAreaScrollbar.displayName = SCROLLBAR_NAME;\nvar ScrollAreaScrollbarHover = React2.forwardRef((props, forwardedRef) => {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [visible, setVisible] = React2.useState(false);\n React2.useEffect(() => {\n const scrollArea = context.scrollArea;\n let hideTimer = 0;\n if (scrollArea) {\n const handlePointerEnter = () => {\n window.clearTimeout(hideTimer);\n setVisible(true);\n };\n const handlePointerLeave = () => {\n hideTimer = window.setTimeout(() => setVisible(false), context.scrollHideDelay);\n };\n scrollArea.addEventListener(\"pointerenter\", handlePointerEnter);\n scrollArea.addEventListener(\"pointerleave\", handlePointerLeave);\n return () => {\n window.clearTimeout(hideTimer);\n scrollArea.removeEventListener(\"pointerenter\", handlePointerEnter);\n scrollArea.removeEventListener(\"pointerleave\", handlePointerLeave);\n };\n }\n }, [context.scrollArea, context.scrollHideDelay]);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || visible, children: /* @__PURE__ */ jsx(\n ScrollAreaScrollbarAuto,\n {\n \"data-state\": visible ? \"visible\" : \"hidden\",\n ...scrollbarProps,\n ref: forwardedRef\n }\n ) });\n});\nvar ScrollAreaScrollbarScroll = React2.forwardRef((props, forwardedRef) => {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const isHorizontal = props.orientation === \"horizontal\";\n const debounceScrollEnd = useDebounceCallback(() => send(\"SCROLL_END\"), 100);\n const [state, send] = useStateMachine(\"hidden\", {\n hidden: {\n SCROLL: \"scrolling\"\n },\n scrolling: {\n SCROLL_END: \"idle\",\n POINTER_ENTER: \"interacting\"\n },\n interacting: {\n SCROLL: \"interacting\",\n POINTER_LEAVE: \"idle\"\n },\n idle: {\n HIDE: \"hidden\",\n SCROLL: \"scrolling\",\n POINTER_ENTER: \"interacting\"\n }\n });\n React2.useEffect(() => {\n if (state === \"idle\") {\n const hideTimer = window.setTimeout(() => send(\"HIDE\"), context.scrollHideDelay);\n return () => window.clearTimeout(hideTimer);\n }\n }, [state, context.scrollHideDelay, send]);\n React2.useEffect(() => {\n const viewport = context.viewport;\n const scrollDirection = isHorizontal ? \"scrollLeft\" : \"scrollTop\";\n if (viewport) {\n let prevScrollPos = viewport[scrollDirection];\n const handleScroll = () => {\n const scrollPos = viewport[scrollDirection];\n const hasScrollInDirectionChanged = prevScrollPos !== scrollPos;\n if (hasScrollInDirectionChanged) {\n send(\"SCROLL\");\n debounceScrollEnd();\n }\n prevScrollPos = scrollPos;\n };\n viewport.addEventListener(\"scroll\", handleScroll);\n return () => viewport.removeEventListener(\"scroll\", handleScroll);\n }\n }, [context.viewport, isHorizontal, send, debounceScrollEnd]);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || state !== \"hidden\", children: /* @__PURE__ */ jsx(\n ScrollAreaScrollbarVisible,\n {\n \"data-state\": state === \"hidden\" ? \"hidden\" : \"visible\",\n ...scrollbarProps,\n ref: forwardedRef,\n onPointerEnter: composeEventHandlers(props.onPointerEnter, () => send(\"POINTER_ENTER\")),\n onPointerLeave: composeEventHandlers(props.onPointerLeave, () => send(\"POINTER_LEAVE\"))\n }\n ) });\n});\nvar ScrollAreaScrollbarAuto = React2.forwardRef((props, forwardedRef) => {\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const { forceMount, ...scrollbarProps } = props;\n const [visible, setVisible] = React2.useState(false);\n const isHorizontal = props.orientation === \"horizontal\";\n const handleResize = useDebounceCallback(() => {\n if (context.viewport) {\n const isOverflowX = context.viewport.offsetWidth < context.viewport.scrollWidth;\n const isOverflowY = context.viewport.offsetHeight < context.viewport.scrollHeight;\n setVisible(isHorizontal ? isOverflowX : isOverflowY);\n }\n }, 10);\n useResizeObserver(context.viewport, handleResize);\n useResizeObserver(context.content, handleResize);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || visible, children: /* @__PURE__ */ jsx(\n ScrollAreaScrollbarVisible,\n {\n \"data-state\": visible ? \"visible\" : \"hidden\",\n ...scrollbarProps,\n ref: forwardedRef\n }\n ) });\n});\nvar ScrollAreaScrollbarVisible = React2.forwardRef((props, forwardedRef) => {\n const { orientation = \"vertical\", ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const thumbRef = React2.useRef(null);\n const pointerOffsetRef = React2.useRef(0);\n const [sizes, setSizes] = React2.useState({\n content: 0,\n viewport: 0,\n scrollbar: { size: 0, paddingStart: 0, paddingEnd: 0 }\n });\n const thumbRatio = getThumbRatio(sizes.viewport, sizes.content);\n const commonProps = {\n ...scrollbarProps,\n sizes,\n onSizesChange: setSizes,\n hasThumb: Boolean(thumbRatio > 0 && thumbRatio < 1),\n onThumbChange: (thumb) => thumbRef.current = thumb,\n onThumbPointerUp: () => pointerOffsetRef.current = 0,\n onThumbPointerDown: (pointerPos) => pointerOffsetRef.current = pointerPos\n };\n function getScrollPosition(pointerPos, dir) {\n return getScrollPositionFromPointer(pointerPos, pointerOffsetRef.current, sizes, dir);\n }\n if (orientation === \"horizontal\") {\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarX,\n {\n ...commonProps,\n ref: forwardedRef,\n onThumbPositionChange: () => {\n if (context.viewport && thumbRef.current) {\n const scrollPos = context.viewport.scrollLeft;\n const offset = getThumbOffsetFromScroll(scrollPos, sizes, context.dir);\n thumbRef.current.style.transform = `translate3d(${offset}px, 0, 0)`;\n }\n },\n onWheelScroll: (scrollPos) => {\n if (context.viewport) context.viewport.scrollLeft = scrollPos;\n },\n onDragScroll: (pointerPos) => {\n if (context.viewport) {\n context.viewport.scrollLeft = getScrollPosition(pointerPos, context.dir);\n }\n }\n }\n );\n }\n if (orientation === \"vertical\") {\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarY,\n {\n ...commonProps,\n ref: forwardedRef,\n onThumbPositionChange: () => {\n if (context.viewport && thumbRef.current) {\n const scrollPos = context.viewport.scrollTop;\n const offset = getThumbOffsetFromScroll(scrollPos, sizes);\n thumbRef.current.style.transform = `translate3d(0, ${offset}px, 0)`;\n }\n },\n onWheelScroll: (scrollPos) => {\n if (context.viewport) context.viewport.scrollTop = scrollPos;\n },\n onDragScroll: (pointerPos) => {\n if (context.viewport) context.viewport.scrollTop = getScrollPosition(pointerPos);\n }\n }\n );\n }\n return null;\n});\nvar ScrollAreaScrollbarX = React2.forwardRef((props, forwardedRef) => {\n const { sizes, onSizesChange, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [computedStyle, setComputedStyle] = React2.useState();\n const ref = React2.useRef(null);\n const composeRefs = useComposedRefs(forwardedRef, ref, context.onScrollbarXChange);\n React2.useEffect(() => {\n if (ref.current) setComputedStyle(getComputedStyle(ref.current));\n }, [ref]);\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarImpl,\n {\n \"data-orientation\": \"horizontal\",\n ...scrollbarProps,\n ref: composeRefs,\n sizes,\n style: {\n bottom: 0,\n left: context.dir === \"rtl\" ? \"var(--radix-scroll-area-corner-width)\" : 0,\n right: context.dir === \"ltr\" ? \"var(--radix-scroll-area-corner-width)\" : 0,\n \"--radix-scroll-area-thumb-width\": getThumbSize(sizes) + \"px\",\n ...props.style\n },\n onThumbPointerDown: (pointerPos) => props.onThumbPointerDown(pointerPos.x),\n onDragScroll: (pointerPos) => props.onDragScroll(pointerPos.x),\n onWheelScroll: (event, maxScrollPos) => {\n if (context.viewport) {\n const scrollPos = context.viewport.scrollLeft + event.deltaX;\n props.onWheelScroll(scrollPos);\n if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos)) {\n event.preventDefault();\n }\n }\n },\n onResize: () => {\n if (ref.current && context.viewport && computedStyle) {\n onSizesChange({\n content: context.viewport.scrollWidth,\n viewport: context.viewport.offsetWidth,\n scrollbar: {\n size: ref.current.clientWidth,\n paddingStart: toInt(computedStyle.paddingLeft),\n paddingEnd: toInt(computedStyle.paddingRight)\n }\n });\n }\n }\n }\n );\n});\nvar ScrollAreaScrollbarY = React2.forwardRef((props, forwardedRef) => {\n const { sizes, onSizesChange, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [computedStyle, setComputedStyle] = React2.useState();\n const ref = React2.useRef(null);\n const composeRefs = useComposedRefs(forwardedRef, ref, context.onScrollbarYChange);\n React2.useEffect(() => {\n if (ref.current) setComputedStyle(getComputedStyle(ref.current));\n }, [ref]);\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarImpl,\n {\n \"data-orientation\": \"vertical\",\n ...scrollbarProps,\n ref: composeRefs,\n sizes,\n style: {\n top: 0,\n right: context.dir === \"ltr\" ? 0 : void 0,\n left: context.dir === \"rtl\" ? 0 : void 0,\n bottom: \"var(--radix-scroll-area-corner-height)\",\n \"--radix-scroll-area-thumb-height\": getThumbSize(sizes) + \"px\",\n ...props.style\n },\n onThumbPointerDown: (pointerPos) => props.onThumbPointerDown(pointerPos.y),\n onDragScroll: (pointerPos) => props.onDragScroll(pointerPos.y),\n onWheelScroll: (event, maxScrollPos) => {\n if (context.viewport) {\n const scrollPos = context.viewport.scrollTop + event.deltaY;\n props.onWheelScroll(scrollPos);\n if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos)) {\n event.preventDefault();\n }\n }\n },\n onResize: () => {\n if (ref.current && context.viewport && computedStyle) {\n onSizesChange({\n content: context.viewport.scrollHeight,\n viewport: context.viewport.offsetHeight,\n scrollbar: {\n size: ref.current.clientHeight,\n paddingStart: toInt(computedStyle.paddingTop),\n paddingEnd: toInt(computedStyle.paddingBottom)\n }\n });\n }\n }\n }\n );\n});\nvar [ScrollbarProvider, useScrollbarContext] = createScrollAreaContext(SCROLLBAR_NAME);\nvar ScrollAreaScrollbarImpl = React2.forwardRef((props, forwardedRef) => {\n const {\n __scopeScrollArea,\n sizes,\n hasThumb,\n onThumbChange,\n onThumbPointerUp,\n onThumbPointerDown,\n onThumbPositionChange,\n onDragScroll,\n onWheelScroll,\n onResize,\n ...scrollbarProps\n } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, __scopeScrollArea);\n const [scrollbar, setScrollbar] = React2.useState(null);\n const composeRefs = useComposedRefs(forwardedRef, setScrollbar);\n const rectRef = React2.useRef(null);\n const prevWebkitUserSelectRef = React2.useRef(\"\");\n const viewport = context.viewport;\n const maxScrollPos = sizes.content - sizes.viewport;\n const handleWheelScroll = useCallbackRef(onWheelScroll);\n const handleThumbPositionChange = useCallbackRef(onThumbPositionChange);\n const handleResize = useDebounceCallback(onResize, 10);\n function handleDragScroll(event) {\n if (rectRef.current) {\n const x = event.clientX - rectRef.current.left;\n const y = event.clientY - rectRef.current.top;\n onDragScroll({ x, y });\n }\n }\n React2.useEffect(() => {\n const handleWheel = (event) => {\n const element = event.target;\n const isScrollbarWheel = scrollbar?.contains(element);\n if (isScrollbarWheel) handleWheelScroll(event, maxScrollPos);\n };\n document.addEventListener(\"wheel\", handleWheel, { passive: false });\n return () => document.removeEventListener(\"wheel\", handleWheel, { passive: false });\n }, [viewport, scrollbar, maxScrollPos, handleWheelScroll]);\n React2.useEffect(handleThumbPositionChange, [sizes, handleThumbPositionChange]);\n useResizeObserver(scrollbar, handleResize);\n useResizeObserver(context.content, handleResize);\n return /* @__PURE__ */ jsx(\n ScrollbarProvider,\n {\n scope: __scopeScrollArea,\n scrollbar,\n hasThumb,\n onThumbChange: useCallbackRef(onThumbChange),\n onThumbPointerUp: useCallbackRef(onThumbPointerUp),\n onThumbPositionChange: handleThumbPositionChange,\n onThumbPointerDown: useCallbackRef(onThumbPointerDown),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...scrollbarProps,\n ref: composeRefs,\n style: { position: \"absolute\", ...scrollbarProps.style },\n onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {\n const mainPointer = 0;\n if (event.button === mainPointer) {\n const element = event.target;\n element.setPointerCapture(event.pointerId);\n rectRef.current = scrollbar.getBoundingClientRect();\n prevWebkitUserSelectRef.current = document.body.style.webkitUserSelect;\n document.body.style.webkitUserSelect = \"none\";\n if (context.viewport) context.viewport.style.scrollBehavior = \"auto\";\n handleDragScroll(event);\n }\n }),\n onPointerMove: composeEventHandlers(props.onPointerMove, handleDragScroll),\n onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {\n const element = event.target;\n if (element.hasPointerCapture(event.pointerId)) {\n element.releasePointerCapture(event.pointerId);\n }\n document.body.style.webkitUserSelect = prevWebkitUserSelectRef.current;\n if (context.viewport) context.viewport.style.scrollBehavior = \"\";\n rectRef.current = null;\n })\n }\n )\n }\n );\n});\nvar THUMB_NAME = \"ScrollAreaThumb\";\nvar ScrollAreaThumb = React2.forwardRef(\n (props, forwardedRef) => {\n const { forceMount, ...thumbProps } = props;\n const scrollbarContext = useScrollbarContext(THUMB_NAME, props.__scopeScrollArea);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || scrollbarContext.hasThumb, children: /* @__PURE__ */ jsx(ScrollAreaThumbImpl, { ref: forwardedRef, ...thumbProps }) });\n }\n);\nvar ScrollAreaThumbImpl = React2.forwardRef(\n (props, forwardedRef) => {\n const { __scopeScrollArea, style, ...thumbProps } = props;\n const scrollAreaContext = useScrollAreaContext(THUMB_NAME, __scopeScrollArea);\n const scrollbarContext = useScrollbarContext(THUMB_NAME, __scopeScrollArea);\n const { onThumbPositionChange } = scrollbarContext;\n const composedRef = useComposedRefs(forwardedRef, scrollbarContext.onThumbChange);\n const removeUnlinkedScrollListenerRef = React2.useRef(void 0);\n const debounceScrollEnd = useDebounceCallback(() => {\n if (removeUnlinkedScrollListenerRef.current) {\n removeUnlinkedScrollListenerRef.current();\n removeUnlinkedScrollListenerRef.current = void 0;\n }\n }, 100);\n React2.useEffect(() => {\n const viewport = scrollAreaContext.viewport;\n if (viewport) {\n const handleScroll = () => {\n debounceScrollEnd();\n if (!removeUnlinkedScrollListenerRef.current) {\n const listener = addUnlinkedScrollListener(viewport, onThumbPositionChange);\n removeUnlinkedScrollListenerRef.current = listener;\n onThumbPositionChange();\n }\n };\n onThumbPositionChange();\n viewport.addEventListener(\"scroll\", handleScroll);\n return () => viewport.removeEventListener(\"scroll\", handleScroll);\n }\n }, [scrollAreaContext.viewport, debounceScrollEnd, onThumbPositionChange]);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": scrollbarContext.hasThumb ? \"visible\" : \"hidden\",\n ...thumbProps,\n ref: composedRef,\n style: {\n width: \"var(--radix-scroll-area-thumb-width)\",\n height: \"var(--radix-scroll-area-thumb-height)\",\n ...style\n },\n onPointerDownCapture: composeEventHandlers(props.onPointerDownCapture, (event) => {\n const thumb = event.target;\n const thumbRect = thumb.getBoundingClientRect();\n const x = event.clientX - thumbRect.left;\n const y = event.clientY - thumbRect.top;\n scrollbarContext.onThumbPointerDown({ x, y });\n }),\n onPointerUp: composeEventHandlers(props.onPointerUp, scrollbarContext.onThumbPointerUp)\n }\n );\n }\n);\nScrollAreaThumb.displayName = THUMB_NAME;\nvar CORNER_NAME = \"ScrollAreaCorner\";\nvar ScrollAreaCorner = React2.forwardRef(\n (props, forwardedRef) => {\n const context = useScrollAreaContext(CORNER_NAME, props.__scopeScrollArea);\n const hasBothScrollbarsVisible = Boolean(context.scrollbarX && context.scrollbarY);\n const hasCorner = context.type !== \"scroll\" && hasBothScrollbarsVisible;\n return hasCorner ? /* @__PURE__ */ jsx(ScrollAreaCornerImpl, { ...props, ref: forwardedRef }) : null;\n }\n);\nScrollAreaCorner.displayName = CORNER_NAME;\nvar ScrollAreaCornerImpl = React2.forwardRef((props, forwardedRef) => {\n const { __scopeScrollArea, ...cornerProps } = props;\n const context = useScrollAreaContext(CORNER_NAME, __scopeScrollArea);\n const [width, setWidth] = React2.useState(0);\n const [height, setHeight] = React2.useState(0);\n const hasSize = Boolean(width && height);\n useResizeObserver(context.scrollbarX, () => {\n const height2 = context.scrollbarX?.offsetHeight || 0;\n context.onCornerHeightChange(height2);\n setHeight(height2);\n });\n useResizeObserver(context.scrollbarY, () => {\n const width2 = context.scrollbarY?.offsetWidth || 0;\n context.onCornerWidthChange(width2);\n setWidth(width2);\n });\n return hasSize ? /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...cornerProps,\n ref: forwardedRef,\n style: {\n width,\n height,\n position: \"absolute\",\n right: context.dir === \"ltr\" ? 0 : void 0,\n left: context.dir === \"rtl\" ? 0 : void 0,\n bottom: 0,\n ...props.style\n }\n }\n ) : null;\n});\nfunction toInt(value) {\n return value ? parseInt(value, 10) : 0;\n}\nfunction getThumbRatio(viewportSize, contentSize) {\n const ratio = viewportSize / contentSize;\n return isNaN(ratio) ? 0 : ratio;\n}\nfunction getThumbSize(sizes) {\n const ratio = getThumbRatio(sizes.viewport, sizes.content);\n const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;\n const thumbSize = (sizes.scrollbar.size - scrollbarPadding) * ratio;\n return Math.max(thumbSize, 18);\n}\nfunction getScrollPositionFromPointer(pointerPos, pointerOffset, sizes, dir = \"ltr\") {\n const thumbSizePx = getThumbSize(sizes);\n const thumbCenter = thumbSizePx / 2;\n const offset = pointerOffset || thumbCenter;\n const thumbOffsetFromEnd = thumbSizePx - offset;\n const minPointerPos = sizes.scrollbar.paddingStart + offset;\n const maxPointerPos = sizes.scrollbar.size - sizes.scrollbar.paddingEnd - thumbOffsetFromEnd;\n const maxScrollPos = sizes.content - sizes.viewport;\n const scrollRange = dir === \"ltr\" ? [0, maxScrollPos] : [maxScrollPos * -1, 0];\n const interpolate = linearScale([minPointerPos, maxPointerPos], scrollRange);\n return interpolate(pointerPos);\n}\nfunction getThumbOffsetFromScroll(scrollPos, sizes, dir = \"ltr\") {\n const thumbSizePx = getThumbSize(sizes);\n const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;\n const scrollbar = sizes.scrollbar.size - scrollbarPadding;\n const maxScrollPos = sizes.content - sizes.viewport;\n const maxThumbPos = scrollbar - thumbSizePx;\n const scrollClampRange = dir === \"ltr\" ? [0, maxScrollPos] : [maxScrollPos * -1, 0];\n const scrollWithoutMomentum = clamp(scrollPos, scrollClampRange);\n const interpolate = linearScale([0, maxScrollPos], [0, maxThumbPos]);\n return interpolate(scrollWithoutMomentum);\n}\nfunction linearScale(input, output) {\n return (value) => {\n if (input[0] === input[1] || output[0] === output[1]) return output[0];\n const ratio = (output[1] - output[0]) / (input[1] - input[0]);\n return output[0] + ratio * (value - input[0]);\n };\n}\nfunction isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos) {\n return scrollPos > 0 && scrollPos < maxScrollPos;\n}\nvar addUnlinkedScrollListener = (node, handler = () => {\n}) => {\n let prevPosition = { left: node.scrollLeft, top: node.scrollTop };\n let rAF = 0;\n (function loop() {\n const position = { left: node.scrollLeft, top: node.scrollTop };\n const isHorizontalScroll = prevPosition.left !== position.left;\n const isVerticalScroll = prevPosition.top !== position.top;\n if (isHorizontalScroll || isVerticalScroll) handler();\n prevPosition = position;\n rAF = window.requestAnimationFrame(loop);\n })();\n return () => window.cancelAnimationFrame(rAF);\n};\nfunction useDebounceCallback(callback, delay) {\n const handleCallback = useCallbackRef(callback);\n const debounceTimerRef = React2.useRef(0);\n React2.useEffect(() => () => window.clearTimeout(debounceTimerRef.current), []);\n return React2.useCallback(() => {\n window.clearTimeout(debounceTimerRef.current);\n debounceTimerRef.current = window.setTimeout(handleCallback, delay);\n }, [handleCallback, delay]);\n}\nfunction useResizeObserver(element, onResize) {\n const handleResize = useCallbackRef(onResize);\n useLayoutEffect(() => {\n let rAF = 0;\n if (element) {\n const resizeObserver = new ResizeObserver(() => {\n cancelAnimationFrame(rAF);\n rAF = window.requestAnimationFrame(handleResize);\n });\n resizeObserver.observe(element);\n return () => {\n window.cancelAnimationFrame(rAF);\n resizeObserver.unobserve(element);\n };\n }\n }, [element, handleResize]);\n}\nvar Root = ScrollArea;\nvar Viewport = ScrollAreaViewport;\nvar Scrollbar = ScrollAreaScrollbar;\nvar Thumb = ScrollAreaThumb;\nvar Corner = ScrollAreaCorner;\nexport {\n Corner,\n Root,\n ScrollArea,\n ScrollAreaCorner,\n ScrollAreaScrollbar,\n ScrollAreaThumb,\n ScrollAreaViewport,\n Scrollbar,\n Thumb,\n Viewport,\n createScrollAreaScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\";\nimport type * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root className={cn(\"relative overflow-hidden\", className)} {...props}>\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n );\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n orientation={orientation}\n className={cn(\n \"flex touch-none select-none transition-colors\",\n orientation === \"vertical\" && \"h-full w-2.5 border-l border-l-transparent p-px\",\n orientation === \"horizontal\" && \"h-2.5 flex-col border-t border-t-transparent p-px\",\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-lg bg-muted-foreground/40\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n );\n}\n","import { ArrowLeft02Icon } from \"@hugeicons/core-free-icons\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport {\n firstDeltaMsFromObservations,\n isNeutralTraceRow,\n observationUsageText,\n plainTraceValue,\n selectedTraceDetail,\n statusDotClass,\n TraceJsonTree,\n type TraceObservationNode,\n TraceRowIcon,\n TraceToneIcon,\n traceObservationLabel,\n traceObservationTree,\n traceToneIconClass,\n traceTurns,\n} from \"./trace-browser-detail\";\n\nexport {\n compactTraceMetadata,\n firstDeltaMsFromObservations,\n jsonSyntaxTokens,\n observationDetailMetadata,\n observationStatusSummary,\n observationUsageText,\n plainTraceValue,\n rawTraceJson,\n selectedTraceDetail,\n traceDetailMetadata,\n traceObservationLabel,\n traceObservationTree,\n traceTurns,\n turnUsageText,\n} from \"./trace-browser-detail\";\n\nimport type { StudioConfig, StudioTrace } from \"../../../../types\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport { Card } from \"../../components/ui/card\";\nimport { StudioIcon } from \"../../components/ui/icon\";\nimport { ScrollArea } from \"../../components/ui/scroll-area\";\nimport { cn } from \"../../lib/utils\";\nimport { emptyFallback, formatDuration, formatTraceDate, traceAgentLabel } from \"../shared/format\";\nimport type { TraceInspectorKey, TraceLoadState, TraceObservationItem } from \"../shared/types\";\n\nexport function TraceBrowser(props: {\n agents: StudioConfig[\"agents\"];\n traces: StudioTrace[];\n tracesEnabled: boolean;\n traceLoadState: TraceLoadState;\n selectedTraceId: string;\n traceSessionDetailId: string | undefined;\n onRefresh: () => void;\n onSelectTrace: (traceId: string) => void;\n onShowSessionTraces: (sessionId: string) => void;\n}) {\n if (!props.tracesEnabled) {\n return (\n <div className=\"w-full rounded-lg border border-dashed border-border p-8 text-sm font-medium text-muted-foreground\">\n Tracing is disabled\n </div>\n );\n }\n\n const selectedTrace =\n props.selectedTraceId.length === 0\n ? undefined\n : props.traces.find((trace) => trace.id === props.selectedTraceId);\n const selectedSessionTraces =\n selectedTrace === undefined || props.traceSessionDetailId !== selectedTrace.sessionId\n ? []\n : props.traces.filter((trace) => trace.sessionId === selectedTrace.sessionId);\n\n return (\n <section\n className=\"grid h-full min-h-0 w-full content-stretch pb-6 pl-0 pr-6\"\n aria-label=\"Tracing\"\n >\n {props.selectedTraceId.length === 0 ? (\n <TraceTable\n agents={props.agents}\n traces={props.traces}\n traceLoadState={props.traceLoadState}\n onSelectTrace={props.onSelectTrace}\n />\n ) : (\n <TraceDetailRoute\n selectedTrace={selectedTrace}\n selectedSessionTraces={selectedSessionTraces}\n selectedTraceId={props.selectedTraceId}\n traceLoadState={props.traceLoadState}\n onBack={() => props.onSelectTrace(\"\")}\n onShowSessionTraces={props.onShowSessionTraces}\n />\n )}\n </section>\n );\n}\n\nfunction TraceTable(props: {\n agents: StudioConfig[\"agents\"];\n traces: StudioTrace[];\n traceLoadState: TraceLoadState;\n onSelectTrace: (traceId: string) => void;\n}) {\n return (\n <Card\n className=\"min-h-0 overflow-hidden rounded-xl border-border/80 bg-card/80\"\n aria-label=\"Traces\"\n >\n <ScrollArea className=\"h-full min-h-0\">\n <div className=\"grid min-w-280 gap-1 p-2\">\n <div className=\"sticky top-0 z-10 grid min-h-11 grid-cols-[minmax(220px,1.3fr)_150px_120px_120px_120px_120px_110px_90px] items-center gap-4 rounded-lg border border-border/60 bg-card/95 px-4 text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground backdrop-blur\">\n <span>Trace</span>\n <span>Session</span>\n <span>Agent</span>\n <span>Status</span>\n <span>Started</span>\n <span>Duration</span>\n <span>First delta</span>\n <span>Events</span>\n </div>\n {props.traceLoadState === \"loading\" && props.traces.length === 0 ? (\n <div className=\"px-5 py-4 text-sm font-medium text-muted-foreground\">\n Loading traces\n </div>\n ) : null}\n {props.traceLoadState === \"idle\" && props.traces.length === 0 ? (\n <div className=\"px-5 py-4 text-sm font-medium text-muted-foreground\">\n No traces found\n </div>\n ) : null}\n {props.traces.map((trace) => (\n <Button\n className=\"grid h-auto min-h-14 w-full grid-cols-[minmax(220px,1.3fr)_150px_120px_120px_120px_120px_110px_90px] items-center justify-start gap-4 whitespace-normal rounded-lg border border-transparent bg-transparent px-4 py-2.5 text-left text-muted-foreground shadow-none transition duration-200 hover:border-border/70 hover:bg-accent/70 hover:text-accent-foreground\"\n type=\"button\"\n variant=\"ghost\"\n key={trace.id}\n onClick={() => props.onSelectTrace(trace.id)}\n >\n <span className=\"min-w-0 truncate text-xs font-medium text-muted-foreground\">\n {trace.id}\n </span>\n <span className=\"min-w-0 truncate text-xs font-medium\">{trace.sessionId}</span>\n <span className=\"min-w-0 truncate text-xs font-medium\">\n {traceAgentLabel(props.agents, trace)}\n </span>\n <span className=\"flex min-w-0 items-center gap-2 text-xs font-medium capitalize\">\n <span\n className={cn(\"h-2.5 w-2.5 shrink-0 rounded-lg\", statusDotClass(trace.status))}\n />\n <span className=\"min-w-0 truncate\">{trace.status}</span>\n </span>\n <span className=\"min-w-0 truncate text-xs font-medium\">\n {formatTraceDate(trace.startedAt)}\n </span>\n <span className=\"min-w-0 truncate text-xs font-medium\">\n {emptyFallback(formatDuration(trace.durationMs))}\n </span>\n <span className=\"min-w-0 truncate text-xs font-medium\">\n {emptyFallback(formatDuration(firstDeltaMsFromObservations(trace.observations)))}\n </span>\n <span className=\"min-w-0 truncate text-xs font-medium tabular-nums\">\n {trace.observationCount}\n </span>\n </Button>\n ))}\n </div>\n </ScrollArea>\n </Card>\n );\n}\n\nfunction TraceDetailRoute(props: {\n selectedTrace: StudioTrace | undefined;\n selectedSessionTraces: StudioTrace[];\n selectedTraceId: string;\n traceLoadState: TraceLoadState;\n onBack: () => void;\n onShowSessionTraces: (sessionId: string) => void;\n}) {\n return (\n <div className=\"grid h-full min-h-0 min-w-0 grid-rows-[auto_minmax(0,1fr)] gap-2 overflow-hidden rounded-xl border border-border/80 bg-card/70 p-2 shadow-sm\">\n <header className=\"grid min-h-16 grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-3 overflow-hidden rounded-lg border border-border/60 bg-card/95 px-4 py-3\">\n <Button\n aria-label=\"Back to traces\"\n className=\"h-8 min-h-8 w-8 text-muted-foreground hover:text-foreground\"\n size=\"icon\"\n type=\"button\"\n variant=\"ghost\"\n onClick={props.onBack}\n >\n <StudioIcon icon={ArrowLeft02Icon} aria-hidden=\"true\" />\n </Button>\n <div className=\"grid min-w-0 gap-1\">\n <strong className=\"min-w-0 truncate text-sm font-semibold text-foreground\">\n {props.selectedTrace?.name ?? \"Trace detail\"}\n </strong>\n <span className=\"flex min-w-0 items-center gap-2 overflow-hidden text-xs font-medium text-muted-foreground\">\n {props.selectedTrace === undefined ? (\n props.traceLoadState === \"loading\" ? (\n \"Loading trace\"\n ) : (\n \"Trace not found\"\n )\n ) : (\n <>\n <span\n className={cn(\n \"h-2 w-2 shrink-0 rounded-lg\",\n statusDotClass(props.selectedTrace.status),\n )}\n />\n <span className=\"shrink-0 capitalize\">{props.selectedTrace.status}</span>\n <span className=\"shrink-0\" aria-hidden=\"true\">\n /\n </span>\n <span className=\"min-w-0 flex-1 truncate\">\n Session <span className=\" font-semibold\">{props.selectedTrace.sessionId}</span>\n </span>\n </>\n )}\n </span>\n </div>\n <span className=\"hidden max-w-[42vw] truncate rounded-lg bg-muted px-2 py-1 text-xs font-medium text-muted-foreground md:block\">\n {props.selectedTraceId}\n </span>\n </header>\n <div className=\"min-h-0 min-w-0 overflow-hidden\">\n {props.selectedTrace === undefined ? (\n <Card className=\"grid h-full place-items-center rounded-lg border-border bg-card p-6 text-sm font-medium text-muted-foreground\">\n {props.traceLoadState === \"loading\" ? \"Loading trace\" : \"Trace not found\"}\n </Card>\n ) : (\n <TracePanel\n traces={\n props.selectedSessionTraces.length > 0\n ? props.selectedSessionTraces\n : [props.selectedTrace]\n }\n onShowSessionTraces={props.onShowSessionTraces}\n />\n )}\n </div>\n </div>\n );\n}\n\nfunction TracePanel(props: {\n traces: StudioTrace[];\n onShowSessionTraces: (sessionId: string) => void;\n}) {\n const orderedTraces = useMemo(\n () =>\n [...props.traces].sort(\n (left, right) => Date.parse(left.startedAt) - Date.parse(right.startedAt),\n ),\n [props.traces],\n );\n const firstTraceId = orderedTraces[0]?.id ?? \"\";\n const [activeTraceId, setActiveTraceId] = useState(firstTraceId);\n const [activeKey, setActiveKey] = useState<TraceInspectorKey>(\"trace\");\n useEffect(() => {\n setActiveTraceId(firstTraceId);\n setActiveKey(\"trace\");\n }, [firstTraceId]);\n\n const activeTrace = orderedTraces.find((trace) => trace.id === activeTraceId) ?? orderedTraces[0];\n const turns = activeTrace === undefined ? [] : traceTurns(activeTrace);\n const selectTimelineItem = (traceId: string, key: TraceInspectorKey) => {\n setActiveTraceId(traceId);\n setActiveKey(key);\n };\n\n if (activeTrace === undefined) {\n return (\n <section\n className=\"grid h-full min-h-0 w-full place-items-center text-sm font-medium text-muted-foreground\"\n aria-label=\"Traces\"\n >\n No trace selected\n </section>\n );\n }\n\n return (\n <section\n className=\"grid h-full min-h-0 w-full content-stretch overflow-hidden\"\n aria-label=\"Traces\"\n >\n <div className=\"grid h-full min-h-0 grid-cols-[320px_minmax(0,1fr)] overflow-hidden max-md:grid-cols-1\">\n <nav\n className=\"grid min-h-0 auto-rows-min content-start overflow-auto border-r border-border/80 bg-card/35 pr-2 max-md:max-h-80 max-md:border-b max-md:border-r-0\"\n aria-label=\"Trace timeline\"\n >\n <div className=\"sticky top-0 z-30 flex min-h-11 items-center justify-between bg-card/90 py-0 pl-0 pr-5 text-xs font-medium text-muted-foreground backdrop-blur\">\n <span>Search</span>\n <strong className=\"text-foreground\">Timeline</strong>\n </div>\n {orderedTraces.map((trace) => {\n const traceActive = activeTrace.id === trace.id;\n const traceTurnItems = traceTurns(trace);\n return (\n <div className=\"contents\" key={trace.id}>\n <TraceTreeRow\n active={traceActive && activeKey === \"trace\"}\n ancestorLevels={[]}\n hasChildren={true}\n isLastSibling={true}\n level={0}\n tone=\"trace\"\n title={trace.name ?? \"Agent\"}\n subtitle={formatDuration(trace.durationMs)}\n onSelect={() => selectTimelineItem(trace.id, \"trace\")}\n />\n <TraceTreeRow\n active={traceActive && activeKey === \"agent\"}\n ancestorLevels={[]}\n hasChildren={traceTurnItems.length > 0}\n isLastSibling={true}\n level={1}\n tone=\"agent\"\n title=\"agent.run\"\n subtitle={formatDuration(trace.durationMs)}\n onSelect={() => selectTimelineItem(trace.id, \"agent\")}\n />\n {traceTurnItems.map((turn) => (\n <div className=\"contents\" key={`${trace.id}:turn:${turn.turn}`}>\n <TraceTreeRow\n active={traceActive && activeKey === `turn:${turn.turn}`}\n ancestorLevels={[]}\n hasChildren={turn.observations.length > 0}\n isLastSibling={turn.turn === traceTurnItems.at(-1)?.turn}\n level={2}\n tone=\"turn\"\n title={`turn.${turn.turn}`}\n subtitle={formatDuration(turn.durationMs)}\n onSelect={() => selectTimelineItem(trace.id, `turn:${turn.turn}`)}\n />\n <TraceObservationRows\n activeKey={activeKey}\n isLastTurn={turn.turn === traceTurnItems.at(-1)?.turn}\n observations={turn.observations}\n onSelect={(observationId) =>\n selectTimelineItem(trace.id, `observation:${observationId}`)\n }\n traceActive={traceActive}\n />\n </div>\n ))}\n </div>\n );\n })}\n </nav>\n <TraceDetailPane\n trace={activeTrace}\n turns={turns}\n activeKey={activeKey}\n onShowSessionTraces={props.onShowSessionTraces}\n />\n </div>\n </section>\n );\n}\n\nfunction TraceTreeRow(props: {\n active: boolean;\n ancestorLevels: number[];\n hasChildren: boolean;\n isLastSibling: boolean;\n level: number;\n tone: \"trace\" | \"agent\" | \"turn\" | StudioTrace[\"observations\"][number][\"kind\"];\n title: string;\n subtitle: string;\n onSelect: () => void;\n}) {\n const levelOffset = 22;\n const baseLeft = 12;\n const iconSize = 20;\n const iconCenter = baseLeft + iconSize / 2;\n const lineTop = 18;\n const xForLevel = (level: number) => iconCenter + level * levelOffset;\n\n return (\n <Button\n className={cn(\n \"relative grid h-auto min-h-0 w-full min-w-0 grid-cols-[20px_minmax(0,1fr)] items-start justify-start gap-2 whitespace-normal rounded-lg border-0 bg-transparent px-3 py-2.5 text-left text-muted-foreground shadow-none transition duration-200 hover:bg-accent/70 hover:text-accent-foreground\",\n props.active && \"bg-muted/45 text-foreground hover:bg-muted/45 hover:text-foreground\",\n )}\n type=\"button\"\n variant=\"ghost\"\n onClick={props.onSelect}\n style={{ paddingLeft: `${baseLeft + props.level * levelOffset}px` }}\n >\n {props.ancestorLevels.map((level) => (\n <span\n className=\"pointer-events-none absolute inset-y-0 w-px bg-muted-foreground/35\"\n style={{ left: `${xForLevel(level)}px` }}\n aria-hidden=\"true\"\n key={`ancestor-line-${level}`}\n />\n ))}\n {props.level > 0 ? (\n <>\n <span\n className=\"pointer-events-none absolute top-0 w-px bg-muted-foreground/35\"\n style={{\n left: `${xForLevel(props.level - 1)}px`,\n height: `${lineTop}px`,\n }}\n aria-hidden=\"true\"\n />\n {props.isLastSibling ? null : (\n <span\n className=\"pointer-events-none absolute bottom-0 w-px bg-muted-foreground/35\"\n style={{\n left: `${xForLevel(props.level - 1)}px`,\n top: `${lineTop}px`,\n }}\n aria-hidden=\"true\"\n />\n )}\n <span\n className=\"pointer-events-none absolute h-px bg-muted-foreground/35\"\n style={{\n left: `${xForLevel(props.level - 1)}px`,\n top: `${lineTop}px`,\n width: `${levelOffset}px`,\n }}\n aria-hidden=\"true\"\n />\n </>\n ) : null}\n {props.hasChildren ? (\n <span\n className=\"pointer-events-none absolute bottom-0 w-px bg-muted-foreground/35\"\n style={{\n left: `${xForLevel(props.level)}px`,\n top: `${lineTop}px`,\n }}\n aria-hidden=\"true\"\n />\n ) : null}\n <span\n className={cn(\n \"relative z-10 grid h-5 w-5 place-items-center rounded-lg bg-transparent [&_svg]:h-3 [&_svg]:w-3 [&_svg]:opacity-100\",\n traceToneIconClass(props.tone),\n )}\n >\n <TraceToneIcon tone={props.tone} />\n </span>\n <span className=\"grid min-w-0 gap-0.5\">\n <strong className=\"min-w-0 truncate text-sm font-medium leading-5 text-current\">\n {props.title}\n </strong>\n <span className=\"min-w-0 truncate text-xs font-medium text-muted-foreground\">\n {props.subtitle}\n </span>\n </span>\n </Button>\n );\n}\n\nfunction TraceObservationRows(props: {\n activeKey: TraceInspectorKey;\n isLastTurn: boolean;\n observations: TraceObservationItem[];\n traceActive: boolean;\n onSelect: (observationId: string) => void;\n}) {\n const roots = traceObservationTree(props.observations);\n return (\n <>\n {roots.map((node, index) => (\n <TraceObservationNodeRow\n activeKey={props.activeKey}\n ancestorLevels={props.isLastTurn ? [] : [1]}\n isLastSibling={index === roots.length - 1}\n key={node.observation.id}\n level={3}\n node={node}\n onSelect={props.onSelect}\n traceActive={props.traceActive}\n />\n ))}\n </>\n );\n}\n\nfunction TraceObservationNodeRow(props: {\n activeKey: TraceInspectorKey;\n ancestorLevels: number[];\n isLastSibling: boolean;\n level: number;\n node: TraceObservationNode;\n traceActive: boolean;\n onSelect: (observationId: string) => void;\n}) {\n const usageText = observationUsageText(props.node.observation);\n const childAncestorLevels = props.isLastSibling\n ? props.ancestorLevels\n : [...props.ancestorLevels, props.level];\n return (\n <>\n <TraceTreeRow\n active={props.traceActive && props.activeKey === `observation:${props.node.observation.id}`}\n ancestorLevels={props.ancestorLevels}\n hasChildren={props.node.children.length > 0}\n isLastSibling={props.isLastSibling}\n level={props.level}\n tone={props.node.observation.kind}\n title={traceObservationLabel(props.node.observation)}\n subtitle={\n usageText.length > 0\n ? `${formatDuration(props.node.observation.durationMs)} · ${usageText}`\n : formatDuration(props.node.observation.durationMs)\n }\n onSelect={() => props.onSelect(props.node.observation.id)}\n />\n {props.node.children.map((child, index) => (\n <TraceObservationNodeRow\n activeKey={props.activeKey}\n ancestorLevels={childAncestorLevels}\n isLastSibling={index === props.node.children.length - 1}\n key={child.observation.id}\n level={props.level + 1}\n node={child}\n onSelect={props.onSelect}\n traceActive={props.traceActive}\n />\n ))}\n </>\n );\n}\n\nfunction TraceDetailPane(props: {\n trace: StudioTrace;\n turns: Array<{ turn: number; observations: TraceObservationItem[]; durationMs?: number }>;\n activeKey: TraceInspectorKey;\n onShowSessionTraces: (sessionId: string) => void;\n}) {\n const selected = selectedTraceDetail(props.trace, props.turns, props.activeKey);\n return (\n <section\n className=\"grid min-h-0 grid-rows-[auto_minmax(0,1fr)] overflow-hidden bg-card/70\"\n aria-label=\"Trace detail\"\n >\n <header className=\"border-b border-border/60 bg-card/70 px-6 py-5\">\n <div className=\"grid min-w-0 gap-5\">\n <div className=\"flex min-w-0 items-start justify-between gap-4\">\n <div className=\"flex min-w-0 items-center gap-3\">\n <span\n className={cn(\n \"grid h-8 w-8 shrink-0 place-items-center rounded-lg bg-foreground text-background [&_svg]:h-4 [&_svg]:w-4 [&_svg]:opacity-100\",\n selected.tone !== \"trace\" && \"bg-muted text-foreground\",\n traceToneIconClass(selected.tone),\n )}\n >\n <TraceToneIcon tone={selected.tone} />\n </span>\n <div className=\"grid min-w-0 gap-1\">\n <h2 className=\"m-0 min-w-0 truncate text-2xl font-semibold leading-none tracking-[-0.01em] text-foreground\">\n {selected.title}\n </h2>\n <div className=\" text-xs font-medium text-muted-foreground\">\n {selected.startedAt}\n </div>\n </div>\n </div>\n </div>\n <div className=\"grid min-w-0 grid-cols-[repeat(auto-fit,minmax(150px,1fr))] gap-2\">\n <TraceMetric label=\"Duration\" value={formatDuration(selected.durationMs)} />\n {selected.firstDeltaMs === undefined ? null : (\n <TraceMetric label=\"First delta\" value={formatDuration(selected.firstDeltaMs)} />\n )}\n {selected.usage.length === 0 ? null : (\n <TraceMetric label=\"Usage\" value={selected.usage} />\n )}\n <button\n className=\"grid min-w-0 gap-1 rounded-lg bg-card/85 px-4 py-3 text-left transition duration-200 hover:bg-accent hover:text-accent-foreground\"\n type=\"button\"\n onClick={() => props.onShowSessionTraces(props.trace.sessionId)}\n >\n <span className=\" text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n Session\n </span>\n <span className=\"min-w-0 truncate text-sm font-semibold text-current\">\n {props.trace.sessionId}\n </span>\n </button>\n </div>\n </div>\n </header>\n <div className=\"min-w-0 overflow-auto\">\n <div className=\"grid min-w-0 content-start gap-6 p-6\">\n {selected.input === undefined ? null : (\n <TraceDataSection title=\"Input\" value={selected.input} />\n )}\n {selected.output === undefined ? null : (\n <TraceDataSection title=\"Output\" value={selected.output} tone=\"success\" />\n )}\n {selected.error === undefined ? null : (\n <TraceDataSection title=\"Error\" value={selected.error} tone=\"error\" />\n )}\n <TraceDataSection title=\"Metadata\" value={selected.metadata} rawJson />\n </div>\n </div>\n </section>\n );\n}\n\nfunction TraceMetric(props: { label: string; value: string }) {\n return (\n <div className=\"grid min-w-0 gap-1 rounded-lg bg-card/85 px-4 py-3\">\n <span className=\" text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n {props.label}\n </span>\n <span className=\"min-w-0 truncate text-sm font-semibold text-foreground\">{props.value}</span>\n </div>\n );\n}\n\nfunction TraceDataSection(props: {\n title: string;\n value: unknown;\n tone?: \"success\" | \"error\";\n compact?: boolean;\n rawJson?: boolean;\n}) {\n const rows = plainTraceValue(props.title, props.value);\n return (\n <section className=\"grid min-w-0 gap-3\">\n <div className=\"flex items-center gap-3\">\n <h3 className=\"m-0 text-lg font-semibold leading-tight text-foreground\">{props.title}</h3>\n <span className=\"h-px flex-1 bg-border/80\" aria-hidden=\"true\" />\n </div>\n {props.rawJson ? (\n <TraceJsonTree value={props.value} />\n ) : (\n <div className=\"grid min-w-0 gap-3\">\n {rows.map((item) => (\n <article\n className={cn(\n \"grid min-w-0 gap-3 rounded-lg bg-card/85 px-4 py-4\",\n props.compact &&\n \"grid-cols-[150px_minmax(0,1fr)] items-start gap-4 max-lg:grid-cols-1\",\n )}\n key={`${item.label}-${item.text}`}\n >\n <span className=\"flex min-w-0 items-center gap-2 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n <TraceRowIcon label={item.label} />\n {item.label}\n </span>\n <TraceRowContent compact={props.compact} item={item} tone={props.tone} />\n </article>\n ))}\n </div>\n )}\n </section>\n );\n}\n\nfunction TraceRowContent(props: {\n compact?: boolean | undefined;\n item: { label: string; text: string };\n tone?: \"success\" | \"error\" | undefined;\n}) {\n const historyItems = conversationHistoryItems(props.item);\n if (historyItems.length > 0) {\n return (\n <div className=\"grid min-w-0 gap-5\">\n {historyItems.map((item) => (\n <div className=\"grid min-w-0 gap-2\" key={`${item.index}-${item.role}-${item.text}`}>\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\" text-xs font-semibold tabular-nums text-muted-foreground\">\n {item.index}\n </span>\n <Badge\n className={cn(\n \"px-1.5 py-0.5\",\n item.role === \"User\" &&\n \"border-border/80 bg-muted-foreground/15 text-muted-foreground\",\n item.role === \"Assistant\" && \"border-border/80 bg-foreground/15 text-foreground\",\n item.role === \"Tool\" &&\n \"border-destructive/40 bg-destructive/15 text-destructive\",\n )}\n >\n {item.role}\n </Badge>\n </div>\n <p className=\"m-0 whitespace-pre-wrap text-sm leading-7 text-foreground [overflow-wrap:anywhere]\">\n {item.text}\n </p>\n </div>\n ))}\n </div>\n );\n }\n\n return (\n <p\n className={cn(\n \"m-0 whitespace-pre-wrap text-sm leading-7 text-foreground [overflow-wrap:anywhere]\",\n props.compact && \" text-sm leading-6\",\n props.tone === \"success\" && !isNeutralTraceRow(props.item) && \"text-foreground\",\n props.tone === \"error\" && \"text-destructive\",\n )}\n >\n {props.item.text}\n </p>\n );\n}\n\nfunction conversationHistoryItems(row: {\n label: string;\n text: string;\n}): Array<{ index: string; role: string; text: string }> {\n if (!row.label.startsWith(\"Conversation history\")) {\n return [];\n }\n return row.text\n .split(\"\\n\\n\")\n .flatMap((block): Array<{ index: string; role: string; text: string }> => {\n const [heading, ...content] = block.split(\"\\n\");\n const match = /^(\\d+)\\.\\s+(.+)$/.exec(heading ?? \"\");\n if (match === null) {\n return [];\n }\n return [\n {\n index: match[1] ?? \"\",\n role: match[2] ?? \"Message\",\n text: content.join(\"\\n\"),\n },\n ];\n });\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,8],"mappings":"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"}
|