solid-hook-form 1.3.5 → 1.3.6

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>;
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";
1
+ import { createSignal as p, createContext as q, createComponent as M, useContext as S } from "solid-js";
2
2
  const H = (e) => {
3
3
  const n = e.target;
4
4
  return n instanceof HTMLSelectElement ? n.value : n instanceof HTMLInputElement && n.type === "checkbox" ? n.checked : n.value;
5
- }, L = (e, n) => {
5
+ }, y = (e, n) => {
6
6
  if (e instanceof HTMLSelectElement) {
7
7
  e.value = n;
8
8
  return;
@@ -54,22 +54,22 @@ const H = (e) => {
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 = {}, [a, c] = p(e), { errors: f, appendError: u, removeError: F, resetErrors: b } = T(), [h, l] = p(!0), C = (t, o) => {
58
58
  const s = r[t];
59
59
  s && (o.ref = s), u(t, o);
60
- }, I = (t) => {
61
- b(t);
62
- }, x = (t) => {
60
+ }, V = (t) => {
61
+ F(t);
62
+ }, v = (t) => {
63
63
  const o = i[t], s = N(a(), t, o);
64
- s ? V(t, s) : I(t), l(!Object.keys(f()).length);
65
- }, k = () => {
64
+ s ? C(t, s) : V(t), l(!Object.keys(f()).length);
65
+ }, I = () => {
66
66
  Object.keys(a()).forEach((t) => {
67
- x(t);
67
+ v(t);
68
68
  });
69
- }, v = (t, o) => {
69
+ }, x = (t, o) => {
70
70
  const s = H(t);
71
- c((d) => ({ ...d, [o]: s })), x(o);
72
- }, q = (t, o = {}) => (i[t] = {
71
+ c((d) => ({ ...d, [o]: s })), v(o);
72
+ }, k = (t, o = {}) => (i[t] = {
73
73
  required: o.required,
74
74
  min: o.min,
75
75
  max: o.max,
@@ -81,37 +81,37 @@ const H = (e) => {
81
81
  name: t,
82
82
  // value: values()[name],
83
83
  onInput(s) {
84
- n === "onInput" && v(s, t);
84
+ n === "onInput" && x(s, t);
85
85
  },
86
86
  onChange(s) {
87
- (n === "onChange" || n === "onInput") && v(s, t);
87
+ (n === "onChange" || n === "onInput") && x(s, t);
88
88
  },
89
89
  ref(s) {
90
- r[t] || (r[t] = s, s && L(s, a()[t]));
90
+ r[t] || (r[t] = s, s && y(s, a()[t]));
91
91
  }
92
92
  }), E = (t) => t ? a()[t] : a();
93
93
  return {
94
94
  values: a,
95
95
  errors: f,
96
96
  isValid: h,
97
- register: q,
97
+ register: k,
98
98
  getValues: E,
99
99
  setValue: (t, o) => {
100
100
  c((d) => ({ ...d, [t]: o }));
101
101
  const s = r[t];
102
- s && L(s, o);
102
+ s && y(s, o);
103
103
  },
104
104
  onSubmit: (t) => (o) => {
105
- o.preventDefault(), k(), h() && t(E());
105
+ o.preventDefault(), I(), h() && t(E());
106
106
  },
107
107
  reset: (t = {}) => {
108
108
  c(() => ({
109
109
  ...e,
110
110
  ...t
111
- })), C(), l(!0);
111
+ })), b(), l(!0);
112
112
  }
113
113
  };
114
- }, F = M({}), A = (e) => S(F.Provider, {
114
+ }, L = q(), A = (e) => M(L.Provider, {
115
115
  get value() {
116
116
  return e.form;
117
117
  },
@@ -119,8 +119,8 @@ const H = (e) => {
119
119
  return e.children;
120
120
  }
121
121
  }), D = () => {
122
- const e = y(F);
123
- if (console.log("context", e, y), !e)
122
+ const e = S(L);
123
+ if (!e)
124
124
  throw new Error("useFormContext: cannot find a FormProvider");
125
125
  return e;
126
126
  };
@@ -129,4 +129,3 @@ export {
129
129
  O as useForm,
130
130
  D as useFormContext
131
131
  };
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,c){typeof exports=="object"&&typeof module<"u"?c(exports,require("solid-js")):typeof define=="function"&&define.amd?define(["exports","solid-js"],c):(f=typeof globalThis<"u"?globalThis:f||self,c(f["solid-hook-form"]={},f.solid))})(this,function(f,c){"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,m=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:m(r.required)};if(r.min&&Number(s)<Number(p(r.min)))return{type:"min",message:m(r.min)};if(r.max&&Number(s)>Number(p(r.max)))return{type:"max",message:m(r.max)};if(r.minLength&&s.length<p(r.minLength))return{type:"minLength",message:m(r.minLength)};if(r.maxLength&&s.length>p(r.maxLength))return{type:"maxLength",message:m(r.maxLength)};if(r.pattern&&!p(r.pattern).test(s))return{type:"pattern",message:m(r.pattern)};if(r.validate){const a=r.validate(s,e);if(a===!1)return{type:"validate"};if(typeof a=="string")return{type:"validate",message:a}}},S=()=>{const[e,n]=c.createSignal({});return{errors:e,appendError:(u,g)=>{n(d=>({...d,[u]:g}))},removeError:u=>{n(g=>{const d={...g};return delete d[u],d})},resetErrors:()=>{n({})}}},V=({defaultValues:e,mode:n="onInput"})=>{const r={},s={},[a,u]=c.createSignal(e),{errors:g,appendError:d,removeError:T,resetErrors:j}=S(),[x,y]=c.createSignal(!0),q=(t,o)=>{const i=r[t];i&&(o.ref=i),d(t,o)},M=t=>{T(t)},E=t=>{const o=s[t],i=C(a(),t,o);i?q(t,i):M(t),y(!Object.keys(g()).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={})=>(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"&&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:g,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=c.createContext(),k=e=>c.createComponent(v.Provider,{get value(){return e.form},get children(){return e.children}}),I=()=>{const e=c.useContext(v);if(!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"})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "solid-hook-form",
3
- "version": "1.3.5",
3
+ "version": "1.3.6",
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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"}