react-simple-formkit 2.0.4 → 2.1.5
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/README.md +113 -30
- package/dist/react-simple-formkit.js +4 -4
- package/dist/react-simple-formkit.mjs +517 -397
- package/dist/react-simple-formkit.umd.js +4 -4
- package/package.json +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(w,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("react")):typeof define=="function"&&define.amd?define(["exports","react"],r):(w=typeof globalThis<"u"?globalThis:w||self,r(w.Name={},w.React))})(this,function(w,r){"use strict";var se={exports:{}},G={};/**
|
|
2
2
|
* @license React
|
|
3
3
|
* react-jsx-runtime.production.js
|
|
4
4
|
*
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* This source code is licensed under the MIT license found in the
|
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
|
9
|
-
*/var
|
|
9
|
+
*/var ue;function he(){if(ue)return G;ue=1;var n=Symbol.for("react.transitional.element"),o=Symbol.for("react.fragment");function f(h,b,g){var E=null;if(g!==void 0&&(E=""+g),b.key!==void 0&&(E=""+b.key),"key"in b){g={};for(var y in b)y!=="key"&&(g[y]=b[y])}else g=b;return b=g.ref,{$$typeof:n,type:h,key:E,ref:b!==void 0?b:null,props:g}}return G.Fragment=o,G.jsx=f,G.jsxs=f,G}var H={};/**
|
|
10
10
|
* @license React
|
|
11
11
|
* react-jsx-runtime.development.js
|
|
12
12
|
*
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
*
|
|
15
15
|
* This source code is licensed under the MIT license found in the
|
|
16
16
|
* LICENSE file in the root directory of this source tree.
|
|
17
|
-
*/var
|
|
17
|
+
*/var le;function ge(){return le||(le=1,process.env.NODE_ENV!=="production"&&function(){function n(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===Q?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case d:return"Fragment";case B:return"Profiler";case _:return"StrictMode";case ne:return"Suspense";case oe:return"SuspenseList";case P:return"Activity"}if(typeof e=="object")switch(typeof e.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),e.$$typeof){case i:return"Portal";case L:return(e.displayName||"Context")+".Provider";case W:return(e._context.displayName||"Context")+".Consumer";case X:var c=e.render;return e=e.displayName,e||(e=c.displayName||c.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case ae:return c=e.displayName||null,c!==null?c:n(e.type)||"Memo";case Z:c=e._payload,e=e._init;try{return n(e(c))}catch{}}return null}function o(e){return""+e}function f(e){try{o(e);var c=!1}catch{c=!0}if(c){c=console;var R=c.error,T=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return R.call(c,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",T),o(e)}}function h(e){if(e===d)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===Z)return"<...>";try{var c=n(e);return c?"<"+c+">":"<...>"}catch{return"<...>"}}function b(){var e=x.A;return e===null?null:e.getOwner()}function g(){return Error("react-stack-top-frame")}function E(e){if(M.call(e,"key")){var c=Object.getOwnPropertyDescriptor(e,"key").get;if(c&&c.isReactWarning)return!1}return e.key!==void 0}function y(e,c){function R(){K||(K=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",c))}R.isReactWarning=!0,Object.defineProperty(e,"key",{get:R,configurable:!0})}function v(){var e=n(this.type);return q[e]||(q[e]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),e=this.props.ref,e!==void 0?e:null}function F(e,c,R,T,O,A,U,J){return R=A.ref,e={$$typeof:a,type:e,key:c,props:A,_owner:O},(R!==void 0?R:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:v}):Object.defineProperty(e,"ref",{enumerable:!1,value:null}),e._store={},Object.defineProperty(e._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(e,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(e,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:U}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:J}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function u(e,c,R,T,O,A,U,J){var S=c.children;if(S!==void 0)if(T)if(V(S)){for(T=0;T<S.length;T++)m(S[T]);Object.freeze&&Object.freeze(S)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else m(S);if(M.call(c,"key")){S=n(e);var N=Object.keys(c).filter(function(t){return t!=="key"});T=0<N.length?"{key: someKey, "+N.join(": ..., ")+": ...}":"{key: someKey}",ee[S+T]||(N=0<N.length?"{"+N.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
|
|
18
18
|
let props = %s;
|
|
19
19
|
<%s {...props} />
|
|
20
20
|
React keys must be passed directly to JSX without using spread:
|
|
21
21
|
let props = %s;
|
|
22
|
-
<%s key={someKey} {...props} />`,g,R,O,R),U[R+g]=!0)}if(R=null,c!==void 0&&(l(c),R=""+c),C(o)&&(l(o.key),R=""+o.key),"key"in o){c={};for(var X in o)X!=="key"&&(c[X]=o[X])}else c=o;return R&&b(c,typeof e=="function"?e.displayName||e.name||"Unknown":e),j(e,R,v,p,f(),c,H,B)}function E(e){typeof e=="object"&&e!==null&&e.$$typeof===S&&e._store&&(e._store.validated=1)}var d=r,S=Symbol.for("react.transitional.element"),W=Symbol.for("react.portal"),P=Symbol.for("react.fragment"),M=Symbol.for("react.strict_mode"),F=Symbol.for("react.profiler"),K=Symbol.for("react.consumer"),Y=Symbol.for("react.context"),te=Symbol.for("react.forward_ref"),re=Symbol.for("react.suspense"),ne=Symbol.for("react.suspense_list"),ue=Symbol.for("react.memo"),q=Symbol.for("react.lazy"),N=Symbol.for("react.activity"),se=Symbol.for("react.client.reference"),J=d.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,I=Object.prototype.hasOwnProperty,oe=Array.isArray,w=console.createTask?console.createTask:function(){return null};d={"react-stack-bottom-frame":function(e){return e()}};var A,z={},G=d["react-stack-bottom-frame"].bind(d,i)(),L=w(m(i)),U={};Q.Fragment=P,Q.jsx=function(e,o,c,g,p){var v=1e4>J.recentlyCreatedOwnerStacks++;return h(e,o,c,!1,g,p,v?Error("react-stack-top-frame"):G,v?w(m(e)):L)},Q.jsxs=function(e,o,c,g,p){var v=1e4>J.recentlyCreatedOwnerStacks++;return h(e,o,c,!0,g,p,v?Error("react-stack-top-frame"):G,v?w(m(e)):L)}}()),Q}var Ee;function Oe(){return Ee||(Ee=1,process.env.NODE_ENV==="production"?ee.exports=Te():ee.exports=_e()),ee.exports}var Re=Oe();const k=()=>{},ge=r.createContext({ref:null,watch:null,actions:{reset:k,setValue:k,getValues:k,setError:k,clearError:k,clearErrors:k,checkValidity:k,getNumberFields:k,getFieldValidity:k,getDefaultValues:k,setFieldStateProperty:k,getControlledFields:k},registerController:k,registerHookWatcher:k,lastReloadedAt:k,registerOnchange:k,loadFormValues:k,getWatchValue:k}),ce=()=>r.useContext(ge),Ae=({id:a,control:u,method:l,action:m,children:f,onSubmit:i=()=>{},onInput:C=()=>{},onChange:b=()=>{},onReset:_=()=>{},numberFields:j=[],className:h,...E})=>(r.useEffect(()=>u.registerOnchange(b),[b]),Re.jsx(ge.Provider,{value:u,children:Re.jsx("form",{id:a,ref:u.ref,action:m,method:l,className:h,onInput:C,onSubmit:d=>{l||d.preventDefault();const S=u.loadFormValues();i(S)},onChange:d=>{const S=d.target.name;u.actions.getControlledFields()[S]||u.actions.setValue(S,d.target.value)},onReset:d=>{u.actions.reset(),_(d)},...E,children:f},u.lastReloadedAt)})),ke=({control:a,name:u,compute:l})=>{const{getWatchValue:m,registerHookWatcher:f}=a||ce(),i=m({name:u,compute:l}),[C,b]=r.useState(i);return r.useEffect(()=>f({name:u,compute:l,setValue:b,computeValue:i}),[]),C},he=({name:a,defaultValue:u})=>{const{actions:l,registerController:m}=ce(),f=r.useRef(),i=l.getDefaultValues()[a]||u,[C,b]=r.useState(i),_=ke({name:`fieldStates.${a}.customState`}),j=r.useCallback(E=>{l.setFieldStateProperty(a,"customState",E)},[]),h=r.useCallback((E,{shouldDirty:d=!0,shouldOnChange:S=!0}={})=>{l.setValue(a,E,{shouldDirty:d,shouldOnChange:S}),b(E)},[l.setValue]);return r.useEffect(()=>m(a,b),[]),{ref:f,name:a,defaultValue:i,value:C,onChange:h,customState:_,setCustomState:j}},je=({name:a,defaultValue:u,render:l=({ref:m,name:f,defaultValue:i,value:C,onChange:b,customState:_,setCustomState:j})=>null})=>{const m=he({name:a,defaultValue:u});return l(m)},Pe=["badInput","customError","patternMismatch","rangeOverflow","rangeUnderflow","stepMismatch","tooLong","tooShort","typeMismatch","valueMissing"],Se=a=>{typeof a.setCustomValidity=="function"&&a.setCustomValidity("");let u=a.validity;console.log(a.valid);let l=Pe.find(m=>u[m]);if(l)return{type:l,message:a.validationMessage}},Fe=()=>{const[,a]=r.useState({});return r.useCallback(()=>a({}),[])},Ve=()=>{const[a,u]=r.useState(),l=r.useCallback(()=>u(new Date().toString()),[]);return[a,l]},xe=[],Ne={},we=({numberFields:a=xe,defaultValues:u=Ne,shouldUnRegister:l=!1,shouldConvertNumber:m=!1}={})=>{const f=Fe(),[i,C]=Ve(),b=r.useRef(),_=r.useRef(()=>{}),j=r.useRef(!1),h=r.useRef(u),E=r.useRef(u),d=r.useRef(new Set),S=r.useRef(a),W=r.useRef({}),P=r.useRef([]),M=r.useRef([]),F=r.useRef({}),K=r.useRef(0),Y=r.useRef({}),te=r.useCallback(()=>{Y.current=Object.keys(E.current).reduce((t,n)=>({...t,[n]:{isDirty:!1,isTouched:!1,customState:null}}),{})},[]),re=r.useCallback((t={})=>{E.current={...E.current,...t},h.current={...E.current},K.current=0,j.current=!1,F.current={},S.current=a,d.current=new Set,M.current=[],P.current=[],W.current={},te(),a.length>0&&(m=!0),C()},[]),ne=r.useCallback(()=>!!Object.values(w()).find(t=>t.isDirty),[]),ue=r.useCallback(()=>!!Object.values(I()).find(t=>!!t),[]),q=r.useCallback(t=>Se(t.target),[]),N=r.useCallback(t=>t?h.current[t]:h.current,[]),se=r.useCallback(()=>E.current,[]),J=r.useCallback(()=>S.current,[]),I=r.useCallback(()=>F.current,[]),oe=r.useCallback(()=>W.current,[]),w=r.useCallback(()=>Y.current,[]),A=r.useCallback(({name:t,compute:n})=>{var y;if(typeof n=="function")return n(N());if(Array.isArray(t)){const V={};return t.forEach(x=>{V[x]=A({name:x})}),V}if(t==="isDirty")return ne();if(t==="isError")return ue();if(t==="values")return{...N()};if(t==="errors")return{...I()};if(t==="fieldStates")return{...w()};const s=t.split(".");if(s.length>1){const V=s[1];if(s[0]==="errors")return s.length===2?I()[V]:I();if(s[0]==="fieldStates"){if(s.length===2)return{...w()[V]};const x=s[2];return(y=w()[V])==null?void 0:y[x]}}return N()[t]},[]),z=t=>{M.current.forEach(n=>{let s;if(typeof n.name=="string"?s=t(n):n.name.forEach(y=>{s||(s=t({...n,name:y}))}),s){const y=A(n);n.setValue(y)}})},G=t=>{const n=({name:s})=>s==="isError"||s==="errors"||(t?s===`errors.${t}`:s.includes("errors"));[...d.current].forEach(s=>{n({name:s})&&f()}),z(n)},L=r.useCallback((t,n)=>{F.current[t]=n,G(t)},[]),U=r.useCallback(t=>{F.current[t]&&(F.current[t]=null,G(t))},[]),e=r.useCallback(()=>{Object.keys(F.current)!==0&&(F.current={},G())},[]),o=r.useCallback(t=>{const n=Se(t.target);n?L(t.target.name,n):U(t.target.name)},[L,U]),c=r.useCallback((t,n,s)=>{const y=Y.current[t];if(y[n]!==s){Y.current[t]={...y,[n]:s};const x=({name:D})=>D==="fieldStates"||D===`fieldStates.${t}`||D===`fieldStates.${t}.${n}`;if([...d.current].forEach(D=>{x({name:D})&&f()}),n==="customState"){P.current.forEach(({name:D,setValue:ae})=>{D.includes(t)&&ae(s)});return}z(x)}}),g=r.useCallback((t,n,{shouldDirty:s=!0,shouldOnChange:y=!0}={})=>{m&&S.current.includes(t)&&(n=Number(n)||void 0);const V=h.current[t],x=Y.current[t],ae=W.current[t];if(c(t,"isTouched",!0),s){const $=n!==E.current[t];x.isDirty!==$&&c(t,"isDirty",$)}const fe=ne(),ye=j.current,Ce=n!==V;d.current.has(t)&&Ce&&f(),d.current.has("values")&&f(),d.current.has("isDirty")&&fe!==ye&&f(),h.current[t]=n,ae&&ae(n),j.current=fe,z($=>{const{name:ie,compute:pe,computeValue:ve}=$;if(pe){const de=pe(N());return de!==ve&&($.computeValue=de),de!==ve}if(ie==="values")return!0;if(ie==="isDirty")return fe!==ye;if(ie===t)return Ce}),y&&_.current(t,n,h.current)},[c]),p=r.useCallback(t=>{if(typeof t=="string")return d.current.add(t),A({name:t});if(Array.isArray(t)){const n={};return t.forEach(s=>{d.current.add(s),n[s]=A({name:s})}),n}return A({name:t})},[]),v=r.useCallback((t,n)=>{const s=W.current;return s[t]=n,()=>{l&&(delete s[t],delete h.current[t])}},[]),H=r.useCallback(t=>(_.current=t,()=>_.current=()=>{}),[]),B=r.useCallback(t=>{var s;const n=K.current;return(s=t.name)!=null&&s.includes("customState")?P.current.push({key:n,...t}):M.current.push({key:n,...t}),K.current++,()=>{M.current=M.current.filter(y=>y.key!==n),P.current=P.current.filter(y=>y.key!==n)}},[]),R=r.useCallback(()=>{const t=Object.fromEntries(new FormData(b.current)),n=W.current;return Object.keys(n).map(s=>{t[s]=h.current[s]}),m&&S.current.forEach(s=>t.hasOwnProperty(s)&&(t[s]=Number(t[s])||0)),t},[]),O=r.useMemo(()=>({reset:re,setValue:g,getValues:N,setError:L,clearError:U,clearErrors:e,checkValidity:o,getNumberFields:J,getFieldValidity:q,getDefaultValues:se,setFieldStateProperty:c,getControlledFields:oe}),[re,g,N,L,U,e,o,J,q,se,c,oe]),X=r.useMemo(()=>({ref:b,watch:p,actions:O,registerController:v,registerHookWatcher:B,lastReloadedAt:i,registerOnchange:H,loadFormValues:R,getWatchValue:A}),[b,p,O,v,B,i,H,R,A]),le=r.useMemo(()=>({control:X,actions:O,watch:p}),[i,X,O,p]);return r.useLayoutEffect(()=>{if([...b.current.querySelectorAll("[name]")].forEach(n=>{!n.defaultValue&&E.current[n.name]&&(n.defaultValue=E.current[n.name]),n.type==="number"&&!S.current.includes(n.name)&&S.current.push(n.name)}),b.current){const n=R();h.current={...n},E.current={...n}}},[i]),r.useLayoutEffect(()=>{te()},[]),le};T.Controller=je,T.Form=Ae,T.useController=he,T.useForm=we,T.useFormContext=ce,T.useWatch=ke,Object.defineProperty(T,Symbol.toStringTag,{value:"Module"})});
|
|
22
|
+
<%s key={someKey} {...props} />`,T,S,N,S),ee[S+T]=!0)}if(S=null,R!==void 0&&(f(R),S=""+R),E(c)&&(f(c.key),S=""+c.key),"key"in c){R={};for(var te in c)te!=="key"&&(R[te]=c[te])}else R=c;return S&&y(R,typeof e=="function"?e.displayName||e.name||"Unknown":e),F(e,S,A,O,b(),R,U,J)}function m(e){typeof e=="object"&&e!==null&&e.$$typeof===a&&e._store&&(e._store.validated=1)}var l=r,a=Symbol.for("react.transitional.element"),i=Symbol.for("react.portal"),d=Symbol.for("react.fragment"),_=Symbol.for("react.strict_mode"),B=Symbol.for("react.profiler"),W=Symbol.for("react.consumer"),L=Symbol.for("react.context"),X=Symbol.for("react.forward_ref"),ne=Symbol.for("react.suspense"),oe=Symbol.for("react.suspense_list"),ae=Symbol.for("react.memo"),Z=Symbol.for("react.lazy"),P=Symbol.for("react.activity"),Q=Symbol.for("react.client.reference"),x=l.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,M=Object.prototype.hasOwnProperty,V=Array.isArray,D=console.createTask?console.createTask:function(){return null};l={"react-stack-bottom-frame":function(e){return e()}};var K,q={},$=l["react-stack-bottom-frame"].bind(l,g)(),C=D(h(g)),ee={};H.Fragment=d,H.jsx=function(e,c,R,T,O){var A=1e4>x.recentlyCreatedOwnerStacks++;return u(e,c,R,!1,T,O,A?Error("react-stack-top-frame"):$,A?D(h(e)):C)},H.jsxs=function(e,c,R,T,O){var A=1e4>x.recentlyCreatedOwnerStacks++;return u(e,c,R,!0,T,O,A?Error("react-stack-top-frame"):$,A?D(h(e)):C)}}()),H}var ie;function Re(){return ie||(ie=1,process.env.NODE_ENV==="production"?se.exports=he():se.exports=ge()),se.exports}var fe=Re();const k=()=>{},de=r.createContext({ref:null,watch:k,actions:{reset:k,resetField:k,setValue:k,getValues:k,getErrors:k,getFieldStates:k,getFormStates:k,setError:k,clearError:k,clearErrors:k,checkValidity:k,getNumberFields:k,getFieldValidity:k,getDefaultValues:k,setFieldState:k,resetFieldState:k,getControlledFields:k},registerController:k,registerHookWatcher:k,lastReloadedAt:k,loadFormValues:k,getWatchValue:k,channels:{}}),ce=()=>r.useContext(de),ke=({id:n,control:o,method:f,action:h,children:b,onSubmit:g=()=>{},onInput:E=()=>{},onChange:y=()=>{},onBlur:v=()=>{},onReset:F=()=>{},numberFields:u=[],className:m,...l})=>(r.useEffect(()=>{const a=o.channels.subscribe("onChange",y),i=o.channels.subscribe("onBlur",v);return()=>{a(),i()}},[]),fe.jsx(de.Provider,{value:o,children:fe.jsx("form",{id:n,ref:o.ref,action:h,method:f,className:m,onInput:E,onSubmit:a=>{f||a.preventDefault();const i=o.loadFormValues();g(i)},onChange:a=>{const i=a.target.name;o.actions.getControlledFields().has(i)||o.actions.setValue(i,a.target.value)},onBlur:a=>{const i=a.target.name;if(o.actions.getControlledFields().has(i))return;const d=a.target.value;o.channels.publish("onBlur",i,d,o.actions.getValues())},onReset:a=>{o.actions.reset(),F(a)},...l,children:b},o.lastReloadedAt)})),be=({control:n,name:o,compute:f})=>{const{getWatchValue:h,registerHookWatcher:b}=n||ce(),g=h({name:o,compute:f}),[E,y]=r.useState(g);return r.useEffect(()=>{const v=b({name:o,compute:f,value:E,setValue:y});return()=>v.forEach(F=>F())},[]),E},me=({name:n,defaultValue:o})=>{const{actions:f,registerController:h,channels:b}=ce(),g=r.useRef(),E=f.getDefaultValues()[n]||o,[y,v]=r.useState(E),F=be({name:`fieldStates.${n}.customState`}),u=r.useCallback(a=>{f.setFieldState(n,"customState",a)},[]),m=r.useCallback((a,{shouldDirty:i=!0,shouldOnChange:d=!0}={})=>{v(a),f.setValue(n,a,{shouldDirty:i,shouldOnChange:d})},[f.setValue]),l=r.useCallback(()=>{b.publish("onBlur",n,y,f.getValues())},[]);return r.useEffect(()=>h(n,v),[]),{ref:g,name:n,defaultValue:E,value:y,onChange:m,onBlur:l,customState:F,setCustomState:u}},Se=({name:n,defaultValue:o,render:f=({ref:h,name:b,defaultValue:g,value:E,onChange:y,onBlur:v,customState:F,setCustomState:u})=>null})=>{const h=me({name:n,defaultValue:o});return f(h)},Ce=["errors","fieldStates","formState"],I=n=>Ce.some(o=>n.startsWith(o))?n:"values."+n,ye=["badInput","customError","patternMismatch","rangeOverflow","rangeUnderflow","stepMismatch","tooLong","tooShort","typeMismatch","valueMissing"],Ee=n=>{typeof n.setCustomValidity=="function"&&n.setCustomValidity("");let o=n.validity,f=ye.find(h=>o[h]);if(f)return{type:f,message:n.validationMessage}};class pe{constructor(){this.events=new Map}getEvents(){return this.events}subscribe(o,f){return this.events.has(o)||this.events.set(o,new Set),this.events.get(o).add(f),()=>{var h;return(h=this.events.get(o))==null?void 0:h.delete(f)}}publish(o,...f){const h=this.events.get(o);h&&h.forEach(b=>b(...f)),this.events.forEach((b,g)=>{o.includes(g)&&b.forEach(E=>E(...f))})}reset(){this.events.clear()}}const ve=()=>{const n=r.useRef(new pe),o=r.useCallback((b,...g)=>{n.current.publish(b,...g)},[]),f=r.useCallback((b,g)=>n.current.subscribe(b,g),[]),h=r.useCallback(()=>{n.current.reset()},[]);return{publish:o,subscribe:f,reset:h}},Te=()=>{const[n,o]=r.useState(),f=r.useCallback(()=>o(new Date().toString()),[]);return[n,f]},Fe=()=>{const[,n]=r.useState({});return r.useCallback(()=>n({}),[])},_e=({channels:n,getValues:o,getErrors:f,getFieldStates:h,getFormState:b})=>{const g=Fe(),E=r.useCallback(({name:u,compute:m})=>{if(typeof m=="function")return m(o());if(Array.isArray(u)){const l={};return u.forEach(a=>{l[a]=E({name:a})}),l}return u.replaceAll(/\[(\d+)\]/g,".$1").split(".").reduce((l,a)=>l&&l[a]!==void 0?l[a]:void 0,{...o(),errors:{...f()},formState:{...b()},fieldStates:{...h()}})},[]),y=r.useCallback(u=>{if(!u)return n.subscribe("values",()=>{g()}),o();if(typeof u=="string"){const m=I(u);return n.subscribe(m,()=>{g()}),E({name:u})}if(Array.isArray(u)){const m={};return u.forEach(l=>{const a=I(l);n.subscribe(a,()=>{g()}),m[l]=E({name:l})}),m}throw new Error("Parameters of watch must be string or array of string")},[]),v=r.useCallback(({name:u,compute:m,value:l,setValue:a})=>{if(typeof m=="function")return[n.subscribe("values",()=>{const d=E({compute:m});d!==l&&a(d)})];if(u)if(typeof u=="string"){const i=I(u);return[n.subscribe(i,()=>{const _=E({name:u});_!==l&&a(_)})]}else if(Array.isArray(u)){const i=E({name:u}),d=[];return u.forEach(_=>{const B=I(_),W=n.subscribe(B,()=>{const L=E({name:_});i[_]!==L&&(i[_]=L,a({...i}))});d.push(W)}),d}else throw new Error("Parameters of name must be string or array of string or compute must be a function");else return[n.subscribe("values",()=>{a(o())})]},[]),F=r.useCallback((u,m)=>{if(typeof u===void 0)return n.subscribe("values",m);if(typeof u=="string"){const l=I(u);return n.subscribe(l,m)}if(Array.isArray(u)){const l={},a=[];return u.forEach(i=>{const d=I(i),_=n.subscribe(d,()=>{l[i]=E({name:i}),m(l)});a.push(_)}),a}},[n]);return{watch:y,registerHookWatcher:v,getWatchValue:E,subscribe:F}},Ae=[],we={},Oe=({numberFields:n=Ae,defaultValues:o=we,shouldUnRegister:f=!1,shouldConvertNumber:h=!1}={})=>{const[b,g]=Te(),E=r.useRef(),y=r.useRef(!1),v=r.useRef(!1),F=r.useRef(n),u=r.useRef(new Map),m=r.useRef({}),l=r.useRef({}),a=r.useRef(o),i=r.useRef(o),d=ve(),_=r.useCallback(()=>{l.current=Object.keys(i.current).reduce((t,s)=>({...t,[s]:{isError:!1,isDirty:!1,isTouched:!1,customState:null}}),{})},[]),B=r.useCallback((t={})=>{i.current={...i.current,...t},a.current={...i.current},u.current.forEach((s,p)=>{s(i.current[p])}),y.current=!1,m.current={},F.current=n,u.current=new Map,d.reset(),_(),n.length>0&&(h=!0),g()},[]),W=r.useCallback(()=>{const t=Object.fromEntries(new FormData(E.current));return u.current.forEach(p=>{t[p]=a.current[p]}),h&&F.current.forEach(p=>t.hasOwnProperty(p)&&(t[p]=Number(t[p])||0)),t},[]),L=r.useCallback(()=>!!Object.values(M()).find(t=>t.isDirty),[]),X=r.useCallback(()=>!!Object.values(x()).find(t=>!!t),[]),ne=r.useCallback(t=>Ee(t.target),[]),oe=r.useCallback(()=>i.current,[]),ae=r.useCallback(()=>F.current,[]),Z=r.useCallback(()=>u.current,[]),P=r.useCallback((t,s)=>s?Array.isArray(s)?s.map(p=>t[p]):t[s]:{...t},[]),Q=r.useCallback(t=>P(a.current,t),[P]),x=r.useCallback(t=>P(m.current,t),[P]),M=r.useCallback(t=>P(l.current,t),[P]),V=r.useCallback(t=>P({isDirty:y.current,isError:v.current,errorFields:Object.keys(m.current).filter(s=>!!m.current[s]),dirtyFields:Object.keys(l.current).filter(s=>l.current[s].isDirty),touchedFields:Object.keys(l.current).filter(s=>l.current[s].isTouched)},t),[P]),{watch:D,registerHookWatcher:K,getWatchValue:q,subscribe:$}=_e({channels:d,getValues:Q,getErrors:x,getFieldStates:M,getFormState:V}),C=r.useCallback((t,s,p)=>{const j=l.current[t];j[s]!==p&&(l.current[t]={...j,[s]:p},d.publish(`fieldStates.${t}.${s}`,p),s==="isError"&&d.publish("formState.errorFields",V("errorFields")),s==="isDirty"&&d.publish("formState.dirtyFields",V("dirtyFields")),s==="isTouched"&&d.publish("formState.touchedFields",V("touchedFields")))},[]),ee=r.useCallback(t=>{C(t,"isError",!1),C(t,"isDirty",!1),C(t,"isTouched",!1),C(t,"customState",null)},[C]),e=r.useCallback((t,s)=>{if(m.current[t]===s)return;m.current[t]=s,C(t,"isError",!!s),d.publish(`errors.${t}`,s);const j=X();v.current!==j&&(v.current=j,d.publish("formState.isError",j))},[C]),c=r.useCallback(t=>{if(!m.current[t])return;m.current[t]=null,C(t,"isError",!1),d.publish(`errors.${t}`,null);const s=X();v.current!==s&&(v.current=s,d.publish("formState.isError",s))},[C]),R=r.useCallback(()=>{if(Object.keys(m.current)===0)return;m.current={},d.publish("errors",m.current);const t=X();v.current!==t&&(v.current=t,d.publish("formState.isError",t))},[]),T=r.useCallback(t=>{const s=Ee(t.target);s?e(t.target.name,s):c(t.target.name)},[e,c]),O=r.useCallback((t,s,{shouldDirty:p=!0,shouldOnChange:j=!0}={})=>{if(s===a.current[t])return;h&&F.current.includes(t)&&(s=Number(s)||void 0),C(t,"isTouched",!0);const re=s!==i.current[t];p&&l.current[t].isDirty!==re&&C(t,"isDirty",re);const Y=L();y.current!==Y&&(y.current=Y,d.publish("formState.isDirty",Y)),a.current[t]=s;const z=u.current.get(t);z&&z(s),d.publish(`values.${t}`,s,{shouldDirty:p,shouldOnChange:j}),j&&d.publish("onChange",t,s,a.current)},[C]),A=r.useCallback((t,s)=>(u.current.set(t,s),()=>{f&&u.current.delete(t)}),[]),U=r.useCallback((t,{keepError:s,keepDirty:p,keepTouched:j,keepCustomState:re,defaultValue:Y})=>{const z=u.current.get(t);if(!z)throw new Error(`Cannot reset "${t}" because it's uncontrolled field`);i.current[t]=Y,a.current[t]=Y,z&&z(Y),s||c(t),p||C(t,"isDirty",!1),j||C(t,"isTouched",!1),re||C(t,"customState",null)},[c,C]),J=r.useCallback((t,s=S.getValues(t))=>{d.publish("onBlur",t,s,S.getValues())},[]),S=r.useMemo(()=>({subscribe:$,reset:B,resetField:U,setValue:O,getValues:Q,getErrors:x,getFieldStates:M,getFormState:V,setError:e,clearError:c,clearErrors:R,checkValidity:T,getNumberFields:ae,getFieldValidity:ne,getDefaultValues:oe,setFieldState:C,triggerFieldBlur:J,resetFieldState:ee,getControlledFields:Z}),[$,B,U,O,Q,x,M,V,e,c,R,T,ae,ne,oe,C,ee,J,Z]),N=r.useMemo(()=>({ref:E,watch:D,actions:S,registerController:A,registerHookWatcher:K,lastReloadedAt:b,loadFormValues:W,getWatchValue:q,channels:d}),[E,D,S,A,K,b,W,q,d]),te=r.useMemo(()=>({control:N,actions:S,watch:D}),[b,N,S,D]);return r.useLayoutEffect(()=>{if([...E.current.querySelectorAll("[name]")].forEach(s=>{!s.defaultValue&&i.current[s.name]&&(s.defaultValue=i.current[s.name]),s.type==="number"&&!F.current.includes(s.name)&&F.current.push(s.name)}),E.current){const s=W();a.current={...s},i.current={...s}}},[b]),r.useLayoutEffect(()=>{_()},[]),te};w.Controller=Se,w.Form=ke,w.useController=me,w.useForm=Oe,w.useFormContext=ce,w.useWatch=be,Object.defineProperty(w,Symbol.toStringTag,{value:"Module"})});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-simple-formkit",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.5",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"react formkit",
|
|
6
6
|
"react ez formkit",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"dayjs": "^1.11.13",
|
|
37
37
|
"react": "^19.1.0",
|
|
38
38
|
"react-dom": "^19.1.0",
|
|
39
|
-
"react-simple-formkit": "^1.
|
|
39
|
+
"react-simple-formkit": "^2.1.4",
|
|
40
40
|
"vite": "^6.0.7"
|
|
41
41
|
},
|
|
42
42
|
"peerDependencies": {
|