@tonyclaw/agent-inspector 2.0.6 → 2.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/CompareDrawer-BhRYPp6T.js +1 -0
  3. package/.output/public/assets/ProxyViewerContainer-BHq0dkQG.js +114 -0
  4. package/.output/public/assets/ReplayDialog-Ch0gwg6B.js +1 -0
  5. package/.output/public/assets/{RequestAnatomy-BxX3_N9S.js → RequestAnatomy-CKbvIgaN.js} +1 -1
  6. package/.output/public/assets/ResponseView-hRLar32x.js +1 -0
  7. package/.output/public/assets/StreamingChunkSequence-DCJ_gUHa.js +1 -0
  8. package/.output/public/assets/_sessionId-BJTz6t5l.js +1 -0
  9. package/.output/public/assets/index-Cf9U0Ekq.js +1 -0
  10. package/.output/public/assets/index-DTdv7nzl.css +1 -0
  11. package/.output/public/assets/{main-CKnTJ4-O.js → main-BlDtK0Nn.js} +6 -6
  12. package/.output/server/_libs/lucide-react.mjs +170 -108
  13. package/.output/server/_libs/radix-ui__react-collapsible.mjs +2 -2
  14. package/.output/server/{_sessionId-B-x9fRY3.mjs → _sessionId-Dy7rsLS4.mjs} +58 -5
  15. package/.output/server/_ssr/{CompareDrawer-BQVNsAY2.mjs → CompareDrawer-CkVX-ARV.mjs} +9 -8
  16. package/.output/server/_ssr/{ProxyViewerContainer-CYm2Dw19.mjs → ProxyViewerContainer-B5a9p3j5.mjs} +855 -31
  17. package/.output/server/_ssr/{ReplayDialog-CaMQBc79.mjs → ReplayDialog-hXY6H9fB.mjs} +7 -8
  18. package/.output/server/_ssr/{RequestAnatomy--P5arRH2.mjs → RequestAnatomy-B6MS7VvA.mjs} +59 -6
  19. package/.output/server/_ssr/{ResponseView-RtFwNvgD.mjs → ResponseView-ByjxwUnp.mjs} +5 -74
  20. package/.output/server/_ssr/{StreamingChunkSequence-B5HPkzab.mjs → StreamingChunkSequence-C5Kb8siT.mjs} +8 -7
  21. package/.output/server/_ssr/{index-CZIKZU43.mjs → index-BZXtj42m.mjs} +58 -5
  22. package/.output/server/_ssr/index.mjs +2 -2
  23. package/.output/server/_ssr/{router-DGPt3MUc.mjs → router-CVQaVF_3.mjs} +5 -5
  24. package/.output/server/{_tanstack-start-manifest_v-BzH4pNaI.mjs → _tanstack-start-manifest_v-Bpe5ZC56.mjs} +1 -1
  25. package/.output/server/index.mjs +62 -69
  26. package/package.json +1 -1
  27. package/src/components/proxy-viewer/LogEntry.tsx +15 -1
  28. package/src/components/proxy-viewer/RequestToolsPanel.tsx +292 -0
  29. package/src/components/proxy-viewer/requestTools.ts +213 -0
  30. package/.output/public/assets/CompareDrawer-DDmqSAfl.js +0 -1
  31. package/.output/public/assets/ProxyViewerContainer-Cxpdziwd.js +0 -101
  32. package/.output/public/assets/ReplayDialog-Bt5DGzlh.js +0 -1
  33. package/.output/public/assets/ResponseView-Bl_5S9gZ.js +0 -1
  34. package/.output/public/assets/StreamingChunkSequence-RJMwNf6F.js +0 -1
  35. package/.output/public/assets/_sessionId-b4isaoDp.js +0 -1
  36. package/.output/public/assets/index-BZ4x5UI6.js +0 -1
  37. package/.output/public/assets/index-C624DUk9.css +0 -1
  38. package/.output/public/assets/json-viewer-CRL_gWEZ.js +0 -14
  39. package/.output/server/_ssr/json-viewer-d4obyRaA.mjs +0 -515
@@ -1,515 +0,0 @@
1
- import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { q as parseJsonText, c as cn, k as TooltipProvider, l as Tooltip, m as TooltipTrigger, n as TooltipContent } from "./ProxyViewerContainer-CYm2Dw19.mjs";
3
- import "./router-DGPt3MUc.mjs";
4
- import "../_libs/modelcontextprotocol__server.mjs";
5
- import "../_libs/jszip.mjs";
6
- import { C as Check, a as Copy, b as ChevronDown, f as ChevronRight, y as ChevronsDown } from "../_libs/lucide-react.mjs";
7
- import { M as Markdown } from "../_libs/react-markdown.mjs";
8
- import "../_libs/swr.mjs";
9
- import "../_libs/use-sync-external-store.mjs";
10
- import "../_libs/dequal.mjs";
11
- import "../_libs/clsx.mjs";
12
- import "../_libs/tailwind-merge.mjs";
13
- import "../_libs/class-variance-authority.mjs";
14
- import "../_libs/radix-ui__react-dialog.mjs";
15
- import "../_libs/radix-ui__primitive.mjs";
16
- import "../_libs/radix-ui__react-compose-refs.mjs";
17
- import "../_libs/radix-ui__react-context.mjs";
18
- import "../_libs/radix-ui__react-id.mjs";
19
- import "../_libs/@radix-ui/react-use-layout-effect+[...].mjs";
20
- import "../_libs/@radix-ui/react-use-controllable-state+[...].mjs";
21
- import "../_libs/@radix-ui/react-dismissable-layer+[...].mjs";
22
- import "../_libs/radix-ui__react-primitive.mjs";
23
- import "../_libs/react-dom.mjs";
24
- import "util";
25
- import "async_hooks";
26
- import "stream";
27
- import "crypto";
28
- import "../_libs/radix-ui__react-slot.mjs";
29
- import "../_libs/@radix-ui/react-use-callback-ref+[...].mjs";
30
- import "../_libs/@radix-ui/react-use-escape-keydown+[...].mjs";
31
- import "../_libs/radix-ui__react-focus-scope.mjs";
32
- import "../_libs/radix-ui__react-portal.mjs";
33
- import "../_libs/radix-ui__react-presence.mjs";
34
- import "../_libs/radix-ui__react-focus-guards.mjs";
35
- import "../_libs/react-remove-scroll.mjs";
36
- import "tslib";
37
- import "../_libs/react-remove-scroll-bar.mjs";
38
- import "../_libs/react-style-singleton.mjs";
39
- import "../_libs/get-nonce.mjs";
40
- import "../_libs/use-sidecar.mjs";
41
- import "../_libs/use-callback-ref.mjs";
42
- import "../_libs/aria-hidden.mjs";
43
- import "../_libs/diff.mjs";
44
- import "../_libs/tanstack__react-virtual.mjs";
45
- import "../_libs/tanstack__virtual-core.mjs";
46
- import "../_libs/radix-ui__react-select.mjs";
47
- import "../_libs/radix-ui__number.mjs";
48
- import "../_libs/radix-ui__react-collection.mjs";
49
- import "../_libs/radix-ui__react-direction.mjs";
50
- import "../_libs/radix-ui__react-popper.mjs";
51
- import "../_libs/floating-ui__react-dom.mjs";
52
- import "../_libs/floating-ui__dom.mjs";
53
- import "../_libs/floating-ui__core.mjs";
54
- import "../_libs/floating-ui__utils.mjs";
55
- import "../_libs/radix-ui__react-arrow.mjs";
56
- import "../_libs/radix-ui__react-use-size.mjs";
57
- import "../_libs/radix-ui__react-use-previous.mjs";
58
- import "../_libs/@radix-ui/react-visually-hidden+[...].mjs";
59
- import "../_libs/zod.mjs";
60
- import "../_libs/radix-ui__react-tooltip.mjs";
61
- import "../_libs/radix-ui__react-tabs.mjs";
62
- import "../_libs/radix-ui__react-roving-focus.mjs";
63
- import "../_libs/tanstack__react-router.mjs";
64
- import "../_libs/tiny-warning.mjs";
65
- import "../_libs/tanstack__router-core.mjs";
66
- import "../_libs/cookie-es.mjs";
67
- import "../_libs/tanstack__history.mjs";
68
- import "../_libs/tiny-invariant.mjs";
69
- import "../_libs/seroval.mjs";
70
- import "../_libs/seroval-plugins.mjs";
71
- import "node:stream/web";
72
- import "node:stream";
73
- import "../_libs/isbot.mjs";
74
- import "node:fs";
75
- import "node:fs/promises";
76
- import "node:buffer";
77
- import "node:path";
78
- import "node:child_process";
79
- import "node:url";
80
- import "../_libs/conf.mjs";
81
- import "node:util";
82
- import "node:process";
83
- import "node:crypto";
84
- import "node:assert";
85
- import "../_libs/dot-prop.mjs";
86
- import "../_libs/env-paths.mjs";
87
- import "node:os";
88
- import "../_libs/atomically.mjs";
89
- import "../_libs/stubborn-fs.mjs";
90
- import "../_libs/stubborn-utils.mjs";
91
- import "../_libs/when-exit.mjs";
92
- import "../_libs/ajv.mjs";
93
- import "../_libs/fast-deep-equal.mjs";
94
- import "../_libs/json-schema-traverse.mjs";
95
- import "../_libs/fast-uri.mjs";
96
- import "../_libs/ajv-formats.mjs";
97
- import "../_libs/debounce-fn.mjs";
98
- import "../_libs/mimic-function.mjs";
99
- import "../_libs/semver.mjs";
100
- import "../_libs/uint8array-extras.mjs";
101
- import "node:worker_threads";
102
- import "../_libs/readable-stream.mjs";
103
- import "events";
104
- import "node:string_decoder";
105
- import "../_libs/process-nextick-args.mjs";
106
- import "../_libs/isarray.mjs";
107
- import "../_libs/safe-buffer.mjs";
108
- import "buffer";
109
- import "../_libs/core-util-is.mjs";
110
- import "../_libs/inherits.mjs";
111
- import "../_libs/util-deprecate.mjs";
112
- import "../_libs/lie.mjs";
113
- import "../_libs/immediate.mjs";
114
- import "../_libs/setimmediate.mjs";
115
- import "../_libs/pako.mjs";
116
- import "../_libs/devlop.mjs";
117
- import "../_libs/unified.mjs";
118
- import "../_libs/bail.mjs";
119
- import "../_libs/extend.mjs";
120
- import "../_libs/is-plain-obj.mjs";
121
- import "../_libs/trough.mjs";
122
- import "../_libs/vfile.mjs";
123
- import "../_libs/vfile-message.mjs";
124
- import "../_libs/unist-util-stringify-position.mjs";
125
- import "../_libs/remark-parse.mjs";
126
- import "../_libs/mdast-util-from-markdown.mjs";
127
- import "../_libs/micromark-util-decode-numeric-character-reference+[...].mjs";
128
- import "../_libs/micromark-util-decode-string.mjs";
129
- import "../_libs/decode-named-character-reference+[...].mjs";
130
- import "../_libs/character-entities.mjs";
131
- import "../_libs/micromark-util-normalize-identifier+[...].mjs";
132
- import "../_libs/micromark.mjs";
133
- import "../_libs/micromark-util-combine-extensions+[...].mjs";
134
- import "../_libs/micromark-util-chunked.mjs";
135
- import "../_libs/micromark-factory-space.mjs";
136
- import "../_libs/micromark-util-character.mjs";
137
- import "../_libs/micromark-core-commonmark.mjs";
138
- import "../_libs/micromark-util-classify-character+[...].mjs";
139
- import "../_libs/micromark-util-resolve-all.mjs";
140
- import "../_libs/micromark-util-subtokenize.mjs";
141
- import "../_libs/micromark-factory-destination.mjs";
142
- import "../_libs/micromark-factory-label.mjs";
143
- import "../_libs/micromark-factory-title.mjs";
144
- import "../_libs/micromark-factory-whitespace.mjs";
145
- import "../_libs/micromark-util-html-tag-name.mjs";
146
- import "../_libs/mdast-util-to-string.mjs";
147
- import "../_libs/remark-rehype.mjs";
148
- import "../_libs/mdast-util-to-hast.mjs";
149
- import "../_libs/ungap__structured-clone.mjs";
150
- import "../_libs/micromark-util-sanitize-uri.mjs";
151
- import "../_libs/unist-util-position.mjs";
152
- import "../_libs/trim-lines.mjs";
153
- import "../_libs/unist-util-visit.mjs";
154
- import "../_libs/unist-util-visit-parents.mjs";
155
- import "../_libs/unist-util-is.mjs";
156
- import "../_libs/hast-util-to-jsx-runtime.mjs";
157
- import "../_libs/comma-separated-tokens.mjs";
158
- import "../_libs/property-information.mjs";
159
- import "../_libs/space-separated-tokens.mjs";
160
- import "../_libs/style-to-js.mjs";
161
- import "../_libs/style-to-object.mjs";
162
- import "../_libs/inline-style-parser.mjs";
163
- import "../_libs/hast-util-whitespace.mjs";
164
- import "../_libs/estree-util-is-identifier-name.mjs";
165
- import "../_libs/html-url-attributes.mjs";
166
- function classifyValue(value) {
167
- if (value === null) return "null";
168
- if (Array.isArray(value)) return "array";
169
- switch (typeof value) {
170
- case "string":
171
- return "string";
172
- case "number":
173
- return "number";
174
- case "boolean":
175
- return "boolean";
176
- case "object":
177
- return "object";
178
- case "bigint":
179
- case "symbol":
180
- case "undefined":
181
- case "function":
182
- return "object";
183
- }
184
- }
185
- function isExpandable(value) {
186
- return value !== null && (Array.isArray(value) || typeof value === "object");
187
- }
188
- function getEntries(value) {
189
- if (Array.isArray(value)) {
190
- return value.map((item, index) => [String(index), item]);
191
- }
192
- if (typeof value === "object" && value !== null) {
193
- return Object.entries(value);
194
- }
195
- return [];
196
- }
197
- const STRING_TRUNCATE_LIMIT = 120;
198
- function StringValue({ text }) {
199
- const [expanded, setExpanded] = reactExports.useState(false);
200
- const isLong = text.length > STRING_TRUNCATE_LIMIT;
201
- if (!isLong) {
202
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-emerald-400 break-all", children: [
203
- '"',
204
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "prose prose-sm dark:prose-invert inline max-w-none [&_p]:inline [&_p]:my-0 [&_code]:text-emerald-300 [&_a]:text-emerald-300", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Markdown, { children: text }) }),
205
- '"'
206
- ] });
207
- }
208
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-emerald-400 break-all", children: [
209
- '"',
210
- expanded ? /* @__PURE__ */ jsxRuntimeExports.jsx(
211
- "span",
212
- {
213
- className: "cursor-pointer prose prose-sm dark:prose-invert inline max-w-none [&_p]:inline [&_p]:my-0 [&_code]:text-emerald-300 [&_a]:text-emerald-300",
214
- onClick: (e) => {
215
- e.stopPropagation();
216
- setExpanded(false);
217
- },
218
- onKeyDown: (e) => {
219
- if (e.key === "Enter" || e.key === " ") {
220
- e.stopPropagation();
221
- setExpanded(false);
222
- }
223
- },
224
- role: "button",
225
- tabIndex: 0,
226
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(Markdown, { children: text })
227
- }
228
- ) : /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { delayDuration: 300, children: [
229
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
230
- TooltipTrigger,
231
- {
232
- onClick: (e) => {
233
- e.stopPropagation();
234
- setExpanded(true);
235
- },
236
- className: "text-left cursor-pointer",
237
- children: [
238
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: text.slice(0, STRING_TRUNCATE_LIMIT) }),
239
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-emerald-400/50", children: "…" })
240
- ]
241
- }
242
- ),
243
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
244
- TooltipContent,
245
- {
246
- side: "bottom",
247
- className: "max-w-md text-xs p-2 break-words whitespace-pre-wrap",
248
- children: [
249
- text.slice(0, 500),
250
- text.length > 500 ? "…" : ""
251
- ]
252
- }
253
- )
254
- ] }),
255
- '"'
256
- ] });
257
- }
258
- function PrimitiveValue({ value }) {
259
- if (value === null) {
260
- return /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-rose-400 italic", children: "null" });
261
- }
262
- switch (typeof value) {
263
- case "string":
264
- return /* @__PURE__ */ jsxRuntimeExports.jsx(StringValue, { text: value });
265
- case "number":
266
- return /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-amber-400", children: value });
267
- case "boolean":
268
- return /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-blue-400", children: value ? "true" : "false" });
269
- case "object":
270
- case "bigint":
271
- case "symbol":
272
- case "undefined":
273
- case "function":
274
- return /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-muted-foreground", children: JSON.stringify(value) });
275
- }
276
- }
277
- function CopyValueButton({ value }) {
278
- const [copied, setCopied] = reactExports.useState(false);
279
- function handleCopy(e) {
280
- e.stopPropagation();
281
- void window.navigator.clipboard.writeText(JSON.stringify(value, null, 2)).then(() => {
282
- setCopied(true);
283
- setTimeout(() => {
284
- setCopied(false);
285
- }, 2e3);
286
- });
287
- }
288
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
289
- "button",
290
- {
291
- type: "button",
292
- onClick: handleCopy,
293
- className: "inline-flex items-center gap-1 text-[10px] text-muted-foreground hover:text-foreground transition-colors",
294
- title: "Copy JSON",
295
- children: copied ? /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3 text-green-500" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Copy, { className: "size-3" })
296
- }
297
- );
298
- }
299
- function CopyButton({ value }) {
300
- const [copied, setCopied] = reactExports.useState(false);
301
- function handleCopy(e) {
302
- e.stopPropagation();
303
- void window.navigator.clipboard.writeText(JSON.stringify(value, null, 2)).then(() => {
304
- setCopied(true);
305
- setTimeout(() => {
306
- setCopied(false);
307
- }, 2e3);
308
- });
309
- }
310
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
311
- "button",
312
- {
313
- type: "button",
314
- onClick: handleCopy,
315
- className: "opacity-0 group-hover/row:opacity-100 hover:bg-muted p-0.5 rounded transition-opacity shrink-0",
316
- title: "Copy to clipboard",
317
- children: copied ? /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3 text-green-500" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Copy, { className: "size-3 text-muted-foreground" })
318
- }
319
- );
320
- }
321
- function ExpandCollapseButton({
322
- onClick
323
- }) {
324
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
325
- "button",
326
- {
327
- type: "button",
328
- onClick,
329
- className: "opacity-0 group-hover/row:opacity-100 hover:bg-muted p-0.5 rounded transition-opacity shrink-0",
330
- title: "Expand all descendants",
331
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronsDown, { className: "size-3.5 text-muted-foreground" })
332
- }
333
- );
334
- }
335
- const JsonNode = reactExports.memo(function JsonNode2({
336
- name,
337
- value,
338
- level,
339
- defaultExpandDepth,
340
- isArrayItem,
341
- path,
342
- expandTargetPath,
343
- anatomyPaths
344
- }) {
345
- const isAncestorOfTarget = reactExports.useMemo(() => {
346
- if (expandTargetPath === null) return false;
347
- if (path === "") return expandTargetPath.length > 0;
348
- return expandTargetPath === path || expandTargetPath.startsWith(`${path}/`);
349
- }, [expandTargetPath, path]);
350
- const initialExpanded = level < defaultExpandDepth || isAncestorOfTarget && isExpandable(value);
351
- const [expanded, setExpanded] = reactExports.useState(initialExpanded);
352
- reactExports.useEffect(() => {
353
- if (isAncestorOfTarget && isExpandable(value) && !expanded) {
354
- setExpanded(true);
355
- }
356
- }, [expandTargetPath]);
357
- const [childResetKey, setChildResetKey] = reactExports.useState(0);
358
- const [childDepthOverride, setChildDepthOverride] = reactExports.useState(null);
359
- const expandable = isExpandable(value);
360
- const fullyExpanded = childDepthOverride === Number.POSITIVE_INFINITY;
361
- const entries = reactExports.useMemo(() => getEntries(value), [value]);
362
- const hasExpandableChild = reactExports.useMemo(
363
- () => entries.some(([, child]) => isExpandable(child)),
364
- [entries]
365
- );
366
- const dataType = classifyValue(value);
367
- const openBracket = dataType === "array" ? "[" : "{";
368
- const closeBracket = dataType === "array" ? "]" : "}";
369
- const hasAnatomyPath = anatomyPaths !== null && anatomyPaths.has(path);
370
- function expandAllDeep() {
371
- setExpanded(true);
372
- setChildDepthOverride(Number.POSITIVE_INFINITY);
373
- setChildResetKey((k) => k + 1);
374
- }
375
- function collapseToDefault() {
376
- setExpanded(false);
377
- setChildDepthOverride(0);
378
- setChildResetKey((k) => k + 1);
379
- }
380
- function handleRowToggle() {
381
- if (fullyExpanded) {
382
- collapseToDefault();
383
- } else {
384
- setExpanded(!expanded);
385
- }
386
- }
387
- function handleExpandAll(e) {
388
- e.stopPropagation();
389
- expandAllDeep();
390
- }
391
- const effectiveChildDepth = childDepthOverride ?? defaultExpandDepth;
392
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: cn(level > 0 && "border-l border-border/50 ml-2"), children: [
393
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
394
- "div",
395
- {
396
- className: cn(
397
- "flex items-start gap-1 py-0.5 px-1 -ml-1 rounded-sm group/row",
398
- expandable && "cursor-pointer hover:bg-muted/50"
399
- ),
400
- "data-anatomy-path": hasAnatomyPath ? path : void 0,
401
- onClick: expandable ? handleRowToggle : void 0,
402
- onKeyDown: expandable ? (e) => {
403
- if (e.key === "Enter" || e.key === " ") {
404
- e.preventDefault();
405
- handleRowToggle();
406
- }
407
- } : void 0,
408
- onDoubleClick: expandable && hasExpandableChild ? () => expandAllDeep() : void 0,
409
- role: expandable ? "button" : void 0,
410
- tabIndex: expandable ? 0 : void 0,
411
- children: [
412
- expandable ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "w-4 h-5 flex items-center justify-center shrink-0", children: expanded ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3 text-muted-foreground" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-3 text-muted-foreground" }) }) : /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "w-4 shrink-0" }),
413
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: cn("shrink-0", isArrayItem ? "text-muted-foreground" : "text-cyan-400"), children: isArrayItem ? name : `"${name}"` }),
414
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-muted-foreground shrink-0", children: expandable ? "" : ":" }),
415
- expandable ? /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-muted-foreground", children: [
416
- openBracket,
417
- /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-muted-foreground/60 text-xs", children: [
418
- " ",
419
- entries.length,
420
- " ",
421
- entries.length === 1 ? "item" : "items",
422
- " ",
423
- closeBracket
424
- ] })
425
- ] }) : /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "min-w-0", children: /* @__PURE__ */ jsxRuntimeExports.jsx(PrimitiveValue, { value }) }),
426
- expandable && hasExpandableChild && !fullyExpanded && /* @__PURE__ */ jsxRuntimeExports.jsx(ExpandCollapseButton, { onClick: handleExpandAll }),
427
- /* @__PURE__ */ jsxRuntimeExports.jsx(CopyButton, { value })
428
- ]
429
- }
430
- ),
431
- expandable && expanded && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "pl-4", children: [
432
- entries.map(([key, childValue]) => /* @__PURE__ */ jsxRuntimeExports.jsx(
433
- JsonNode2,
434
- {
435
- name: key,
436
- value: childValue,
437
- level: level + 1,
438
- defaultExpandDepth: effectiveChildDepth,
439
- isArrayItem: dataType === "array",
440
- path: path === "" ? `/${key}` : `${path}/${key}`,
441
- expandTargetPath,
442
- anatomyPaths
443
- },
444
- key
445
- )),
446
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-muted-foreground py-0.5 px-1", children: closeBracket })
447
- ] }, childResetKey)
448
- ] });
449
- });
450
- function JsonViewer({
451
- data,
452
- defaultExpandDepth = 0,
453
- className,
454
- showCopy = false,
455
- bulkDepth: controlledBulkDepth,
456
- bulkRevision: controlledBulkRevision,
457
- anatomyPaths = null,
458
- expandToPath = null
459
- }) {
460
- const expandable = isExpandable(data);
461
- const entries = reactExports.useMemo(() => getEntries(data), [data]);
462
- const bulkDepth = controlledBulkDepth ?? defaultExpandDepth;
463
- const bulkRevision = controlledBulkRevision ?? 0;
464
- if (!expandable) {
465
- return /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipProvider, { children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: cn("font-mono text-xs leading-relaxed", className), children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1", children: [
466
- /* @__PURE__ */ jsxRuntimeExports.jsx(PrimitiveValue, { value: data }),
467
- showCopy && /* @__PURE__ */ jsxRuntimeExports.jsx(CopyValueButton, { value: data })
468
- ] }) }) });
469
- }
470
- const dataType = classifyValue(data);
471
- const isArray = dataType === "array";
472
- return /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipProvider, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: cn("font-mono text-xs leading-relaxed", className), children: [
473
- showCopy && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mb-2 flex items-center justify-end gap-2", children: /* @__PURE__ */ jsxRuntimeExports.jsx(CopyValueButton, { value: data }) }),
474
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: entries.map(([key, childValue]) => /* @__PURE__ */ jsxRuntimeExports.jsx(
475
- JsonNode,
476
- {
477
- name: key,
478
- value: childValue,
479
- level: 0,
480
- defaultExpandDepth: bulkDepth,
481
- isArrayItem: isArray,
482
- path: `/${key}`,
483
- expandTargetPath: expandToPath,
484
- anatomyPaths
485
- },
486
- key
487
- )) }, bulkRevision)
488
- ] }) });
489
- }
490
- const JsonViewerFromString = reactExports.memo(function JsonViewerFromString2({
491
- text,
492
- defaultExpandDepth = 0,
493
- className,
494
- bulkDepth,
495
- bulkRevision
496
- }) {
497
- const parsed = reactExports.useMemo(() => parseJsonText(text), [text]);
498
- if (parsed.kind === "json") {
499
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
500
- JsonViewer,
501
- {
502
- data: parsed.data,
503
- defaultExpandDepth,
504
- className,
505
- bulkDepth,
506
- bulkRevision
507
- }
508
- );
509
- }
510
- return /* @__PURE__ */ jsxRuntimeExports.jsx("pre", { className: cn("font-mono text-xs whitespace-pre-wrap break-words", className), children: text });
511
- });
512
- export {
513
- JsonViewer,
514
- JsonViewerFromString
515
- };