@tanstack/devtools-ui 0.3.5 → 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.
@@ -1,5 +1,7 @@
1
- export declare function JsonTree(props: {
2
- value: any;
1
+ import { CollapsiblePaths } from '../utils/deep-keys.js';
2
+ export declare function JsonTree<TData, TName extends CollapsiblePaths<TData>>(props: {
3
+ value: TData;
3
4
  copyable?: boolean;
4
5
  defaultExpansionDepth?: number;
6
+ collapsePaths?: Array<TName>;
5
7
  }): import("solid-js").JSX.Element;
@@ -16,131 +16,163 @@ function JsonTree(props) {
16
16
  depth: 0,
17
17
  get defaultExpansionDepth() {
18
18
  return props.defaultExpansionDepth ?? 1;
19
+ },
20
+ path: "",
21
+ get collapsePaths() {
22
+ return props.collapsePaths;
19
23
  }
20
24
  });
21
25
  }
22
26
  function JsonValue(props) {
23
- const {
24
- value,
25
- keyName,
26
- isRoot = false,
27
- isLastKey,
28
- copyable,
29
- defaultExpansionDepth,
30
- depth
31
- } = props;
32
27
  const styles = useStyles();
33
28
  return (() => {
34
29
  var _el$ = _tmpl$();
35
30
  insert(_el$, (() => {
36
- var _c$ = memo(() => !!(keyName && typeof value !== "object" && !Array.isArray(value)));
31
+ var _c$ = memo(() => !!(props.keyName && typeof props.value !== "object" && !Array.isArray(props.value)));
37
32
  return () => _c$() && (() => {
38
33
  var _el$2 = _tmpl$2(), _el$3 = _el$2.firstChild, _el$5 = _el$3.nextSibling;
39
34
  _el$5.nextSibling;
40
- insert(_el$2, keyName, _el$5);
35
+ insert(_el$2, () => props.keyName, _el$5);
41
36
  effect(() => className(_el$2, styles().tree.valueKey));
42
37
  return _el$2;
43
38
  })();
44
39
  })(), null);
45
40
  insert(_el$, () => {
46
- if (typeof value === "string") {
41
+ if (typeof props.value === "string") {
47
42
  return (() => {
48
43
  var _el$6 = _tmpl$3(), _el$7 = _el$6.firstChild, _el$9 = _el$7.nextSibling;
49
44
  _el$9.nextSibling;
50
- insert(_el$6, value, _el$9);
45
+ insert(_el$6, () => props.value, _el$9);
51
46
  effect(() => className(_el$6, styles().tree.valueString));
52
47
  return _el$6;
53
48
  })();
54
49
  }
55
- if (typeof value === "number") {
50
+ if (typeof props.value === "number") {
56
51
  return (() => {
57
52
  var _el$0 = _tmpl$();
58
- insert(_el$0, value);
53
+ insert(_el$0, () => props.value);
59
54
  effect(() => className(_el$0, styles().tree.valueNumber));
60
55
  return _el$0;
61
56
  })();
62
57
  }
63
- if (typeof value === "boolean") {
58
+ if (typeof props.value === "boolean") {
64
59
  return (() => {
65
60
  var _el$1 = _tmpl$();
66
- insert(_el$1, () => String(value));
61
+ insert(_el$1, () => String(props.value));
67
62
  effect(() => className(_el$1, styles().tree.valueBoolean));
68
63
  return _el$1;
69
64
  })();
70
65
  }
71
- if (value === null) {
66
+ if (props.value === null) {
72
67
  return (() => {
73
68
  var _el$10 = _tmpl$4();
74
69
  effect(() => className(_el$10, styles().tree.valueNull));
75
70
  return _el$10;
76
71
  })();
77
72
  }
78
- if (value === void 0) {
73
+ if (props.value === void 0) {
79
74
  return (() => {
80
75
  var _el$11 = _tmpl$5();
81
76
  effect(() => className(_el$11, styles().tree.valueNull));
82
77
  return _el$11;
83
78
  })();
84
79
  }
85
- if (typeof value === "function") {
80
+ if (typeof props.value === "function") {
86
81
  return (() => {
87
82
  var _el$12 = _tmpl$();
88
- insert(_el$12, () => String(value));
83
+ insert(_el$12, () => String(props.value));
89
84
  effect(() => className(_el$12, styles().tree.valueFunction));
90
85
  return _el$12;
91
86
  })();
92
87
  }
93
- if (Array.isArray(value)) {
88
+ if (Array.isArray(props.value)) {
94
89
  return createComponent(ArrayValue, {
95
- defaultExpansionDepth,
96
- depth,
97
- copyable,
98
- keyName,
99
- value
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
+ }
100
111
  });
101
112
  }
102
- if (typeof value === "object") {
113
+ if (typeof props.value === "object") {
103
114
  return createComponent(ObjectValue, {
104
- defaultExpansionDepth,
105
- depth,
106
- copyable,
107
- keyName,
108
- value
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
+ }
109
136
  });
110
137
  }
111
138
  return _tmpl$();
112
139
  }, null);
113
- insert(_el$, copyable && (() => {
114
- var _el$14 = _tmpl$6();
115
- insert(_el$14, createComponent(CopyButton, {
116
- value
117
- }));
118
- effect(() => className(_el$14, clsx(styles().tree.actions, "actions")));
119
- 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
+ })();
120
152
  })(), null);
121
- insert(_el$, isLastKey || isRoot ? "" : _tmpl$7(), null);
122
- 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)));
123
158
  return _el$;
124
159
  })();
125
160
  }
126
- const ArrayValue = ({
127
- value,
128
- keyName,
129
- copyable,
130
- defaultExpansionDepth,
131
- depth
132
- }) => {
161
+ const ArrayValue = (props) => {
133
162
  const styles = useStyles();
134
- const [expanded, setExpanded] = createSignal(depth <= defaultExpansionDepth);
135
- if (value.length === 0) {
163
+ const [expanded, setExpanded] = createSignal(props.depth <= props.defaultExpansionDepth && !props.collapsePaths?.includes(props.path));
164
+ if (props.value.length === 0) {
136
165
  return (() => {
137
166
  var _el$16 = _tmpl$8(), _el$17 = _el$16.firstChild;
138
- insert(_el$16, keyName && (() => {
139
- var _el$18 = _tmpl$2(), _el$19 = _el$18.firstChild, _el$21 = _el$19.nextSibling;
140
- _el$21.nextSibling;
141
- insert(_el$18, keyName, _el$21);
142
- effect(() => className(_el$18, clsx(styles().tree.valueKey, styles().tree.collapsible)));
143
- 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
+ })();
144
176
  })(), _el$17);
145
177
  effect((_p$) => {
146
178
  var _v$ = styles().tree.expanderContainer, _v$2 = styles().tree.valueBraces;
@@ -162,25 +194,28 @@ const ArrayValue = ({
162
194
  return expanded();
163
195
  }
164
196
  }), _el$23);
165
- insert(_el$22, keyName && (() => {
166
- 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;
167
- _el$27.$$click = (e) => {
168
- e.stopPropagation();
169
- e.stopImmediatePropagation();
170
- setExpanded(!expanded());
171
- };
172
- insert(_el$27, keyName, _el$33);
173
- insert(_el$31, () => value.length, _el$32);
174
- effect((_p$) => {
175
- var _v$6 = clsx(styles().tree.valueKey, styles().tree.collapsible), _v$7 = styles().tree.info;
176
- _v$6 !== _p$.e && className(_el$27, _p$.e = _v$6);
177
- _v$7 !== _p$.t && className(_el$31, _p$.t = _v$7);
178
- return _p$;
179
- }, {
180
- e: void 0,
181
- t: void 0
182
- });
183
- 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
+ })();
184
219
  })(), _el$23);
185
220
  insert(_el$22, createComponent(Show, {
186
221
  get when() {
@@ -189,19 +224,33 @@ const ArrayValue = ({
189
224
  get children() {
190
225
  var _el$24 = _tmpl$();
191
226
  insert(_el$24, createComponent(For, {
192
- each: value,
227
+ get each() {
228
+ return props.value;
229
+ },
193
230
  children: (item, i) => {
194
- const isLastKey = i() === value.length - 1;
231
+ const isLastKey = i() === props.value.length - 1;
195
232
  return createComponent(JsonValue, {
196
- copyable,
233
+ get copyable() {
234
+ return props.copyable;
235
+ },
197
236
  value: item,
198
237
  isLastKey,
199
- defaultExpansionDepth,
200
- depth: depth + 1
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
+ },
247
+ get path() {
248
+ return memo(() => !!props.path)() ? `${props.path}[${i()}]` : `[${i()}]`;
249
+ }
201
250
  });
202
251
  }
203
252
  }));
204
- effect(() => className(_el$24, styles().tree.expandedLine(Boolean(keyName))));
253
+ effect(() => className(_el$24, styles().tree.expandedLine(Boolean(props.keyName))));
205
254
  return _el$24;
206
255
  }
207
256
  }), _el$26);
@@ -234,26 +283,23 @@ const ArrayValue = ({
234
283
  return _el$22;
235
284
  })();
236
285
  };
237
- const ObjectValue = ({
238
- value,
239
- keyName,
240
- copyable,
241
- defaultExpansionDepth,
242
- depth
243
- }) => {
286
+ const ObjectValue = (props) => {
244
287
  const styles = useStyles();
245
- const [expanded, setExpanded] = createSignal(depth <= defaultExpansionDepth);
246
- 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);
247
290
  const lastKeyName = keys[keys.length - 1];
248
291
  if (keys.length === 0) {
249
292
  return (() => {
250
293
  var _el$34 = _tmpl$10(), _el$35 = _el$34.firstChild;
251
- insert(_el$34, keyName && (() => {
252
- var _el$36 = _tmpl$2(), _el$37 = _el$36.firstChild, _el$39 = _el$37.nextSibling;
253
- _el$39.nextSibling;
254
- insert(_el$36, keyName, _el$39);
255
- effect(() => className(_el$36, clsx(styles().tree.valueKey, styles().tree.collapsible)));
256
- 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
+ })();
257
303
  })(), _el$35);
258
304
  effect((_p$) => {
259
305
  var _v$8 = styles().tree.expanderContainer, _v$9 = styles().tree.valueBraces;
@@ -269,31 +315,37 @@ const ObjectValue = ({
269
315
  }
270
316
  return (() => {
271
317
  var _el$40 = _tmpl$11(), _el$41 = _el$40.firstChild, _el$44 = _el$41.nextSibling;
272
- insert(_el$40, keyName && createComponent(Expander, {
273
- onClick: () => setExpanded(!expanded()),
274
- get expanded() {
275
- return expanded();
276
- }
277
- }), _el$41);
278
- insert(_el$40, keyName && (() => {
279
- 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;
280
- _el$45.$$click = (e) => {
281
- e.stopPropagation();
282
- e.stopImmediatePropagation();
283
- setExpanded(!expanded());
284
- };
285
- insert(_el$45, keyName, _el$51);
286
- insert(_el$49, () => keys.length, _el$50);
287
- effect((_p$) => {
288
- var _v$11 = clsx(styles().tree.valueKey, styles().tree.collapsible), _v$12 = styles().tree.info;
289
- _v$11 !== _p$.e && className(_el$45, _p$.e = _v$11);
290
- _v$12 !== _p$.t && className(_el$49, _p$.t = _v$12);
291
- return _p$;
292
- }, {
293
- e: void 0,
294
- 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
+ }
295
325
  });
296
- 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
+ })();
297
349
  })(), _el$41);
298
350
  insert(_el$40, createComponent(Show, {
299
351
  get when() {
@@ -305,16 +357,28 @@ const ObjectValue = ({
305
357
  each: keys,
306
358
  children: (k) => createComponent(JsonValue, {
307
359
  get value() {
308
- return value[k];
360
+ return props.value[k];
309
361
  },
310
362
  keyName: k,
311
363
  isLastKey: lastKeyName === k,
312
- copyable,
313
- defaultExpansionDepth,
314
- depth: depth + 1
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
+ }
315
379
  })
316
380
  }));
317
- effect(() => className(_el$42, styles().tree.expandedLine(Boolean(keyName))));
381
+ effect(() => className(_el$42, styles().tree.expandedLine(Boolean(props.keyName))));
318
382
  return _el$42;
319
383
  }
320
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'\n\nexport function JsonTree(props: {\n value: any\n copyable?: boolean\n defaultExpansionDepth?: number\n}) {\n return (\n <JsonValue\n isRoot\n value={props.value}\n copyable={props.copyable}\n depth={0}\n defaultExpansionDepth={props.defaultExpansionDepth ?? 1}\n />\n )\n}\n\nfunction JsonValue(props: {\n value: any\n keyName?: string\n isRoot?: boolean\n isLastKey?: boolean\n copyable?: boolean\n defaultExpansionDepth: number\n depth: number\n}) {\n const {\n value,\n keyName,\n isRoot = false,\n isLastKey,\n copyable,\n defaultExpansionDepth,\n depth,\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 />\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 />\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}: {\n value: Array<any>\n copyable?: boolean\n keyName?: string\n defaultExpansionDepth: number\n depth: number\n}) => {\n const styles = useStyles()\n const [expanded, setExpanded] = createSignal(depth <= defaultExpansionDepth)\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 <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 {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 <span class={styles().tree.valueBraces}>[</span>\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 />\n )\n }}\n </For>\n </span>\n </Show>\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}: {\n value: Record<string, any>\n keyName?: string\n copyable?: boolean\n defaultExpansionDepth: number\n depth: number\n}) => {\n const styles = useStyles()\n const [expanded, setExpanded] = createSignal(depth <= defaultExpansionDepth)\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 <span class={styles().tree.valueBraces}>{'{}'}</span>\n </span>\n )\n }\n return (\n <span class={styles().tree.expanderContainer}>\n {keyName && (\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}>{keys.length} items</span>\n </span>\n )}\n <span class={styles().tree.valueBraces}>{'{'}</span>\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 />\n </>\n )}\n </For>\n </span>\n </Show>\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\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","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","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":";;;;;;AAKO,SAASA,SAASC,OAItB;AACD,SAAAC,gBACGC,WAAS;AAAA,IACRC,QAAM;AAAA,IAAA,IACNC,QAAK;AAAA,aAAEJ,MAAMI;AAAAA,IAAK;AAAA,IAAA,IAClBC,WAAQ;AAAA,aAAEL,MAAMK;AAAAA,IAAQ;AAAA,IACxBC,OAAO;AAAA,IAAC,IACRC,wBAAqB;AAAA,aAAEP,MAAMO,yBAAyB;AAAA,IAAC;AAAA,EAAA,CAAA;AAG7D;AAEA,SAASL,UAAUF,OAQhB;AACD,QAAM;AAAA,IACJI;AAAAA,IACAI;AAAAA,IACAL,SAAS;AAAA,IACTM;AAAAA,IACAJ;AAAAA,IACAE;AAAAA,IACAD;AAAAA,EAAAA,IACEN;AACJ,QAAMU,SAASC,UAAAA;AAEf,UAAA,MAAA;AAAA,QAAAC,OAAAC,OAAAA;AAAAC,WAAAF,OAAA,MAAA;AAAA,UAAAG,MAAAC,KAAA,MAAA,CAAA,EAEKR,WAAW,OAAOJ,UAAU,YAAY,CAACa,MAAMC,QAAQd,KAAK,EAAC;AAAA,aAAA,MAA7DW,IAAAA,MAAA,MAAA;AAAA,YAAAI,QAAAC,WAAAC,QAAAF,MAAAG,YAAAC,QAAAF,MAAAG;AAAAD,cAAAC;AAAAV,eAAAK,OAC6CX,SAAOe,KAAA;AAAAE,eAAA,MAAAC,UAAAP,OAAtCT,SAASiB,KAAKC,QAAQ,CAAA;AAAA,eAAAT;AAAAA,MAAA,GAAA;AAAA,IACpC,GAAA,GAAA,IAAA;AAAAL,WAAAF,MACC,MAAM;AACN,UAAI,OAAOR,UAAU,UAAU;AAC7B,gBAAA,MAAA;AAAA,cAAAyB,QAAAC,WAAAC,QAAAF,MAAAP,YAAAU,QAAAD,MAAAP;AAAAQ,gBAAAR;AAAAV,iBAAAe,OACiDzB,OAAK4B,KAAA;AAAAP,iBAAA,MAAAC,UAAAG,OAAvCnB,SAASiB,KAAKM,WAAW,CAAA;AAAA,iBAAAJ;AAAAA,QAAA,GAAA;AAAA,MAE1C;AACA,UAAI,OAAOzB,UAAU,UAAU;AAC7B,gBAAA,MAAA;AAAA,cAAA8B,QAAArB,OAAAA;AAAAC,iBAAAoB,OAAgD9B,KAAK;AAAAqB,iBAAA,MAAAC,UAAAQ,OAAjCxB,SAASiB,KAAKQ,WAAW,CAAA;AAAA,iBAAAD;AAAAA,QAAA,GAAA;AAAA,MAC/C;AACA,UAAI,OAAO9B,UAAU,WAAW;AAC9B,gBAAA,MAAA;AAAA,cAAAgC,QAAAvB,OAAAA;AAAAC,iBAAAsB,OAAA,MAAiDC,OAAOjC,KAAK,CAAC;AAAAqB,iBAAA,MAAAC,UAAAU,OAA1C1B,SAASiB,KAAKW,YAAY,CAAA;AAAA,iBAAAF;AAAAA,QAAA,GAAA;AAAA,MAChD;AACA,UAAIhC,UAAU,MAAM;AAClB,gBAAA,MAAA;AAAA,cAAAmC,SAAAC,QAAAA;AAAAf,iBAAA,MAAAC,UAAAa,QAAoB7B,SAASiB,KAAKc,SAAS,CAAA;AAAA,iBAAAF;AAAAA,QAAA,GAAA;AAAA,MAC7C;AACA,UAAInC,UAAUsC,QAAW;AACvB,gBAAA,MAAA;AAAA,cAAAC,SAAAC,QAAAA;AAAAnB,iBAAA,MAAAC,UAAAiB,QAAoBjC,SAASiB,KAAKc,SAAS,CAAA;AAAA,iBAAAE;AAAAA,QAAA,GAAA;AAAA,MAC7C;AACA,UAAI,OAAOvC,UAAU,YAAY;AAC/B,gBAAA,MAAA;AAAA,cAAAyC,SAAAhC,OAAAA;AAAAC,iBAAA+B,QAAA,MAC6CR,OAAOjC,KAAK,CAAC;AAAAqB,iBAAA,MAAAC,UAAAmB,QAA3CnC,SAASiB,KAAKmB,aAAa,CAAA;AAAA,iBAAAD;AAAAA,QAAA,GAAA;AAAA,MAE5C;AACA,UAAI5B,MAAMC,QAAQd,KAAK,GAAG;AACxB,eAAAH,gBACG8C,YAAU;AAAA,UACTxC;AAAAA,UACAD;AAAAA,UACAD;AAAAA,UACAG;AAAAA,UACAJ;AAAAA,QAAAA,CAAY;AAAA,MAGlB;AACA,UAAI,OAAOA,UAAU,UAAU;AAC7B,eAAAH,gBACG+C,aAAW;AAAA,UACVzC;AAAAA,UACAD;AAAAA,UACAD;AAAAA,UACAG;AAAAA,UACAJ;AAAAA,QAAAA,CAAY;AAAA,MAGlB;AACA,aAAAS,OAAAA;AAAAA,IACF,GAAC,IAAA;AAAAC,WAAAF,MACAP,aAAQ,MAAA;AAAA,UAAA4C,SAAAC,QAAAA;AAAApC,aAAAmC,QAAAhD,gBAEJkD,YAAU;AAAA,QAAC/C;AAAAA,MAAAA,CAAY,CAAA;AAAAqB,mBAAAC,UAAAuB,QADdG,KAAK1C,OAAAA,EAASiB,KAAK0B,SAAS,SAAS,CAAC,CAAA;AAAA,aAAAJ;AAAAA,IAAA,GAAA,GAGnD,IAAA;AAAAnC,WAAAF,MACAH,aAAaN,SAAS,KAAEmD,QAAAA,GAAiB,IAAA;AAAA7B,WAAA,MAAAC,UAAAd,MAxD/BF,OAAAA,EAASiB,KAAK4B,eAAepD,MAAM,CAAC,CAAA;AAAA,WAAAS;AAAAA,EAAA,GAAA;AA2DrD;AAEA,MAAMmC,aAAaA,CAAC;AAAA,EAClB3C;AAAAA,EACAI;AAAAA,EACAH;AAAAA,EACAE;AAAAA,EACAD;AAOF,MAAM;AACJ,QAAMI,SAASC,UAAAA;AACf,QAAM,CAAC6C,UAAUC,WAAW,IAAIC,aAAapD,SAASC,qBAAqB;AAE3E,MAAIH,MAAMuD,WAAW,GAAG;AACtB,YAAA,MAAA;AAAA,UAAAC,SAAAC,QAAAA,GAAAC,SAAAF,OAAAtC;AAAAR,aAAA8C,QAEKpD,YAAO,MAAA;AAAA,YAAAuD,SAAA3C,WAAA4C,SAAAD,OAAAzC,YAAA2C,SAAAD,OAAAxC;AAAAyC,eAAAzC;AAAAV,eAAAiD,QAEGvD,SAAOyD,MAAA;AAAAxC,eAAA,MAAAC,UAAAqC,QADHX,KAAK1C,OAAAA,EAASiB,KAAKC,UAAUlB,OAAAA,EAASiB,KAAKuC,WAAW,CAAC,CAAA;AAAA,eAAAH;AAAAA,MAAA,GAAA,GAGrED,MAAA;AAAArC,aAAA0C,CAAAA,QAAA;AAAA,YAAAC,MALU1D,SAASiB,KAAK0C,mBAAiBC,OAM7B5D,SAASiB,KAAK4C;AAAWH,gBAAAD,IAAAK,KAAA9C,UAAAkC,QAAAO,IAAAK,IAAAJ,GAAA;AAAAE,iBAAAH,IAAAM,KAAA/C,UAAAoC,QAAAK,IAAAM,IAAAH,IAAA;AAAA,eAAAH;AAAAA,MAAA,GAAA;AAAA,QAAAK,GAAA9B;AAAAA,QAAA+B,GAAA/B;AAAAA,MAAAA,CAAA;AAAA,aAAAkB;AAAAA,IAAA,GAAA;AAAA,EAG5C;AACA,UAAA,MAAA;AAAA,QAAAc,SAAAC,QAAAA,GAAAC,SAAAF,OAAApD,YAAAuD,SAAAD,OAAApD;AAAAV,WAAA4D,QAAAzE,gBAEK6E,UAAQ;AAAA,MACPC,SAASA,MAAMtB,YAAY,CAACD,UAAU;AAAA,MAAC,IACvCA,WAAQ;AAAA,eAAEA,SAAAA;AAAAA,MAAU;AAAA,IAAA,CAAA,GAAAoB,MAAA;AAAA9D,WAAA4D,QAErBlE,YAAO,MAAA;AAAA,UAAAwE,SAAAC,WAAAC,SAAAF,OAAA1D,YAAA6D,SAAAD,OAAA1D,aAAA4D,SAAAD,OAAA3D,aAAA6D,SAAAD,OAAA5D,aAAA8D,SAAAD,OAAA/D;AAAA0D,aAAAO,UAEMf,CAAAA,MAAM;AACdA,UAAEgB,gBAAAA;AACFhB,UAAEiB,yBAAAA;AACFhC,oBAAY,CAACD,UAAU;AAAA,MACzB;AAAC1C,aAAAkE,QAGMxE,SAAO2E,MAAA;AAAArE,aAAAuE,QAAA,MACoBjF,MAAMuD,QAAM2B,MAAA;AAAA7D,aAAA0C,CAAAA,QAAA;AAAA,YAAAuB,OAHvCtC,KAAK1C,OAAAA,EAASiB,KAAKC,UAAUlB,OAAAA,EAASiB,KAAKuC,WAAW,GAACyB,OAGjDjF,OAAAA,EAASiB,KAAKiE;AAAIF,iBAAAvB,IAAAK,KAAA9C,UAAAsD,QAAAb,IAAAK,IAAAkB,IAAA;AAAAC,iBAAAxB,IAAAM,KAAA/C,UAAA2D,QAAAlB,IAAAM,IAAAkB,IAAA;AAAA,eAAAxB;AAAAA,MAAA,GAAA;AAAA,QAAAK,GAAA9B;AAAAA,QAAA+B,GAAA/B;AAAAA,MAAAA,CAAA;AAAA,aAAAsC;AAAAA,IAAA,GAAA,GAElCJ,MAAA;AAAA9D,WAAA4D,QAAAzE,gBAEA4F,MAAI;AAAA,MAAA,IAACC,OAAI;AAAA,eAAEtC,SAAAA;AAAAA,MAAU;AAAA,MAAA,IAAAuC,WAAA;AAAA,YAAAC,SAAAnF,OAAAA;AAAAC,eAAAkF,QAAA/F,gBAEjBgG,KAAG;AAAA,UAACC,MAAM9F;AAAAA,UAAK2F,UACbA,CAACI,MAAMC,MAAM;AACZ,kBAAM3F,YAAY2F,EAAAA,MAAQhG,MAAMuD,SAAS;AACzC,mBAAA1D,gBACGC,WAAS;AAAA,cACRG;AAAAA,cACAD,OAAO+F;AAAAA,cACP1F;AAAAA,cACAF;AAAAA,cACAD,OAAOA,QAAQ;AAAA,YAAA,CAAC;AAAA,UAGtB;AAAA,QAAA,CAAC,CAAA;AAAAmB,qBAAAC,UAAAsE,QAbQtF,OAAAA,EAASiB,KAAK0E,aAAaC,QAAQ9F,OAAO,CAAC,CAAC,CAAA;AAAA,eAAAwF;AAAAA,MAAA;AAAA,IAAA,CAAA,GAAAnB,MAAA;AAAA/D,WAAA4D,QAAAzE,gBAiB1D4F,MAAI;AAAA,MAAA,IAACC,OAAI;AAAA,eAAE,CAACtC,SAAAA;AAAAA,MAAU;AAAA,MAAA,IAAAuC,WAAA;AAAA,YAAAQ,SAAAC,QAAAA;AAAAD,eAAAhB,UAETf,CAAAA,MAAM;AACdA,YAAEgB,gBAAAA;AACFhB,YAAEiB,yBAAAA;AACFhC,sBAAY,CAACD,UAAU;AAAA,QACzB;AAAC/B,eAAA,MAAAC,UAAA6E,QACMnD,KAAK1C,OAAAA,EAASiB,KAAKC,UAAUlB,OAAAA,EAASiB,KAAKuC,WAAW,CAAC,CAAA;AAAA,eAAAqC;AAAAA,MAAA;AAAA,IAAA,CAAA,GAAA1B,MAAA;AAAApD,WAAA0C,CAAAA,QAAA;AAAA,UAAAsC,OA5CvD/F,OAAAA,EAASiB,KAAK0C,mBAAiBqC,OAkB7BhG,SAASiB,KAAK4C,aAAWoC,OA+BzBjG,OAAAA,EAASiB,KAAK4C;AAAWkC,eAAAtC,IAAAK,KAAA9C,UAAAgD,QAAAP,IAAAK,IAAAiC,IAAA;AAAAC,eAAAvC,IAAAM,KAAA/C,UAAAkD,QAAAT,IAAAM,IAAAiC,IAAA;AAAAC,eAAAxC,IAAAyC,KAAAlF,UAAAmD,QAAAV,IAAAyC,IAAAD,IAAA;AAAA,aAAAxC;AAAAA,IAAA,GAAA;AAAA,MAAAK,GAAA9B;AAAAA,MAAA+B,GAAA/B;AAAAA,MAAAkE,GAAAlE;AAAAA,IAAAA,CAAA;AAAA,WAAAgC;AAAAA,EAAA,GAAA;AAG5C;AAEA,MAAM1B,cAAcA,CAAC;AAAA,EACnB5C;AAAAA,EACAI;AAAAA,EACAH;AAAAA,EACAE;AAAAA,EACAD;AAOF,MAAM;AACJ,QAAMI,SAASC,UAAAA;AACf,QAAM,CAAC6C,UAAUC,WAAW,IAAIC,aAAapD,SAASC,qBAAqB;AAC3E,QAAMsG,OAAOC,OAAOD,KAAKzG,KAAK;AAC9B,QAAM2G,cAAcF,KAAKA,KAAKlD,SAAS,CAAC;AAExC,MAAIkD,KAAKlD,WAAW,GAAG;AACrB,YAAA,MAAA;AAAA,UAAAqD,SAAAC,SAAAA,GAAAC,SAAAF,OAAA1F;AAAAR,aAAAkG,QAEKxG,YAAO,MAAA;AAAA,YAAA2G,SAAA/F,WAAAgG,SAAAD,OAAA7F,YAAA+F,SAAAD,OAAA5F;AAAA6F,eAAA7F;AAAAV,eAAAqG,QAEG3G,SAAO6G,MAAA;AAAA5F,eAAA,MAAAC,UAAAyF,QADH/D,KAAK1C,OAAAA,EAASiB,KAAKC,UAAUlB,OAAAA,EAASiB,KAAKuC,WAAW,CAAC,CAAA;AAAA,eAAAiD;AAAAA,MAAA,GAAA,GAGrED,MAAA;AAAAzF,aAAA0C,CAAAA,QAAA;AAAA,YAAAmD,OALU5G,SAASiB,KAAK0C,mBAAiBkD,OAM7B7G,SAASiB,KAAK4C;AAAW+C,iBAAAnD,IAAAK,KAAA9C,UAAAsF,QAAA7C,IAAAK,IAAA8C,IAAA;AAAAC,iBAAApD,IAAAM,KAAA/C,UAAAwF,QAAA/C,IAAAM,IAAA8C,IAAA;AAAA,eAAApD;AAAAA,MAAA,GAAA;AAAA,QAAAK,GAAA9B;AAAAA,QAAA+B,GAAA/B;AAAAA,MAAAA,CAAA;AAAA,aAAAsE;AAAAA,IAAA,GAAA;AAAA,EAG5C;AACA,UAAA,MAAA;AAAA,QAAAQ,SAAAC,SAAAA,GAAAC,SAAAF,OAAAlG,YAAAqG,SAAAD,OAAAlG;AAAAV,WAAA0G,QAEKhH,WAAOP,gBACL6E,UAAQ;AAAA,MACPC,SAASA,MAAMtB,YAAY,CAACD,UAAU;AAAA,MAAC,IACvCA,WAAQ;AAAA,eAAEA,SAAAA;AAAAA,MAAU;AAAA,IAAA,CAAA,GAEvBkE,MAAA;AAAA5G,WAAA0G,QACAhH,YAAO,MAAA;AAAA,UAAAoH,SAAA3C,WAAA4C,SAAAD,OAAAtG,YAAAwG,SAAAD,OAAArG,aAAAuG,SAAAD,OAAAtG,aAAAwG,SAAAD,OAAAvG,aAAAyG,SAAAD,OAAA1G;AAAAsG,aAAArC,UAEMf,CAAAA,MAAM;AACdA,UAAEgB,gBAAAA;AACFhB,UAAEiB,yBAAAA;AACFhC,oBAAY,CAACD,UAAU;AAAA,MACzB;AAAC1C,aAAA8G,QAGMpH,SAAOsH,MAAA;AAAAhH,aAAAkH,QAAA,MACoBnB,KAAKlD,QAAMsE,MAAA;AAAAxG,aAAA0C,CAAAA,QAAA;AAAA,YAAA+D,QAHtC9E,KAAK1C,OAAAA,EAASiB,KAAKC,UAAUlB,OAAAA,EAASiB,KAAKuC,WAAW,GAACiE,QAGjDzH,OAAAA,EAASiB,KAAKiE;AAAIsC,kBAAA/D,IAAAK,KAAA9C,UAAAkG,QAAAzD,IAAAK,IAAA0D,KAAA;AAAAC,kBAAAhE,IAAAM,KAAA/C,UAAAsG,QAAA7D,IAAAM,IAAA0D,KAAA;AAAA,eAAAhE;AAAAA,MAAA,GAAA;AAAA,QAAAK,GAAA9B;AAAAA,QAAA+B,GAAA/B;AAAAA,MAAAA,CAAA;AAAA,aAAAkF;AAAAA,IAAA,GAAA,GAElCF,MAAA;AAAA5G,WAAA0G,QAAAvH,gBAEA4F,MAAI;AAAA,MAAA,IAACC,OAAI;AAAA,eAAEtC,SAAAA;AAAAA,MAAU;AAAA,MAAA,IAAAuC,WAAA;AAAA,YAAAqC,SAAAvH,OAAAA;AAAAC,eAAAsH,QAAAnI,gBAEjBgG,KAAG;AAAA,UAACC,MAAMW;AAAAA,UAAId,UACXsC,CAAAA,MAACpI,gBAEEC,WAAS;AAAA,YAAA,IACRE,QAAK;AAAA,qBAAEA,MAAMiI,CAAC;AAAA,YAAC;AAAA,YACf7H,SAAS6H;AAAAA,YACT5H,WAAWsG,gBAAgBsB;AAAAA,YAC3BhI;AAAAA,YACAE;AAAAA,YACAD,OAAOA,QAAQ;AAAA,UAAA,CAAC;AAAA,QAAA,CAGrB,CAAA;AAAAmB,qBAAAC,UAAA0G,QAbQ1H,OAAAA,EAASiB,KAAK0E,aAAaC,QAAQ9F,OAAO,CAAC,CAAC,CAAA;AAAA,eAAA4H;AAAAA,MAAA;AAAA,IAAA,CAAA,GAAAT,MAAA;AAAA7G,WAAA0G,QAAAvH,gBAiB1D4F,MAAI;AAAA,MAAA,IAACC,OAAI;AAAA,eAAE,CAACtC,SAAAA;AAAAA,MAAU;AAAA,MAAA,IAAAuC,WAAA;AAAA,YAAAuC,SAAA9B,QAAAA;AAAA8B,eAAA/C,UAETf,CAAAA,MAAM;AACdA,YAAEgB,gBAAAA;AACFhB,YAAEiB,yBAAAA;AACFhC,sBAAY,CAACD,UAAU;AAAA,QACzB;AAAC/B,eAAA,MAAAC,UAAA4G,QACMlF,KAAK1C,OAAAA,EAASiB,KAAKC,UAAUlB,OAAAA,EAASiB,KAAKuC,WAAW,CAAC,CAAA;AAAA,eAAAoE;AAAAA,MAAA;AAAA,IAAA,CAAA,GAAAX,MAAA;AAAAlG,WAAA0C,CAAAA,QAAA;AAAA,UAAAoE,OA9CvD7H,OAAAA,EAASiB,KAAK0C,mBAAiBmE,OAoB7B9H,SAASiB,KAAK4C,aAAWkE,QA+BzB/H,OAAAA,EAASiB,KAAK4C;AAAWgE,eAAApE,IAAAK,KAAA9C,UAAA8F,QAAArD,IAAAK,IAAA+D,IAAA;AAAAC,eAAArE,IAAAM,KAAA/C,UAAAgG,QAAAvD,IAAAM,IAAA+D,IAAA;AAAAC,gBAAAtE,IAAAyC,KAAAlF,UAAAiG,QAAAxD,IAAAyC,IAAA6B,KAAA;AAAA,aAAAtE;AAAAA,IAAA,GAAA;AAAA,MAAAK,GAAA9B;AAAAA,MAAA+B,GAAA/B;AAAAA,MAAAkE,GAAAlE;AAAAA,IAAAA,CAAA;AAAA,WAAA8E;AAAAA,EAAA,GAAA;AAG5C;AAIA,MAAMrE,aAAaA,CAACnD,UAA8B;AAChD,QAAMU,SAASC,UAAAA;AACf,QAAM,CAAC+H,WAAWC,YAAY,IAAIjF,aAAwB,QAAQ;AAElE,UAAA,MAAA;AAAA,QAAAkF,SAAAC,SAAAA;AAAAC,qBAAAF,QAAA,SAYMF,UAAAA,MAAgB,WACZ,MAAM;AACJK,gBAAUC,UACPC,UAAUC,KAAKC,UAAUnJ,MAAMI,OAAO,MAAM,CAAC,CAAC,EAC9CgJ,KACC,MAAM;AACJT,qBAAa,aAAa;AAC1BU,mBAAW,MAAM;AACfV,uBAAa,QAAQ;AAAA,QACvB,GAAG,IAAI;AAAA,MACT,GACCW,CAAAA,QAAQ;AACPC,gBAAQC,MAAM,oBAAoBF,GAAG;AACrCX,qBAAa,WAAW;AACxBU,mBAAW,MAAM;AACfV,uBAAa,QAAQ;AAAA,QACvB,GAAG,IAAI;AAAA,MACT,CACF;AAAA,IACJ,IACAjG,QAAS,IAAA;AAAA5B,WAAA8H,QAAA3I,gBAGdwJ,QAAM;AAAA,MAAA,IAAA1D,WAAA;AAAA,eAAA,CAAA9F,gBACJyJ,OAAK;AAAA,UAAA,IAAC5D,OAAI;AAAA,mBAAE4C,gBAAgB;AAAA,UAAQ;AAAA,UAAA,IAAA3C,WAAA;AAAA,mBAAA9F,gBAClC0J,QAAM,EAAA;AAAA,UAAA;AAAA,QAAA,CAAA,GAAA1J,gBAERyJ,OAAK;AAAA,UAAA,IAAC5D,OAAI;AAAA,mBAAE4C,gBAAgB;AAAA,UAAa;AAAA,UAAA,IAAA3C,WAAA;AAAA,mBAAA9F,gBACvC2J,cAAY;AAAA,cAACC,OAAO;AAAA,YAAA,CAAM;AAAA,UAAA;AAAA,QAAA,CAAA,GAAA5J,gBAE5ByJ,OAAK;AAAA,UAAA,IAAC5D,OAAI;AAAA,mBAAE4C,gBAAgB;AAAA,UAAW;AAAA,UAAA,IAAA3C,WAAA;AAAA,mBAAA9F,gBACrC6J,aAAW,EAAA;AAAA,UAAA;AAAA,QAAA,CAAA,CAAA;AAAA,MAAA;AAAA,IAAA,CAAA,CAAA;AAAArI,WAAA0C,CAAAA,QAAA;AAAA,UAAA4F,QAzCTrJ,OAAAA,EAASiB,KAAKqI,cAAYC,QAErB,GACVvB,UAAAA,MAAgB,WACZ,6BACAA,UAAAA,MAAgB,gBACd,+BACA,mCAAmC;AACzCqB,gBAAA5F,IAAAK,KAAA9C,UAAAkH,QAAAzE,IAAAK,IAAAuF,KAAA;AAAAE,gBAAA9F,IAAAM,KAAAyF,aAAAtB,QAAA,cAAAzE,IAAAM,IAAAwF,KAAA;AAAA,aAAA9F;AAAAA,IAAA,GAAA;AAAA,MAAAK,GAAA9B;AAAAA,MAAA+B,GAAA/B;AAAAA,IAAAA,CAAA;AAAA,WAAAkG;AAAAA,EAAA,GAAA;AAsCR;AAEA,MAAM9D,WAAWA,CAAC9E,UAAsD;AACtE,QAAMU,SAASC,UAAAA;AACf,UAAA,MAAA;AAAA,QAAAwJ,SAAAC,SAAAA;AAAAtB,qBAAAqB,QAAA,SAEanK,MAAM+E,SAAO,IAAA;AAAAtD,WAAA,MAAAC,UAAAyI,QACf/G,KACL1C,SAASiB,KAAK0I,UACdC;AAAAA,8BACsBtK,MAAMwD,WAAW,KAAK,CAAC;AAAA,WAE7CxD,MAAMwD,YACJ8G;AAAAA;AAAAA;AAAAA;AAAAA,WAKJ,CAAC,CAAA;AAAA,WAAAH;AAAAA,EAAA,GAAA;AAkBP;AAACI,eAAA,CAAA,OAAA,CAAA;"}
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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"}
@@ -51,6 +51,7 @@ const stylesFactory = (theme = "dark") => {
51
51
  const { colors, font, size, alpha, border } = tokens;
52
52
  const { fontFamily } = font;
53
53
  const t = (light, dark) => theme === "light" ? light : dark;
54
+ const wrapperSize = 320;
54
55
  return {
55
56
  logo: css`
56
57
  cursor: pointer;
@@ -69,7 +70,7 @@ const stylesFactory = (theme = "dark") => {
69
70
  `,
70
71
  selectWrapper: css`
71
72
  width: 100%;
72
- max-width: 300px;
73
+ max-width: ${wrapperSize}px;
73
74
  display: flex;
74
75
  flex-direction: column;
75
76
  gap: 0.375rem;
@@ -120,7 +121,7 @@ const stylesFactory = (theme = "dark") => {
120
121
  `,
121
122
  inputWrapper: css`
122
123
  width: 100%;
123
- max-width: 300px;
124
+ max-width: ${wrapperSize}px;
124
125
  display: flex;
125
126
  flex-direction: column;
126
127
  gap: 0.375rem;
@@ -143,6 +144,7 @@ const stylesFactory = (theme = "dark") => {
143
144
  `,
144
145
  input: css`
145
146
  appearance: none;
147
+ box-sizing: border-box;
146
148
  width: 100%;
147
149
  padding: 0.75rem;
148
150
  border-radius: 0.5rem;
@@ -1 +1 @@
1
- {"version":3,"file":"use-styles.js","sources":["../../../src/styles/use-styles.ts"],"sourcesContent":["import * as goober from 'goober'\nimport { createEffect, createSignal } from 'solid-js'\nimport { useTheme } from '../components/theme'\nimport { tokens } from './tokens'\nimport type { ButtonVariant } from '../components/button'\nimport type { Theme } from '../components/theme'\n\nconst buttonVariantColors: Record<\n ButtonVariant,\n { bg: string; hover: string; active: string; text: string; border: string }\n> = {\n primary: {\n bg: tokens.colors.purple[500],\n hover: tokens.colors.purple[600],\n active: tokens.colors.purple[700],\n text: '#fff',\n border: tokens.colors.purple[500],\n },\n secondary: {\n bg: tokens.colors.gray[800],\n hover: tokens.colors.gray[700],\n active: tokens.colors.gray[600],\n text: tokens.colors.gray[100],\n border: tokens.colors.gray[700],\n },\n info: {\n bg: tokens.colors.blue[500],\n hover: tokens.colors.blue[600],\n active: tokens.colors.blue[700],\n text: '#fff',\n border: tokens.colors.blue[500],\n },\n warning: {\n bg: tokens.colors.yellow[500],\n hover: tokens.colors.yellow[600],\n active: tokens.colors.yellow[700],\n text: '#fff',\n border: tokens.colors.yellow[500],\n },\n danger: {\n bg: tokens.colors.red[500],\n hover: tokens.colors.red[600],\n active: tokens.colors.red[700],\n text: '#fff',\n border: tokens.colors.red[500],\n },\n success: {\n bg: tokens.colors.green[500],\n hover: tokens.colors.green[600],\n active: tokens.colors.green[700],\n text: '#fff',\n border: tokens.colors.green[500],\n },\n}\nexport const css = goober.css\nconst stylesFactory = (theme: Theme = 'dark') => {\n const { colors, font, size, alpha, border } = tokens\n const { fontFamily } = font\n\n const t = (light: string, dark: string) => (theme === 'light' ? light : dark)\n\n return {\n logo: css`\n cursor: pointer;\n display: flex;\n flex-direction: column;\n background-color: transparent;\n border: none;\n width: ${size[12]};\n height: ${size[12]};\n font-family: ${fontFamily.sans};\n gap: ${tokens.size[0.5]};\n padding: 0px;\n &:hover {\n opacity: 0.7;\n }\n `,\n\n selectWrapper: css`\n width: 100%;\n max-width: 300px;\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n `,\n selectContainer: css`\n width: 100%;\n `,\n selectLabel: css`\n font-size: 0.875rem;\n font-weight: 500;\n color: ${t(colors.gray[900], colors.gray[100])};\n text-align: left;\n `,\n selectDescription: css`\n font-size: 0.8rem;\n color: ${t(colors.gray[500], colors.gray[400])};\n margin: 0;\n line-height: 1.3;\n text-align: left;\n `,\n select: css`\n appearance: none;\n width: 100%;\n padding: 0.75rem 3rem 0.75rem 0.75rem;\n border-radius: 0.5rem;\n background-color: ${t(colors.gray[50], colors.darkGray[800])};\n color: ${t(colors.gray[900], colors.gray[100])};\n border: 1px solid ${t(colors.gray[300], colors.gray[700])};\n font-size: 0.875rem;\n transition: all 0.2s ease;\n cursor: pointer;\n\n /* Custom arrow */\n background-image: url(\"data:image/svg+xml;utf8,<svg fill='%236b7280' height='20' viewBox='0 0 24 24' width='20' xmlns='http://www.w3.org/2000/svg'><path d='M7 10l5 5 5-5z'/></svg>\");\n background-repeat: no-repeat;\n background-position: right 0.75rem center;\n background-size: 1.25rem;\n\n &:hover {\n border-color: ${t(colors.gray[400], colors.gray[600])};\n }\n\n &:focus {\n outline: none;\n border-color: ${colors.purple[400]};\n box-shadow: 0 0 0 3px ${colors.purple[400]}${alpha[20]};\n }\n `,\n inputWrapper: css`\n width: 100%;\n max-width: 300px;\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n `,\n inputContainer: css`\n width: 100%;\n `,\n inputLabel: css`\n font-size: 0.875rem;\n font-weight: 500;\n color: ${t(colors.gray[900], colors.gray[100])};\n text-align: left;\n `,\n inputDescription: css`\n font-size: 0.8rem;\n color: ${t(colors.gray[500], colors.gray[400])};\n margin: 0;\n line-height: 1.3;\n text-align: left;\n `,\n input: css`\n appearance: none;\n width: 100%;\n padding: 0.75rem;\n border-radius: 0.5rem;\n background-color: ${t(colors.gray[50], colors.darkGray[800])};\n color: ${t(colors.gray[900], colors.gray[100])};\n border: 1px solid ${t(colors.gray[300], colors.gray[700])};\n font-size: 0.875rem;\n font-family: ${fontFamily.mono};\n transition: all 0.2s ease;\n\n &::placeholder {\n color: ${t(colors.gray[400], colors.gray[500])};\n }\n\n &:hover {\n border-color: ${t(colors.gray[400], colors.gray[600])};\n }\n\n &:focus {\n outline: none;\n border-color: ${t(colors.purple[500], colors.purple[400])};\n box-shadow: 0 0 0 3px\n ${t(colors.purple[100] + alpha[20], colors.purple[400] + alpha[20])};\n }\n `,\n checkboxWrapper: css`\n display: flex;\n align-items: flex-start;\n gap: 0.75rem;\n cursor: pointer;\n user-select: none;\n padding: 0.5rem;\n border-radius: 0.5rem;\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: ${t(colors.gray[100], colors.darkGray[800])};\n }\n `,\n checkboxContainer: css`\n width: 100%;\n `,\n checkboxLabelContainer: css`\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n flex: 1;\n `,\n checkbox: css`\n appearance: none;\n width: 1.25rem;\n height: 1.25rem;\n border: 2px solid ${t(colors.gray[300], colors.gray[700])};\n border-radius: 0.375rem;\n background-color: ${t(colors.gray[50], colors.darkGray[800])};\n display: grid;\n place-items: center;\n transition: all 0.2s ease;\n flex-shrink: 0;\n margin-top: 0.125rem;\n\n &:hover {\n border-color: ${t(colors.purple[500], colors.purple[400])};\n }\n\n &:checked {\n background-color: ${t(colors.purple[500], colors.purple[700])};\n border-color: ${t(colors.purple[500], colors.purple[700])};\n }\n\n &:checked::after {\n content: '';\n width: 0.4rem;\n height: 0.6rem;\n border: solid ${t('#fff', colors.gray[100])};\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n margin-top: -3px;\n }\n `,\n checkboxLabel: css`\n color: ${t(colors.gray[900], colors.gray[100])};\n font-size: 0.875rem;\n font-weight: 500;\n line-height: 1.4;\n text-align: left;\n `,\n checkboxDescription: css`\n color: ${t(colors.gray[500], colors.gray[400])};\n font-size: 0.8rem;\n line-height: 1.3;\n text-align: left;\n `,\n button: {\n base: css`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-family: ${tokens.font.fontFamily.sans};\n font-size: 0.8rem;\n font-weight: 500;\n border-radius: 0.2rem;\n padding: 0.2rem 0.6rem;\n cursor: pointer;\n transition:\n background 0.2s,\n color 0.2s,\n border 0.2s,\n box-shadow 0.2s;\n outline: none;\n border-width: 1px;\n border-style: solid;\n `,\n variant(variant: ButtonVariant, outline?: boolean, ghost?: boolean) {\n const v = buttonVariantColors[variant]\n if (ghost) {\n return css`\n background: transparent;\n color: ${t(v.bg, v.bg)};\n border-color: transparent;\n &:hover {\n background: ${t(colors.purple[100], colors.darkGray[700])};\n }\n &:active {\n background: ${t(colors.purple[200], colors.darkGray[800])};\n }\n `\n }\n if (outline) {\n return css`\n background: transparent;\n color: ${t(v.bg, v.bg)};\n border-color: ${t(v.bg, v.bg)};\n &:hover {\n background: ${t(colors.purple[100], colors.darkGray[700])};\n border-color: ${t(v.hover, v.hover)};\n }\n &:active {\n background: ${t(colors.purple[200], colors.darkGray[800])};\n border-color: ${t(v.active, v.active)};\n }\n `\n }\n // Default solid button\n return css`\n background: ${t(v.bg, v.bg)};\n color: ${t(v.text, v.text)};\n border-color: ${t(v.border, v.border)};\n &:hover {\n background: ${t(v.hover, v.hover)};\n border-color: ${t(v.hover, v.hover)};\n }\n &:active {\n background: ${t(v.active, v.active)};\n border-color: ${t(v.active, v.active)};\n }\n `\n },\n },\n tag: {\n dot: (color: keyof typeof tokens.colors) => css`\n width: ${tokens.size[1.5]};\n height: ${tokens.size[1.5]};\n border-radius: ${tokens.border.radius.full};\n background-color: ${t(\n tokens.colors[color][500],\n tokens.colors[color][500],\n )};\n `,\n base: css`\n display: flex;\n gap: ${tokens.size[1.5]};\n box-sizing: border-box;\n height: ${tokens.size[6.5]};\n background: ${t(colors.gray[50], colors.darkGray[500])};\n color: ${t(colors.gray[700], colors.gray[300])};\n border-radius: ${tokens.border.radius.sm};\n font-size: ${font.size.sm};\n padding: ${tokens.size[1]};\n padding-left: ${tokens.size[1.5]};\n align-items: center;\n font-weight: ${font.weight.medium};\n border: ${t('1px solid ' + colors.gray[300], '1px solid transparent')};\n user-select: none;\n position: relative;\n &:focus-visible {\n outline-offset: 2px;\n outline: 2px solid ${t(colors.blue[700], colors.blue[800])};\n }\n `,\n label: css`\n font-size: ${font.size.xs};\n `,\n count: css`\n font-size: ${font.size.xs};\n padding: 0 5px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: ${t(colors.gray[500], colors.gray[400])};\n background-color: ${t(colors.gray[200], colors.darkGray[300])};\n border-radius: 2px;\n font-variant-numeric: tabular-nums;\n height: ${tokens.size[4.5]};\n `,\n },\n tree: {\n info: css`\n color: ${t(colors.gray[500], colors.gray[500])};\n font-size: ${font.size.xs};\n margin-right: ${size[1]};\n `,\n actionButton: css`\n background-color: transparent;\n color: ${t(colors.gray[500], colors.gray[500])};\n border: none;\n display: inline-flex;\n padding: 0px;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n width: ${size[3]};\n height: ${size[3]};\n position: relative;\n z-index: 1;\n\n &:hover svg {\n color: ${t(colors.gray[600], colors.gray[400])};\n }\n\n &:focus-visible {\n border-radius: ${border.radius.xs};\n outline: 2px solid ${t(colors.blue[700], colors.blue[800])};\n outline-offset: 2px;\n }\n `,\n expanderContainer: css`\n position: relative;\n `,\n expander: css`\n position: absolute;\n cursor: pointer;\n left: -16px;\n top: 3px;\n & path {\n stroke: ${t(colors.blue[400], colors.blue[300])};\n }\n & svg {\n width: ${size[3]};\n height: ${size[3]};\n }\n\n display: inline-flex;\n align-items: center;\n transition: all 0.1s ease;\n `,\n expandedLine: (hasBorder: boolean) => css`\n display: block;\n padding-left: 0.75rem;\n margin-left: -0.7rem;\n ${hasBorder\n ? `border-left: 1px solid ${t(colors.blue[400], colors.blue[300])};`\n : ''}\n `,\n collapsible: css`\n cursor: pointer;\n transition: all 0.2s ease;\n &:hover {\n background-color: ${t(colors.gray[100], colors.darkGray[700])};\n border-radius: ${tokens.border.radius.sm};\n padding: 0 ${tokens.size[1]};\n }\n `,\n actions: css`\n display: inline-flex;\n margin-left: ${size[2]};\n gap: ${size[2]};\n align-items: center;\n & svg {\n height: 12px;\n width: 12px;\n }\n `,\n valueCollapsed: css`\n color: ${t(colors.gray[500], colors.gray[400])};\n `,\n valueFunction: css`\n color: ${t(colors.cyan[500], colors.cyan[400])};\n `,\n valueString: css`\n color: ${t(colors.green[500], colors.green[400])};\n `,\n valueNumber: css`\n color: ${t(colors.yellow[500], colors.yellow[400])};\n `,\n valueBoolean: css`\n color: ${t(colors.pink[500], colors.pink[400])};\n `,\n valueNull: css`\n color: ${t(colors.gray[500], colors.gray[400])};\n font-style: italic;\n `,\n valueKey: css`\n color: ${t(colors.blue[400], colors.blue[300])};\n `,\n valueBraces: css`\n color: ${colors.gray[500]};\n `,\n valueContainer: (isRoot: boolean) => css`\n display: block;\n margin-left: ${isRoot ? '0' : '1rem'};\n\n &:not(:hover) .actions {\n display: none;\n }\n\n &:hover .actions {\n display: inline-flex;\n }\n `,\n },\n header: {\n row: css`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: ${tokens.size[2]} ${tokens.size[2.5]};\n gap: ${tokens.size[2.5]};\n border-bottom: ${t(colors.gray[300], colors.darkGray[500])} 1px solid;\n align-items: center;\n `,\n logoAndToggleContainer: css`\n display: flex;\n gap: ${tokens.size[3]};\n align-items: center;\n & > button {\n padding: 0;\n background: transparent;\n border: none;\n display: flex;\n gap: ${size[0.5]};\n flex-direction: column;\n }\n `,\n logo: css`\n cursor: pointer;\n display: flex;\n flex-direction: column;\n background-color: transparent;\n border: none;\n gap: ${tokens.size[0.5]};\n padding: 0px;\n &:hover {\n opacity: 0.7;\n }\n &:focus-visible {\n outline-offset: 4px;\n border-radius: ${border.radius.xs};\n outline: 2px solid ${colors.blue[800]};\n }\n `,\n tanstackLogo: css`\n font-size: ${font.size.md};\n font-weight: ${font.weight.bold};\n line-height: ${font.lineHeight.xs};\n white-space: nowrap;\n color: ${t(colors.gray[700], colors.gray[300])};\n `,\n flavorLogo: (flavorLight: string, flavorDark: string) => css`\n font-weight: ${font.weight.semibold};\n font-size: ${font.size.xs};\n background: linear-gradient(to right, ${t(flavorLight, flavorDark)});\n background-clip: text;\n -webkit-background-clip: text;\n line-height: 1;\n -webkit-text-fill-color: transparent;\n white-space: nowrap;\n `,\n },\n section: {\n main: css`\n margin-bottom: 2rem;\n padding: 1.5rem;\n background-color: ${t(colors.gray[50], colors.darkGray[800])};\n border: 1px solid ${t(colors.gray[300], colors.gray[700])};\n border-radius: 0.75rem;\n box-shadow: ${t(\n '0 1px 3px rgba(0,0,0,0.06)',\n '0 1px 3px rgba(0,0,0,0.18)',\n )};\n `,\n title: css`\n font-size: 1.125rem;\n font-weight: 600;\n color: ${t(colors.gray[900], colors.gray[100])};\n margin: 0 0 1rem 0;\n padding-bottom: 0.5rem;\n border-bottom: 1px solid ${t(colors.gray[300], colors.gray[700])};\n display: flex;\n align-items: center;\n gap: 0.5rem;\n text-align: left;\n `,\n icon: css`\n height: 20px;\n width: 20px;\n & > svg {\n height: 100%;\n width: 100%;\n }\n color: ${t(colors.purple[500], colors.purple[400])};\n `,\n description: css`\n color: ${t(colors.gray[500], colors.gray[400])};\n font-size: 0.875rem;\n margin: 0 0 1.5rem 0;\n line-height: 1.5;\n text-align: left;\n `,\n },\n mainPanel: {\n panel: (withPadding: boolean) => css`\n padding: ${withPadding ? tokens.size[4] : 0};\n background: ${t(colors.gray[50], colors.darkGray[700])};\n overflow-y: auto;\n height: 100%;\n `,\n },\n }\n}\n\nexport function useStyles() {\n const { theme } = useTheme()\n const [styles, setStyles] = createSignal(stylesFactory(theme()))\n createEffect(() => {\n setStyles(stylesFactory(theme()))\n })\n return styles\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-styles.js","sources":["../../../src/styles/use-styles.ts"],"sourcesContent":["import * as goober from 'goober'\nimport { createEffect, createSignal } from 'solid-js'\nimport { useTheme } from '../components/theme'\nimport { tokens } from './tokens'\nimport type { ButtonVariant } from '../components/button'\nimport type { Theme } from '../components/theme'\n\nconst buttonVariantColors: Record<\n ButtonVariant,\n { bg: string; hover: string; active: string; text: string; border: string }\n> = {\n primary: {\n bg: tokens.colors.purple[500],\n hover: tokens.colors.purple[600],\n active: tokens.colors.purple[700],\n text: '#fff',\n border: tokens.colors.purple[500],\n },\n secondary: {\n bg: tokens.colors.gray[800],\n hover: tokens.colors.gray[700],\n active: tokens.colors.gray[600],\n text: tokens.colors.gray[100],\n border: tokens.colors.gray[700],\n },\n info: {\n bg: tokens.colors.blue[500],\n hover: tokens.colors.blue[600],\n active: tokens.colors.blue[700],\n text: '#fff',\n border: tokens.colors.blue[500],\n },\n warning: {\n bg: tokens.colors.yellow[500],\n hover: tokens.colors.yellow[600],\n active: tokens.colors.yellow[700],\n text: '#fff',\n border: tokens.colors.yellow[500],\n },\n danger: {\n bg: tokens.colors.red[500],\n hover: tokens.colors.red[600],\n active: tokens.colors.red[700],\n text: '#fff',\n border: tokens.colors.red[500],\n },\n success: {\n bg: tokens.colors.green[500],\n hover: tokens.colors.green[600],\n active: tokens.colors.green[700],\n text: '#fff',\n border: tokens.colors.green[500],\n },\n}\nexport const css = goober.css\nconst stylesFactory = (theme: Theme = 'dark') => {\n const { colors, font, size, alpha, border } = tokens\n const { fontFamily } = font\n\n const t = (light: string, dark: string) => (theme === 'light' ? light : dark)\n\n const wrapperSize = 320\n\n return {\n logo: css`\n cursor: pointer;\n display: flex;\n flex-direction: column;\n background-color: transparent;\n border: none;\n width: ${size[12]};\n height: ${size[12]};\n font-family: ${fontFamily.sans};\n gap: ${tokens.size[0.5]};\n padding: 0px;\n &:hover {\n opacity: 0.7;\n }\n `,\n\n selectWrapper: css`\n width: 100%;\n max-width: ${wrapperSize}px;\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n `,\n selectContainer: css`\n width: 100%;\n `,\n selectLabel: css`\n font-size: 0.875rem;\n font-weight: 500;\n color: ${t(colors.gray[900], colors.gray[100])};\n text-align: left;\n `,\n selectDescription: css`\n font-size: 0.8rem;\n color: ${t(colors.gray[500], colors.gray[400])};\n margin: 0;\n line-height: 1.3;\n text-align: left;\n `,\n select: css`\n appearance: none;\n width: 100%;\n padding: 0.75rem 3rem 0.75rem 0.75rem;\n border-radius: 0.5rem;\n background-color: ${t(colors.gray[50], colors.darkGray[800])};\n color: ${t(colors.gray[900], colors.gray[100])};\n border: 1px solid ${t(colors.gray[300], colors.gray[700])};\n font-size: 0.875rem;\n transition: all 0.2s ease;\n cursor: pointer;\n\n /* Custom arrow */\n background-image: url(\"data:image/svg+xml;utf8,<svg fill='%236b7280' height='20' viewBox='0 0 24 24' width='20' xmlns='http://www.w3.org/2000/svg'><path d='M7 10l5 5 5-5z'/></svg>\");\n background-repeat: no-repeat;\n background-position: right 0.75rem center;\n background-size: 1.25rem;\n\n &:hover {\n border-color: ${t(colors.gray[400], colors.gray[600])};\n }\n\n &:focus {\n outline: none;\n border-color: ${colors.purple[400]};\n box-shadow: 0 0 0 3px ${colors.purple[400]}${alpha[20]};\n }\n `,\n inputWrapper: css`\n width: 100%;\n max-width: ${wrapperSize}px;\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n `,\n inputContainer: css`\n width: 100%;\n `,\n inputLabel: css`\n font-size: 0.875rem;\n font-weight: 500;\n color: ${t(colors.gray[900], colors.gray[100])};\n text-align: left;\n `,\n inputDescription: css`\n font-size: 0.8rem;\n color: ${t(colors.gray[500], colors.gray[400])};\n margin: 0;\n line-height: 1.3;\n text-align: left;\n `,\n input: css`\n appearance: none;\n box-sizing: border-box;\n width: 100%;\n padding: 0.75rem;\n border-radius: 0.5rem;\n background-color: ${t(colors.gray[50], colors.darkGray[800])};\n color: ${t(colors.gray[900], colors.gray[100])};\n border: 1px solid ${t(colors.gray[300], colors.gray[700])};\n font-size: 0.875rem;\n font-family: ${fontFamily.mono};\n transition: all 0.2s ease;\n\n &::placeholder {\n color: ${t(colors.gray[400], colors.gray[500])};\n }\n\n &:hover {\n border-color: ${t(colors.gray[400], colors.gray[600])};\n }\n\n &:focus {\n outline: none;\n border-color: ${t(colors.purple[500], colors.purple[400])};\n box-shadow: 0 0 0 3px\n ${t(colors.purple[100] + alpha[20], colors.purple[400] + alpha[20])};\n }\n `,\n checkboxWrapper: css`\n display: flex;\n align-items: flex-start;\n gap: 0.75rem;\n cursor: pointer;\n user-select: none;\n padding: 0.5rem;\n border-radius: 0.5rem;\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: ${t(colors.gray[100], colors.darkGray[800])};\n }\n `,\n checkboxContainer: css`\n width: 100%;\n `,\n checkboxLabelContainer: css`\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n flex: 1;\n `,\n checkbox: css`\n appearance: none;\n width: 1.25rem;\n height: 1.25rem;\n border: 2px solid ${t(colors.gray[300], colors.gray[700])};\n border-radius: 0.375rem;\n background-color: ${t(colors.gray[50], colors.darkGray[800])};\n display: grid;\n place-items: center;\n transition: all 0.2s ease;\n flex-shrink: 0;\n margin-top: 0.125rem;\n\n &:hover {\n border-color: ${t(colors.purple[500], colors.purple[400])};\n }\n\n &:checked {\n background-color: ${t(colors.purple[500], colors.purple[700])};\n border-color: ${t(colors.purple[500], colors.purple[700])};\n }\n\n &:checked::after {\n content: '';\n width: 0.4rem;\n height: 0.6rem;\n border: solid ${t('#fff', colors.gray[100])};\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n margin-top: -3px;\n }\n `,\n checkboxLabel: css`\n color: ${t(colors.gray[900], colors.gray[100])};\n font-size: 0.875rem;\n font-weight: 500;\n line-height: 1.4;\n text-align: left;\n `,\n checkboxDescription: css`\n color: ${t(colors.gray[500], colors.gray[400])};\n font-size: 0.8rem;\n line-height: 1.3;\n text-align: left;\n `,\n button: {\n base: css`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-family: ${tokens.font.fontFamily.sans};\n font-size: 0.8rem;\n font-weight: 500;\n border-radius: 0.2rem;\n padding: 0.2rem 0.6rem;\n cursor: pointer;\n transition:\n background 0.2s,\n color 0.2s,\n border 0.2s,\n box-shadow 0.2s;\n outline: none;\n border-width: 1px;\n border-style: solid;\n `,\n variant(variant: ButtonVariant, outline?: boolean, ghost?: boolean) {\n const v = buttonVariantColors[variant]\n if (ghost) {\n return css`\n background: transparent;\n color: ${t(v.bg, v.bg)};\n border-color: transparent;\n &:hover {\n background: ${t(colors.purple[100], colors.darkGray[700])};\n }\n &:active {\n background: ${t(colors.purple[200], colors.darkGray[800])};\n }\n `\n }\n if (outline) {\n return css`\n background: transparent;\n color: ${t(v.bg, v.bg)};\n border-color: ${t(v.bg, v.bg)};\n &:hover {\n background: ${t(colors.purple[100], colors.darkGray[700])};\n border-color: ${t(v.hover, v.hover)};\n }\n &:active {\n background: ${t(colors.purple[200], colors.darkGray[800])};\n border-color: ${t(v.active, v.active)};\n }\n `\n }\n // Default solid button\n return css`\n background: ${t(v.bg, v.bg)};\n color: ${t(v.text, v.text)};\n border-color: ${t(v.border, v.border)};\n &:hover {\n background: ${t(v.hover, v.hover)};\n border-color: ${t(v.hover, v.hover)};\n }\n &:active {\n background: ${t(v.active, v.active)};\n border-color: ${t(v.active, v.active)};\n }\n `\n },\n },\n tag: {\n dot: (color: keyof typeof tokens.colors) => css`\n width: ${tokens.size[1.5]};\n height: ${tokens.size[1.5]};\n border-radius: ${tokens.border.radius.full};\n background-color: ${t(\n tokens.colors[color][500],\n tokens.colors[color][500],\n )};\n `,\n base: css`\n display: flex;\n gap: ${tokens.size[1.5]};\n box-sizing: border-box;\n height: ${tokens.size[6.5]};\n background: ${t(colors.gray[50], colors.darkGray[500])};\n color: ${t(colors.gray[700], colors.gray[300])};\n border-radius: ${tokens.border.radius.sm};\n font-size: ${font.size.sm};\n padding: ${tokens.size[1]};\n padding-left: ${tokens.size[1.5]};\n align-items: center;\n font-weight: ${font.weight.medium};\n border: ${t('1px solid ' + colors.gray[300], '1px solid transparent')};\n user-select: none;\n position: relative;\n &:focus-visible {\n outline-offset: 2px;\n outline: 2px solid ${t(colors.blue[700], colors.blue[800])};\n }\n `,\n label: css`\n font-size: ${font.size.xs};\n `,\n count: css`\n font-size: ${font.size.xs};\n padding: 0 5px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: ${t(colors.gray[500], colors.gray[400])};\n background-color: ${t(colors.gray[200], colors.darkGray[300])};\n border-radius: 2px;\n font-variant-numeric: tabular-nums;\n height: ${tokens.size[4.5]};\n `,\n },\n tree: {\n info: css`\n color: ${t(colors.gray[500], colors.gray[500])};\n font-size: ${font.size.xs};\n margin-right: ${size[1]};\n `,\n actionButton: css`\n background-color: transparent;\n color: ${t(colors.gray[500], colors.gray[500])};\n border: none;\n display: inline-flex;\n padding: 0px;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n width: ${size[3]};\n height: ${size[3]};\n position: relative;\n z-index: 1;\n\n &:hover svg {\n color: ${t(colors.gray[600], colors.gray[400])};\n }\n\n &:focus-visible {\n border-radius: ${border.radius.xs};\n outline: 2px solid ${t(colors.blue[700], colors.blue[800])};\n outline-offset: 2px;\n }\n `,\n expanderContainer: css`\n position: relative;\n `,\n expander: css`\n position: absolute;\n cursor: pointer;\n left: -16px;\n top: 3px;\n & path {\n stroke: ${t(colors.blue[400], colors.blue[300])};\n }\n & svg {\n width: ${size[3]};\n height: ${size[3]};\n }\n\n display: inline-flex;\n align-items: center;\n transition: all 0.1s ease;\n `,\n expandedLine: (hasBorder: boolean) => css`\n display: block;\n padding-left: 0.75rem;\n margin-left: -0.7rem;\n ${hasBorder\n ? `border-left: 1px solid ${t(colors.blue[400], colors.blue[300])};`\n : ''}\n `,\n collapsible: css`\n cursor: pointer;\n transition: all 0.2s ease;\n &:hover {\n background-color: ${t(colors.gray[100], colors.darkGray[700])};\n border-radius: ${tokens.border.radius.sm};\n padding: 0 ${tokens.size[1]};\n }\n `,\n actions: css`\n display: inline-flex;\n margin-left: ${size[2]};\n gap: ${size[2]};\n align-items: center;\n & svg {\n height: 12px;\n width: 12px;\n }\n `,\n valueCollapsed: css`\n color: ${t(colors.gray[500], colors.gray[400])};\n `,\n valueFunction: css`\n color: ${t(colors.cyan[500], colors.cyan[400])};\n `,\n valueString: css`\n color: ${t(colors.green[500], colors.green[400])};\n `,\n valueNumber: css`\n color: ${t(colors.yellow[500], colors.yellow[400])};\n `,\n valueBoolean: css`\n color: ${t(colors.pink[500], colors.pink[400])};\n `,\n valueNull: css`\n color: ${t(colors.gray[500], colors.gray[400])};\n font-style: italic;\n `,\n valueKey: css`\n color: ${t(colors.blue[400], colors.blue[300])};\n `,\n valueBraces: css`\n color: ${colors.gray[500]};\n `,\n valueContainer: (isRoot: boolean) => css`\n display: block;\n margin-left: ${isRoot ? '0' : '1rem'};\n\n &:not(:hover) .actions {\n display: none;\n }\n\n &:hover .actions {\n display: inline-flex;\n }\n `,\n },\n header: {\n row: css`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: ${tokens.size[2]} ${tokens.size[2.5]};\n gap: ${tokens.size[2.5]};\n border-bottom: ${t(colors.gray[300], colors.darkGray[500])} 1px solid;\n align-items: center;\n `,\n logoAndToggleContainer: css`\n display: flex;\n gap: ${tokens.size[3]};\n align-items: center;\n & > button {\n padding: 0;\n background: transparent;\n border: none;\n display: flex;\n gap: ${size[0.5]};\n flex-direction: column;\n }\n `,\n logo: css`\n cursor: pointer;\n display: flex;\n flex-direction: column;\n background-color: transparent;\n border: none;\n gap: ${tokens.size[0.5]};\n padding: 0px;\n &:hover {\n opacity: 0.7;\n }\n &:focus-visible {\n outline-offset: 4px;\n border-radius: ${border.radius.xs};\n outline: 2px solid ${colors.blue[800]};\n }\n `,\n tanstackLogo: css`\n font-size: ${font.size.md};\n font-weight: ${font.weight.bold};\n line-height: ${font.lineHeight.xs};\n white-space: nowrap;\n color: ${t(colors.gray[700], colors.gray[300])};\n `,\n flavorLogo: (flavorLight: string, flavorDark: string) => css`\n font-weight: ${font.weight.semibold};\n font-size: ${font.size.xs};\n background: linear-gradient(to right, ${t(flavorLight, flavorDark)});\n background-clip: text;\n -webkit-background-clip: text;\n line-height: 1;\n -webkit-text-fill-color: transparent;\n white-space: nowrap;\n `,\n },\n section: {\n main: css`\n margin-bottom: 2rem;\n padding: 1.5rem;\n background-color: ${t(colors.gray[50], colors.darkGray[800])};\n border: 1px solid ${t(colors.gray[300], colors.gray[700])};\n border-radius: 0.75rem;\n box-shadow: ${t(\n '0 1px 3px rgba(0,0,0,0.06)',\n '0 1px 3px rgba(0,0,0,0.18)',\n )};\n `,\n title: css`\n font-size: 1.125rem;\n font-weight: 600;\n color: ${t(colors.gray[900], colors.gray[100])};\n margin: 0 0 1rem 0;\n padding-bottom: 0.5rem;\n border-bottom: 1px solid ${t(colors.gray[300], colors.gray[700])};\n display: flex;\n align-items: center;\n gap: 0.5rem;\n text-align: left;\n `,\n icon: css`\n height: 20px;\n width: 20px;\n & > svg {\n height: 100%;\n width: 100%;\n }\n color: ${t(colors.purple[500], colors.purple[400])};\n `,\n description: css`\n color: ${t(colors.gray[500], colors.gray[400])};\n font-size: 0.875rem;\n margin: 0 0 1.5rem 0;\n line-height: 1.5;\n text-align: left;\n `,\n },\n mainPanel: {\n panel: (withPadding: boolean) => css`\n padding: ${withPadding ? tokens.size[4] : 0};\n background: ${t(colors.gray[50], colors.darkGray[700])};\n overflow-y: auto;\n height: 100%;\n `,\n },\n }\n}\n\nexport function useStyles() {\n const { theme } = useTheme()\n const [styles, setStyles] = createSignal(stylesFactory(theme()))\n createEffect(() => {\n setStyles(stylesFactory(theme()))\n })\n return styles\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ type CollapsibleKeys<T, TPrefix extends string = ''> = T extends ReadonlyArray<infer U> ? (TPrefix extends '' ? '' : TPrefix) | CollapsibleKeys<U, `${TPrefix}[${number}]`> : T extends object ? (TPrefix extends '' ? '' : TPrefix) | {
2
+ [K in Extract<keyof T, string>]: CollapsibleKeys<T[K], TPrefix extends '' ? `${K}` : `${TPrefix}.${K}`>;
3
+ }[Extract<keyof T, string>] : never;
4
+ export type CollapsiblePaths<T> = CollapsibleKeys<T> extends string ? CollapsibleKeys<T> : never;
5
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/devtools-ui",
3
- "version": "0.3.5",
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",
@@ -46,13 +46,13 @@
46
46
  "dependencies": {
47
47
  "clsx": "^2.1.1",
48
48
  "goober": "^2.1.16",
49
- "solid-js": "^1.9.7"
49
+ "solid-js": "^1.9.9"
50
50
  },
51
51
  "peerDependencies": {
52
52
  "solid-js": ">=1.9.7"
53
53
  },
54
54
  "devDependencies": {
55
- "vite-plugin-solid": "^2.11.6"
55
+ "vite-plugin-solid": "^2.11.8"
56
56
  },
57
57
  "scripts": {
58
58
  "clean": "premove ./build ./dist",
@@ -2,11 +2,13 @@ import { For, Match, Show, Switch, createSignal } from 'solid-js'
2
2
  import clsx from 'clsx'
3
3
  import { css, useStyles } from '../styles/use-styles'
4
4
  import { CopiedCopier, Copier, ErrorCopier } from './icons'
5
+ import type { CollapsiblePaths } from '../utils/deep-keys'
5
6
 
6
- export function JsonTree(props: {
7
- value: any
7
+ export function JsonTree<TData, TName extends CollapsiblePaths<TData>>(props: {
8
+ value: TData
8
9
  copyable?: boolean
9
10
  defaultExpansionDepth?: number
11
+ collapsePaths?: Array<TName>
10
12
  }) {
11
13
  return (
12
14
  <JsonValue
@@ -15,6 +17,8 @@ export function JsonTree(props: {
15
17
  copyable={props.copyable}
16
18
  depth={0}
17
19
  defaultExpansionDepth={props.defaultExpansionDepth ?? 1}
20
+ path=""
21
+ collapsePaths={props.collapsePaths}
18
22
  />
19
23
  )
20
24
  }
@@ -25,106 +29,118 @@ function JsonValue(props: {
25
29
  isRoot?: boolean
26
30
  isLastKey?: boolean
27
31
  copyable?: boolean
32
+
28
33
  defaultExpansionDepth: number
29
34
  depth: number
35
+
36
+ collapsePaths?: Array<string>
37
+ path: string
30
38
  }) {
31
- const {
32
- value,
33
- keyName,
34
- isRoot = false,
35
- isLastKey,
36
- copyable,
37
- defaultExpansionDepth,
38
- depth,
39
- } = props
40
39
  const styles = useStyles()
41
40
 
42
41
  return (
43
- <span class={styles().tree.valueContainer(isRoot)}>
44
- {keyName && typeof value !== 'object' && !Array.isArray(value) && (
45
- <span class={styles().tree.valueKey}>&quot;{keyName}&quot;: </span>
46
- )}
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
+ )}
47
50
  {(() => {
48
- if (typeof value === 'string') {
51
+ if (typeof props.value === 'string') {
49
52
  return (
50
- <span class={styles().tree.valueString}>&quot;{value}&quot;</span>
53
+ <span class={styles().tree.valueString}>
54
+ &quot;{props.value}&quot;
55
+ </span>
51
56
  )
52
57
  }
53
- if (typeof value === 'number') {
54
- return <span class={styles().tree.valueNumber}>{value}</span>
58
+ if (typeof props.value === 'number') {
59
+ return <span class={styles().tree.valueNumber}>{props.value}</span>
55
60
  }
56
- if (typeof value === 'boolean') {
57
- 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
+ )
58
67
  }
59
- if (value === null) {
68
+ if (props.value === null) {
60
69
  return <span class={styles().tree.valueNull}>null</span>
61
70
  }
62
- if (value === undefined) {
71
+ if (props.value === undefined) {
63
72
  return <span class={styles().tree.valueNull}>undefined</span>
64
73
  }
65
- if (typeof value === 'function') {
74
+ if (typeof props.value === 'function') {
66
75
  return (
67
- <span class={styles().tree.valueFunction}>{String(value)}</span>
76
+ <span class={styles().tree.valueFunction}>
77
+ {String(props.value)}
78
+ </span>
68
79
  )
69
80
  }
70
- if (Array.isArray(value)) {
81
+ if (Array.isArray(props.value)) {
71
82
  return (
72
83
  <ArrayValue
73
- defaultExpansionDepth={defaultExpansionDepth}
74
- depth={depth}
75
- copyable={copyable}
76
- keyName={keyName}
77
- value={value}
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}
78
91
  />
79
92
  )
80
93
  }
81
- if (typeof value === 'object') {
94
+ if (typeof props.value === 'object') {
82
95
  return (
83
96
  <ObjectValue
84
- defaultExpansionDepth={defaultExpansionDepth}
85
- depth={depth}
86
- copyable={copyable}
87
- keyName={keyName}
88
- value={value}
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}
89
104
  />
90
105
  )
91
106
  }
92
107
  return <span />
93
108
  })()}
94
- {copyable && (
109
+ {props.copyable && (
95
110
  <div class={clsx(styles().tree.actions, 'actions')}>
96
- <CopyButton value={value} />
111
+ <CopyButton value={props.value} />
97
112
  </div>
98
113
  )}
99
- {isLastKey || isRoot ? '' : <span>,</span>}
114
+ {props.isLastKey || props.isRoot ? '' : <span>,</span>}
100
115
  </span>
101
116
  )
102
117
  }
103
118
 
104
- const ArrayValue = ({
105
- value,
106
- keyName,
107
- copyable,
108
- defaultExpansionDepth,
109
- depth,
110
- }: {
119
+ const ArrayValue = (props: {
111
120
  value: Array<any>
112
121
  copyable?: boolean
113
122
  keyName?: string
114
123
  defaultExpansionDepth: number
115
124
  depth: number
125
+ collapsePaths?: Array<string>
126
+ path: string
116
127
  }) => {
117
128
  const styles = useStyles()
118
- const [expanded, setExpanded] = createSignal(depth <= defaultExpansionDepth)
119
129
 
120
- if (value.length === 0) {
130
+ const [expanded, setExpanded] = createSignal(
131
+ props.depth <= props.defaultExpansionDepth &&
132
+ !props.collapsePaths?.includes(props.path),
133
+ )
134
+
135
+ if (props.value.length === 0) {
121
136
  return (
122
137
  <span class={styles().tree.expanderContainer}>
123
- {keyName && (
138
+ {props.keyName && (
124
139
  <span class={clsx(styles().tree.valueKey, styles().tree.collapsible)}>
125
- &quot;{keyName}&quot;:{' '}
140
+ &quot;{props.keyName}&quot;:{' '}
126
141
  </span>
127
142
  )}
143
+
128
144
  <span class={styles().tree.valueBraces}>[]</span>
129
145
  </span>
130
146
  )
@@ -135,7 +151,8 @@ const ArrayValue = ({
135
151
  onClick={() => setExpanded(!expanded())}
136
152
  expanded={expanded()}
137
153
  />
138
- {keyName && (
154
+
155
+ {props.keyName && (
139
156
  <span
140
157
  onclick={(e) => {
141
158
  e.stopPropagation()
@@ -144,29 +161,34 @@ const ArrayValue = ({
144
161
  }}
145
162
  class={clsx(styles().tree.valueKey, styles().tree.collapsible)}
146
163
  >
147
- &quot;{keyName}&quot;:{' '}
148
- <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>
149
166
  </span>
150
167
  )}
168
+
151
169
  <span class={styles().tree.valueBraces}>[</span>
170
+
152
171
  <Show when={expanded()}>
153
- <span class={styles().tree.expandedLine(Boolean(keyName))}>
154
- <For each={value}>
172
+ <span class={styles().tree.expandedLine(Boolean(props.keyName))}>
173
+ <For each={props.value}>
155
174
  {(item, i) => {
156
- const isLastKey = i() === value.length - 1
175
+ const isLastKey = i() === props.value.length - 1
157
176
  return (
158
177
  <JsonValue
159
- copyable={copyable}
178
+ copyable={props.copyable}
160
179
  value={item}
161
180
  isLastKey={isLastKey}
162
- defaultExpansionDepth={defaultExpansionDepth}
163
- depth={depth + 1}
181
+ defaultExpansionDepth={props.defaultExpansionDepth}
182
+ depth={props.depth + 1}
183
+ collapsePaths={props.collapsePaths}
184
+ path={props.path ? `${props.path}[${i()}]` : `[${i()}]`}
164
185
  />
165
186
  )
166
187
  }}
167
188
  </For>
168
189
  </span>
169
190
  </Show>
191
+
170
192
  <Show when={!expanded()}>
171
193
  <span
172
194
  onClick={(e) => {
@@ -184,45 +206,49 @@ const ArrayValue = ({
184
206
  )
185
207
  }
186
208
 
187
- const ObjectValue = ({
188
- value,
189
- keyName,
190
- copyable,
191
- defaultExpansionDepth,
192
- depth,
193
- }: {
209
+ const ObjectValue = (props: {
194
210
  value: Record<string, any>
195
211
  keyName?: string
196
212
  copyable?: boolean
197
213
  defaultExpansionDepth: number
198
214
  depth: number
215
+ collapsePaths?: Array<string>
216
+ path: string
199
217
  }) => {
200
218
  const styles = useStyles()
201
- const [expanded, setExpanded] = createSignal(depth <= defaultExpansionDepth)
202
- const keys = Object.keys(value)
219
+
220
+ const [expanded, setExpanded] = createSignal(
221
+ props.depth <= props.defaultExpansionDepth &&
222
+ !props.collapsePaths?.includes(props.path),
223
+ )
224
+
225
+ const keys = Object.keys(props.value)
203
226
  const lastKeyName = keys[keys.length - 1]
204
227
 
205
228
  if (keys.length === 0) {
206
229
  return (
207
230
  <span class={styles().tree.expanderContainer}>
208
- {keyName && (
231
+ {props.keyName && (
209
232
  <span class={clsx(styles().tree.valueKey, styles().tree.collapsible)}>
210
- &quot;{keyName}&quot;:{' '}
233
+ &quot;{props.keyName}&quot;:{' '}
211
234
  </span>
212
235
  )}
236
+
213
237
  <span class={styles().tree.valueBraces}>{'{}'}</span>
214
238
  </span>
215
239
  )
216
240
  }
241
+
217
242
  return (
218
243
  <span class={styles().tree.expanderContainer}>
219
- {keyName && (
244
+ {props.keyName && (
220
245
  <Expander
221
246
  onClick={() => setExpanded(!expanded())}
222
247
  expanded={expanded()}
223
248
  />
224
249
  )}
225
- {keyName && (
250
+
251
+ {props.keyName && (
226
252
  <span
227
253
  onClick={(e) => {
228
254
  e.stopPropagation()
@@ -231,29 +257,34 @@ const ObjectValue = ({
231
257
  }}
232
258
  class={clsx(styles().tree.valueKey, styles().tree.collapsible)}
233
259
  >
234
- &quot;{keyName}&quot;:{' '}
260
+ &quot;{props.keyName}&quot;:{' '}
235
261
  <span class={styles().tree.info}>{keys.length} items</span>
236
262
  </span>
237
263
  )}
264
+
238
265
  <span class={styles().tree.valueBraces}>{'{'}</span>
266
+
239
267
  <Show when={expanded()}>
240
- <span class={styles().tree.expandedLine(Boolean(keyName))}>
268
+ <span class={styles().tree.expandedLine(Boolean(props.keyName))}>
241
269
  <For each={keys}>
242
270
  {(k) => (
243
271
  <>
244
272
  <JsonValue
245
- value={value[k]}
273
+ value={props.value[k]}
246
274
  keyName={k}
247
275
  isLastKey={lastKeyName === k}
248
- copyable={copyable}
249
- defaultExpansionDepth={defaultExpansionDepth}
250
- depth={depth + 1}
276
+ copyable={props.copyable}
277
+ defaultExpansionDepth={props.defaultExpansionDepth}
278
+ depth={props.depth + 1}
279
+ collapsePaths={props.collapsePaths}
280
+ path={`${props.path}${props.path ? '.' : ''}${k}`}
251
281
  />
252
282
  </>
253
283
  )}
254
284
  </For>
255
285
  </span>
256
286
  </Show>
287
+
257
288
  <Show when={!expanded()}>
258
289
  <span
259
290
  onClick={(e) => {
@@ -266,6 +297,7 @@ const ObjectValue = ({
266
297
  {`...`}
267
298
  </span>
268
299
  </Show>
300
+
269
301
  <span class={styles().tree.valueBraces}>{'}'}</span>
270
302
  </span>
271
303
  )
@@ -59,6 +59,8 @@ const stylesFactory = (theme: Theme = 'dark') => {
59
59
 
60
60
  const t = (light: string, dark: string) => (theme === 'light' ? light : dark)
61
61
 
62
+ const wrapperSize = 320
63
+
62
64
  return {
63
65
  logo: css`
64
66
  cursor: pointer;
@@ -78,7 +80,7 @@ const stylesFactory = (theme: Theme = 'dark') => {
78
80
 
79
81
  selectWrapper: css`
80
82
  width: 100%;
81
- max-width: 300px;
83
+ max-width: ${wrapperSize}px;
82
84
  display: flex;
83
85
  flex-direction: column;
84
86
  gap: 0.375rem;
@@ -129,7 +131,7 @@ const stylesFactory = (theme: Theme = 'dark') => {
129
131
  `,
130
132
  inputWrapper: css`
131
133
  width: 100%;
132
- max-width: 300px;
134
+ max-width: ${wrapperSize}px;
133
135
  display: flex;
134
136
  flex-direction: column;
135
137
  gap: 0.375rem;
@@ -152,6 +154,7 @@ const stylesFactory = (theme: Theme = 'dark') => {
152
154
  `,
153
155
  input: css`
154
156
  appearance: none;
157
+ box-sizing: border-box;
155
158
  width: 100%;
156
159
  padding: 0.75rem;
157
160
  border-radius: 0.5rem;
@@ -0,0 +1,18 @@
1
+ type CollapsibleKeys<T, TPrefix extends string = ''> =
2
+ T extends ReadonlyArray<infer U>
3
+ ?
4
+ | (TPrefix extends '' ? '' : TPrefix)
5
+ | CollapsibleKeys<U, `${TPrefix}[${number}]`>
6
+ : T extends object
7
+ ?
8
+ | (TPrefix extends '' ? '' : TPrefix)
9
+ | {
10
+ [K in Extract<keyof T, string>]: CollapsibleKeys<
11
+ T[K],
12
+ TPrefix extends '' ? `${K}` : `${TPrefix}.${K}`
13
+ >
14
+ }[Extract<keyof T, string>]
15
+ : never
16
+
17
+ export type CollapsiblePaths<T> =
18
+ CollapsibleKeys<T> extends string ? CollapsibleKeys<T> : never