@tanstack/devtools-ui 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -24,135 +24,155 @@ function JsonTree(props) {
24
24
  });
25
25
  }
26
26
  function JsonValue(props) {
27
- const {
28
- value,
29
- keyName,
30
- isRoot = false,
31
- isLastKey,
32
- copyable,
33
- defaultExpansionDepth,
34
- depth,
35
- collapsePaths,
36
- path
37
- } = props;
38
27
  const styles = useStyles();
39
28
  return (() => {
40
29
  var _el$ = _tmpl$();
41
30
  insert(_el$, (() => {
42
- var _c$ = memo(() => !!(keyName && typeof value !== "object" && !Array.isArray(value)));
31
+ var _c$ = memo(() => !!(props.keyName && typeof props.value !== "object" && !Array.isArray(props.value)));
43
32
  return () => _c$() && (() => {
44
33
  var _el$2 = _tmpl$2(), _el$3 = _el$2.firstChild, _el$5 = _el$3.nextSibling;
45
34
  _el$5.nextSibling;
46
- insert(_el$2, keyName, _el$5);
35
+ insert(_el$2, () => props.keyName, _el$5);
47
36
  effect(() => className(_el$2, styles().tree.valueKey));
48
37
  return _el$2;
49
38
  })();
50
39
  })(), null);
51
40
  insert(_el$, () => {
52
- if (typeof value === "string") {
41
+ if (typeof props.value === "string") {
53
42
  return (() => {
54
43
  var _el$6 = _tmpl$3(), _el$7 = _el$6.firstChild, _el$9 = _el$7.nextSibling;
55
44
  _el$9.nextSibling;
56
- insert(_el$6, value, _el$9);
45
+ insert(_el$6, () => props.value, _el$9);
57
46
  effect(() => className(_el$6, styles().tree.valueString));
58
47
  return _el$6;
59
48
  })();
60
49
  }
61
- if (typeof value === "number") {
50
+ if (typeof props.value === "number") {
62
51
  return (() => {
63
52
  var _el$0 = _tmpl$();
64
- insert(_el$0, value);
53
+ insert(_el$0, () => props.value);
65
54
  effect(() => className(_el$0, styles().tree.valueNumber));
66
55
  return _el$0;
67
56
  })();
68
57
  }
69
- if (typeof value === "boolean") {
58
+ if (typeof props.value === "boolean") {
70
59
  return (() => {
71
60
  var _el$1 = _tmpl$();
72
- insert(_el$1, () => String(value));
61
+ insert(_el$1, () => String(props.value));
73
62
  effect(() => className(_el$1, styles().tree.valueBoolean));
74
63
  return _el$1;
75
64
  })();
76
65
  }
77
- if (value === null) {
66
+ if (props.value === null) {
78
67
  return (() => {
79
68
  var _el$10 = _tmpl$4();
80
69
  effect(() => className(_el$10, styles().tree.valueNull));
81
70
  return _el$10;
82
71
  })();
83
72
  }
84
- if (value === void 0) {
73
+ if (props.value === void 0) {
85
74
  return (() => {
86
75
  var _el$11 = _tmpl$5();
87
76
  effect(() => className(_el$11, styles().tree.valueNull));
88
77
  return _el$11;
89
78
  })();
90
79
  }
91
- if (typeof value === "function") {
80
+ if (typeof props.value === "function") {
92
81
  return (() => {
93
82
  var _el$12 = _tmpl$();
94
- insert(_el$12, () => String(value));
83
+ insert(_el$12, () => String(props.value));
95
84
  effect(() => className(_el$12, styles().tree.valueFunction));
96
85
  return _el$12;
97
86
  })();
98
87
  }
99
- if (Array.isArray(value)) {
88
+ if (Array.isArray(props.value)) {
100
89
  return createComponent(ArrayValue, {
101
- defaultExpansionDepth,
102
- depth,
103
- copyable,
104
- keyName,
105
- value,
106
- collapsePaths,
107
- path
90
+ get defaultExpansionDepth() {
91
+ return props.defaultExpansionDepth;
92
+ },
93
+ get depth() {
94
+ return props.depth;
95
+ },
96
+ get copyable() {
97
+ return props.copyable;
98
+ },
99
+ get keyName() {
100
+ return props.keyName;
101
+ },
102
+ get value() {
103
+ return props.value;
104
+ },
105
+ get collapsePaths() {
106
+ return props.collapsePaths;
107
+ },
108
+ get path() {
109
+ return props.path;
110
+ }
108
111
  });
109
112
  }
110
- if (typeof value === "object") {
113
+ if (typeof props.value === "object") {
111
114
  return createComponent(ObjectValue, {
112
- defaultExpansionDepth,
113
- depth,
114
- copyable,
115
- keyName,
116
- value,
117
- collapsePaths,
118
- path
115
+ get defaultExpansionDepth() {
116
+ return props.defaultExpansionDepth;
117
+ },
118
+ get depth() {
119
+ return props.depth;
120
+ },
121
+ get copyable() {
122
+ return props.copyable;
123
+ },
124
+ get keyName() {
125
+ return props.keyName;
126
+ },
127
+ get value() {
128
+ return props.value;
129
+ },
130
+ get collapsePaths() {
131
+ return props.collapsePaths;
132
+ },
133
+ get path() {
134
+ return props.path;
135
+ }
119
136
  });
120
137
  }
121
138
  return _tmpl$();
122
139
  }, null);
123
- insert(_el$, copyable && (() => {
124
- var _el$14 = _tmpl$6();
125
- insert(_el$14, createComponent(CopyButton, {
126
- value
127
- }));
128
- effect(() => className(_el$14, clsx(styles().tree.actions, "actions")));
129
- return _el$14;
140
+ insert(_el$, (() => {
141
+ var _c$2 = memo(() => !!props.copyable);
142
+ return () => _c$2() && (() => {
143
+ var _el$14 = _tmpl$6();
144
+ insert(_el$14, createComponent(CopyButton, {
145
+ get value() {
146
+ return props.value;
147
+ }
148
+ }));
149
+ effect(() => className(_el$14, clsx(styles().tree.actions, "actions")));
150
+ return _el$14;
151
+ })();
130
152
  })(), null);
131
- insert(_el$, isLastKey || isRoot ? "" : _tmpl$7(), null);
132
- effect(() => className(_el$, styles().tree.valueContainer(isRoot)));
153
+ insert(_el$, (() => {
154
+ var _c$3 = memo(() => !!(props.isLastKey || props.isRoot));
155
+ return () => _c$3() ? "" : _tmpl$7();
156
+ })(), null);
157
+ effect(() => className(_el$, styles().tree.valueContainer(props.isRoot ?? false)));
133
158
  return _el$;
134
159
  })();
135
160
  }
136
- const ArrayValue = ({
137
- value,
138
- keyName,
139
- copyable,
140
- defaultExpansionDepth,
141
- depth,
142
- collapsePaths,
143
- path
144
- }) => {
161
+ const ArrayValue = (props) => {
145
162
  const styles = useStyles();
146
- const [expanded, setExpanded] = createSignal(depth <= defaultExpansionDepth && !collapsePaths?.includes(path));
147
- if (value.length === 0) {
163
+ const [expanded, setExpanded] = createSignal(props.depth <= props.defaultExpansionDepth && !props.collapsePaths?.includes(props.path));
164
+ if (props.value.length === 0) {
148
165
  return (() => {
149
166
  var _el$16 = _tmpl$8(), _el$17 = _el$16.firstChild;
150
- insert(_el$16, keyName && (() => {
151
- var _el$18 = _tmpl$2(), _el$19 = _el$18.firstChild, _el$21 = _el$19.nextSibling;
152
- _el$21.nextSibling;
153
- insert(_el$18, keyName, _el$21);
154
- effect(() => className(_el$18, clsx(styles().tree.valueKey, styles().tree.collapsible)));
155
- return _el$18;
167
+ insert(_el$16, (() => {
168
+ var _c$4 = memo(() => !!props.keyName);
169
+ return () => _c$4() && (() => {
170
+ var _el$18 = _tmpl$2(), _el$19 = _el$18.firstChild, _el$21 = _el$19.nextSibling;
171
+ _el$21.nextSibling;
172
+ insert(_el$18, () => props.keyName, _el$21);
173
+ effect(() => className(_el$18, clsx(styles().tree.valueKey, styles().tree.collapsible)));
174
+ return _el$18;
175
+ })();
156
176
  })(), _el$17);
157
177
  effect((_p$) => {
158
178
  var _v$ = styles().tree.expanderContainer, _v$2 = styles().tree.valueBraces;
@@ -174,25 +194,28 @@ const ArrayValue = ({
174
194
  return expanded();
175
195
  }
176
196
  }), _el$23);
177
- insert(_el$22, keyName && (() => {
178
- var _el$27 = _tmpl$1(), _el$28 = _el$27.firstChild, _el$33 = _el$28.nextSibling, _el$29 = _el$33.nextSibling, _el$31 = _el$29.nextSibling, _el$32 = _el$31.firstChild;
179
- _el$27.$$click = (e) => {
180
- e.stopPropagation();
181
- e.stopImmediatePropagation();
182
- setExpanded(!expanded());
183
- };
184
- insert(_el$27, keyName, _el$33);
185
- insert(_el$31, () => value.length, _el$32);
186
- effect((_p$) => {
187
- var _v$6 = clsx(styles().tree.valueKey, styles().tree.collapsible), _v$7 = styles().tree.info;
188
- _v$6 !== _p$.e && className(_el$27, _p$.e = _v$6);
189
- _v$7 !== _p$.t && className(_el$31, _p$.t = _v$7);
190
- return _p$;
191
- }, {
192
- e: void 0,
193
- t: void 0
194
- });
195
- return _el$27;
197
+ insert(_el$22, (() => {
198
+ var _c$5 = memo(() => !!props.keyName);
199
+ return () => _c$5() && (() => {
200
+ var _el$27 = _tmpl$1(), _el$28 = _el$27.firstChild, _el$33 = _el$28.nextSibling, _el$29 = _el$33.nextSibling, _el$31 = _el$29.nextSibling, _el$32 = _el$31.firstChild;
201
+ _el$27.$$click = (e) => {
202
+ e.stopPropagation();
203
+ e.stopImmediatePropagation();
204
+ setExpanded(!expanded());
205
+ };
206
+ insert(_el$27, () => props.keyName, _el$33);
207
+ insert(_el$31, () => props.value.length, _el$32);
208
+ effect((_p$) => {
209
+ var _v$6 = clsx(styles().tree.valueKey, styles().tree.collapsible), _v$7 = styles().tree.info;
210
+ _v$6 !== _p$.e && className(_el$27, _p$.e = _v$6);
211
+ _v$7 !== _p$.t && className(_el$31, _p$.t = _v$7);
212
+ return _p$;
213
+ }, {
214
+ e: void 0,
215
+ t: void 0
216
+ });
217
+ return _el$27;
218
+ })();
196
219
  })(), _el$23);
197
220
  insert(_el$22, createComponent(Show, {
198
221
  get when() {
@@ -201,23 +224,33 @@ const ArrayValue = ({
201
224
  get children() {
202
225
  var _el$24 = _tmpl$();
203
226
  insert(_el$24, createComponent(For, {
204
- each: value,
227
+ get each() {
228
+ return props.value;
229
+ },
205
230
  children: (item, i) => {
206
- const isLastKey = i() === value.length - 1;
231
+ const isLastKey = i() === props.value.length - 1;
207
232
  return createComponent(JsonValue, {
208
- copyable,
233
+ get copyable() {
234
+ return props.copyable;
235
+ },
209
236
  value: item,
210
237
  isLastKey,
211
- defaultExpansionDepth,
212
- depth: depth + 1,
213
- collapsePaths,
238
+ get defaultExpansionDepth() {
239
+ return props.defaultExpansionDepth;
240
+ },
241
+ get depth() {
242
+ return props.depth + 1;
243
+ },
244
+ get collapsePaths() {
245
+ return props.collapsePaths;
246
+ },
214
247
  get path() {
215
- return path ? `${path}[${i()}]` : `[${i()}]`;
248
+ return memo(() => !!props.path)() ? `${props.path}[${i()}]` : `[${i()}]`;
216
249
  }
217
250
  });
218
251
  }
219
252
  }));
220
- effect(() => className(_el$24, styles().tree.expandedLine(Boolean(keyName))));
253
+ effect(() => className(_el$24, styles().tree.expandedLine(Boolean(props.keyName))));
221
254
  return _el$24;
222
255
  }
223
256
  }), _el$26);
@@ -250,28 +283,23 @@ const ArrayValue = ({
250
283
  return _el$22;
251
284
  })();
252
285
  };
253
- const ObjectValue = ({
254
- value,
255
- keyName,
256
- copyable,
257
- defaultExpansionDepth,
258
- depth,
259
- collapsePaths,
260
- path
261
- }) => {
286
+ const ObjectValue = (props) => {
262
287
  const styles = useStyles();
263
- const [expanded, setExpanded] = createSignal(depth <= defaultExpansionDepth && !collapsePaths?.includes(path));
264
- const keys = Object.keys(value);
288
+ const [expanded, setExpanded] = createSignal(props.depth <= props.defaultExpansionDepth && !props.collapsePaths?.includes(props.path));
289
+ const keys = Object.keys(props.value);
265
290
  const lastKeyName = keys[keys.length - 1];
266
291
  if (keys.length === 0) {
267
292
  return (() => {
268
293
  var _el$34 = _tmpl$10(), _el$35 = _el$34.firstChild;
269
- insert(_el$34, keyName && (() => {
270
- var _el$36 = _tmpl$2(), _el$37 = _el$36.firstChild, _el$39 = _el$37.nextSibling;
271
- _el$39.nextSibling;
272
- insert(_el$36, keyName, _el$39);
273
- effect(() => className(_el$36, clsx(styles().tree.valueKey, styles().tree.collapsible)));
274
- return _el$36;
294
+ insert(_el$34, (() => {
295
+ var _c$6 = memo(() => !!props.keyName);
296
+ return () => _c$6() && (() => {
297
+ var _el$36 = _tmpl$2(), _el$37 = _el$36.firstChild, _el$39 = _el$37.nextSibling;
298
+ _el$39.nextSibling;
299
+ insert(_el$36, () => props.keyName, _el$39);
300
+ effect(() => className(_el$36, clsx(styles().tree.valueKey, styles().tree.collapsible)));
301
+ return _el$36;
302
+ })();
275
303
  })(), _el$35);
276
304
  effect((_p$) => {
277
305
  var _v$8 = styles().tree.expanderContainer, _v$9 = styles().tree.valueBraces;
@@ -287,31 +315,37 @@ const ObjectValue = ({
287
315
  }
288
316
  return (() => {
289
317
  var _el$40 = _tmpl$11(), _el$41 = _el$40.firstChild, _el$44 = _el$41.nextSibling;
290
- insert(_el$40, keyName && createComponent(Expander, {
291
- onClick: () => setExpanded(!expanded()),
292
- get expanded() {
293
- return expanded();
294
- }
295
- }), _el$41);
296
- insert(_el$40, keyName && (() => {
297
- var _el$45 = _tmpl$1(), _el$46 = _el$45.firstChild, _el$51 = _el$46.nextSibling, _el$47 = _el$51.nextSibling, _el$49 = _el$47.nextSibling, _el$50 = _el$49.firstChild;
298
- _el$45.$$click = (e) => {
299
- e.stopPropagation();
300
- e.stopImmediatePropagation();
301
- setExpanded(!expanded());
302
- };
303
- insert(_el$45, keyName, _el$51);
304
- insert(_el$49, () => keys.length, _el$50);
305
- effect((_p$) => {
306
- var _v$11 = clsx(styles().tree.valueKey, styles().tree.collapsible), _v$12 = styles().tree.info;
307
- _v$11 !== _p$.e && className(_el$45, _p$.e = _v$11);
308
- _v$12 !== _p$.t && className(_el$49, _p$.t = _v$12);
309
- return _p$;
310
- }, {
311
- e: void 0,
312
- t: void 0
318
+ insert(_el$40, (() => {
319
+ var _c$7 = memo(() => !!props.keyName);
320
+ return () => _c$7() && createComponent(Expander, {
321
+ onClick: () => setExpanded(!expanded()),
322
+ get expanded() {
323
+ return expanded();
324
+ }
313
325
  });
314
- return _el$45;
326
+ })(), _el$41);
327
+ insert(_el$40, (() => {
328
+ var _c$8 = memo(() => !!props.keyName);
329
+ return () => _c$8() && (() => {
330
+ var _el$45 = _tmpl$1(), _el$46 = _el$45.firstChild, _el$51 = _el$46.nextSibling, _el$47 = _el$51.nextSibling, _el$49 = _el$47.nextSibling, _el$50 = _el$49.firstChild;
331
+ _el$45.$$click = (e) => {
332
+ e.stopPropagation();
333
+ e.stopImmediatePropagation();
334
+ setExpanded(!expanded());
335
+ };
336
+ insert(_el$45, () => props.keyName, _el$51);
337
+ insert(_el$49, () => keys.length, _el$50);
338
+ effect((_p$) => {
339
+ var _v$11 = clsx(styles().tree.valueKey, styles().tree.collapsible), _v$12 = styles().tree.info;
340
+ _v$11 !== _p$.e && className(_el$45, _p$.e = _v$11);
341
+ _v$12 !== _p$.t && className(_el$49, _p$.t = _v$12);
342
+ return _p$;
343
+ }, {
344
+ e: void 0,
345
+ t: void 0
346
+ });
347
+ return _el$45;
348
+ })();
315
349
  })(), _el$41);
316
350
  insert(_el$40, createComponent(Show, {
317
351
  get when() {
@@ -323,18 +357,28 @@ const ObjectValue = ({
323
357
  each: keys,
324
358
  children: (k) => createComponent(JsonValue, {
325
359
  get value() {
326
- return value[k];
360
+ return props.value[k];
327
361
  },
328
362
  keyName: k,
329
363
  isLastKey: lastKeyName === k,
330
- copyable,
331
- defaultExpansionDepth,
332
- depth: depth + 1,
333
- collapsePaths,
334
- path: `${path}${path ? "." : ""}${k}`
364
+ get copyable() {
365
+ return props.copyable;
366
+ },
367
+ get defaultExpansionDepth() {
368
+ return props.defaultExpansionDepth;
369
+ },
370
+ get depth() {
371
+ return props.depth + 1;
372
+ },
373
+ get collapsePaths() {
374
+ return props.collapsePaths;
375
+ },
376
+ get path() {
377
+ return `${props.path}${props.path ? "." : ""}${k}`;
378
+ }
335
379
  })
336
380
  }));
337
- effect(() => className(_el$42, styles().tree.expandedLine(Boolean(keyName))));
381
+ effect(() => className(_el$42, styles().tree.expandedLine(Boolean(props.keyName))));
338
382
  return _el$42;
339
383
  }
340
384
  }), _el$44);
@@ -1 +1 @@
1
- {"version":3,"file":"tree.js","sources":["../../../src/components/tree.tsx"],"sourcesContent":["import { For, Match, Show, Switch, createSignal } from 'solid-js'\nimport clsx from 'clsx'\nimport { css, useStyles } from '../styles/use-styles'\nimport { CopiedCopier, Copier, ErrorCopier } from './icons'\nimport type { CollapsiblePaths } from '../utils/deep-keys'\n\nexport function JsonTree<TData, TName extends CollapsiblePaths<TData>>(props: {\n value: TData\n copyable?: boolean\n defaultExpansionDepth?: number\n collapsePaths?: Array<TName>\n}) {\n return (\n <JsonValue\n isRoot\n value={props.value}\n copyable={props.copyable}\n depth={0}\n defaultExpansionDepth={props.defaultExpansionDepth ?? 1}\n path=\"\"\n collapsePaths={props.collapsePaths}\n />\n )\n}\n\nfunction JsonValue(props: {\n value: any\n keyName?: string\n isRoot?: boolean\n isLastKey?: boolean\n copyable?: boolean\n\n defaultExpansionDepth: number\n depth: number\n\n collapsePaths?: Array<string>\n path: string\n}) {\n const {\n value,\n keyName,\n isRoot = false,\n isLastKey,\n copyable,\n defaultExpansionDepth,\n depth,\n collapsePaths,\n path,\n } = props\n const styles = useStyles()\n\n return (\n <span class={styles().tree.valueContainer(isRoot)}>\n {keyName && typeof value !== 'object' && !Array.isArray(value) && (\n <span class={styles().tree.valueKey}>&quot;{keyName}&quot;: </span>\n )}\n {(() => {\n if (typeof value === 'string') {\n return (\n <span class={styles().tree.valueString}>&quot;{value}&quot;</span>\n )\n }\n if (typeof value === 'number') {\n return <span class={styles().tree.valueNumber}>{value}</span>\n }\n if (typeof value === 'boolean') {\n return <span class={styles().tree.valueBoolean}>{String(value)}</span>\n }\n if (value === null) {\n return <span class={styles().tree.valueNull}>null</span>\n }\n if (value === undefined) {\n return <span class={styles().tree.valueNull}>undefined</span>\n }\n if (typeof value === 'function') {\n return (\n <span class={styles().tree.valueFunction}>{String(value)}</span>\n )\n }\n if (Array.isArray(value)) {\n return (\n <ArrayValue\n defaultExpansionDepth={defaultExpansionDepth}\n depth={depth}\n copyable={copyable}\n keyName={keyName}\n value={value}\n collapsePaths={collapsePaths}\n path={path}\n />\n )\n }\n if (typeof value === 'object') {\n return (\n <ObjectValue\n defaultExpansionDepth={defaultExpansionDepth}\n depth={depth}\n copyable={copyable}\n keyName={keyName}\n value={value}\n collapsePaths={collapsePaths}\n path={path}\n />\n )\n }\n return <span />\n })()}\n {copyable && (\n <div class={clsx(styles().tree.actions, 'actions')}>\n <CopyButton value={value} />\n </div>\n )}\n {isLastKey || isRoot ? '' : <span>,</span>}\n </span>\n )\n}\n\nconst ArrayValue = ({\n value,\n keyName,\n copyable,\n defaultExpansionDepth,\n depth,\n collapsePaths,\n path,\n}: {\n value: Array<any>\n copyable?: boolean\n keyName?: string\n defaultExpansionDepth: number\n depth: number\n collapsePaths?: Array<string>\n path: string\n}) => {\n const styles = useStyles()\n\n const [expanded, setExpanded] = createSignal(\n depth <= defaultExpansionDepth && !collapsePaths?.includes(path),\n )\n\n if (value.length === 0) {\n return (\n <span class={styles().tree.expanderContainer}>\n {keyName && (\n <span class={clsx(styles().tree.valueKey, styles().tree.collapsible)}>\n &quot;{keyName}&quot;:{' '}\n </span>\n )}\n\n <span class={styles().tree.valueBraces}>[]</span>\n </span>\n )\n }\n return (\n <span class={styles().tree.expanderContainer}>\n <Expander\n onClick={() => setExpanded(!expanded())}\n expanded={expanded()}\n />\n\n {keyName && (\n <span\n onclick={(e) => {\n e.stopPropagation()\n e.stopImmediatePropagation()\n setExpanded(!expanded())\n }}\n class={clsx(styles().tree.valueKey, styles().tree.collapsible)}\n >\n &quot;{keyName}&quot;:{' '}\n <span class={styles().tree.info}>{value.length} items</span>\n </span>\n )}\n\n <span class={styles().tree.valueBraces}>[</span>\n\n <Show when={expanded()}>\n <span class={styles().tree.expandedLine(Boolean(keyName))}>\n <For each={value}>\n {(item, i) => {\n const isLastKey = i() === value.length - 1\n return (\n <JsonValue\n copyable={copyable}\n value={item}\n isLastKey={isLastKey}\n defaultExpansionDepth={defaultExpansionDepth}\n depth={depth + 1}\n collapsePaths={collapsePaths}\n path={path ? `${path}[${i()}]` : `[${i()}]`}\n />\n )\n }}\n </For>\n </span>\n </Show>\n\n <Show when={!expanded()}>\n <span\n onClick={(e) => {\n e.stopPropagation()\n e.stopImmediatePropagation()\n setExpanded(!expanded())\n }}\n class={clsx(styles().tree.valueKey, styles().tree.collapsible)}\n >\n {`...`}\n </span>\n </Show>\n <span class={styles().tree.valueBraces}>]</span>\n </span>\n )\n}\n\nconst ObjectValue = ({\n value,\n keyName,\n copyable,\n defaultExpansionDepth,\n depth,\n collapsePaths,\n path,\n}: {\n value: Record<string, any>\n keyName?: string\n copyable?: boolean\n defaultExpansionDepth: number\n depth: number\n collapsePaths?: Array<string>\n path: string\n}) => {\n const styles = useStyles()\n\n const [expanded, setExpanded] = createSignal(\n depth <= defaultExpansionDepth && !collapsePaths?.includes(path),\n )\n\n const keys = Object.keys(value)\n const lastKeyName = keys[keys.length - 1]\n\n if (keys.length === 0) {\n return (\n <span class={styles().tree.expanderContainer}>\n {keyName && (\n <span class={clsx(styles().tree.valueKey, styles().tree.collapsible)}>\n &quot;{keyName}&quot;:{' '}\n </span>\n )}\n\n <span class={styles().tree.valueBraces}>{'{}'}</span>\n </span>\n )\n }\n\n return (\n <span class={styles().tree.expanderContainer}>\n {keyName && (\n <Expander\n onClick={() => setExpanded(!expanded())}\n expanded={expanded()}\n />\n )}\n\n {keyName && (\n <span\n onClick={(e) => {\n e.stopPropagation()\n e.stopImmediatePropagation()\n setExpanded(!expanded())\n }}\n class={clsx(styles().tree.valueKey, styles().tree.collapsible)}\n >\n &quot;{keyName}&quot;:{' '}\n <span class={styles().tree.info}>{keys.length} items</span>\n </span>\n )}\n\n <span class={styles().tree.valueBraces}>{'{'}</span>\n\n <Show when={expanded()}>\n <span class={styles().tree.expandedLine(Boolean(keyName))}>\n <For each={keys}>\n {(k) => (\n <>\n <JsonValue\n value={value[k]}\n keyName={k}\n isLastKey={lastKeyName === k}\n copyable={copyable}\n defaultExpansionDepth={defaultExpansionDepth}\n depth={depth + 1}\n collapsePaths={collapsePaths}\n path={`${path}${path ? '.' : ''}${k}`}\n />\n </>\n )}\n </For>\n </span>\n </Show>\n\n <Show when={!expanded()}>\n <span\n onClick={(e) => {\n e.stopPropagation()\n e.stopImmediatePropagation()\n setExpanded(!expanded())\n }}\n class={clsx(styles().tree.valueKey, styles().tree.collapsible)}\n >\n {`...`}\n </span>\n </Show>\n\n <span class={styles().tree.valueBraces}>{'}'}</span>\n </span>\n )\n}\n\ntype CopyState = 'NoCopy' | 'SuccessCopy' | 'ErrorCopy'\n\nconst CopyButton = (props: { value: unknown }) => {\n const styles = useStyles()\n const [copyState, setCopyState] = createSignal<CopyState>('NoCopy')\n\n return (\n <button\n class={styles().tree.actionButton}\n title=\"Copy object to clipboard\"\n aria-label={`${\n copyState() === 'NoCopy'\n ? 'Copy object to clipboard'\n : copyState() === 'SuccessCopy'\n ? 'Object copied to clipboard'\n : 'Error copying object to clipboard'\n }`}\n onClick={\n copyState() === 'NoCopy'\n ? () => {\n navigator.clipboard\n .writeText(JSON.stringify(props.value, null, 2))\n .then(\n () => {\n setCopyState('SuccessCopy')\n setTimeout(() => {\n setCopyState('NoCopy')\n }, 1500)\n },\n (err) => {\n console.error('Failed to copy: ', err)\n setCopyState('ErrorCopy')\n setTimeout(() => {\n setCopyState('NoCopy')\n }, 1500)\n },\n )\n }\n : undefined\n }\n >\n <Switch>\n <Match when={copyState() === 'NoCopy'}>\n <Copier />\n </Match>\n <Match when={copyState() === 'SuccessCopy'}>\n <CopiedCopier theme={'dark'} />\n </Match>\n <Match when={copyState() === 'ErrorCopy'}>\n <ErrorCopier />\n </Match>\n </Switch>\n </button>\n )\n}\n\nconst Expander = (props: { expanded: boolean; onClick: () => void }) => {\n const styles = useStyles()\n return (\n <span\n onClick={props.onClick}\n class={clsx(\n styles().tree.expander,\n css`\n transform: rotate(${props.expanded ? 90 : 0}deg);\n `,\n props.expanded &&\n css`\n & svg {\n top: -1px;\n }\n `,\n )}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 12L10 8L6 4\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </span>\n )\n}\n"],"names":["JsonTree","props","_$createComponent","JsonValue","isRoot","value","copyable","depth","defaultExpansionDepth","path","collapsePaths","keyName","isLastKey","styles","useStyles","_el$","_tmpl$","_$insert","_c$","_$memo","Array","isArray","_el$2","_tmpl$2","_el$3","firstChild","_el$5","nextSibling","_$effect","_$className","tree","valueKey","_el$6","_tmpl$3","_el$7","_el$9","valueString","_el$0","valueNumber","_el$1","String","valueBoolean","_el$10","_tmpl$4","valueNull","undefined","_el$11","_tmpl$5","_el$12","valueFunction","ArrayValue","ObjectValue","_el$14","_tmpl$6","CopyButton","clsx","actions","_tmpl$7","valueContainer","expanded","setExpanded","createSignal","includes","length","_el$16","_tmpl$8","_el$17","_el$18","_el$19","_el$21","collapsible","_p$","_v$","expanderContainer","_v$2","valueBraces","e","t","_el$22","_tmpl$0","_el$23","_el$26","Expander","onClick","_el$27","_tmpl$1","_el$28","_el$33","_el$29","_el$31","_el$32","$$click","stopPropagation","stopImmediatePropagation","_v$6","_v$7","info","Show","when","children","_el$24","For","each","item","i","expandedLine","Boolean","_el$25","_tmpl$9","_v$3","_v$4","_v$5","a","keys","Object","lastKeyName","_el$34","_tmpl$10","_el$35","_el$36","_el$37","_el$39","_v$8","_v$9","_el$40","_tmpl$11","_el$41","_el$44","_el$45","_el$46","_el$51","_el$47","_el$49","_el$50","_v$11","_v$12","_el$42","k","_el$43","_v$0","_v$1","_v$10","copyState","setCopyState","_el$52","_tmpl$12","_$addEventListener","navigator","clipboard","writeText","JSON","stringify","then","setTimeout","err","console","error","Switch","Match","Copier","CopiedCopier","theme","ErrorCopier","_v$13","actionButton","_v$14","_$setAttribute","_el$53","_tmpl$13","expander","css","_$delegateEvents"],"mappings":"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"}
1
+ {"version":3,"file":"tree.js","sources":["../../../src/components/tree.tsx"],"sourcesContent":["import { For, Match, Show, Switch, createSignal } from 'solid-js'\nimport clsx from 'clsx'\nimport { css, useStyles } from '../styles/use-styles'\nimport { CopiedCopier, Copier, ErrorCopier } from './icons'\nimport type { CollapsiblePaths } from '../utils/deep-keys'\n\nexport function JsonTree<TData, TName extends CollapsiblePaths<TData>>(props: {\n value: TData\n copyable?: boolean\n defaultExpansionDepth?: number\n collapsePaths?: Array<TName>\n}) {\n return (\n <JsonValue\n isRoot\n value={props.value}\n copyable={props.copyable}\n depth={0}\n defaultExpansionDepth={props.defaultExpansionDepth ?? 1}\n path=\"\"\n collapsePaths={props.collapsePaths}\n />\n )\n}\n\nfunction JsonValue(props: {\n value: any\n keyName?: string\n isRoot?: boolean\n isLastKey?: boolean\n copyable?: boolean\n\n defaultExpansionDepth: number\n depth: number\n\n collapsePaths?: Array<string>\n path: string\n}) {\n const styles = useStyles()\n\n return (\n <span class={styles().tree.valueContainer(props.isRoot ?? false)}>\n {props.keyName &&\n typeof props.value !== 'object' &&\n !Array.isArray(props.value) && (\n <span class={styles().tree.valueKey}>\n &quot;{props.keyName}&quot;:{' '}\n </span>\n )}\n {(() => {\n if (typeof props.value === 'string') {\n return (\n <span class={styles().tree.valueString}>\n &quot;{props.value}&quot;\n </span>\n )\n }\n if (typeof props.value === 'number') {\n return <span class={styles().tree.valueNumber}>{props.value}</span>\n }\n if (typeof props.value === 'boolean') {\n return (\n <span class={styles().tree.valueBoolean}>\n {String(props.value)}\n </span>\n )\n }\n if (props.value === null) {\n return <span class={styles().tree.valueNull}>null</span>\n }\n if (props.value === undefined) {\n return <span class={styles().tree.valueNull}>undefined</span>\n }\n if (typeof props.value === 'function') {\n return (\n <span class={styles().tree.valueFunction}>\n {String(props.value)}\n </span>\n )\n }\n if (Array.isArray(props.value)) {\n return (\n <ArrayValue\n defaultExpansionDepth={props.defaultExpansionDepth}\n depth={props.depth}\n copyable={props.copyable}\n keyName={props.keyName}\n value={props.value}\n collapsePaths={props.collapsePaths}\n path={props.path}\n />\n )\n }\n if (typeof props.value === 'object') {\n return (\n <ObjectValue\n defaultExpansionDepth={props.defaultExpansionDepth}\n depth={props.depth}\n copyable={props.copyable}\n keyName={props.keyName}\n value={props.value}\n collapsePaths={props.collapsePaths}\n path={props.path}\n />\n )\n }\n return <span />\n })()}\n {props.copyable && (\n <div class={clsx(styles().tree.actions, 'actions')}>\n <CopyButton value={props.value} />\n </div>\n )}\n {props.isLastKey || props.isRoot ? '' : <span>,</span>}\n </span>\n )\n}\n\nconst ArrayValue = (props: {\n value: Array<any>\n copyable?: boolean\n keyName?: string\n defaultExpansionDepth: number\n depth: number\n collapsePaths?: Array<string>\n path: string\n}) => {\n const styles = useStyles()\n\n const [expanded, setExpanded] = createSignal(\n props.depth <= props.defaultExpansionDepth &&\n !props.collapsePaths?.includes(props.path),\n )\n\n if (props.value.length === 0) {\n return (\n <span class={styles().tree.expanderContainer}>\n {props.keyName && (\n <span class={clsx(styles().tree.valueKey, styles().tree.collapsible)}>\n &quot;{props.keyName}&quot;:{' '}\n </span>\n )}\n\n <span class={styles().tree.valueBraces}>[]</span>\n </span>\n )\n }\n return (\n <span class={styles().tree.expanderContainer}>\n <Expander\n onClick={() => setExpanded(!expanded())}\n expanded={expanded()}\n />\n\n {props.keyName && (\n <span\n onclick={(e) => {\n e.stopPropagation()\n e.stopImmediatePropagation()\n setExpanded(!expanded())\n }}\n class={clsx(styles().tree.valueKey, styles().tree.collapsible)}\n >\n &quot;{props.keyName}&quot;:{' '}\n <span class={styles().tree.info}>{props.value.length} items</span>\n </span>\n )}\n\n <span class={styles().tree.valueBraces}>[</span>\n\n <Show when={expanded()}>\n <span class={styles().tree.expandedLine(Boolean(props.keyName))}>\n <For each={props.value}>\n {(item, i) => {\n const isLastKey = i() === props.value.length - 1\n return (\n <JsonValue\n copyable={props.copyable}\n value={item}\n isLastKey={isLastKey}\n defaultExpansionDepth={props.defaultExpansionDepth}\n depth={props.depth + 1}\n collapsePaths={props.collapsePaths}\n path={props.path ? `${props.path}[${i()}]` : `[${i()}]`}\n />\n )\n }}\n </For>\n </span>\n </Show>\n\n <Show when={!expanded()}>\n <span\n onClick={(e) => {\n e.stopPropagation()\n e.stopImmediatePropagation()\n setExpanded(!expanded())\n }}\n class={clsx(styles().tree.valueKey, styles().tree.collapsible)}\n >\n {`...`}\n </span>\n </Show>\n <span class={styles().tree.valueBraces}>]</span>\n </span>\n )\n}\n\nconst ObjectValue = (props: {\n value: Record<string, any>\n keyName?: string\n copyable?: boolean\n defaultExpansionDepth: number\n depth: number\n collapsePaths?: Array<string>\n path: string\n}) => {\n const styles = useStyles()\n\n const [expanded, setExpanded] = createSignal(\n props.depth <= props.defaultExpansionDepth &&\n !props.collapsePaths?.includes(props.path),\n )\n\n const keys = Object.keys(props.value)\n const lastKeyName = keys[keys.length - 1]\n\n if (keys.length === 0) {\n return (\n <span class={styles().tree.expanderContainer}>\n {props.keyName && (\n <span class={clsx(styles().tree.valueKey, styles().tree.collapsible)}>\n &quot;{props.keyName}&quot;:{' '}\n </span>\n )}\n\n <span class={styles().tree.valueBraces}>{'{}'}</span>\n </span>\n )\n }\n\n return (\n <span class={styles().tree.expanderContainer}>\n {props.keyName && (\n <Expander\n onClick={() => setExpanded(!expanded())}\n expanded={expanded()}\n />\n )}\n\n {props.keyName && (\n <span\n onClick={(e) => {\n e.stopPropagation()\n e.stopImmediatePropagation()\n setExpanded(!expanded())\n }}\n class={clsx(styles().tree.valueKey, styles().tree.collapsible)}\n >\n &quot;{props.keyName}&quot;:{' '}\n <span class={styles().tree.info}>{keys.length} items</span>\n </span>\n )}\n\n <span class={styles().tree.valueBraces}>{'{'}</span>\n\n <Show when={expanded()}>\n <span class={styles().tree.expandedLine(Boolean(props.keyName))}>\n <For each={keys}>\n {(k) => (\n <>\n <JsonValue\n value={props.value[k]}\n keyName={k}\n isLastKey={lastKeyName === k}\n copyable={props.copyable}\n defaultExpansionDepth={props.defaultExpansionDepth}\n depth={props.depth + 1}\n collapsePaths={props.collapsePaths}\n path={`${props.path}${props.path ? '.' : ''}${k}`}\n />\n </>\n )}\n </For>\n </span>\n </Show>\n\n <Show when={!expanded()}>\n <span\n onClick={(e) => {\n e.stopPropagation()\n e.stopImmediatePropagation()\n setExpanded(!expanded())\n }}\n class={clsx(styles().tree.valueKey, styles().tree.collapsible)}\n >\n {`...`}\n </span>\n </Show>\n\n <span class={styles().tree.valueBraces}>{'}'}</span>\n </span>\n )\n}\n\ntype CopyState = 'NoCopy' | 'SuccessCopy' | 'ErrorCopy'\n\nconst CopyButton = (props: { value: unknown }) => {\n const styles = useStyles()\n const [copyState, setCopyState] = createSignal<CopyState>('NoCopy')\n\n return (\n <button\n class={styles().tree.actionButton}\n title=\"Copy object to clipboard\"\n aria-label={`${\n copyState() === 'NoCopy'\n ? 'Copy object to clipboard'\n : copyState() === 'SuccessCopy'\n ? 'Object copied to clipboard'\n : 'Error copying object to clipboard'\n }`}\n onClick={\n copyState() === 'NoCopy'\n ? () => {\n navigator.clipboard\n .writeText(JSON.stringify(props.value, null, 2))\n .then(\n () => {\n setCopyState('SuccessCopy')\n setTimeout(() => {\n setCopyState('NoCopy')\n }, 1500)\n },\n (err) => {\n console.error('Failed to copy: ', err)\n setCopyState('ErrorCopy')\n setTimeout(() => {\n setCopyState('NoCopy')\n }, 1500)\n },\n )\n }\n : undefined\n }\n >\n <Switch>\n <Match when={copyState() === 'NoCopy'}>\n <Copier />\n </Match>\n <Match when={copyState() === 'SuccessCopy'}>\n <CopiedCopier theme={'dark'} />\n </Match>\n <Match when={copyState() === 'ErrorCopy'}>\n <ErrorCopier />\n </Match>\n </Switch>\n </button>\n )\n}\n\nconst Expander = (props: { expanded: boolean; onClick: () => void }) => {\n const styles = useStyles()\n return (\n <span\n onClick={props.onClick}\n class={clsx(\n styles().tree.expander,\n css`\n transform: rotate(${props.expanded ? 90 : 0}deg);\n `,\n props.expanded &&\n css`\n & svg {\n top: -1px;\n }\n `,\n )}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 12L10 8L6 4\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </span>\n )\n}\n"],"names":["JsonTree","props","_$createComponent","JsonValue","isRoot","value","copyable","depth","defaultExpansionDepth","path","collapsePaths","styles","useStyles","_el$","_tmpl$","_$insert","_c$","_$memo","keyName","Array","isArray","_el$2","_tmpl$2","_el$3","firstChild","_el$5","nextSibling","_$effect","_$className","tree","valueKey","_el$6","_tmpl$3","_el$7","_el$9","valueString","_el$0","valueNumber","_el$1","String","valueBoolean","_el$10","_tmpl$4","valueNull","undefined","_el$11","_tmpl$5","_el$12","valueFunction","ArrayValue","ObjectValue","_c$2","_el$14","_tmpl$6","CopyButton","clsx","actions","_c$3","isLastKey","_tmpl$7","valueContainer","expanded","setExpanded","createSignal","includes","length","_el$16","_tmpl$8","_el$17","_c$4","_el$18","_el$19","_el$21","collapsible","_p$","_v$","expanderContainer","_v$2","valueBraces","e","t","_el$22","_tmpl$0","_el$23","_el$26","Expander","onClick","_c$5","_el$27","_tmpl$1","_el$28","_el$33","_el$29","_el$31","_el$32","$$click","stopPropagation","stopImmediatePropagation","_v$6","_v$7","info","Show","when","children","_el$24","For","each","item","i","expandedLine","Boolean","_el$25","_tmpl$9","_v$3","_v$4","_v$5","a","keys","Object","lastKeyName","_el$34","_tmpl$10","_el$35","_c$6","_el$36","_el$37","_el$39","_v$8","_v$9","_el$40","_tmpl$11","_el$41","_el$44","_c$7","_c$8","_el$45","_el$46","_el$51","_el$47","_el$49","_el$50","_v$11","_v$12","_el$42","k","_el$43","_v$0","_v$1","_v$10","copyState","setCopyState","_el$52","_tmpl$12","_$addEventListener","navigator","clipboard","writeText","JSON","stringify","then","setTimeout","err","console","error","Switch","Match","Copier","CopiedCopier","theme","ErrorCopier","_v$13","actionButton","_v$14","_$setAttribute","_el$53","_tmpl$13","expander","css","_$delegateEvents"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/devtools-ui",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "TanStack Devtools UI is a set of UI components for building devtool panels for your application.",
5
5
  "author": "Tanner Linsley",
6
6
  "license": "MIT",
@@ -36,94 +36,87 @@ function JsonValue(props: {
36
36
  collapsePaths?: Array<string>
37
37
  path: string
38
38
  }) {
39
- const {
40
- value,
41
- keyName,
42
- isRoot = false,
43
- isLastKey,
44
- copyable,
45
- defaultExpansionDepth,
46
- depth,
47
- collapsePaths,
48
- path,
49
- } = props
50
39
  const styles = useStyles()
51
40
 
52
41
  return (
53
- <span class={styles().tree.valueContainer(isRoot)}>
54
- {keyName && typeof value !== 'object' && !Array.isArray(value) && (
55
- <span class={styles().tree.valueKey}>&quot;{keyName}&quot;: </span>
56
- )}
42
+ <span class={styles().tree.valueContainer(props.isRoot ?? false)}>
43
+ {props.keyName &&
44
+ typeof props.value !== 'object' &&
45
+ !Array.isArray(props.value) && (
46
+ <span class={styles().tree.valueKey}>
47
+ &quot;{props.keyName}&quot;:{' '}
48
+ </span>
49
+ )}
57
50
  {(() => {
58
- if (typeof value === 'string') {
51
+ if (typeof props.value === 'string') {
59
52
  return (
60
- <span class={styles().tree.valueString}>&quot;{value}&quot;</span>
53
+ <span class={styles().tree.valueString}>
54
+ &quot;{props.value}&quot;
55
+ </span>
61
56
  )
62
57
  }
63
- if (typeof value === 'number') {
64
- return <span class={styles().tree.valueNumber}>{value}</span>
58
+ if (typeof props.value === 'number') {
59
+ return <span class={styles().tree.valueNumber}>{props.value}</span>
65
60
  }
66
- if (typeof value === 'boolean') {
67
- return <span class={styles().tree.valueBoolean}>{String(value)}</span>
61
+ if (typeof props.value === 'boolean') {
62
+ return (
63
+ <span class={styles().tree.valueBoolean}>
64
+ {String(props.value)}
65
+ </span>
66
+ )
68
67
  }
69
- if (value === null) {
68
+ if (props.value === null) {
70
69
  return <span class={styles().tree.valueNull}>null</span>
71
70
  }
72
- if (value === undefined) {
71
+ if (props.value === undefined) {
73
72
  return <span class={styles().tree.valueNull}>undefined</span>
74
73
  }
75
- if (typeof value === 'function') {
74
+ if (typeof props.value === 'function') {
76
75
  return (
77
- <span class={styles().tree.valueFunction}>{String(value)}</span>
76
+ <span class={styles().tree.valueFunction}>
77
+ {String(props.value)}
78
+ </span>
78
79
  )
79
80
  }
80
- if (Array.isArray(value)) {
81
+ if (Array.isArray(props.value)) {
81
82
  return (
82
83
  <ArrayValue
83
- defaultExpansionDepth={defaultExpansionDepth}
84
- depth={depth}
85
- copyable={copyable}
86
- keyName={keyName}
87
- value={value}
88
- collapsePaths={collapsePaths}
89
- path={path}
84
+ defaultExpansionDepth={props.defaultExpansionDepth}
85
+ depth={props.depth}
86
+ copyable={props.copyable}
87
+ keyName={props.keyName}
88
+ value={props.value}
89
+ collapsePaths={props.collapsePaths}
90
+ path={props.path}
90
91
  />
91
92
  )
92
93
  }
93
- if (typeof value === 'object') {
94
+ if (typeof props.value === 'object') {
94
95
  return (
95
96
  <ObjectValue
96
- defaultExpansionDepth={defaultExpansionDepth}
97
- depth={depth}
98
- copyable={copyable}
99
- keyName={keyName}
100
- value={value}
101
- collapsePaths={collapsePaths}
102
- path={path}
97
+ defaultExpansionDepth={props.defaultExpansionDepth}
98
+ depth={props.depth}
99
+ copyable={props.copyable}
100
+ keyName={props.keyName}
101
+ value={props.value}
102
+ collapsePaths={props.collapsePaths}
103
+ path={props.path}
103
104
  />
104
105
  )
105
106
  }
106
107
  return <span />
107
108
  })()}
108
- {copyable && (
109
+ {props.copyable && (
109
110
  <div class={clsx(styles().tree.actions, 'actions')}>
110
- <CopyButton value={value} />
111
+ <CopyButton value={props.value} />
111
112
  </div>
112
113
  )}
113
- {isLastKey || isRoot ? '' : <span>,</span>}
114
+ {props.isLastKey || props.isRoot ? '' : <span>,</span>}
114
115
  </span>
115
116
  )
116
117
  }
117
118
 
118
- const ArrayValue = ({
119
- value,
120
- keyName,
121
- copyable,
122
- defaultExpansionDepth,
123
- depth,
124
- collapsePaths,
125
- path,
126
- }: {
119
+ const ArrayValue = (props: {
127
120
  value: Array<any>
128
121
  copyable?: boolean
129
122
  keyName?: string
@@ -135,15 +128,16 @@ const ArrayValue = ({
135
128
  const styles = useStyles()
136
129
 
137
130
  const [expanded, setExpanded] = createSignal(
138
- depth <= defaultExpansionDepth && !collapsePaths?.includes(path),
131
+ props.depth <= props.defaultExpansionDepth &&
132
+ !props.collapsePaths?.includes(props.path),
139
133
  )
140
134
 
141
- if (value.length === 0) {
135
+ if (props.value.length === 0) {
142
136
  return (
143
137
  <span class={styles().tree.expanderContainer}>
144
- {keyName && (
138
+ {props.keyName && (
145
139
  <span class={clsx(styles().tree.valueKey, styles().tree.collapsible)}>
146
- &quot;{keyName}&quot;:{' '}
140
+ &quot;{props.keyName}&quot;:{' '}
147
141
  </span>
148
142
  )}
149
143
 
@@ -158,7 +152,7 @@ const ArrayValue = ({
158
152
  expanded={expanded()}
159
153
  />
160
154
 
161
- {keyName && (
155
+ {props.keyName && (
162
156
  <span
163
157
  onclick={(e) => {
164
158
  e.stopPropagation()
@@ -167,27 +161,27 @@ const ArrayValue = ({
167
161
  }}
168
162
  class={clsx(styles().tree.valueKey, styles().tree.collapsible)}
169
163
  >
170
- &quot;{keyName}&quot;:{' '}
171
- <span class={styles().tree.info}>{value.length} items</span>
164
+ &quot;{props.keyName}&quot;:{' '}
165
+ <span class={styles().tree.info}>{props.value.length} items</span>
172
166
  </span>
173
167
  )}
174
168
 
175
169
  <span class={styles().tree.valueBraces}>[</span>
176
170
 
177
171
  <Show when={expanded()}>
178
- <span class={styles().tree.expandedLine(Boolean(keyName))}>
179
- <For each={value}>
172
+ <span class={styles().tree.expandedLine(Boolean(props.keyName))}>
173
+ <For each={props.value}>
180
174
  {(item, i) => {
181
- const isLastKey = i() === value.length - 1
175
+ const isLastKey = i() === props.value.length - 1
182
176
  return (
183
177
  <JsonValue
184
- copyable={copyable}
178
+ copyable={props.copyable}
185
179
  value={item}
186
180
  isLastKey={isLastKey}
187
- defaultExpansionDepth={defaultExpansionDepth}
188
- depth={depth + 1}
189
- collapsePaths={collapsePaths}
190
- path={path ? `${path}[${i()}]` : `[${i()}]`}
181
+ defaultExpansionDepth={props.defaultExpansionDepth}
182
+ depth={props.depth + 1}
183
+ collapsePaths={props.collapsePaths}
184
+ path={props.path ? `${props.path}[${i()}]` : `[${i()}]`}
191
185
  />
192
186
  )
193
187
  }}
@@ -212,15 +206,7 @@ const ArrayValue = ({
212
206
  )
213
207
  }
214
208
 
215
- const ObjectValue = ({
216
- value,
217
- keyName,
218
- copyable,
219
- defaultExpansionDepth,
220
- depth,
221
- collapsePaths,
222
- path,
223
- }: {
209
+ const ObjectValue = (props: {
224
210
  value: Record<string, any>
225
211
  keyName?: string
226
212
  copyable?: boolean
@@ -232,18 +218,19 @@ const ObjectValue = ({
232
218
  const styles = useStyles()
233
219
 
234
220
  const [expanded, setExpanded] = createSignal(
235
- depth <= defaultExpansionDepth && !collapsePaths?.includes(path),
221
+ props.depth <= props.defaultExpansionDepth &&
222
+ !props.collapsePaths?.includes(props.path),
236
223
  )
237
224
 
238
- const keys = Object.keys(value)
225
+ const keys = Object.keys(props.value)
239
226
  const lastKeyName = keys[keys.length - 1]
240
227
 
241
228
  if (keys.length === 0) {
242
229
  return (
243
230
  <span class={styles().tree.expanderContainer}>
244
- {keyName && (
231
+ {props.keyName && (
245
232
  <span class={clsx(styles().tree.valueKey, styles().tree.collapsible)}>
246
- &quot;{keyName}&quot;:{' '}
233
+ &quot;{props.keyName}&quot;:{' '}
247
234
  </span>
248
235
  )}
249
236
 
@@ -254,14 +241,14 @@ const ObjectValue = ({
254
241
 
255
242
  return (
256
243
  <span class={styles().tree.expanderContainer}>
257
- {keyName && (
244
+ {props.keyName && (
258
245
  <Expander
259
246
  onClick={() => setExpanded(!expanded())}
260
247
  expanded={expanded()}
261
248
  />
262
249
  )}
263
250
 
264
- {keyName && (
251
+ {props.keyName && (
265
252
  <span
266
253
  onClick={(e) => {
267
254
  e.stopPropagation()
@@ -270,7 +257,7 @@ const ObjectValue = ({
270
257
  }}
271
258
  class={clsx(styles().tree.valueKey, styles().tree.collapsible)}
272
259
  >
273
- &quot;{keyName}&quot;:{' '}
260
+ &quot;{props.keyName}&quot;:{' '}
274
261
  <span class={styles().tree.info}>{keys.length} items</span>
275
262
  </span>
276
263
  )}
@@ -278,19 +265,19 @@ const ObjectValue = ({
278
265
  <span class={styles().tree.valueBraces}>{'{'}</span>
279
266
 
280
267
  <Show when={expanded()}>
281
- <span class={styles().tree.expandedLine(Boolean(keyName))}>
268
+ <span class={styles().tree.expandedLine(Boolean(props.keyName))}>
282
269
  <For each={keys}>
283
270
  {(k) => (
284
271
  <>
285
272
  <JsonValue
286
- value={value[k]}
273
+ value={props.value[k]}
287
274
  keyName={k}
288
275
  isLastKey={lastKeyName === k}
289
- copyable={copyable}
290
- defaultExpansionDepth={defaultExpansionDepth}
291
- depth={depth + 1}
292
- collapsePaths={collapsePaths}
293
- path={`${path}${path ? '.' : ''}${k}`}
276
+ copyable={props.copyable}
277
+ defaultExpansionDepth={props.defaultExpansionDepth}
278
+ depth={props.depth + 1}
279
+ collapsePaths={props.collapsePaths}
280
+ path={`${props.path}${props.path ? '.' : ''}${k}`}
294
281
  />
295
282
  </>
296
283
  )}