glass-ui-solid 0.4.1 → 0.4.3
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/components/JsonSchemaForm/fields/ArrayField.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/fields/ArrayField.js +154 -105
- package/dist/components/JsonSchemaForm/fields/ArrayField.js.map +1 -1
- package/dist/components/JsonSchemaForm/fields/SchemaField.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/fields/SchemaField.js +42 -23
- package/dist/components/JsonSchemaForm/fields/SchemaField.js.map +1 -1
- package/dist/components/JsonViewer/JsonViewer.js +1 -1
- package/dist/components/JsonViewer/JsonViewer.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArrayField.d.ts","sourceRoot":"","sources":["../../../../src/components/JsonSchemaForm/fields/ArrayField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"ArrayField.d.ts","sourceRoot":"","sources":["../../../../src/components/JsonSchemaForm/fields/ArrayField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAS1C,OAAO,KAAK,EAAE,eAAe,EAA0B,MAAM,UAAU,CAAC;AA8DxE;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,SAAS,CAAC,eAAe,CAkMjD,CAAC"}
|
|
@@ -1,20 +1,24 @@
|
|
|
1
|
-
import { template as
|
|
2
|
-
import {
|
|
3
|
-
import { resolveSchemaType as b, getDefaultValue as
|
|
1
|
+
import { template as m, insert as c, createComponent as n, effect as T, memo as v, delegateEvents as V } from "solid-js/web";
|
|
2
|
+
import { Show as i, For as I, Switch as j, Match as $ } from "solid-js";
|
|
3
|
+
import { resolveSchemaType as b, getDefaultValue as D } from "../utils.js";
|
|
4
4
|
import { BooleanField as B } from "./BooleanField.js";
|
|
5
|
-
import { EnumField as
|
|
6
|
-
import { NumberField as
|
|
7
|
-
import { StringField as
|
|
8
|
-
import { JsonSchemaForm as
|
|
9
|
-
import { ChevronUpIcon as
|
|
10
|
-
import { TrashIcon as
|
|
5
|
+
import { EnumField as G } from "./EnumField.js";
|
|
6
|
+
import { NumberField as J } from "./NumberField.js";
|
|
7
|
+
import { StringField as N } from "./StringField.js";
|
|
8
|
+
import { JsonSchemaForm as R } from "../JsonSchemaForm.js";
|
|
9
|
+
import { ChevronUpIcon as U, ChevronDownIcon as q } from "../../shared/icons/ChevronIcon.js";
|
|
10
|
+
import { TrashIcon as z } from "../../shared/icons/TrashIcon.js";
|
|
11
11
|
import { PlusIcon as H } from "../../shared/icons/PlusIcon.js";
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
return
|
|
12
|
+
import { Checkbox as K } from "../../Input/Checkbox.js";
|
|
13
|
+
var L = /* @__PURE__ */ m('<button type=button class="w-full py-2.5 px-4 rounded-xl border-2 border-dashed border-surface-200 dark:border-surface-700 text-sm font-medium text-surface-500 dark:text-surface-400 hover:text-surface-700 dark:hover:text-surface-200 hover:border-surface-300 dark:hover:border-surface-600 hover:bg-surface-50 dark:hover:bg-surface-800/50 transition-colors flex items-center justify-center gap-2">Add item'), Q = /* @__PURE__ */ m('<div class="text-xs text-surface-400 dark:text-surface-500">'), W = /* @__PURE__ */ m("<div class=space-y-3>"), X = /* @__PURE__ */ m("<div class=space-y-1.5>"), Y = /* @__PURE__ */ m('<span class="text-xs text-surface-400 dark:text-surface-500">(<!>)'), Z = /* @__PURE__ */ m('<div class="glass-card rounded-xl p-3 sm:p-4"><div class="flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between mb-3"><div class="flex items-center gap-2"><span class="text-xs font-medium text-surface-500 dark:text-surface-400">Item </span></div><div class="flex items-center gap-1 self-end sm:self-auto"><button type=button class=glass-icon-btn title="Move up"></button><button type=button class=glass-icon-btn title="Move down"></button><button type=button class="p-1.5 rounded-lg text-rose-400 hover:text-rose-600 dark:hover:text-rose-300 hover:bg-rose-50 dark:hover:bg-rose-900/20 transition-colors"title="Remove item">');
|
|
14
|
+
function p(e) {
|
|
15
|
+
return !e.oneOf || e.oneOf.length === 0 ? !1 : e.oneOf.every((l) => l.const !== void 0);
|
|
16
|
+
}
|
|
17
|
+
const ee = (e) => {
|
|
18
|
+
const l = () => b(e.schema) || "string";
|
|
19
|
+
return n(j, {
|
|
16
20
|
get fallback() {
|
|
17
|
-
return
|
|
21
|
+
return n(N, {
|
|
18
22
|
get schema() {
|
|
19
23
|
return e.schema;
|
|
20
24
|
},
|
|
@@ -27,12 +31,12 @@ const W = (e) => {
|
|
|
27
31
|
});
|
|
28
32
|
},
|
|
29
33
|
get children() {
|
|
30
|
-
return [
|
|
34
|
+
return [n($, {
|
|
31
35
|
get when() {
|
|
32
|
-
return
|
|
36
|
+
return v(() => !!e.schema.enum)() && e.schema.enum.length > 0;
|
|
33
37
|
},
|
|
34
38
|
get children() {
|
|
35
|
-
return
|
|
39
|
+
return n(G, {
|
|
36
40
|
get schema() {
|
|
37
41
|
return e.schema;
|
|
38
42
|
},
|
|
@@ -44,12 +48,12 @@ const W = (e) => {
|
|
|
44
48
|
}
|
|
45
49
|
});
|
|
46
50
|
}
|
|
47
|
-
}),
|
|
51
|
+
}), n($, {
|
|
48
52
|
get when() {
|
|
49
|
-
return
|
|
53
|
+
return l() === "boolean";
|
|
50
54
|
},
|
|
51
55
|
get children() {
|
|
52
|
-
return
|
|
56
|
+
return n(B, {
|
|
53
57
|
get schema() {
|
|
54
58
|
return e.schema;
|
|
55
59
|
},
|
|
@@ -61,12 +65,12 @@ const W = (e) => {
|
|
|
61
65
|
}
|
|
62
66
|
});
|
|
63
67
|
}
|
|
64
|
-
}),
|
|
68
|
+
}), n($, {
|
|
65
69
|
get when() {
|
|
66
|
-
return
|
|
70
|
+
return l() === "number" || l() === "integer";
|
|
67
71
|
},
|
|
68
72
|
get children() {
|
|
69
|
-
return
|
|
73
|
+
return n(J, {
|
|
70
74
|
get schema() {
|
|
71
75
|
return e.schema;
|
|
72
76
|
},
|
|
@@ -81,118 +85,163 @@ const W = (e) => {
|
|
|
81
85
|
})];
|
|
82
86
|
}
|
|
83
87
|
});
|
|
84
|
-
},
|
|
85
|
-
const
|
|
88
|
+
}, ge = (e) => {
|
|
89
|
+
const l = () => e.value || [], u = () => e.schema.items || {
|
|
86
90
|
type: "string"
|
|
87
91
|
}, S = () => {
|
|
88
|
-
const
|
|
89
|
-
e.onChange([...
|
|
90
|
-
},
|
|
91
|
-
const
|
|
92
|
-
e.onChange(
|
|
93
|
-
},
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
}, k = (
|
|
97
|
-
if (
|
|
92
|
+
const a = D(u());
|
|
93
|
+
e.onChange([...l(), a]);
|
|
94
|
+
}, A = (a) => {
|
|
95
|
+
const t = l().filter((r, s) => s !== a);
|
|
96
|
+
e.onChange(t.length > 0 ? t : void 0);
|
|
97
|
+
}, w = (a, t) => {
|
|
98
|
+
const r = [...l()];
|
|
99
|
+
r[a] = t, e.onChange(r);
|
|
100
|
+
}, k = (a, t) => {
|
|
101
|
+
if (t < 0 || t >= l().length)
|
|
98
102
|
return;
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
},
|
|
102
|
-
const
|
|
103
|
-
return
|
|
103
|
+
const r = [...l()], [s] = r.splice(a, 1);
|
|
104
|
+
r.splice(t, 0, s), e.onChange(r);
|
|
105
|
+
}, F = () => {
|
|
106
|
+
const a = b(u());
|
|
107
|
+
return a === "string" || a === "number" || a === "integer" || a === "boolean";
|
|
108
|
+
}, O = () => p(u()), M = () => {
|
|
109
|
+
const a = u();
|
|
110
|
+
return a.oneOf ? a.oneOf.map((t) => ({
|
|
111
|
+
value: t.const,
|
|
112
|
+
label: t.title || String(t.const)
|
|
113
|
+
})) : [];
|
|
114
|
+
}, E = (a) => {
|
|
115
|
+
const t = l();
|
|
116
|
+
if (t.some((s) => s === a)) {
|
|
117
|
+
const s = t.filter((x) => x !== a);
|
|
118
|
+
e.onChange(s.length > 0 ? s : void 0);
|
|
119
|
+
} else
|
|
120
|
+
e.onChange([...t, a]);
|
|
104
121
|
};
|
|
105
122
|
return (() => {
|
|
106
|
-
var
|
|
107
|
-
return
|
|
108
|
-
get
|
|
109
|
-
return
|
|
123
|
+
var a = W();
|
|
124
|
+
return c(a, n(i, {
|
|
125
|
+
get when() {
|
|
126
|
+
return !O();
|
|
110
127
|
},
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
128
|
+
get fallback() {
|
|
129
|
+
return (
|
|
130
|
+
/* Checkbox group for oneOf const pattern */
|
|
131
|
+
(() => {
|
|
132
|
+
var t = X();
|
|
133
|
+
return c(t, n(I, {
|
|
134
|
+
get each() {
|
|
135
|
+
return M();
|
|
136
|
+
},
|
|
137
|
+
children: (r) => n(K, {
|
|
138
|
+
get checked() {
|
|
139
|
+
return l().some((s) => s === r.value);
|
|
140
|
+
},
|
|
141
|
+
onChange: () => E(r.value),
|
|
142
|
+
get label() {
|
|
143
|
+
return r.label;
|
|
144
|
+
}
|
|
145
|
+
})
|
|
146
|
+
})), t;
|
|
147
|
+
})()
|
|
148
|
+
);
|
|
149
|
+
},
|
|
150
|
+
get children() {
|
|
151
|
+
return [n(I, {
|
|
152
|
+
get each() {
|
|
153
|
+
return l();
|
|
132
154
|
},
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
155
|
+
children: (t, r) => (() => {
|
|
156
|
+
var s = Z(), x = s.firstChild, C = x.firstChild, _ = C.firstChild;
|
|
157
|
+
_.firstChild;
|
|
158
|
+
var P = C.nextSibling, g = P.firstChild, d = g.nextSibling, y = d.nextSibling;
|
|
159
|
+
return c(_, () => r() + 1, null), c(C, n(i, {
|
|
160
|
+
get when() {
|
|
161
|
+
return b(u());
|
|
137
162
|
},
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
return [...e.path, String(i())];
|
|
163
|
+
get children() {
|
|
164
|
+
var o = Y(), f = o.firstChild, h = f.nextSibling;
|
|
165
|
+
return h.nextSibling, c(o, () => b(u()), h), o;
|
|
142
166
|
}
|
|
143
|
-
})
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
167
|
+
}), null), g.$$click = () => k(r(), r() - 1), c(g, n(U, {
|
|
168
|
+
class: "w-4 h-4"
|
|
169
|
+
})), d.$$click = () => k(r(), r() + 1), c(d, n(q, {
|
|
170
|
+
class: "w-4 h-4"
|
|
171
|
+
})), y.$$click = () => A(r()), c(y, n(z, {
|
|
172
|
+
class: "w-4 h-4"
|
|
173
|
+
})), c(s, n(i, {
|
|
174
|
+
get when() {
|
|
175
|
+
return F();
|
|
149
176
|
},
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
177
|
+
get fallback() {
|
|
178
|
+
return n(R, {
|
|
179
|
+
get schema() {
|
|
180
|
+
return u();
|
|
181
|
+
},
|
|
182
|
+
value: t,
|
|
183
|
+
onChange: (o) => w(r(), o),
|
|
184
|
+
get path() {
|
|
185
|
+
return [...e.path, String(r())];
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
},
|
|
189
|
+
get children() {
|
|
190
|
+
return n(ee, {
|
|
191
|
+
get schema() {
|
|
192
|
+
return u();
|
|
193
|
+
},
|
|
194
|
+
value: t,
|
|
195
|
+
onChange: (o) => w(r(), o)
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
}), null), T((o) => {
|
|
199
|
+
var f = r() === 0, h = r() === l().length - 1;
|
|
200
|
+
return f !== o.e && (g.disabled = o.e = f), h !== o.t && (d.disabled = o.t = h), o;
|
|
201
|
+
}, {
|
|
202
|
+
e: void 0,
|
|
203
|
+
t: void 0
|
|
204
|
+
}), s;
|
|
205
|
+
})()
|
|
206
|
+
}), (() => {
|
|
207
|
+
var t = L(), r = t.firstChild;
|
|
208
|
+
return t.$$click = S, c(t, n(H, {
|
|
209
|
+
class: "w-4 h-4"
|
|
210
|
+
}), r), t;
|
|
211
|
+
})()];
|
|
212
|
+
}
|
|
213
|
+
}), null), c(a, n(i, {
|
|
165
214
|
get when() {
|
|
166
215
|
return e.schema.minItems !== void 0 || e.schema.maxItems !== void 0;
|
|
167
216
|
},
|
|
168
217
|
get children() {
|
|
169
|
-
var
|
|
170
|
-
return
|
|
218
|
+
var t = Q();
|
|
219
|
+
return c(t, n(i, {
|
|
171
220
|
get when() {
|
|
172
221
|
return e.schema.minItems !== void 0;
|
|
173
222
|
},
|
|
174
223
|
get children() {
|
|
175
|
-
return ["Min items: ",
|
|
224
|
+
return ["Min items: ", v(() => e.schema.minItems)];
|
|
176
225
|
}
|
|
177
|
-
}), null),
|
|
226
|
+
}), null), c(t, n(i, {
|
|
178
227
|
get when() {
|
|
179
|
-
return
|
|
228
|
+
return v(() => e.schema.minItems !== void 0)() && e.schema.maxItems !== void 0;
|
|
180
229
|
},
|
|
181
230
|
children: " | "
|
|
182
|
-
}), null),
|
|
231
|
+
}), null), c(t, n(i, {
|
|
183
232
|
get when() {
|
|
184
233
|
return e.schema.maxItems !== void 0;
|
|
185
234
|
},
|
|
186
235
|
get children() {
|
|
187
|
-
return ["Max items: ",
|
|
236
|
+
return ["Max items: ", v(() => e.schema.maxItems)];
|
|
188
237
|
}
|
|
189
|
-
}), null),
|
|
238
|
+
}), null), t;
|
|
190
239
|
}
|
|
191
|
-
}), null),
|
|
240
|
+
}), null), a;
|
|
192
241
|
})();
|
|
193
242
|
};
|
|
194
|
-
|
|
243
|
+
V(["click"]);
|
|
195
244
|
export {
|
|
196
|
-
|
|
245
|
+
ge as ArrayField
|
|
197
246
|
};
|
|
198
247
|
//# sourceMappingURL=ArrayField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArrayField.js","sources":["../../../../src/components/JsonSchemaForm/fields/ArrayField.tsx"],"sourcesContent":["import type { Component } from 'solid-js';\nimport { For, Match, Show, Switch } from 'solid-js';\nimport {\n ChevronDownIcon,\n ChevronUpIcon,\n PlusIcon,\n TrashIcon,\n} from '../../shared/icons';\nimport type { ArrayFieldProps, BaseFieldProps } from '../types';\nimport { getDefaultValue, resolveSchemaType } from '../utils';\nimport { BooleanField } from './BooleanField';\nimport { EnumField } from './EnumField';\nimport { NumberField } from './NumberField';\nimport { StringField } from './StringField';\n\n// Forward declaration - will import the main component\nimport { JsonSchemaForm } from '../JsonSchemaForm';\n\n/**\n * Primitive array item renderer (inline editing for simple types)\n */\nconst PrimitiveArrayItem: Component<BaseFieldProps> = (props) => {\n const schemaType = () => resolveSchemaType(props.schema) || 'string';\n\n return (\n <Switch\n fallback={\n <StringField\n schema={props.schema}\n value={props.value}\n onChange={props.onChange}\n />\n }\n >\n <Match when={props.schema.enum && props.schema.enum.length > 0}>\n <EnumField\n schema={props.schema}\n value={props.value}\n onChange={props.onChange}\n />\n </Match>\n <Match when={schemaType() === 'boolean'}>\n <BooleanField\n schema={props.schema}\n value={props.value}\n onChange={props.onChange}\n />\n </Match>\n <Match when={schemaType() === 'number' || schemaType() === 'integer'}>\n <NumberField\n schema={props.schema}\n value={props.value}\n onChange={props.onChange}\n />\n </Match>\n </Switch>\n );\n};\n\n/**\n * Array field renderer with add/remove/reorder functionality\n */\nexport const ArrayField: Component<ArrayFieldProps> = (props) => {\n const currentValue = () => props.value || [];\n const itemSchema = () => props.schema.items || { type: 'string' };\n\n const addItem = () => {\n const newItem = getDefaultValue(itemSchema());\n props.onChange([...currentValue(), newItem]);\n };\n\n const removeItem = (index: number) => {\n const newArray = currentValue().filter((_, i) => i !== index);\n props.onChange(newArray.length > 0 ? newArray : undefined);\n };\n\n const updateItem = (index: number, itemValue: unknown) => {\n const newArray = [...currentValue()];\n newArray[index] = itemValue;\n props.onChange(newArray);\n };\n\n const moveItem = (fromIndex: number, toIndex: number) => {\n if (toIndex < 0 || toIndex >= currentValue().length) {\n return;\n }\n const newArray = [...currentValue()];\n const [item] = newArray.splice(fromIndex, 1);\n newArray.splice(toIndex, 0, item);\n props.onChange(newArray);\n };\n\n const isPrimitive = () => {\n const type = resolveSchemaType(itemSchema());\n return (\n type === 'string' ||\n type === 'number' ||\n type === 'integer' ||\n type === 'boolean'\n );\n };\n\n return (\n <div class=\"space-y-3\">\n {/* Array items */}\n <For each={currentValue()}>\n {(item, index) => (\n <div class=\"glass-card rounded-xl p-3 sm:p-4\">\n {/* Item header with controls */}\n <div class=\"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between mb-3\">\n <div class=\"flex items-center gap-2\">\n <span class=\"text-xs font-medium text-surface-500 dark:text-surface-400\">\n Item {index() + 1}\n </span>\n <Show when={resolveSchemaType(itemSchema())}>\n <span class=\"text-xs text-surface-400 dark:text-surface-500\">\n ({resolveSchemaType(itemSchema())})\n </span>\n </Show>\n </div>\n <div class=\"flex items-center gap-1 self-end sm:self-auto\">\n {/* Move up button */}\n <button\n type=\"button\"\n onClick={() => moveItem(index(), index() - 1)}\n disabled={index() === 0}\n class=\"glass-icon-btn\"\n title=\"Move up\"\n >\n <ChevronUpIcon class=\"w-4 h-4\" />\n </button>\n {/* Move down button */}\n <button\n type=\"button\"\n onClick={() => moveItem(index(), index() + 1)}\n disabled={index() === currentValue().length - 1}\n class=\"glass-icon-btn\"\n title=\"Move down\"\n >\n <ChevronDownIcon class=\"w-4 h-4\" />\n </button>\n {/* Remove button */}\n <button\n type=\"button\"\n onClick={() => removeItem(index())}\n class=\"p-1.5 rounded-lg text-rose-400 hover:text-rose-600 dark:hover:text-rose-300 hover:bg-rose-50 dark:hover:bg-rose-900/20 transition-colors\"\n title=\"Remove item\"\n >\n <TrashIcon class=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n\n {/* Item content */}\n <Show\n when={isPrimitive()}\n fallback={\n <JsonSchemaForm\n schema={itemSchema()}\n value={item}\n onChange={(v) => updateItem(index(), v)}\n path={[...props.path, String(index())]}\n />\n }\n >\n <PrimitiveArrayItem\n schema={itemSchema()}\n value={item}\n onChange={(v) => updateItem(index(), v)}\n />\n </Show>\n </div>\n )}\n </For>\n\n {/* Add item button */}\n <button\n type=\"button\"\n onClick={addItem}\n class=\"w-full py-2.5 px-4 rounded-xl border-2 border-dashed border-surface-200 dark:border-surface-700 text-sm font-medium text-surface-500 dark:text-surface-400 hover:text-surface-700 dark:hover:text-surface-200 hover:border-surface-300 dark:hover:border-surface-600 hover:bg-surface-50 dark:hover:bg-surface-800/50 transition-colors flex items-center justify-center gap-2\"\n >\n <PlusIcon class=\"w-4 h-4\" />\n Add item\n </button>\n\n {/* Constraints hint */}\n <Show\n when={\n props.schema.minItems !== undefined ||\n props.schema.maxItems !== undefined\n }\n >\n <div class=\"text-xs text-surface-400 dark:text-surface-500\">\n <Show when={props.schema.minItems !== undefined}>\n Min items: {props.schema.minItems}\n </Show>\n <Show\n when={\n props.schema.minItems !== undefined &&\n props.schema.maxItems !== undefined\n }\n >\n {' | '}\n </Show>\n <Show when={props.schema.maxItems !== undefined}>\n Max items: {props.schema.maxItems}\n </Show>\n </div>\n </Show>\n </div>\n );\n};\n"],"names":["PrimitiveArrayItem","props","schemaType","resolveSchemaType","schema","_$createComponent","Switch","fallback","StringField","value","onChange","children","Match","when","_$memo","enum","length","EnumField","BooleanField","NumberField","ArrayField","currentValue","itemSchema","items","type","addItem","newItem","getDefaultValue","removeItem","index","newArray","filter","_","i","undefined","updateItem","itemValue","moveItem","fromIndex","toIndex","item","splice","isPrimitive","_el$","_tmpl$2","_el$2","firstChild","_el$3","_$insert","For","each","_el$5","_tmpl$4","_el$6","_el$7","_el$8","_el$12","nextSibling","_el$13","_el$14","_el$15","Show","_el$0","_tmpl$3","_el$1","_el$11","$$click","ChevronUpIcon","ChevronDownIcon","TrashIcon","JsonSchemaForm","v","path","String","_$effect","_p$","_v$","_v$2","e","disabled","t","PlusIcon","minItems","maxItems","_el$4","_tmpl$","_$delegateEvents"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ArrayField.js","sources":["../../../../src/components/JsonSchemaForm/fields/ArrayField.tsx"],"sourcesContent":["import type { Component } from 'solid-js';\nimport { For, Match, Show, Switch } from 'solid-js';\nimport { Checkbox } from '../../Input';\nimport {\n ChevronDownIcon,\n ChevronUpIcon,\n PlusIcon,\n TrashIcon,\n} from '../../shared/icons';\nimport type { ArrayFieldProps, BaseFieldProps, Schema } from '../types';\nimport { getDefaultValue, resolveSchemaType } from '../utils';\nimport { BooleanField } from './BooleanField';\nimport { EnumField } from './EnumField';\nimport { NumberField } from './NumberField';\nimport { StringField } from './StringField';\n\n// Forward declaration - will import the main component\nimport { JsonSchemaForm } from '../JsonSchemaForm';\n\n/**\n * Check if items schema uses oneOf with const values (multi-select enum pattern).\n * e.g. items: { oneOf: [{ const: 1, title: \"Option A\" }, { const: 2, title: \"Option B\" }] }\n */\nfunction isConstEnumItems(items: Schema): boolean {\n if (!items.oneOf || items.oneOf.length === 0) {\n return false;\n }\n return items.oneOf.every((opt) => opt.const !== undefined);\n}\n\n/**\n * Primitive array item renderer (inline editing for simple types)\n */\nconst PrimitiveArrayItem: Component<BaseFieldProps> = (props) => {\n const schemaType = () => resolveSchemaType(props.schema) || 'string';\n\n return (\n <Switch\n fallback={\n <StringField\n schema={props.schema}\n value={props.value}\n onChange={props.onChange}\n />\n }\n >\n <Match when={props.schema.enum && props.schema.enum.length > 0}>\n <EnumField\n schema={props.schema}\n value={props.value}\n onChange={props.onChange}\n />\n </Match>\n <Match when={schemaType() === 'boolean'}>\n <BooleanField\n schema={props.schema}\n value={props.value}\n onChange={props.onChange}\n />\n </Match>\n <Match when={schemaType() === 'number' || schemaType() === 'integer'}>\n <NumberField\n schema={props.schema}\n value={props.value}\n onChange={props.onChange}\n />\n </Match>\n </Switch>\n );\n};\n\n/**\n * Array field renderer with add/remove/reorder functionality\n */\nexport const ArrayField: Component<ArrayFieldProps> = (props) => {\n const currentValue = () => props.value || [];\n const itemSchema = () => props.schema.items || { type: 'string' };\n\n const addItem = () => {\n const newItem = getDefaultValue(itemSchema());\n props.onChange([...currentValue(), newItem]);\n };\n\n const removeItem = (index: number) => {\n const newArray = currentValue().filter((_, i) => i !== index);\n props.onChange(newArray.length > 0 ? newArray : undefined);\n };\n\n const updateItem = (index: number, itemValue: unknown) => {\n const newArray = [...currentValue()];\n newArray[index] = itemValue;\n props.onChange(newArray);\n };\n\n const moveItem = (fromIndex: number, toIndex: number) => {\n if (toIndex < 0 || toIndex >= currentValue().length) {\n return;\n }\n const newArray = [...currentValue()];\n const [item] = newArray.splice(fromIndex, 1);\n newArray.splice(toIndex, 0, item);\n props.onChange(newArray);\n };\n\n const isPrimitive = () => {\n const type = resolveSchemaType(itemSchema());\n return (\n type === 'string' ||\n type === 'number' ||\n type === 'integer' ||\n type === 'boolean'\n );\n };\n\n /** Whether items use oneOf with const values (renders as checkbox group) */\n const isCheckboxGroup = () => isConstEnumItems(itemSchema());\n\n /** Get the const/title options for checkbox group rendering */\n const constOptions = () => {\n const items = itemSchema();\n if (!items.oneOf) {\n return [];\n }\n return items.oneOf.map((opt) => ({\n value: opt.const,\n label: opt.title || String(opt.const),\n }));\n };\n\n /** Toggle a const value in the array */\n const toggleValue = (value: unknown) => {\n const current = currentValue();\n const exists = current.some((v) => v === value);\n if (exists) {\n const newArray = current.filter((v) => v !== value);\n props.onChange(newArray.length > 0 ? newArray : undefined);\n } else {\n props.onChange([...current, value]);\n }\n };\n\n return (\n <div class=\"space-y-3\">\n <Show\n when={!isCheckboxGroup()}\n fallback={\n /* Checkbox group for oneOf const pattern */\n <div class=\"space-y-1.5\">\n <For each={constOptions()}>\n {(option) => (\n <Checkbox\n checked={currentValue().some((v) => v === option.value)}\n onChange={() => toggleValue(option.value)}\n label={option.label}\n />\n )}\n </For>\n </div>\n }\n >\n {/* Array items */}\n <For each={currentValue()}>\n {(item, index) => (\n <div class=\"glass-card rounded-xl p-3 sm:p-4\">\n {/* Item header with controls */}\n <div class=\"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between mb-3\">\n <div class=\"flex items-center gap-2\">\n <span class=\"text-xs font-medium text-surface-500 dark:text-surface-400\">\n Item {index() + 1}\n </span>\n <Show when={resolveSchemaType(itemSchema())}>\n <span class=\"text-xs text-surface-400 dark:text-surface-500\">\n ({resolveSchemaType(itemSchema())})\n </span>\n </Show>\n </div>\n <div class=\"flex items-center gap-1 self-end sm:self-auto\">\n {/* Move up button */}\n <button\n type=\"button\"\n onClick={() => moveItem(index(), index() - 1)}\n disabled={index() === 0}\n class=\"glass-icon-btn\"\n title=\"Move up\"\n >\n <ChevronUpIcon class=\"w-4 h-4\" />\n </button>\n {/* Move down button */}\n <button\n type=\"button\"\n onClick={() => moveItem(index(), index() + 1)}\n disabled={index() === currentValue().length - 1}\n class=\"glass-icon-btn\"\n title=\"Move down\"\n >\n <ChevronDownIcon class=\"w-4 h-4\" />\n </button>\n {/* Remove button */}\n <button\n type=\"button\"\n onClick={() => removeItem(index())}\n class=\"p-1.5 rounded-lg text-rose-400 hover:text-rose-600 dark:hover:text-rose-300 hover:bg-rose-50 dark:hover:bg-rose-900/20 transition-colors\"\n title=\"Remove item\"\n >\n <TrashIcon class=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n\n {/* Item content */}\n <Show\n when={isPrimitive()}\n fallback={\n <JsonSchemaForm\n schema={itemSchema()}\n value={item}\n onChange={(v) => updateItem(index(), v)}\n path={[...props.path, String(index())]}\n />\n }\n >\n <PrimitiveArrayItem\n schema={itemSchema()}\n value={item}\n onChange={(v) => updateItem(index(), v)}\n />\n </Show>\n </div>\n )}\n </For>\n\n {/* Add item button */}\n <button\n type=\"button\"\n onClick={addItem}\n class=\"w-full py-2.5 px-4 rounded-xl border-2 border-dashed border-surface-200 dark:border-surface-700 text-sm font-medium text-surface-500 dark:text-surface-400 hover:text-surface-700 dark:hover:text-surface-200 hover:border-surface-300 dark:hover:border-surface-600 hover:bg-surface-50 dark:hover:bg-surface-800/50 transition-colors flex items-center justify-center gap-2\"\n >\n <PlusIcon class=\"w-4 h-4\" />\n Add item\n </button>\n </Show>\n\n {/* Constraints hint */}\n <Show\n when={\n props.schema.minItems !== undefined ||\n props.schema.maxItems !== undefined\n }\n >\n <div class=\"text-xs text-surface-400 dark:text-surface-500\">\n <Show when={props.schema.minItems !== undefined}>\n Min items: {props.schema.minItems}\n </Show>\n <Show\n when={\n props.schema.minItems !== undefined &&\n props.schema.maxItems !== undefined\n }\n >\n {' | '}\n </Show>\n <Show when={props.schema.maxItems !== undefined}>\n Max items: {props.schema.maxItems}\n </Show>\n </div>\n </Show>\n </div>\n );\n};\n"],"names":["isConstEnumItems","items","oneOf","length","every","opt","const","undefined","PrimitiveArrayItem","props","schemaType","resolveSchemaType","schema","_$createComponent","Switch","fallback","StringField","value","onChange","children","Match","when","_$memo","enum","EnumField","BooleanField","NumberField","ArrayField","currentValue","itemSchema","type","addItem","newItem","getDefaultValue","removeItem","index","newArray","filter","_","i","updateItem","itemValue","moveItem","fromIndex","toIndex","item","splice","isPrimitive","isCheckboxGroup","constOptions","map","label","title","String","toggleValue","current","some","v","_el$","_tmpl$3","_$insert","Show","_el$5","_tmpl$4","For","each","option","Checkbox","checked","_el$6","_tmpl$6","_el$7","firstChild","_el$8","_el$9","_el$13","nextSibling","_el$14","_el$15","_el$16","_el$1","_tmpl$5","_el$10","_el$12","$$click","ChevronUpIcon","ChevronDownIcon","TrashIcon","JsonSchemaForm","path","_$effect","_p$","_v$","_v$2","e","disabled","t","_el$2","_tmpl$","_el$3","PlusIcon","minItems","maxItems","_el$4","_tmpl$2","_$delegateEvents"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaField.d.ts","sourceRoot":"","sources":["../../../../src/components/JsonSchemaForm/fields/SchemaField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAG1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGjD;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,gBAAgB,
|
|
1
|
+
{"version":3,"file":"SchemaField.d.ts","sourceRoot":"","sources":["../../../../src/components/JsonSchemaForm/fields/SchemaField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAG1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGjD;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,gBAAgB,CAqEnD,CAAC"}
|
|
@@ -1,43 +1,62 @@
|
|
|
1
|
-
import { template as a, insert as
|
|
2
|
-
import { Show as
|
|
3
|
-
import { JsonSchemaForm as
|
|
4
|
-
import { resolveSchemaType as
|
|
5
|
-
var $ = /* @__PURE__ */ a('<span class="text-rose-500 text-xs font-semibold">required'),
|
|
6
|
-
const
|
|
7
|
-
const
|
|
1
|
+
import { template as a, insert as r, createComponent as n } from "solid-js/web";
|
|
2
|
+
import { Show as l } from "solid-js";
|
|
3
|
+
import { JsonSchemaForm as h } from "../JsonSchemaForm.js";
|
|
4
|
+
import { resolveSchemaType as d, isNullable as o } from "../utils.js";
|
|
5
|
+
var _ = /* @__PURE__ */ a('<span class="text-sm font-medium text-surface-900 dark:text-surface-100">'), $ = /* @__PURE__ */ a('<span class="font-mono text-xs text-surface-400 dark:text-surface-500">'), v = /* @__PURE__ */ a('<span class="text-rose-500 text-xs font-semibold">required'), C = /* @__PURE__ */ a('<span class="text-xs text-surface-400 dark:text-surface-500">(<!>)'), b = /* @__PURE__ */ a('<p class="text-xs text-surface-400 dark:text-surface-500">'), k = /* @__PURE__ */ a('<div class=space-y-2><div class="flex items-center gap-2 flex-wrap"><span class="text-xs text-surface-400 dark:text-surface-500">'), w = /* @__PURE__ */ a('<span class="font-mono text-sm font-medium text-surface-900 dark:text-surface-100">'), S = /* @__PURE__ */ a("<div class=sm:max-w-xs>");
|
|
6
|
+
const j = (e) => {
|
|
7
|
+
const m = () => d(e.schema) || "string", x = () => o(e.schema), f = () => m() === "object" || m() === "array";
|
|
8
8
|
return (() => {
|
|
9
|
-
var
|
|
10
|
-
return
|
|
9
|
+
var s = k(), c = s.firstChild, u = c.firstChild;
|
|
10
|
+
return r(c, n(l, {
|
|
11
|
+
get when() {
|
|
12
|
+
return e.schema.title;
|
|
13
|
+
},
|
|
14
|
+
get fallback() {
|
|
15
|
+
return (() => {
|
|
16
|
+
var t = w();
|
|
17
|
+
return r(t, () => e.name), t;
|
|
18
|
+
})();
|
|
19
|
+
},
|
|
20
|
+
get children() {
|
|
21
|
+
return [(() => {
|
|
22
|
+
var t = _();
|
|
23
|
+
return r(t, () => e.schema.title), t;
|
|
24
|
+
})(), (() => {
|
|
25
|
+
var t = $();
|
|
26
|
+
return r(t, () => e.name), t;
|
|
27
|
+
})()];
|
|
28
|
+
}
|
|
29
|
+
}), u), r(c, n(l, {
|
|
11
30
|
get when() {
|
|
12
31
|
return e.required;
|
|
13
32
|
},
|
|
14
33
|
get children() {
|
|
15
|
-
return
|
|
34
|
+
return v();
|
|
16
35
|
}
|
|
17
|
-
}),
|
|
36
|
+
}), u), r(u, m, null), r(u, () => x() ? " | null" : "", null), r(c, n(l, {
|
|
18
37
|
get when() {
|
|
19
38
|
return e.schema.format;
|
|
20
39
|
},
|
|
21
40
|
get children() {
|
|
22
|
-
var
|
|
23
|
-
return
|
|
41
|
+
var t = C(), g = t.firstChild, i = g.nextSibling;
|
|
42
|
+
return i.nextSibling, r(t, () => e.schema.format, i), t;
|
|
24
43
|
}
|
|
25
|
-
}), null),
|
|
44
|
+
}), null), r(s, n(l, {
|
|
26
45
|
get when() {
|
|
27
46
|
return e.schema.description;
|
|
28
47
|
},
|
|
29
48
|
get children() {
|
|
30
|
-
var
|
|
31
|
-
return t
|
|
49
|
+
var t = b();
|
|
50
|
+
return r(t, () => e.schema.description), t;
|
|
32
51
|
}
|
|
33
|
-
}), null),
|
|
52
|
+
}), null), r(s, n(l, {
|
|
34
53
|
get when() {
|
|
35
54
|
return f();
|
|
36
55
|
},
|
|
37
56
|
get fallback() {
|
|
38
57
|
return (() => {
|
|
39
|
-
var
|
|
40
|
-
return t
|
|
58
|
+
var t = S();
|
|
59
|
+
return r(t, n(h, {
|
|
41
60
|
get schema() {
|
|
42
61
|
return e.schema;
|
|
43
62
|
},
|
|
@@ -50,11 +69,11 @@ const q = (e) => {
|
|
|
50
69
|
get path() {
|
|
51
70
|
return e.path;
|
|
52
71
|
}
|
|
53
|
-
})),
|
|
72
|
+
})), t;
|
|
54
73
|
})();
|
|
55
74
|
},
|
|
56
75
|
get children() {
|
|
57
|
-
return n(
|
|
76
|
+
return n(h, {
|
|
58
77
|
get schema() {
|
|
59
78
|
return e.schema;
|
|
60
79
|
},
|
|
@@ -69,10 +88,10 @@ const q = (e) => {
|
|
|
69
88
|
}
|
|
70
89
|
});
|
|
71
90
|
}
|
|
72
|
-
}), null),
|
|
91
|
+
}), null), s;
|
|
73
92
|
})();
|
|
74
93
|
};
|
|
75
94
|
export {
|
|
76
|
-
|
|
95
|
+
j as SchemaField
|
|
77
96
|
};
|
|
78
97
|
//# sourceMappingURL=SchemaField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaField.js","sources":["../../../../src/components/JsonSchemaForm/fields/SchemaField.tsx"],"sourcesContent":["import type { Component } from 'solid-js';\nimport { Show } from 'solid-js';\nimport { JsonSchemaForm } from '../JsonSchemaForm';\nimport type { SchemaFieldProps } from '../types';\nimport { isNullable, resolveSchemaType } from '../utils';\n\n/**\n * SchemaField - Wraps JsonSchemaForm with field label and metadata\n * Used by ObjectField to render each property with its label\n */\nexport const SchemaField: Component<SchemaFieldProps> = (props) => {\n const schemaType = () => resolveSchemaType(props.schema) || 'string';\n const nullable = () => isNullable(props.schema);\n const isComplexType = () =>\n schemaType() === 'object' || schemaType() === 'array';\n\n return (\n <div class=\"space-y-2\">\n {/* Field label and metadata */}\n <div class=\"flex items-center gap-2\">\n <span class=\"font-mono text-sm font-medium text-surface-900 dark:text-surface-100\">\n
|
|
1
|
+
{"version":3,"file":"SchemaField.js","sources":["../../../../src/components/JsonSchemaForm/fields/SchemaField.tsx"],"sourcesContent":["import type { Component } from 'solid-js';\nimport { Show } from 'solid-js';\nimport { JsonSchemaForm } from '../JsonSchemaForm';\nimport type { SchemaFieldProps } from '../types';\nimport { isNullable, resolveSchemaType } from '../utils';\n\n/**\n * SchemaField - Wraps JsonSchemaForm with field label and metadata\n * Used by ObjectField to render each property with its label\n */\nexport const SchemaField: Component<SchemaFieldProps> = (props) => {\n const schemaType = () => resolveSchemaType(props.schema) || 'string';\n const nullable = () => isNullable(props.schema);\n const isComplexType = () =>\n schemaType() === 'object' || schemaType() === 'array';\n\n return (\n <div class=\"space-y-2\">\n {/* Field label and metadata */}\n <div class=\"flex items-center gap-2 flex-wrap\">\n <Show\n when={props.schema.title}\n fallback={\n <span class=\"font-mono text-sm font-medium text-surface-900 dark:text-surface-100\">\n {props.name}\n </span>\n }\n >\n <span class=\"text-sm font-medium text-surface-900 dark:text-surface-100\">\n {props.schema.title}\n </span>\n <span class=\"font-mono text-xs text-surface-400 dark:text-surface-500\">\n {props.name}\n </span>\n </Show>\n <Show when={props.required}>\n <span class=\"text-rose-500 text-xs font-semibold\">required</span>\n </Show>\n <span class=\"text-xs text-surface-400 dark:text-surface-500\">\n {schemaType()}\n {nullable() ? ' | null' : ''}\n </span>\n <Show when={props.schema.format}>\n <span class=\"text-xs text-surface-400 dark:text-surface-500\">\n ({props.schema.format})\n </span>\n </Show>\n </div>\n\n {/* Description */}\n <Show when={props.schema.description}>\n <p class=\"text-xs text-surface-400 dark:text-surface-500\">\n {props.schema.description}\n </p>\n </Show>\n\n {/* Field input */}\n <Show\n when={isComplexType()}\n fallback={\n <div class=\"sm:max-w-xs\">\n <JsonSchemaForm\n schema={props.schema}\n value={props.value}\n onChange={props.onChange}\n path={props.path}\n />\n </div>\n }\n >\n <JsonSchemaForm\n schema={props.schema}\n value={props.value}\n onChange={props.onChange}\n path={props.path}\n />\n </Show>\n </div>\n );\n};\n"],"names":["SchemaField","props","schemaType","resolveSchemaType","schema","nullable","isNullable","isComplexType","_el$","_tmpl$6","_el$2","firstChild","_el$6","_$insert","_$createComponent","Show","when","title","fallback","_el$10","_tmpl$7","name","children","_el$3","_tmpl$","_el$4","_tmpl$2","required","_tmpl$3","format","_el$7","_tmpl$4","_el$8","_el$0","nextSibling","description","_el$1","_tmpl$5","_el$11","_tmpl$8","JsonSchemaForm","value","onChange","path"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { template as l, insert as n, createComponent as o, memo as L, effect as H, className as m, setAttribute as k, setStyleProperty as T, delegateEvents as F } from "solid-js/web";
|
|
2
2
|
import { createMemo as J, createSignal as E, Show as v, For as z } from "solid-js";
|
|
3
3
|
import { useCopyToClipboard as K } from "../../hooks/useCopyToClipboard.js";
|
|
4
|
-
var U = /* @__PURE__ */ l('<a target=_blank rel="noopener noreferrer"class="underline decoration-current/50 hover:decoration-current">'), S = /* @__PURE__ */ l("<span>"), q = /* @__PURE__ */ l('<span>"<!>"'), G = /* @__PURE__ */ l("<span>null"), I = /* @__PURE__ */ l('<button type=button class="w-4 h-5 flex items-center justify-center text-surface-400 hover:text-surface-600 dark:hover:text-surface-300 flex-shrink-0 -ml-4"><svg fill=none viewBox="0 0 24 24"stroke=currentColor stroke-width=2 aria-hidden=true><path stroke-linecap=round stroke-linejoin=round d="M9 5l7 7-7 7">'), Q = /* @__PURE__ */ l('<span class="w-4 flex-shrink-0">'), W = /* @__PURE__ */ l('<span class="text-violet-600 dark:text-violet-400">"<!>"'), X = /* @__PURE__ */ l('<span class="text-surface-500 dark:text-surface-400 mx-1">:'), Y = /* @__PURE__ */ l('<span class="text-surface-500 dark:text-surface-400">'), Z = /* @__PURE__ */ l('<div class="ml-4 border-l border-surface-200 dark:border-surface-700 pl-2">'), M = /* @__PURE__ */ l('<span class="text-surface-500 dark:text-surface-400">,'), ee = /* @__PURE__ */ l('<div class="flex items-center"><span class="w-4 flex-shrink-0"></span><span class="text-surface-500 dark:text-surface-400">'), te = /* @__PURE__ */ l('<div class="font-mono text-sm leading-relaxed"><div class="flex items-start">'), re = /* @__PURE__ */ l('<button type=button class="text-surface-500 dark:text-surface-400 hover:text-surface-700 dark:hover:text-surface-200"><span class="mx-1 px-1.5 py-0.5 bg-surface-100 dark:bg-surface-800 rounded text-xs"> '), ne = /* @__PURE__ */ l('<svg class="w-3.5 h-3.5 text-emerald-500"fill=none viewBox="0 0 24 24"stroke=currentColor stroke-width=2 aria-hidden=true><path stroke-linecap=round stroke-linejoin=round d="M5 13l4 4L19 7">'), ae = /* @__PURE__ */ l('<span class="text-emerald-600 dark:text-emerald-400">'), le = /* @__PURE__ */ l('<div><div class="absolute top-3 right-3 z-10 flex items-center gap-2 opacity-0 group-hover:opacity-100 transition-opacity"><button type=button class="px-2 py-1 text-xs font-medium text-surface-400 dark:text-surface-500 hover:text-surface-600 dark:hover:text-surface-300 bg-surface-100/80 dark:bg-surface-800/80 hover:bg-surface-200/80 dark:hover:bg-surface-700/80 backdrop-blur-sm rounded-lg transition-all"><svg class="w-3.5 h-3.5"fill=none viewBox="0 0 24 24"stroke=currentColor stroke-width=2 aria-hidden=true><path stroke-linecap=round stroke-linejoin=round d="M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4"></path></svg></button><button type=button class="px-2 py-1 text-xs font-medium text-surface-400 dark:text-surface-500 hover:text-surface-600 dark:hover:text-surface-300 bg-surface-100/80 dark:bg-surface-800/80 hover:bg-surface-200/80 dark:hover:bg-surface-700/80 backdrop-blur-sm rounded-lg transition-all"><svg class="w-3.5 h-3.5"fill=none viewBox="0 0 24 24"stroke=currentColor stroke-width=2 aria-hidden=true><path stroke-linecap=round stroke-linejoin=round d="M9 9V4.5M9 9H4.5M9 9L3.75 3.75M9 15v4.5M9 15H4.5M9 15l-5.25 5.25M15 9h4.5M15 9V4.5M15 9l5.25-5.25M15 15h4.5M15 15v4.5m0-4.5l5.25 5.25"></path></svg></button><button type=button class="flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium text-surface-400 dark:text-surface-500 hover:text-surface-600 dark:hover:text-surface-300 bg-surface-100/80 dark:bg-surface-800/80 hover:bg-surface-200/80 dark:hover:bg-surface-700/80 backdrop-blur-sm rounded-lg transition-all"></button></div><div class="p-6 pt-10 overflow-auto scrollbar-thin">'), se = /* @__PURE__ */ l('<svg class="w-3.5 h-3.5"fill=none viewBox="0 0 24 24"stroke=currentColor stroke-width=2 aria-hidden=true><path stroke-linecap=round stroke-linejoin=round d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z">'), ue = /* @__PURE__ */ l("<div class=pl-4>");
|
|
4
|
+
var U = /* @__PURE__ */ l('<a target=_blank rel="noopener noreferrer"class="underline decoration-current/50 hover:decoration-current">'), S = /* @__PURE__ */ l("<span>"), q = /* @__PURE__ */ l('<span>"<!>"'), G = /* @__PURE__ */ l("<span>null"), I = /* @__PURE__ */ l('<button type=button class="w-4 h-5 flex items-center justify-center text-surface-400 hover:text-surface-600 dark:hover:text-surface-300 flex-shrink-0 -ml-4"><svg fill=none viewBox="0 0 24 24"stroke=currentColor stroke-width=2 aria-hidden=true><path stroke-linecap=round stroke-linejoin=round d="M9 5l7 7-7 7">'), Q = /* @__PURE__ */ l('<span class="w-4 flex-shrink-0 -ml-4">'), W = /* @__PURE__ */ l('<span class="text-violet-600 dark:text-violet-400">"<!>"'), X = /* @__PURE__ */ l('<span class="text-surface-500 dark:text-surface-400 mx-1">:'), Y = /* @__PURE__ */ l('<span class="text-surface-500 dark:text-surface-400">'), Z = /* @__PURE__ */ l('<div class="ml-4 border-l border-surface-200 dark:border-surface-700 pl-2">'), M = /* @__PURE__ */ l('<span class="text-surface-500 dark:text-surface-400">,'), ee = /* @__PURE__ */ l('<div class="flex items-center"><span class="w-4 flex-shrink-0 -ml-4"></span><span class="text-surface-500 dark:text-surface-400">'), te = /* @__PURE__ */ l('<div class="font-mono text-sm leading-relaxed"><div class="flex items-start">'), re = /* @__PURE__ */ l('<button type=button class="text-surface-500 dark:text-surface-400 hover:text-surface-700 dark:hover:text-surface-200"><span class="mx-1 px-1.5 py-0.5 bg-surface-100 dark:bg-surface-800 rounded text-xs"> '), ne = /* @__PURE__ */ l('<svg class="w-3.5 h-3.5 text-emerald-500"fill=none viewBox="0 0 24 24"stroke=currentColor stroke-width=2 aria-hidden=true><path stroke-linecap=round stroke-linejoin=round d="M5 13l4 4L19 7">'), ae = /* @__PURE__ */ l('<span class="text-emerald-600 dark:text-emerald-400">'), le = /* @__PURE__ */ l('<div><div class="absolute top-3 right-3 z-10 flex items-center gap-2 opacity-0 group-hover:opacity-100 transition-opacity"><button type=button class="px-2 py-1 text-xs font-medium text-surface-400 dark:text-surface-500 hover:text-surface-600 dark:hover:text-surface-300 bg-surface-100/80 dark:bg-surface-800/80 hover:bg-surface-200/80 dark:hover:bg-surface-700/80 backdrop-blur-sm rounded-lg transition-all"><svg class="w-3.5 h-3.5"fill=none viewBox="0 0 24 24"stroke=currentColor stroke-width=2 aria-hidden=true><path stroke-linecap=round stroke-linejoin=round d="M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4"></path></svg></button><button type=button class="px-2 py-1 text-xs font-medium text-surface-400 dark:text-surface-500 hover:text-surface-600 dark:hover:text-surface-300 bg-surface-100/80 dark:bg-surface-800/80 hover:bg-surface-200/80 dark:hover:bg-surface-700/80 backdrop-blur-sm rounded-lg transition-all"><svg class="w-3.5 h-3.5"fill=none viewBox="0 0 24 24"stroke=currentColor stroke-width=2 aria-hidden=true><path stroke-linecap=round stroke-linejoin=round d="M9 9V4.5M9 9H4.5M9 9L3.75 3.75M9 15v4.5M9 15H4.5M9 15l-5.25 5.25M15 9h4.5M15 9V4.5M15 9l5.25-5.25M15 15h4.5M15 15v4.5m0-4.5l5.25 5.25"></path></svg></button><button type=button class="flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium text-surface-400 dark:text-surface-500 hover:text-surface-600 dark:hover:text-surface-300 bg-surface-100/80 dark:bg-surface-800/80 hover:bg-surface-200/80 dark:hover:bg-surface-700/80 backdrop-blur-sm rounded-lg transition-all"></button></div><div class="p-6 pt-10 overflow-auto scrollbar-thin">'), se = /* @__PURE__ */ l('<svg class="w-3.5 h-3.5"fill=none viewBox="0 0 24 24"stroke=currentColor stroke-width=2 aria-hidden=true><path stroke-linecap=round stroke-linejoin=round d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z">'), ue = /* @__PURE__ */ l("<div class=pl-4>");
|
|
5
5
|
const ie = /^https?:\/\/\S+$/, ve = (e, {
|
|
6
6
|
type: u
|
|
7
7
|
}) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsonViewer.js","sources":["../../../src/components/JsonViewer/JsonViewer.tsx"],"sourcesContent":["import { type Component, For, Show, createMemo, createSignal } from 'solid-js';\nimport { useCopyToClipboard } from '../../hooks';\nimport type {\n JsonNodeProps,\n JsonValue,\n JsonValueRenderer,\n JsonViewerProps,\n} from './types';\n\nconst URL_RE = /^https?:\\/\\/\\S+$/;\n\nexport const urlRenderer: JsonValueRenderer = (value, { type }) => {\n if (type !== 'string') {\n return null;\n }\n const str = String(value);\n if (!URL_RE.test(str)) {\n return null;\n }\n return (\n <a\n href={str}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"underline decoration-current/50 hover:decoration-current\"\n >\n {str}\n </a>\n );\n};\n\n/**\n * Format a value as pretty-printed JSON string.\n */\nfunction formatJson(value: unknown, indent = 2): string {\n try {\n return JSON.stringify(value, null, indent);\n } catch {\n return String(value);\n }\n}\n\nconst getValueType = (value: unknown): string => {\n if (value === null) {\n return 'null';\n }\n if (Array.isArray(value)) {\n return 'array';\n }\n return typeof value;\n};\n\nconst getValueColor = (type: string): string => {\n switch (type) {\n case 'string':\n return 'text-emerald-600 dark:text-emerald-400';\n case 'number':\n return 'text-accent-600 dark:text-accent-400';\n case 'boolean':\n return 'text-amber-600 dark:text-amber-400';\n case 'null':\n return 'text-surface-500 dark:text-surface-500';\n default:\n return 'text-surface-800 dark:text-surface-200';\n }\n};\n\nconst JsonNode: Component<JsonNodeProps> = (props) => {\n const type = () => getValueType(props.value);\n const isExpandable = () => type() === 'object' || type() === 'array';\n const [expanded, setExpanded] = createSignal(\n props.depth < props.initialExpandDepth,\n );\n\n const entries = createMemo(() => {\n if (type() === 'array') {\n return (props.value as JsonValue[]).map(\n (v, i) => [String(i), v] as [string, JsonValue],\n );\n }\n if (type() === 'object' && props.value !== null) {\n return Object.entries(props.value as Record<string, JsonValue>);\n }\n return [];\n });\n\n const itemCount = () => entries().length;\n const brackets = () => (type() === 'array' ? ['[', ']'] : ['{', '}']);\n\n const renderPrimitive = () => {\n const t = type();\n const colorClass = getValueColor(t);\n\n if (props.valueRenderers?.length) {\n const ctx = {\n type: t,\n keyName: props.keyName,\n depth: props.depth,\n path: props.path,\n };\n for (const renderer of props.valueRenderers) {\n const result = renderer(props.value, ctx);\n if (result != null && result !== false) {\n return (\n <span class={colorClass}>\n {t === 'string' ? <>\"{result}\"</> : result}\n </span>\n );\n }\n }\n }\n\n if (t === 'string') {\n return <span class={colorClass}>\"{String(props.value)}\"</span>;\n }\n if (t === 'null') {\n return <span class={colorClass}>null</span>;\n }\n if (t === 'boolean') {\n return <span class={colorClass}>{props.value ? 'true' : 'false'}</span>;\n }\n return <span class={colorClass}>{String(props.value)}</span>;\n };\n\n return (\n <div class=\"font-mono text-sm leading-relaxed\">\n <div class=\"flex items-start\">\n {/* Expand/collapse toggle */}\n <Show when={isExpandable()}>\n <button\n type=\"button\"\n onClick={() => setExpanded(!expanded())}\n class=\"w-4 h-5 flex items-center justify-center text-surface-400 hover:text-surface-600 dark:hover:text-surface-300 flex-shrink-0 -ml-4\"\n aria-label={expanded() ? 'Collapse' : 'Expand'}\n >\n <svg\n class={`w-3 h-3 transition-transform duration-150 ${expanded() ? 'rotate-90' : ''}`}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M9 5l7 7-7 7\"\n />\n </svg>\n </button>\n </Show>\n <Show when={!isExpandable()}>\n <span class=\"w-4 flex-shrink-0\" />\n </Show>\n\n {/* Key name */}\n <Show when={props.keyName !== undefined}>\n <span class=\"text-violet-600 dark:text-violet-400\">\n \"{props.keyName}\"\n </span>\n <span class=\"text-surface-500 dark:text-surface-400 mx-1\">:</span>\n </Show>\n\n {/* Value */}\n <Show\n when={isExpandable()}\n fallback={\n <>\n {renderPrimitive()}\n <Show when={!props.isLast}>\n <span class=\"text-surface-500 dark:text-surface-400\">,</span>\n </Show>\n </>\n }\n >\n <Show\n when={expanded()}\n fallback={\n <>\n <button\n type=\"button\"\n onClick={() => setExpanded(true)}\n class=\"text-surface-500 dark:text-surface-400 hover:text-surface-700 dark:hover:text-surface-200\"\n >\n {brackets()[0]}\n <span class=\"mx-1 px-1.5 py-0.5 bg-surface-100 dark:bg-surface-800 rounded text-xs\">\n {itemCount()} {itemCount() === 1 ? 'item' : 'items'}\n </span>\n {brackets()[1]}\n </button>\n <Show when={!props.isLast}>\n <span class=\"text-surface-500 dark:text-surface-400\">,</span>\n </Show>\n </>\n }\n >\n <span class=\"text-surface-500 dark:text-surface-400\">\n {brackets()[0]}\n </span>\n </Show>\n </Show>\n </div>\n\n {/* Children */}\n <Show when={isExpandable() && expanded()}>\n <div class=\"ml-4 border-l border-surface-200 dark:border-surface-700 pl-2\">\n <For each={entries()}>\n {([key, val], index) => (\n <JsonNode\n keyName={type() === 'object' ? key : undefined}\n value={val}\n depth={props.depth + 1}\n initialExpandDepth={props.initialExpandDepth}\n isLast={index() === itemCount() - 1}\n valueRenderers={props.valueRenderers}\n path={[...props.path, type() === 'array' ? Number(key) : key]}\n />\n )}\n </For>\n </div>\n <div class=\"flex items-center\">\n <span class=\"w-4 flex-shrink-0\" />\n <span class=\"text-surface-500 dark:text-surface-400\">\n {brackets()[1]}\n </span>\n <Show when={!props.isLast}>\n <span class=\"text-surface-500 dark:text-surface-400\">,</span>\n </Show>\n </div>\n </Show>\n </div>\n );\n};\n\nexport const JsonViewer: Component<JsonViewerProps> = (props) => {\n const { copied, copy } = useCopyToClipboard();\n\n const maxHeight = () => props.maxHeight ?? '31.25rem';\n const initialExpandDepth = () => props.initialExpandDepth ?? 2;\n const copyLabel = () => props.copyLabel ?? 'Copy';\n const copiedLabel = () => props.copiedLabel ?? 'Copied';\n const expandAllLabel = () => props.expandAllLabel ?? 'Expand all';\n const collapseAllLabel = () => props.collapseAllLabel ?? 'Collapse all';\n\n const jsonString = createMemo(() => formatJson(props.data));\n\n const [expandState, setExpandState] = createSignal<boolean | null>(null);\n const [key, setKey] = createSignal(1);\n\n const currentExpandDepth = () => {\n const state = expandState();\n if (state === true) {\n return 100;\n }\n if (state === false) {\n return 0;\n }\n return initialExpandDepth();\n };\n\n const handleExpandAll = () => {\n setExpandState(true);\n setKey((k) => k + 1);\n };\n\n const handleCollapseAll = () => {\n setExpandState(false);\n setKey((k) => k + 1);\n };\n\n return (\n <div\n class={`relative group rounded-xl overflow-hidden glass-card ${props.class ?? ''}`}\n >\n {/* Toolbar */}\n <div class=\"absolute top-3 right-3 z-10 flex items-center gap-2 opacity-0 group-hover:opacity-100 transition-opacity\">\n <button\n type=\"button\"\n onClick={handleExpandAll}\n class=\"px-2 py-1 text-xs font-medium text-surface-400 dark:text-surface-500 hover:text-surface-600 dark:hover:text-surface-300 bg-surface-100/80 dark:bg-surface-800/80 hover:bg-surface-200/80 dark:hover:bg-surface-700/80 backdrop-blur-sm rounded-lg transition-all\"\n title={expandAllLabel()}\n >\n <svg\n class=\"w-3.5 h-3.5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4\"\n />\n </svg>\n </button>\n <button\n type=\"button\"\n onClick={handleCollapseAll}\n class=\"px-2 py-1 text-xs font-medium text-surface-400 dark:text-surface-500 hover:text-surface-600 dark:hover:text-surface-300 bg-surface-100/80 dark:bg-surface-800/80 hover:bg-surface-200/80 dark:hover:bg-surface-700/80 backdrop-blur-sm rounded-lg transition-all\"\n title={collapseAllLabel()}\n >\n <svg\n class=\"w-3.5 h-3.5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M9 9V4.5M9 9H4.5M9 9L3.75 3.75M9 15v4.5M9 15H4.5M9 15l-5.25 5.25M15 9h4.5M15 9V4.5M15 9l5.25-5.25M15 15h4.5M15 15v4.5m0-4.5l5.25 5.25\"\n />\n </svg>\n </button>\n <button\n type=\"button\"\n onClick={() => copy(jsonString())}\n class=\"flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium text-surface-400 dark:text-surface-500 hover:text-surface-600 dark:hover:text-surface-300 bg-surface-100/80 dark:bg-surface-800/80 hover:bg-surface-200/80 dark:hover:bg-surface-700/80 backdrop-blur-sm rounded-lg transition-all\"\n >\n <Show\n when={copied()}\n fallback={\n <>\n <svg\n class=\"w-3.5 h-3.5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\"\n />\n </svg>\n {copyLabel()}\n </>\n }\n >\n <svg\n class=\"w-3.5 h-3.5 text-emerald-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n <span class=\"text-emerald-600 dark:text-emerald-400\">\n {copiedLabel()}\n </span>\n </Show>\n </button>\n </div>\n\n {/* JSON content */}\n <div\n class=\"p-6 pt-10 overflow-auto scrollbar-thin\"\n style={{ 'max-height': maxHeight() }}\n >\n <For each={[key()]}>\n {() => (\n <div class=\"pl-4\">\n <JsonNode\n value={props.data as JsonValue}\n depth={0}\n initialExpandDepth={currentExpandDepth()}\n isLast\n valueRenderers={props.valueRenderers}\n path={[]}\n />\n </div>\n )}\n </For>\n </div>\n </div>\n );\n};\n"],"names":["URL_RE","urlRenderer","value","type","str","String","test","_el$","_tmpl$","_$setAttribute","_$insert","formatJson","indent","JSON","stringify","getValueType","Array","isArray","getValueColor","JsonNode","props","isExpandable","expanded","setExpanded","createSignal","depth","initialExpandDepth","entries","createMemo","map","v","i","Object","itemCount","length","brackets","renderPrimitive","t","colorClass","valueRenderers","ctx","keyName","path","renderer","result","_el$2","_tmpl$2","_$className","_el$3","_tmpl$3","_el$4","firstChild","_el$6","nextSibling","_el$7","_tmpl$4","_el$8","_el$9","_el$0","_tmpl$11","_el$1","_$createComponent","Show","when","children","_el$10","_tmpl$5","_el$11","$$click","_$effect","_p$","_v$","_v$2","e","undefined","_tmpl$6","_el$13","_tmpl$7","_el$14","_el$16","_tmpl$8","fallback","_$memo","isLast","_tmpl$1","_el$25","_tmpl$12","_el$26","_el$27","_el$18","_tmpl$9","_el$19","_tmpl$0","For","each","key","val","index","Number","_el$20","_tmpl$10","_el$21","_el$22","JsonViewer","copied","copy","useCopyToClipboard","maxHeight","copyLabel","copiedLabel","expandAllLabel","collapseAllLabel","jsonString","data","expandState","setExpandState","setKey","currentExpandDepth","state","handleExpandAll","k","handleCollapseAll","_el$29","_tmpl$15","_el$30","_el$31","_el$32","_el$33","_el$36","_tmpl$16","_tmpl$13","_el$35","_tmpl$14","_el$38","_tmpl$17","_v$3","class","_v$4","_v$5","_v$6","a","o","_$setStyleProperty","_$delegateEvents"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"JsonViewer.js","sources":["../../../src/components/JsonViewer/JsonViewer.tsx"],"sourcesContent":["import { type Component, For, Show, createMemo, createSignal } from 'solid-js';\nimport { useCopyToClipboard } from '../../hooks';\nimport type {\n JsonNodeProps,\n JsonValue,\n JsonValueRenderer,\n JsonViewerProps,\n} from './types';\n\nconst URL_RE = /^https?:\\/\\/\\S+$/;\n\nexport const urlRenderer: JsonValueRenderer = (value, { type }) => {\n if (type !== 'string') {\n return null;\n }\n const str = String(value);\n if (!URL_RE.test(str)) {\n return null;\n }\n return (\n <a\n href={str}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"underline decoration-current/50 hover:decoration-current\"\n >\n {str}\n </a>\n );\n};\n\n/**\n * Format a value as pretty-printed JSON string.\n */\nfunction formatJson(value: unknown, indent = 2): string {\n try {\n return JSON.stringify(value, null, indent);\n } catch {\n return String(value);\n }\n}\n\nconst getValueType = (value: unknown): string => {\n if (value === null) {\n return 'null';\n }\n if (Array.isArray(value)) {\n return 'array';\n }\n return typeof value;\n};\n\nconst getValueColor = (type: string): string => {\n switch (type) {\n case 'string':\n return 'text-emerald-600 dark:text-emerald-400';\n case 'number':\n return 'text-accent-600 dark:text-accent-400';\n case 'boolean':\n return 'text-amber-600 dark:text-amber-400';\n case 'null':\n return 'text-surface-500 dark:text-surface-500';\n default:\n return 'text-surface-800 dark:text-surface-200';\n }\n};\n\nconst JsonNode: Component<JsonNodeProps> = (props) => {\n const type = () => getValueType(props.value);\n const isExpandable = () => type() === 'object' || type() === 'array';\n const [expanded, setExpanded] = createSignal(\n props.depth < props.initialExpandDepth,\n );\n\n const entries = createMemo(() => {\n if (type() === 'array') {\n return (props.value as JsonValue[]).map(\n (v, i) => [String(i), v] as [string, JsonValue],\n );\n }\n if (type() === 'object' && props.value !== null) {\n return Object.entries(props.value as Record<string, JsonValue>);\n }\n return [];\n });\n\n const itemCount = () => entries().length;\n const brackets = () => (type() === 'array' ? ['[', ']'] : ['{', '}']);\n\n const renderPrimitive = () => {\n const t = type();\n const colorClass = getValueColor(t);\n\n if (props.valueRenderers?.length) {\n const ctx = {\n type: t,\n keyName: props.keyName,\n depth: props.depth,\n path: props.path,\n };\n for (const renderer of props.valueRenderers) {\n const result = renderer(props.value, ctx);\n if (result != null && result !== false) {\n return (\n <span class={colorClass}>\n {t === 'string' ? <>\"{result}\"</> : result}\n </span>\n );\n }\n }\n }\n\n if (t === 'string') {\n return <span class={colorClass}>\"{String(props.value)}\"</span>;\n }\n if (t === 'null') {\n return <span class={colorClass}>null</span>;\n }\n if (t === 'boolean') {\n return <span class={colorClass}>{props.value ? 'true' : 'false'}</span>;\n }\n return <span class={colorClass}>{String(props.value)}</span>;\n };\n\n return (\n <div class=\"font-mono text-sm leading-relaxed\">\n <div class=\"flex items-start\">\n {/* Expand/collapse toggle */}\n <Show when={isExpandable()}>\n <button\n type=\"button\"\n onClick={() => setExpanded(!expanded())}\n class=\"w-4 h-5 flex items-center justify-center text-surface-400 hover:text-surface-600 dark:hover:text-surface-300 flex-shrink-0 -ml-4\"\n aria-label={expanded() ? 'Collapse' : 'Expand'}\n >\n <svg\n class={`w-3 h-3 transition-transform duration-150 ${expanded() ? 'rotate-90' : ''}`}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M9 5l7 7-7 7\"\n />\n </svg>\n </button>\n </Show>\n <Show when={!isExpandable()}>\n <span class=\"w-4 flex-shrink-0 -ml-4\" />\n </Show>\n\n {/* Key name */}\n <Show when={props.keyName !== undefined}>\n <span class=\"text-violet-600 dark:text-violet-400\">\n \"{props.keyName}\"\n </span>\n <span class=\"text-surface-500 dark:text-surface-400 mx-1\">:</span>\n </Show>\n\n {/* Value */}\n <Show\n when={isExpandable()}\n fallback={\n <>\n {renderPrimitive()}\n <Show when={!props.isLast}>\n <span class=\"text-surface-500 dark:text-surface-400\">,</span>\n </Show>\n </>\n }\n >\n <Show\n when={expanded()}\n fallback={\n <>\n <button\n type=\"button\"\n onClick={() => setExpanded(true)}\n class=\"text-surface-500 dark:text-surface-400 hover:text-surface-700 dark:hover:text-surface-200\"\n >\n {brackets()[0]}\n <span class=\"mx-1 px-1.5 py-0.5 bg-surface-100 dark:bg-surface-800 rounded text-xs\">\n {itemCount()} {itemCount() === 1 ? 'item' : 'items'}\n </span>\n {brackets()[1]}\n </button>\n <Show when={!props.isLast}>\n <span class=\"text-surface-500 dark:text-surface-400\">,</span>\n </Show>\n </>\n }\n >\n <span class=\"text-surface-500 dark:text-surface-400\">\n {brackets()[0]}\n </span>\n </Show>\n </Show>\n </div>\n\n {/* Children */}\n <Show when={isExpandable() && expanded()}>\n <div class=\"ml-4 border-l border-surface-200 dark:border-surface-700 pl-2\">\n <For each={entries()}>\n {([key, val], index) => (\n <JsonNode\n keyName={type() === 'object' ? key : undefined}\n value={val}\n depth={props.depth + 1}\n initialExpandDepth={props.initialExpandDepth}\n isLast={index() === itemCount() - 1}\n valueRenderers={props.valueRenderers}\n path={[...props.path, type() === 'array' ? Number(key) : key]}\n />\n )}\n </For>\n </div>\n <div class=\"flex items-center\">\n <span class=\"w-4 flex-shrink-0 -ml-4\" />\n <span class=\"text-surface-500 dark:text-surface-400\">\n {brackets()[1]}\n </span>\n <Show when={!props.isLast}>\n <span class=\"text-surface-500 dark:text-surface-400\">,</span>\n </Show>\n </div>\n </Show>\n </div>\n );\n};\n\nexport const JsonViewer: Component<JsonViewerProps> = (props) => {\n const { copied, copy } = useCopyToClipboard();\n\n const maxHeight = () => props.maxHeight ?? '31.25rem';\n const initialExpandDepth = () => props.initialExpandDepth ?? 2;\n const copyLabel = () => props.copyLabel ?? 'Copy';\n const copiedLabel = () => props.copiedLabel ?? 'Copied';\n const expandAllLabel = () => props.expandAllLabel ?? 'Expand all';\n const collapseAllLabel = () => props.collapseAllLabel ?? 'Collapse all';\n\n const jsonString = createMemo(() => formatJson(props.data));\n\n const [expandState, setExpandState] = createSignal<boolean | null>(null);\n const [key, setKey] = createSignal(1);\n\n const currentExpandDepth = () => {\n const state = expandState();\n if (state === true) {\n return 100;\n }\n if (state === false) {\n return 0;\n }\n return initialExpandDepth();\n };\n\n const handleExpandAll = () => {\n setExpandState(true);\n setKey((k) => k + 1);\n };\n\n const handleCollapseAll = () => {\n setExpandState(false);\n setKey((k) => k + 1);\n };\n\n return (\n <div\n class={`relative group rounded-xl overflow-hidden glass-card ${props.class ?? ''}`}\n >\n {/* Toolbar */}\n <div class=\"absolute top-3 right-3 z-10 flex items-center gap-2 opacity-0 group-hover:opacity-100 transition-opacity\">\n <button\n type=\"button\"\n onClick={handleExpandAll}\n class=\"px-2 py-1 text-xs font-medium text-surface-400 dark:text-surface-500 hover:text-surface-600 dark:hover:text-surface-300 bg-surface-100/80 dark:bg-surface-800/80 hover:bg-surface-200/80 dark:hover:bg-surface-700/80 backdrop-blur-sm rounded-lg transition-all\"\n title={expandAllLabel()}\n >\n <svg\n class=\"w-3.5 h-3.5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4\"\n />\n </svg>\n </button>\n <button\n type=\"button\"\n onClick={handleCollapseAll}\n class=\"px-2 py-1 text-xs font-medium text-surface-400 dark:text-surface-500 hover:text-surface-600 dark:hover:text-surface-300 bg-surface-100/80 dark:bg-surface-800/80 hover:bg-surface-200/80 dark:hover:bg-surface-700/80 backdrop-blur-sm rounded-lg transition-all\"\n title={collapseAllLabel()}\n >\n <svg\n class=\"w-3.5 h-3.5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M9 9V4.5M9 9H4.5M9 9L3.75 3.75M9 15v4.5M9 15H4.5M9 15l-5.25 5.25M15 9h4.5M15 9V4.5M15 9l5.25-5.25M15 15h4.5M15 15v4.5m0-4.5l5.25 5.25\"\n />\n </svg>\n </button>\n <button\n type=\"button\"\n onClick={() => copy(jsonString())}\n class=\"flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium text-surface-400 dark:text-surface-500 hover:text-surface-600 dark:hover:text-surface-300 bg-surface-100/80 dark:bg-surface-800/80 hover:bg-surface-200/80 dark:hover:bg-surface-700/80 backdrop-blur-sm rounded-lg transition-all\"\n >\n <Show\n when={copied()}\n fallback={\n <>\n <svg\n class=\"w-3.5 h-3.5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\"\n />\n </svg>\n {copyLabel()}\n </>\n }\n >\n <svg\n class=\"w-3.5 h-3.5 text-emerald-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n <span class=\"text-emerald-600 dark:text-emerald-400\">\n {copiedLabel()}\n </span>\n </Show>\n </button>\n </div>\n\n {/* JSON content */}\n <div\n class=\"p-6 pt-10 overflow-auto scrollbar-thin\"\n style={{ 'max-height': maxHeight() }}\n >\n <For each={[key()]}>\n {() => (\n <div class=\"pl-4\">\n <JsonNode\n value={props.data as JsonValue}\n depth={0}\n initialExpandDepth={currentExpandDepth()}\n isLast\n valueRenderers={props.valueRenderers}\n path={[]}\n />\n </div>\n )}\n </For>\n </div>\n </div>\n );\n};\n"],"names":["URL_RE","urlRenderer","value","type","str","String","test","_el$","_tmpl$","_$setAttribute","_$insert","formatJson","indent","JSON","stringify","getValueType","Array","isArray","getValueColor","JsonNode","props","isExpandable","expanded","setExpanded","createSignal","depth","initialExpandDepth","entries","createMemo","map","v","i","Object","itemCount","length","brackets","renderPrimitive","t","colorClass","valueRenderers","ctx","keyName","path","renderer","result","_el$2","_tmpl$2","_$className","_el$3","_tmpl$3","_el$4","firstChild","_el$6","nextSibling","_el$7","_tmpl$4","_el$8","_el$9","_el$0","_tmpl$11","_el$1","_$createComponent","Show","when","children","_el$10","_tmpl$5","_el$11","$$click","_$effect","_p$","_v$","_v$2","e","undefined","_tmpl$6","_el$13","_tmpl$7","_el$14","_el$16","_tmpl$8","fallback","_$memo","isLast","_tmpl$1","_el$25","_tmpl$12","_el$26","_el$27","_el$18","_tmpl$9","_el$19","_tmpl$0","For","each","key","val","index","Number","_el$20","_tmpl$10","_el$21","_el$22","JsonViewer","copied","copy","useCopyToClipboard","maxHeight","copyLabel","copiedLabel","expandAllLabel","collapseAllLabel","jsonString","data","expandState","setExpandState","setKey","currentExpandDepth","state","handleExpandAll","k","handleCollapseAll","_el$29","_tmpl$15","_el$30","_el$31","_el$32","_el$33","_el$36","_tmpl$16","_tmpl$13","_el$35","_tmpl$14","_el$38","_tmpl$17","_v$3","class","_v$4","_v$5","_v$6","a","o","_$setStyleProperty","_$delegateEvents"],"mappings":"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"}
|