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