react-simple-formkit 2.2.7 → 2.3.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.
- package/README.md +3 -3
- package/dist/react-simple-formkit.js +4 -4
- package/dist/react-simple-formkit.mjs +501 -500
- package/dist/react-simple-formkit.umd.js +4 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -187,10 +187,10 @@ State updates only when observed via `watch()`, `useWatch()`, `subscribe()`, or
|
|
|
187
187
|
- [actions.subscribe(name, callback)](#subscribe) is just a handler callback that is called when watched values change.
|
|
188
188
|
- [onChange](#form) is just a handler callback that is called when field values change.
|
|
189
189
|
- [onBlur](#form) is just a handler callback that is called when field blurred.
|
|
190
|
-
- [actions.
|
|
191
|
-
- [actions.
|
|
190
|
+
- [actions.subscribe('onChange', callback)](#useform) subscribe onChange callback instead of passing `onChange` in [Form](#form) component.
|
|
191
|
+
- [actions.subscribe('onBlur', callback)](#useform) subscribe onBlur callback instead of passing `onBlur` in [Form](#form) component.
|
|
192
192
|
|
|
193
|
-
> **Rule\*:** By default, onBlur works automatically for uncontrolled fields. However, for controlled fields, you must explicitly pass the onBlur prop when rendering the field.
|
|
193
|
+
> **Rule\*:** By default, onBlur works automatically for uncontrolled fields. However, for controlled fields, you must explicitly pass the onBlur prop when rendering the field.
|
|
194
194
|
|
|
195
195
|
### The Power of watch (Unified Observation)
|
|
196
196
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react");var
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react");var te={exports:{}},z={};/**
|
|
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 ie;function Se(){if(ie)return z;ie=1;var s=Symbol.for("react.transitional.element"),
|
|
9
|
+
*/var ie;function Se(){if(ie)return z;ie=1;var s=Symbol.for("react.transitional.element"),o=Symbol.for("react.fragment");function h(R,g,k){var d=null;if(k!==void 0&&(d=""+k),g.key!==void 0&&(d=""+g.key),"key"in g){k={};for(var C in g)C!=="key"&&(k[C]=g[C])}else k=g;return g=k.ref,{$$typeof:s,type:R,key:d,ref:g!==void 0?g:null,props:k}}return z.Fragment=o,z.jsx=h,z.jsxs=h,z}var G={};/**
|
|
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 fe;function ye(){return fe||(fe=1,process.env.NODE_ENV!=="production"&&function(){function s(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===
|
|
17
|
+
*/var fe;function ye(){return fe||(fe=1,process.env.NODE_ENV!=="production"&&function(){function s(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===B?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case E:return"Fragment";case N:return"Profiler";case A:return"StrictMode";case ne:return"Suspense";case ue:return"SuspenseList";case X: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 n:return"Portal";case I:return(e.displayName||"Context")+".Provider";case Y:return(e._context.displayName||"Context")+".Consumer";case se:var f=e.render;return e=e.displayName,e||(e=f.displayName||f.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case oe:return f=e.displayName||null,f!==null?f:s(e.type)||"Memo";case j:f=e._payload,e=e._init;try{return s(e(f))}catch{}}return null}function o(e){return""+e}function h(e){try{o(e);var f=!1}catch{f=!0}if(f){f=console;var S=f.error,F=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return S.call(f,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",F),o(e)}}function R(e){if(e===E)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===j)return"<...>";try{var f=s(e);return f?"<"+f+">":"<...>"}catch{return"<...>"}}function g(){var e=W.A;return e===null?null:e.getOwner()}function k(){return Error("react-stack-top-frame")}function d(e){if(L.call(e,"key")){var f=Object.getOwnPropertyDescriptor(e,"key").get;if(f&&f.isReactWarning)return!1}return e.key!==void 0}function C(e,f){function S(){Q||(Q=!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)",f))}S.isReactWarning=!0,Object.defineProperty(e,"key",{get:S,configurable:!0})}function v(){var e=s(this.type);return K[e]||(K[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 b(e,f,S,F,x,O,q,J){return S=O.ref,e={$$typeof:i,type:e,key:f,props:O,_owner:x},(S!==void 0?S: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:q}),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,f,S,F,x,O,q,J){var T=f.children;if(T!==void 0)if(F)if(Z(T)){for(F=0;F<T.length;F++)c(T[F]);Object.freeze&&Object.freeze(T)}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 c(T);if(L.call(f,"key")){T=s(e);var P=Object.keys(f).filter(function(ae){return ae!=="key"});F=0<P.length?"{key: someKey, "+P.join(": ..., ")+": ...}":"{key: someKey}",re[T+F]||(P=0<P.length?"{"+P.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} />`,F,w,N,w),re[w+F]=!0)}if(w=null,v!==void 0&&(l(v),w=""+v),g(i)&&(l(i.key),w=""+i.key),"key"in i){v={};for(var V in i)V!=="key"&&(v[V]=i[V])}else v=i;return w&&k(v,typeof e=="function"?e.displayName||e.name||"Unknown":e),y(e,w,A,j,h(),v,q,J)}function d(e){typeof e=="object"&&e!==null&&e.$$typeof===o&&e._store&&(e._store.validated=1)}var c=t,o=Symbol.for("react.transitional.element"),a=Symbol.for("react.portal"),C=Symbol.for("react.fragment"),O=Symbol.for("react.strict_mode"),x=Symbol.for("react.profiler"),Y=Symbol.for("react.consumer"),B=Symbol.for("react.context"),ne=Symbol.for("react.forward_ref"),ue=Symbol.for("react.suspense"),ae=Symbol.for("react.suspense_list"),oe=Symbol.for("react.memo"),P=Symbol.for("react.lazy"),X=Symbol.for("react.activity"),I=Symbol.for("react.client.reference"),W=c.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,L=Object.prototype.hasOwnProperty,Z=Array.isArray,U=console.createTask?console.createTask:function(){return null};c={"react-stack-bottom-frame":function(e){return e()}};var Q,K={},ee=c["react-stack-bottom-frame"].bind(c,E)(),T=U(f(E)),re={};G.Fragment=C,G.jsx=function(e,i,v,F,j){var A=1e4>W.recentlyCreatedOwnerStacks++;return b(e,i,v,!1,F,j,A?Error("react-stack-top-frame"):ee,A?U(f(e)):T)},G.jsxs=function(e,i,v,F,j){var A=1e4>W.recentlyCreatedOwnerStacks++;return b(e,i,v,!0,F,j,A?Error("react-stack-top-frame"):ee,A?U(f(e)):T)}}()),G}var be;function pe(){return be||(be=1,process.env.NODE_ENV==="production"?se.exports=Se():se.exports=ye()),se.exports}var de=pe();const S=()=>{},me=t.createContext({ref:null,watch:S,actions:{reset:S,resetField:S,setValue:S,getValues:S,getErrors:S,getFieldStates:S,getFormStates:S,setError:S,clearError:S,clearErrors:S,checkValidity:S,getNumberFields:S,getFieldValidity:S,getDefaultValues:S,setFieldState:S,resetFieldState:S,getControlledFields:S},registerController:S,registerHookWatcher:S,lastReloadedAt:S,loadFormValues:S,getWatchValue:S,channels:{}}),le=()=>t.useContext(me),Fe=({id:s,control:n,method:l,action:f,children:h,onSubmit:E=()=>{},onInput:g=()=>{},onChange:k=()=>{},onBlur:R=()=>{},onReset:y=()=>{},numberFields:b=[],className:d,...c})=>(t.useEffect(()=>{const o=n.channels.subscribe("onChange",k),a=n.channels.subscribe("onBlur",R);return()=>{o(),a()}},[n.lastReloadedAt]),de.jsx(me.Provider,{value:n,children:de.jsx("form",{id:s,ref:o=>{n.ref&&(n.ref.current=o,o&&n.initForm())},action:f,method:l,className:d,onInput:g,onSubmit:o=>{l||o.preventDefault();const a=n.loadFormValues();E(a)},onChange:o=>{const a=o.target.name;!a||n.actions.getControlledFields().has(a)||n.actions.setValue(a,o.target.value)},onBlur:o=>{const a=o.target.name;if(!a||n.actions.getControlledFields().has(a))return;const C=o.target.value;n.channels.publish("onBlur",a,C,n.actions.getValues())},onReset:o=>{n.actions.reset(),y(o)},...c,children:h},n.lastReloadedAt)})),ke=({control:s,name:n,compute:l})=>{const{getWatchValue:f,registerHookWatcher:h}=s||le(),E=f({name:n,compute:l}),[g,k]=t.useState(E);return t.useEffect(()=>h({name:n,compute:l,value:g,setValue:k}),[]),g},Re=({name:s,defaultValue:n})=>{const{actions:l,registerController:f,channels:h}=le(),E=t.useRef(),g=l.getDefaultValues()[s]||n||"",[k,R]=t.useState(g),y=ke({name:`fieldStates.${s}`}),b=t.useCallback((c,{shouldDirty:o=!0,shouldOnChange:a=!0}={})=>{var O,x;let C=c;(O=c==null?void 0:c.target)!=null&&O.value&&(C=c.target.value),(x=c==null?void 0:c.target)!=null&&x.checked&&(C=c.target.checked+""),R(C),l.setValue(s,C,{shouldDirty:o,shouldOnChange:a})},[l.setValue]),d=t.useCallback(c=>{const o=l.getValues(),a=c??o[s];h.publish("onBlur",s,a,o)},[]);return t.useEffect(()=>f(s,R),[]),{ref:E,name:s,defaultValue:g,value:k,onChange:b,onBlur:d,fieldState:y}},we=({name:s,defaultValue:n,render:l=({ref:f,name:h,defaultValue:E,value:g,onChange:k,onBlur:R,fieldState:y})=>null})=>{const f=Re({name:s,defaultValue:n});return l(f)},Te=["errors","fieldStates","formState"],H=(s={},n="")=>n.split(".").reduce((l,f)=>l&&l[f]!==void 0?l[f]:void 0,s),he=(s={},n="",l)=>{let f=s;const h=n.split(".");return h.forEach((E,g)=>{g<h.length-1&&(f[E]||(f[E]={}),g===h.length-2&&(f[E]={...f[E]}),f=f[E]),f[E]=l}),s},M=s=>Te.some(n=>s.startsWith(n))?s:"values."+s,_e=["badInput","customError","patternMismatch","rangeOverflow","rangeUnderflow","stepMismatch","tooLong","tooShort","typeMismatch","valueMissing"],Ee=s=>{typeof s.setCustomValidity=="function"&&s.setCustomValidity("");let n=s.validity,l=_e.find(f=>n[f]);if(l)return{type:l,message:s.validationMessage}};class Ae{constructor(){this.events=new Map,this.watchEvents=new Map}getWatchEvents(){return this.watchEvents}getEvents(){return this.events}subscribe(n,l){return this.events.has(n)||this.events.set(n,new Set),this.events.get(n).add(l),()=>{var f;return(f=this.events.get(n))==null?void 0:f.delete(l)}}subscribeWatch(n,l){this.watchEvents.has(n)||(this.watchEvents.set(n,new Set),this.watchEvents.get(n).add(l))}publish(n,...l){this.events.forEach((f,h)=>{n.includes(h)&&f.forEach(E=>E(...l))}),this.watchEvents.forEach((f,h)=>{n.includes(h)&&f.forEach(E=>E(...l))})}reset(){this.events.clear(),this.watchEvents.clear()}}const Oe=()=>{const s=t.useRef(new Ae),n=t.useCallback((k,...R)=>{s.current.publish(k,...R)},[]),l=t.useCallback((k,R)=>s.current.subscribe(k,R),[]),f=t.useCallback((k,R)=>{s.current.subscribeWatch(k,R)},[]),h=t.useCallback(()=>s.current.getEvents(),[]),E=t.useCallback(()=>s.current.getWatchEvents(),[]),g=t.useCallback(()=>{s.current.reset()},[]);return{publish:n,subscribe:l,reset:g,getEvents:h,subscribeWatch:f,getWatchEvents:E}},Pe=()=>{const[s,n]=t.useState(),l=t.useCallback(()=>n(new Date().toString()),[]);return[s,l]},je=()=>{const[,s]=t.useState({});return t.useCallback(()=>s({}),[])},xe=({channels:s,getValues:n,getErrors:l,getFieldStates:f,getFormState:h})=>{const E=je(),g=t.useCallback(({name:b,compute:d})=>{if(typeof d=="function")return d(n());if(Array.isArray(b)){const c={};return b.forEach(o=>{c[o]=g({name:o})}),c}return H({...n(),errors:{...l()},formState:{...h()},fieldStates:{...f()}},b)},[]),k=t.useCallback(b=>{if(!b)return s.subscribeWatch("values",()=>E()),n();if(typeof b=="string"){const d=M(b);return s.subscribeWatch(d,()=>E()),g({name:b})}if(Array.isArray(b)){const d={};return b.forEach(c=>{const o=M(c);s.subscribeWatch(o,()=>E()),d[c]=g({name:c})}),{...d}}throw new Error("Parameters of watch must be string or array of string")},[]),R=t.useCallback(({name:b,compute:d,setValue:c})=>{if(typeof d=="function")return s.subscribe("values",()=>{const a=g({compute:d});c(a)});if(!b)return s.subscribe("values",()=>{c(n())});if(typeof b=="string"){const o=M(b);return s.subscribe(o,()=>{const C=g({name:b});c(C)})}if(Array.isArray(b)){const o=g({name:b}),a=[];return b.forEach(C=>{const O=M(C),x=s.subscribe(O,()=>{const Y=g({name:C});o[C]=Y,c({...o})});a.push(x)}),()=>a.forEach(C=>C())}throw new Error("Parameters of name must be string or array of string or compute must be a function")},[]),y=t.useCallback((b,d)=>{if(!b)return s.subscribe("values",d);if(typeof b=="string"){const c=M(b);return s.subscribe(c,d)}if(Array.isArray(b)){const c={},o=[];return b.forEach(a=>{const C=M(a),O=s.subscribe(C,()=>{c[a]=g({name:a}),d({...c})});o.push(O)}),()=>o.forEach(a=>a())}throw new Error("Parameters of name must be string or array of string")},[]);return{watch:k,registerHookWatcher:R,getWatchValue:g,subscribe:y}},ge={lastReset:null,isDirty:!1,isError:!1,errorFields:[],dirtyFields:[],touchedFields:[]},ce={isDirty:!1,isTouched:!1,error:null},Ne=[],Ve={},We=({numberFields:s=Ne,defaultValues:n=Ve,shouldUnRegister:l=!1,shouldConvertNumber:f=!1}={})=>{const[h,E]=Pe(),g=t.useRef(),k=t.useRef(s),R=t.useRef(new Map),y=t.useRef({}),b=t.useRef({}),d=t.useRef({...ge}),c=t.useRef({...n}),o=t.useRef({...n}),a=Oe(),C=t.useCallback(r=>{b.current=Object.keys(o.current).reduce((u,m)=>({...u,[m]:{...r?{}:b.current[m]||{},...ce}}),{})},[]),O=t.useCallback((r={},{clearCustomFormStates:u=!1,clearCustomFieldStates:m=!1}={})=>{o.current={...o.current,...r},c.current={...o.current},R.current.forEach((p,D)=>{p(o.current[D])}),y.current={},d.current={...u?{}:d.current,...ge},k.current=s,R.current=new Map,a.reset(),C(m),s.length>0&&(f=!0),E()},[]),x=t.useCallback(()=>{const r=Object.fromEntries(new FormData(g.current));return R.current.forEach((m,p)=>{r[p]=c.current[p]}),f&&k.current.forEach(m=>r.hasOwnProperty(m)&&(r[m]=Number(r[m])||0)),{...c.current,...r}},[]),Y=t.useCallback(()=>!!Object.values(W()).find(r=>r.isDirty),[]),B=t.useCallback(()=>!!Object.values(I()).find(r=>!!r),[]),ne=t.useCallback(r=>Ee(r.target),[]),ue=t.useCallback(()=>o.current,[]),ae=t.useCallback(()=>k.current,[]),oe=t.useCallback(()=>R.current,[]),P=t.useCallback((r,u)=>u?Array.isArray(u)?u.reduce((m,p)=>({...m,[p]:H(r,p)}),{}):H(r,u):{...r},[]),X=t.useCallback(r=>P(c.current,r),[P]),I=t.useCallback(r=>P(y.current,r),[P]),W=t.useCallback(r=>P(b.current,r),[P]),L=t.useCallback(r=>P({...d.current,lastReset:h},r),[h]),{watch:Z,registerHookWatcher:U,getWatchValue:Q,subscribe:K}=xe({channels:a,getValues:X,getErrors:I,getFieldStates:W,getFormState:L}),ee=t.useCallback((r,u)=>{const m=d.current;H(m,r)!==u&&(he(d.current,r,u),a.publish(`formState.${r}`,u))},[]),T=t.useCallback((r,u,m)=>{const p=b.current[r]||{...ce};H(p,u)!==m&&(he(b.current,`${r}.${u}`,m),a.publish(`fieldStates.${r}.${u}`,m),u==="error"&&(d.current.errorFields=Object.keys(y.current).filter(_=>!!y.current[_]),a.publish("formState.errorFields",d.current.errorFields)),u==="isDirty"&&(d.current.dirtyFields=Object.keys(b.current).filter(_=>b.current[_].isDirty),a.publish("formState.dirtyFields",d.current.dirtyFields)),u==="isTouched"&&(d.current.touchedFields=Object.keys(b.current).filter(_=>b.current[_].isTouched),a.publish("formState.touchedFields",d.current.touchedFields)))},[]),re=t.useCallback(r=>{T(r,"isDirty",!1),T(r,"isTouched",!1),T(r,"error",null)},[]),e=t.useCallback((r,u)=>{if(y.current[r]===u)return;y.current[r]=u,T(r,"error",u),a.publish(`errors.${r}`,u);const p=B();d.current.isError!==p&&(d.current.isError=p,a.publish("formState.isError",p))},[]),i=t.useCallback(r=>{if(!y.current[r])return;y.current[r]=null,T(r,"error",null),a.publish(`errors.${r}`,null);const u=B();d.current.isError!==u&&(d.current.isError=u,a.publish("formState.isError",u))},[]),v=t.useCallback(()=>{if(Object.keys(y.current)===0)return;Object.keys(y.current).forEach(u=>i(u)),y.current={};const r=B();d.current.isError!==r&&(d.current.isError=r,a.publish("formState.isError",r))},[]),F=t.useCallback(r=>{const u=Ee(r.target);u?e(r.target.name,u):i(r.target.name)},[]),j=t.useCallback((r,u,{shouldDirty:m=!0,shouldOnChange:p=!0}={})=>{if(u===c.current[r])return;f&&k.current.includes(r)&&(u=Number(u)||void 0),T(r,"isTouched",!0);const D=u!==o.current[r];m&&b.current[r].isDirty!==D&&T(r,"isDirty",D);const _=Y();d.current.isDirty!==_&&(d.current.isDirty=_,a.publish("formState.isDirty",_)),c.current[r]=u;const $=R.current.get(r);$&&$(u),a.publish(`values.${r}`,u,{shouldDirty:m,shouldOnChange:p}),p&&a.publish("onChange",r,u,c.current)},[]),A=t.useCallback((r,u)=>(R.current.set(r,u),b.current[r]={...ce},()=>{l&&R.current.delete(r)}),[]),q=t.useCallback((r,{keepError:u,keepDirty:m,keepTouched:p,keepCustomState:D,defaultValue:_})=>{const $=R.current.get(r);if(!$)throw new Error(`Cannot reset "${r}" because it's uncontrolled field`);o.current[r]=_,c.current[r]=_,$&&$(_),u||i(r),m||T(r,"isDirty",!1),p||T(r,"isTouched",!1)},[]),J=t.useCallback((r,u=V.getValues(r))=>{a.publish("onBlur",r,u,V.getValues())},[]),w=t.useCallback(r=>a.subscribe("onChange",r),[]),N=t.useCallback(r=>a.subscribe("onBlur",r),[]),V=t.useMemo(()=>({subscribe:K,reset:O,reload:E,resetField:q,setValue:j,getValues:X,getErrors:I,getFieldStates:W,getFormState:L,setError:e,clearError:i,clearErrors:v,checkValidity:F,getNumberFields:ae,getFieldValidity:ne,getDefaultValues:ue,setFieldState:T,triggerFieldBlur:J,resetFieldState:re,getControlledFields:oe,subscribeChange:w,subscribeBlur:N,setFormState:ee,getEvents:a.getEvents,getWatchEvents:a.getWatchEvents}),[h]),te=t.useCallback(()=>{[...g.current.querySelectorAll("[name]")].forEach(m=>{!m.defaultValue&&!R.current.has(m.name)&&o.current[m.name]&&(m.defaultValue=o.current[m.name]),m.type==="number"&&!k.current.includes(m.name)&&k.current.push(m.name)});const u=x();c.current={...u},o.current={...u}},[]),ve=t.useMemo(()=>({ref:g,watch:Z,actions:V,initForm:te,registerController:A,registerHookWatcher:U,lastReloadedAt:h,loadFormValues:x,getWatchValue:Q,channels:a}),[h]),Ce=t.useMemo(()=>({control:ve,actions:V,watch:Z}),[h]);return t.useLayoutEffect(()=>{g.current&&te()},[h]),t.useLayoutEffect(()=>{C(!1)},[]),Ce};exports.Controller=we;exports.Form=Fe;exports.useController=Re;exports.useForm=We;exports.useFormContext=le;exports.useWatch=ke;
|
|
22
|
+
<%s key={someKey} {...props} />`,F,T,P,T),re[T+F]=!0)}if(T=null,S!==void 0&&(h(S),T=""+S),d(f)&&(h(f.key),T=""+f.key),"key"in f){S={};for(var D in f)D!=="key"&&(S[D]=f[D])}else S=f;return T&&C(S,typeof e=="function"?e.displayName||e.name||"Unknown":e),b(e,T,O,x,g(),S,q,J)}function c(e){typeof e=="object"&&e!==null&&e.$$typeof===i&&e._store&&(e._store.validated=1)}var l=t,i=Symbol.for("react.transitional.element"),n=Symbol.for("react.portal"),E=Symbol.for("react.fragment"),A=Symbol.for("react.strict_mode"),N=Symbol.for("react.profiler"),Y=Symbol.for("react.consumer"),I=Symbol.for("react.context"),se=Symbol.for("react.forward_ref"),ne=Symbol.for("react.suspense"),ue=Symbol.for("react.suspense_list"),oe=Symbol.for("react.memo"),j=Symbol.for("react.lazy"),X=Symbol.for("react.activity"),B=Symbol.for("react.client.reference"),W=l.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,L=Object.prototype.hasOwnProperty,Z=Array.isArray,U=console.createTask?console.createTask:function(){return null};l={"react-stack-bottom-frame":function(e){return e()}};var Q,K={},ee=l["react-stack-bottom-frame"].bind(l,k)(),_=U(R(k)),re={};G.Fragment=E,G.jsx=function(e,f,S,F,x){var O=1e4>W.recentlyCreatedOwnerStacks++;return u(e,f,S,!1,F,x,O?Error("react-stack-top-frame"):ee,O?U(R(e)):_)},G.jsxs=function(e,f,S,F,x){var O=1e4>W.recentlyCreatedOwnerStacks++;return u(e,f,S,!0,F,x,O?Error("react-stack-top-frame"):ee,O?U(R(e)):_)}}()),G}var de;function ve(){return de||(de=1,process.env.NODE_ENV==="production"?te.exports=Se():te.exports=ye()),te.exports}var be=ve();const y=()=>{},me=t.createContext({ref:null,watch:y,actions:{reset:y,resetField:y,setValue:y,getValues:y,getErrors:y,getFieldStates:y,getFormStates:y,setError:y,clearError:y,clearErrors:y,checkValidity:y,getNumberFields:y,getFieldValidity:y,getDefaultValues:y,setFieldState:y,resetFieldState:y,getControlledFields:y},registerController:y,registerHookWatcher:y,lastReloadedAt:y,loadFormValues:y,getWatchValue:y,channels:{}}),le=()=>t.useContext(me),pe=({id:s,control:o,method:h,action:R,children:g,onChange:k,onBlur:d,onSubmit:C=()=>{},onInput:v=()=>{},onReset:b=()=>{},numberFields:u=[],className:c,...l})=>{const i=t.useCallback(n=>{o.ref&&(o.ref.current=n,o.ref.current&&o.initForm())},[o]);return t.useEffect(()=>{let n=()=>{},E=()=>{};return k&&(n=o.channels.subscribe("onChange",k)),d&&(E=o.channels.subscribe("onBlur",d)),()=>{n(),E()}},[o.lastReloadedAt]),be.jsx(me.Provider,{value:o,children:be.jsx("form",{id:s,ref:i,action:R,method:h,className:c,onInput:v,onSubmit:n=>{h||n.preventDefault();const E=o.loadFormValues();C(E)},onChange:n=>{const E=n.target.name;!E||o.actions.getControlledFields().has(E)||o.actions.setValue(E,n.target.value)},onBlur:n=>{const E=n.target.name;if(!E||o.actions.getControlledFields().has(E))return;const A=n.target.value;o.channels.publish("onBlur",E,A,o.actions.getValues())},onReset:n=>{o.actions.reset(),b(n)},...l,children:g},o.lastReloadedAt)})},Re=({control:s,name:o,compute:h})=>{const{getWatchValue:R,registerHookWatcher:g}=s||le(),k=R({name:o,compute:h}),[d,C]=t.useState(k);return t.useEffect(()=>g({name:o,compute:h,value:d,setValue:C}),[]),d},ke=({name:s,defaultValue:o})=>{const{actions:h,registerController:R,channels:g}=le(),k=t.useRef(),d=h.getDefaultValues()[s]||o||"",[C,v]=t.useState(d),b=Re({name:`fieldStates.${s}`}),u=t.useCallback((l,{shouldDirty:i=!0,shouldOnChange:n=!0}={})=>{var A,N;let E=l;(A=l==null?void 0:l.target)!=null&&A.value&&(E=l.target.value),(N=l==null?void 0:l.target)!=null&&N.checked&&(E=l.target.checked+""),v(E),h.setValue(s,E,{shouldDirty:i,shouldOnChange:n})},[h.setValue]),c=t.useCallback(l=>{const i=h.getValues(),n=l??i[s];g.publish("onBlur",s,n,i)},[]);return t.useEffect(()=>R(s,v),[]),{ref:k,name:s,defaultValue:d,value:C,onChange:u,onBlur:c,fieldState:b}},Fe=({name:s,defaultValue:o,render:h=({ref:R,name:g,defaultValue:k,value:d,onChange:C,onBlur:v,fieldState:b})=>null})=>{const R=ke({name:s,defaultValue:o});return h(R)},Te=["errors","fieldStates","formState"],H=(s={},o="")=>o.split(".").reduce((h,R)=>h&&h[R]!==void 0?h[R]:void 0,s),Ee=(s={},o="",h)=>{const R={...s};let g=s;const k=o.split(".");return k.forEach((d,C)=>{C<k.length-1?(g[d]||(g[d]={}),R[d]={...g[d]},g=R[d]):g[d]=h}),R},V=s=>Te.some(o=>s.startsWith(o))?s:"values."+s,_e=["badInput","customError","patternMismatch","rangeOverflow","rangeUnderflow","stepMismatch","tooLong","tooShort","typeMismatch","valueMissing"],ge=s=>{typeof s.setCustomValidity=="function"&&s.setCustomValidity("");let o=s.validity,h=_e.find(R=>o[R]);if(h)return{type:h,message:s.validationMessage}},we=()=>{const s=t.useRef(new Map),o=t.useRef(new Map),h=t.useCallback(()=>o.current,[]),R=t.useCallback(()=>s.current,[]),g=t.useCallback(()=>{s.current.clear(),o.current.clear()},[]),k=t.useCallback((b,...u)=>{const c=s.current.get(b),l=o.current.get(b);c&&c.forEach(i=>i(...u)),l&&l.forEach(i=>i(...u)),s.current.forEach((i,n)=>{n!==b&&b.startsWith(n)&&i.forEach(E=>E(...u))}),o.current.forEach((i,n)=>{n!==b&&b.startsWith(n)&&i.forEach(E=>E(...u))})},[]),d=t.useCallback(b=>{s.current.forEach((u,c)=>{c.startsWith(b)&&u.forEach(l=>l())}),o.current.forEach((u,c)=>{c.startsWith(b)&&u.forEach(l=>l())})},[]),C=t.useCallback((b,u)=>(s.current.has(b)||s.current.set(b,new Set),s.current.get(b).add(u),()=>{var c;return(c=s.current.get(b))==null?void 0:c.delete(u)}),[]),v=t.useCallback((b,u)=>{o.current.has(b)||(o.current.set(b,new Set),o.current.get(b).add(u))},[]);return{reset:g,publish:k,subscribe:C,subscribeWatch:v,getEvents:R,getWatchEvents:h,trigger:d}},Ae=()=>{const[s,o]=t.useState(),h=t.useCallback(()=>o(new Date().toString()),[]);return[s,h]},Oe=()=>{const[,s]=t.useState({});return t.useCallback(()=>s({}),[])},Pe=({channels:s,getValues:o,getErrors:h,getFieldStates:R,getFormState:g})=>{const k=Oe(),d=t.useCallback(({name:u,compute:c})=>{if(typeof c=="function")return c(o());if(Array.isArray(u)){const l={};return u.forEach(i=>{l[i]=d({name:i})}),l}return H({...o(),errors:{...h()},formState:{...g()},fieldStates:{...R()}},u)},[]),C=t.useCallback(u=>{if(!u)return s.subscribeWatch("values",()=>k()),o();if(typeof u=="string"){const c=V(u);return s.subscribeWatch(c,()=>k()),d({name:u})}if(Array.isArray(u)){const c={};return u.forEach(l=>{const i=V(l);s.subscribeWatch(i,()=>k()),c[l]=d({name:l})}),{...c}}throw new Error("Parameters of watch must be string or array of string")},[]),v=t.useCallback(({name:u,compute:c,setValue:l})=>{if(typeof c=="function")return s.subscribe("values",()=>{const n=d({compute:c});l(n)});if(!u)return s.subscribe("values",()=>{l(o())});if(typeof u=="string"){const i=V(u);return s.subscribe(i,()=>{const E=d({name:u});l(E)})}if(Array.isArray(u)){const i=d({name:u}),n=[];return u.forEach(E=>{const A=V(E),N=s.subscribe(A,()=>{const Y=d({name:E});i[E]=Y,l({...i})});n.push(N)}),()=>n.forEach(E=>E())}throw new Error("Parameters of name must be string or array of string or compute must be a function")},[]),b=t.useCallback((u,c)=>{if(!u)return s.subscribe("values",()=>c(o()));if(["onChange","onBlur"].includes(u))return s.subscribe(u,c);if(typeof u=="string"){const l=V(u);return s.subscribe(l,()=>c(d({name:u})))}if(Array.isArray(u)){const l={},i=[];return u.forEach(n=>{const E=V(n),A=s.subscribe(E,()=>{l[n]=d({name:n}),c({...l})});i.push(A)}),()=>i.forEach(n=>n())}throw new Error("Parameters of name must be string or array of string")},[]);return{watch:C,registerHookWatcher:v,getWatchValue:d,subscribe:b}},he={lastReset:null,isDirty:!1,isError:!1,errorFields:[],dirtyFields:[],touchedFields:[]},ce={isDirty:!1,isTouched:!1,error:null},je=[],xe={},Ne=({numberFields:s=je,defaultValues:o=xe,shouldUnRegister:h=!1,shouldConvertNumber:R=!1}={})=>{const[g,k]=Ae(),d=t.useRef(),C=t.useRef(s),v=t.useRef(new Map),b=t.useRef({}),u=t.useRef({}),c=t.useRef({...he}),l=t.useRef({...o}),i=t.useRef({...o}),n=we(),E=t.useCallback(r=>{u.current=Object.keys(i.current).reduce((a,m)=>({...a,[m]:{...r?{}:u.current[m]||{},...ce}}),{})},[]),A=t.useCallback((r={},{clearCustomFormStates:a=!1,clearCustomFieldStates:m=!1}={})=>{i.current={...i.current,...r},l.current={...i.current},v.current.forEach((p,$)=>{p(i.current[$]??"")}),b.current={},c.current={...a?{}:c.current,...he},C.current=s,v.current=new Map,n.reset(),E(m),s.length>0&&(R=!0),k()},[]),N=t.useCallback(()=>{const r=Object.fromEntries(new FormData(d.current));return v.current.forEach((m,p)=>{r[p]=l.current[p]}),R&&C.current.forEach(m=>r.hasOwnProperty(m)&&(r[m]=Number(r[m])||0)),{...l.current,...r}},[]),Y=t.useCallback(()=>!!Object.values(W()).find(r=>r.isDirty),[]),I=t.useCallback(()=>!!Object.values(B()).find(r=>!!r),[]),se=t.useCallback(r=>ge(r.target),[]),ne=t.useCallback(()=>i.current,[]),ue=t.useCallback(()=>C.current,[]),oe=t.useCallback(()=>v.current,[]),j=t.useCallback((r,a)=>a?Array.isArray(a)?a.reduce((m,p)=>({...m,[p]:H(r,p)}),{}):H(r,a):{...r},[]),X=t.useCallback(r=>j(l.current,r),[j]),B=t.useCallback(r=>j(b.current,r),[j]),W=t.useCallback(r=>j(u.current,r),[j]),L=t.useCallback(r=>j({...c.current,lastReset:g},r),[g]),{watch:Z,registerHookWatcher:U,getWatchValue:Q,subscribe:K}=Pe({channels:n,getValues:X,getErrors:B,getFieldStates:W,getFormState:L}),ee=t.useCallback((r,a)=>{const m=c.current;H(m,r)!==a&&(c.current=Ee(c.current,r,a),n.publish(`formState.${r}`,a))},[]),_=t.useCallback((r,a,m)=>{const p=u.current[r]||{...ce};H(p,a)!==m&&(u.current=Ee(u.current,`${r}.${a}`,m),n.publish(`fieldStates.${r}.${a}`,m),a==="error"&&(c.current.errorFields=Object.keys(b.current).filter(w=>!!b.current[w]),n.publish("formState.errorFields",c.current.errorFields)),a==="isDirty"&&(c.current.dirtyFields=Object.keys(u.current).filter(w=>u.current[w].isDirty),n.publish("formState.dirtyFields",c.current.dirtyFields)),a==="isTouched"&&(c.current.touchedFields=Object.keys(u.current).filter(w=>u.current[w].isTouched),n.publish("formState.touchedFields",c.current.touchedFields)))},[]),re=t.useCallback(r=>{_(r,"isDirty",!1),_(r,"isTouched",!1),_(r,"error",null)},[]),e=t.useCallback((r,a)=>{if(b.current[r]===a)return;b.current[r]=a,_(r,"error",a),n.publish(`errors.${r}`,a);const p=I();c.current.isError!==p&&(c.current.isError=p,n.publish("formState.isError",p))},[]),f=t.useCallback(r=>{if(!b.current[r])return;b.current[r]=null,_(r,"error",null),n.publish(`errors.${r}`,null);const a=I();c.current.isError!==a&&(c.current.isError=a,n.publish("formState.isError",a))},[]),S=t.useCallback(()=>{if(Object.keys(b.current)===0)return;Object.keys(b.current).forEach(a=>f(a)),b.current={};const r=I();c.current.isError!==r&&(c.current.isError=r,n.publish("formState.isError",r))},[]),F=t.useCallback(r=>{const a=ge(r.target);a?e(r.target.name,a):f(r.target.name)},[]),x=t.useCallback((r,a,{shouldDirty:m=!0,shouldOnChange:p=!0}={})=>{if(a===l.current[r])return;R&&C.current.includes(r)&&(a=Number(a)||void 0),_(r,"isTouched",!0);const $=a!==i.current[r];m&&u.current[r].isDirty!==$&&_(r,"isDirty",$);const w=Y();c.current.isDirty!==w&&(c.current.isDirty=w,n.publish("formState.isDirty",w)),l.current[r]=a;const M=v.current.get(r);M&&M(a),n.publish(`values.${r}`,a,{shouldDirty:m,shouldOnChange:p}),p&&n.publish("onChange",r,a,l.current)},[]),O=t.useCallback((r,a)=>(v.current.set(r,a),u.current[r]={...ce},()=>{h&&v.current.delete(r)}),[]),q=t.useCallback((r,{keepError:a,keepDirty:m,keepTouched:p,keepCustomState:$,defaultValue:w})=>{const M=v.current.get(r);if(!M)throw new Error(`Cannot reset "${r}" because it's uncontrolled field`);i.current[r]=w,l.current[r]=w,M&&M(w),a||f(r),m||_(r,"isDirty",!1),p||_(r,"isTouched",!1)},[]),J=t.useCallback(r=>{if(!r)return n.trigger("values");if(Array.isArray(r))return r.forEach(m=>{const p=V(m);n.trigger(p)});const a=V(r);n.trigger(a)},[]),T=t.useCallback((r,a=P.getValues(r))=>{n.publish("onBlur",r,a,P.getValues())},[]),P=t.useMemo(()=>({subscribe:K,reset:A,trigger:J,reload:k,resetField:q,setValue:x,getValues:X,getErrors:B,getFieldStates:W,getFormState:L,setError:e,clearError:f,clearErrors:S,checkValidity:F,getNumberFields:ue,getFieldValidity:se,getDefaultValues:ne,setFieldState:_,triggerFieldBlur:T,resetFieldState:re,getControlledFields:oe,setFormState:ee,getEvents:n.getEvents,getWatchEvents:n.getWatchEvents}),[g]),D=t.useCallback(()=>{[...d.current.querySelectorAll("[name]")].forEach(m=>{!m.defaultValue&&!v.current.has(m.name)&&i.current[m.name]&&(m.defaultValue=i.current[m.name]),m.type==="number"&&!C.current.includes(m.name)&&C.current.push(m.name)});const a=N();l.current={...a},i.current={...a}},[]),ae=t.useMemo(()=>({ref:d,watch:Z,actions:P,initForm:D,registerController:O,registerHookWatcher:U,lastReloadedAt:g,loadFormValues:N,getWatchValue:Q,channels:n}),[g]),Ce=t.useMemo(()=>({control:ae,actions:P,watch:Z}),[g]);return t.useLayoutEffect(()=>{d.current&&D()},[g]),t.useLayoutEffect(()=>{E(!1)},[]),Ce};exports.Controller=Fe;exports.Form=pe;exports.useController=ke;exports.useForm=Ne;exports.useFormContext=le;exports.useWatch=Re;
|