glass-ui-solid 0.4.3 → 0.4.4
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/JsonSchemaForm.d.ts +14 -0
- package/dist/components/JsonSchemaForm/JsonSchemaForm.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/JsonSchemaForm.js +180 -158
- package/dist/components/JsonSchemaForm/JsonSchemaForm.js.map +1 -1
- package/dist/components/JsonSchemaForm/fields/ArrayField.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/fields/ArrayField.js +109 -168
- package/dist/components/JsonSchemaForm/fields/ArrayField.js.map +1 -1
- package/dist/components/JsonSchemaForm/fields/NumberField.d.ts +2 -1
- package/dist/components/JsonSchemaForm/fields/NumberField.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/fields/NumberField.js +30 -22
- package/dist/components/JsonSchemaForm/fields/NumberField.js.map +1 -1
- package/dist/components/JsonSchemaForm/fields/OneOfField.d.ts +2 -1
- package/dist/components/JsonSchemaForm/fields/OneOfField.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/fields/OneOfField.js +58 -21
- package/dist/components/JsonSchemaForm/fields/OneOfField.js.map +1 -1
- package/dist/components/JsonSchemaForm/fields/SchemaField.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/fields/SchemaField.js +76 -58
- package/dist/components/JsonSchemaForm/fields/SchemaField.js.map +1 -1
- package/dist/components/JsonSchemaForm/fields/StringField.d.ts +2 -1
- package/dist/components/JsonSchemaForm/fields/StringField.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/fields/StringField.js +21 -8
- package/dist/components/JsonSchemaForm/fields/StringField.js.map +1 -1
- package/dist/components/JsonSchemaForm/index.d.ts +2 -0
- package/dist/components/JsonSchemaForm/index.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/registry.d.ts +65 -0
- package/dist/components/JsonSchemaForm/registry.d.ts.map +1 -0
- package/dist/components/JsonSchemaForm/registry.js +55 -0
- package/dist/components/JsonSchemaForm/registry.js.map +1 -0
- package/dist/components/JsonSchemaForm/types.d.ts +2 -0
- package/dist/components/JsonSchemaForm/types.d.ts.map +1 -1
- package/dist/components/index.d.ts +2 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/index.js +185 -179
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
|
@@ -1,247 +1,188 @@
|
|
|
1
|
-
import { template as m, insert as
|
|
2
|
-
import { Show as
|
|
3
|
-
import { resolveSchemaType as
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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);
|
|
1
|
+
import { template as m, insert as a, createComponent as s, effect as V, memo as x, delegateEvents as j } from "solid-js/web";
|
|
2
|
+
import { Show as u, For as y } from "solid-js";
|
|
3
|
+
import { resolveSchemaType as $, getDefaultValue as D } from "../utils.js";
|
|
4
|
+
import { JsonSchemaForm as I } from "../JsonSchemaForm.js";
|
|
5
|
+
import { ChevronUpIcon as E, ChevronDownIcon as T } from "../../shared/icons/ChevronIcon.js";
|
|
6
|
+
import { TrashIcon as G } from "../../shared/icons/TrashIcon.js";
|
|
7
|
+
import { PlusIcon as J } from "../../shared/icons/PlusIcon.js";
|
|
8
|
+
import { Checkbox as R } from "../../Input/Checkbox.js";
|
|
9
|
+
var U = /* @__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">'), z = /* @__PURE__ */ m("<div class=space-y-3>"), B = /* @__PURE__ */ m("<div class=space-y-1.5>"), H = /* @__PURE__ */ m('<span class="text-xs text-surface-400 dark:text-surface-500">(<!>)'), K = /* @__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">');
|
|
10
|
+
function L(t) {
|
|
11
|
+
return !t.oneOf || t.oneOf.length === 0 ? !1 : t.oneOf.every((o) => o.const !== void 0);
|
|
16
12
|
}
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
},
|
|
33
|
-
get children() {
|
|
34
|
-
return [n($, {
|
|
35
|
-
get when() {
|
|
36
|
-
return v(() => !!e.schema.enum)() && e.schema.enum.length > 0;
|
|
37
|
-
},
|
|
38
|
-
get children() {
|
|
39
|
-
return n(G, {
|
|
40
|
-
get schema() {
|
|
41
|
-
return e.schema;
|
|
42
|
-
},
|
|
43
|
-
get value() {
|
|
44
|
-
return e.value;
|
|
45
|
-
},
|
|
46
|
-
get onChange() {
|
|
47
|
-
return e.onChange;
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
}), n($, {
|
|
52
|
-
get when() {
|
|
53
|
-
return l() === "boolean";
|
|
54
|
-
},
|
|
55
|
-
get children() {
|
|
56
|
-
return n(B, {
|
|
57
|
-
get schema() {
|
|
58
|
-
return e.schema;
|
|
59
|
-
},
|
|
60
|
-
get value() {
|
|
61
|
-
return e.value;
|
|
62
|
-
},
|
|
63
|
-
get onChange() {
|
|
64
|
-
return e.onChange;
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
}), n($, {
|
|
69
|
-
get when() {
|
|
70
|
-
return l() === "number" || l() === "integer";
|
|
71
|
-
},
|
|
72
|
-
get children() {
|
|
73
|
-
return n(J, {
|
|
74
|
-
get schema() {
|
|
75
|
-
return e.schema;
|
|
76
|
-
},
|
|
77
|
-
get value() {
|
|
78
|
-
return e.value;
|
|
79
|
-
},
|
|
80
|
-
get onChange() {
|
|
81
|
-
return e.onChange;
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
})];
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
}, ge = (e) => {
|
|
89
|
-
const l = () => e.value || [], u = () => e.schema.items || {
|
|
13
|
+
const N = (t) => s(I, {
|
|
14
|
+
get schema() {
|
|
15
|
+
return t.schema;
|
|
16
|
+
},
|
|
17
|
+
get value() {
|
|
18
|
+
return t.value;
|
|
19
|
+
},
|
|
20
|
+
get onChange() {
|
|
21
|
+
return t.onChange;
|
|
22
|
+
},
|
|
23
|
+
get path() {
|
|
24
|
+
return t.path;
|
|
25
|
+
}
|
|
26
|
+
}), ne = (t) => {
|
|
27
|
+
const o = () => t.value || [], i = () => t.schema.items || {
|
|
90
28
|
type: "string"
|
|
91
29
|
}, S = () => {
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
}, A = (
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
},
|
|
98
|
-
const r = [...
|
|
99
|
-
r[
|
|
100
|
-
},
|
|
101
|
-
if (
|
|
30
|
+
const n = D(i());
|
|
31
|
+
t.onChange([...o(), n]);
|
|
32
|
+
}, A = (n) => {
|
|
33
|
+
const e = o().filter((r, l) => l !== n);
|
|
34
|
+
t.onChange(e.length > 0 ? e : void 0);
|
|
35
|
+
}, C = (n, e) => {
|
|
36
|
+
const r = [...o()];
|
|
37
|
+
r[n] = e, t.onChange(r);
|
|
38
|
+
}, w = (n, e) => {
|
|
39
|
+
if (e < 0 || e >= o().length)
|
|
102
40
|
return;
|
|
103
|
-
const r = [...
|
|
104
|
-
r.splice(
|
|
105
|
-
},
|
|
106
|
-
const
|
|
107
|
-
return
|
|
108
|
-
},
|
|
109
|
-
const
|
|
110
|
-
return
|
|
111
|
-
value:
|
|
112
|
-
label:
|
|
41
|
+
const r = [...o()], [l] = r.splice(n, 1);
|
|
42
|
+
r.splice(e, 0, l), t.onChange(r);
|
|
43
|
+
}, O = () => {
|
|
44
|
+
const n = $(i());
|
|
45
|
+
return n === "string" || n === "number" || n === "integer" || n === "boolean";
|
|
46
|
+
}, p = () => L(i()), M = () => {
|
|
47
|
+
const n = i();
|
|
48
|
+
return n.oneOf ? n.oneOf.map((e) => ({
|
|
49
|
+
value: e.const,
|
|
50
|
+
label: e.title || String(e.const)
|
|
113
51
|
})) : [];
|
|
114
|
-
},
|
|
115
|
-
const
|
|
116
|
-
if (
|
|
117
|
-
const
|
|
118
|
-
|
|
52
|
+
}, F = (n) => {
|
|
53
|
+
const e = o();
|
|
54
|
+
if (e.some((l) => l === n)) {
|
|
55
|
+
const l = e.filter((v) => v !== n);
|
|
56
|
+
t.onChange(l.length > 0 ? l : void 0);
|
|
119
57
|
} else
|
|
120
|
-
|
|
58
|
+
t.onChange([...e, n]);
|
|
121
59
|
};
|
|
122
60
|
return (() => {
|
|
123
|
-
var
|
|
124
|
-
return
|
|
61
|
+
var n = z();
|
|
62
|
+
return a(n, s(u, {
|
|
125
63
|
get when() {
|
|
126
|
-
return !
|
|
64
|
+
return !p();
|
|
127
65
|
},
|
|
128
66
|
get fallback() {
|
|
129
67
|
return (
|
|
130
68
|
/* Checkbox group for oneOf const pattern */
|
|
131
69
|
(() => {
|
|
132
|
-
var
|
|
133
|
-
return
|
|
70
|
+
var e = B();
|
|
71
|
+
return a(e, s(y, {
|
|
134
72
|
get each() {
|
|
135
73
|
return M();
|
|
136
74
|
},
|
|
137
|
-
children: (r) =>
|
|
75
|
+
children: (r) => s(R, {
|
|
138
76
|
get checked() {
|
|
139
|
-
return
|
|
77
|
+
return o().some((l) => l === r.value);
|
|
140
78
|
},
|
|
141
|
-
onChange: () =>
|
|
79
|
+
onChange: () => F(r.value),
|
|
142
80
|
get label() {
|
|
143
81
|
return r.label;
|
|
144
82
|
}
|
|
145
83
|
})
|
|
146
|
-
})),
|
|
84
|
+
})), e;
|
|
147
85
|
})()
|
|
148
86
|
);
|
|
149
87
|
},
|
|
150
88
|
get children() {
|
|
151
|
-
return [
|
|
89
|
+
return [s(y, {
|
|
152
90
|
get each() {
|
|
153
|
-
return
|
|
91
|
+
return o();
|
|
154
92
|
},
|
|
155
|
-
children: (
|
|
156
|
-
var
|
|
93
|
+
children: (e, r) => (() => {
|
|
94
|
+
var l = K(), v = l.firstChild, b = v.firstChild, _ = b.firstChild;
|
|
157
95
|
_.firstChild;
|
|
158
|
-
var P =
|
|
159
|
-
return
|
|
96
|
+
var P = b.nextSibling, g = P.firstChild, d = g.nextSibling, k = d.nextSibling;
|
|
97
|
+
return a(_, () => r() + 1, null), a(b, s(u, {
|
|
160
98
|
get when() {
|
|
161
|
-
return
|
|
99
|
+
return $(i());
|
|
162
100
|
},
|
|
163
101
|
get children() {
|
|
164
|
-
var
|
|
165
|
-
return h.nextSibling, c
|
|
102
|
+
var c = H(), f = c.firstChild, h = f.nextSibling;
|
|
103
|
+
return h.nextSibling, a(c, () => $(i()), h), c;
|
|
166
104
|
}
|
|
167
|
-
}), null), g.$$click = () =>
|
|
105
|
+
}), null), g.$$click = () => w(r(), r() - 1), a(g, s(E, {
|
|
168
106
|
class: "w-4 h-4"
|
|
169
|
-
})), d.$$click = () =>
|
|
107
|
+
})), d.$$click = () => w(r(), r() + 1), a(d, s(T, {
|
|
170
108
|
class: "w-4 h-4"
|
|
171
|
-
})),
|
|
109
|
+
})), k.$$click = () => A(r()), a(k, s(G, {
|
|
172
110
|
class: "w-4 h-4"
|
|
173
|
-
})),
|
|
111
|
+
})), a(l, s(u, {
|
|
174
112
|
get when() {
|
|
175
|
-
return
|
|
113
|
+
return O();
|
|
176
114
|
},
|
|
177
115
|
get fallback() {
|
|
178
|
-
return
|
|
116
|
+
return s(I, {
|
|
179
117
|
get schema() {
|
|
180
|
-
return
|
|
118
|
+
return i();
|
|
181
119
|
},
|
|
182
|
-
value:
|
|
183
|
-
onChange: (
|
|
120
|
+
value: e,
|
|
121
|
+
onChange: (c) => C(r(), c),
|
|
184
122
|
get path() {
|
|
185
|
-
return [...
|
|
123
|
+
return [...t.path, String(r())];
|
|
186
124
|
}
|
|
187
125
|
});
|
|
188
126
|
},
|
|
189
127
|
get children() {
|
|
190
|
-
return
|
|
128
|
+
return s(N, {
|
|
191
129
|
get schema() {
|
|
192
|
-
return
|
|
130
|
+
return i();
|
|
193
131
|
},
|
|
194
|
-
value:
|
|
195
|
-
onChange: (
|
|
132
|
+
value: e,
|
|
133
|
+
onChange: (c) => C(r(), c),
|
|
134
|
+
get path() {
|
|
135
|
+
return [...t.path, String(r())];
|
|
136
|
+
}
|
|
196
137
|
});
|
|
197
138
|
}
|
|
198
|
-
}), null),
|
|
199
|
-
var f = r() === 0, h = r() ===
|
|
200
|
-
return f !==
|
|
139
|
+
}), null), V((c) => {
|
|
140
|
+
var f = r() === 0, h = r() === o().length - 1;
|
|
141
|
+
return f !== c.e && (g.disabled = c.e = f), h !== c.t && (d.disabled = c.t = h), c;
|
|
201
142
|
}, {
|
|
202
143
|
e: void 0,
|
|
203
144
|
t: void 0
|
|
204
|
-
}),
|
|
145
|
+
}), l;
|
|
205
146
|
})()
|
|
206
147
|
}), (() => {
|
|
207
|
-
var
|
|
208
|
-
return
|
|
148
|
+
var e = U(), r = e.firstChild;
|
|
149
|
+
return e.$$click = S, a(e, s(J, {
|
|
209
150
|
class: "w-4 h-4"
|
|
210
|
-
}), r),
|
|
151
|
+
}), r), e;
|
|
211
152
|
})()];
|
|
212
153
|
}
|
|
213
|
-
}), null),
|
|
154
|
+
}), null), a(n, s(u, {
|
|
214
155
|
get when() {
|
|
215
|
-
return
|
|
156
|
+
return t.schema.minItems !== void 0 || t.schema.maxItems !== void 0;
|
|
216
157
|
},
|
|
217
158
|
get children() {
|
|
218
|
-
var
|
|
219
|
-
return
|
|
159
|
+
var e = q();
|
|
160
|
+
return a(e, s(u, {
|
|
220
161
|
get when() {
|
|
221
|
-
return
|
|
162
|
+
return t.schema.minItems !== void 0;
|
|
222
163
|
},
|
|
223
164
|
get children() {
|
|
224
|
-
return ["Min items: ",
|
|
165
|
+
return ["Min items: ", x(() => t.schema.minItems)];
|
|
225
166
|
}
|
|
226
|
-
}), null),
|
|
167
|
+
}), null), a(e, s(u, {
|
|
227
168
|
get when() {
|
|
228
|
-
return
|
|
169
|
+
return x(() => t.schema.minItems !== void 0)() && t.schema.maxItems !== void 0;
|
|
229
170
|
},
|
|
230
171
|
children: " | "
|
|
231
|
-
}), null),
|
|
172
|
+
}), null), a(e, s(u, {
|
|
232
173
|
get when() {
|
|
233
|
-
return
|
|
174
|
+
return t.schema.maxItems !== void 0;
|
|
234
175
|
},
|
|
235
176
|
get children() {
|
|
236
|
-
return ["Max items: ",
|
|
177
|
+
return ["Max items: ", x(() => t.schema.maxItems)];
|
|
237
178
|
}
|
|
238
|
-
}), null),
|
|
179
|
+
}), null), e;
|
|
239
180
|
}
|
|
240
|
-
}), null),
|
|
181
|
+
}), null), n;
|
|
241
182
|
})();
|
|
242
183
|
};
|
|
243
|
-
|
|
184
|
+
j(["click"]);
|
|
244
185
|
export {
|
|
245
|
-
|
|
186
|
+
ne as ArrayField
|
|
246
187
|
};
|
|
247
188
|
//# 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 { 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":";;;;;;;;;;;;;AAuBA,SAASA,EAAiBC,GAAwB;AAChD,SAAI,CAACA,EAAMC,SAASD,EAAMC,MAAMC,WAAW,IAClC,KAEFF,EAAMC,MAAME,MAAOC,CAAAA,MAAQA,EAAIC,UAAUC,MAAS;AAC3D;AAKA,MAAMC,KAAiDC,CAAAA,MAAU;AAC/D,QAAMC,IAAaA,MAAMC,EAAkBF,EAAMG,MAAM,KAAK;AAE5D,SAAAC,EACGC,GAAM;AAAA,IAAA,IACLC,WAAQ;AAAA,aAAAF,EACLG,GAAW;AAAA,QAAA,IACVJ,SAAM;AAAA,iBAAEH,EAAMG;AAAAA,QAAM;AAAA,QAAA,IACpBK,QAAK;AAAA,iBAAER,EAAMQ;AAAAA,QAAK;AAAA,QAAA,IAClBC,WAAQ;AAAA,iBAAET,EAAMS;AAAAA,QAAQ;AAAA,MAAA,CAAA;AAAA,IAAA;AAAA,IAAA,IAAAC,WAAA;AAAA,aAAA,CAAAN,EAI3BO,GAAK;AAAA,QAAA,IAACC,OAAI;AAAA,iBAAEC,EAAA,MAAA,CAAA,CAAAb,EAAMG,OAAOW,IAAI,EAAA,KAAId,EAAMG,OAAOW,KAAKpB,SAAS;AAAA,QAAC;AAAA,QAAA,IAAAgB,WAAA;AAAA,iBAAAN,EAC3DW,GAAS;AAAA,YAAA,IACRZ,SAAM;AAAA,qBAAEH,EAAMG;AAAAA,YAAM;AAAA,YAAA,IACpBK,QAAK;AAAA,qBAAER,EAAMQ;AAAAA,YAAK;AAAA,YAAA,IAClBC,WAAQ;AAAA,qBAAET,EAAMS;AAAAA,YAAQ;AAAA,UAAA,CAAA;AAAA,QAAA;AAAA,MAAA,CAAA,GAAAL,EAG3BO,GAAK;AAAA,QAAA,IAACC,OAAI;AAAA,iBAAEX,QAAiB;AAAA,QAAS;AAAA,QAAA,IAAAS,WAAA;AAAA,iBAAAN,EACpCY,GAAY;AAAA,YAAA,IACXb,SAAM;AAAA,qBAAEH,EAAMG;AAAAA,YAAM;AAAA,YAAA,IACpBK,QAAK;AAAA,qBAAER,EAAMQ;AAAAA,YAAK;AAAA,YAAA,IAClBC,WAAQ;AAAA,qBAAET,EAAMS;AAAAA,YAAQ;AAAA,UAAA,CAAA;AAAA,QAAA;AAAA,MAAA,CAAA,GAAAL,EAG3BO,GAAK;AAAA,QAAA,IAACC,OAAI;AAAA,iBAAEX,EAAAA,MAAiB,YAAYA,EAAAA,MAAiB;AAAA,QAAS;AAAA,QAAA,IAAAS,WAAA;AAAA,iBAAAN,EACjEa,GAAW;AAAA,YAAA,IACVd,SAAM;AAAA,qBAAEH,EAAMG;AAAAA,YAAM;AAAA,YAAA,IACpBK,QAAK;AAAA,qBAAER,EAAMQ;AAAAA,YAAK;AAAA,YAAA,IAClBC,WAAQ;AAAA,qBAAET,EAAMS;AAAAA,YAAQ;AAAA,UAAA,CAAA;AAAA,QAAA;AAAA,MAAA,CAAA,CAAA;AAAA,IAAA;AAAA,EAAA,CAAA;AAKlC,GAKaS,KAA0ClB,CAAAA,MAAU;AAC/D,QAAMmB,IAAeA,MAAMnB,EAAMQ,SAAS,CAAA,GACpCY,IAAaA,MAAMpB,EAAMG,OAAOX,SAAS;AAAA,IAAE6B,MAAM;AAAA,EAAA,GAEjDC,IAAUA,MAAM;AACpB,UAAMC,IAAUC,EAAgBJ,GAAY;AAC5CpB,IAAAA,EAAMS,SAAS,CAAC,GAAGU,EAAAA,GAAgBI,CAAO,CAAC;AAAA,EAC7C,GAEME,IAAaA,CAACC,MAAkB;AACpC,UAAMC,IAAWR,IAAeS,OAAO,CAACC,GAAGC,MAAMA,MAAMJ,CAAK;AAC5D1B,IAAAA,EAAMS,SAASkB,EAASjC,SAAS,IAAIiC,IAAW7B,MAAS;AAAA,EAC3D,GAEMiC,IAAaA,CAACL,GAAeM,MAAuB;AACxD,UAAML,IAAW,CAAC,GAAGR,GAAc;AACnCQ,IAAAA,EAASD,CAAK,IAAIM,GAClBhC,EAAMS,SAASkB,CAAQ;AAAA,EACzB,GAEMM,IAAWA,CAACC,GAAmBC,MAAoB;AACvD,QAAIA,IAAU,KAAKA,KAAWhB,EAAAA,EAAezB;AAC3C;AAEF,UAAMiC,IAAW,CAAC,GAAGR,GAAc,GAC7B,CAACiB,CAAI,IAAIT,EAASU,OAAOH,GAAW,CAAC;AAC3CP,IAAAA,EAASU,OAAOF,GAAS,GAAGC,CAAI,GAChCpC,EAAMS,SAASkB,CAAQ;AAAA,EACzB,GAEMW,IAAcA,MAAM;AACxB,UAAMjB,IAAOnB,EAAkBkB,GAAY;AAC3C,WACEC,MAAS,YACTA,MAAS,YACTA,MAAS,aACTA,MAAS;AAAA,EAEb,GAGMkB,IAAkBA,MAAMhD,EAAiB6B,GAAY,GAGrDoB,IAAeA,MAAM;AACzB,UAAMhD,IAAQ4B,EAAAA;AACd,WAAK5B,EAAMC,QAGJD,EAAMC,MAAMgD,IAAK7C,CAAAA,OAAS;AAAA,MAC/BY,OAAOZ,EAAIC;AAAAA,MACX6C,OAAO9C,EAAI+C,SAASC,OAAOhD,EAAIC,KAAK;AAAA,IAAA,EACpC,IALO,CAAA;AAAA,EAMX,GAGMgD,IAAcA,CAACrC,MAAmB;AACtC,UAAMsC,IAAU3B,EAAAA;AAEhB,QADe2B,EAAQC,KAAMC,CAAAA,MAAMA,MAAMxC,CAAK,GAClC;AACV,YAAMmB,IAAWmB,EAAQlB,OAAQoB,CAAAA,MAAMA,MAAMxC,CAAK;AAClDR,MAAAA,EAAMS,SAASkB,EAASjC,SAAS,IAAIiC,IAAW7B,MAAS;AAAA,IAC3D;AACEE,MAAAA,EAAMS,SAAS,CAAC,GAAGqC,GAAStC,CAAK,CAAC;AAAA,EAEtC;AAEA,UAAA,MAAA;AAAA,QAAAyC,IAAAC,EAAAA;AAAAC,WAAAA,EAAAF,GAAA7C,EAEKgD,GAAI;AAAA,MAAA,IACHxC,OAAI;AAAA,eAAE,CAAC2B,EAAAA;AAAAA,MAAiB;AAAA,MAAA,IACxBjC,WAAQ;AAAA;AAAA;AAAA,WACN,MAAA;AAAA,gBAAA+C,IAAAC,EAAAA;AAAAH,mBAAAA,EAAAE,GAAAjD,EAEGmD,GAAG;AAAA,cAAA,IAACC,OAAI;AAAA,uBAAEhB,EAAAA;AAAAA,cAAc;AAAA,cAAA9B,UACrB+C,CAAAA,MAAMrD,EACLsD,GAAQ;AAAA,gBAAA,IACPC,UAAO;AAAA,yBAAExC,IAAe4B,KAAMC,CAAAA,MAAMA,MAAMS,EAAOjD,KAAK;AAAA,gBAAC;AAAA,gBACvDC,UAAUA,MAAMoC,EAAYY,EAAOjD,KAAK;AAAA,gBAAC,IACzCkC,QAAK;AAAA,yBAAEe,EAAOf;AAAAA,gBAAK;AAAA,cAAA,CAAA;AAAA,YAAA,CAEtB,CAAA,GAAAW;AAAAA,UAAA,GAAA;AAAA;AAAA,MAAA;AAAA,MAAA,IAAA3C,WAAA;AAAA,eAAA,CAAAN,EAMNmD,GAAG;AAAA,UAAA,IAACC,OAAI;AAAA,mBAAErC,EAAAA;AAAAA,UAAc;AAAA,UAAAT,UACtBA,CAAC0B,GAAMV,OAAK,MAAA;AAAA,gBAAAkC,IAAAC,EAAAA,GAAAC,IAAAF,EAAAG,YAAAC,IAAAF,EAAAC,YAAAE,IAAAD,EAAAD;AAAAE,YAAAA,EAAAF;AAAAA,gBAAAG,IAAAF,EAAAG,aAAAC,IAAAF,EAAAH,YAAAM,IAAAD,EAAAD,aAAAG,IAAAD,EAAAF;AAAAhB,mBAAAA,EAAAc,GAAA,MAMGvC,EAAAA,IAAU,GAAC,IAAA,GAAAyB,EAAAa,GAAA5D,EAElBgD,GAAI;AAAA,cAAA,IAACxC,OAAI;AAAA,uBAAEV,EAAkBkB,GAAY;AAAA,cAAC;AAAA,cAAA,IAAAV,WAAA;AAAA,oBAAA6D,IAAAC,KAAAC,IAAAF,EAAAR,YAAAW,IAAAD,EAAAN;AAAAO,uBAAAA,EAAAP,aAAAhB,EAAAoB,GAAA,MAErCrE,EAAkBkB,EAAAA,CAAY,GAACsD,CAAA,GAAAH;AAAAA,cAAA;AAAA,YAAA,CAAA,GAAA,IAAA,GAAAH,EAAAO,UAQ1B,MAAM1C,EAASP,KAASA,EAAAA,IAAU,CAAC,GAACyB,EAAAiB,GAAAhE,EAK5CwE,GAAa;AAAA,cAAA,OAAA;AAAA,YAAA,CAAA,CAAA,GAAAP,EAAAM,UAKL,MAAM1C,EAASP,KAASA,EAAAA,IAAU,CAAC,GAACyB,EAAAkB,GAAAjE,EAK5CyE,GAAe;AAAA,cAAA,OAAA;AAAA,YAAA,CAAA,CAAA,GAAAP,EAAAK,UAKP,MAAMlD,EAAWC,EAAAA,CAAO,GAACyB,EAAAmB,GAAAlE,EAIjC0E,GAAS;AAAA,cAAA,OAAA;AAAA,YAAA,CAAA,CAAA,GAAA3B,EAAAS,GAAAxD,EAMfgD,GAAI;AAAA,cAAA,IACHxC,OAAI;AAAA,uBAAE0B,EAAAA;AAAAA,cAAa;AAAA,cAAA,IACnBhC,WAAQ;AAAA,uBAAAF,EACL2E,GAAc;AAAA,kBAAA,IACb5E,SAAM;AAAA,2BAAEiB,EAAAA;AAAAA,kBAAY;AAAA,kBACpBZ,OAAO4B;AAAAA,kBACP3B,UAAWuC,CAAAA,MAAMjB,EAAWL,EAAAA,GAASsB,CAAC;AAAA,kBAAC,IACvCgC,OAAI;AAAA,2BAAE,CAAC,GAAGhF,EAAMgF,MAAMpC,OAAOlB,EAAAA,CAAO,CAAC;AAAA,kBAAC;AAAA,gBAAA,CAAA;AAAA,cAAA;AAAA,cAAA,IAAAhB,WAAA;AAAA,uBAAAN,EAIzCL,IAAkB;AAAA,kBAAA,IACjBI,SAAM;AAAA,2BAAEiB,EAAAA;AAAAA,kBAAY;AAAA,kBACpBZ,OAAO4B;AAAAA,kBACP3B,UAAWuC,CAAAA,MAAMjB,EAAWL,EAAAA,GAASsB,CAAC;AAAA,gBAAA,CAAC;AAAA,cAAA;AAAA,YAAA,CAAA,GAAA,IAAA,GAAAiC,EAAAC,CAAAA,MAAA;AAAA,kBAAAC,IA3C3BzD,QAAY,GAAC0D,IAUb1D,QAAYP,IAAezB,SAAS;AAACyF,qBAAAA,MAAAD,EAAAG,MAAAjB,EAAAkB,WAAAJ,EAAAG,IAAAF,IAAAC,MAAAF,EAAAK,MAAAlB,EAAAiB,WAAAJ,EAAAK,IAAAH,IAAAF;AAAAA,YAAA,GAAA;AAAA,cAAAG,GAAAvF;AAAAA,cAAAyF,GAAAzF;AAAAA,YAAAA,CAAA,GAAA8D;AAAAA,UAAA,GAAA;AAAA,QAAA,CAqCxD,IAAA,MAAA;AAAA,cAAA4B,IAAAC,EAAAA,GAAAC,IAAAF,EAAAzB;AAAAyB,iBAAAA,EAAAb,UAMQrD,GAAO6B,EAAAqC,GAAApF,EAGfuF,GAAQ;AAAA,YAAA,OAAA;AAAA,UAAA,CAAA,GAAAD,CAAA,GAAAF;AAAAA,QAAA,IAAA;AAAA,MAAA;AAAA,IAAA,CAAA,GAAA,IAAA,GAAArC,EAAAF,GAAA7C,EAMZgD,GAAI;AAAA,MAAA,IACHxC,OAAI;AAAA,eACFZ,EAAMG,OAAOyF,aAAa9F,UAC1BE,EAAMG,OAAO0F,aAAa/F;AAAAA,MAAS;AAAA,MAAA,IAAAY,WAAA;AAAA,YAAAoF,IAAAC,EAAAA;AAAA5C,eAAAA,EAAA2C,GAAA1F,EAIlCgD,GAAI;AAAA,UAAA,IAACxC,OAAI;AAAA,mBAAEZ,EAAMG,OAAOyF,aAAa9F;AAAAA,UAAS;AAAA,UAAA,IAAAY,WAAA;AAAA,mBAAA,CAAA,eAAAG,EAAA,MACjCb,EAAMG,OAAOyF,QAAQ,CAAA;AAAA,UAAA;AAAA,QAAA,CAAA,GAAA,IAAA,GAAAzC,EAAA2C,GAAA1F,EAElCgD,GAAI;AAAA,UAAA,IACHxC,OAAI;AAAA,mBACFC,EAAA,MAAAb,EAAMG,OAAOyF,aAAa9F,MAAS,EAAA,KACnCE,EAAMG,OAAO0F,aAAa/F;AAAAA,UAAS;AAAA,UAAAY,UAGpC;AAAA,QAAA,CAAK,GAAA,IAAA,GAAAyC,EAAA2C,GAAA1F,EAEPgD,GAAI;AAAA,UAAA,IAACxC,OAAI;AAAA,mBAAEZ,EAAMG,OAAO0F,aAAa/F;AAAAA,UAAS;AAAA,UAAA,IAAAY,WAAA;AAAA,mBAAA,CAAA,eAAAG,EAAA,MACjCb,EAAMG,OAAO0F,QAAQ,CAAA;AAAA,UAAA;AAAA,QAAA,CAAA,GAAA,IAAA,GAAAC;AAAAA,MAAA;AAAA,IAAA,CAAA,GAAA,IAAA,GAAA7C;AAAAA,EAAA,GAAA;AAM7C;AAAE+C,EAAA,CAAA,OAAA,CAAA;"}
|
|
1
|
+
{"version":3,"file":"ArrayField.js","sources":["../../../../src/components/JsonSchemaForm/fields/ArrayField.tsx"],"sourcesContent":["import type { Component } from 'solid-js';\nimport { For, Show } 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';\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 - delegates to JsonSchemaForm for registry support\n */\nconst PrimitiveArrayItem: Component<BaseFieldProps & { path?: string[] }> = (\n props,\n) => (\n <JsonSchemaForm\n schema={props.schema}\n value={props.value}\n onChange={props.onChange}\n path={props.path}\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 path={[...props.path, String(index())]}\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","_$createComponent","JsonSchemaForm","schema","value","onChange","path","ArrayField","currentValue","itemSchema","type","addItem","newItem","getDefaultValue","removeItem","index","newArray","filter","_","i","updateItem","itemValue","moveItem","fromIndex","toIndex","item","splice","isPrimitive","resolveSchemaType","isCheckboxGroup","constOptions","map","label","title","String","toggleValue","current","some","v","_el$","_tmpl$3","_$insert","Show","when","fallback","_el$5","_tmpl$4","For","each","children","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","_$effect","_p$","_v$","_v$2","e","disabled","t","_el$2","_tmpl$","_el$3","PlusIcon","minItems","maxItems","_el$4","_tmpl$2","_$memo","_$delegateEvents"],"mappings":"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"}
|
|
@@ -2,7 +2,8 @@ import { Component } from 'solid-js';
|
|
|
2
2
|
import { BaseFieldProps } from '../types';
|
|
3
3
|
/**
|
|
4
4
|
* Number/Integer field renderer
|
|
5
|
-
* Handles parsing and validation of numeric input
|
|
5
|
+
* Handles parsing and validation of numeric input.
|
|
6
|
+
* Applies min/max/step constraints from the schema.
|
|
6
7
|
*/
|
|
7
8
|
export declare const NumberField: Component<BaseFieldProps>;
|
|
8
9
|
//# sourceMappingURL=NumberField.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumberField.d.ts","sourceRoot":"","sources":["../../../../src/components/JsonSchemaForm/fields/NumberField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"NumberField.d.ts","sourceRoot":"","sources":["../../../../src/components/JsonSchemaForm/fields/NumberField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,cAAc,CAwCjD,CAAC"}
|
|
@@ -1,27 +1,35 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { toDisplayString as
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
return r();
|
|
10
|
-
},
|
|
11
|
-
onInput: (n) => {
|
|
12
|
-
if (n === "") {
|
|
13
|
-
e.onChange(void 0);
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
const t = Number(n);
|
|
17
|
-
Number.isNaN(t) || e.onChange(t);
|
|
18
|
-
},
|
|
19
|
-
get placeholder() {
|
|
20
|
-
return e.schema.default?.toString() || "0";
|
|
1
|
+
import { template as h, effect as c, setAttribute as n, delegateEvents as g } from "solid-js/web";
|
|
2
|
+
import { toDisplayString as x, resolveSchemaType as b } from "../utils.js";
|
|
3
|
+
var y = /* @__PURE__ */ h('<input type=number class="w-full px-3 py-2 sm:py-2.5 glass-input text-sm text-surface-900 dark:text-surface-100 focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed">');
|
|
4
|
+
const M = (t) => {
|
|
5
|
+
const s = () => x(t.value), i = () => b(t.schema) === "integer", o = (a) => {
|
|
6
|
+
if (a === "") {
|
|
7
|
+
t.onChange(void 0);
|
|
8
|
+
return;
|
|
21
9
|
}
|
|
22
|
-
|
|
10
|
+
const e = Number(a);
|
|
11
|
+
Number.isNaN(e) || t.onChange(i() ? Math.round(e) : e);
|
|
12
|
+
}, v = () => {
|
|
13
|
+
if (t.schema.multipleOf !== void 0)
|
|
14
|
+
return t.schema.multipleOf;
|
|
15
|
+
if (i())
|
|
16
|
+
return 1;
|
|
17
|
+
}, d = () => t.schema.minimum ?? t.schema.exclusiveMinimum, f = () => t.schema.maximum ?? t.schema.exclusiveMaximum;
|
|
18
|
+
return (() => {
|
|
19
|
+
var a = y();
|
|
20
|
+
return a.$$input = (e) => o(e.currentTarget.value), c((e) => {
|
|
21
|
+
var m = t.schema.default?.toString() || "0", u = d(), r = f(), l = v();
|
|
22
|
+
return m !== e.e && n(a, "placeholder", e.e = m), u !== e.t && n(a, "min", e.t = u), r !== e.a && n(a, "max", e.a = r), l !== e.o && n(a, "step", e.o = l), e;
|
|
23
|
+
}, {
|
|
24
|
+
e: void 0,
|
|
25
|
+
t: void 0,
|
|
26
|
+
a: void 0,
|
|
27
|
+
o: void 0
|
|
28
|
+
}), c(() => a.value = s()), a;
|
|
29
|
+
})();
|
|
23
30
|
};
|
|
31
|
+
g(["input"]);
|
|
24
32
|
export {
|
|
25
|
-
|
|
33
|
+
M as NumberField
|
|
26
34
|
};
|
|
27
35
|
//# sourceMappingURL=NumberField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumberField.js","sources":["../../../../src/components/JsonSchemaForm/fields/NumberField.tsx"],"sourcesContent":["import type { Component } from 'solid-js';\nimport
|
|
1
|
+
{"version":3,"file":"NumberField.js","sources":["../../../../src/components/JsonSchemaForm/fields/NumberField.tsx"],"sourcesContent":["import type { Component } from 'solid-js';\nimport type { BaseFieldProps } from '../types';\nimport { resolveSchemaType, toDisplayString } from '../utils';\n\n/**\n * Number/Integer field renderer\n * Handles parsing and validation of numeric input.\n * Applies min/max/step constraints from the schema.\n */\nexport const NumberField: Component<BaseFieldProps> = (props) => {\n const stringValue = () => toDisplayString(props.value);\n const isInteger = () => resolveSchemaType(props.schema) === 'integer';\n\n const handleChange = (strValue: string) => {\n if (strValue === '') {\n props.onChange(undefined);\n return;\n }\n const num = Number(strValue);\n if (!Number.isNaN(num)) {\n props.onChange(isInteger() ? Math.round(num) : num);\n }\n };\n\n const step = () => {\n if (props.schema.multipleOf !== undefined) {\n return props.schema.multipleOf;\n }\n if (isInteger()) {\n return 1;\n }\n return undefined;\n };\n\n const min = () => props.schema.minimum ?? props.schema.exclusiveMinimum;\n const max = () => props.schema.maximum ?? props.schema.exclusiveMaximum;\n\n return (\n <input\n type=\"number\"\n class=\"w-full px-3 py-2 sm:py-2.5 glass-input text-sm text-surface-900 dark:text-surface-100 focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed\"\n value={stringValue()}\n placeholder={props.schema.default?.toString() || '0'}\n min={min()}\n max={max()}\n step={step()}\n onInput={(e) => handleChange(e.currentTarget.value)}\n />\n );\n};\n"],"names":["NumberField","props","stringValue","toDisplayString","value","isInteger","resolveSchemaType","schema","handleChange","strValue","onChange","undefined","num","Number","isNaN","Math","round","step","multipleOf","min","minimum","exclusiveMinimum","max","maximum","exclusiveMaximum","_el$","_tmpl$","$$input","e","currentTarget","_$effect","_p$","_v$","default","toString","_v$2","_v$3","_v$4","_$setAttribute","t","a","o","_$delegateEvents"],"mappings":";;;AASO,MAAMA,IAA0CC,CAAAA,MAAU;AAC/D,QAAMC,IAAcA,MAAMC,EAAgBF,EAAMG,KAAK,GAC/CC,IAAYA,MAAMC,EAAkBL,EAAMM,MAAM,MAAM,WAEtDC,IAAeA,CAACC,MAAqB;AACzC,QAAIA,MAAa,IAAI;AACnBR,MAAAA,EAAMS,SAASC,MAAS;AACxB;AAAA,IACF;AACA,UAAMC,IAAMC,OAAOJ,CAAQ;AAC3B,IAAKI,OAAOC,MAAMF,CAAG,KACnBX,EAAMS,SAASL,EAAAA,IAAcU,KAAKC,MAAMJ,CAAG,IAAIA,CAAG;AAAA,EAEtD,GAEMK,IAAOA,MAAM;AACjB,QAAIhB,EAAMM,OAAOW,eAAeP;AAC9B,aAAOV,EAAMM,OAAOW;AAEtB,QAAIb;AACF,aAAO;AAAA,EAGX,GAEMc,IAAMA,MAAMlB,EAAMM,OAAOa,WAAWnB,EAAMM,OAAOc,kBACjDC,IAAMA,MAAMrB,EAAMM,OAAOgB,WAAWtB,EAAMM,OAAOiB;AAEvD,UAAA,MAAA;AAAA,QAAAC,IAAAC,EAAAA;AAAAD,WAAAA,EAAAE,UAScC,CAAAA,MAAMpB,EAAaoB,EAAEC,cAAczB,KAAK,GAAC0B,EAAAC,CAAAA,MAAA;AAAA,UAAAC,IAJtC/B,EAAMM,OAAO0B,SAASC,cAAc,KAAGC,IAC/ChB,EAAAA,GAAKiB,IACLd,EAAAA,GAAKe,IACJpB,EAAAA;AAAMe,aAAAA,MAAAD,EAAAH,KAAAU,EAAAb,GAAA,eAAAM,EAAAH,IAAAI,CAAA,GAAAG,MAAAJ,EAAAQ,KAAAD,EAAAb,GAAA,OAAAM,EAAAQ,IAAAJ,CAAA,GAAAC,MAAAL,EAAAS,KAAAF,EAAAb,GAAA,OAAAM,EAAAS,IAAAJ,CAAA,GAAAC,MAAAN,EAAAU,KAAAH,EAAAb,GAAA,QAAAM,EAAAU,IAAAJ,CAAA,GAAAN;AAAAA,IAAA,GAAA;AAAA,MAAAH,GAAAjB;AAAAA,MAAA4B,GAAA5B;AAAAA,MAAA6B,GAAA7B;AAAAA,MAAA8B,GAAA9B;AAAAA,IAAAA,CAAA,GAAAmB,QAAAL,EAAArB,QAJLF,EAAAA,CAAa,GAAAuB;AAAAA,EAAA,GAAA;AAQ1B;AAAEiB,EAAA,CAAA,OAAA,CAAA;"}
|
|
@@ -2,7 +2,8 @@ import { Component } from 'solid-js';
|
|
|
2
2
|
import { BaseFieldProps } from '../types';
|
|
3
3
|
/**
|
|
4
4
|
* Union field renderer (oneOf/anyOf)
|
|
5
|
-
* Renders
|
|
5
|
+
* - Renders a select dropdown when all variants use { const, title }
|
|
6
|
+
* - Falls back to JSON textarea for complex union types
|
|
6
7
|
*/
|
|
7
8
|
export declare const OneOfField: Component<BaseFieldProps>;
|
|
8
9
|
//# sourceMappingURL=OneOfField.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OneOfField.d.ts","sourceRoot":"","sources":["../../../../src/components/JsonSchemaForm/fields/OneOfField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"OneOfField.d.ts","sourceRoot":"","sources":["../../../../src/components/JsonSchemaForm/fields/OneOfField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAG1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAe/C;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,SAAS,CAAC,cAAc,CAuEhD,CAAC"}
|