glass-ui-solid 0.4.2 → 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 +156 -166
- 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 +88 -51
- 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,198 +1,188 @@
|
|
|
1
|
-
import { template as
|
|
2
|
-
import {
|
|
3
|
-
import { resolveSchemaType as
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { NumberField as N } from "./NumberField.js";
|
|
7
|
-
import { StringField as R } from "./StringField.js";
|
|
8
|
-
import { JsonSchemaForm as U } from "../JsonSchemaForm.js";
|
|
9
|
-
import { ChevronUpIcon as q, ChevronDownIcon as z } from "../../shared/icons/ChevronIcon.js";
|
|
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";
|
|
10
6
|
import { TrashIcon as G } from "../../shared/icons/TrashIcon.js";
|
|
11
|
-
import { PlusIcon as
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
return t(
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return f(() => !!e.schema.enum)() && e.schema.enum.length > 0;
|
|
33
|
-
},
|
|
34
|
-
get children() {
|
|
35
|
-
return t(J, {
|
|
36
|
-
get schema() {
|
|
37
|
-
return e.schema;
|
|
38
|
-
},
|
|
39
|
-
get value() {
|
|
40
|
-
return e.value;
|
|
41
|
-
},
|
|
42
|
-
get onChange() {
|
|
43
|
-
return e.onChange;
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
}), t(w, {
|
|
48
|
-
get when() {
|
|
49
|
-
return s() === "boolean";
|
|
50
|
-
},
|
|
51
|
-
get children() {
|
|
52
|
-
return t(B, {
|
|
53
|
-
get schema() {
|
|
54
|
-
return e.schema;
|
|
55
|
-
},
|
|
56
|
-
get value() {
|
|
57
|
-
return e.value;
|
|
58
|
-
},
|
|
59
|
-
get onChange() {
|
|
60
|
-
return e.onChange;
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
}), t(w, {
|
|
65
|
-
get when() {
|
|
66
|
-
return s() === "number" || s() === "integer";
|
|
67
|
-
},
|
|
68
|
-
get children() {
|
|
69
|
-
return t(N, {
|
|
70
|
-
get schema() {
|
|
71
|
-
return e.schema;
|
|
72
|
-
},
|
|
73
|
-
get value() {
|
|
74
|
-
return e.value;
|
|
75
|
-
},
|
|
76
|
-
get onChange() {
|
|
77
|
-
return e.onChange;
|
|
78
|
-
}
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
})];
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
}, ce = (e) => {
|
|
85
|
-
const s = () => e.value || [], u = () => e.schema.items || {
|
|
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);
|
|
12
|
+
}
|
|
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 || {
|
|
86
28
|
type: "string"
|
|
87
29
|
}, S = () => {
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
},
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
},
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
},
|
|
97
|
-
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)
|
|
98
40
|
return;
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
},
|
|
102
|
-
const
|
|
103
|
-
return
|
|
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)
|
|
51
|
+
})) : [];
|
|
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);
|
|
57
|
+
} else
|
|
58
|
+
t.onChange([...e, n]);
|
|
104
59
|
};
|
|
105
60
|
return (() => {
|
|
106
|
-
var
|
|
107
|
-
return
|
|
108
|
-
get
|
|
109
|
-
return
|
|
61
|
+
var n = z();
|
|
62
|
+
return a(n, s(u, {
|
|
63
|
+
get when() {
|
|
64
|
+
return !p();
|
|
110
65
|
},
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
66
|
+
get fallback() {
|
|
67
|
+
return (
|
|
68
|
+
/* Checkbox group for oneOf const pattern */
|
|
69
|
+
(() => {
|
|
70
|
+
var e = B();
|
|
71
|
+
return a(e, s(y, {
|
|
72
|
+
get each() {
|
|
73
|
+
return M();
|
|
74
|
+
},
|
|
75
|
+
children: (r) => s(R, {
|
|
76
|
+
get checked() {
|
|
77
|
+
return o().some((l) => l === r.value);
|
|
78
|
+
},
|
|
79
|
+
onChange: () => F(r.value),
|
|
80
|
+
get label() {
|
|
81
|
+
return r.label;
|
|
82
|
+
}
|
|
83
|
+
})
|
|
84
|
+
})), e;
|
|
85
|
+
})()
|
|
86
|
+
);
|
|
87
|
+
},
|
|
88
|
+
get children() {
|
|
89
|
+
return [s(y, {
|
|
90
|
+
get each() {
|
|
91
|
+
return o();
|
|
132
92
|
},
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
93
|
+
children: (e, r) => (() => {
|
|
94
|
+
var l = K(), v = l.firstChild, b = v.firstChild, _ = b.firstChild;
|
|
95
|
+
_.firstChild;
|
|
96
|
+
var P = b.nextSibling, g = P.firstChild, d = g.nextSibling, k = d.nextSibling;
|
|
97
|
+
return a(_, () => r() + 1, null), a(b, s(u, {
|
|
98
|
+
get when() {
|
|
99
|
+
return $(i());
|
|
137
100
|
},
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
return [...e.path, String(i())];
|
|
101
|
+
get children() {
|
|
102
|
+
var c = H(), f = c.firstChild, h = f.nextSibling;
|
|
103
|
+
return h.nextSibling, a(c, () => $(i()), h), c;
|
|
142
104
|
}
|
|
143
|
-
})
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
105
|
+
}), null), g.$$click = () => w(r(), r() - 1), a(g, s(E, {
|
|
106
|
+
class: "w-4 h-4"
|
|
107
|
+
})), d.$$click = () => w(r(), r() + 1), a(d, s(T, {
|
|
108
|
+
class: "w-4 h-4"
|
|
109
|
+
})), k.$$click = () => A(r()), a(k, s(G, {
|
|
110
|
+
class: "w-4 h-4"
|
|
111
|
+
})), a(l, s(u, {
|
|
112
|
+
get when() {
|
|
113
|
+
return O();
|
|
149
114
|
},
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
115
|
+
get fallback() {
|
|
116
|
+
return s(I, {
|
|
117
|
+
get schema() {
|
|
118
|
+
return i();
|
|
119
|
+
},
|
|
120
|
+
value: e,
|
|
121
|
+
onChange: (c) => C(r(), c),
|
|
122
|
+
get path() {
|
|
123
|
+
return [...t.path, String(r())];
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
},
|
|
127
|
+
get children() {
|
|
128
|
+
return s(N, {
|
|
129
|
+
get schema() {
|
|
130
|
+
return i();
|
|
131
|
+
},
|
|
132
|
+
value: e,
|
|
133
|
+
onChange: (c) => C(r(), c),
|
|
134
|
+
get path() {
|
|
135
|
+
return [...t.path, String(r())];
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
}
|
|
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;
|
|
142
|
+
}, {
|
|
143
|
+
e: void 0,
|
|
144
|
+
t: void 0
|
|
145
|
+
}), l;
|
|
146
|
+
})()
|
|
147
|
+
}), (() => {
|
|
148
|
+
var e = U(), r = e.firstChild;
|
|
149
|
+
return e.$$click = S, a(e, s(J, {
|
|
150
|
+
class: "w-4 h-4"
|
|
151
|
+
}), r), e;
|
|
152
|
+
})()];
|
|
153
|
+
}
|
|
154
|
+
}), null), a(n, s(u, {
|
|
165
155
|
get when() {
|
|
166
|
-
return
|
|
156
|
+
return t.schema.minItems !== void 0 || t.schema.maxItems !== void 0;
|
|
167
157
|
},
|
|
168
158
|
get children() {
|
|
169
|
-
var
|
|
170
|
-
return
|
|
159
|
+
var e = q();
|
|
160
|
+
return a(e, s(u, {
|
|
171
161
|
get when() {
|
|
172
|
-
return
|
|
162
|
+
return t.schema.minItems !== void 0;
|
|
173
163
|
},
|
|
174
164
|
get children() {
|
|
175
|
-
return ["Min items: ",
|
|
165
|
+
return ["Min items: ", x(() => t.schema.minItems)];
|
|
176
166
|
}
|
|
177
|
-
}), null),
|
|
167
|
+
}), null), a(e, s(u, {
|
|
178
168
|
get when() {
|
|
179
|
-
return
|
|
169
|
+
return x(() => t.schema.minItems !== void 0)() && t.schema.maxItems !== void 0;
|
|
180
170
|
},
|
|
181
171
|
children: " | "
|
|
182
|
-
}), null),
|
|
172
|
+
}), null), a(e, s(u, {
|
|
183
173
|
get when() {
|
|
184
|
-
return
|
|
174
|
+
return t.schema.maxItems !== void 0;
|
|
185
175
|
},
|
|
186
176
|
get children() {
|
|
187
|
-
return ["Max items: ",
|
|
177
|
+
return ["Max items: ", x(() => t.schema.maxItems)];
|
|
188
178
|
}
|
|
189
|
-
}), null),
|
|
179
|
+
}), null), e;
|
|
190
180
|
}
|
|
191
|
-
}), null),
|
|
181
|
+
}), null), n;
|
|
192
182
|
})();
|
|
193
183
|
};
|
|
194
184
|
j(["click"]);
|
|
195
185
|
export {
|
|
196
|
-
|
|
186
|
+
ne as ArrayField
|
|
197
187
|
};
|
|
198
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 {\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, 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"}
|
|
@@ -1,28 +1,65 @@
|
|
|
1
|
-
import { createComponent as
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { createComponent as i, template as u, insert as c, effect as s } from "solid-js/web";
|
|
2
|
+
import { Show as p, For as x } from "solid-js";
|
|
3
|
+
import { toDisplayStringJson as C } from "../utils.js";
|
|
4
|
+
import { Textarea as y } from "../../Input/Textarea.js";
|
|
5
|
+
var S = /* @__PURE__ */ u('<div class="relative overflow-hidden"><select class="w-full px-3 py-2 sm:py-2.5 glass-input text-sm text-surface-800 dark:text-surface-200 font-medium focus:outline-none cursor-pointer appearance-none pr-9"><option value>-- Select --'), O = /* @__PURE__ */ u("<option>");
|
|
6
|
+
function _(t) {
|
|
7
|
+
return !t || t.length === 0 ? !1 : t.every((o) => o.const !== void 0);
|
|
8
|
+
}
|
|
9
|
+
const T = (t) => {
|
|
10
|
+
const o = () => t.schema.oneOf || t.schema.anyOf || [], f = () => _(o()), a = () => o().map((e) => ({
|
|
11
|
+
value: e.const,
|
|
12
|
+
label: e.title || String(e.const)
|
|
13
|
+
})), d = () => {
|
|
14
|
+
const n = a().findIndex((r) => r.value === t.value);
|
|
15
|
+
return n >= 0 ? String(n) : "";
|
|
16
|
+
}, h = (e) => {
|
|
17
|
+
if (e === "") {
|
|
18
|
+
t.onChange(void 0);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const n = Number.parseInt(e, 10), r = a()[n];
|
|
22
|
+
r && t.onChange(r.value);
|
|
23
|
+
}, m = () => C(t.value), g = (e) => {
|
|
24
|
+
if (e === "") {
|
|
25
|
+
t.onChange(void 0);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
t.onChange(JSON.parse(e));
|
|
30
|
+
} catch {
|
|
31
|
+
t.onChange(e);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
return i(p, {
|
|
35
|
+
get when() {
|
|
36
|
+
return f();
|
|
9
37
|
},
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
38
|
+
get fallback() {
|
|
39
|
+
return i(y, {
|
|
40
|
+
get value() {
|
|
41
|
+
return m();
|
|
42
|
+
},
|
|
43
|
+
onInput: g,
|
|
44
|
+
placeholder: "{}",
|
|
45
|
+
class: "h-24 font-mono text-sm"
|
|
46
|
+
});
|
|
20
47
|
},
|
|
21
|
-
|
|
22
|
-
|
|
48
|
+
get children() {
|
|
49
|
+
var e = S(), n = e.firstChild;
|
|
50
|
+
return n.firstChild, n.addEventListener("change", (r) => h(r.currentTarget.value)), c(n, i(x, {
|
|
51
|
+
get each() {
|
|
52
|
+
return a();
|
|
53
|
+
},
|
|
54
|
+
children: (r, v) => (() => {
|
|
55
|
+
var l = O();
|
|
56
|
+
return c(l, () => r.label), s(() => l.value = v()), l;
|
|
57
|
+
})()
|
|
58
|
+
}), null), s(() => n.value = d()), e;
|
|
59
|
+
}
|
|
23
60
|
});
|
|
24
61
|
};
|
|
25
62
|
export {
|
|
26
|
-
|
|
63
|
+
T as OneOfField
|
|
27
64
|
};
|
|
28
65
|
//# sourceMappingURL=OneOfField.js.map
|