solid-hook-form 1.1.4 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/form_context.d.ts +1 -0
- package/dist/form_provider.d.ts +7 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.js +206 -132
- package/dist/main.umd.cjs +1 -2
- package/dist/test/input_text.test.d.ts +1 -0
- package/dist/types/event.d.ts +3 -0
- package/dist/types/form.d.ts +31 -0
- package/dist/types/path.d.ts +3 -0
- package/dist/use_form.d.ts +2 -21
- package/dist/use_form_context.d.ts +2 -0
- package/package.json +2 -2
- package/dist/main.js.map +0 -1
- package/dist/main.umd.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const FormContext: import('solid-js').Context<{}>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ParentProps } from 'solid-js';
|
|
2
|
+
import { FormValues, UseFormReturn } from './types/form';
|
|
3
|
+
type FormProviderProps<T extends FormValues> = ParentProps & {
|
|
4
|
+
form: UseFormReturn<T>;
|
|
5
|
+
};
|
|
6
|
+
export declare const FormProvider: <T extends FormValues>(props: FormProviderProps<T>) => import("solid-js").JSX.Element;
|
|
7
|
+
export {};
|
package/dist/main.d.ts
CHANGED
package/dist/main.js
CHANGED
|
@@ -1,135 +1,179 @@
|
|
|
1
|
-
const
|
|
2
|
-
equals:
|
|
1
|
+
const K = (t, e) => t === e, x = {
|
|
2
|
+
equals: K
|
|
3
3
|
};
|
|
4
|
-
let
|
|
5
|
-
const
|
|
6
|
-
var
|
|
7
|
-
let
|
|
4
|
+
let X = Q;
|
|
5
|
+
const v = 1, w = 2, Y = {};
|
|
6
|
+
var l = null;
|
|
7
|
+
let k = null, Z = null, o = null, a = null, g = null, E = 0;
|
|
8
8
|
function O(t, e) {
|
|
9
|
-
e = e ? Object.assign({},
|
|
10
|
-
const
|
|
9
|
+
e = e ? Object.assign({}, x, e) : x;
|
|
10
|
+
const r = {
|
|
11
11
|
value: t,
|
|
12
12
|
observers: null,
|
|
13
13
|
observerSlots: null,
|
|
14
14
|
comparator: e.equals || void 0
|
|
15
|
-
},
|
|
16
|
-
return [
|
|
15
|
+
}, s = (n) => (typeof n == "function" && (n = n(r.value)), G(r, n));
|
|
16
|
+
return [T.bind(r), s];
|
|
17
17
|
}
|
|
18
|
-
function
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
function $(t, e, r) {
|
|
19
|
+
const s = M(t, e, !1, v);
|
|
20
|
+
A(s);
|
|
21
|
+
}
|
|
22
|
+
function D(t, e, r) {
|
|
23
|
+
r = r ? Object.assign({}, x, r) : x;
|
|
24
|
+
const s = M(t, e, !0, 0);
|
|
25
|
+
return s.observers = null, s.observerSlots = null, s.comparator = r.equals || void 0, A(s), T.bind(s);
|
|
26
|
+
}
|
|
27
|
+
function j(t) {
|
|
28
|
+
if (o === null) return t();
|
|
29
|
+
const e = o;
|
|
30
|
+
o = null;
|
|
22
31
|
try {
|
|
23
32
|
return t();
|
|
24
33
|
} finally {
|
|
25
|
-
|
|
34
|
+
o = e;
|
|
26
35
|
}
|
|
27
36
|
}
|
|
28
|
-
function
|
|
37
|
+
function tt(t, e) {
|
|
38
|
+
const r = Symbol("context");
|
|
39
|
+
return {
|
|
40
|
+
id: r,
|
|
41
|
+
Provider: it(r),
|
|
42
|
+
defaultValue: t
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function et(t) {
|
|
46
|
+
let e;
|
|
47
|
+
return l && l.context && (e = l.context[t.id]) !== void 0 ? e : t.defaultValue;
|
|
48
|
+
}
|
|
49
|
+
function rt(t) {
|
|
50
|
+
const e = D(t), r = D(() => F(e()));
|
|
51
|
+
return r.toArray = () => {
|
|
52
|
+
const s = r();
|
|
53
|
+
return Array.isArray(s) ? s : s != null ? [s] : [];
|
|
54
|
+
}, r;
|
|
55
|
+
}
|
|
56
|
+
function T() {
|
|
29
57
|
if (this.sources && this.state)
|
|
30
|
-
if (this.state ===
|
|
58
|
+
if (this.state === v) A(this);
|
|
31
59
|
else {
|
|
32
|
-
const t =
|
|
33
|
-
|
|
60
|
+
const t = a;
|
|
61
|
+
a = null, V(() => d(this)), a = t;
|
|
34
62
|
}
|
|
35
|
-
if (
|
|
63
|
+
if (o) {
|
|
36
64
|
const t = this.observers ? this.observers.length : 0;
|
|
37
|
-
|
|
65
|
+
o.sources ? (o.sources.push(this), o.sourceSlots.push(t)) : (o.sources = [this], o.sourceSlots = [t]), this.observers ? (this.observers.push(o), this.observerSlots.push(o.sources.length - 1)) : (this.observers = [o], this.observerSlots = [o.sources.length - 1]);
|
|
38
66
|
}
|
|
39
67
|
return this.value;
|
|
40
68
|
}
|
|
41
|
-
function
|
|
42
|
-
let
|
|
43
|
-
return (!t.comparator || !t.comparator(
|
|
69
|
+
function G(t, e, r) {
|
|
70
|
+
let s = t.value;
|
|
71
|
+
return (!t.comparator || !t.comparator(s, e)) && (t.value = e, t.observers && t.observers.length && V(() => {
|
|
44
72
|
for (let n = 0; n < t.observers.length; n += 1) {
|
|
45
|
-
const
|
|
46
|
-
|
|
73
|
+
const i = t.observers[n], p = k && k.running;
|
|
74
|
+
p && k.disposed.has(i), (p ? !i.tState : !i.state) && (i.pure ? a.push(i) : g.push(i), i.observers && W(i)), p || (i.state = v);
|
|
47
75
|
}
|
|
48
|
-
if (
|
|
49
|
-
throw
|
|
76
|
+
if (a.length > 1e6)
|
|
77
|
+
throw a = [], new Error();
|
|
50
78
|
})), e;
|
|
51
79
|
}
|
|
52
|
-
function
|
|
80
|
+
function A(t) {
|
|
53
81
|
if (!t.fn) return;
|
|
54
82
|
S(t);
|
|
55
83
|
const e = E;
|
|
56
|
-
|
|
84
|
+
st(
|
|
57
85
|
t,
|
|
58
86
|
t.value,
|
|
59
87
|
e
|
|
60
88
|
);
|
|
61
89
|
}
|
|
62
|
-
function
|
|
63
|
-
let
|
|
64
|
-
const n =
|
|
65
|
-
|
|
90
|
+
function st(t, e, r) {
|
|
91
|
+
let s;
|
|
92
|
+
const n = l, i = o;
|
|
93
|
+
o = l = t;
|
|
66
94
|
try {
|
|
67
|
-
|
|
68
|
-
} catch (
|
|
69
|
-
return t.pure && (t.state =
|
|
95
|
+
s = t.fn(e);
|
|
96
|
+
} catch (p) {
|
|
97
|
+
return t.pure && (t.state = v, t.owned && t.owned.forEach(S), t.owned = null), t.updatedAt = r + 1, z(p);
|
|
70
98
|
} finally {
|
|
71
|
-
|
|
99
|
+
o = i, l = n;
|
|
72
100
|
}
|
|
73
|
-
(!t.updatedAt || t.updatedAt <=
|
|
101
|
+
(!t.updatedAt || t.updatedAt <= r) && (t.updatedAt != null && "observers" in t ? G(t, s) : t.value = s, t.updatedAt = r);
|
|
74
102
|
}
|
|
75
|
-
function
|
|
103
|
+
function M(t, e, r, s = v, n) {
|
|
104
|
+
const i = {
|
|
105
|
+
fn: t,
|
|
106
|
+
state: s,
|
|
107
|
+
updatedAt: null,
|
|
108
|
+
owned: null,
|
|
109
|
+
sources: null,
|
|
110
|
+
sourceSlots: null,
|
|
111
|
+
cleanups: null,
|
|
112
|
+
value: e,
|
|
113
|
+
owner: l,
|
|
114
|
+
context: l ? l.context : null,
|
|
115
|
+
pure: r
|
|
116
|
+
};
|
|
117
|
+
return l === null || l !== Y && (l.owned ? l.owned.push(i) : l.owned = [i]), i;
|
|
118
|
+
}
|
|
119
|
+
function _(t) {
|
|
76
120
|
if (t.state === 0) return;
|
|
77
|
-
if (t.state === w) return
|
|
78
|
-
if (t.suspense &&
|
|
121
|
+
if (t.state === w) return d(t);
|
|
122
|
+
if (t.suspense && j(t.suspense.inFallback)) return t.suspense.effects.push(t);
|
|
79
123
|
const e = [t];
|
|
80
124
|
for (; (t = t.owner) && (!t.updatedAt || t.updatedAt < E); )
|
|
81
125
|
t.state && e.push(t);
|
|
82
|
-
for (let
|
|
83
|
-
if (t = e[
|
|
84
|
-
|
|
126
|
+
for (let r = e.length - 1; r >= 0; r--)
|
|
127
|
+
if (t = e[r], t.state === v)
|
|
128
|
+
A(t);
|
|
85
129
|
else if (t.state === w) {
|
|
86
|
-
const
|
|
87
|
-
|
|
130
|
+
const s = a;
|
|
131
|
+
a = null, V(() => d(t, e[0])), a = s;
|
|
88
132
|
}
|
|
89
133
|
}
|
|
90
|
-
function
|
|
91
|
-
if (
|
|
92
|
-
let
|
|
93
|
-
|
|
134
|
+
function V(t, e) {
|
|
135
|
+
if (a) return t();
|
|
136
|
+
let r = !1;
|
|
137
|
+
a = [], g ? r = !0 : g = [], E++;
|
|
94
138
|
try {
|
|
95
|
-
const
|
|
96
|
-
return
|
|
97
|
-
} catch (
|
|
98
|
-
|
|
139
|
+
const s = t();
|
|
140
|
+
return nt(r), s;
|
|
141
|
+
} catch (s) {
|
|
142
|
+
r || (g = null), a = null, z(s);
|
|
99
143
|
}
|
|
100
144
|
}
|
|
101
|
-
function
|
|
102
|
-
if (
|
|
103
|
-
const e =
|
|
104
|
-
|
|
145
|
+
function nt(t) {
|
|
146
|
+
if (a && (Q(a), a = null), t) return;
|
|
147
|
+
const e = g;
|
|
148
|
+
g = null, e.length && V(() => X(e));
|
|
105
149
|
}
|
|
106
|
-
function
|
|
107
|
-
for (let e = 0; e < t.length; e++)
|
|
150
|
+
function Q(t) {
|
|
151
|
+
for (let e = 0; e < t.length; e++) _(t[e]);
|
|
108
152
|
}
|
|
109
|
-
function
|
|
153
|
+
function d(t, e) {
|
|
110
154
|
t.state = 0;
|
|
111
|
-
for (let
|
|
112
|
-
const
|
|
113
|
-
if (
|
|
114
|
-
const n =
|
|
115
|
-
n ===
|
|
155
|
+
for (let r = 0; r < t.sources.length; r += 1) {
|
|
156
|
+
const s = t.sources[r];
|
|
157
|
+
if (s.sources) {
|
|
158
|
+
const n = s.state;
|
|
159
|
+
n === v ? s !== e && (!s.updatedAt || s.updatedAt < E) && _(s) : n === w && d(s, e);
|
|
116
160
|
}
|
|
117
161
|
}
|
|
118
162
|
}
|
|
119
|
-
function
|
|
163
|
+
function W(t) {
|
|
120
164
|
for (let e = 0; e < t.observers.length; e += 1) {
|
|
121
|
-
const
|
|
122
|
-
|
|
165
|
+
const r = t.observers[e];
|
|
166
|
+
r.state || (r.state = w, r.pure ? a.push(r) : g.push(r), r.observers && W(r));
|
|
123
167
|
}
|
|
124
168
|
}
|
|
125
169
|
function S(t) {
|
|
126
170
|
let e;
|
|
127
171
|
if (t.sources)
|
|
128
172
|
for (; t.sources.length; ) {
|
|
129
|
-
const
|
|
173
|
+
const r = t.sources.pop(), s = t.sourceSlots.pop(), n = r.observers;
|
|
130
174
|
if (n && n.length) {
|
|
131
|
-
const
|
|
132
|
-
|
|
175
|
+
const i = n.pop(), p = r.observerSlots.pop();
|
|
176
|
+
s < n.length && (i.sourceSlots[p] = s, n[s] = i, r.observerSlots[s] = p);
|
|
133
177
|
}
|
|
134
178
|
}
|
|
135
179
|
if (t.tOwned) {
|
|
@@ -146,64 +190,88 @@ function S(t) {
|
|
|
146
190
|
}
|
|
147
191
|
t.state = 0;
|
|
148
192
|
}
|
|
149
|
-
function
|
|
193
|
+
function ut(t) {
|
|
150
194
|
return t instanceof Error ? t : new Error(typeof t == "string" ? t : "Unknown error", {
|
|
151
195
|
cause: t
|
|
152
196
|
});
|
|
153
197
|
}
|
|
154
|
-
function
|
|
155
|
-
throw
|
|
198
|
+
function z(t, e = l) {
|
|
199
|
+
throw ut(t);
|
|
200
|
+
}
|
|
201
|
+
function F(t) {
|
|
202
|
+
if (typeof t == "function" && !t.length) return F(t());
|
|
203
|
+
if (Array.isArray(t)) {
|
|
204
|
+
const e = [];
|
|
205
|
+
for (let r = 0; r < t.length; r++) {
|
|
206
|
+
const s = F(t[r]);
|
|
207
|
+
Array.isArray(s) ? e.push.apply(e, s) : e.push(s);
|
|
208
|
+
}
|
|
209
|
+
return e;
|
|
210
|
+
}
|
|
211
|
+
return t;
|
|
212
|
+
}
|
|
213
|
+
function it(t, e) {
|
|
214
|
+
return function(s) {
|
|
215
|
+
let n;
|
|
216
|
+
return $(
|
|
217
|
+
() => n = j(() => (l.context = {
|
|
218
|
+
...l.context,
|
|
219
|
+
[t]: s.value
|
|
220
|
+
}, rt(() => s.children))),
|
|
221
|
+
void 0
|
|
222
|
+
), n;
|
|
223
|
+
};
|
|
156
224
|
}
|
|
157
|
-
const
|
|
225
|
+
const P = {
|
|
158
226
|
text(t) {
|
|
159
227
|
return t.value;
|
|
160
228
|
},
|
|
161
229
|
checkbox(t) {
|
|
162
230
|
return t.checked;
|
|
163
231
|
}
|
|
164
|
-
},
|
|
232
|
+
}, ot = (t) => (P[t.type] || P.text)(t), R = {
|
|
165
233
|
text(t, e) {
|
|
166
234
|
t.value = e;
|
|
167
235
|
},
|
|
168
236
|
checkbox(t, e) {
|
|
169
237
|
t.checked = e;
|
|
170
238
|
}
|
|
171
|
-
},
|
|
172
|
-
const
|
|
173
|
-
if (
|
|
174
|
-
return { type: "required", message:
|
|
175
|
-
if (
|
|
176
|
-
return { type: "min", message:
|
|
177
|
-
if (
|
|
178
|
-
return { type: "max", message:
|
|
179
|
-
if (
|
|
180
|
-
return { type: "minLength", message:
|
|
181
|
-
if (
|
|
182
|
-
return { type: "maxLength", message:
|
|
183
|
-
if (
|
|
184
|
-
return { type: "pattern", message:
|
|
185
|
-
if (
|
|
186
|
-
const n =
|
|
239
|
+
}, U = (t, e) => (R[t.type] || R.text)(t, e), y = (t) => t instanceof RegExp || typeof t == "string" || typeof t == "number" ? t : t.value, b = (t) => typeof t == "string" ? t : typeof t.message == "string" ? t.message : "", lt = (t, e, r = {}) => {
|
|
240
|
+
const s = t[e];
|
|
241
|
+
if (r.required && !s)
|
|
242
|
+
return { type: "required", message: b(r.required) };
|
|
243
|
+
if (r.min && Number(s) < Number(y(r.min)))
|
|
244
|
+
return { type: "min", message: b(r.min) };
|
|
245
|
+
if (r.max && Number(s) > Number(y(r.max)))
|
|
246
|
+
return { type: "max", message: b(r.max) };
|
|
247
|
+
if (r.minLength && s.length < y(r.minLength))
|
|
248
|
+
return { type: "minLength", message: b(r.minLength) };
|
|
249
|
+
if (r.maxLength && s.length > y(r.maxLength))
|
|
250
|
+
return { type: "maxLength", message: b(r.maxLength) };
|
|
251
|
+
if (r.pattern && !y(r.pattern).test(s))
|
|
252
|
+
return { type: "pattern", message: b(r.pattern) };
|
|
253
|
+
if (r.validate) {
|
|
254
|
+
const n = r.validate(s, t);
|
|
187
255
|
if (n === !1)
|
|
188
256
|
return { type: "validate" };
|
|
189
257
|
if (typeof n == "string")
|
|
190
258
|
return { type: "validate", message: n };
|
|
191
259
|
}
|
|
192
|
-
},
|
|
260
|
+
}, pt = ({
|
|
193
261
|
defaultValues: t,
|
|
194
262
|
mode: e = "onInput"
|
|
195
263
|
}) => {
|
|
196
|
-
const
|
|
197
|
-
const c =
|
|
198
|
-
|
|
199
|
-
const
|
|
200
|
-
return delete
|
|
201
|
-
}), q(!Object.keys(
|
|
202
|
-
},
|
|
203
|
-
Object.keys(n()).forEach((
|
|
204
|
-
|
|
264
|
+
const r = {}, s = {}, [n, i] = O(t), [p, C] = O({}), [N, q] = O(!0), L = (u) => {
|
|
265
|
+
const c = s[u], f = lt(n(), u, c);
|
|
266
|
+
C(f ? (h) => ({ ...h, [u]: f }) : (h) => {
|
|
267
|
+
const m = { ...h };
|
|
268
|
+
return delete m[u], m;
|
|
269
|
+
}), q(!Object.keys(p()).length);
|
|
270
|
+
}, H = () => {
|
|
271
|
+
Object.keys(n()).forEach((u) => {
|
|
272
|
+
L(u);
|
|
205
273
|
});
|
|
206
|
-
},
|
|
274
|
+
}, J = (u, c = {}) => (s[u] = {
|
|
207
275
|
required: c.required,
|
|
208
276
|
min: c.min,
|
|
209
277
|
max: c.max,
|
|
@@ -211,48 +279,54 @@ const d = {
|
|
|
211
279
|
maxLength: c.maxLength,
|
|
212
280
|
pattern: c.pattern,
|
|
213
281
|
validate: c.validate
|
|
214
|
-
}
|
|
215
|
-
name:
|
|
282
|
+
}, {
|
|
283
|
+
name: u,
|
|
216
284
|
// value: values()[name],
|
|
217
|
-
onInput(
|
|
285
|
+
onInput(f) {
|
|
218
286
|
if (e === "onInput") {
|
|
219
|
-
const
|
|
220
|
-
|
|
287
|
+
const h = f.target.value;
|
|
288
|
+
i((m) => ({ ...m, [u]: h })), L(u);
|
|
221
289
|
}
|
|
222
290
|
},
|
|
223
|
-
onChange(
|
|
291
|
+
onChange(f) {
|
|
224
292
|
if (e === "onChange" || e === "onInput") {
|
|
225
|
-
const
|
|
226
|
-
|
|
293
|
+
const h = ot(f.target);
|
|
294
|
+
i((m) => ({ ...m, [u]: h })), L(u);
|
|
227
295
|
}
|
|
228
296
|
},
|
|
229
|
-
ref
|
|
230
|
-
|
|
297
|
+
ref(f) {
|
|
298
|
+
r[u] || (r[u] = f, f && U(f, n()[u]));
|
|
231
299
|
}
|
|
232
|
-
}),
|
|
300
|
+
}), I = (u) => u ? n()[u] : n();
|
|
233
301
|
return {
|
|
234
302
|
values: n,
|
|
235
|
-
errors:
|
|
236
|
-
isValid:
|
|
237
|
-
register:
|
|
238
|
-
getValues:
|
|
239
|
-
setValue: (
|
|
240
|
-
|
|
241
|
-
const
|
|
242
|
-
|
|
303
|
+
errors: p,
|
|
304
|
+
isValid: N,
|
|
305
|
+
register: J,
|
|
306
|
+
getValues: I,
|
|
307
|
+
setValue: (u, c) => {
|
|
308
|
+
i((h) => ({ ...h, [u]: c }));
|
|
309
|
+
const f = r[u];
|
|
310
|
+
f && U(f, c);
|
|
243
311
|
},
|
|
244
|
-
onSubmit: (
|
|
245
|
-
c.preventDefault(),
|
|
312
|
+
onSubmit: (u) => (c) => {
|
|
313
|
+
c.preventDefault(), H(), N() && u(I());
|
|
246
314
|
},
|
|
247
|
-
reset: (
|
|
248
|
-
|
|
315
|
+
reset: (u = {}) => {
|
|
316
|
+
i(() => ({
|
|
249
317
|
...t,
|
|
250
|
-
...
|
|
251
|
-
})),
|
|
318
|
+
...u
|
|
319
|
+
})), C({}), q(!0);
|
|
252
320
|
}
|
|
253
321
|
};
|
|
322
|
+
}, B = tt({}), ht = (t) => /* @__PURE__ */ React.createElement(B.Provider, { value: t.form }, t.children), gt = () => {
|
|
323
|
+
const t = et(B);
|
|
324
|
+
if (!t)
|
|
325
|
+
throw new Error("useFormContext: cannot find a FormProvider");
|
|
326
|
+
return t;
|
|
254
327
|
};
|
|
255
328
|
export {
|
|
256
|
-
|
|
329
|
+
ht as FormProvider,
|
|
330
|
+
pt as useForm,
|
|
331
|
+
gt as useFormContext
|
|
257
332
|
};
|
|
258
|
-
//# sourceMappingURL=main.js.map
|
package/dist/main.umd.cjs
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
(function(g,x){typeof exports=="object"&&typeof module<"u"?x(exports):typeof define=="function"&&define.amd?define(["exports"],x):(g=typeof globalThis<"u"?globalThis:g||self,x(g["solid-hook-form"]={}))})(this,function(g){"use strict";const
|
|
2
|
-
//# sourceMappingURL=main.umd.cjs.map
|
|
1
|
+
(function(g,x){typeof exports=="object"&&typeof module<"u"?x(exports):typeof define=="function"&&define.amd?define(["exports"],x):(g=typeof globalThis<"u"?globalThis:g||self,x(g["solid-hook-form"]={}))})(this,function(g){"use strict";const w={equals:(t,e)=>t===e};let K=U;const v=1,S=2,X={};var o=null;let L=null,Y=null,l=null,c=null,m=null,E=0;function k(t,e){e=e?Object.assign({},w,e):w;const r={value:t,observers:null,observerSlots:null,comparator:e.equals||void 0},n=s=>(typeof s=="function"&&(s=s(r.value)),j(r,s));return[T.bind(r),n]}function Z(t,e,r){const n=D(t,e,!1,v);A(n)}function I(t,e,r){r=r?Object.assign({},w,r):w;const n=D(t,e,!0,0);return n.observers=null,n.observerSlots=null,n.comparator=r.equals||void 0,A(n),T.bind(n)}function P(t){if(l===null)return t();const e=l;l=null;try{return t()}finally{l=e}}function $(t,e){const r=Symbol("context");return{id:r,Provider:ut(r),defaultValue:t}}function tt(t){let e;return o&&o.context&&(e=o.context[t.id])!==void 0?e:t.defaultValue}function et(t){const e=I(t),r=I(()=>O(e()));return r.toArray=()=>{const n=r();return Array.isArray(n)?n:n!=null?[n]:[]},r}function T(){if(this.sources&&this.state)if(this.state===v)A(this);else{const t=c;c=null,C(()=>V(this)),c=t}if(l){const t=this.observers?this.observers.length:0;l.sources?(l.sources.push(this),l.sourceSlots.push(t)):(l.sources=[this],l.sourceSlots=[t]),this.observers?(this.observers.push(l),this.observerSlots.push(l.sources.length-1)):(this.observers=[l],this.observerSlots=[l.sources.length-1])}return this.value}function j(t,e,r){let n=t.value;return(!t.comparator||!t.comparator(n,e))&&(t.value=e,t.observers&&t.observers.length&&C(()=>{for(let s=0;s<t.observers.length;s+=1){const i=t.observers[s],p=L&&L.running;p&&L.disposed.has(i),(p?!i.tState:!i.state)&&(i.pure?c.push(i):m.push(i),i.observers&&M(i)),p||(i.state=v)}if(c.length>1e6)throw c=[],new Error})),e}function A(t){if(!t.fn)return;F(t);const e=E;rt(t,t.value,e)}function rt(t,e,r){let n;const s=o,i=l;l=o=t;try{n=t.fn(e)}catch(p){return t.pure&&(t.state=v,t.owned&&t.owned.forEach(F),t.owned=null),t.updatedAt=r+1,G(p)}finally{l=i,o=s}(!t.updatedAt||t.updatedAt<=r)&&(t.updatedAt!=null&&"observers"in t?j(t,n):t.value=n,t.updatedAt=r)}function D(t,e,r,n=v,s){const i={fn:t,state:n,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:e,owner:o,context:o?o.context:null,pure:r};return o===null||o!==X&&(o.owned?o.owned.push(i):o.owned=[i]),i}function R(t){if(t.state===0)return;if(t.state===S)return V(t);if(t.suspense&&P(t.suspense.inFallback))return t.suspense.effects.push(t);const e=[t];for(;(t=t.owner)&&(!t.updatedAt||t.updatedAt<E);)t.state&&e.push(t);for(let r=e.length-1;r>=0;r--)if(t=e[r],t.state===v)A(t);else if(t.state===S){const n=c;c=null,C(()=>V(t,e[0])),c=n}}function C(t,e){if(c)return t();let r=!1;c=[],m?r=!0:m=[],E++;try{const n=t();return nt(r),n}catch(n){r||(m=null),c=null,G(n)}}function nt(t){if(c&&(U(c),c=null),t)return;const e=m;m=null,e.length&&C(()=>K(e))}function U(t){for(let e=0;e<t.length;e++)R(t[e])}function V(t,e){t.state=0;for(let r=0;r<t.sources.length;r+=1){const n=t.sources[r];if(n.sources){const s=n.state;s===v?n!==e&&(!n.updatedAt||n.updatedAt<E)&&R(n):s===S&&V(n,e)}}}function M(t){for(let e=0;e<t.observers.length;e+=1){const r=t.observers[e];r.state||(r.state=S,r.pure?c.push(r):m.push(r),r.observers&&M(r))}}function F(t){let e;if(t.sources)for(;t.sources.length;){const r=t.sources.pop(),n=t.sourceSlots.pop(),s=r.observers;if(s&&s.length){const i=s.pop(),p=r.observerSlots.pop();n<s.length&&(i.sourceSlots[p]=n,s[n]=i,r.observerSlots[n]=p)}}if(t.tOwned){for(e=t.tOwned.length-1;e>=0;e--)F(t.tOwned[e]);delete t.tOwned}if(t.owned){for(e=t.owned.length-1;e>=0;e--)F(t.owned[e]);t.owned=null}if(t.cleanups){for(e=t.cleanups.length-1;e>=0;e--)t.cleanups[e]();t.cleanups=null}t.state=0}function st(t){return t instanceof Error?t:new Error(typeof t=="string"?t:"Unknown error",{cause:t})}function G(t,e=o){throw st(t)}function O(t){if(typeof t=="function"&&!t.length)return O(t());if(Array.isArray(t)){const e=[];for(let r=0;r<t.length;r++){const n=O(t[r]);Array.isArray(n)?e.push.apply(e,n):e.push(n)}return e}return t}function ut(t,e){return function(n){let s;return Z(()=>s=P(()=>(o.context={...o.context,[t]:n.value},et(()=>n.children))),void 0),s}}const _={text(t){return t.value},checkbox(t){return t.checked}},it=t=>(_[t.type]||_.text)(t),Q={text(t,e){t.value=e},checkbox(t,e){t.checked=e}},W=(t,e)=>(Q[t.type]||Q.text)(t,e),d=t=>t instanceof RegExp||typeof t=="string"||typeof t=="number"?t:t.value,b=t=>typeof t=="string"?t:typeof t.message=="string"?t.message:"",ot=(t,e,r={})=>{const n=t[e];if(r.required&&!n)return{type:"required",message:b(r.required)};if(r.min&&Number(n)<Number(d(r.min)))return{type:"min",message:b(r.min)};if(r.max&&Number(n)>Number(d(r.max)))return{type:"max",message:b(r.max)};if(r.minLength&&n.length<d(r.minLength))return{type:"minLength",message:b(r.minLength)};if(r.maxLength&&n.length>d(r.maxLength))return{type:"maxLength",message:b(r.maxLength)};if(r.pattern&&!d(r.pattern).test(n))return{type:"pattern",message:b(r.pattern)};if(r.validate){const s=r.validate(n,t);if(s===!1)return{type:"validate"};if(typeof s=="string")return{type:"validate",message:s}}},lt=({defaultValues:t,mode:e="onInput"})=>{const r={},n={},[s,i]=k(t),[p,q]=k({}),[B,H]=k(!0),N=u=>{const a=n[u],f=ot(s(),u,a);q(f?h=>({...h,[u]:f}):h=>{const y={...h};return delete y[u],y}),H(!Object.keys(p()).length)},ft=()=>{Object.keys(s()).forEach(u=>{N(u)})},pt=(u,a={})=>(n[u]={required:a.required,min:a.min,max:a.max,minLength:a.minLength,maxLength:a.maxLength,pattern:a.pattern,validate:a.validate},{name:u,onInput(f){if(e==="onInput"){const h=f.target.value;i(y=>({...y,[u]:h})),N(u)}},onChange(f){if(e==="onChange"||e==="onInput"){const h=it(f.target);i(y=>({...y,[u]:h})),N(u)}},ref(f){r[u]||(r[u]=f,f&&W(f,s()[u]))}}),J=u=>u?s()[u]:s();return{values:s,errors:p,isValid:B,register:pt,getValues:J,setValue:(u,a)=>{i(h=>({...h,[u]:a}));const f=r[u];f&&W(f,a)},onSubmit:u=>a=>{a.preventDefault(),ft(),B()&&u(J())},reset:(u={})=>{i(()=>({...t,...u})),q({}),H(!0)}}},z=$({}),ct=t=>React.createElement(z.Provider,{value:t.form},t.children),at=()=>{const t=tt(z);if(!t)throw new Error("useFormContext: cannot find a FormProvider");return t};g.FormProvider=ct,g.useForm=lt,g.useFormContext=at,Object.defineProperty(g,Symbol.toStringTag,{value:"Module"})});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/types/event.d.ts
CHANGED
package/dist/types/form.d.ts
CHANGED
|
@@ -1 +1,32 @@
|
|
|
1
|
+
import { Accessor } from 'solid-js';
|
|
2
|
+
import { FieldPath, FieldPathValue, Path } from './path';
|
|
3
|
+
import { Rules } from './validate';
|
|
4
|
+
import { FieldErrors } from './errors';
|
|
5
|
+
import { InputEvent, ChangeEvent } from './event';
|
|
1
6
|
export type FormValues = Record<string, any>;
|
|
7
|
+
type RegisterReturn<F extends FormValues> = {
|
|
8
|
+
name: Path<F>;
|
|
9
|
+
ref(ref: HTMLInputElement | null): void;
|
|
10
|
+
onInput(event: InputEvent): void;
|
|
11
|
+
onChange(event: ChangeEvent): void;
|
|
12
|
+
};
|
|
13
|
+
export type Register<T extends FormValues> = (name: Path<T>, options?: Rules<T, Path<T>>) => RegisterReturn<T>;
|
|
14
|
+
export type GetValues<F extends FormValues> = {
|
|
15
|
+
(): F;
|
|
16
|
+
<N extends FieldPath<F>>(name: N): FieldPathValue<F, N>;
|
|
17
|
+
};
|
|
18
|
+
export type SetValue<F extends FormValues> = (name: Path<F>, value: FieldPathValue<F, Path<F>>) => void;
|
|
19
|
+
type SubmitCallback<F extends FormValues> = (values: F) => void;
|
|
20
|
+
export type OnSubmit<F extends FormValues> = (submit: SubmitCallback<F>) => (event: SubmitEvent) => void;
|
|
21
|
+
export type Reset<F extends FormValues> = (newDefaultValues?: Partial<F>) => void;
|
|
22
|
+
export type UseFormReturn<F extends FormValues = FormValues> = {
|
|
23
|
+
values: Accessor<F>;
|
|
24
|
+
errors: Accessor<FieldErrors<F>>;
|
|
25
|
+
isValid: Accessor<boolean>;
|
|
26
|
+
register: Register<F>;
|
|
27
|
+
getValues: GetValues<F>;
|
|
28
|
+
setValue: SetValue<F>;
|
|
29
|
+
onSubmit: OnSubmit<F>;
|
|
30
|
+
reset: Reset<F>;
|
|
31
|
+
};
|
|
32
|
+
export {};
|
package/dist/types/path.d.ts
CHANGED
|
@@ -18,4 +18,7 @@ type ArrayPathInternal<T, TraversedTypes = T> = T extends ReadonlyArray<infer V>
|
|
|
18
18
|
export type ArrayPath<T> = T extends any ? ArrayPathInternal<T> : never;
|
|
19
19
|
export type PathValue<T, P extends Path<T> | ArrayPath<T>> = T extends any ? P extends `${infer K}.${infer R}` ? K extends keyof T ? R extends Path<T[K]> ? PathValue<T[K], R> : never : K extends `${ArrayKey}` ? T extends ReadonlyArray<infer V> ? PathValue<V, R & Path<V>> : never : never : P extends keyof T ? T[P] : P extends `${ArrayKey}` ? T extends ReadonlyArray<infer V> ? V : never : never : never;
|
|
20
20
|
export type FieldPathValue<F extends FormValues, P extends FieldPath<F>> = PathValue<F, P>;
|
|
21
|
+
export type FieldPathValues<F extends FormValues, P extends FieldPath<F>[] | readonly FieldPath<F>[]> = {} & {
|
|
22
|
+
[K in keyof P]: FieldPathValue<F, P[K] & FieldPath<F>>;
|
|
23
|
+
};
|
|
21
24
|
export {};
|
package/dist/use_form.d.ts
CHANGED
|
@@ -1,26 +1,7 @@
|
|
|
1
|
-
import { FormValues } from './types/form';
|
|
2
|
-
import { Path } from './types/path';
|
|
3
|
-
import { FieldErrors } from './types/errors';
|
|
4
|
-
import { ChangeEvent } from './types/event';
|
|
5
|
-
import { Rules } from './types/validate';
|
|
1
|
+
import { FormValues, UseFormReturn } from './types/form';
|
|
6
2
|
type UseFormArg<T extends FormValues> = {
|
|
7
3
|
defaultValues: T;
|
|
8
4
|
mode?: "onInput" | "onChange" | "onSubmit";
|
|
9
5
|
};
|
|
10
|
-
|
|
11
|
-
export declare const useForm: <T extends FormValues>({ defaultValues, mode, }: UseFormArg<T>) => {
|
|
12
|
-
values: import('solid-js').Accessor<T>;
|
|
13
|
-
errors: import('solid-js').Accessor<FieldErrors<T>>;
|
|
14
|
-
isValid: import('solid-js').Accessor<boolean>;
|
|
15
|
-
register: (name: Path<T>, options?: Rules<T, Path<T>>) => {
|
|
16
|
-
name: Path<T>;
|
|
17
|
-
onInput(event: InputEvent): void;
|
|
18
|
-
onChange(event: ChangeEvent): void;
|
|
19
|
-
ref: (ref: HTMLInputElement | null) => void;
|
|
20
|
-
};
|
|
21
|
-
getValues: (name?: Path<T>) => T | T[Path<T>];
|
|
22
|
-
setValue: (name: Path<T>, value: any) => void;
|
|
23
|
-
onSubmit: (submit: SubmitCallback<T>) => (event: SubmitEvent) => void;
|
|
24
|
-
reset: (newDefaultValues?: Partial<T>) => void;
|
|
25
|
-
};
|
|
6
|
+
export declare const useForm: <F extends FormValues>({ defaultValues, mode, }: UseFormArg<F>) => UseFormReturn<F>;
|
|
26
7
|
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "solid-hook-form",
|
|
3
|
-
"version": "1.1
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/main.umd.cjs",
|
|
6
6
|
"module": "./dist/main.js",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"vite": "^6.0.11",
|
|
25
25
|
"vite-plugin-dts": "^4.5.0",
|
|
26
26
|
"vite-plugin-solid": "^2.11.6",
|
|
27
|
-
"vitest": "^3.
|
|
27
|
+
"vitest": "^3.1.1"
|
|
28
28
|
},
|
|
29
29
|
"scripts": {
|
|
30
30
|
"start": "vite --config vite.demo",
|
package/dist/main.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sources":["../node_modules/solid-js/dist/solid.js","../src/logic/get_value.ts","../src/logic/set_value.ts","../src/logic/validate.ts","../src/use_form.ts"],"sourcesContent":["let taskIdCounter = 1,\n isCallbackScheduled = false,\n isPerformingWork = false,\n taskQueue = [],\n currentTask = null,\n shouldYieldToHost = null,\n yieldInterval = 5,\n deadline = 0,\n maxYieldInterval = 300,\n scheduleCallback = null,\n scheduledCallback = null;\nconst maxSigned31BitInt = 1073741823;\nfunction setupScheduler() {\n const channel = new MessageChannel(),\n port = channel.port2;\n scheduleCallback = () => port.postMessage(null);\n channel.port1.onmessage = () => {\n if (scheduledCallback !== null) {\n const currentTime = performance.now();\n deadline = currentTime + yieldInterval;\n const hasTimeRemaining = true;\n try {\n const hasMoreWork = scheduledCallback(hasTimeRemaining, currentTime);\n if (!hasMoreWork) {\n scheduledCallback = null;\n } else port.postMessage(null);\n } catch (error) {\n port.postMessage(null);\n throw error;\n }\n }\n };\n if (navigator && navigator.scheduling && navigator.scheduling.isInputPending) {\n const scheduling = navigator.scheduling;\n shouldYieldToHost = () => {\n const currentTime = performance.now();\n if (currentTime >= deadline) {\n if (scheduling.isInputPending()) {\n return true;\n }\n return currentTime >= maxYieldInterval;\n } else {\n return false;\n }\n };\n } else {\n shouldYieldToHost = () => performance.now() >= deadline;\n }\n}\nfunction enqueue(taskQueue, task) {\n function findIndex() {\n let m = 0;\n let n = taskQueue.length - 1;\n while (m <= n) {\n const k = (n + m) >> 1;\n const cmp = task.expirationTime - taskQueue[k].expirationTime;\n if (cmp > 0) m = k + 1;\n else if (cmp < 0) n = k - 1;\n else return k;\n }\n return m;\n }\n taskQueue.splice(findIndex(), 0, task);\n}\nfunction requestCallback(fn, options) {\n if (!scheduleCallback) setupScheduler();\n let startTime = performance.now(),\n timeout = maxSigned31BitInt;\n if (options && options.timeout) timeout = options.timeout;\n const newTask = {\n id: taskIdCounter++,\n fn,\n startTime,\n expirationTime: startTime + timeout\n };\n enqueue(taskQueue, newTask);\n if (!isCallbackScheduled && !isPerformingWork) {\n isCallbackScheduled = true;\n scheduledCallback = flushWork;\n scheduleCallback();\n }\n return newTask;\n}\nfunction cancelCallback(task) {\n task.fn = null;\n}\nfunction flushWork(hasTimeRemaining, initialTime) {\n isCallbackScheduled = false;\n isPerformingWork = true;\n try {\n return workLoop(hasTimeRemaining, initialTime);\n } finally {\n currentTask = null;\n isPerformingWork = false;\n }\n}\nfunction workLoop(hasTimeRemaining, initialTime) {\n let currentTime = initialTime;\n currentTask = taskQueue[0] || null;\n while (currentTask !== null) {\n if (currentTask.expirationTime > currentTime && (!hasTimeRemaining || shouldYieldToHost())) {\n break;\n }\n const callback = currentTask.fn;\n if (callback !== null) {\n currentTask.fn = null;\n const didUserCallbackTimeout = currentTask.expirationTime <= currentTime;\n callback(didUserCallbackTimeout);\n currentTime = performance.now();\n if (currentTask === taskQueue[0]) {\n taskQueue.shift();\n }\n } else taskQueue.shift();\n currentTask = taskQueue[0] || null;\n }\n return currentTask !== null;\n}\n\nconst sharedConfig = {\n context: undefined,\n registry: undefined,\n effects: undefined,\n done: false,\n getContextId() {\n return getContextId(this.context.count);\n },\n getNextContextId() {\n return getContextId(this.context.count++);\n }\n};\nfunction getContextId(count) {\n const num = String(count),\n len = num.length - 1;\n return sharedConfig.context.id + (len ? String.fromCharCode(96 + len) : \"\") + num;\n}\nfunction setHydrateContext(context) {\n sharedConfig.context = context;\n}\nfunction nextHydrateContext() {\n return {\n ...sharedConfig.context,\n id: sharedConfig.getNextContextId(),\n count: 0\n };\n}\n\nconst IS_DEV = false;\nconst equalFn = (a, b) => a === b;\nconst $PROXY = Symbol(\"solid-proxy\");\nconst SUPPORTS_PROXY = typeof Proxy === \"function\";\nconst $TRACK = Symbol(\"solid-track\");\nconst $DEVCOMP = Symbol(\"solid-dev-component\");\nconst signalOptions = {\n equals: equalFn\n};\nlet ERROR = null;\nlet runEffects = runQueue;\nconst STALE = 1;\nconst PENDING = 2;\nconst UNOWNED = {\n owned: null,\n cleanups: null,\n context: null,\n owner: null\n};\nconst NO_INIT = {};\nvar Owner = null;\nlet Transition = null;\nlet Scheduler = null;\nlet ExternalSourceConfig = null;\nlet Listener = null;\nlet Updates = null;\nlet Effects = null;\nlet ExecCount = 0;\nfunction createRoot(fn, detachedOwner) {\n const listener = Listener,\n owner = Owner,\n unowned = fn.length === 0,\n current = detachedOwner === undefined ? owner : detachedOwner,\n root = unowned\n ? UNOWNED\n : {\n owned: null,\n cleanups: null,\n context: current ? current.context : null,\n owner: current\n },\n updateFn = unowned ? fn : () => fn(() => untrack(() => cleanNode(root)));\n Owner = root;\n Listener = null;\n try {\n return runUpdates(updateFn, true);\n } finally {\n Listener = listener;\n Owner = owner;\n }\n}\nfunction createSignal(value, options) {\n options = options ? Object.assign({}, signalOptions, options) : signalOptions;\n const s = {\n value,\n observers: null,\n observerSlots: null,\n comparator: options.equals || undefined\n };\n const setter = value => {\n if (typeof value === \"function\") {\n if (Transition && Transition.running && Transition.sources.has(s)) value = value(s.tValue);\n else value = value(s.value);\n }\n return writeSignal(s, value);\n };\n return [readSignal.bind(s), setter];\n}\nfunction createComputed(fn, value, options) {\n const c = createComputation(fn, value, true, STALE);\n if (Scheduler && Transition && Transition.running) Updates.push(c);\n else updateComputation(c);\n}\nfunction createRenderEffect(fn, value, options) {\n const c = createComputation(fn, value, false, STALE);\n if (Scheduler && Transition && Transition.running) Updates.push(c);\n else updateComputation(c);\n}\nfunction createEffect(fn, value, options) {\n runEffects = runUserEffects;\n const c = createComputation(fn, value, false, STALE),\n s = SuspenseContext && useContext(SuspenseContext);\n if (s) c.suspense = s;\n if (!options || !options.render) c.user = true;\n Effects ? Effects.push(c) : updateComputation(c);\n}\nfunction createReaction(onInvalidate, options) {\n let fn;\n const c = createComputation(\n () => {\n fn ? fn() : untrack(onInvalidate);\n fn = undefined;\n },\n undefined,\n false,\n 0\n ),\n s = SuspenseContext && useContext(SuspenseContext);\n if (s) c.suspense = s;\n c.user = true;\n return tracking => {\n fn = tracking;\n updateComputation(c);\n };\n}\nfunction createMemo(fn, value, options) {\n options = options ? Object.assign({}, signalOptions, options) : signalOptions;\n const c = createComputation(fn, value, true, 0);\n c.observers = null;\n c.observerSlots = null;\n c.comparator = options.equals || undefined;\n if (Scheduler && Transition && Transition.running) {\n c.tState = STALE;\n Updates.push(c);\n } else updateComputation(c);\n return readSignal.bind(c);\n}\nfunction isPromise(v) {\n return v && typeof v === \"object\" && \"then\" in v;\n}\nfunction createResource(pSource, pFetcher, pOptions) {\n let source;\n let fetcher;\n let options;\n if (typeof pFetcher === \"function\") {\n source = pSource;\n fetcher = pFetcher;\n options = pOptions || {};\n } else {\n source = true;\n fetcher = pSource;\n options = pFetcher || {};\n }\n let pr = null,\n initP = NO_INIT,\n id = null,\n loadedUnderTransition = false,\n scheduled = false,\n resolved = \"initialValue\" in options,\n dynamic = typeof source === \"function\" && createMemo(source);\n const contexts = new Set(),\n [value, setValue] = (options.storage || createSignal)(options.initialValue),\n [error, setError] = createSignal(undefined),\n [track, trigger] = createSignal(undefined, {\n equals: false\n }),\n [state, setState] = createSignal(resolved ? \"ready\" : \"unresolved\");\n if (sharedConfig.context) {\n id = sharedConfig.getNextContextId();\n if (options.ssrLoadFrom === \"initial\") initP = options.initialValue;\n else if (sharedConfig.load && sharedConfig.has(id)) initP = sharedConfig.load(id);\n }\n function loadEnd(p, v, error, key) {\n if (pr === p) {\n pr = null;\n key !== undefined && (resolved = true);\n if ((p === initP || v === initP) && options.onHydrated)\n queueMicrotask(() =>\n options.onHydrated(key, {\n value: v\n })\n );\n initP = NO_INIT;\n if (Transition && p && loadedUnderTransition) {\n Transition.promises.delete(p);\n loadedUnderTransition = false;\n runUpdates(() => {\n Transition.running = true;\n completeLoad(v, error);\n }, false);\n } else completeLoad(v, error);\n }\n return v;\n }\n function completeLoad(v, err) {\n runUpdates(() => {\n if (err === undefined) setValue(() => v);\n setState(err !== undefined ? \"errored\" : resolved ? \"ready\" : \"unresolved\");\n setError(err);\n for (const c of contexts.keys()) c.decrement();\n contexts.clear();\n }, false);\n }\n function read() {\n const c = SuspenseContext && useContext(SuspenseContext),\n v = value(),\n err = error();\n if (err !== undefined && !pr) throw err;\n if (Listener && !Listener.user && c) {\n createComputed(() => {\n track();\n if (pr) {\n if (c.resolved && Transition && loadedUnderTransition) Transition.promises.add(pr);\n else if (!contexts.has(c)) {\n c.increment();\n contexts.add(c);\n }\n }\n });\n }\n return v;\n }\n function load(refetching = true) {\n if (refetching !== false && scheduled) return;\n scheduled = false;\n const lookup = dynamic ? dynamic() : source;\n loadedUnderTransition = Transition && Transition.running;\n if (lookup == null || lookup === false) {\n loadEnd(pr, untrack(value));\n return;\n }\n if (Transition && pr) Transition.promises.delete(pr);\n const p =\n initP !== NO_INIT\n ? initP\n : untrack(() =>\n fetcher(lookup, {\n value: value(),\n refetching\n })\n );\n if (!isPromise(p)) {\n loadEnd(pr, p, undefined, lookup);\n return p;\n }\n pr = p;\n if (\"value\" in p) {\n if (p.status === \"success\") loadEnd(pr, p.value, undefined, lookup);\n else loadEnd(pr, undefined, castError(p.value), lookup);\n return p;\n }\n scheduled = true;\n queueMicrotask(() => (scheduled = false));\n runUpdates(() => {\n setState(resolved ? \"refreshing\" : \"pending\");\n trigger();\n }, false);\n return p.then(\n v => loadEnd(p, v, undefined, lookup),\n e => loadEnd(p, undefined, castError(e), lookup)\n );\n }\n Object.defineProperties(read, {\n state: {\n get: () => state()\n },\n error: {\n get: () => error()\n },\n loading: {\n get() {\n const s = state();\n return s === \"pending\" || s === \"refreshing\";\n }\n },\n latest: {\n get() {\n if (!resolved) return read();\n const err = error();\n if (err && !pr) throw err;\n return value();\n }\n }\n });\n if (dynamic) createComputed(() => load(false));\n else load(false);\n return [\n read,\n {\n refetch: load,\n mutate: setValue\n }\n ];\n}\nfunction createDeferred(source, options) {\n let t,\n timeout = options ? options.timeoutMs : undefined;\n const node = createComputation(\n () => {\n if (!t || !t.fn)\n t = requestCallback(\n () => setDeferred(() => node.value),\n timeout !== undefined\n ? {\n timeout\n }\n : undefined\n );\n return source();\n },\n undefined,\n true\n );\n const [deferred, setDeferred] = createSignal(\n Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value,\n options\n );\n updateComputation(node);\n setDeferred(() =>\n Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value\n );\n return deferred;\n}\nfunction createSelector(source, fn = equalFn, options) {\n const subs = new Map();\n const node = createComputation(\n p => {\n const v = source();\n for (const [key, val] of subs.entries())\n if (fn(key, v) !== fn(key, p)) {\n for (const c of val.values()) {\n c.state = STALE;\n if (c.pure) Updates.push(c);\n else Effects.push(c);\n }\n }\n return v;\n },\n undefined,\n true,\n STALE\n );\n updateComputation(node);\n return key => {\n const listener = Listener;\n if (listener) {\n let l;\n if ((l = subs.get(key))) l.add(listener);\n else subs.set(key, (l = new Set([listener])));\n onCleanup(() => {\n l.delete(listener);\n !l.size && subs.delete(key);\n });\n }\n return fn(\n key,\n Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value\n );\n };\n}\nfunction batch(fn) {\n return runUpdates(fn, false);\n}\nfunction untrack(fn) {\n if (!ExternalSourceConfig && Listener === null) return fn();\n const listener = Listener;\n Listener = null;\n try {\n if (ExternalSourceConfig) return ExternalSourceConfig.untrack(fn);\n return fn();\n } finally {\n Listener = listener;\n }\n}\nfunction on(deps, fn, options) {\n const isArray = Array.isArray(deps);\n let prevInput;\n let defer = options && options.defer;\n return prevValue => {\n let input;\n if (isArray) {\n input = Array(deps.length);\n for (let i = 0; i < deps.length; i++) input[i] = deps[i]();\n } else input = deps();\n if (defer) {\n defer = false;\n return prevValue;\n }\n const result = untrack(() => fn(input, prevInput, prevValue));\n prevInput = input;\n return result;\n };\n}\nfunction onMount(fn) {\n createEffect(() => untrack(fn));\n}\nfunction onCleanup(fn) {\n if (Owner === null);\n else if (Owner.cleanups === null) Owner.cleanups = [fn];\n else Owner.cleanups.push(fn);\n return fn;\n}\nfunction catchError(fn, handler) {\n ERROR || (ERROR = Symbol(\"error\"));\n Owner = createComputation(undefined, undefined, true);\n Owner.context = {\n ...Owner.context,\n [ERROR]: [handler]\n };\n if (Transition && Transition.running) Transition.sources.add(Owner);\n try {\n return fn();\n } catch (err) {\n handleError(err);\n } finally {\n Owner = Owner.owner;\n }\n}\nfunction getListener() {\n return Listener;\n}\nfunction getOwner() {\n return Owner;\n}\nfunction runWithOwner(o, fn) {\n const prev = Owner;\n const prevListener = Listener;\n Owner = o;\n Listener = null;\n try {\n return runUpdates(fn, true);\n } catch (err) {\n handleError(err);\n } finally {\n Owner = prev;\n Listener = prevListener;\n }\n}\nfunction enableScheduling(scheduler = requestCallback) {\n Scheduler = scheduler;\n}\nfunction startTransition(fn) {\n if (Transition && Transition.running) {\n fn();\n return Transition.done;\n }\n const l = Listener;\n const o = Owner;\n return Promise.resolve().then(() => {\n Listener = l;\n Owner = o;\n let t;\n if (Scheduler || SuspenseContext) {\n t =\n Transition ||\n (Transition = {\n sources: new Set(),\n effects: [],\n promises: new Set(),\n disposed: new Set(),\n queue: new Set(),\n running: true\n });\n t.done || (t.done = new Promise(res => (t.resolve = res)));\n t.running = true;\n }\n runUpdates(fn, false);\n Listener = Owner = null;\n return t ? t.done : undefined;\n });\n}\nconst [transPending, setTransPending] = /*@__PURE__*/ createSignal(false);\nfunction useTransition() {\n return [transPending, startTransition];\n}\nfunction resumeEffects(e) {\n Effects.push.apply(Effects, e);\n e.length = 0;\n}\nfunction createContext(defaultValue, options) {\n const id = Symbol(\"context\");\n return {\n id,\n Provider: createProvider(id),\n defaultValue\n };\n}\nfunction useContext(context) {\n let value;\n return Owner && Owner.context && (value = Owner.context[context.id]) !== undefined\n ? value\n : context.defaultValue;\n}\nfunction children(fn) {\n const children = createMemo(fn);\n const memo = createMemo(() => resolveChildren(children()));\n memo.toArray = () => {\n const c = memo();\n return Array.isArray(c) ? c : c != null ? [c] : [];\n };\n return memo;\n}\nlet SuspenseContext;\nfunction getSuspenseContext() {\n return SuspenseContext || (SuspenseContext = createContext());\n}\nfunction enableExternalSource(factory, untrack = fn => fn()) {\n if (ExternalSourceConfig) {\n const { factory: oldFactory, untrack: oldUntrack } = ExternalSourceConfig;\n ExternalSourceConfig = {\n factory: (fn, trigger) => {\n const oldSource = oldFactory(fn, trigger);\n const source = factory(x => oldSource.track(x), trigger);\n return {\n track: x => source.track(x),\n dispose() {\n source.dispose();\n oldSource.dispose();\n }\n };\n },\n untrack: fn => oldUntrack(() => untrack(fn))\n };\n } else {\n ExternalSourceConfig = {\n factory,\n untrack\n };\n }\n}\nfunction readSignal() {\n const runningTransition = Transition && Transition.running;\n if (this.sources && (runningTransition ? this.tState : this.state)) {\n if ((runningTransition ? this.tState : this.state) === STALE) updateComputation(this);\n else {\n const updates = Updates;\n Updates = null;\n runUpdates(() => lookUpstream(this), false);\n Updates = updates;\n }\n }\n if (Listener) {\n const sSlot = this.observers ? this.observers.length : 0;\n if (!Listener.sources) {\n Listener.sources = [this];\n Listener.sourceSlots = [sSlot];\n } else {\n Listener.sources.push(this);\n Listener.sourceSlots.push(sSlot);\n }\n if (!this.observers) {\n this.observers = [Listener];\n this.observerSlots = [Listener.sources.length - 1];\n } else {\n this.observers.push(Listener);\n this.observerSlots.push(Listener.sources.length - 1);\n }\n }\n if (runningTransition && Transition.sources.has(this)) return this.tValue;\n return this.value;\n}\nfunction writeSignal(node, value, isComp) {\n let current =\n Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value;\n if (!node.comparator || !node.comparator(current, value)) {\n if (Transition) {\n const TransitionRunning = Transition.running;\n if (TransitionRunning || (!isComp && Transition.sources.has(node))) {\n Transition.sources.add(node);\n node.tValue = value;\n }\n if (!TransitionRunning) node.value = value;\n } else node.value = value;\n if (node.observers && node.observers.length) {\n runUpdates(() => {\n for (let i = 0; i < node.observers.length; i += 1) {\n const o = node.observers[i];\n const TransitionRunning = Transition && Transition.running;\n if (TransitionRunning && Transition.disposed.has(o)) continue;\n if (TransitionRunning ? !o.tState : !o.state) {\n if (o.pure) Updates.push(o);\n else Effects.push(o);\n if (o.observers) markDownstream(o);\n }\n if (!TransitionRunning) o.state = STALE;\n else o.tState = STALE;\n }\n if (Updates.length > 10e5) {\n Updates = [];\n if (IS_DEV);\n throw new Error();\n }\n }, false);\n }\n }\n return value;\n}\nfunction updateComputation(node) {\n if (!node.fn) return;\n cleanNode(node);\n const time = ExecCount;\n runComputation(\n node,\n Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value,\n time\n );\n if (Transition && !Transition.running && Transition.sources.has(node)) {\n queueMicrotask(() => {\n runUpdates(() => {\n Transition && (Transition.running = true);\n Listener = Owner = node;\n runComputation(node, node.tValue, time);\n Listener = Owner = null;\n }, false);\n });\n }\n}\nfunction runComputation(node, value, time) {\n let nextValue;\n const owner = Owner,\n listener = Listener;\n Listener = Owner = node;\n try {\n nextValue = node.fn(value);\n } catch (err) {\n if (node.pure) {\n if (Transition && Transition.running) {\n node.tState = STALE;\n node.tOwned && node.tOwned.forEach(cleanNode);\n node.tOwned = undefined;\n } else {\n node.state = STALE;\n node.owned && node.owned.forEach(cleanNode);\n node.owned = null;\n }\n }\n node.updatedAt = time + 1;\n return handleError(err);\n } finally {\n Listener = listener;\n Owner = owner;\n }\n if (!node.updatedAt || node.updatedAt <= time) {\n if (node.updatedAt != null && \"observers\" in node) {\n writeSignal(node, nextValue, true);\n } else if (Transition && Transition.running && node.pure) {\n Transition.sources.add(node);\n node.tValue = nextValue;\n } else node.value = nextValue;\n node.updatedAt = time;\n }\n}\nfunction createComputation(fn, init, pure, state = STALE, options) {\n const c = {\n fn,\n state: state,\n updatedAt: null,\n owned: null,\n sources: null,\n sourceSlots: null,\n cleanups: null,\n value: init,\n owner: Owner,\n context: Owner ? Owner.context : null,\n pure\n };\n if (Transition && Transition.running) {\n c.state = 0;\n c.tState = state;\n }\n if (Owner === null);\n else if (Owner !== UNOWNED) {\n if (Transition && Transition.running && Owner.pure) {\n if (!Owner.tOwned) Owner.tOwned = [c];\n else Owner.tOwned.push(c);\n } else {\n if (!Owner.owned) Owner.owned = [c];\n else Owner.owned.push(c);\n }\n }\n if (ExternalSourceConfig && c.fn) {\n const [track, trigger] = createSignal(undefined, {\n equals: false\n });\n const ordinary = ExternalSourceConfig.factory(c.fn, trigger);\n onCleanup(() => ordinary.dispose());\n const triggerInTransition = () => startTransition(trigger).then(() => inTransition.dispose());\n const inTransition = ExternalSourceConfig.factory(c.fn, triggerInTransition);\n c.fn = x => {\n track();\n return Transition && Transition.running ? inTransition.track(x) : ordinary.track(x);\n };\n }\n return c;\n}\nfunction runTop(node) {\n const runningTransition = Transition && Transition.running;\n if ((runningTransition ? node.tState : node.state) === 0) return;\n if ((runningTransition ? node.tState : node.state) === PENDING) return lookUpstream(node);\n if (node.suspense && untrack(node.suspense.inFallback)) return node.suspense.effects.push(node);\n const ancestors = [node];\n while ((node = node.owner) && (!node.updatedAt || node.updatedAt < ExecCount)) {\n if (runningTransition && Transition.disposed.has(node)) return;\n if (runningTransition ? node.tState : node.state) ancestors.push(node);\n }\n for (let i = ancestors.length - 1; i >= 0; i--) {\n node = ancestors[i];\n if (runningTransition) {\n let top = node,\n prev = ancestors[i + 1];\n while ((top = top.owner) && top !== prev) {\n if (Transition.disposed.has(top)) return;\n }\n }\n if ((runningTransition ? node.tState : node.state) === STALE) {\n updateComputation(node);\n } else if ((runningTransition ? node.tState : node.state) === PENDING) {\n const updates = Updates;\n Updates = null;\n runUpdates(() => lookUpstream(node, ancestors[0]), false);\n Updates = updates;\n }\n }\n}\nfunction runUpdates(fn, init) {\n if (Updates) return fn();\n let wait = false;\n if (!init) Updates = [];\n if (Effects) wait = true;\n else Effects = [];\n ExecCount++;\n try {\n const res = fn();\n completeUpdates(wait);\n return res;\n } catch (err) {\n if (!wait) Effects = null;\n Updates = null;\n handleError(err);\n }\n}\nfunction completeUpdates(wait) {\n if (Updates) {\n if (Scheduler && Transition && Transition.running) scheduleQueue(Updates);\n else runQueue(Updates);\n Updates = null;\n }\n if (wait) return;\n let res;\n if (Transition) {\n if (!Transition.promises.size && !Transition.queue.size) {\n const sources = Transition.sources;\n const disposed = Transition.disposed;\n Effects.push.apply(Effects, Transition.effects);\n res = Transition.resolve;\n for (const e of Effects) {\n \"tState\" in e && (e.state = e.tState);\n delete e.tState;\n }\n Transition = null;\n runUpdates(() => {\n for (const d of disposed) cleanNode(d);\n for (const v of sources) {\n v.value = v.tValue;\n if (v.owned) {\n for (let i = 0, len = v.owned.length; i < len; i++) cleanNode(v.owned[i]);\n }\n if (v.tOwned) v.owned = v.tOwned;\n delete v.tValue;\n delete v.tOwned;\n v.tState = 0;\n }\n setTransPending(false);\n }, false);\n } else if (Transition.running) {\n Transition.running = false;\n Transition.effects.push.apply(Transition.effects, Effects);\n Effects = null;\n setTransPending(true);\n return;\n }\n }\n const e = Effects;\n Effects = null;\n if (e.length) runUpdates(() => runEffects(e), false);\n if (res) res();\n}\nfunction runQueue(queue) {\n for (let i = 0; i < queue.length; i++) runTop(queue[i]);\n}\nfunction scheduleQueue(queue) {\n for (let i = 0; i < queue.length; i++) {\n const item = queue[i];\n const tasks = Transition.queue;\n if (!tasks.has(item)) {\n tasks.add(item);\n Scheduler(() => {\n tasks.delete(item);\n runUpdates(() => {\n Transition.running = true;\n runTop(item);\n }, false);\n Transition && (Transition.running = false);\n });\n }\n }\n}\nfunction runUserEffects(queue) {\n let i,\n userLength = 0;\n for (i = 0; i < queue.length; i++) {\n const e = queue[i];\n if (!e.user) runTop(e);\n else queue[userLength++] = e;\n }\n if (sharedConfig.context) {\n if (sharedConfig.count) {\n sharedConfig.effects || (sharedConfig.effects = []);\n sharedConfig.effects.push(...queue.slice(0, userLength));\n return;\n }\n setHydrateContext();\n }\n if (sharedConfig.effects && (sharedConfig.done || !sharedConfig.count)) {\n queue = [...sharedConfig.effects, ...queue];\n userLength += sharedConfig.effects.length;\n delete sharedConfig.effects;\n }\n for (i = 0; i < userLength; i++) runTop(queue[i]);\n}\nfunction lookUpstream(node, ignore) {\n const runningTransition = Transition && Transition.running;\n if (runningTransition) node.tState = 0;\n else node.state = 0;\n for (let i = 0; i < node.sources.length; i += 1) {\n const source = node.sources[i];\n if (source.sources) {\n const state = runningTransition ? source.tState : source.state;\n if (state === STALE) {\n if (source !== ignore && (!source.updatedAt || source.updatedAt < ExecCount))\n runTop(source);\n } else if (state === PENDING) lookUpstream(source, ignore);\n }\n }\n}\nfunction markDownstream(node) {\n const runningTransition = Transition && Transition.running;\n for (let i = 0; i < node.observers.length; i += 1) {\n const o = node.observers[i];\n if (runningTransition ? !o.tState : !o.state) {\n if (runningTransition) o.tState = PENDING;\n else o.state = PENDING;\n if (o.pure) Updates.push(o);\n else Effects.push(o);\n o.observers && markDownstream(o);\n }\n }\n}\nfunction cleanNode(node) {\n let i;\n if (node.sources) {\n while (node.sources.length) {\n const source = node.sources.pop(),\n index = node.sourceSlots.pop(),\n obs = source.observers;\n if (obs && obs.length) {\n const n = obs.pop(),\n s = source.observerSlots.pop();\n if (index < obs.length) {\n n.sourceSlots[s] = index;\n obs[index] = n;\n source.observerSlots[index] = s;\n }\n }\n }\n }\n if (node.tOwned) {\n for (i = node.tOwned.length - 1; i >= 0; i--) cleanNode(node.tOwned[i]);\n delete node.tOwned;\n }\n if (Transition && Transition.running && node.pure) {\n reset(node, true);\n } else if (node.owned) {\n for (i = node.owned.length - 1; i >= 0; i--) cleanNode(node.owned[i]);\n node.owned = null;\n }\n if (node.cleanups) {\n for (i = node.cleanups.length - 1; i >= 0; i--) node.cleanups[i]();\n node.cleanups = null;\n }\n if (Transition && Transition.running) node.tState = 0;\n else node.state = 0;\n}\nfunction reset(node, top) {\n if (!top) {\n node.tState = 0;\n Transition.disposed.add(node);\n }\n if (node.owned) {\n for (let i = 0; i < node.owned.length; i++) reset(node.owned[i]);\n }\n}\nfunction castError(err) {\n if (err instanceof Error) return err;\n return new Error(typeof err === \"string\" ? err : \"Unknown error\", {\n cause: err\n });\n}\nfunction runErrors(err, fns, owner) {\n try {\n for (const f of fns) f(err);\n } catch (e) {\n handleError(e, (owner && owner.owner) || null);\n }\n}\nfunction handleError(err, owner = Owner) {\n const fns = ERROR && owner && owner.context && owner.context[ERROR];\n const error = castError(err);\n if (!fns) throw error;\n if (Effects)\n Effects.push({\n fn() {\n runErrors(error, fns, owner);\n },\n state: STALE\n });\n else runErrors(error, fns, owner);\n}\nfunction resolveChildren(children) {\n if (typeof children === \"function\" && !children.length) return resolveChildren(children());\n if (Array.isArray(children)) {\n const results = [];\n for (let i = 0; i < children.length; i++) {\n const result = resolveChildren(children[i]);\n Array.isArray(result) ? results.push.apply(results, result) : results.push(result);\n }\n return results;\n }\n return children;\n}\nfunction createProvider(id, options) {\n return function provider(props) {\n let res;\n createRenderEffect(\n () =>\n (res = untrack(() => {\n Owner.context = {\n ...Owner.context,\n [id]: props.value\n };\n return children(() => props.children);\n })),\n undefined\n );\n return res;\n };\n}\nfunction onError(fn) {\n ERROR || (ERROR = Symbol(\"error\"));\n if (Owner === null);\n else if (Owner.context === null || !Owner.context[ERROR]) {\n Owner.context = {\n ...Owner.context,\n [ERROR]: [fn]\n };\n mutateContext(Owner, ERROR, [fn]);\n } else Owner.context[ERROR].push(fn);\n}\nfunction mutateContext(o, key, value) {\n if (o.owned) {\n for (let i = 0; i < o.owned.length; i++) {\n if (o.owned[i].context === o.context) mutateContext(o.owned[i], key, value);\n if (!o.owned[i].context) {\n o.owned[i].context = o.context;\n mutateContext(o.owned[i], key, value);\n } else if (!o.owned[i].context[key]) {\n o.owned[i].context[key] = value;\n mutateContext(o.owned[i], key, value);\n }\n }\n }\n}\n\nfunction observable(input) {\n return {\n subscribe(observer) {\n if (!(observer instanceof Object) || observer == null) {\n throw new TypeError(\"Expected the observer to be an object.\");\n }\n const handler =\n typeof observer === \"function\" ? observer : observer.next && observer.next.bind(observer);\n if (!handler) {\n return {\n unsubscribe() {}\n };\n }\n const dispose = createRoot(disposer => {\n createEffect(() => {\n const v = input();\n untrack(() => handler(v));\n });\n return disposer;\n });\n if (getOwner()) onCleanup(dispose);\n return {\n unsubscribe() {\n dispose();\n }\n };\n },\n [Symbol.observable || \"@@observable\"]() {\n return this;\n }\n };\n}\nfunction from(producer, initalValue = undefined) {\n const [s, set] = createSignal(initalValue, {\n equals: false\n });\n if (\"subscribe\" in producer) {\n const unsub = producer.subscribe(v => set(() => v));\n onCleanup(() => (\"unsubscribe\" in unsub ? unsub.unsubscribe() : unsub()));\n } else {\n const clean = producer(set);\n onCleanup(clean);\n }\n return s;\n}\n\nconst FALLBACK = Symbol(\"fallback\");\nfunction dispose(d) {\n for (let i = 0; i < d.length; i++) d[i]();\n}\nfunction mapArray(list, mapFn, options = {}) {\n let items = [],\n mapped = [],\n disposers = [],\n len = 0,\n indexes = mapFn.length > 1 ? [] : null;\n onCleanup(() => dispose(disposers));\n return () => {\n let newItems = list() || [],\n newLen = newItems.length,\n i,\n j;\n newItems[$TRACK];\n return untrack(() => {\n let newIndices, newIndicesNext, temp, tempdisposers, tempIndexes, start, end, newEnd, item;\n if (newLen === 0) {\n if (len !== 0) {\n dispose(disposers);\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n indexes && (indexes = []);\n }\n if (options.fallback) {\n items = [FALLBACK];\n mapped[0] = createRoot(disposer => {\n disposers[0] = disposer;\n return options.fallback();\n });\n len = 1;\n }\n } else if (len === 0) {\n mapped = new Array(newLen);\n for (j = 0; j < newLen; j++) {\n items[j] = newItems[j];\n mapped[j] = createRoot(mapper);\n }\n len = newLen;\n } else {\n temp = new Array(newLen);\n tempdisposers = new Array(newLen);\n indexes && (tempIndexes = new Array(newLen));\n for (\n start = 0, end = Math.min(len, newLen);\n start < end && items[start] === newItems[start];\n start++\n );\n for (\n end = len - 1, newEnd = newLen - 1;\n end >= start && newEnd >= start && items[end] === newItems[newEnd];\n end--, newEnd--\n ) {\n temp[newEnd] = mapped[end];\n tempdisposers[newEnd] = disposers[end];\n indexes && (tempIndexes[newEnd] = indexes[end]);\n }\n newIndices = new Map();\n newIndicesNext = new Array(newEnd + 1);\n for (j = newEnd; j >= start; j--) {\n item = newItems[j];\n i = newIndices.get(item);\n newIndicesNext[j] = i === undefined ? -1 : i;\n newIndices.set(item, j);\n }\n for (i = start; i <= end; i++) {\n item = items[i];\n j = newIndices.get(item);\n if (j !== undefined && j !== -1) {\n temp[j] = mapped[i];\n tempdisposers[j] = disposers[i];\n indexes && (tempIndexes[j] = indexes[i]);\n j = newIndicesNext[j];\n newIndices.set(item, j);\n } else disposers[i]();\n }\n for (j = start; j < newLen; j++) {\n if (j in temp) {\n mapped[j] = temp[j];\n disposers[j] = tempdisposers[j];\n if (indexes) {\n indexes[j] = tempIndexes[j];\n indexes[j](j);\n }\n } else mapped[j] = createRoot(mapper);\n }\n mapped = mapped.slice(0, (len = newLen));\n items = newItems.slice(0);\n }\n return mapped;\n });\n function mapper(disposer) {\n disposers[j] = disposer;\n if (indexes) {\n const [s, set] = createSignal(j);\n indexes[j] = set;\n return mapFn(newItems[j], s);\n }\n return mapFn(newItems[j]);\n }\n };\n}\nfunction indexArray(list, mapFn, options = {}) {\n let items = [],\n mapped = [],\n disposers = [],\n signals = [],\n len = 0,\n i;\n onCleanup(() => dispose(disposers));\n return () => {\n const newItems = list() || [],\n newLen = newItems.length;\n newItems[$TRACK];\n return untrack(() => {\n if (newLen === 0) {\n if (len !== 0) {\n dispose(disposers);\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n signals = [];\n }\n if (options.fallback) {\n items = [FALLBACK];\n mapped[0] = createRoot(disposer => {\n disposers[0] = disposer;\n return options.fallback();\n });\n len = 1;\n }\n return mapped;\n }\n if (items[0] === FALLBACK) {\n disposers[0]();\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n }\n for (i = 0; i < newLen; i++) {\n if (i < items.length && items[i] !== newItems[i]) {\n signals[i](() => newItems[i]);\n } else if (i >= items.length) {\n mapped[i] = createRoot(mapper);\n }\n }\n for (; i < items.length; i++) {\n disposers[i]();\n }\n len = signals.length = disposers.length = newLen;\n items = newItems.slice(0);\n return (mapped = mapped.slice(0, len));\n });\n function mapper(disposer) {\n disposers[i] = disposer;\n const [s, set] = createSignal(newItems[i]);\n signals[i] = set;\n return mapFn(s, i);\n }\n };\n}\n\nlet hydrationEnabled = false;\nfunction enableHydration() {\n hydrationEnabled = true;\n}\nfunction createComponent(Comp, props) {\n if (hydrationEnabled) {\n if (sharedConfig.context) {\n const c = sharedConfig.context;\n setHydrateContext(nextHydrateContext());\n const r = untrack(() => Comp(props || {}));\n setHydrateContext(c);\n return r;\n }\n }\n return untrack(() => Comp(props || {}));\n}\nfunction trueFn() {\n return true;\n}\nconst propTraps = {\n get(_, property, receiver) {\n if (property === $PROXY) return receiver;\n return _.get(property);\n },\n has(_, property) {\n if (property === $PROXY) return true;\n return _.has(property);\n },\n set: trueFn,\n deleteProperty: trueFn,\n getOwnPropertyDescriptor(_, property) {\n return {\n configurable: true,\n enumerable: true,\n get() {\n return _.get(property);\n },\n set: trueFn,\n deleteProperty: trueFn\n };\n },\n ownKeys(_) {\n return _.keys();\n }\n};\nfunction resolveSource(s) {\n return !(s = typeof s === \"function\" ? s() : s) ? {} : s;\n}\nfunction resolveSources() {\n for (let i = 0, length = this.length; i < length; ++i) {\n const v = this[i]();\n if (v !== undefined) return v;\n }\n}\nfunction mergeProps(...sources) {\n let proxy = false;\n for (let i = 0; i < sources.length; i++) {\n const s = sources[i];\n proxy = proxy || (!!s && $PROXY in s);\n sources[i] = typeof s === \"function\" ? ((proxy = true), createMemo(s)) : s;\n }\n if (SUPPORTS_PROXY && proxy) {\n return new Proxy(\n {\n get(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n const v = resolveSource(sources[i])[property];\n if (v !== undefined) return v;\n }\n },\n has(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n if (property in resolveSource(sources[i])) return true;\n }\n return false;\n },\n keys() {\n const keys = [];\n for (let i = 0; i < sources.length; i++)\n keys.push(...Object.keys(resolveSource(sources[i])));\n return [...new Set(keys)];\n }\n },\n propTraps\n );\n }\n const sourcesMap = {};\n const defined = Object.create(null);\n for (let i = sources.length - 1; i >= 0; i--) {\n const source = sources[i];\n if (!source) continue;\n const sourceKeys = Object.getOwnPropertyNames(source);\n for (let i = sourceKeys.length - 1; i >= 0; i--) {\n const key = sourceKeys[i];\n if (key === \"__proto__\" || key === \"constructor\") continue;\n const desc = Object.getOwnPropertyDescriptor(source, key);\n if (!defined[key]) {\n defined[key] = desc.get\n ? {\n enumerable: true,\n configurable: true,\n get: resolveSources.bind((sourcesMap[key] = [desc.get.bind(source)]))\n }\n : desc.value !== undefined\n ? desc\n : undefined;\n } else {\n const sources = sourcesMap[key];\n if (sources) {\n if (desc.get) sources.push(desc.get.bind(source));\n else if (desc.value !== undefined) sources.push(() => desc.value);\n }\n }\n }\n }\n const target = {};\n const definedKeys = Object.keys(defined);\n for (let i = definedKeys.length - 1; i >= 0; i--) {\n const key = definedKeys[i],\n desc = defined[key];\n if (desc && desc.get) Object.defineProperty(target, key, desc);\n else target[key] = desc ? desc.value : undefined;\n }\n return target;\n}\nfunction splitProps(props, ...keys) {\n if (SUPPORTS_PROXY && $PROXY in props) {\n const blocked = new Set(keys.length > 1 ? keys.flat() : keys[0]);\n const res = keys.map(k => {\n return new Proxy(\n {\n get(property) {\n return k.includes(property) ? props[property] : undefined;\n },\n has(property) {\n return k.includes(property) && property in props;\n },\n keys() {\n return k.filter(property => property in props);\n }\n },\n propTraps\n );\n });\n res.push(\n new Proxy(\n {\n get(property) {\n return blocked.has(property) ? undefined : props[property];\n },\n has(property) {\n return blocked.has(property) ? false : property in props;\n },\n keys() {\n return Object.keys(props).filter(k => !blocked.has(k));\n }\n },\n propTraps\n )\n );\n return res;\n }\n const otherObject = {};\n const objects = keys.map(() => ({}));\n for (const propName of Object.getOwnPropertyNames(props)) {\n const desc = Object.getOwnPropertyDescriptor(props, propName);\n const isDefaultDesc =\n !desc.get && !desc.set && desc.enumerable && desc.writable && desc.configurable;\n let blocked = false;\n let objectIndex = 0;\n for (const k of keys) {\n if (k.includes(propName)) {\n blocked = true;\n isDefaultDesc\n ? (objects[objectIndex][propName] = desc.value)\n : Object.defineProperty(objects[objectIndex], propName, desc);\n }\n ++objectIndex;\n }\n if (!blocked) {\n isDefaultDesc\n ? (otherObject[propName] = desc.value)\n : Object.defineProperty(otherObject, propName, desc);\n }\n }\n return [...objects, otherObject];\n}\nfunction lazy(fn) {\n let comp;\n let p;\n const wrap = props => {\n const ctx = sharedConfig.context;\n if (ctx) {\n const [s, set] = createSignal();\n sharedConfig.count || (sharedConfig.count = 0);\n sharedConfig.count++;\n (p || (p = fn())).then(mod => {\n !sharedConfig.done && setHydrateContext(ctx);\n sharedConfig.count--;\n set(() => mod.default);\n setHydrateContext();\n });\n comp = s;\n } else if (!comp) {\n const [s] = createResource(() => (p || (p = fn())).then(mod => mod.default));\n comp = s;\n }\n let Comp;\n return createMemo(() =>\n (Comp = comp())\n ? untrack(() => {\n if (IS_DEV);\n if (!ctx || sharedConfig.done) return Comp(props);\n const c = sharedConfig.context;\n setHydrateContext(ctx);\n const r = Comp(props);\n setHydrateContext(c);\n return r;\n })\n : \"\"\n );\n };\n wrap.preload = () => p || ((p = fn()).then(mod => (comp = () => mod.default)), p);\n return wrap;\n}\nlet counter = 0;\nfunction createUniqueId() {\n const ctx = sharedConfig.context;\n return ctx ? sharedConfig.getNextContextId() : `cl-${counter++}`;\n}\n\nconst narrowedError = name => `Stale read from <${name}>.`;\nfunction For(props) {\n const fallback = \"fallback\" in props && {\n fallback: () => props.fallback\n };\n return createMemo(mapArray(() => props.each, props.children, fallback || undefined));\n}\nfunction Index(props) {\n const fallback = \"fallback\" in props && {\n fallback: () => props.fallback\n };\n return createMemo(indexArray(() => props.each, props.children, fallback || undefined));\n}\nfunction Show(props) {\n const keyed = props.keyed;\n const conditionValue = createMemo(() => props.when, undefined, undefined);\n const condition = keyed\n ? conditionValue\n : createMemo(conditionValue, undefined, {\n equals: (a, b) => !a === !b\n });\n return createMemo(\n () => {\n const c = condition();\n if (c) {\n const child = props.children;\n const fn = typeof child === \"function\" && child.length > 0;\n return fn\n ? untrack(() =>\n child(\n keyed\n ? c\n : () => {\n if (!untrack(condition)) throw narrowedError(\"Show\");\n return conditionValue();\n }\n )\n )\n : child;\n }\n return props.fallback;\n },\n undefined,\n undefined\n );\n}\nfunction Switch(props) {\n const chs = children(() => props.children);\n const switchFunc = createMemo(() => {\n const ch = chs();\n const mps = Array.isArray(ch) ? ch : [ch];\n let func = () => undefined;\n for (let i = 0; i < mps.length; i++) {\n const index = i;\n const mp = mps[i];\n const prevFunc = func;\n const conditionValue = createMemo(\n () => (prevFunc() ? undefined : mp.when),\n undefined,\n undefined\n );\n const condition = mp.keyed\n ? conditionValue\n : createMemo(conditionValue, undefined, {\n equals: (a, b) => !a === !b\n });\n func = () => prevFunc() || (condition() ? [index, conditionValue, mp] : undefined);\n }\n return func;\n });\n return createMemo(\n () => {\n const sel = switchFunc()();\n if (!sel) return props.fallback;\n const [index, conditionValue, mp] = sel;\n const child = mp.children;\n const fn = typeof child === \"function\" && child.length > 0;\n return fn\n ? untrack(() =>\n child(\n mp.keyed\n ? conditionValue()\n : () => {\n if (untrack(switchFunc)()?.[0] !== index) throw narrowedError(\"Match\");\n return conditionValue();\n }\n )\n )\n : child;\n },\n undefined,\n undefined\n );\n}\nfunction Match(props) {\n return props;\n}\nlet Errors;\nfunction resetErrorBoundaries() {\n Errors && [...Errors].forEach(fn => fn());\n}\nfunction ErrorBoundary(props) {\n let err;\n if (sharedConfig.context && sharedConfig.load)\n err = sharedConfig.load(sharedConfig.getContextId());\n const [errored, setErrored] = createSignal(err, undefined);\n Errors || (Errors = new Set());\n Errors.add(setErrored);\n onCleanup(() => Errors.delete(setErrored));\n return createMemo(\n () => {\n let e;\n if ((e = errored())) {\n const f = props.fallback;\n return typeof f === \"function\" && f.length ? untrack(() => f(e, () => setErrored())) : f;\n }\n return catchError(() => props.children, setErrored);\n },\n undefined,\n undefined\n );\n}\n\nconst suspenseListEquals = (a, b) =>\n a.showContent === b.showContent && a.showFallback === b.showFallback;\nconst SuspenseListContext = /* #__PURE__ */ createContext();\nfunction SuspenseList(props) {\n let [wrapper, setWrapper] = createSignal(() => ({\n inFallback: false\n })),\n show;\n const listContext = useContext(SuspenseListContext);\n const [registry, setRegistry] = createSignal([]);\n if (listContext) {\n show = listContext.register(createMemo(() => wrapper()().inFallback));\n }\n const resolved = createMemo(\n prev => {\n const reveal = props.revealOrder,\n tail = props.tail,\n { showContent = true, showFallback = true } = show ? show() : {},\n reg = registry(),\n reverse = reveal === \"backwards\";\n if (reveal === \"together\") {\n const all = reg.every(inFallback => !inFallback());\n const res = reg.map(() => ({\n showContent: all && showContent,\n showFallback\n }));\n res.inFallback = !all;\n return res;\n }\n let stop = false;\n let inFallback = prev.inFallback;\n const res = [];\n for (let i = 0, len = reg.length; i < len; i++) {\n const n = reverse ? len - i - 1 : i,\n s = reg[n]();\n if (!stop && !s) {\n res[n] = {\n showContent,\n showFallback\n };\n } else {\n const next = !stop;\n if (next) inFallback = true;\n res[n] = {\n showContent: next,\n showFallback: !tail || (next && tail === \"collapsed\") ? showFallback : false\n };\n stop = true;\n }\n }\n if (!stop) inFallback = false;\n res.inFallback = inFallback;\n return res;\n },\n {\n inFallback: false\n }\n );\n setWrapper(() => resolved);\n return createComponent(SuspenseListContext.Provider, {\n value: {\n register: inFallback => {\n let index;\n setRegistry(registry => {\n index = registry.length;\n return [...registry, inFallback];\n });\n return createMemo(() => resolved()[index], undefined, {\n equals: suspenseListEquals\n });\n }\n },\n get children() {\n return props.children;\n }\n });\n}\nfunction Suspense(props) {\n let counter = 0,\n show,\n ctx,\n p,\n flicker,\n error;\n const [inFallback, setFallback] = createSignal(false),\n SuspenseContext = getSuspenseContext(),\n store = {\n increment: () => {\n if (++counter === 1) setFallback(true);\n },\n decrement: () => {\n if (--counter === 0) setFallback(false);\n },\n inFallback,\n effects: [],\n resolved: false\n },\n owner = getOwner();\n if (sharedConfig.context && sharedConfig.load) {\n const key = sharedConfig.getContextId();\n let ref = sharedConfig.load(key);\n if (ref) {\n if (typeof ref !== \"object\" || ref.status !== \"success\") p = ref;\n else sharedConfig.gather(key);\n }\n if (p && p !== \"$$f\") {\n const [s, set] = createSignal(undefined, {\n equals: false\n });\n flicker = s;\n p.then(\n () => {\n if (sharedConfig.done) return set();\n sharedConfig.gather(key);\n setHydrateContext(ctx);\n set();\n setHydrateContext();\n },\n err => {\n error = err;\n set();\n }\n );\n }\n }\n const listContext = useContext(SuspenseListContext);\n if (listContext) show = listContext.register(store.inFallback);\n let dispose;\n onCleanup(() => dispose && dispose());\n return createComponent(SuspenseContext.Provider, {\n value: store,\n get children() {\n return createMemo(() => {\n if (error) throw error;\n ctx = sharedConfig.context;\n if (flicker) {\n flicker();\n return (flicker = undefined);\n }\n if (ctx && p === \"$$f\") setHydrateContext();\n const rendered = createMemo(() => props.children);\n return createMemo(prev => {\n const inFallback = store.inFallback(),\n { showContent = true, showFallback = true } = show ? show() : {};\n if ((!inFallback || (p && p !== \"$$f\")) && showContent) {\n store.resolved = true;\n dispose && dispose();\n dispose = ctx = p = undefined;\n resumeEffects(store.effects);\n return rendered();\n }\n if (!showFallback) return;\n if (dispose) return prev;\n return createRoot(disposer => {\n dispose = disposer;\n if (ctx) {\n setHydrateContext({\n id: ctx.id + \"F\",\n count: 0\n });\n ctx = undefined;\n }\n return props.fallback;\n }, owner);\n });\n });\n }\n });\n}\n\nconst DEV = undefined;\n\nexport {\n $DEVCOMP,\n $PROXY,\n $TRACK,\n DEV,\n ErrorBoundary,\n For,\n Index,\n Match,\n Show,\n Suspense,\n SuspenseList,\n Switch,\n batch,\n cancelCallback,\n catchError,\n children,\n createComponent,\n createComputed,\n createContext,\n createDeferred,\n createEffect,\n createMemo,\n createReaction,\n createRenderEffect,\n createResource,\n createRoot,\n createSelector,\n createSignal,\n createUniqueId,\n enableExternalSource,\n enableHydration,\n enableScheduling,\n equalFn,\n from,\n getListener,\n getOwner,\n indexArray,\n lazy,\n mapArray,\n mergeProps,\n observable,\n on,\n onCleanup,\n onError,\n onMount,\n requestCallback,\n resetErrorBoundaries,\n runWithOwner,\n sharedConfig,\n splitProps,\n startTransition,\n untrack,\n useContext,\n useTransition\n};\n","type GetValueStrategy = (element: HTMLInputElement) => any;\n\nconst getValueStrategies: Record<string, GetValueStrategy> = {\n text(element) {\n return element.value;\n },\n checkbox(element) {\n return element.checked;\n },\n};\n\nexport const executeGetValueStrategy: GetValueStrategy = (element) => {\n const strategy = getValueStrategies[element.type] || getValueStrategies.text;\n\n return strategy(element);\n};\n","type SetValueStrategy = (element: HTMLInputElement, value: any) => void;\n\nconst setValueStrategies: Record<string, SetValueStrategy> = {\n text(element, value) {\n element.value = value;\n },\n checkbox(element, value) {\n element.checked = value;\n },\n};\n\nexport const executeSetValueStrategy: SetValueStrategy = (element, value) => {\n const strategy = setValueStrategies[element.type] || setValueStrategies.text;\n\n return strategy(element, value);\n};\n","import { FieldError } from \"../types/errors\";\nimport { FormValues } from \"../types/form\";\nimport { Path } from \"../types/path\";\nimport { Rules, ValidationRule } from \"../types/validate\";\n\nconst getRuleValue = (rule: ValidationRule<any>) => {\n if (rule instanceof RegExp) {\n return rule;\n }\n\n if (typeof rule === \"string\" || typeof rule === \"number\") {\n return rule;\n }\n\n return rule.value;\n};\n\nconst getRuleMessage = (rule: ValidationRule<any>) => {\n if (typeof rule === \"string\") {\n return rule;\n }\n\n if (typeof rule.message === \"string\") {\n return rule.message;\n }\n\n return \"\";\n};\n\nexport const validate = <F extends FormValues>(\n values: F,\n name: Path<F>,\n rules: Rules<F, Path<F>> = {}\n): FieldError | undefined => {\n const value = values[name];\n\n if (rules.required && !value) {\n return { type: \"required\", message: getRuleMessage(rules.required) };\n }\n\n if (rules.min && Number(value) < Number(getRuleValue(rules.min))) {\n return { type: \"min\", message: getRuleMessage(rules.min) };\n }\n\n if (rules.max && Number(value) > Number(getRuleValue(rules.max))) {\n return { type: \"max\", message: getRuleMessage(rules.max) };\n }\n\n if (rules.minLength && value.length < getRuleValue(rules.minLength)) {\n return { type: \"minLength\", message: getRuleMessage(rules.minLength) };\n }\n\n if (rules.maxLength && value.length > getRuleValue(rules.maxLength)) {\n return { type: \"maxLength\", message: getRuleMessage(rules.maxLength) };\n }\n\n if (rules.pattern && !getRuleValue(rules.pattern).test(value)) {\n return { type: \"pattern\", message: getRuleMessage(rules.pattern) };\n }\n\n if (rules.validate) {\n const message = rules.validate(value, values);\n\n if (message === false) {\n return { type: \"validate\" };\n }\n\n if (typeof message === \"string\") {\n return { type: \"validate\", message };\n }\n }\n};\n","import { createSignal } from \"solid-js\";\nimport { FormValues } from \"./types/form\";\nimport { Path } from \"./types/path\";\nimport { FieldErrors } from \"./types/errors\";\nimport { ChangeEvent } from \"./types/event\";\nimport { executeGetValueStrategy } from \"./logic/get_value\";\nimport { executeSetValueStrategy } from \"./logic/set_value\";\nimport { Rules } from \"./types/validate\";\nimport { validate } from \"./logic/validate\";\n\ntype FormFields = Record<string, HTMLInputElement | null>;\n\ntype UseFormArg<T extends FormValues> = {\n defaultValues: T;\n mode?: \"onInput\" | \"onChange\" | \"onSubmit\";\n};\n\ntype SubmitCallback<T extends FormValues> = (values: T) => void;\n\nexport const useForm = <T extends FormValues>({\n defaultValues,\n mode = \"onInput\",\n}: UseFormArg<T>) => {\n const fields: FormFields = {};\n const rules: Record<string, Rules<T, Path<T>>> = {};\n\n const [values, setValues] = createSignal<T>(defaultValues);\n const [errors, setErrors] = createSignal<FieldErrors<T>>({});\n const [isValid, setIsValid] = createSignal<boolean>(true);\n\n const validateField = (name: Path<T>) => {\n // const field = fields[name];\n const rule = rules[name];\n\n // const value = field && executeGetValueStrategy(field);\n\n const error = validate(values(), name, rule);\n\n if (error) {\n setErrors((prev) => ({ ...prev, [name]: error }));\n } else {\n setErrors((prev) => {\n const errors = { ...prev };\n\n delete errors[name];\n return errors;\n });\n }\n\n setIsValid(!Object.keys(errors()).length);\n };\n\n const validateAllFields = () => {\n Object.keys(values()).forEach((key) => {\n validateField(key as Path<T>);\n });\n };\n\n const register = (name: Path<T>, options?: Rules<T, Path<T>>) => {\n if (options) {\n rules[name] = {\n required: options.required,\n min: options.min,\n max: options.max,\n minLength: options.minLength,\n maxLength: options.maxLength,\n pattern: options.pattern,\n validate: options.validate,\n };\n }\n\n return {\n name,\n // value: values()[name],\n onInput(event: InputEvent) {\n if (mode === \"onInput\") {\n const newValue = (event.target as HTMLInputElement).value;\n\n setValues((prev) => ({ ...prev, [name]: newValue }));\n validateField(name);\n }\n },\n onChange(event: ChangeEvent) {\n if (mode === \"onChange\" || mode === \"onInput\") {\n const value = executeGetValueStrategy(event.target);\n\n setValues((prev) => ({ ...prev, [name]: value }));\n validateField(name);\n }\n },\n ref: (ref: HTMLInputElement | null) => {\n const field = fields[name];\n\n if (field) {\n return;\n }\n\n fields[name] = ref;\n\n if (ref) {\n executeSetValueStrategy(ref, values()[name]);\n }\n },\n };\n };\n\n const getValues = (name?: Path<T>) => {\n if (name) {\n return values()[name];\n }\n\n return values();\n };\n\n const setValue = (name: Path<T>, value: any) => {\n setValues((prev) => ({ ...prev, [name]: value }));\n\n const field = fields[name];\n\n if (field) {\n executeSetValueStrategy(field, value);\n }\n };\n\n const onSubmit = (submit: SubmitCallback<T>) => {\n return (event: SubmitEvent) => {\n event.preventDefault();\n validateAllFields();\n\n if (isValid()) {\n submit(getValues());\n }\n };\n };\n\n const reset = (newDefaultValues?: Partial<T>) => {\n setValues(() => ({\n ...defaultValues,\n ...newDefaultValues,\n }));\n setErrors({});\n setIsValid(true);\n };\n\n return {\n values,\n errors,\n isValid,\n register,\n getValues,\n setValue,\n onSubmit,\n reset,\n };\n};\n"],"names":["equalFn","a","b","signalOptions","runEffects","runQueue","STALE","PENDING","Owner","Transition","ExternalSourceConfig","Listener","Updates","Effects","ExecCount","createSignal","value","options","setter","writeSignal","readSignal","untrack","fn","listener","updateComputation","updates","runUpdates","lookUpstream","sSlot","node","isComp","current","i","o","TransitionRunning","markDownstream","cleanNode","time","runComputation","nextValue","owner","err","handleError","runTop","ancestors","init","wait","res","completeUpdates","queue","ignore","source","state","index","obs","n","s","castError","getValueStrategies","element","executeGetValueStrategy","setValueStrategies","executeSetValueStrategy","getRuleValue","rule","getRuleMessage","validate","values","name","rules","message","useForm","defaultValues","mode","fields","setValues","errors","setErrors","isValid","setIsValid","validateField","error","prev","validateAllFields","key","register","event","newValue","ref","getValues","field","submit","newDefaultValues"],"mappings":"AAmJA,MAAMA,IAAU,CAACC,GAAGC,MAAMD,MAAMC,GAK1BC,IAAgB;AAAA,EACpB,QAAQH;AACV;AAEA,IAAII,IAAaC;AACjB,MAAMC,IAAQ,GACRC,IAAU;AAQhB,IAAIC,IAAQ;AACZ,IAAIC,IAAa,MAEbC,IAAuB,MACvBC,IAAW,MACXC,IAAU,MACVC,IAAU,MACVC,IAAY;AAwBhB,SAASC,EAAaC,GAAOC,GAAS;AACpC,EAAAA,IAAUA,IAAU,OAAO,OAAO,CAAA,GAAId,GAAec,CAAO,IAAId;AAChE,QAAM,IAAI;AAAA,IACR,OAAAa;AAAA,IACA,WAAW;AAAA,IACX,eAAe;AAAA,IACf,YAAYC,EAAQ,UAAU;AAAA,EAC/B,GACKC,IAAS,CAAAF,OACT,OAAOA,KAAU,eAEdA,IAAQA,EAAM,EAAE,KAAK,IAErBG,EAAY,GAAGH,CAAK;AAE7B,SAAO,CAACI,EAAW,KAAK,CAAC,GAAGF,CAAM;AACpC;AAoRA,SAASG,EAAQC,GAAI;AACnB,MAA6BX,MAAa,KAAM,QAAOW,EAAI;AAC3D,QAAMC,IAAWZ;AACjB,EAAAA,IAAW;AACX,MAAI;AAEF,WAAOW,EAAI;AAAA,EACf,UAAY;AACR,IAAAX,IAAWY;AAAA,EACf;AACA;AA6JA,SAASH,IAAa;AAEpB,MAAI,KAAK,WAA8C,KAAK;AAC1D,QAAuC,KAAK,UAAWd,EAAO,CAAAkB,EAAkB,IAAI;AAAA,SAC/E;AACH,YAAMC,IAAUb;AAChB,MAAAA,IAAU,MACVc,EAAW,MAAMC,EAAa,IAAI,CAAQ,GAC1Cf,IAAUa;AAAA,IAChB;AAEE,MAAId,GAAU;AACZ,UAAMiB,IAAQ,KAAK,YAAY,KAAK,UAAU,SAAS;AACvD,IAAKjB,EAAS,WAIZA,EAAS,QAAQ,KAAK,IAAI,GAC1BA,EAAS,YAAY,KAAKiB,CAAK,MAJ/BjB,EAAS,UAAU,CAAC,IAAI,GACxBA,EAAS,cAAc,CAACiB,CAAK,IAK1B,KAAK,aAIR,KAAK,UAAU,KAAKjB,CAAQ,GAC5B,KAAK,cAAc,KAAKA,EAAS,QAAQ,SAAS,CAAC,MAJnD,KAAK,YAAY,CAACA,CAAQ,GAC1B,KAAK,gBAAgB,CAACA,EAAS,QAAQ,SAAS,CAAC;AAAA,EAKvD;AAEE,SAAO,KAAK;AACd;AACA,SAASQ,EAAYU,GAAMb,GAAOc,GAAQ;AACxC,MAAIC,IAC+EF,EAAK;AACxF,UAAI,CAACA,EAAK,cAAc,CAACA,EAAK,WAAWE,GAASf,CAAK,OAQ9Ca,EAAK,QAAQb,GAChBa,EAAK,aAAaA,EAAK,UAAU,UACnCH,EAAW,MAAM;AACf,aAASM,IAAI,GAAGA,IAAIH,EAAK,UAAU,QAAQG,KAAK,GAAG;AACjD,YAAMC,IAAIJ,EAAK,UAAUG,CAAC,GACpBE,IAAoBzB,KAAcA,EAAW;AACnD,MAAIyB,KAAqBzB,EAAW,SAAS,IAAIwB,CAAC,IAC9CC,IAAoB,CAACD,EAAE,SAAS,CAACA,EAAE,WACjCA,EAAE,OAAMrB,EAAQ,KAAKqB,CAAC,IACrBpB,EAAQ,KAAKoB,CAAC,GACfA,EAAE,aAAWE,EAAeF,CAAC,IAE9BC,MAAmBD,EAAE,QAAQ3B;AAAA,IAE5C;AACQ,QAAIM,EAAQ,SAAS;AACnB,YAAAA,IAAU,CAAE,GAEN,IAAI,MAAO;AAAA,EAE3B,CAAc,IAGLI;AACT;AACA,SAASQ,EAAkBK,GAAM;AAC/B,MAAI,CAACA,EAAK,GAAI;AACd,EAAAO,EAAUP,CAAI;AACd,QAAMQ,IAAOvB;AACb,EAAAwB;AAAA,IACET;AAAA,IACiFA,EAAK;AAAA,IACtFQ;AAAA,EACD;AAWH;AACA,SAASC,EAAeT,GAAMb,GAAOqB,GAAM;AACzC,MAAIE;AACJ,QAAMC,IAAQhC,GACZe,IAAWZ;AACb,EAAAA,IAAWH,IAAQqB;AACnB,MAAI;AACF,IAAAU,IAAYV,EAAK,GAAGb,CAAK;AAAA,EAC1B,SAAQyB,GAAK;AACZ,WAAIZ,EAAK,SAMLA,EAAK,QAAQvB,GACbuB,EAAK,SAASA,EAAK,MAAM,QAAQO,CAAS,GAC1CP,EAAK,QAAQ,OAGjBA,EAAK,YAAYQ,IAAO,GACjBK,EAAYD,CAAG;AAAA,EAC1B,UAAY;AACR,IAAA9B,IAAWY,GACXf,IAAQgC;AAAA,EACZ;AACE,GAAI,CAACX,EAAK,aAAaA,EAAK,aAAaQ,OACnCR,EAAK,aAAa,QAAQ,eAAeA,IAC3CV,EAAYU,GAAMU,CAAe,IAI5BV,EAAK,QAAQU,GACpBV,EAAK,YAAYQ;AAErB;AA4CA,SAASM,EAAOd,GAAM;AAEpB,MAAuCA,EAAK,UAAW,EAAG;AAC1D,MAAuCA,EAAK,UAAWtB,EAAS,QAAOoB,EAAaE,CAAI;AACxF,MAAIA,EAAK,YAAYR,EAAQQ,EAAK,SAAS,UAAU,EAAG,QAAOA,EAAK,SAAS,QAAQ,KAAKA,CAAI;AAC9F,QAAMe,IAAY,CAACf,CAAI;AACvB,UAAQA,IAAOA,EAAK,WAAW,CAACA,EAAK,aAAaA,EAAK,YAAYf;AAEjE,IAAsCe,EAAK,SAAOe,EAAU,KAAKf,CAAI;AAEvE,WAASG,IAAIY,EAAU,SAAS,GAAGZ,KAAK,GAAGA;AASzC,QARAH,IAAOe,EAAUZ,CAAC,GAQqBH,EAAK,UAAWvB;AACrD,MAAAkB,EAAkBK,CAAI;AAAA,aACsBA,EAAK,UAAWtB,GAAS;AACrE,YAAMkB,IAAUb;AAChB,MAAAA,IAAU,MACVc,EAAW,MAAMC,EAAaE,GAAMe,EAAU,CAAC,CAAC,CAAQ,GACxDhC,IAAUa;AAAA,IAChB;AAEA;AACA,SAASC,EAAWJ,GAAIuB,GAAM;AAC5B,MAAIjC,EAAS,QAAOU,EAAI;AACxB,MAAIwB,IAAO;AACA,EAAAlC,IAAU,CAAE,GACnBC,IAASiC,IAAO,KACfjC,IAAU,CAAE,GACjBC;AACA,MAAI;AACF,UAAMiC,IAAMzB,EAAI;AAChB,WAAA0B,EAAgBF,CAAI,GACbC;AAAA,EACR,SAAQN,GAAK;AACZ,IAAKK,MAAMjC,IAAU,OACrBD,IAAU,MACV8B,EAAYD,CAAG;AAAA,EACnB;AACA;AACA,SAASO,EAAgBF,GAAM;AAM7B,MALIlC,MAEGP,EAASO,CAAO,GACrBA,IAAU,OAERkC,EAAM;AAmCV,QAAM,IAAIjC;AACV,EAAAA,IAAU,MACN,EAAE,UAAQa,EAAW,MAAMtB,EAAW,CAAC,CAAQ;AAErD;AACA,SAASC,EAAS4C,GAAO;AACvB,WAASjB,IAAI,GAAGA,IAAIiB,EAAM,QAAQjB,IAAK,CAAAW,EAAOM,EAAMjB,CAAC,CAAC;AACxD;AAyCA,SAASL,EAAaE,GAAMqB,GAAQ;AAG7B,EAAArB,EAAK,QAAQ;AAClB,WAASG,IAAI,GAAGA,IAAIH,EAAK,QAAQ,QAAQG,KAAK,GAAG;AAC/C,UAAMmB,IAAStB,EAAK,QAAQG,CAAC;AAC7B,QAAImB,EAAO,SAAS;AAClB,YAAMC,IAA4CD,EAAO;AACzD,MAAIC,MAAU9C,IACR6C,MAAWD,MAAW,CAACC,EAAO,aAAaA,EAAO,YAAYrC,MAChE6B,EAAOQ,CAAM,IACNC,MAAU7C,KAASoB,EAAawB,GAAQD,CAAM;AAAA,IAC/D;AAAA,EACA;AACA;AACA,SAASf,EAAeN,GAAM;AAE5B,WAASG,IAAI,GAAGA,IAAIH,EAAK,UAAU,QAAQG,KAAK,GAAG;AACjD,UAAMC,IAAIJ,EAAK,UAAUG,CAAC;AAC1B,IAAqCC,EAAE,UAEhCA,EAAE,QAAQ1B,GACX0B,EAAE,OAAMrB,EAAQ,KAAKqB,CAAC,IACrBpB,EAAQ,KAAKoB,CAAC,GACnBA,EAAE,aAAaE,EAAeF,CAAC;AAAA,EAErC;AACA;AACA,SAASG,EAAUP,GAAM;AACvB,MAAIG;AACJ,MAAIH,EAAK;AACP,WAAOA,EAAK,QAAQ,UAAQ;AAC1B,YAAMsB,IAAStB,EAAK,QAAQ,IAAK,GAC/BwB,IAAQxB,EAAK,YAAY,IAAK,GAC9ByB,IAAMH,EAAO;AACf,UAAIG,KAAOA,EAAI,QAAQ;AACrB,cAAMC,IAAID,EAAI,IAAK,GACjBE,IAAIL,EAAO,cAAc,IAAK;AAChC,QAAIE,IAAQC,EAAI,WACdC,EAAE,YAAYC,CAAC,IAAIH,GACnBC,EAAID,CAAK,IAAIE,GACbJ,EAAO,cAAcE,CAAK,IAAIG;AAAA,MAExC;AAAA,IACA;AAEE,MAAI3B,EAAK,QAAQ;AACf,SAAKG,IAAIH,EAAK,OAAO,SAAS,GAAGG,KAAK,GAAGA,IAAK,CAAAI,EAAUP,EAAK,OAAOG,CAAC,CAAC;AACtE,WAAOH,EAAK;AAAA,EAChB;AAGS,MAAIA,EAAK,OAAO;AACrB,SAAKG,IAAIH,EAAK,MAAM,SAAS,GAAGG,KAAK,GAAGA,IAAK,CAAAI,EAAUP,EAAK,MAAMG,CAAC,CAAC;AACpE,IAAAH,EAAK,QAAQ;AAAA,EACjB;AACE,MAAIA,EAAK,UAAU;AACjB,SAAKG,IAAIH,EAAK,SAAS,SAAS,GAAGG,KAAK,GAAGA,IAAK,CAAAH,EAAK,SAASG,CAAC,EAAG;AAClE,IAAAH,EAAK,WAAW;AAAA,EACpB;AAEO,EAAAA,EAAK,QAAQ;AACpB;AAUA,SAAS4B,EAAUhB,GAAK;AACtB,SAAIA,aAAe,QAAcA,IAC1B,IAAI,MAAM,OAAOA,KAAQ,WAAWA,IAAM,iBAAiB;AAAA,IAChE,OAAOA;AAAA,EACX,CAAG;AACH;AAQA,SAASC,EAAYD,GAAKD,IAAQhC,GAAO;AAG7B,QADIiD,EAAUhB,CAAG;AAU7B;AC3hCA,MAAMiB,IAAuD;AAAA,EAC3D,KAAKC,GAAS;AACZ,WAAOA,EAAQ;AAAA,EACjB;AAAA,EACA,SAASA,GAAS;AAChB,WAAOA,EAAQ;AAAA,EAAA;AAEnB,GAEaC,IAA4C,CAACD,OACvCD,EAAmBC,EAAQ,IAAI,KAAKD,EAAmB,MAExDC,CAAO,GCZnBE,IAAuD;AAAA,EAC3D,KAAKF,GAAS3C,GAAO;AACnB,IAAA2C,EAAQ,QAAQ3C;AAAA,EAClB;AAAA,EACA,SAAS2C,GAAS3C,GAAO;AACvB,IAAA2C,EAAQ,UAAU3C;AAAA,EAAA;AAEtB,GAEa8C,IAA4C,CAACH,GAAS3C,OAChD6C,EAAmBF,EAAQ,IAAI,KAAKE,EAAmB,MAExDF,GAAS3C,CAAK,GCT1B+C,IAAe,CAACC,MAChBA,aAAgB,UAIhB,OAAOA,KAAS,YAAY,OAAOA,KAAS,WACvCA,IAGFA,EAAK,OAGRC,IAAiB,CAACD,MAClB,OAAOA,KAAS,WACXA,IAGL,OAAOA,EAAK,WAAY,WACnBA,EAAK,UAGP,IAGIE,IAAW,CACtBC,GACAC,GACAC,IAA2B,CAAA,MACA;AACrB,QAAArD,IAAQmD,EAAOC,CAAI;AAErB,MAAAC,EAAM,YAAY,CAACrD;AACrB,WAAO,EAAE,MAAM,YAAY,SAASiD,EAAeI,EAAM,QAAQ,EAAE;AAGjE,MAAAA,EAAM,OAAO,OAAOrD,CAAK,IAAI,OAAO+C,EAAaM,EAAM,GAAG,CAAC;AAC7D,WAAO,EAAE,MAAM,OAAO,SAASJ,EAAeI,EAAM,GAAG,EAAE;AAGvD,MAAAA,EAAM,OAAO,OAAOrD,CAAK,IAAI,OAAO+C,EAAaM,EAAM,GAAG,CAAC;AAC7D,WAAO,EAAE,MAAM,OAAO,SAASJ,EAAeI,EAAM,GAAG,EAAE;AAG3D,MAAIA,EAAM,aAAarD,EAAM,SAAS+C,EAAaM,EAAM,SAAS;AAChE,WAAO,EAAE,MAAM,aAAa,SAASJ,EAAeI,EAAM,SAAS,EAAE;AAGvE,MAAIA,EAAM,aAAarD,EAAM,SAAS+C,EAAaM,EAAM,SAAS;AAChE,WAAO,EAAE,MAAM,aAAa,SAASJ,EAAeI,EAAM,SAAS,EAAE;AAGnE,MAAAA,EAAM,WAAW,CAACN,EAAaM,EAAM,OAAO,EAAE,KAAKrD,CAAK;AAC1D,WAAO,EAAE,MAAM,WAAW,SAASiD,EAAeI,EAAM,OAAO,EAAE;AAGnE,MAAIA,EAAM,UAAU;AAClB,UAAMC,IAAUD,EAAM,SAASrD,GAAOmD,CAAM;AAE5C,QAAIG,MAAY;AACP,aAAA,EAAE,MAAM,WAAW;AAGxB,QAAA,OAAOA,KAAY;AACd,aAAA,EAAE,MAAM,YAAY,SAAAA,EAAQ;AAAA,EACrC;AAEJ,GCpDaC,KAAU,CAAuB;AAAA,EAC5C,eAAAC;AAAA,EACA,MAAAC,IAAO;AACT,MAAqB;AACnB,QAAMC,IAAqB,CAAC,GACtBL,IAA2C,CAAC,GAE5C,CAACF,GAAQQ,CAAS,IAAI5D,EAAgByD,CAAa,GACnD,CAACI,GAAQC,CAAS,IAAI9D,EAA6B,CAAA,CAAE,GACrD,CAAC+D,GAASC,CAAU,IAAIhE,EAAsB,EAAI,GAElDiE,IAAgB,CAACZ,MAAkB;AAEjC,UAAAJ,IAAOK,EAAMD,CAAI,GAIjBa,IAAQf,EAASC,EAAO,GAAGC,GAAMJ,CAAI;AAE3C,IACYa,EADRI,IACQ,CAACC,OAAU,EAAE,GAAGA,GAAM,CAACd,CAAI,GAAGa,EAAA,KAE9B,CAACC,MAAS;AACZN,YAAAA,IAAS,EAAE,GAAGM,EAAK;AAEzB,oBAAON,EAAOR,CAAI,GACXQ;AAAAA,IAAA,CANuC,GAUlDG,EAAW,CAAC,OAAO,KAAKH,EAAQ,CAAA,EAAE,MAAM;AAAA,EAC1C,GAEMO,IAAoB,MAAM;AAC9B,WAAO,KAAKhB,EAAO,CAAC,EAAE,QAAQ,CAACiB,MAAQ;AACrC,MAAAJ,EAAcI,CAAc;AAAA,IAAA,CAC7B;AAAA,EACH,GAEMC,IAAW,CAACjB,GAAenD,OAC3BA,MACFoD,EAAMD,CAAI,IAAI;AAAA,IACZ,UAAUnD,EAAQ;AAAA,IAClB,KAAKA,EAAQ;AAAA,IACb,KAAKA,EAAQ;AAAA,IACb,WAAWA,EAAQ;AAAA,IACnB,WAAWA,EAAQ;AAAA,IACnB,SAASA,EAAQ;AAAA,IACjB,UAAUA,EAAQ;AAAA,EACpB,IAGK;AAAA,IACL,MAAAmD;AAAA;AAAA,IAEA,QAAQkB,GAAmB;AACzB,UAAIb,MAAS,WAAW;AAChB,cAAAc,IAAYD,EAAM,OAA4B;AAE1C,QAAAX,EAAA,CAACO,OAAU,EAAE,GAAGA,GAAM,CAACd,CAAI,GAAGmB,EAAA,EAAW,GACnDP,EAAcZ,CAAI;AAAA,MAAA;AAAA,IAEtB;AAAA,IACA,SAASkB,GAAoB;AACvB,UAAAb,MAAS,cAAcA,MAAS,WAAW;AACvC,cAAAzD,IAAQ4C,EAAwB0B,EAAM,MAAM;AAExC,QAAAX,EAAA,CAACO,OAAU,EAAE,GAAGA,GAAM,CAACd,CAAI,GAAGpD,EAAA,EAAQ,GAChDgE,EAAcZ,CAAI;AAAA,MAAA;AAAA,IAEtB;AAAA,IACA,KAAK,CAACoB,MAAiC;AAGrC,MAFcd,EAAON,CAAI,MAMzBM,EAAON,CAAI,IAAIoB,GAEXA,KACF1B,EAAwB0B,GAAKrB,EAAS,EAAAC,CAAI,CAAC;AAAA,IAC7C;AAAA,EAEJ,IAGIqB,IAAY,CAACrB,MACbA,IACKD,IAASC,CAAI,IAGfD,EAAO;AAiCT,SAAA;AAAA,IACL,QAAAA;AAAA,IACA,QAAAS;AAAA,IACA,SAAAE;AAAA,IACA,UAAAO;AAAA,IACA,WAAAI;AAAA,IACA,UApCe,CAACrB,GAAepD,MAAe;AACpC,MAAA2D,EAAA,CAACO,OAAU,EAAE,GAAGA,GAAM,CAACd,CAAI,GAAGpD,EAAA,EAAQ;AAE1C,YAAA0E,IAAQhB,EAAON,CAAI;AAEzB,MAAIsB,KACF5B,EAAwB4B,GAAO1E,CAAK;AAAA,IAExC;AAAA,IA6BE,UA3Be,CAAC2E,MACT,CAACL,MAAuB;AAC7B,MAAAA,EAAM,eAAe,GACHH,EAAA,GAEdL,OACFa,EAAOF,GAAW;AAAA,IAEtB;AAAA,IAoBA,OAjBY,CAACG,MAAkC;AAC/C,MAAAjB,EAAU,OAAO;AAAA,QACf,GAAGH;AAAA,QACH,GAAGoB;AAAA,MAAA,EACH,GACFf,EAAU,CAAA,CAAE,GACZE,EAAW,EAAI;AAAA,IACjB;AAAA,EAWA;AACF;","x_google_ignoreList":[0]}
|
package/dist/main.umd.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"main.umd.cjs","sources":["../node_modules/solid-js/dist/solid.js","../src/logic/get_value.ts","../src/logic/set_value.ts","../src/logic/validate.ts","../src/use_form.ts"],"sourcesContent":["let taskIdCounter = 1,\n isCallbackScheduled = false,\n isPerformingWork = false,\n taskQueue = [],\n currentTask = null,\n shouldYieldToHost = null,\n yieldInterval = 5,\n deadline = 0,\n maxYieldInterval = 300,\n scheduleCallback = null,\n scheduledCallback = null;\nconst maxSigned31BitInt = 1073741823;\nfunction setupScheduler() {\n const channel = new MessageChannel(),\n port = channel.port2;\n scheduleCallback = () => port.postMessage(null);\n channel.port1.onmessage = () => {\n if (scheduledCallback !== null) {\n const currentTime = performance.now();\n deadline = currentTime + yieldInterval;\n const hasTimeRemaining = true;\n try {\n const hasMoreWork = scheduledCallback(hasTimeRemaining, currentTime);\n if (!hasMoreWork) {\n scheduledCallback = null;\n } else port.postMessage(null);\n } catch (error) {\n port.postMessage(null);\n throw error;\n }\n }\n };\n if (navigator && navigator.scheduling && navigator.scheduling.isInputPending) {\n const scheduling = navigator.scheduling;\n shouldYieldToHost = () => {\n const currentTime = performance.now();\n if (currentTime >= deadline) {\n if (scheduling.isInputPending()) {\n return true;\n }\n return currentTime >= maxYieldInterval;\n } else {\n return false;\n }\n };\n } else {\n shouldYieldToHost = () => performance.now() >= deadline;\n }\n}\nfunction enqueue(taskQueue, task) {\n function findIndex() {\n let m = 0;\n let n = taskQueue.length - 1;\n while (m <= n) {\n const k = (n + m) >> 1;\n const cmp = task.expirationTime - taskQueue[k].expirationTime;\n if (cmp > 0) m = k + 1;\n else if (cmp < 0) n = k - 1;\n else return k;\n }\n return m;\n }\n taskQueue.splice(findIndex(), 0, task);\n}\nfunction requestCallback(fn, options) {\n if (!scheduleCallback) setupScheduler();\n let startTime = performance.now(),\n timeout = maxSigned31BitInt;\n if (options && options.timeout) timeout = options.timeout;\n const newTask = {\n id: taskIdCounter++,\n fn,\n startTime,\n expirationTime: startTime + timeout\n };\n enqueue(taskQueue, newTask);\n if (!isCallbackScheduled && !isPerformingWork) {\n isCallbackScheduled = true;\n scheduledCallback = flushWork;\n scheduleCallback();\n }\n return newTask;\n}\nfunction cancelCallback(task) {\n task.fn = null;\n}\nfunction flushWork(hasTimeRemaining, initialTime) {\n isCallbackScheduled = false;\n isPerformingWork = true;\n try {\n return workLoop(hasTimeRemaining, initialTime);\n } finally {\n currentTask = null;\n isPerformingWork = false;\n }\n}\nfunction workLoop(hasTimeRemaining, initialTime) {\n let currentTime = initialTime;\n currentTask = taskQueue[0] || null;\n while (currentTask !== null) {\n if (currentTask.expirationTime > currentTime && (!hasTimeRemaining || shouldYieldToHost())) {\n break;\n }\n const callback = currentTask.fn;\n if (callback !== null) {\n currentTask.fn = null;\n const didUserCallbackTimeout = currentTask.expirationTime <= currentTime;\n callback(didUserCallbackTimeout);\n currentTime = performance.now();\n if (currentTask === taskQueue[0]) {\n taskQueue.shift();\n }\n } else taskQueue.shift();\n currentTask = taskQueue[0] || null;\n }\n return currentTask !== null;\n}\n\nconst sharedConfig = {\n context: undefined,\n registry: undefined,\n effects: undefined,\n done: false,\n getContextId() {\n return getContextId(this.context.count);\n },\n getNextContextId() {\n return getContextId(this.context.count++);\n }\n};\nfunction getContextId(count) {\n const num = String(count),\n len = num.length - 1;\n return sharedConfig.context.id + (len ? String.fromCharCode(96 + len) : \"\") + num;\n}\nfunction setHydrateContext(context) {\n sharedConfig.context = context;\n}\nfunction nextHydrateContext() {\n return {\n ...sharedConfig.context,\n id: sharedConfig.getNextContextId(),\n count: 0\n };\n}\n\nconst IS_DEV = false;\nconst equalFn = (a, b) => a === b;\nconst $PROXY = Symbol(\"solid-proxy\");\nconst SUPPORTS_PROXY = typeof Proxy === \"function\";\nconst $TRACK = Symbol(\"solid-track\");\nconst $DEVCOMP = Symbol(\"solid-dev-component\");\nconst signalOptions = {\n equals: equalFn\n};\nlet ERROR = null;\nlet runEffects = runQueue;\nconst STALE = 1;\nconst PENDING = 2;\nconst UNOWNED = {\n owned: null,\n cleanups: null,\n context: null,\n owner: null\n};\nconst NO_INIT = {};\nvar Owner = null;\nlet Transition = null;\nlet Scheduler = null;\nlet ExternalSourceConfig = null;\nlet Listener = null;\nlet Updates = null;\nlet Effects = null;\nlet ExecCount = 0;\nfunction createRoot(fn, detachedOwner) {\n const listener = Listener,\n owner = Owner,\n unowned = fn.length === 0,\n current = detachedOwner === undefined ? owner : detachedOwner,\n root = unowned\n ? UNOWNED\n : {\n owned: null,\n cleanups: null,\n context: current ? current.context : null,\n owner: current\n },\n updateFn = unowned ? fn : () => fn(() => untrack(() => cleanNode(root)));\n Owner = root;\n Listener = null;\n try {\n return runUpdates(updateFn, true);\n } finally {\n Listener = listener;\n Owner = owner;\n }\n}\nfunction createSignal(value, options) {\n options = options ? Object.assign({}, signalOptions, options) : signalOptions;\n const s = {\n value,\n observers: null,\n observerSlots: null,\n comparator: options.equals || undefined\n };\n const setter = value => {\n if (typeof value === \"function\") {\n if (Transition && Transition.running && Transition.sources.has(s)) value = value(s.tValue);\n else value = value(s.value);\n }\n return writeSignal(s, value);\n };\n return [readSignal.bind(s), setter];\n}\nfunction createComputed(fn, value, options) {\n const c = createComputation(fn, value, true, STALE);\n if (Scheduler && Transition && Transition.running) Updates.push(c);\n else updateComputation(c);\n}\nfunction createRenderEffect(fn, value, options) {\n const c = createComputation(fn, value, false, STALE);\n if (Scheduler && Transition && Transition.running) Updates.push(c);\n else updateComputation(c);\n}\nfunction createEffect(fn, value, options) {\n runEffects = runUserEffects;\n const c = createComputation(fn, value, false, STALE),\n s = SuspenseContext && useContext(SuspenseContext);\n if (s) c.suspense = s;\n if (!options || !options.render) c.user = true;\n Effects ? Effects.push(c) : updateComputation(c);\n}\nfunction createReaction(onInvalidate, options) {\n let fn;\n const c = createComputation(\n () => {\n fn ? fn() : untrack(onInvalidate);\n fn = undefined;\n },\n undefined,\n false,\n 0\n ),\n s = SuspenseContext && useContext(SuspenseContext);\n if (s) c.suspense = s;\n c.user = true;\n return tracking => {\n fn = tracking;\n updateComputation(c);\n };\n}\nfunction createMemo(fn, value, options) {\n options = options ? Object.assign({}, signalOptions, options) : signalOptions;\n const c = createComputation(fn, value, true, 0);\n c.observers = null;\n c.observerSlots = null;\n c.comparator = options.equals || undefined;\n if (Scheduler && Transition && Transition.running) {\n c.tState = STALE;\n Updates.push(c);\n } else updateComputation(c);\n return readSignal.bind(c);\n}\nfunction isPromise(v) {\n return v && typeof v === \"object\" && \"then\" in v;\n}\nfunction createResource(pSource, pFetcher, pOptions) {\n let source;\n let fetcher;\n let options;\n if (typeof pFetcher === \"function\") {\n source = pSource;\n fetcher = pFetcher;\n options = pOptions || {};\n } else {\n source = true;\n fetcher = pSource;\n options = pFetcher || {};\n }\n let pr = null,\n initP = NO_INIT,\n id = null,\n loadedUnderTransition = false,\n scheduled = false,\n resolved = \"initialValue\" in options,\n dynamic = typeof source === \"function\" && createMemo(source);\n const contexts = new Set(),\n [value, setValue] = (options.storage || createSignal)(options.initialValue),\n [error, setError] = createSignal(undefined),\n [track, trigger] = createSignal(undefined, {\n equals: false\n }),\n [state, setState] = createSignal(resolved ? \"ready\" : \"unresolved\");\n if (sharedConfig.context) {\n id = sharedConfig.getNextContextId();\n if (options.ssrLoadFrom === \"initial\") initP = options.initialValue;\n else if (sharedConfig.load && sharedConfig.has(id)) initP = sharedConfig.load(id);\n }\n function loadEnd(p, v, error, key) {\n if (pr === p) {\n pr = null;\n key !== undefined && (resolved = true);\n if ((p === initP || v === initP) && options.onHydrated)\n queueMicrotask(() =>\n options.onHydrated(key, {\n value: v\n })\n );\n initP = NO_INIT;\n if (Transition && p && loadedUnderTransition) {\n Transition.promises.delete(p);\n loadedUnderTransition = false;\n runUpdates(() => {\n Transition.running = true;\n completeLoad(v, error);\n }, false);\n } else completeLoad(v, error);\n }\n return v;\n }\n function completeLoad(v, err) {\n runUpdates(() => {\n if (err === undefined) setValue(() => v);\n setState(err !== undefined ? \"errored\" : resolved ? \"ready\" : \"unresolved\");\n setError(err);\n for (const c of contexts.keys()) c.decrement();\n contexts.clear();\n }, false);\n }\n function read() {\n const c = SuspenseContext && useContext(SuspenseContext),\n v = value(),\n err = error();\n if (err !== undefined && !pr) throw err;\n if (Listener && !Listener.user && c) {\n createComputed(() => {\n track();\n if (pr) {\n if (c.resolved && Transition && loadedUnderTransition) Transition.promises.add(pr);\n else if (!contexts.has(c)) {\n c.increment();\n contexts.add(c);\n }\n }\n });\n }\n return v;\n }\n function load(refetching = true) {\n if (refetching !== false && scheduled) return;\n scheduled = false;\n const lookup = dynamic ? dynamic() : source;\n loadedUnderTransition = Transition && Transition.running;\n if (lookup == null || lookup === false) {\n loadEnd(pr, untrack(value));\n return;\n }\n if (Transition && pr) Transition.promises.delete(pr);\n const p =\n initP !== NO_INIT\n ? initP\n : untrack(() =>\n fetcher(lookup, {\n value: value(),\n refetching\n })\n );\n if (!isPromise(p)) {\n loadEnd(pr, p, undefined, lookup);\n return p;\n }\n pr = p;\n if (\"value\" in p) {\n if (p.status === \"success\") loadEnd(pr, p.value, undefined, lookup);\n else loadEnd(pr, undefined, castError(p.value), lookup);\n return p;\n }\n scheduled = true;\n queueMicrotask(() => (scheduled = false));\n runUpdates(() => {\n setState(resolved ? \"refreshing\" : \"pending\");\n trigger();\n }, false);\n return p.then(\n v => loadEnd(p, v, undefined, lookup),\n e => loadEnd(p, undefined, castError(e), lookup)\n );\n }\n Object.defineProperties(read, {\n state: {\n get: () => state()\n },\n error: {\n get: () => error()\n },\n loading: {\n get() {\n const s = state();\n return s === \"pending\" || s === \"refreshing\";\n }\n },\n latest: {\n get() {\n if (!resolved) return read();\n const err = error();\n if (err && !pr) throw err;\n return value();\n }\n }\n });\n if (dynamic) createComputed(() => load(false));\n else load(false);\n return [\n read,\n {\n refetch: load,\n mutate: setValue\n }\n ];\n}\nfunction createDeferred(source, options) {\n let t,\n timeout = options ? options.timeoutMs : undefined;\n const node = createComputation(\n () => {\n if (!t || !t.fn)\n t = requestCallback(\n () => setDeferred(() => node.value),\n timeout !== undefined\n ? {\n timeout\n }\n : undefined\n );\n return source();\n },\n undefined,\n true\n );\n const [deferred, setDeferred] = createSignal(\n Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value,\n options\n );\n updateComputation(node);\n setDeferred(() =>\n Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value\n );\n return deferred;\n}\nfunction createSelector(source, fn = equalFn, options) {\n const subs = new Map();\n const node = createComputation(\n p => {\n const v = source();\n for (const [key, val] of subs.entries())\n if (fn(key, v) !== fn(key, p)) {\n for (const c of val.values()) {\n c.state = STALE;\n if (c.pure) Updates.push(c);\n else Effects.push(c);\n }\n }\n return v;\n },\n undefined,\n true,\n STALE\n );\n updateComputation(node);\n return key => {\n const listener = Listener;\n if (listener) {\n let l;\n if ((l = subs.get(key))) l.add(listener);\n else subs.set(key, (l = new Set([listener])));\n onCleanup(() => {\n l.delete(listener);\n !l.size && subs.delete(key);\n });\n }\n return fn(\n key,\n Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value\n );\n };\n}\nfunction batch(fn) {\n return runUpdates(fn, false);\n}\nfunction untrack(fn) {\n if (!ExternalSourceConfig && Listener === null) return fn();\n const listener = Listener;\n Listener = null;\n try {\n if (ExternalSourceConfig) return ExternalSourceConfig.untrack(fn);\n return fn();\n } finally {\n Listener = listener;\n }\n}\nfunction on(deps, fn, options) {\n const isArray = Array.isArray(deps);\n let prevInput;\n let defer = options && options.defer;\n return prevValue => {\n let input;\n if (isArray) {\n input = Array(deps.length);\n for (let i = 0; i < deps.length; i++) input[i] = deps[i]();\n } else input = deps();\n if (defer) {\n defer = false;\n return prevValue;\n }\n const result = untrack(() => fn(input, prevInput, prevValue));\n prevInput = input;\n return result;\n };\n}\nfunction onMount(fn) {\n createEffect(() => untrack(fn));\n}\nfunction onCleanup(fn) {\n if (Owner === null);\n else if (Owner.cleanups === null) Owner.cleanups = [fn];\n else Owner.cleanups.push(fn);\n return fn;\n}\nfunction catchError(fn, handler) {\n ERROR || (ERROR = Symbol(\"error\"));\n Owner = createComputation(undefined, undefined, true);\n Owner.context = {\n ...Owner.context,\n [ERROR]: [handler]\n };\n if (Transition && Transition.running) Transition.sources.add(Owner);\n try {\n return fn();\n } catch (err) {\n handleError(err);\n } finally {\n Owner = Owner.owner;\n }\n}\nfunction getListener() {\n return Listener;\n}\nfunction getOwner() {\n return Owner;\n}\nfunction runWithOwner(o, fn) {\n const prev = Owner;\n const prevListener = Listener;\n Owner = o;\n Listener = null;\n try {\n return runUpdates(fn, true);\n } catch (err) {\n handleError(err);\n } finally {\n Owner = prev;\n Listener = prevListener;\n }\n}\nfunction enableScheduling(scheduler = requestCallback) {\n Scheduler = scheduler;\n}\nfunction startTransition(fn) {\n if (Transition && Transition.running) {\n fn();\n return Transition.done;\n }\n const l = Listener;\n const o = Owner;\n return Promise.resolve().then(() => {\n Listener = l;\n Owner = o;\n let t;\n if (Scheduler || SuspenseContext) {\n t =\n Transition ||\n (Transition = {\n sources: new Set(),\n effects: [],\n promises: new Set(),\n disposed: new Set(),\n queue: new Set(),\n running: true\n });\n t.done || (t.done = new Promise(res => (t.resolve = res)));\n t.running = true;\n }\n runUpdates(fn, false);\n Listener = Owner = null;\n return t ? t.done : undefined;\n });\n}\nconst [transPending, setTransPending] = /*@__PURE__*/ createSignal(false);\nfunction useTransition() {\n return [transPending, startTransition];\n}\nfunction resumeEffects(e) {\n Effects.push.apply(Effects, e);\n e.length = 0;\n}\nfunction createContext(defaultValue, options) {\n const id = Symbol(\"context\");\n return {\n id,\n Provider: createProvider(id),\n defaultValue\n };\n}\nfunction useContext(context) {\n let value;\n return Owner && Owner.context && (value = Owner.context[context.id]) !== undefined\n ? value\n : context.defaultValue;\n}\nfunction children(fn) {\n const children = createMemo(fn);\n const memo = createMemo(() => resolveChildren(children()));\n memo.toArray = () => {\n const c = memo();\n return Array.isArray(c) ? c : c != null ? [c] : [];\n };\n return memo;\n}\nlet SuspenseContext;\nfunction getSuspenseContext() {\n return SuspenseContext || (SuspenseContext = createContext());\n}\nfunction enableExternalSource(factory, untrack = fn => fn()) {\n if (ExternalSourceConfig) {\n const { factory: oldFactory, untrack: oldUntrack } = ExternalSourceConfig;\n ExternalSourceConfig = {\n factory: (fn, trigger) => {\n const oldSource = oldFactory(fn, trigger);\n const source = factory(x => oldSource.track(x), trigger);\n return {\n track: x => source.track(x),\n dispose() {\n source.dispose();\n oldSource.dispose();\n }\n };\n },\n untrack: fn => oldUntrack(() => untrack(fn))\n };\n } else {\n ExternalSourceConfig = {\n factory,\n untrack\n };\n }\n}\nfunction readSignal() {\n const runningTransition = Transition && Transition.running;\n if (this.sources && (runningTransition ? this.tState : this.state)) {\n if ((runningTransition ? this.tState : this.state) === STALE) updateComputation(this);\n else {\n const updates = Updates;\n Updates = null;\n runUpdates(() => lookUpstream(this), false);\n Updates = updates;\n }\n }\n if (Listener) {\n const sSlot = this.observers ? this.observers.length : 0;\n if (!Listener.sources) {\n Listener.sources = [this];\n Listener.sourceSlots = [sSlot];\n } else {\n Listener.sources.push(this);\n Listener.sourceSlots.push(sSlot);\n }\n if (!this.observers) {\n this.observers = [Listener];\n this.observerSlots = [Listener.sources.length - 1];\n } else {\n this.observers.push(Listener);\n this.observerSlots.push(Listener.sources.length - 1);\n }\n }\n if (runningTransition && Transition.sources.has(this)) return this.tValue;\n return this.value;\n}\nfunction writeSignal(node, value, isComp) {\n let current =\n Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value;\n if (!node.comparator || !node.comparator(current, value)) {\n if (Transition) {\n const TransitionRunning = Transition.running;\n if (TransitionRunning || (!isComp && Transition.sources.has(node))) {\n Transition.sources.add(node);\n node.tValue = value;\n }\n if (!TransitionRunning) node.value = value;\n } else node.value = value;\n if (node.observers && node.observers.length) {\n runUpdates(() => {\n for (let i = 0; i < node.observers.length; i += 1) {\n const o = node.observers[i];\n const TransitionRunning = Transition && Transition.running;\n if (TransitionRunning && Transition.disposed.has(o)) continue;\n if (TransitionRunning ? !o.tState : !o.state) {\n if (o.pure) Updates.push(o);\n else Effects.push(o);\n if (o.observers) markDownstream(o);\n }\n if (!TransitionRunning) o.state = STALE;\n else o.tState = STALE;\n }\n if (Updates.length > 10e5) {\n Updates = [];\n if (IS_DEV);\n throw new Error();\n }\n }, false);\n }\n }\n return value;\n}\nfunction updateComputation(node) {\n if (!node.fn) return;\n cleanNode(node);\n const time = ExecCount;\n runComputation(\n node,\n Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value,\n time\n );\n if (Transition && !Transition.running && Transition.sources.has(node)) {\n queueMicrotask(() => {\n runUpdates(() => {\n Transition && (Transition.running = true);\n Listener = Owner = node;\n runComputation(node, node.tValue, time);\n Listener = Owner = null;\n }, false);\n });\n }\n}\nfunction runComputation(node, value, time) {\n let nextValue;\n const owner = Owner,\n listener = Listener;\n Listener = Owner = node;\n try {\n nextValue = node.fn(value);\n } catch (err) {\n if (node.pure) {\n if (Transition && Transition.running) {\n node.tState = STALE;\n node.tOwned && node.tOwned.forEach(cleanNode);\n node.tOwned = undefined;\n } else {\n node.state = STALE;\n node.owned && node.owned.forEach(cleanNode);\n node.owned = null;\n }\n }\n node.updatedAt = time + 1;\n return handleError(err);\n } finally {\n Listener = listener;\n Owner = owner;\n }\n if (!node.updatedAt || node.updatedAt <= time) {\n if (node.updatedAt != null && \"observers\" in node) {\n writeSignal(node, nextValue, true);\n } else if (Transition && Transition.running && node.pure) {\n Transition.sources.add(node);\n node.tValue = nextValue;\n } else node.value = nextValue;\n node.updatedAt = time;\n }\n}\nfunction createComputation(fn, init, pure, state = STALE, options) {\n const c = {\n fn,\n state: state,\n updatedAt: null,\n owned: null,\n sources: null,\n sourceSlots: null,\n cleanups: null,\n value: init,\n owner: Owner,\n context: Owner ? Owner.context : null,\n pure\n };\n if (Transition && Transition.running) {\n c.state = 0;\n c.tState = state;\n }\n if (Owner === null);\n else if (Owner !== UNOWNED) {\n if (Transition && Transition.running && Owner.pure) {\n if (!Owner.tOwned) Owner.tOwned = [c];\n else Owner.tOwned.push(c);\n } else {\n if (!Owner.owned) Owner.owned = [c];\n else Owner.owned.push(c);\n }\n }\n if (ExternalSourceConfig && c.fn) {\n const [track, trigger] = createSignal(undefined, {\n equals: false\n });\n const ordinary = ExternalSourceConfig.factory(c.fn, trigger);\n onCleanup(() => ordinary.dispose());\n const triggerInTransition = () => startTransition(trigger).then(() => inTransition.dispose());\n const inTransition = ExternalSourceConfig.factory(c.fn, triggerInTransition);\n c.fn = x => {\n track();\n return Transition && Transition.running ? inTransition.track(x) : ordinary.track(x);\n };\n }\n return c;\n}\nfunction runTop(node) {\n const runningTransition = Transition && Transition.running;\n if ((runningTransition ? node.tState : node.state) === 0) return;\n if ((runningTransition ? node.tState : node.state) === PENDING) return lookUpstream(node);\n if (node.suspense && untrack(node.suspense.inFallback)) return node.suspense.effects.push(node);\n const ancestors = [node];\n while ((node = node.owner) && (!node.updatedAt || node.updatedAt < ExecCount)) {\n if (runningTransition && Transition.disposed.has(node)) return;\n if (runningTransition ? node.tState : node.state) ancestors.push(node);\n }\n for (let i = ancestors.length - 1; i >= 0; i--) {\n node = ancestors[i];\n if (runningTransition) {\n let top = node,\n prev = ancestors[i + 1];\n while ((top = top.owner) && top !== prev) {\n if (Transition.disposed.has(top)) return;\n }\n }\n if ((runningTransition ? node.tState : node.state) === STALE) {\n updateComputation(node);\n } else if ((runningTransition ? node.tState : node.state) === PENDING) {\n const updates = Updates;\n Updates = null;\n runUpdates(() => lookUpstream(node, ancestors[0]), false);\n Updates = updates;\n }\n }\n}\nfunction runUpdates(fn, init) {\n if (Updates) return fn();\n let wait = false;\n if (!init) Updates = [];\n if (Effects) wait = true;\n else Effects = [];\n ExecCount++;\n try {\n const res = fn();\n completeUpdates(wait);\n return res;\n } catch (err) {\n if (!wait) Effects = null;\n Updates = null;\n handleError(err);\n }\n}\nfunction completeUpdates(wait) {\n if (Updates) {\n if (Scheduler && Transition && Transition.running) scheduleQueue(Updates);\n else runQueue(Updates);\n Updates = null;\n }\n if (wait) return;\n let res;\n if (Transition) {\n if (!Transition.promises.size && !Transition.queue.size) {\n const sources = Transition.sources;\n const disposed = Transition.disposed;\n Effects.push.apply(Effects, Transition.effects);\n res = Transition.resolve;\n for (const e of Effects) {\n \"tState\" in e && (e.state = e.tState);\n delete e.tState;\n }\n Transition = null;\n runUpdates(() => {\n for (const d of disposed) cleanNode(d);\n for (const v of sources) {\n v.value = v.tValue;\n if (v.owned) {\n for (let i = 0, len = v.owned.length; i < len; i++) cleanNode(v.owned[i]);\n }\n if (v.tOwned) v.owned = v.tOwned;\n delete v.tValue;\n delete v.tOwned;\n v.tState = 0;\n }\n setTransPending(false);\n }, false);\n } else if (Transition.running) {\n Transition.running = false;\n Transition.effects.push.apply(Transition.effects, Effects);\n Effects = null;\n setTransPending(true);\n return;\n }\n }\n const e = Effects;\n Effects = null;\n if (e.length) runUpdates(() => runEffects(e), false);\n if (res) res();\n}\nfunction runQueue(queue) {\n for (let i = 0; i < queue.length; i++) runTop(queue[i]);\n}\nfunction scheduleQueue(queue) {\n for (let i = 0; i < queue.length; i++) {\n const item = queue[i];\n const tasks = Transition.queue;\n if (!tasks.has(item)) {\n tasks.add(item);\n Scheduler(() => {\n tasks.delete(item);\n runUpdates(() => {\n Transition.running = true;\n runTop(item);\n }, false);\n Transition && (Transition.running = false);\n });\n }\n }\n}\nfunction runUserEffects(queue) {\n let i,\n userLength = 0;\n for (i = 0; i < queue.length; i++) {\n const e = queue[i];\n if (!e.user) runTop(e);\n else queue[userLength++] = e;\n }\n if (sharedConfig.context) {\n if (sharedConfig.count) {\n sharedConfig.effects || (sharedConfig.effects = []);\n sharedConfig.effects.push(...queue.slice(0, userLength));\n return;\n }\n setHydrateContext();\n }\n if (sharedConfig.effects && (sharedConfig.done || !sharedConfig.count)) {\n queue = [...sharedConfig.effects, ...queue];\n userLength += sharedConfig.effects.length;\n delete sharedConfig.effects;\n }\n for (i = 0; i < userLength; i++) runTop(queue[i]);\n}\nfunction lookUpstream(node, ignore) {\n const runningTransition = Transition && Transition.running;\n if (runningTransition) node.tState = 0;\n else node.state = 0;\n for (let i = 0; i < node.sources.length; i += 1) {\n const source = node.sources[i];\n if (source.sources) {\n const state = runningTransition ? source.tState : source.state;\n if (state === STALE) {\n if (source !== ignore && (!source.updatedAt || source.updatedAt < ExecCount))\n runTop(source);\n } else if (state === PENDING) lookUpstream(source, ignore);\n }\n }\n}\nfunction markDownstream(node) {\n const runningTransition = Transition && Transition.running;\n for (let i = 0; i < node.observers.length; i += 1) {\n const o = node.observers[i];\n if (runningTransition ? !o.tState : !o.state) {\n if (runningTransition) o.tState = PENDING;\n else o.state = PENDING;\n if (o.pure) Updates.push(o);\n else Effects.push(o);\n o.observers && markDownstream(o);\n }\n }\n}\nfunction cleanNode(node) {\n let i;\n if (node.sources) {\n while (node.sources.length) {\n const source = node.sources.pop(),\n index = node.sourceSlots.pop(),\n obs = source.observers;\n if (obs && obs.length) {\n const n = obs.pop(),\n s = source.observerSlots.pop();\n if (index < obs.length) {\n n.sourceSlots[s] = index;\n obs[index] = n;\n source.observerSlots[index] = s;\n }\n }\n }\n }\n if (node.tOwned) {\n for (i = node.tOwned.length - 1; i >= 0; i--) cleanNode(node.tOwned[i]);\n delete node.tOwned;\n }\n if (Transition && Transition.running && node.pure) {\n reset(node, true);\n } else if (node.owned) {\n for (i = node.owned.length - 1; i >= 0; i--) cleanNode(node.owned[i]);\n node.owned = null;\n }\n if (node.cleanups) {\n for (i = node.cleanups.length - 1; i >= 0; i--) node.cleanups[i]();\n node.cleanups = null;\n }\n if (Transition && Transition.running) node.tState = 0;\n else node.state = 0;\n}\nfunction reset(node, top) {\n if (!top) {\n node.tState = 0;\n Transition.disposed.add(node);\n }\n if (node.owned) {\n for (let i = 0; i < node.owned.length; i++) reset(node.owned[i]);\n }\n}\nfunction castError(err) {\n if (err instanceof Error) return err;\n return new Error(typeof err === \"string\" ? err : \"Unknown error\", {\n cause: err\n });\n}\nfunction runErrors(err, fns, owner) {\n try {\n for (const f of fns) f(err);\n } catch (e) {\n handleError(e, (owner && owner.owner) || null);\n }\n}\nfunction handleError(err, owner = Owner) {\n const fns = ERROR && owner && owner.context && owner.context[ERROR];\n const error = castError(err);\n if (!fns) throw error;\n if (Effects)\n Effects.push({\n fn() {\n runErrors(error, fns, owner);\n },\n state: STALE\n });\n else runErrors(error, fns, owner);\n}\nfunction resolveChildren(children) {\n if (typeof children === \"function\" && !children.length) return resolveChildren(children());\n if (Array.isArray(children)) {\n const results = [];\n for (let i = 0; i < children.length; i++) {\n const result = resolveChildren(children[i]);\n Array.isArray(result) ? results.push.apply(results, result) : results.push(result);\n }\n return results;\n }\n return children;\n}\nfunction createProvider(id, options) {\n return function provider(props) {\n let res;\n createRenderEffect(\n () =>\n (res = untrack(() => {\n Owner.context = {\n ...Owner.context,\n [id]: props.value\n };\n return children(() => props.children);\n })),\n undefined\n );\n return res;\n };\n}\nfunction onError(fn) {\n ERROR || (ERROR = Symbol(\"error\"));\n if (Owner === null);\n else if (Owner.context === null || !Owner.context[ERROR]) {\n Owner.context = {\n ...Owner.context,\n [ERROR]: [fn]\n };\n mutateContext(Owner, ERROR, [fn]);\n } else Owner.context[ERROR].push(fn);\n}\nfunction mutateContext(o, key, value) {\n if (o.owned) {\n for (let i = 0; i < o.owned.length; i++) {\n if (o.owned[i].context === o.context) mutateContext(o.owned[i], key, value);\n if (!o.owned[i].context) {\n o.owned[i].context = o.context;\n mutateContext(o.owned[i], key, value);\n } else if (!o.owned[i].context[key]) {\n o.owned[i].context[key] = value;\n mutateContext(o.owned[i], key, value);\n }\n }\n }\n}\n\nfunction observable(input) {\n return {\n subscribe(observer) {\n if (!(observer instanceof Object) || observer == null) {\n throw new TypeError(\"Expected the observer to be an object.\");\n }\n const handler =\n typeof observer === \"function\" ? observer : observer.next && observer.next.bind(observer);\n if (!handler) {\n return {\n unsubscribe() {}\n };\n }\n const dispose = createRoot(disposer => {\n createEffect(() => {\n const v = input();\n untrack(() => handler(v));\n });\n return disposer;\n });\n if (getOwner()) onCleanup(dispose);\n return {\n unsubscribe() {\n dispose();\n }\n };\n },\n [Symbol.observable || \"@@observable\"]() {\n return this;\n }\n };\n}\nfunction from(producer, initalValue = undefined) {\n const [s, set] = createSignal(initalValue, {\n equals: false\n });\n if (\"subscribe\" in producer) {\n const unsub = producer.subscribe(v => set(() => v));\n onCleanup(() => (\"unsubscribe\" in unsub ? unsub.unsubscribe() : unsub()));\n } else {\n const clean = producer(set);\n onCleanup(clean);\n }\n return s;\n}\n\nconst FALLBACK = Symbol(\"fallback\");\nfunction dispose(d) {\n for (let i = 0; i < d.length; i++) d[i]();\n}\nfunction mapArray(list, mapFn, options = {}) {\n let items = [],\n mapped = [],\n disposers = [],\n len = 0,\n indexes = mapFn.length > 1 ? [] : null;\n onCleanup(() => dispose(disposers));\n return () => {\n let newItems = list() || [],\n newLen = newItems.length,\n i,\n j;\n newItems[$TRACK];\n return untrack(() => {\n let newIndices, newIndicesNext, temp, tempdisposers, tempIndexes, start, end, newEnd, item;\n if (newLen === 0) {\n if (len !== 0) {\n dispose(disposers);\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n indexes && (indexes = []);\n }\n if (options.fallback) {\n items = [FALLBACK];\n mapped[0] = createRoot(disposer => {\n disposers[0] = disposer;\n return options.fallback();\n });\n len = 1;\n }\n } else if (len === 0) {\n mapped = new Array(newLen);\n for (j = 0; j < newLen; j++) {\n items[j] = newItems[j];\n mapped[j] = createRoot(mapper);\n }\n len = newLen;\n } else {\n temp = new Array(newLen);\n tempdisposers = new Array(newLen);\n indexes && (tempIndexes = new Array(newLen));\n for (\n start = 0, end = Math.min(len, newLen);\n start < end && items[start] === newItems[start];\n start++\n );\n for (\n end = len - 1, newEnd = newLen - 1;\n end >= start && newEnd >= start && items[end] === newItems[newEnd];\n end--, newEnd--\n ) {\n temp[newEnd] = mapped[end];\n tempdisposers[newEnd] = disposers[end];\n indexes && (tempIndexes[newEnd] = indexes[end]);\n }\n newIndices = new Map();\n newIndicesNext = new Array(newEnd + 1);\n for (j = newEnd; j >= start; j--) {\n item = newItems[j];\n i = newIndices.get(item);\n newIndicesNext[j] = i === undefined ? -1 : i;\n newIndices.set(item, j);\n }\n for (i = start; i <= end; i++) {\n item = items[i];\n j = newIndices.get(item);\n if (j !== undefined && j !== -1) {\n temp[j] = mapped[i];\n tempdisposers[j] = disposers[i];\n indexes && (tempIndexes[j] = indexes[i]);\n j = newIndicesNext[j];\n newIndices.set(item, j);\n } else disposers[i]();\n }\n for (j = start; j < newLen; j++) {\n if (j in temp) {\n mapped[j] = temp[j];\n disposers[j] = tempdisposers[j];\n if (indexes) {\n indexes[j] = tempIndexes[j];\n indexes[j](j);\n }\n } else mapped[j] = createRoot(mapper);\n }\n mapped = mapped.slice(0, (len = newLen));\n items = newItems.slice(0);\n }\n return mapped;\n });\n function mapper(disposer) {\n disposers[j] = disposer;\n if (indexes) {\n const [s, set] = createSignal(j);\n indexes[j] = set;\n return mapFn(newItems[j], s);\n }\n return mapFn(newItems[j]);\n }\n };\n}\nfunction indexArray(list, mapFn, options = {}) {\n let items = [],\n mapped = [],\n disposers = [],\n signals = [],\n len = 0,\n i;\n onCleanup(() => dispose(disposers));\n return () => {\n const newItems = list() || [],\n newLen = newItems.length;\n newItems[$TRACK];\n return untrack(() => {\n if (newLen === 0) {\n if (len !== 0) {\n dispose(disposers);\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n signals = [];\n }\n if (options.fallback) {\n items = [FALLBACK];\n mapped[0] = createRoot(disposer => {\n disposers[0] = disposer;\n return options.fallback();\n });\n len = 1;\n }\n return mapped;\n }\n if (items[0] === FALLBACK) {\n disposers[0]();\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n }\n for (i = 0; i < newLen; i++) {\n if (i < items.length && items[i] !== newItems[i]) {\n signals[i](() => newItems[i]);\n } else if (i >= items.length) {\n mapped[i] = createRoot(mapper);\n }\n }\n for (; i < items.length; i++) {\n disposers[i]();\n }\n len = signals.length = disposers.length = newLen;\n items = newItems.slice(0);\n return (mapped = mapped.slice(0, len));\n });\n function mapper(disposer) {\n disposers[i] = disposer;\n const [s, set] = createSignal(newItems[i]);\n signals[i] = set;\n return mapFn(s, i);\n }\n };\n}\n\nlet hydrationEnabled = false;\nfunction enableHydration() {\n hydrationEnabled = true;\n}\nfunction createComponent(Comp, props) {\n if (hydrationEnabled) {\n if (sharedConfig.context) {\n const c = sharedConfig.context;\n setHydrateContext(nextHydrateContext());\n const r = untrack(() => Comp(props || {}));\n setHydrateContext(c);\n return r;\n }\n }\n return untrack(() => Comp(props || {}));\n}\nfunction trueFn() {\n return true;\n}\nconst propTraps = {\n get(_, property, receiver) {\n if (property === $PROXY) return receiver;\n return _.get(property);\n },\n has(_, property) {\n if (property === $PROXY) return true;\n return _.has(property);\n },\n set: trueFn,\n deleteProperty: trueFn,\n getOwnPropertyDescriptor(_, property) {\n return {\n configurable: true,\n enumerable: true,\n get() {\n return _.get(property);\n },\n set: trueFn,\n deleteProperty: trueFn\n };\n },\n ownKeys(_) {\n return _.keys();\n }\n};\nfunction resolveSource(s) {\n return !(s = typeof s === \"function\" ? s() : s) ? {} : s;\n}\nfunction resolveSources() {\n for (let i = 0, length = this.length; i < length; ++i) {\n const v = this[i]();\n if (v !== undefined) return v;\n }\n}\nfunction mergeProps(...sources) {\n let proxy = false;\n for (let i = 0; i < sources.length; i++) {\n const s = sources[i];\n proxy = proxy || (!!s && $PROXY in s);\n sources[i] = typeof s === \"function\" ? ((proxy = true), createMemo(s)) : s;\n }\n if (SUPPORTS_PROXY && proxy) {\n return new Proxy(\n {\n get(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n const v = resolveSource(sources[i])[property];\n if (v !== undefined) return v;\n }\n },\n has(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n if (property in resolveSource(sources[i])) return true;\n }\n return false;\n },\n keys() {\n const keys = [];\n for (let i = 0; i < sources.length; i++)\n keys.push(...Object.keys(resolveSource(sources[i])));\n return [...new Set(keys)];\n }\n },\n propTraps\n );\n }\n const sourcesMap = {};\n const defined = Object.create(null);\n for (let i = sources.length - 1; i >= 0; i--) {\n const source = sources[i];\n if (!source) continue;\n const sourceKeys = Object.getOwnPropertyNames(source);\n for (let i = sourceKeys.length - 1; i >= 0; i--) {\n const key = sourceKeys[i];\n if (key === \"__proto__\" || key === \"constructor\") continue;\n const desc = Object.getOwnPropertyDescriptor(source, key);\n if (!defined[key]) {\n defined[key] = desc.get\n ? {\n enumerable: true,\n configurable: true,\n get: resolveSources.bind((sourcesMap[key] = [desc.get.bind(source)]))\n }\n : desc.value !== undefined\n ? desc\n : undefined;\n } else {\n const sources = sourcesMap[key];\n if (sources) {\n if (desc.get) sources.push(desc.get.bind(source));\n else if (desc.value !== undefined) sources.push(() => desc.value);\n }\n }\n }\n }\n const target = {};\n const definedKeys = Object.keys(defined);\n for (let i = definedKeys.length - 1; i >= 0; i--) {\n const key = definedKeys[i],\n desc = defined[key];\n if (desc && desc.get) Object.defineProperty(target, key, desc);\n else target[key] = desc ? desc.value : undefined;\n }\n return target;\n}\nfunction splitProps(props, ...keys) {\n if (SUPPORTS_PROXY && $PROXY in props) {\n const blocked = new Set(keys.length > 1 ? keys.flat() : keys[0]);\n const res = keys.map(k => {\n return new Proxy(\n {\n get(property) {\n return k.includes(property) ? props[property] : undefined;\n },\n has(property) {\n return k.includes(property) && property in props;\n },\n keys() {\n return k.filter(property => property in props);\n }\n },\n propTraps\n );\n });\n res.push(\n new Proxy(\n {\n get(property) {\n return blocked.has(property) ? undefined : props[property];\n },\n has(property) {\n return blocked.has(property) ? false : property in props;\n },\n keys() {\n return Object.keys(props).filter(k => !blocked.has(k));\n }\n },\n propTraps\n )\n );\n return res;\n }\n const otherObject = {};\n const objects = keys.map(() => ({}));\n for (const propName of Object.getOwnPropertyNames(props)) {\n const desc = Object.getOwnPropertyDescriptor(props, propName);\n const isDefaultDesc =\n !desc.get && !desc.set && desc.enumerable && desc.writable && desc.configurable;\n let blocked = false;\n let objectIndex = 0;\n for (const k of keys) {\n if (k.includes(propName)) {\n blocked = true;\n isDefaultDesc\n ? (objects[objectIndex][propName] = desc.value)\n : Object.defineProperty(objects[objectIndex], propName, desc);\n }\n ++objectIndex;\n }\n if (!blocked) {\n isDefaultDesc\n ? (otherObject[propName] = desc.value)\n : Object.defineProperty(otherObject, propName, desc);\n }\n }\n return [...objects, otherObject];\n}\nfunction lazy(fn) {\n let comp;\n let p;\n const wrap = props => {\n const ctx = sharedConfig.context;\n if (ctx) {\n const [s, set] = createSignal();\n sharedConfig.count || (sharedConfig.count = 0);\n sharedConfig.count++;\n (p || (p = fn())).then(mod => {\n !sharedConfig.done && setHydrateContext(ctx);\n sharedConfig.count--;\n set(() => mod.default);\n setHydrateContext();\n });\n comp = s;\n } else if (!comp) {\n const [s] = createResource(() => (p || (p = fn())).then(mod => mod.default));\n comp = s;\n }\n let Comp;\n return createMemo(() =>\n (Comp = comp())\n ? untrack(() => {\n if (IS_DEV);\n if (!ctx || sharedConfig.done) return Comp(props);\n const c = sharedConfig.context;\n setHydrateContext(ctx);\n const r = Comp(props);\n setHydrateContext(c);\n return r;\n })\n : \"\"\n );\n };\n wrap.preload = () => p || ((p = fn()).then(mod => (comp = () => mod.default)), p);\n return wrap;\n}\nlet counter = 0;\nfunction createUniqueId() {\n const ctx = sharedConfig.context;\n return ctx ? sharedConfig.getNextContextId() : `cl-${counter++}`;\n}\n\nconst narrowedError = name => `Stale read from <${name}>.`;\nfunction For(props) {\n const fallback = \"fallback\" in props && {\n fallback: () => props.fallback\n };\n return createMemo(mapArray(() => props.each, props.children, fallback || undefined));\n}\nfunction Index(props) {\n const fallback = \"fallback\" in props && {\n fallback: () => props.fallback\n };\n return createMemo(indexArray(() => props.each, props.children, fallback || undefined));\n}\nfunction Show(props) {\n const keyed = props.keyed;\n const conditionValue = createMemo(() => props.when, undefined, undefined);\n const condition = keyed\n ? conditionValue\n : createMemo(conditionValue, undefined, {\n equals: (a, b) => !a === !b\n });\n return createMemo(\n () => {\n const c = condition();\n if (c) {\n const child = props.children;\n const fn = typeof child === \"function\" && child.length > 0;\n return fn\n ? untrack(() =>\n child(\n keyed\n ? c\n : () => {\n if (!untrack(condition)) throw narrowedError(\"Show\");\n return conditionValue();\n }\n )\n )\n : child;\n }\n return props.fallback;\n },\n undefined,\n undefined\n );\n}\nfunction Switch(props) {\n const chs = children(() => props.children);\n const switchFunc = createMemo(() => {\n const ch = chs();\n const mps = Array.isArray(ch) ? ch : [ch];\n let func = () => undefined;\n for (let i = 0; i < mps.length; i++) {\n const index = i;\n const mp = mps[i];\n const prevFunc = func;\n const conditionValue = createMemo(\n () => (prevFunc() ? undefined : mp.when),\n undefined,\n undefined\n );\n const condition = mp.keyed\n ? conditionValue\n : createMemo(conditionValue, undefined, {\n equals: (a, b) => !a === !b\n });\n func = () => prevFunc() || (condition() ? [index, conditionValue, mp] : undefined);\n }\n return func;\n });\n return createMemo(\n () => {\n const sel = switchFunc()();\n if (!sel) return props.fallback;\n const [index, conditionValue, mp] = sel;\n const child = mp.children;\n const fn = typeof child === \"function\" && child.length > 0;\n return fn\n ? untrack(() =>\n child(\n mp.keyed\n ? conditionValue()\n : () => {\n if (untrack(switchFunc)()?.[0] !== index) throw narrowedError(\"Match\");\n return conditionValue();\n }\n )\n )\n : child;\n },\n undefined,\n undefined\n );\n}\nfunction Match(props) {\n return props;\n}\nlet Errors;\nfunction resetErrorBoundaries() {\n Errors && [...Errors].forEach(fn => fn());\n}\nfunction ErrorBoundary(props) {\n let err;\n if (sharedConfig.context && sharedConfig.load)\n err = sharedConfig.load(sharedConfig.getContextId());\n const [errored, setErrored] = createSignal(err, undefined);\n Errors || (Errors = new Set());\n Errors.add(setErrored);\n onCleanup(() => Errors.delete(setErrored));\n return createMemo(\n () => {\n let e;\n if ((e = errored())) {\n const f = props.fallback;\n return typeof f === \"function\" && f.length ? untrack(() => f(e, () => setErrored())) : f;\n }\n return catchError(() => props.children, setErrored);\n },\n undefined,\n undefined\n );\n}\n\nconst suspenseListEquals = (a, b) =>\n a.showContent === b.showContent && a.showFallback === b.showFallback;\nconst SuspenseListContext = /* #__PURE__ */ createContext();\nfunction SuspenseList(props) {\n let [wrapper, setWrapper] = createSignal(() => ({\n inFallback: false\n })),\n show;\n const listContext = useContext(SuspenseListContext);\n const [registry, setRegistry] = createSignal([]);\n if (listContext) {\n show = listContext.register(createMemo(() => wrapper()().inFallback));\n }\n const resolved = createMemo(\n prev => {\n const reveal = props.revealOrder,\n tail = props.tail,\n { showContent = true, showFallback = true } = show ? show() : {},\n reg = registry(),\n reverse = reveal === \"backwards\";\n if (reveal === \"together\") {\n const all = reg.every(inFallback => !inFallback());\n const res = reg.map(() => ({\n showContent: all && showContent,\n showFallback\n }));\n res.inFallback = !all;\n return res;\n }\n let stop = false;\n let inFallback = prev.inFallback;\n const res = [];\n for (let i = 0, len = reg.length; i < len; i++) {\n const n = reverse ? len - i - 1 : i,\n s = reg[n]();\n if (!stop && !s) {\n res[n] = {\n showContent,\n showFallback\n };\n } else {\n const next = !stop;\n if (next) inFallback = true;\n res[n] = {\n showContent: next,\n showFallback: !tail || (next && tail === \"collapsed\") ? showFallback : false\n };\n stop = true;\n }\n }\n if (!stop) inFallback = false;\n res.inFallback = inFallback;\n return res;\n },\n {\n inFallback: false\n }\n );\n setWrapper(() => resolved);\n return createComponent(SuspenseListContext.Provider, {\n value: {\n register: inFallback => {\n let index;\n setRegistry(registry => {\n index = registry.length;\n return [...registry, inFallback];\n });\n return createMemo(() => resolved()[index], undefined, {\n equals: suspenseListEquals\n });\n }\n },\n get children() {\n return props.children;\n }\n });\n}\nfunction Suspense(props) {\n let counter = 0,\n show,\n ctx,\n p,\n flicker,\n error;\n const [inFallback, setFallback] = createSignal(false),\n SuspenseContext = getSuspenseContext(),\n store = {\n increment: () => {\n if (++counter === 1) setFallback(true);\n },\n decrement: () => {\n if (--counter === 0) setFallback(false);\n },\n inFallback,\n effects: [],\n resolved: false\n },\n owner = getOwner();\n if (sharedConfig.context && sharedConfig.load) {\n const key = sharedConfig.getContextId();\n let ref = sharedConfig.load(key);\n if (ref) {\n if (typeof ref !== \"object\" || ref.status !== \"success\") p = ref;\n else sharedConfig.gather(key);\n }\n if (p && p !== \"$$f\") {\n const [s, set] = createSignal(undefined, {\n equals: false\n });\n flicker = s;\n p.then(\n () => {\n if (sharedConfig.done) return set();\n sharedConfig.gather(key);\n setHydrateContext(ctx);\n set();\n setHydrateContext();\n },\n err => {\n error = err;\n set();\n }\n );\n }\n }\n const listContext = useContext(SuspenseListContext);\n if (listContext) show = listContext.register(store.inFallback);\n let dispose;\n onCleanup(() => dispose && dispose());\n return createComponent(SuspenseContext.Provider, {\n value: store,\n get children() {\n return createMemo(() => {\n if (error) throw error;\n ctx = sharedConfig.context;\n if (flicker) {\n flicker();\n return (flicker = undefined);\n }\n if (ctx && p === \"$$f\") setHydrateContext();\n const rendered = createMemo(() => props.children);\n return createMemo(prev => {\n const inFallback = store.inFallback(),\n { showContent = true, showFallback = true } = show ? show() : {};\n if ((!inFallback || (p && p !== \"$$f\")) && showContent) {\n store.resolved = true;\n dispose && dispose();\n dispose = ctx = p = undefined;\n resumeEffects(store.effects);\n return rendered();\n }\n if (!showFallback) return;\n if (dispose) return prev;\n return createRoot(disposer => {\n dispose = disposer;\n if (ctx) {\n setHydrateContext({\n id: ctx.id + \"F\",\n count: 0\n });\n ctx = undefined;\n }\n return props.fallback;\n }, owner);\n });\n });\n }\n });\n}\n\nconst DEV = undefined;\n\nexport {\n $DEVCOMP,\n $PROXY,\n $TRACK,\n DEV,\n ErrorBoundary,\n For,\n Index,\n Match,\n Show,\n Suspense,\n SuspenseList,\n Switch,\n batch,\n cancelCallback,\n catchError,\n children,\n createComponent,\n createComputed,\n createContext,\n createDeferred,\n createEffect,\n createMemo,\n createReaction,\n createRenderEffect,\n createResource,\n createRoot,\n createSelector,\n createSignal,\n createUniqueId,\n enableExternalSource,\n enableHydration,\n enableScheduling,\n equalFn,\n from,\n getListener,\n getOwner,\n indexArray,\n lazy,\n mapArray,\n mergeProps,\n observable,\n on,\n onCleanup,\n onError,\n onMount,\n requestCallback,\n resetErrorBoundaries,\n runWithOwner,\n sharedConfig,\n splitProps,\n startTransition,\n untrack,\n useContext,\n useTransition\n};\n","type GetValueStrategy = (element: HTMLInputElement) => any;\n\nconst getValueStrategies: Record<string, GetValueStrategy> = {\n text(element) {\n return element.value;\n },\n checkbox(element) {\n return element.checked;\n },\n};\n\nexport const executeGetValueStrategy: GetValueStrategy = (element) => {\n const strategy = getValueStrategies[element.type] || getValueStrategies.text;\n\n return strategy(element);\n};\n","type SetValueStrategy = (element: HTMLInputElement, value: any) => void;\n\nconst setValueStrategies: Record<string, SetValueStrategy> = {\n text(element, value) {\n element.value = value;\n },\n checkbox(element, value) {\n element.checked = value;\n },\n};\n\nexport const executeSetValueStrategy: SetValueStrategy = (element, value) => {\n const strategy = setValueStrategies[element.type] || setValueStrategies.text;\n\n return strategy(element, value);\n};\n","import { FieldError } from \"../types/errors\";\nimport { FormValues } from \"../types/form\";\nimport { Path } from \"../types/path\";\nimport { Rules, ValidationRule } from \"../types/validate\";\n\nconst getRuleValue = (rule: ValidationRule<any>) => {\n if (rule instanceof RegExp) {\n return rule;\n }\n\n if (typeof rule === \"string\" || typeof rule === \"number\") {\n return rule;\n }\n\n return rule.value;\n};\n\nconst getRuleMessage = (rule: ValidationRule<any>) => {\n if (typeof rule === \"string\") {\n return rule;\n }\n\n if (typeof rule.message === \"string\") {\n return rule.message;\n }\n\n return \"\";\n};\n\nexport const validate = <F extends FormValues>(\n values: F,\n name: Path<F>,\n rules: Rules<F, Path<F>> = {}\n): FieldError | undefined => {\n const value = values[name];\n\n if (rules.required && !value) {\n return { type: \"required\", message: getRuleMessage(rules.required) };\n }\n\n if (rules.min && Number(value) < Number(getRuleValue(rules.min))) {\n return { type: \"min\", message: getRuleMessage(rules.min) };\n }\n\n if (rules.max && Number(value) > Number(getRuleValue(rules.max))) {\n return { type: \"max\", message: getRuleMessage(rules.max) };\n }\n\n if (rules.minLength && value.length < getRuleValue(rules.minLength)) {\n return { type: \"minLength\", message: getRuleMessage(rules.minLength) };\n }\n\n if (rules.maxLength && value.length > getRuleValue(rules.maxLength)) {\n return { type: \"maxLength\", message: getRuleMessage(rules.maxLength) };\n }\n\n if (rules.pattern && !getRuleValue(rules.pattern).test(value)) {\n return { type: \"pattern\", message: getRuleMessage(rules.pattern) };\n }\n\n if (rules.validate) {\n const message = rules.validate(value, values);\n\n if (message === false) {\n return { type: \"validate\" };\n }\n\n if (typeof message === \"string\") {\n return { type: \"validate\", message };\n }\n }\n};\n","import { createSignal } from \"solid-js\";\nimport { FormValues } from \"./types/form\";\nimport { Path } from \"./types/path\";\nimport { FieldErrors } from \"./types/errors\";\nimport { ChangeEvent } from \"./types/event\";\nimport { executeGetValueStrategy } from \"./logic/get_value\";\nimport { executeSetValueStrategy } from \"./logic/set_value\";\nimport { Rules } from \"./types/validate\";\nimport { validate } from \"./logic/validate\";\n\ntype FormFields = Record<string, HTMLInputElement | null>;\n\ntype UseFormArg<T extends FormValues> = {\n defaultValues: T;\n mode?: \"onInput\" | \"onChange\" | \"onSubmit\";\n};\n\ntype SubmitCallback<T extends FormValues> = (values: T) => void;\n\nexport const useForm = <T extends FormValues>({\n defaultValues,\n mode = \"onInput\",\n}: UseFormArg<T>) => {\n const fields: FormFields = {};\n const rules: Record<string, Rules<T, Path<T>>> = {};\n\n const [values, setValues] = createSignal<T>(defaultValues);\n const [errors, setErrors] = createSignal<FieldErrors<T>>({});\n const [isValid, setIsValid] = createSignal<boolean>(true);\n\n const validateField = (name: Path<T>) => {\n // const field = fields[name];\n const rule = rules[name];\n\n // const value = field && executeGetValueStrategy(field);\n\n const error = validate(values(), name, rule);\n\n if (error) {\n setErrors((prev) => ({ ...prev, [name]: error }));\n } else {\n setErrors((prev) => {\n const errors = { ...prev };\n\n delete errors[name];\n return errors;\n });\n }\n\n setIsValid(!Object.keys(errors()).length);\n };\n\n const validateAllFields = () => {\n Object.keys(values()).forEach((key) => {\n validateField(key as Path<T>);\n });\n };\n\n const register = (name: Path<T>, options?: Rules<T, Path<T>>) => {\n if (options) {\n rules[name] = {\n required: options.required,\n min: options.min,\n max: options.max,\n minLength: options.minLength,\n maxLength: options.maxLength,\n pattern: options.pattern,\n validate: options.validate,\n };\n }\n\n return {\n name,\n // value: values()[name],\n onInput(event: InputEvent) {\n if (mode === \"onInput\") {\n const newValue = (event.target as HTMLInputElement).value;\n\n setValues((prev) => ({ ...prev, [name]: newValue }));\n validateField(name);\n }\n },\n onChange(event: ChangeEvent) {\n if (mode === \"onChange\" || mode === \"onInput\") {\n const value = executeGetValueStrategy(event.target);\n\n setValues((prev) => ({ ...prev, [name]: value }));\n validateField(name);\n }\n },\n ref: (ref: HTMLInputElement | null) => {\n const field = fields[name];\n\n if (field) {\n return;\n }\n\n fields[name] = ref;\n\n if (ref) {\n executeSetValueStrategy(ref, values()[name]);\n }\n },\n };\n };\n\n const getValues = (name?: Path<T>) => {\n if (name) {\n return values()[name];\n }\n\n return values();\n };\n\n const setValue = (name: Path<T>, value: any) => {\n setValues((prev) => ({ ...prev, [name]: value }));\n\n const field = fields[name];\n\n if (field) {\n executeSetValueStrategy(field, value);\n }\n };\n\n const onSubmit = (submit: SubmitCallback<T>) => {\n return (event: SubmitEvent) => {\n event.preventDefault();\n validateAllFields();\n\n if (isValid()) {\n submit(getValues());\n }\n };\n };\n\n const reset = (newDefaultValues?: Partial<T>) => {\n setValues(() => ({\n ...defaultValues,\n ...newDefaultValues,\n }));\n setErrors({});\n setIsValid(true);\n };\n\n return {\n values,\n errors,\n isValid,\n register,\n getValues,\n setValue,\n onSubmit,\n reset,\n };\n};\n"],"names":["signalOptions","a","b","runEffects","runQueue","STALE","PENDING","Owner","Transition","ExternalSourceConfig","Listener","Updates","Effects","ExecCount","createSignal","value","options","setter","writeSignal","readSignal","untrack","fn","listener","updateComputation","updates","runUpdates","lookUpstream","sSlot","node","isComp","current","i","o","TransitionRunning","markDownstream","cleanNode","time","runComputation","nextValue","owner","err","handleError","runTop","ancestors","init","wait","res","completeUpdates","queue","ignore","source","state","index","obs","n","s","castError","getValueStrategies","element","executeGetValueStrategy","setValueStrategies","executeSetValueStrategy","getRuleValue","rule","getRuleMessage","validate","values","name","rules","message","useForm","defaultValues","mode","fields","setValues","errors","setErrors","isValid","setIsValid","validateField","error","prev","validateAllFields","key","register","event","newValue","ref","getValues","field","submit","newDefaultValues"],"mappings":"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","x_google_ignoreList":[0]}
|