solid-hook-form 1.3.5 → 1.4.0

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.
@@ -1 +1 @@
1
- export declare const FormContext: import('solid-js').Context<{}>;
1
+ export declare const FormContext: import('solid-js').Context<unknown>;
@@ -1 +1 @@
1
- export declare const getFieldValue: (event: Event) => string | boolean;
1
+ export declare const getFieldValue: (event: Event) => string | boolean | FileList | null;
package/dist/main.js CHANGED
@@ -1,8 +1,8 @@
1
- import { createSignal as p, createContext as M, createComponent as S, useContext as y } from "solid-js";
2
- const H = (e) => {
1
+ import { createSignal as d, createContext as H, createComponent as T, useContext as q } from "solid-js";
2
+ const S = (e) => {
3
3
  const n = e.target;
4
- return n instanceof HTMLSelectElement ? n.value : n instanceof HTMLInputElement && n.type === "checkbox" ? n.checked : n.value;
5
- }, L = (e, n) => {
4
+ return n instanceof HTMLSelectElement ? n.value : n instanceof HTMLInputElement && n.type === "checkbox" ? n.checked : n instanceof HTMLInputElement && n.type === "file" ? n.files : n.value;
5
+ }, y = (e, n) => {
6
6
  if (e instanceof HTMLSelectElement) {
7
7
  e.value = n;
8
8
  return;
@@ -11,65 +11,75 @@ const H = (e) => {
11
11
  e.checked = n;
12
12
  return;
13
13
  }
14
- e.value = n;
15
- }, m = (e) => e instanceof RegExp || typeof e == "string" || typeof e == "number" ? e : e.value, g = (e) => typeof e == "string" ? e : typeof e.message == "string" ? e.message : "", N = (e, n, r = {}) => {
14
+ e instanceof HTMLInputElement && e.type === "file" || (e.value = n);
15
+ }, p = (e) => e instanceof RegExp || typeof e == "string" || typeof e == "number" ? e : e.value, g = (e) => typeof e == "string" ? e : typeof e.message == "string" ? e.message : "", N = (e, n, r = {}) => {
16
16
  const i = e[n];
17
17
  if (r.required && !i)
18
18
  return { type: "required", message: g(r.required) };
19
- if (r.min && Number(i) < Number(m(r.min)))
19
+ if (r.min && Number(i) < Number(p(r.min)))
20
20
  return { type: "min", message: g(r.min) };
21
- if (r.max && Number(i) > Number(m(r.max)))
21
+ if (r.max && Number(i) > Number(p(r.max)))
22
22
  return { type: "max", message: g(r.max) };
23
- if (r.minLength && i.length < m(r.minLength))
23
+ if (r.minLength && i.length < p(r.minLength))
24
24
  return { type: "minLength", message: g(r.minLength) };
25
- if (r.maxLength && i.length > m(r.maxLength))
25
+ if (r.maxLength && i.length > p(r.maxLength))
26
26
  return { type: "maxLength", message: g(r.maxLength) };
27
- if (r.pattern && !m(r.pattern).test(i))
27
+ if (r.pattern && !p(r.pattern).test(i))
28
28
  return { type: "pattern", message: g(r.pattern) };
29
29
  if (r.validate) {
30
- const a = r.validate(i, e);
31
- if (a === !1)
30
+ const c = r.validate(i, e);
31
+ if (c === !1)
32
32
  return { type: "validate" };
33
- if (typeof a == "string")
34
- return { type: "validate", message: a };
33
+ if (typeof c == "string")
34
+ return { type: "validate", message: c };
35
35
  }
36
- }, T = () => {
37
- const [e, n] = p({});
36
+ }, j = () => {
37
+ const [e, n] = d({});
38
38
  return {
39
39
  errors: e,
40
- appendError: (c, f) => {
41
- n((u) => ({ ...u, [c]: f }));
40
+ appendError: (a, f) => {
41
+ n((m) => ({ ...m, [a]: f }));
42
42
  },
43
- removeError: (c) => {
43
+ removeError: (a) => {
44
44
  n((f) => {
45
- const u = { ...f };
46
- return delete u[c], u;
45
+ const m = { ...f };
46
+ return delete m[a], m;
47
47
  });
48
48
  },
49
49
  resetErrors: () => {
50
50
  n({});
51
51
  }
52
52
  };
53
- }, O = ({
53
+ }, A = ({
54
54
  defaultValues: e,
55
55
  mode: n = "onInput"
56
56
  }) => {
57
- const r = {}, i = {}, [a, c] = p(e), { errors: f, appendError: u, removeError: b, resetErrors: C } = T(), [h, l] = p(!0), V = (t, o) => {
57
+ const r = {}, i = {}, [c, a] = d(e), { errors: f, appendError: m, removeError: F, resetErrors: b } = j(), [l, h] = d(!0), C = (t, o) => {
58
58
  const s = r[t];
59
- s && (o.ref = s), u(t, o);
59
+ s && (o.ref = s), m(t, o);
60
60
  }, I = (t) => {
61
- b(t);
62
- }, x = (t) => {
63
- const o = i[t], s = N(a(), t, o);
64
- s ? V(t, s) : I(t), l(!Object.keys(f()).length);
61
+ F(t);
62
+ }, E = (t) => {
63
+ const o = i[t], s = N(c(), t, o);
64
+ s ? C(t, s) : I(t), h(!Object.keys(f()).length);
65
65
  }, k = () => {
66
- Object.keys(a()).forEach((t) => {
67
- x(t);
66
+ Object.keys(c()).forEach((t) => {
67
+ E(t);
68
68
  });
69
+ }, V = () => {
70
+ var o;
71
+ const t = Object.keys(r);
72
+ for (const s of t) {
73
+ const u = f()[s];
74
+ if (u) {
75
+ (o = u.ref) == null || o.focus();
76
+ break;
77
+ }
78
+ }
69
79
  }, v = (t, o) => {
70
- const s = H(t);
71
- c((d) => ({ ...d, [o]: s })), x(o);
72
- }, q = (t, o = {}) => (i[t] = {
80
+ const s = S(t);
81
+ a((u) => ({ ...u, [o]: s })), E(o);
82
+ }, M = (t, o = {}) => (i[t] = {
73
83
  required: o.required,
74
84
  min: o.min,
75
85
  max: o.max,
@@ -87,46 +97,45 @@ const H = (e) => {
87
97
  (n === "onChange" || n === "onInput") && v(s, t);
88
98
  },
89
99
  ref(s) {
90
- r[t] || (r[t] = s, s && L(s, a()[t]));
100
+ r[t] || (r[t] = s, s && y(s, c()[t]));
91
101
  }
92
- }), E = (t) => t ? a()[t] : a();
102
+ }), x = (t) => t ? c()[t] : c();
93
103
  return {
94
- values: a,
104
+ values: c,
95
105
  errors: f,
96
- isValid: h,
97
- register: q,
98
- getValues: E,
106
+ isValid: l,
107
+ register: M,
108
+ getValues: x,
99
109
  setValue: (t, o) => {
100
- c((d) => ({ ...d, [t]: o }));
110
+ a((u) => ({ ...u, [t]: o }));
101
111
  const s = r[t];
102
- s && L(s, o);
112
+ s && y(s, o);
103
113
  },
104
114
  onSubmit: (t) => (o) => {
105
- o.preventDefault(), k(), h() && t(E());
115
+ o.preventDefault(), k(), l() && t(x()), V();
106
116
  },
107
117
  reset: (t = {}) => {
108
- c(() => ({
118
+ a(() => ({
109
119
  ...e,
110
120
  ...t
111
- })), C(), l(!0);
121
+ })), b(), h(!0);
112
122
  }
113
123
  };
114
- }, F = M({}), A = (e) => S(F.Provider, {
124
+ }, L = H(), D = (e) => T(L.Provider, {
115
125
  get value() {
116
126
  return e.form;
117
127
  },
118
128
  get children() {
119
129
  return e.children;
120
130
  }
121
- }), D = () => {
122
- const e = y(F);
123
- if (console.log("context", e, y), !e)
131
+ }), z = () => {
132
+ const e = q(L);
133
+ if (!e)
124
134
  throw new Error("useFormContext: cannot find a FormProvider");
125
135
  return e;
126
136
  };
127
137
  export {
128
- A as FormProvider,
129
- O as useForm,
130
- D as useFormContext
138
+ D as FormProvider,
139
+ A as useForm,
140
+ z as useFormContext
131
141
  };
132
- //# sourceMappingURL=main.js.map
package/dist/main.umd.cjs CHANGED
@@ -1,2 +1 @@
1
- (function(f,s){typeof exports=="object"&&typeof module<"u"?s(exports,require("solid-js")):typeof define=="function"&&define.amd?define(["exports","solid-js"],s):(f=typeof globalThis<"u"?globalThis:f||self,s(f["solid-hook-form"]={},f.solid))})(this,function(f,s){"use strict";const b=e=>{const n=e.target;return n instanceof HTMLSelectElement?n.value:n instanceof HTMLInputElement&&n.type==="checkbox"?n.checked:n.value},l=(e,n)=>{if(e instanceof HTMLSelectElement){e.value=n;return}if(e instanceof HTMLInputElement&&e.type==="checkbox"){e.checked=n;return}e.value=n},p=e=>e instanceof RegExp||typeof e=="string"||typeof e=="number"?e:e.value,g=e=>typeof e=="string"?e:typeof e.message=="string"?e.message:"",C=(e,n,r={})=>{const c=e[n];if(r.required&&!c)return{type:"required",message:g(r.required)};if(r.min&&Number(c)<Number(p(r.min)))return{type:"min",message:g(r.min)};if(r.max&&Number(c)>Number(p(r.max)))return{type:"max",message:g(r.max)};if(r.minLength&&c.length<p(r.minLength))return{type:"minLength",message:g(r.minLength)};if(r.maxLength&&c.length>p(r.maxLength))return{type:"maxLength",message:g(r.maxLength)};if(r.pattern&&!p(r.pattern).test(c))return{type:"pattern",message:g(r.pattern)};if(r.validate){const a=r.validate(c,e);if(a===!1)return{type:"validate"};if(typeof a=="string")return{type:"validate",message:a}}},S=()=>{const[e,n]=s.createSignal({});return{errors:e,appendError:(u,m)=>{n(d=>({...d,[u]:m}))},removeError:u=>{n(m=>{const d={...m};return delete d[u],d})},resetErrors:()=>{n({})}}},V=({defaultValues:e,mode:n="onInput"})=>{const r={},c={},[a,u]=s.createSignal(e),{errors:m,appendError:d,removeError:T,resetErrors:j}=S(),[x,y]=s.createSignal(!0),q=(t,o)=>{const i=r[t];i&&(o.ref=i),d(t,o)},M=t=>{T(t)},E=t=>{const o=c[t],i=C(a(),t,o);i?q(t,i):M(t),y(!Object.keys(m()).length)},P=()=>{Object.keys(a()).forEach(t=>{E(t)})},F=(t,o)=>{const i=b(t);u(h=>({...h,[o]:i})),E(o)},H=(t,o={})=>(c[t]={required:o.required,min:o.min,max:o.max,minLength:o.minLength,maxLength:o.maxLength,pattern:o.pattern,validate:o.validate},{name:t,onInput(i){n==="onInput"&&F(i,t)},onChange(i){(n==="onChange"||n==="onInput")&&F(i,t)},ref(i){r[t]||(r[t]=i,i&&l(i,a()[t]))}}),L=t=>t?a()[t]:a();return{values:a,errors:m,isValid:x,register:H,getValues:L,setValue:(t,o)=>{u(h=>({...h,[t]:o}));const i=r[t];i&&l(i,o)},onSubmit:t=>o=>{o.preventDefault(),P(),x()&&t(L())},reset:(t={})=>{u(()=>({...e,...t})),j(),y(!0)}}},v=s.createContext({}),k=e=>s.createComponent(v.Provider,{get value(){return e.form},get children(){return e.children}}),I=()=>{const e=s.useContext(v);if(console.log("context",e,s.useContext),!e)throw new Error("useFormContext: cannot find a FormProvider");return e};f.FormProvider=k,f.useForm=V,f.useFormContext=I,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})});
2
- //# sourceMappingURL=main.umd.cjs.map
1
+ (function(f,a){typeof exports=="object"&&typeof module<"u"?a(exports,require("solid-js")):typeof define=="function"&&define.amd?define(["exports","solid-js"],a):(f=typeof globalThis<"u"?globalThis:f||self,a(f["solid-hook-form"]={},f.solid))})(this,function(f,a){"use strict";const b=e=>{const n=e.target;return n instanceof HTMLSelectElement?n.value:n instanceof HTMLInputElement&&n.type==="checkbox"?n.checked:n instanceof HTMLInputElement&&n.type==="file"?n.files:n.value},h=(e,n)=>{if(e instanceof HTMLSelectElement){e.value=n;return}if(e instanceof HTMLInputElement&&e.type==="checkbox"){e.checked=n;return}e instanceof HTMLInputElement&&e.type==="file"||(e.value=n)},l=e=>e instanceof RegExp||typeof e=="string"||typeof e=="number"?e:e.value,d=e=>typeof e=="string"?e:typeof e.message=="string"?e.message:"",C=(e,n,r={})=>{const s=e[n];if(r.required&&!s)return{type:"required",message:d(r.required)};if(r.min&&Number(s)<Number(l(r.min)))return{type:"min",message:d(r.min)};if(r.max&&Number(s)>Number(l(r.max)))return{type:"max",message:d(r.max)};if(r.minLength&&s.length<l(r.minLength))return{type:"minLength",message:d(r.minLength)};if(r.maxLength&&s.length>l(r.maxLength))return{type:"maxLength",message:d(r.maxLength)};if(r.pattern&&!l(r.pattern).test(s))return{type:"pattern",message:d(r.pattern)};if(r.validate){const c=r.validate(s,e);if(c===!1)return{type:"validate"};if(typeof c=="string")return{type:"validate",message:c}}},k=()=>{const[e,n]=a.createSignal({});return{errors:e,appendError:(u,m)=>{n(p=>({...p,[u]:m}))},removeError:u=>{n(m=>{const p={...m};return delete p[u],p})},resetErrors:()=>{n({})}}},I=({defaultValues:e,mode:n="onInput"})=>{const r={},s={},[c,u]=a.createSignal(e),{errors:m,appendError:p,removeError:M,resetErrors:V}=k(),[v,E]=a.createSignal(!0),j=(t,o)=>{const i=r[t];i&&(o.ref=i),p(t,o)},q=t=>{M(t)},x=t=>{const o=s[t],i=C(c(),t,o);i?j(t,i):q(t),E(!Object.keys(m()).length)},H=()=>{Object.keys(c()).forEach(t=>{x(t)})},P=()=>{var o;const t=Object.keys(r);for(const i of t){const g=m()[i];if(g){(o=g.ref)==null||o.focus();break}}},L=(t,o)=>{const i=b(t);u(g=>({...g,[o]:i})),x(o)},N=(t,o={})=>(s[t]={required:o.required,min:o.min,max:o.max,minLength:o.minLength,maxLength:o.maxLength,pattern:o.pattern,validate:o.validate},{name:t,onInput(i){n==="onInput"&&L(i,t)},onChange(i){(n==="onChange"||n==="onInput")&&L(i,t)},ref(i){r[t]||(r[t]=i,i&&h(i,c()[t]))}}),F=t=>t?c()[t]:c();return{values:c,errors:m,isValid:v,register:N,getValues:F,setValue:(t,o)=>{u(g=>({...g,[t]:o}));const i=r[t];i&&h(i,o)},onSubmit:t=>o=>{o.preventDefault(),H(),v()&&t(F()),P()},reset:(t={})=>{u(()=>({...e,...t})),V(),E(!0)}}},y=a.createContext(),S=e=>a.createComponent(y.Provider,{get value(){return e.form},get children(){return e.children}}),T=()=>{const e=a.useContext(y);if(!e)throw new Error("useFormContext: cannot find a FormProvider");return e};f.FormProvider=S,f.useForm=I,f.useFormContext=T,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "solid-hook-form",
3
- "version": "1.3.5",
3
+ "version": "1.4.0",
4
4
  "type": "module",
5
5
  "main": "./dist/main.umd.cjs",
6
6
  "module": "./dist/main.js",
package/dist/main.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"main.js","sources":["../src/logic/get_value.ts","../src/logic/set_value.ts","../src/logic/validate.ts","../src/logic/create_errors.ts","../src/use_form.ts","../src/form_context.ts","../src/form_provider.tsx","../src/use_form_context.ts"],"sourcesContent":["export const getFieldValue = (event: Event) => {\n const field = event.target;\n\n if (field instanceof HTMLSelectElement) {\n return field.value;\n }\n\n if (field instanceof HTMLInputElement && field.type === \"checkbox\") {\n return field.checked;\n }\n\n return (field as HTMLInputElement).value;\n};\n","export const setFieldValue = (field: HTMLElement, value: any) => {\n if (field instanceof HTMLSelectElement) {\n field.value = value;\n\n return;\n }\n\n if (field instanceof HTMLInputElement && field.type === \"checkbox\") {\n field.checked = value;\n\n return;\n }\n\n (field as HTMLInputElement).value = 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 { FieldError, FieldErrors } from \"../types/errors\";\nimport { FormValues } from \"../types/form\";\nimport { Path } from \"../types/path\";\n\nexport const createErrors = <F extends FormValues>() => {\n const [errors, setErrors] = createSignal<FieldErrors<F>>({});\n\n const appendError = (name: Path<F>, error: FieldError) => {\n setErrors((prev) => ({ ...prev, [name]: error }));\n };\n\n const removeError = (name: Path<F>) => {\n setErrors((prev) => {\n const errors = { ...prev };\n\n delete errors[name];\n return errors;\n });\n };\n\n const resetErrors = () => {\n setErrors({});\n };\n\n return {\n errors,\n appendError,\n removeError,\n resetErrors,\n };\n};\n","import { createSignal } from \"solid-js\";\nimport {\n FormFields,\n FormValues,\n GetValues,\n OnSubmit,\n Register,\n Reset,\n SetValue,\n UseFormReturn,\n} from \"./types/form\";\nimport { Path } from \"./types/path\";\nimport { FieldError } from \"./types/errors\";\nimport { getFieldValue } from \"./logic/get_value\";\nimport { setFieldValue } from \"./logic/set_value\";\nimport { Rules } from \"./types/validate\";\nimport { validate } from \"./logic/validate\";\nimport { createErrors } from \"./logic/create_errors\";\n\ntype UseFormArg<T extends FormValues> = {\n defaultValues: T;\n mode?: \"onInput\" | \"onChange\" | \"onSubmit\";\n};\n\nexport const useForm = <F extends FormValues>({\n defaultValues,\n mode = \"onInput\",\n}: UseFormArg<F>): UseFormReturn<F> => {\n const fields: FormFields = {};\n const rules: Record<string, Rules<F, Path<F>>> = {};\n\n const [values, setValues] = createSignal<F>(defaultValues);\n const { errors, appendError, removeError, resetErrors } = createErrors<F>();\n const [isValid, setIsValid] = createSignal<boolean>(true);\n\n const setFieldError = (name: Path<F>, error: FieldError) => {\n const field = fields[name];\n\n if (field) {\n error.ref = field;\n }\n\n appendError(name, error);\n };\n\n const clearFieldError = (name: Path<F>) => {\n removeError(name);\n };\n\n const validateField = (name: Path<F>) => {\n const rule = rules[name];\n const error = validate(values(), name, rule);\n\n if (error) {\n setFieldError(name, error);\n } else {\n clearFieldError(name);\n }\n\n setIsValid(!Object.keys(errors()).length);\n };\n\n const validateAllFields = () => {\n Object.keys(values()).forEach((key) => {\n validateField(key as Path<F>);\n });\n };\n\n const onFieldChange = (event: Event, name: Path<F>) => {\n const value = getFieldValue(event);\n\n setValues((prev) => ({ ...prev, [name]: value }));\n validateField(name);\n };\n\n const register: Register<F> = (name, 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 return {\n name,\n // value: values()[name],\n onInput(event) {\n if (mode === \"onInput\") {\n onFieldChange(event, name);\n }\n },\n onChange(event) {\n if (mode === \"onChange\" || mode === \"onInput\") {\n onFieldChange(event, name);\n }\n },\n ref(element) {\n const field = fields[name];\n\n if (field) {\n return;\n }\n\n fields[name] = element;\n\n if (element) {\n setFieldValue(element, values()[name]);\n }\n },\n };\n };\n\n const getValues: GetValues<F> = (name?: string) => {\n if (name) {\n return values()[name];\n }\n\n return values();\n };\n\n const setValue: SetValue<F> = (name, value) => {\n setValues((prev) => ({ ...prev, [name]: value }));\n\n const field = fields[name];\n\n if (field) {\n setFieldValue(field, value);\n }\n };\n\n const onSubmit: OnSubmit<F> = (submit) => {\n return (event) => {\n event.preventDefault();\n validateAllFields();\n\n if (isValid()) {\n submit(getValues());\n }\n };\n };\n\n const reset: Reset<F> = (newDefaultValues = {}) => {\n setValues(() => ({\n ...defaultValues,\n ...newDefaultValues,\n }));\n resetErrors();\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","import { createContext } from \"solid-js\";\n\nexport const FormContext = createContext({});\n","import { ParentProps } from \"solid-js\";\nimport { FormValues, UseFormReturn } from \"./types/form\";\nimport { FormContext } from \"./form_context\";\n\ntype FormProviderProps<T extends FormValues> = ParentProps & {\n form: UseFormReturn<T>;\n};\n\nexport const FormProvider = <T extends FormValues>(props: FormProviderProps<T>) => {\n return <FormContext.Provider value={props.form}>{props.children}</FormContext.Provider>;\n};\n","import { useContext } from \"solid-js\";\nimport { FormContext } from \"./form_context\";\nimport { FormValues, UseFormReturn } from \"./types/form\";\n\nexport const useFormContext = <T extends FormValues>() => {\n const form = useContext(FormContext) as UseFormReturn<T>;\n\n console.log(\"context\", form, useContext);\n\n if (!form) {\n throw new Error(\"useFormContext: cannot find a FormProvider\");\n }\n\n return form;\n};\n"],"names":["getFieldValue","event","field","setFieldValue","value","getRuleValue","rule","getRuleMessage","validate","values","name","rules","message","createErrors","errors","setErrors","createSignal","error","prev","useForm","defaultValues","mode","fields","setValues","appendError","removeError","resetErrors","isValid","setIsValid","setFieldError","clearFieldError","validateField","validateAllFields","key","onFieldChange","register","options","element","getValues","submit","newDefaultValues","FormContext","createContext","FormProvider","props","_$createComponent","Provider","form","children","useFormContext","useContext"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"main.umd.cjs","sources":["../src/logic/get_value.ts","../src/logic/set_value.ts","../src/logic/validate.ts","../src/logic/create_errors.ts","../src/use_form.ts","../src/form_context.ts","../src/form_provider.tsx","../src/use_form_context.ts"],"sourcesContent":["export const getFieldValue = (event: Event) => {\n const field = event.target;\n\n if (field instanceof HTMLSelectElement) {\n return field.value;\n }\n\n if (field instanceof HTMLInputElement && field.type === \"checkbox\") {\n return field.checked;\n }\n\n return (field as HTMLInputElement).value;\n};\n","export const setFieldValue = (field: HTMLElement, value: any) => {\n if (field instanceof HTMLSelectElement) {\n field.value = value;\n\n return;\n }\n\n if (field instanceof HTMLInputElement && field.type === \"checkbox\") {\n field.checked = value;\n\n return;\n }\n\n (field as HTMLInputElement).value = 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 { FieldError, FieldErrors } from \"../types/errors\";\nimport { FormValues } from \"../types/form\";\nimport { Path } from \"../types/path\";\n\nexport const createErrors = <F extends FormValues>() => {\n const [errors, setErrors] = createSignal<FieldErrors<F>>({});\n\n const appendError = (name: Path<F>, error: FieldError) => {\n setErrors((prev) => ({ ...prev, [name]: error }));\n };\n\n const removeError = (name: Path<F>) => {\n setErrors((prev) => {\n const errors = { ...prev };\n\n delete errors[name];\n return errors;\n });\n };\n\n const resetErrors = () => {\n setErrors({});\n };\n\n return {\n errors,\n appendError,\n removeError,\n resetErrors,\n };\n};\n","import { createSignal } from \"solid-js\";\nimport {\n FormFields,\n FormValues,\n GetValues,\n OnSubmit,\n Register,\n Reset,\n SetValue,\n UseFormReturn,\n} from \"./types/form\";\nimport { Path } from \"./types/path\";\nimport { FieldError } from \"./types/errors\";\nimport { getFieldValue } from \"./logic/get_value\";\nimport { setFieldValue } from \"./logic/set_value\";\nimport { Rules } from \"./types/validate\";\nimport { validate } from \"./logic/validate\";\nimport { createErrors } from \"./logic/create_errors\";\n\ntype UseFormArg<T extends FormValues> = {\n defaultValues: T;\n mode?: \"onInput\" | \"onChange\" | \"onSubmit\";\n};\n\nexport const useForm = <F extends FormValues>({\n defaultValues,\n mode = \"onInput\",\n}: UseFormArg<F>): UseFormReturn<F> => {\n const fields: FormFields = {};\n const rules: Record<string, Rules<F, Path<F>>> = {};\n\n const [values, setValues] = createSignal<F>(defaultValues);\n const { errors, appendError, removeError, resetErrors } = createErrors<F>();\n const [isValid, setIsValid] = createSignal<boolean>(true);\n\n const setFieldError = (name: Path<F>, error: FieldError) => {\n const field = fields[name];\n\n if (field) {\n error.ref = field;\n }\n\n appendError(name, error);\n };\n\n const clearFieldError = (name: Path<F>) => {\n removeError(name);\n };\n\n const validateField = (name: Path<F>) => {\n const rule = rules[name];\n const error = validate(values(), name, rule);\n\n if (error) {\n setFieldError(name, error);\n } else {\n clearFieldError(name);\n }\n\n setIsValid(!Object.keys(errors()).length);\n };\n\n const validateAllFields = () => {\n Object.keys(values()).forEach((key) => {\n validateField(key as Path<F>);\n });\n };\n\n const onFieldChange = (event: Event, name: Path<F>) => {\n const value = getFieldValue(event);\n\n setValues((prev) => ({ ...prev, [name]: value }));\n validateField(name);\n };\n\n const register: Register<F> = (name, 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 return {\n name,\n // value: values()[name],\n onInput(event) {\n if (mode === \"onInput\") {\n onFieldChange(event, name);\n }\n },\n onChange(event) {\n if (mode === \"onChange\" || mode === \"onInput\") {\n onFieldChange(event, name);\n }\n },\n ref(element) {\n const field = fields[name];\n\n if (field) {\n return;\n }\n\n fields[name] = element;\n\n if (element) {\n setFieldValue(element, values()[name]);\n }\n },\n };\n };\n\n const getValues: GetValues<F> = (name?: string) => {\n if (name) {\n return values()[name];\n }\n\n return values();\n };\n\n const setValue: SetValue<F> = (name, value) => {\n setValues((prev) => ({ ...prev, [name]: value }));\n\n const field = fields[name];\n\n if (field) {\n setFieldValue(field, value);\n }\n };\n\n const onSubmit: OnSubmit<F> = (submit) => {\n return (event) => {\n event.preventDefault();\n validateAllFields();\n\n if (isValid()) {\n submit(getValues());\n }\n };\n };\n\n const reset: Reset<F> = (newDefaultValues = {}) => {\n setValues(() => ({\n ...defaultValues,\n ...newDefaultValues,\n }));\n resetErrors();\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","import { createContext } from \"solid-js\";\n\nexport const FormContext = createContext({});\n","import { ParentProps } from \"solid-js\";\nimport { FormValues, UseFormReturn } from \"./types/form\";\nimport { FormContext } from \"./form_context\";\n\ntype FormProviderProps<T extends FormValues> = ParentProps & {\n form: UseFormReturn<T>;\n};\n\nexport const FormProvider = <T extends FormValues>(props: FormProviderProps<T>) => {\n return <FormContext.Provider value={props.form}>{props.children}</FormContext.Provider>;\n};\n","import { useContext } from \"solid-js\";\nimport { FormContext } from \"./form_context\";\nimport { FormValues, UseFormReturn } from \"./types/form\";\n\nexport const useFormContext = <T extends FormValues>() => {\n const form = useContext(FormContext) as UseFormReturn<T>;\n\n console.log(\"context\", form, useContext);\n\n if (!form) {\n throw new Error(\"useFormContext: cannot find a FormProvider\");\n }\n\n return form;\n};\n"],"names":["getFieldValue","event","field","setFieldValue","value","getRuleValue","rule","getRuleMessage","validate","values","name","rules","message","createErrors","errors","setErrors","createSignal","error","prev","useForm","defaultValues","mode","fields","setValues","appendError","removeError","resetErrors","isValid","setIsValid","setFieldError","clearFieldError","validateField","validateAllFields","key","onFieldChange","register","options","element","getValues","submit","newDefaultValues","FormContext","createContext","FormProvider","props","_$createComponent","Provider","form","children","useFormContext","useContext"],"mappings":"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"}