solid-hook-form 1.3.0 → 1.3.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.
@@ -0,0 +1,9 @@
1
+ import { FieldError } from '../types/errors';
2
+ import { FormValues } from '../types/form';
3
+ import { Path } from '../types/path';
4
+ export declare const createErrors: <F extends FormValues>() => {
5
+ errors: import('solid-js').Accessor<Partial<Record<Path<F>, FieldError>>>;
6
+ appendError: (name: Path<F>, error: FieldError) => void;
7
+ removeError: (name: Path<F>) => void;
8
+ resetErrors: () => void;
9
+ };
package/dist/main.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export { useForm } from './use_form';
2
2
  export { FormProvider } from './form_provider';
3
3
  export { useFormContext } from './use_form_context';
4
+ export type { FieldError, FieldErrors } from './types/errors';
package/dist/main.js CHANGED
@@ -1,30 +1,30 @@
1
- const J = (t, e) => t === e, y = {
2
- equals: J
1
+ const Y = (t, e) => t === e, d = {
2
+ equals: Y
3
3
  };
4
- let K = _;
5
- const m = 1, w = 2, X = {};
6
- var c = null;
7
- let C = null, Y = null, l = null, a = null, g = null, E = 0;
4
+ let Z = H;
5
+ const g = 1, y = 2, $ = {};
6
+ var a = null;
7
+ let C = null, tt = null, l = null, f = null, h = null, S = 0;
8
8
  function F(t, e) {
9
- e = e ? Object.assign({}, y, e) : y;
9
+ e = e ? Object.assign({}, d, e) : d;
10
10
  const r = {
11
11
  value: t,
12
12
  observers: null,
13
13
  observerSlots: null,
14
14
  comparator: e.equals || void 0
15
- }, n = (s) => (typeof s == "function" && (s = s(r.value)), U(r, s));
16
- return [R.bind(r), n];
15
+ }, n = (s) => (typeof s == "function" && (s = s(r.value)), R(r, s));
16
+ return [P.bind(r), n];
17
17
  }
18
- function Z(t, e, r) {
19
- const n = j(t, e, !1, m);
20
- S(n);
18
+ function et(t, e, r) {
19
+ const n = U(t, e, !1, g);
20
+ A(n);
21
21
  }
22
- function D(t, e, r) {
23
- r = r ? Object.assign({}, y, r) : y;
24
- const n = j(t, e, !0, 0);
25
- return n.observers = null, n.observerSlots = null, n.comparator = r.equals || void 0, S(n), R.bind(n);
22
+ function T(t, e, r) {
23
+ r = r ? Object.assign({}, d, r) : d;
24
+ const n = U(t, e, !0, 0);
25
+ return n.observers = null, n.observerSlots = null, n.comparator = r.equals || void 0, A(n), P.bind(n);
26
26
  }
27
- function P(t) {
27
+ function M(t) {
28
28
  if (l === null) return t();
29
29
  const e = l;
30
30
  l = null;
@@ -34,31 +34,31 @@ function P(t) {
34
34
  l = e;
35
35
  }
36
36
  }
37
- function $(t, e) {
37
+ function rt(t, e) {
38
38
  const r = Symbol("context");
39
39
  return {
40
40
  id: r,
41
- Provider: ut(r),
41
+ Provider: ct(r),
42
42
  defaultValue: t
43
43
  };
44
44
  }
45
- function tt(t) {
45
+ function nt(t) {
46
46
  let e;
47
- return c && c.context && (e = c.context[t.id]) !== void 0 ? e : t.defaultValue;
47
+ return a && a.context && (e = a.context[t.id]) !== void 0 ? e : t.defaultValue;
48
48
  }
49
- function et(t) {
50
- const e = D(t), r = D(() => V(e()));
49
+ function st(t) {
50
+ const e = T(t), r = T(() => V(e()));
51
51
  return r.toArray = () => {
52
52
  const n = r();
53
53
  return Array.isArray(n) ? n : n != null ? [n] : [];
54
54
  }, r;
55
55
  }
56
- function R() {
56
+ function P() {
57
57
  if (this.sources && this.state)
58
- if (this.state === m) S(this);
58
+ if (this.state === g) A(this);
59
59
  else {
60
- const t = a;
61
- a = null, A(() => x(this)), a = t;
60
+ const t = f;
61
+ f = null, L(() => w(this)), f = t;
62
62
  }
63
63
  if (l) {
64
64
  const t = this.observers ? this.observers.length : 0;
@@ -66,41 +66,41 @@ function R() {
66
66
  }
67
67
  return this.value;
68
68
  }
69
- function U(t, e, r) {
69
+ function R(t, e, r) {
70
70
  let n = t.value;
71
- return (!t.comparator || !t.comparator(n, e)) && (t.value = e, t.observers && t.observers.length && A(() => {
71
+ return (!t.comparator || !t.comparator(n, e)) && (t.value = e, t.observers && t.observers.length && L(() => {
72
72
  for (let s = 0; s < t.observers.length; s += 1) {
73
73
  const i = t.observers[s], p = C && C.running;
74
- p && C.disposed.has(i), (p ? !i.tState : !i.state) && (i.pure ? a.push(i) : g.push(i), i.observers && G(i)), p || (i.state = m);
74
+ p && C.disposed.has(i), (p ? !i.tState : !i.state) && (i.pure ? f.push(i) : h.push(i), i.observers && _(i)), p || (i.state = g);
75
75
  }
76
- if (a.length > 1e6)
77
- throw a = [], new Error();
76
+ if (f.length > 1e6)
77
+ throw f = [], new Error();
78
78
  })), e;
79
79
  }
80
- function S(t) {
80
+ function A(t) {
81
81
  if (!t.fn) return;
82
- d(t);
83
- const e = E;
84
- rt(
82
+ x(t);
83
+ const e = S;
84
+ ot(
85
85
  t,
86
86
  t.value,
87
87
  e
88
88
  );
89
89
  }
90
- function rt(t, e, r) {
90
+ function ot(t, e, r) {
91
91
  let n;
92
- const s = c, i = l;
93
- l = c = t;
92
+ const s = a, i = l;
93
+ l = a = t;
94
94
  try {
95
95
  n = t.fn(e);
96
96
  } catch (p) {
97
- return t.pure && (t.state = m, t.owned && t.owned.forEach(d), t.owned = null), t.updatedAt = r + 1, Q(p);
97
+ return t.pure && (t.state = g, t.owned && t.owned.forEach(x), t.owned = null), t.updatedAt = r + 1, G(p);
98
98
  } finally {
99
- l = i, c = s;
99
+ l = i, a = s;
100
100
  }
101
- (!t.updatedAt || t.updatedAt <= r) && (t.updatedAt != null && "observers" in t ? U(t, n) : t.value = n, t.updatedAt = r);
101
+ (!t.updatedAt || t.updatedAt <= r) && (t.updatedAt != null && "observers" in t ? R(t, n) : t.value = n, t.updatedAt = r);
102
102
  }
103
- function j(t, e, r, n = m, s) {
103
+ function U(t, e, r, n = g, s) {
104
104
  const i = {
105
105
  fn: t,
106
106
  state: n,
@@ -110,63 +110,63 @@ function j(t, e, r, n = m, s) {
110
110
  sourceSlots: null,
111
111
  cleanups: null,
112
112
  value: e,
113
- owner: c,
114
- context: c ? c.context : null,
113
+ owner: a,
114
+ context: a ? a.context : null,
115
115
  pure: r
116
116
  };
117
- return c === null || c !== X && (c.owned ? c.owned.push(i) : c.owned = [i]), i;
117
+ return a === null || a !== $ && (a.owned ? a.owned.push(i) : a.owned = [i]), i;
118
118
  }
119
- function H(t) {
119
+ function j(t) {
120
120
  if (t.state === 0) return;
121
- if (t.state === w) return x(t);
122
- if (t.suspense && P(t.suspense.inFallback)) return t.suspense.effects.push(t);
121
+ if (t.state === y) return w(t);
122
+ if (t.suspense && M(t.suspense.inFallback)) return t.suspense.effects.push(t);
123
123
  const e = [t];
124
- for (; (t = t.owner) && (!t.updatedAt || t.updatedAt < E); )
124
+ for (; (t = t.owner) && (!t.updatedAt || t.updatedAt < S); )
125
125
  t.state && e.push(t);
126
126
  for (let r = e.length - 1; r >= 0; r--)
127
- if (t = e[r], t.state === m)
128
- S(t);
129
- else if (t.state === w) {
130
- const n = a;
131
- a = null, A(() => x(t, e[0])), a = n;
127
+ if (t = e[r], t.state === g)
128
+ A(t);
129
+ else if (t.state === y) {
130
+ const n = f;
131
+ f = null, L(() => w(t, e[0])), f = n;
132
132
  }
133
133
  }
134
- function A(t, e) {
135
- if (a) return t();
134
+ function L(t, e) {
135
+ if (f) return t();
136
136
  let r = !1;
137
- a = [], g ? r = !0 : g = [], E++;
137
+ f = [], h ? r = !0 : h = [], S++;
138
138
  try {
139
139
  const n = t();
140
- return nt(r), n;
140
+ return it(r), n;
141
141
  } catch (n) {
142
- r || (g = null), a = null, Q(n);
142
+ r || (h = null), f = null, G(n);
143
143
  }
144
144
  }
145
- function nt(t) {
146
- if (a && (_(a), a = null), t) return;
147
- const e = g;
148
- g = null, e.length && A(() => K(e));
145
+ function it(t) {
146
+ if (f && (H(f), f = null), t) return;
147
+ const e = h;
148
+ h = null, e.length && L(() => Z(e));
149
149
  }
150
- function _(t) {
151
- for (let e = 0; e < t.length; e++) H(t[e]);
150
+ function H(t) {
151
+ for (let e = 0; e < t.length; e++) j(t[e]);
152
152
  }
153
- function x(t, e) {
153
+ function w(t, e) {
154
154
  t.state = 0;
155
155
  for (let r = 0; r < t.sources.length; r += 1) {
156
156
  const n = t.sources[r];
157
157
  if (n.sources) {
158
158
  const s = n.state;
159
- s === m ? n !== e && (!n.updatedAt || n.updatedAt < E) && H(n) : s === w && x(n, e);
159
+ s === g ? n !== e && (!n.updatedAt || n.updatedAt < S) && j(n) : s === y && w(n, e);
160
160
  }
161
161
  }
162
162
  }
163
- function G(t) {
163
+ function _(t) {
164
164
  for (let e = 0; e < t.observers.length; e += 1) {
165
165
  const r = t.observers[e];
166
- r.state || (r.state = w, r.pure ? a.push(r) : g.push(r), r.observers && G(r));
166
+ r.state || (r.state = y, r.pure ? f.push(r) : h.push(r), r.observers && _(r));
167
167
  }
168
168
  }
169
- function d(t) {
169
+ function x(t) {
170
170
  let e;
171
171
  if (t.sources)
172
172
  for (; t.sources.length; ) {
@@ -177,11 +177,11 @@ function d(t) {
177
177
  }
178
178
  }
179
179
  if (t.tOwned) {
180
- for (e = t.tOwned.length - 1; e >= 0; e--) d(t.tOwned[e]);
180
+ for (e = t.tOwned.length - 1; e >= 0; e--) x(t.tOwned[e]);
181
181
  delete t.tOwned;
182
182
  }
183
183
  if (t.owned) {
184
- for (e = t.owned.length - 1; e >= 0; e--) d(t.owned[e]);
184
+ for (e = t.owned.length - 1; e >= 0; e--) x(t.owned[e]);
185
185
  t.owned = null;
186
186
  }
187
187
  if (t.cleanups) {
@@ -190,13 +190,13 @@ function d(t) {
190
190
  }
191
191
  t.state = 0;
192
192
  }
193
- function st(t) {
193
+ function ut(t) {
194
194
  return t instanceof Error ? t : new Error(typeof t == "string" ? t : "Unknown error", {
195
195
  cause: t
196
196
  });
197
197
  }
198
- function Q(t, e = c) {
199
- throw st(t);
198
+ function G(t, e = a) {
199
+ throw ut(t);
200
200
  }
201
201
  function V(t) {
202
202
  if (typeof t == "function" && !t.length) return V(t());
@@ -210,22 +210,22 @@ function V(t) {
210
210
  }
211
211
  return t;
212
212
  }
213
- function ut(t, e) {
213
+ function ct(t, e) {
214
214
  return function(n) {
215
215
  let s;
216
- return Z(
217
- () => s = P(() => (c.context = {
218
- ...c.context,
216
+ return et(
217
+ () => s = M(() => (a.context = {
218
+ ...a.context,
219
219
  [t]: n.value
220
- }, et(() => n.children))),
220
+ }, st(() => n.children))),
221
221
  void 0
222
222
  ), s;
223
223
  };
224
224
  }
225
- const it = (t) => {
225
+ const lt = (t) => {
226
226
  const e = t.target;
227
227
  return e instanceof HTMLSelectElement ? e.value : e instanceof HTMLInputElement && e.type === "checkbox" ? e.checked : e.value;
228
- }, M = (t, e) => {
228
+ }, D = (t, e) => {
229
229
  if (t instanceof HTMLSelectElement) {
230
230
  t.value = e;
231
231
  return;
@@ -235,7 +235,7 @@ const it = (t) => {
235
235
  return;
236
236
  }
237
237
  t.value = e;
238
- }, b = (t) => t instanceof RegExp || typeof t == "string" || typeof t == "number" ? t : t.value, v = (t) => typeof t == "string" ? t : typeof t.message == "string" ? t.message : "", ot = (t, e, r = {}) => {
238
+ }, b = (t) => t instanceof RegExp || typeof t == "string" || typeof t == "number" ? t : t.value, v = (t) => typeof t == "string" ? t : typeof t.message == "string" ? t.message : "", at = (t, e, r = {}) => {
239
239
  const n = t[e];
240
240
  if (r.required && !n)
241
241
  return { type: "required", message: v(r.required) };
@@ -256,73 +256,92 @@ const it = (t) => {
256
256
  if (typeof s == "string")
257
257
  return { type: "validate", message: s };
258
258
  }
259
- }, ft = ({
259
+ }, ft = () => {
260
+ const [t, e] = F({});
261
+ return {
262
+ errors: t,
263
+ appendError: (i, p) => {
264
+ e((m) => ({ ...m, [i]: p }));
265
+ },
266
+ removeError: (i) => {
267
+ e((p) => {
268
+ const m = { ...p };
269
+ return delete m[i], m;
270
+ });
271
+ },
272
+ resetErrors: () => {
273
+ e({});
274
+ }
275
+ };
276
+ }, mt = ({
260
277
  defaultValues: t,
261
278
  mode: e = "onInput"
262
279
  }) => {
263
- const r = {}, n = {}, [s, i] = F(t), [p, L] = F({}), [k, O] = F(!0), I = (u) => {
264
- const o = n[u], f = ot(s(), u, o);
265
- L(f ? (h) => ({ ...h, [u]: f }) : (h) => {
266
- const T = { ...h };
267
- return delete T[u], T;
268
- }), O(!Object.keys(p()).length);
269
- }, z = () => {
270
- Object.keys(s()).forEach((u) => {
271
- I(u);
280
+ const r = {}, n = {}, [s, i] = F(t), { errors: p, appendError: m, removeError: W, resetErrors: z } = ft(), [k, O] = F(!0), B = (o, u) => {
281
+ const c = r[o];
282
+ c && (u.ref = c), m(o, u);
283
+ }, J = (o) => {
284
+ W(o);
285
+ }, I = (o) => {
286
+ const u = n[o], c = at(s(), o, u);
287
+ c ? B(o, c) : J(o), O(!Object.keys(p()).length);
288
+ }, K = () => {
289
+ Object.keys(s()).forEach((o) => {
290
+ I(o);
272
291
  });
273
- }, N = (u, o) => {
274
- const f = it(u);
275
- i((h) => ({ ...h, [o]: f })), I(o);
276
- }, B = (u, o = {}) => (n[u] = {
277
- required: o.required,
278
- min: o.min,
279
- max: o.max,
280
- minLength: o.minLength,
281
- maxLength: o.maxLength,
282
- pattern: o.pattern,
283
- validate: o.validate
292
+ }, N = (o, u) => {
293
+ const c = lt(o);
294
+ i((E) => ({ ...E, [u]: c })), I(u);
295
+ }, X = (o, u = {}) => (n[o] = {
296
+ required: u.required,
297
+ min: u.min,
298
+ max: u.max,
299
+ minLength: u.minLength,
300
+ maxLength: u.maxLength,
301
+ pattern: u.pattern,
302
+ validate: u.validate
284
303
  }, {
285
- name: u,
304
+ name: o,
286
305
  // value: values()[name],
287
- onInput(f) {
288
- e === "onInput" && N(f, u);
306
+ onInput(c) {
307
+ e === "onInput" && N(c, o);
289
308
  },
290
- onChange(f) {
291
- (e === "onChange" || e === "onInput") && N(f, u);
309
+ onChange(c) {
310
+ (e === "onChange" || e === "onInput") && N(c, o);
292
311
  },
293
- ref(f) {
294
- r[u] || (r[u] = f, f && M(f, s()[u]));
312
+ ref(c) {
313
+ r[o] || (r[o] = c, c && D(c, s()[o]));
295
314
  }
296
- }), q = (u) => u ? s()[u] : s();
315
+ }), q = (o) => o ? s()[o] : s();
297
316
  return {
298
317
  values: s,
299
318
  errors: p,
300
319
  isValid: k,
301
- register: B,
320
+ register: X,
302
321
  getValues: q,
303
- setValue: (u, o) => {
304
- i((h) => ({ ...h, [u]: o }));
305
- const f = r[u];
306
- f && M(f, o);
322
+ setValue: (o, u) => {
323
+ i((E) => ({ ...E, [o]: u }));
324
+ const c = r[o];
325
+ c && D(c, u);
307
326
  },
308
- onSubmit: (u) => (o) => {
309
- o.preventDefault(), z(), k() && u(q());
327
+ onSubmit: (o) => (u) => {
328
+ u.preventDefault(), K(), k() && o(q());
310
329
  },
311
- reset: (u = {}) => {
330
+ reset: (o = {}) => {
312
331
  i(() => ({
313
332
  ...t,
314
- ...u
315
- })), L({}), O(!0);
333
+ ...o
334
+ })), z(), O(!0);
316
335
  }
317
336
  };
318
- }, W = $({}), pt = (t) => /* @__PURE__ */ React.createElement(W.Provider, { value: t.form }, t.children), ht = () => {
319
- const t = tt(W);
337
+ }, Q = rt({}), vt = (t) => /* @__PURE__ */ React.createElement(Q.Provider, { value: t.form }, t.children), bt = () => {
338
+ const t = nt(Q);
320
339
  if (!t)
321
340
  throw new Error("useFormContext: cannot find a FormProvider");
322
341
  return t;
323
342
  };
324
343
  export {
325
- pt as FormProvider,
326
- ft as useForm,
327
- ht as useFormContext
344
+ vt as FormProvider,
345
+ mt as useForm,
346
+ bt as useFormContext
328
347
  };
package/dist/main.umd.cjs CHANGED
@@ -1 +1 @@
1
- (function(h,y){typeof exports=="object"&&typeof module<"u"?y(exports):typeof define=="function"&&define.amd?define(["exports"],y):(h=typeof globalThis<"u"?globalThis:h||self,y(h["solid-hook-form"]={}))})(this,function(h){"use strict";const w={equals:(t,e)=>t===e};let J=j;const m=1,x=2,K={};var o=null;let C=null,X=null,l=null,a=null,v=null,S=0;function k(t,e){e=e?Object.assign({},w,e):w;const n={value:t,observers:null,observerSlots:null,comparator:e.equals||void 0},r=s=>(typeof s=="function"&&(s=s(n.value)),N(n,s));return[q.bind(n),r]}function Y(t,e,n){const r=P(t,e,!1,m);E(r)}function T(t,e,n){n=n?Object.assign({},w,n):w;const r=P(t,e,!0,0);return r.observers=null,r.observerSlots=null,r.comparator=n.equals||void 0,E(r),q.bind(r)}function I(t){if(l===null)return t();const e=l;l=null;try{return t()}finally{l=e}}function Z(t,e){const n=Symbol("context");return{id:n,Provider:st(n),defaultValue:t}}function $(t){let e;return o&&o.context&&(e=o.context[t.id])!==void 0?e:t.defaultValue}function tt(t){const e=T(t),n=T(()=>O(e()));return n.toArray=()=>{const r=n();return Array.isArray(r)?r:r!=null?[r]:[]},n}function q(){if(this.sources&&this.state)if(this.state===m)E(this);else{const t=a;a=null,A(()=>L(this)),a=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 N(t,e,n){let r=t.value;return(!t.comparator||!t.comparator(r,e))&&(t.value=e,t.observers&&t.observers.length&&A(()=>{for(let s=0;s<t.observers.length;s+=1){const u=t.observers[s],p=C&&C.running;p&&C.disposed.has(u),(p?!u.tState:!u.state)&&(u.pure?a.push(u):v.push(u),u.observers&&D(u)),p||(u.state=m)}if(a.length>1e6)throw a=[],new Error})),e}function E(t){if(!t.fn)return;F(t);const e=S;et(t,t.value,e)}function et(t,e,n){let r;const s=o,u=l;l=o=t;try{r=t.fn(e)}catch(p){return t.pure&&(t.state=m,t.owned&&t.owned.forEach(F),t.owned=null),t.updatedAt=n+1,R(p)}finally{l=u,o=s}(!t.updatedAt||t.updatedAt<=n)&&(t.updatedAt!=null&&"observers"in t?N(t,r):t.value=r,t.updatedAt=n)}function P(t,e,n,r=m,s){const u={fn:t,state:r,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:e,owner:o,context:o?o.context:null,pure:n};return o===null||o!==K&&(o.owned?o.owned.push(u):o.owned=[u]),u}function M(t){if(t.state===0)return;if(t.state===x)return L(t);if(t.suspense&&I(t.suspense.inFallback))return t.suspense.effects.push(t);const e=[t];for(;(t=t.owner)&&(!t.updatedAt||t.updatedAt<S);)t.state&&e.push(t);for(let n=e.length-1;n>=0;n--)if(t=e[n],t.state===m)E(t);else if(t.state===x){const r=a;a=null,A(()=>L(t,e[0])),a=r}}function A(t,e){if(a)return t();let n=!1;a=[],v?n=!0:v=[],S++;try{const r=t();return nt(n),r}catch(r){n||(v=null),a=null,R(r)}}function nt(t){if(a&&(j(a),a=null),t)return;const e=v;v=null,e.length&&A(()=>J(e))}function j(t){for(let e=0;e<t.length;e++)M(t[e])}function L(t,e){t.state=0;for(let n=0;n<t.sources.length;n+=1){const r=t.sources[n];if(r.sources){const s=r.state;s===m?r!==e&&(!r.updatedAt||r.updatedAt<S)&&M(r):s===x&&L(r,e)}}}function D(t){for(let e=0;e<t.observers.length;e+=1){const n=t.observers[e];n.state||(n.state=x,n.pure?a.push(n):v.push(n),n.observers&&D(n))}}function F(t){let e;if(t.sources)for(;t.sources.length;){const n=t.sources.pop(),r=t.sourceSlots.pop(),s=n.observers;if(s&&s.length){const u=s.pop(),p=n.observerSlots.pop();r<s.length&&(u.sourceSlots[p]=r,s[r]=u,n.observerSlots[r]=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 rt(t){return t instanceof Error?t:new Error(typeof t=="string"?t:"Unknown error",{cause:t})}function R(t,e=o){throw rt(t)}function O(t){if(typeof t=="function"&&!t.length)return O(t());if(Array.isArray(t)){const e=[];for(let n=0;n<t.length;n++){const r=O(t[n]);Array.isArray(r)?e.push.apply(e,r):e.push(r)}return e}return t}function st(t,e){return function(r){let s;return Y(()=>s=I(()=>(o.context={...o.context,[t]:r.value},tt(()=>r.children))),void 0),s}}const it=t=>{const e=t.target;return e instanceof HTMLSelectElement?e.value:e instanceof HTMLInputElement&&e.type==="checkbox"?e.checked:e.value},U=(t,e)=>{if(t instanceof HTMLSelectElement){t.value=e;return}if(t instanceof HTMLInputElement&&t.type==="checkbox"){t.checked=e;return}t.value=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:"",ut=(t,e,n={})=>{const r=t[e];if(n.required&&!r)return{type:"required",message:b(n.required)};if(n.min&&Number(r)<Number(d(n.min)))return{type:"min",message:b(n.min)};if(n.max&&Number(r)>Number(d(n.max)))return{type:"max",message:b(n.max)};if(n.minLength&&r.length<d(n.minLength))return{type:"minLength",message:b(n.minLength)};if(n.maxLength&&r.length>d(n.maxLength))return{type:"maxLength",message:b(n.maxLength)};if(n.pattern&&!d(n.pattern).test(r))return{type:"pattern",message:b(n.pattern)};if(n.validate){const s=n.validate(r,t);if(s===!1)return{type:"validate"};if(typeof s=="string")return{type:"validate",message:s}}},ot=({defaultValues:t,mode:e="onInput"})=>{const n={},r={},[s,u]=k(t),[p,V]=k({}),[_,G]=k(!0),Q=i=>{const c=r[i],f=ut(s(),i,c);V(f?g=>({...g,[i]:f}):g=>{const B={...g};return delete B[i],B}),G(!Object.keys(p()).length)},at=()=>{Object.keys(s()).forEach(i=>{Q(i)})},W=(i,c)=>{const f=it(i);u(g=>({...g,[c]:f})),Q(c)},ft=(i,c={})=>(r[i]={required:c.required,min:c.min,max:c.max,minLength:c.minLength,maxLength:c.maxLength,pattern:c.pattern,validate:c.validate},{name:i,onInput(f){e==="onInput"&&W(f,i)},onChange(f){(e==="onChange"||e==="onInput")&&W(f,i)},ref(f){n[i]||(n[i]=f,f&&U(f,s()[i]))}}),z=i=>i?s()[i]:s();return{values:s,errors:p,isValid:_,register:ft,getValues:z,setValue:(i,c)=>{u(g=>({...g,[i]:c}));const f=n[i];f&&U(f,c)},onSubmit:i=>c=>{c.preventDefault(),at(),_()&&i(z())},reset:(i={})=>{u(()=>({...t,...i})),V({}),G(!0)}}},H=Z({}),lt=t=>React.createElement(H.Provider,{value:t.form},t.children),ct=()=>{const t=$(H);if(!t)throw new Error("useFormContext: cannot find a FormProvider");return t};h.FormProvider=lt,h.useForm=ot,h.useFormContext=ct,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"})});
1
+ (function(h,y){typeof exports=="object"&&typeof module<"u"?y(exports):typeof define=="function"&&define.amd?define(["exports"],y):(h=typeof globalThis<"u"?globalThis:h||self,y(h["solid-hook-form"]={}))})(this,function(h){"use strict";const E={equals:(t,e)=>t===e};let B=j;const g=1,w=2,J={};var c=null;let k=null,K=null,a=null,f=null,m=null,x=0;function O(t,e){e=e?Object.assign({},E,e):E;const r={value:t,observers:null,observerSlots:null,comparator:e.equals||void 0},n=s=>(typeof s=="function"&&(s=s(r.value)),N(r,s));return[q.bind(r),n]}function X(t,e,r){const n=P(t,e,!1,g);S(n)}function T(t,e,r){r=r?Object.assign({},E,r):E;const n=P(t,e,!0,0);return n.observers=null,n.observerSlots=null,n.comparator=r.equals||void 0,S(n),q.bind(n)}function I(t){if(a===null)return t();const e=a;a=null;try{return t()}finally{a=e}}function Y(t,e){const r=Symbol("context");return{id:r,Provider:nt(r),defaultValue:t}}function Z(t){let e;return c&&c.context&&(e=c.context[t.id])!==void 0?e:t.defaultValue}function $(t){const e=T(t),r=T(()=>V(e()));return r.toArray=()=>{const n=r();return Array.isArray(n)?n:n!=null?[n]:[]},r}function q(){if(this.sources&&this.state)if(this.state===g)S(this);else{const t=f;f=null,A(()=>F(this)),f=t}if(a){const t=this.observers?this.observers.length:0;a.sources?(a.sources.push(this),a.sourceSlots.push(t)):(a.sources=[this],a.sourceSlots=[t]),this.observers?(this.observers.push(a),this.observerSlots.push(a.sources.length-1)):(this.observers=[a],this.observerSlots=[a.sources.length-1])}return this.value}function N(t,e,r){let n=t.value;return(!t.comparator||!t.comparator(n,e))&&(t.value=e,t.observers&&t.observers.length&&A(()=>{for(let s=0;s<t.observers.length;s+=1){const i=t.observers[s],p=k&&k.running;p&&k.disposed.has(i),(p?!i.tState:!i.state)&&(i.pure?f.push(i):m.push(i),i.observers&&D(i)),p||(i.state=g)}if(f.length>1e6)throw f=[],new Error})),e}function S(t){if(!t.fn)return;L(t);const e=x;tt(t,t.value,e)}function tt(t,e,r){let n;const s=c,i=a;a=c=t;try{n=t.fn(e)}catch(p){return t.pure&&(t.state=g,t.owned&&t.owned.forEach(L),t.owned=null),t.updatedAt=r+1,R(p)}finally{a=i,c=s}(!t.updatedAt||t.updatedAt<=r)&&(t.updatedAt!=null&&"observers"in t?N(t,n):t.value=n,t.updatedAt=r)}function P(t,e,r,n=g,s){const i={fn:t,state:n,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:e,owner:c,context:c?c.context:null,pure:r};return c===null||c!==J&&(c.owned?c.owned.push(i):c.owned=[i]),i}function M(t){if(t.state===0)return;if(t.state===w)return F(t);if(t.suspense&&I(t.suspense.inFallback))return t.suspense.effects.push(t);const e=[t];for(;(t=t.owner)&&(!t.updatedAt||t.updatedAt<x);)t.state&&e.push(t);for(let r=e.length-1;r>=0;r--)if(t=e[r],t.state===g)S(t);else if(t.state===w){const n=f;f=null,A(()=>F(t,e[0])),f=n}}function A(t,e){if(f)return t();let r=!1;f=[],m?r=!0:m=[],x++;try{const n=t();return et(r),n}catch(n){r||(m=null),f=null,R(n)}}function et(t){if(f&&(j(f),f=null),t)return;const e=m;m=null,e.length&&A(()=>B(e))}function j(t){for(let e=0;e<t.length;e++)M(t[e])}function F(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===g?n!==e&&(!n.updatedAt||n.updatedAt<x)&&M(n):s===w&&F(n,e)}}}function D(t){for(let e=0;e<t.observers.length;e+=1){const r=t.observers[e];r.state||(r.state=w,r.pure?f.push(r):m.push(r),r.observers&&D(r))}}function L(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--)L(t.tOwned[e]);delete t.tOwned}if(t.owned){for(e=t.owned.length-1;e>=0;e--)L(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 rt(t){return t instanceof Error?t:new Error(typeof t=="string"?t:"Unknown error",{cause:t})}function R(t,e=c){throw rt(t)}function V(t){if(typeof t=="function"&&!t.length)return V(t());if(Array.isArray(t)){const e=[];for(let r=0;r<t.length;r++){const n=V(t[r]);Array.isArray(n)?e.push.apply(e,n):e.push(n)}return e}return t}function nt(t,e){return function(n){let s;return X(()=>s=I(()=>(c.context={...c.context,[t]:n.value},$(()=>n.children))),void 0),s}}const st=t=>{const e=t.target;return e instanceof HTMLSelectElement?e.value:e instanceof HTMLInputElement&&e.type==="checkbox"?e.checked:e.value},U=(t,e)=>{if(t instanceof HTMLSelectElement){t.value=e;return}if(t instanceof HTMLInputElement&&t.type==="checkbox"){t.checked=e;return}t.value=e},b=t=>t instanceof RegExp||typeof t=="string"||typeof t=="number"?t:t.value,v=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:v(r.required)};if(r.min&&Number(n)<Number(b(r.min)))return{type:"min",message:v(r.min)};if(r.max&&Number(n)>Number(b(r.max)))return{type:"max",message:v(r.max)};if(r.minLength&&n.length<b(r.minLength))return{type:"minLength",message:v(r.minLength)};if(r.maxLength&&n.length>b(r.maxLength))return{type:"maxLength",message:v(r.maxLength)};if(r.pattern&&!b(r.pattern).test(n))return{type:"pattern",message:v(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}}},it=()=>{const[t,e]=O({});return{errors:t,appendError:(i,p)=>{e(d=>({...d,[i]:p}))},removeError:i=>{e(p=>{const d={...p};return delete d[i],d})},resetErrors:()=>{e({})}}},ut=({defaultValues:t,mode:e="onInput"})=>{const r={},n={},[s,i]=O(t),{errors:p,appendError:d,removeError:at,resetErrors:ft}=it(),[_,G]=O(!0),pt=(o,u)=>{const l=r[o];l&&(u.ref=l),d(o,u)},ht=o=>{at(o)},Q=o=>{const u=n[o],l=ot(s(),o,u);l?pt(o,l):ht(o),G(!Object.keys(p()).length)},gt=()=>{Object.keys(s()).forEach(o=>{Q(o)})},W=(o,u)=>{const l=st(o);i(C=>({...C,[u]:l})),Q(u)},mt=(o,u={})=>(n[o]={required:u.required,min:u.min,max:u.max,minLength:u.minLength,maxLength:u.maxLength,pattern:u.pattern,validate:u.validate},{name:o,onInput(l){e==="onInput"&&W(l,o)},onChange(l){(e==="onChange"||e==="onInput")&&W(l,o)},ref(l){r[o]||(r[o]=l,l&&U(l,s()[o]))}}),z=o=>o?s()[o]:s();return{values:s,errors:p,isValid:_,register:mt,getValues:z,setValue:(o,u)=>{i(C=>({...C,[o]:u}));const l=r[o];l&&U(l,u)},onSubmit:o=>u=>{u.preventDefault(),gt(),_()&&o(z())},reset:(o={})=>{i(()=>({...t,...o})),ft(),G(!0)}}},H=Y({}),lt=t=>React.createElement(H.Provider,{value:t.form},t.children),ct=()=>{const t=Z(H);if(!t)throw new Error("useFormContext: cannot find a FormProvider");return t};h.FormProvider=lt,h.useForm=ut,h.useFormContext=ct,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"})});
@@ -1,21 +1,11 @@
1
1
  import { FormValues } from './form';
2
- import { BrowserNativeObject, IsAny, LiteralUnion, Merge } from './utils';
2
+ import { Path } from './path';
3
+ import { LiteralUnion } from './utils';
3
4
  import { Rules } from './validate';
5
+ export type Message = string;
4
6
  export type FieldError = {
5
7
  type: LiteralUnion<keyof Rules, string>;
8
+ ref?: HTMLElement;
6
9
  message?: Message;
7
10
  };
8
- export type Message = string;
9
- export type GlobalError = Partial<{
10
- type: string | number;
11
- message: Message;
12
- }>;
13
- export type DeepRequired<T> = T extends BrowserNativeObject | Blob ? T : {
14
- [K in keyof T]-?: NonNullable<DeepRequired<T[K]>>;
15
- };
16
- export type FieldErrorsImpl<T extends FormValues = FormValues> = {
17
- [K in keyof T]?: T[K] extends BrowserNativeObject | Blob ? FieldError : K extends "root" | `root.${string}` ? GlobalError : T[K] extends object ? Merge<FieldError, FieldErrorsImpl<T[K]>> : FieldError;
18
- };
19
- export type FieldErrors<T extends FormValues = FormValues> = Partial<FormValues extends IsAny<FormValues> ? any : FieldErrorsImpl<DeepRequired<T>>> & {
20
- root?: Record<string, GlobalError> & GlobalError;
21
- };
11
+ export type FieldErrors<F extends FormValues = FormValues> = Partial<Record<Path<F>, FieldError>>;
@@ -3,9 +3,10 @@ import { FieldPath, FieldPathValue, Path } from './path';
3
3
  import { Rules } from './validate';
4
4
  import { FieldErrors } from './errors';
5
5
  export type FormValues = Record<string, any>;
6
+ export type Ref = HTMLElement | null;
6
7
  type RegisterReturn<F extends FormValues> = {
7
8
  name: Path<F>;
8
- ref(ref: HTMLElement | null): void;
9
+ ref(ref: Ref): void;
9
10
  onInput(event: Event): void;
10
11
  onChange(event: Event): void;
11
12
  };
@@ -28,4 +29,5 @@ export type UseFormReturn<F extends FormValues = FormValues> = {
28
29
  onSubmit: OnSubmit<F>;
29
30
  reset: Reset<F>;
30
31
  };
32
+ export type FormFields = Record<string, Ref>;
31
33
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "solid-hook-form",
3
- "version": "1.3.0",
3
+ "version": "1.3.1",
4
4
  "type": "module",
5
5
  "main": "./dist/main.umd.cjs",
6
6
  "module": "./dist/main.js",