remix-validated-form 4.2.0 → 4.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.
Files changed (181) hide show
  1. package/.turbo/turbo-build.log +15 -9
  2. package/README.md +1 -0
  3. package/browser/ValidatedForm.js +16 -26
  4. package/browser/hooks.d.ts +2 -0
  5. package/browser/hooks.js +20 -9
  6. package/browser/internal/MultiValueMap.d.ts +2 -0
  7. package/browser/internal/MultiValueMap.js +4 -0
  8. package/browser/internal/getInputProps.js +2 -1
  9. package/browser/internal/hooks.d.ts +20 -9
  10. package/browser/internal/hooks.js +32 -23
  11. package/browser/internal/logic/getRadioChecked.js +10 -0
  12. package/browser/internal/reset.d.ts +28 -0
  13. package/browser/internal/reset.js +13 -0
  14. package/browser/internal/state/cleanup.d.ts +2 -0
  15. package/browser/internal/state/cleanup.js +6 -0
  16. package/browser/internal/state/controlledFieldStore.d.ts +24 -0
  17. package/browser/internal/state/controlledFieldStore.js +57 -0
  18. package/browser/internal/state/controlledFields.d.ts +6 -62
  19. package/browser/internal/state/controlledFields.js +36 -63
  20. package/browser/internal/state/createFormStore.d.ts +40 -0
  21. package/browser/internal/state/createFormStore.js +83 -0
  22. package/browser/internal/state/storeFamily.d.ts +9 -0
  23. package/browser/internal/state/storeFamily.js +18 -0
  24. package/browser/internal/state/storeHooks.d.ts +5 -0
  25. package/browser/internal/state/storeHooks.js +10 -0
  26. package/browser/internal/state.d.ts +0 -27
  27. package/browser/internal/state.js +0 -5
  28. package/browser/unreleased/formStateHooks.d.ts +15 -0
  29. package/browser/unreleased/formStateHooks.js +23 -14
  30. package/browser/userFacingFormContext.d.ts +8 -0
  31. package/browser/userFacingFormContext.js +5 -4
  32. package/dist/remix-validated-form.cjs.js +17 -0
  33. package/dist/remix-validated-form.es.js +2844 -0
  34. package/dist/remix-validated-form.umd.js +17 -0
  35. package/{build → dist/types}/ValidatedForm.d.ts +0 -0
  36. package/{build → dist/types}/hooks.d.ts +2 -0
  37. package/{build → dist/types}/index.d.ts +0 -0
  38. package/{build → dist/types}/internal/MultiValueMap.d.ts +2 -0
  39. package/{build → dist/types}/internal/constants.d.ts +0 -0
  40. package/{build → dist/types}/internal/flatten.d.ts +0 -0
  41. package/{build → dist/types}/internal/formContext.d.ts +0 -0
  42. package/{build → dist/types}/internal/getInputProps.d.ts +0 -0
  43. package/dist/types/internal/hooks.d.ts +32 -0
  44. package/{build → dist/types}/internal/hydratable.d.ts +0 -0
  45. package/{build → dist/types}/internal/logic/getCheckboxChecked.d.ts +0 -0
  46. package/{build → dist/types}/internal/logic/getRadioChecked.d.ts +0 -0
  47. package/dist/types/internal/state/cleanup.d.ts +2 -0
  48. package/dist/types/internal/state/controlledFieldStore.d.ts +24 -0
  49. package/dist/types/internal/state/controlledFields.d.ts +6 -0
  50. package/dist/types/internal/state/createFormStore.d.ts +40 -0
  51. package/dist/types/internal/state/storeFamily.d.ts +9 -0
  52. package/dist/types/internal/state/storeHooks.d.ts +5 -0
  53. package/{build → dist/types}/internal/submissionCallbacks.d.ts +0 -0
  54. package/{build → dist/types}/internal/util.d.ts +0 -0
  55. package/{build → dist/types}/server.d.ts +0 -0
  56. package/{build → dist/types}/unreleased/formStateHooks.d.ts +15 -0
  57. package/{build → dist/types}/userFacingFormContext.d.ts +8 -0
  58. package/{build → dist/types}/validation/createValidator.d.ts +0 -0
  59. package/{build → dist/types}/validation/types.d.ts +0 -0
  60. package/package.json +11 -9
  61. package/src/ValidatedForm.tsx +25 -43
  62. package/src/hooks.ts +29 -17
  63. package/src/internal/MultiValueMap.ts +6 -0
  64. package/src/internal/getInputProps.test.ts +251 -0
  65. package/src/internal/getInputProps.ts +2 -1
  66. package/src/internal/hooks.ts +69 -45
  67. package/src/internal/logic/getRadioChecked.ts +11 -0
  68. package/src/internal/state/cleanup.ts +8 -0
  69. package/src/internal/state/controlledFieldStore.ts +91 -0
  70. package/src/internal/state/controlledFields.ts +78 -0
  71. package/src/internal/state/createFormStore.ts +152 -0
  72. package/src/internal/state/storeFamily.ts +24 -0
  73. package/src/internal/state/storeHooks.ts +22 -0
  74. package/src/unreleased/formStateHooks.ts +50 -27
  75. package/src/userFacingFormContext.ts +17 -5
  76. package/src/validation/validation.test.ts +304 -0
  77. package/tsconfig.json +4 -1
  78. package/vite.config.ts +7 -0
  79. package/.turbo/turbo-test.log +0 -11
  80. package/browser/components.d.ts +0 -7
  81. package/browser/components.js +0 -10
  82. package/browser/internal/SingleTypeMultiValueMap.d.ts +0 -9
  83. package/browser/internal/SingleTypeMultiValueMap.js +0 -41
  84. package/browser/internal/customState.d.ts +0 -105
  85. package/browser/internal/customState.js +0 -46
  86. package/browser/internal/hooks-valtio.d.ts +0 -18
  87. package/browser/internal/hooks-valtio.js +0 -110
  88. package/browser/internal/hooks-zustand.d.ts +0 -16
  89. package/browser/internal/hooks-zustand.js +0 -100
  90. package/browser/internal/immerMiddleware.d.ts +0 -6
  91. package/browser/internal/immerMiddleware.js +0 -7
  92. package/browser/internal/logic/elementUtils.d.ts +0 -3
  93. package/browser/internal/logic/elementUtils.js +0 -3
  94. package/browser/internal/logic/getCheckboxChecked copy.d.ts +0 -1
  95. package/browser/internal/logic/getCheckboxChecked copy.js +0 -9
  96. package/browser/internal/logic/setFieldValue.d.ts +0 -1
  97. package/browser/internal/logic/setFieldValue.js +0 -40
  98. package/browser/internal/logic/setInputValueInForm.d.ts +0 -1
  99. package/browser/internal/logic/setInputValueInForm.js +0 -77
  100. package/browser/internal/setFieldValue.d.ts +0 -20
  101. package/browser/internal/setFieldValue.js +0 -83
  102. package/browser/internal/setFormValues.d.ts +0 -2
  103. package/browser/internal/setFormValues.js +0 -26
  104. package/browser/internal/state/setFieldValue.d.ts +0 -0
  105. package/browser/internal/state/setFieldValue.js +0 -1
  106. package/browser/internal/state-valtio.d.ts +0 -62
  107. package/browser/internal/state-valtio.js +0 -69
  108. package/browser/internal/state-zustand.d.ts +0 -47
  109. package/browser/internal/state-zustand.js +0 -85
  110. package/browser/internal/test.d.ts +0 -0
  111. package/browser/internal/test.js +0 -15
  112. package/browser/internal/useMultiValueMap.d.ts +0 -1
  113. package/browser/internal/useMultiValueMap.js +0 -11
  114. package/browser/internal/watch.d.ts +0 -18
  115. package/browser/internal/watch.js +0 -122
  116. package/browser/lowLevelHooks.d.ts +0 -0
  117. package/browser/lowLevelHooks.js +0 -1
  118. package/browser/test-data/testFormData.d.ts +0 -15
  119. package/browser/test-data/testFormData.js +0 -46
  120. package/browser/types.d.ts +0 -1
  121. package/browser/types.js +0 -1
  122. package/browser/validation/validation.test.d.ts +0 -1
  123. package/browser/validation/validation.test.js +0 -274
  124. package/browser/validation/withYup.d.ts +0 -6
  125. package/browser/validation/withYup.js +0 -40
  126. package/browser/validation/withZod.d.ts +0 -6
  127. package/browser/validation/withZod.js +0 -50
  128. package/build/ValidatedForm.js +0 -257
  129. package/build/hooks.js +0 -79
  130. package/build/index.js +0 -18
  131. package/build/internal/MultiValueMap.js +0 -44
  132. package/build/internal/SingleTypeMultiValueMap.d.ts +0 -8
  133. package/build/internal/SingleTypeMultiValueMap.js +0 -45
  134. package/build/internal/constants.js +0 -7
  135. package/build/internal/flatten.js +0 -14
  136. package/build/internal/formContext.js +0 -5
  137. package/build/internal/getInputProps.js +0 -57
  138. package/build/internal/hooks-valtio.d.ts +0 -18
  139. package/build/internal/hooks-valtio.js +0 -128
  140. package/build/internal/hooks-zustand.d.ts +0 -16
  141. package/build/internal/hooks-zustand.js +0 -117
  142. package/build/internal/hooks.d.ts +0 -21
  143. package/build/internal/hooks.js +0 -128
  144. package/build/internal/hydratable.js +0 -17
  145. package/build/internal/immerMiddleware.d.ts +0 -6
  146. package/build/internal/immerMiddleware.js +0 -14
  147. package/build/internal/logic/elementUtils.d.ts +0 -3
  148. package/build/internal/logic/elementUtils.js +0 -9
  149. package/build/internal/logic/getCheckboxChecked.js +0 -13
  150. package/build/internal/logic/getRadioChecked.js +0 -9
  151. package/build/internal/logic/setFieldValue.d.ts +0 -1
  152. package/build/internal/logic/setFieldValue.js +0 -47
  153. package/build/internal/logic/setInputValueInForm.d.ts +0 -1
  154. package/build/internal/logic/setInputValueInForm.js +0 -84
  155. package/build/internal/setFormValues.d.ts +0 -2
  156. package/build/internal/setFormValues.js +0 -33
  157. package/build/internal/state/atomUtils.d.ts +0 -38
  158. package/build/internal/state/atomUtils.js +0 -13
  159. package/build/internal/state/controlledFields.d.ts +0 -62
  160. package/build/internal/state/controlledFields.js +0 -85
  161. package/build/internal/state-valtio.d.ts +0 -62
  162. package/build/internal/state-valtio.js +0 -83
  163. package/build/internal/state-zustand.d.ts +0 -47
  164. package/build/internal/state-zustand.js +0 -91
  165. package/build/internal/state.d.ts +0 -370
  166. package/build/internal/state.js +0 -76
  167. package/build/internal/submissionCallbacks.js +0 -17
  168. package/build/internal/test.d.ts +0 -1
  169. package/build/internal/test.js +0 -12
  170. package/build/internal/util.js +0 -41
  171. package/build/internal/watch.d.ts +0 -20
  172. package/build/internal/watch.js +0 -126
  173. package/build/server.js +0 -32
  174. package/build/types.d.ts +0 -1
  175. package/build/types.js +0 -2
  176. package/build/unreleased/formStateHooks.js +0 -59
  177. package/build/userFacingFormContext.js +0 -30
  178. package/build/validation/createValidator.js +0 -45
  179. package/build/validation/types.js +0 -2
  180. package/src/internal/state/atomUtils.ts +0 -13
  181. package/src/internal/state.ts +0 -132
@@ -0,0 +1,17 @@
1
+ var Qh=Object.defineProperty,ey=Object.defineProperties;var ty=Object.getOwnPropertyDescriptors;var Fe=Object.getOwnPropertySymbols;var bn=Object.prototype.hasOwnProperty,_n=Object.prototype.propertyIsEnumerable;var mn=(y,v,S)=>v in y?Qh(y,v,{enumerable:!0,configurable:!0,writable:!0,value:S}):y[v]=S,j=(y,v)=>{for(var S in v||(v={}))bn.call(v,S)&&mn(y,S,v[S]);if(Fe)for(var S of Fe(v))_n.call(v,S)&&mn(y,S,v[S]);return y},Q=(y,v)=>ey(y,ty(v));var $n=(y,v)=>{var S={};for(var F in y)bn.call(y,F)&&v.indexOf(F)<0&&(S[F]=y[F]);if(y!=null&&Fe)for(var F of Fe(y))v.indexOf(F)<0&&_n.call(y,F)&&(S[F]=y[F]);return S};(function(y,v){typeof exports=="object"&&typeof module!="undefined"?v(exports,require("react"),require("@remix-run/react"),require("@remix-run/server-runtime")):typeof define=="function"&&define.amd?define(["exports","react","@remix-run/react","@remix-run/server-runtime"],v):(y=typeof globalThis!="undefined"?globalThis:y||self,v(y["remix-validated-form"]={},y.React,y.react,y.serverRuntime))})(this,function(y,v,S,F){"use strict";function Sn(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var L=Sn(v),le=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{};function Pn(){this.__data__=[],this.size=0}var En=Pn;function In(e,t){return e===t||e!==e&&t!==t}var we=In,An=we;function On(e,t){for(var r=e.length;r--;)if(An(e[r][0],t))return r;return-1}var de=On,Tn=de,Fn=Array.prototype,wn=Fn.splice;function Cn(e){var t=this.__data__,r=Tn(t,e);if(r<0)return!1;var n=t.length-1;return r==n?t.pop():wn.call(t,r,1),--this.size,!0}var xn=Cn,Dn=de;function Mn(e){var t=this.__data__,r=Dn(t,e);return r<0?void 0:t[r][1]}var jn=Mn,Ln=de;function Gn(e){return Ln(this.__data__,e)>-1}var Hn=Gn,Vn=de;function Rn(e,t){var r=this.__data__,n=Vn(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}var Kn=Rn,Nn=En,Bn=xn,Un=jn,qn=Hn,zn=Kn;function B(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}B.prototype.clear=Nn,B.prototype.delete=Bn,B.prototype.get=Un,B.prototype.has=qn,B.prototype.set=zn;var ve=B,Wn=ve;function kn(){this.__data__=new Wn,this.size=0}var Xn=kn;function Yn(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}var Zn=Yn;function Jn(e){return this.__data__.get(e)}var Qn=Jn;function ea(e){return this.__data__.has(e)}var ta=ea,ra=typeof le=="object"&&le&&le.Object===Object&&le,$t=ra,na=$t,aa=typeof self=="object"&&self&&self.Object===Object&&self,sa=na||aa||Function("return this")(),M=sa,ia=M,oa=ia.Symbol,he=oa,St=he,Pt=Object.prototype,ua=Pt.hasOwnProperty,ca=Pt.toString,ee=St?St.toStringTag:void 0;function fa(e){var t=ua.call(e,ee),r=e[ee];try{e[ee]=void 0;var n=!0}catch{}var a=ca.call(e);return n&&(t?e[ee]=r:delete e[ee]),a}var la=fa,da=Object.prototype,va=da.toString;function ha(e){return va.call(e)}var ya=ha,Et=he,pa=la,ga=ya,ma="[object Null]",ba="[object Undefined]",It=Et?Et.toStringTag:void 0;function _a(e){return e==null?e===void 0?ba:ma:It&&It in Object(e)?pa(e):ga(e)}var te=_a;function $a(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var re=$a,Sa=te,Pa=re,Ea="[object AsyncFunction]",Ia="[object Function]",Aa="[object GeneratorFunction]",Oa="[object Proxy]";function Ta(e){if(!Pa(e))return!1;var t=Sa(e);return t==Ia||t==Aa||t==Ea||t==Oa}var At=Ta,Fa=M,wa=Fa["__core-js_shared__"],Ca=wa,Ce=Ca,Ot=function(){var e=/[^.]+$/.exec(Ce&&Ce.keys&&Ce.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function xa(e){return!!Ot&&Ot in e}var Da=xa,Ma=Function.prototype,ja=Ma.toString;function La(e){if(e!=null){try{return ja.call(e)}catch{}try{return e+""}catch{}}return""}var Tt=La,Ga=At,Ha=Da,Va=re,Ra=Tt,Ka=/[\\^$.*+?()[\]{}|]/g,Na=/^\[object .+?Constructor\]$/,Ba=Function.prototype,Ua=Object.prototype,qa=Ba.toString,za=Ua.hasOwnProperty,Wa=RegExp("^"+qa.call(za).replace(Ka,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function ka(e){if(!Va(e)||Ha(e))return!1;var t=Ga(e)?Wa:Na;return t.test(Ra(e))}var Xa=ka;function Ya(e,t){return e==null?void 0:e[t]}var Za=Ya,Ja=Xa,Qa=Za;function es(e,t){var r=Qa(e,t);return Ja(r)?r:void 0}var V=es,ts=V,rs=M,ns=ts(rs,"Map"),xe=ns,as=V,ss=as(Object,"create"),ye=ss,Ft=ye;function is(){this.__data__=Ft?Ft(null):{},this.size=0}var os=is;function us(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var cs=us,fs=ye,ls="__lodash_hash_undefined__",ds=Object.prototype,vs=ds.hasOwnProperty;function hs(e){var t=this.__data__;if(fs){var r=t[e];return r===ls?void 0:r}return vs.call(t,e)?t[e]:void 0}var ys=hs,ps=ye,gs=Object.prototype,ms=gs.hasOwnProperty;function bs(e){var t=this.__data__;return ps?t[e]!==void 0:ms.call(t,e)}var _s=bs,$s=ye,Ss="__lodash_hash_undefined__";function Ps(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=$s&&t===void 0?Ss:t,this}var Es=Ps,Is=os,As=cs,Os=ys,Ts=_s,Fs=Es;function U(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}U.prototype.clear=Is,U.prototype.delete=As,U.prototype.get=Os,U.prototype.has=Ts,U.prototype.set=Fs;var ws=U,wt=ws,Cs=ve,xs=xe;function Ds(){this.size=0,this.__data__={hash:new wt,map:new(xs||Cs),string:new wt}}var Ms=Ds;function js(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}var Ls=js,Gs=Ls;function Hs(e,t){var r=e.__data__;return Gs(t)?r[typeof t=="string"?"string":"hash"]:r.map}var pe=Hs,Vs=pe;function Rs(e){var t=Vs(this,e).delete(e);return this.size-=t?1:0,t}var Ks=Rs,Ns=pe;function Bs(e){return Ns(this,e).get(e)}var Us=Bs,qs=pe;function zs(e){return qs(this,e).has(e)}var Ws=zs,ks=pe;function Xs(e,t){var r=ks(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}var Ys=Xs,Zs=Ms,Js=Ks,Qs=Us,ei=Ws,ti=Ys;function q(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}q.prototype.clear=Zs,q.prototype.delete=Js,q.prototype.get=Qs,q.prototype.has=ei,q.prototype.set=ti;var De=q,ri=ve,ni=xe,ai=De,si=200;function ii(e,t){var r=this.__data__;if(r instanceof ri){var n=r.__data__;if(!ni||n.length<si-1)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new ai(n)}return r.set(e,t),this.size=r.size,this}var oi=ii,ui=ve,ci=Xn,fi=Zn,li=Qn,di=ta,vi=oi;function z(e){var t=this.__data__=new ui(e);this.size=t.size}z.prototype.clear=ci,z.prototype.delete=fi,z.prototype.get=li,z.prototype.has=di,z.prototype.set=vi;var Ct=z,hi="__lodash_hash_undefined__";function yi(e){return this.__data__.set(e,hi),this}var pi=yi;function gi(e){return this.__data__.has(e)}var mi=gi,bi=De,_i=pi,$i=mi;function ge(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new bi;++t<r;)this.add(e[t])}ge.prototype.add=ge.prototype.push=_i,ge.prototype.has=$i;var xt=ge;function Si(e,t){for(var r=-1,n=e==null?0:e.length;++r<n;)if(t(e[r],r,e))return!0;return!1}var Pi=Si;function Ei(e,t){return e.has(t)}var Dt=Ei,Ii=xt,Ai=Pi,Oi=Dt,Ti=1,Fi=2;function wi(e,t,r,n,a,s){var i=r&Ti,o=e.length,c=t.length;if(o!=c&&!(i&&c>o))return!1;var u=s.get(e),f=s.get(t);if(u&&f)return u==t&&f==e;var l=-1,d=!0,h=r&Fi?new Ii:void 0;for(s.set(e,t),s.set(t,e);++l<o;){var m=e[l],_=t[l];if(n)var A=i?n(_,m,l,t,e,s):n(m,_,l,e,t,s);if(A!==void 0){if(A)continue;d=!1;break}if(h){if(!Ai(t,function($,P){if(!Oi(h,P)&&(m===$||a(m,$,r,n,s)))return h.push(P)})){d=!1;break}}else if(!(m===_||a(m,_,r,n,s))){d=!1;break}}return s.delete(e),s.delete(t),d}var Mt=wi,Ci=M,xi=Ci.Uint8Array,Di=xi;function Mi(e){var t=-1,r=Array(e.size);return e.forEach(function(n,a){r[++t]=[a,n]}),r}var ji=Mi;function Li(e){var t=-1,r=Array(e.size);return e.forEach(function(n){r[++t]=n}),r}var Me=Li,jt=he,Lt=Di,Gi=we,Hi=Mt,Vi=ji,Ri=Me,Ki=1,Ni=2,Bi="[object Boolean]",Ui="[object Date]",qi="[object Error]",zi="[object Map]",Wi="[object Number]",ki="[object RegExp]",Xi="[object Set]",Yi="[object String]",Zi="[object Symbol]",Ji="[object ArrayBuffer]",Qi="[object DataView]",Gt=jt?jt.prototype:void 0,je=Gt?Gt.valueOf:void 0;function eo(e,t,r,n,a,s,i){switch(r){case Qi:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case Ji:return!(e.byteLength!=t.byteLength||!s(new Lt(e),new Lt(t)));case Bi:case Ui:case Wi:return Gi(+e,+t);case qi:return e.name==t.name&&e.message==t.message;case ki:case Yi:return e==t+"";case zi:var o=Vi;case Xi:var c=n&Ki;if(o||(o=Ri),e.size!=t.size&&!c)return!1;var u=i.get(e);if(u)return u==t;n|=Ni,i.set(e,t);var f=Hi(o(e),o(t),n,a,s,i);return i.delete(e),f;case Zi:if(je)return je.call(e)==je.call(t)}return!1}var to=eo;function ro(e,t){for(var r=-1,n=t.length,a=e.length;++r<n;)e[a+r]=t[r];return e}var Ht=ro,no=Array.isArray,G=no,ao=Ht,so=G;function io(e,t,r){var n=t(e);return so(e)?n:ao(n,r(e))}var Vt=io;function oo(e,t){for(var r=-1,n=e==null?0:e.length,a=0,s=[];++r<n;){var i=e[r];t(i,r,e)&&(s[a++]=i)}return s}var uo=oo;function co(){return[]}var Rt=co,fo=uo,lo=Rt,vo=Object.prototype,ho=vo.propertyIsEnumerable,Kt=Object.getOwnPropertySymbols,yo=Kt?function(e){return e==null?[]:(e=Object(e),fo(Kt(e),function(t){return ho.call(e,t)}))}:lo,Nt=yo;function po(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}var go=po;function mo(e){return e!=null&&typeof e=="object"}var ne=mo,bo=te,_o=ne,$o="[object Arguments]";function So(e){return _o(e)&&bo(e)==$o}var Po=So,Bt=Po,Eo=ne,Ut=Object.prototype,Io=Ut.hasOwnProperty,Ao=Ut.propertyIsEnumerable,Oo=Bt(function(){return arguments}())?Bt:function(e){return Eo(e)&&Io.call(e,"callee")&&!Ao.call(e,"callee")},qt=Oo,me={exports:{}};function To(){return!1}var Fo=To;(function(e,t){var r=M,n=Fo,a=t&&!t.nodeType&&t,s=a&&!0&&e&&!e.nodeType&&e,i=s&&s.exports===a,o=i?r.Buffer:void 0,c=o?o.isBuffer:void 0,u=c||n;e.exports=u})(me,me.exports);var wo=9007199254740991,Co=/^(?:0|[1-9]\d*)$/;function xo(e,t){var r=typeof e;return t=t==null?wo:t,!!t&&(r=="number"||r!="symbol"&&Co.test(e))&&e>-1&&e%1==0&&e<t}var Le=xo,Do=9007199254740991;function Mo(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=Do}var Ge=Mo,jo=te,Lo=Ge,Go=ne,Ho="[object Arguments]",Vo="[object Array]",Ro="[object Boolean]",Ko="[object Date]",No="[object Error]",Bo="[object Function]",Uo="[object Map]",qo="[object Number]",zo="[object Object]",Wo="[object RegExp]",ko="[object Set]",Xo="[object String]",Yo="[object WeakMap]",Zo="[object ArrayBuffer]",Jo="[object DataView]",Qo="[object Float32Array]",eu="[object Float64Array]",tu="[object Int8Array]",ru="[object Int16Array]",nu="[object Int32Array]",au="[object Uint8Array]",su="[object Uint8ClampedArray]",iu="[object Uint16Array]",ou="[object Uint32Array]",b={};b[Qo]=b[eu]=b[tu]=b[ru]=b[nu]=b[au]=b[su]=b[iu]=b[ou]=!0,b[Ho]=b[Vo]=b[Zo]=b[Ro]=b[Jo]=b[Ko]=b[No]=b[Bo]=b[Uo]=b[qo]=b[zo]=b[Wo]=b[ko]=b[Xo]=b[Yo]=!1;function uu(e){return Go(e)&&Lo(e.length)&&!!b[jo(e)]}var cu=uu;function fu(e){return function(t){return e(t)}}var lu=fu,He={exports:{}};(function(e,t){var r=$t,n=t&&!t.nodeType&&t,a=n&&!0&&e&&!e.nodeType&&e,s=a&&a.exports===n,i=s&&r.process,o=function(){try{var c=a&&a.require&&a.require("util").types;return c||i&&i.binding&&i.binding("util")}catch{}}();e.exports=o})(He,He.exports);var du=cu,vu=lu,zt=He.exports,Wt=zt&&zt.isTypedArray,hu=Wt?vu(Wt):du,kt=hu,yu=go,pu=qt,gu=G,mu=me.exports,bu=Le,_u=kt,$u=Object.prototype,Su=$u.hasOwnProperty;function Pu(e,t){var r=gu(e),n=!r&&pu(e),a=!r&&!n&&mu(e),s=!r&&!n&&!a&&_u(e),i=r||n||a||s,o=i?yu(e.length,String):[],c=o.length;for(var u in e)(t||Su.call(e,u))&&!(i&&(u=="length"||a&&(u=="offset"||u=="parent")||s&&(u=="buffer"||u=="byteLength"||u=="byteOffset")||bu(u,c)))&&o.push(u);return o}var Xt=Pu,Eu=Object.prototype;function Iu(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||Eu;return e===r}var Yt=Iu;function Au(e,t){return function(r){return e(t(r))}}var Zt=Au,Ou=Zt,Tu=Ou(Object.keys,Object),Fu=Tu,wu=Yt,Cu=Fu,xu=Object.prototype,Du=xu.hasOwnProperty;function Mu(e){if(!wu(e))return Cu(e);var t=[];for(var r in Object(e))Du.call(e,r)&&r!="constructor"&&t.push(r);return t}var ju=Mu,Lu=At,Gu=Ge;function Hu(e){return e!=null&&Gu(e.length)&&!Lu(e)}var Jt=Hu,Vu=Xt,Ru=ju,Ku=Jt;function Nu(e){return Ku(e)?Vu(e):Ru(e)}var Qt=Nu,Bu=Vt,Uu=Nt,qu=Qt;function zu(e){return Bu(e,qu,Uu)}var Wu=zu,er=Wu,ku=1,Xu=Object.prototype,Yu=Xu.hasOwnProperty;function Zu(e,t,r,n,a,s){var i=r&ku,o=er(e),c=o.length,u=er(t),f=u.length;if(c!=f&&!i)return!1;for(var l=c;l--;){var d=o[l];if(!(i?d in t:Yu.call(t,d)))return!1}var h=s.get(e),m=s.get(t);if(h&&m)return h==t&&m==e;var _=!0;s.set(e,t),s.set(t,e);for(var A=i;++l<c;){d=o[l];var $=e[d],P=t[d];if(n)var T=i?n(P,$,d,t,e,s):n($,P,d,e,t,s);if(!(T===void 0?$===P||a($,P,r,n,s):T)){_=!1;break}A||(A=d=="constructor")}if(_&&!A){var O=e.constructor,x=t.constructor;O!=x&&"constructor"in e&&"constructor"in t&&!(typeof O=="function"&&O instanceof O&&typeof x=="function"&&x instanceof x)&&(_=!1)}return s.delete(e),s.delete(t),_}var Ju=Zu,Qu=V,ec=M,tc=Qu(ec,"DataView"),rc=tc,nc=V,ac=M,sc=nc(ac,"Promise"),ic=sc,oc=V,uc=M,cc=oc(uc,"Set"),tr=cc,fc=V,lc=M,dc=fc(lc,"WeakMap"),vc=dc,Ve=rc,Re=xe,Ke=ic,Ne=tr,Be=vc,rr=te,W=Tt,nr="[object Map]",hc="[object Object]",ar="[object Promise]",sr="[object Set]",ir="[object WeakMap]",or="[object DataView]",yc=W(Ve),pc=W(Re),gc=W(Ke),mc=W(Ne),bc=W(Be),R=rr;(Ve&&R(new Ve(new ArrayBuffer(1)))!=or||Re&&R(new Re)!=nr||Ke&&R(Ke.resolve())!=ar||Ne&&R(new Ne)!=sr||Be&&R(new Be)!=ir)&&(R=function(e){var t=rr(e),r=t==hc?e.constructor:void 0,n=r?W(r):"";if(n)switch(n){case yc:return or;case pc:return nr;case gc:return ar;case mc:return sr;case bc:return ir}return t});var _c=R,Ue=Ct,$c=Mt,Sc=to,Pc=Ju,ur=_c,cr=G,fr=me.exports,Ec=kt,Ic=1,lr="[object Arguments]",dr="[object Array]",be="[object Object]",Ac=Object.prototype,vr=Ac.hasOwnProperty;function Oc(e,t,r,n,a,s){var i=cr(e),o=cr(t),c=i?dr:ur(e),u=o?dr:ur(t);c=c==lr?be:c,u=u==lr?be:u;var f=c==be,l=u==be,d=c==u;if(d&&fr(e)){if(!fr(t))return!1;i=!0,f=!1}if(d&&!f)return s||(s=new Ue),i||Ec(e)?$c(e,t,r,n,a,s):Sc(e,t,c,r,n,a,s);if(!(r&Ic)){var h=f&&vr.call(e,"__wrapped__"),m=l&&vr.call(t,"__wrapped__");if(h||m){var _=h?e.value():e,A=m?t.value():t;return s||(s=new Ue),a(_,A,r,n,s)}}return d?(s||(s=new Ue),Pc(e,t,r,n,a,s)):!1}var Tc=Oc,Fc=Tc,hr=ne;function yr(e,t,r,n,a){return e===t?!0:e==null||t==null||!hr(e)&&!hr(t)?e!==e&&t!==t:Fc(e,t,r,n,yr,a)}var qe=yr,wc=Ct,Cc=qe,xc=1,Dc=2;function Mc(e,t,r,n){var a=r.length,s=a,i=!n;if(e==null)return!s;for(e=Object(e);a--;){var o=r[a];if(i&&o[2]?o[1]!==e[o[0]]:!(o[0]in e))return!1}for(;++a<s;){o=r[a];var c=o[0],u=e[c],f=o[1];if(i&&o[2]){if(u===void 0&&!(c in e))return!1}else{var l=new wc;if(n)var d=n(u,f,c,e,t,l);if(!(d===void 0?Cc(f,u,xc|Dc,n,l):d))return!1}}return!0}var jc=Mc,Lc=re;function Gc(e){return e===e&&!Lc(e)}var pr=Gc,Hc=pr,Vc=Qt;function Rc(e){for(var t=Vc(e),r=t.length;r--;){var n=t[r],a=e[n];t[r]=[n,a,Hc(a)]}return t}var Kc=Rc;function Nc(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}var gr=Nc,Bc=jc,Uc=Kc,qc=gr;function zc(e){var t=Uc(e);return t.length==1&&t[0][2]?qc(t[0][0],t[0][1]):function(r){return r===e||Bc(r,e,t)}}var Wc=zc,kc=te,Xc=ne,Yc="[object Symbol]";function Zc(e){return typeof e=="symbol"||Xc(e)&&kc(e)==Yc}var ze=Zc,Jc=G,Qc=ze,ef=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,tf=/^\w*$/;function rf(e,t){if(Jc(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||Qc(e)?!0:tf.test(e)||!ef.test(e)||t!=null&&e in Object(t)}var We=rf,mr=De,nf="Expected a function";function ke(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(nf);var r=function(){var n=arguments,a=t?t.apply(this,n):n[0],s=r.cache;if(s.has(a))return s.get(a);var i=e.apply(this,n);return r.cache=s.set(a,i)||s,i};return r.cache=new(ke.Cache||mr),r}ke.Cache=mr;var af=ke,sf=af,of=500;function uf(e){var t=sf(e,function(n){return r.size===of&&r.clear(),n}),r=t.cache;return t}var cf=uf,ff=cf,lf=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,df=/\\(\\)?/g,vf=ff(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(lf,function(r,n,a,s){t.push(a?s.replace(df,"$1"):n||r)}),t}),hf=vf;function yf(e,t){for(var r=-1,n=e==null?0:e.length,a=Array(n);++r<n;)a[r]=t(e[r],r,e);return a}var br=yf,_r=he,pf=br,gf=G,mf=ze,bf=1/0,$r=_r?_r.prototype:void 0,Sr=$r?$r.toString:void 0;function Pr(e){if(typeof e=="string")return e;if(gf(e))return pf(e,Pr)+"";if(mf(e))return Sr?Sr.call(e):"";var t=e+"";return t=="0"&&1/e==-bf?"-0":t}var _f=Pr,$f=_f;function Sf(e){return e==null?"":$f(e)}var Pf=Sf,Ef=G,If=We,Af=hf,Of=Pf;function Tf(e,t){return Ef(e)?e:If(e,t)?[e]:Af(Of(e))}var _e=Tf,Ff=ze,wf=1/0;function Cf(e){if(typeof e=="string"||Ff(e))return e;var t=e+"";return t=="0"&&1/e==-wf?"-0":t}var ae=Cf,xf=_e,Df=ae;function Mf(e,t){t=xf(t,e);for(var r=0,n=t.length;e!=null&&r<n;)e=e[Df(t[r++])];return r&&r==n?e:void 0}var Xe=Mf,jf=Xe;function Lf(e,t,r){var n=e==null?void 0:jf(e,t);return n===void 0?r:n}var Ye=Lf;function Gf(e,t){return e!=null&&t in Object(e)}var Hf=Gf,Vf=_e,Rf=qt,Kf=G,Nf=Le,Bf=Ge,Uf=ae;function qf(e,t,r){t=Vf(t,e);for(var n=-1,a=t.length,s=!1;++n<a;){var i=Uf(t[n]);if(!(s=e!=null&&r(e,i)))break;e=e[i]}return s||++n!=a?s:(a=e==null?0:e.length,!!a&&Bf(a)&&Nf(i,a)&&(Kf(e)||Rf(e)))}var zf=qf,Wf=Hf,kf=zf;function Xf(e,t){return e!=null&&kf(e,t,Wf)}var Yf=Xf,Zf=qe,Jf=Ye,Qf=Yf,el=We,tl=pr,rl=gr,nl=ae,al=1,sl=2;function il(e,t){return el(e)&&tl(t)?rl(nl(e),t):function(r){var n=Jf(r,e);return n===void 0&&n===t?Qf(r,e):Zf(t,n,al|sl)}}var ol=il;function ul(e){return e}var cl=ul;function fl(e){return function(t){return t==null?void 0:t[e]}}var ll=fl,dl=Xe;function vl(e){return function(t){return dl(t,e)}}var hl=vl,yl=ll,pl=hl,gl=We,ml=ae;function bl(e){return gl(e)?yl(ml(e)):pl(e)}var _l=bl,$l=Wc,Sl=ol,Pl=cl,El=G,Il=_l;function Al(e){return typeof e=="function"?e:e==null?Pl:typeof e=="object"?El(e)?Sl(e[0],e[1]):$l(e):Il(e)}var Er=Al,Ol="Expected a function";function Tl(e){if(typeof e!="function")throw new TypeError(Ol);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}var Fl=Tl,wl=V,Cl=function(){try{var e=wl(Object,"defineProperty");return e({},"",{}),e}catch{}}(),xl=Cl,Ir=xl;function Dl(e,t,r){t=="__proto__"&&Ir?Ir(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}var Ml=Dl,jl=Ml,Ll=we,Gl=Object.prototype,Hl=Gl.hasOwnProperty;function Vl(e,t,r){var n=e[t];(!(Hl.call(e,t)&&Ll(n,r))||r===void 0&&!(t in e))&&jl(e,t,r)}var Rl=Vl,Kl=Rl,Nl=_e,Bl=Le,Ar=re,Ul=ae;function ql(e,t,r,n){if(!Ar(e))return e;t=Nl(t,e);for(var a=-1,s=t.length,i=s-1,o=e;o!=null&&++a<s;){var c=Ul(t[a]),u=r;if(c==="__proto__"||c==="constructor"||c==="prototype")return e;if(a!=i){var f=o[c];u=n?n(f,c,o):void 0,u===void 0&&(u=Ar(f)?f:Bl(t[a+1])?[]:{})}Kl(o,c,u),o=o[c]}return e}var Or=ql,zl=Xe,Wl=Or,kl=_e;function Xl(e,t,r){for(var n=-1,a=t.length,s={};++n<a;){var i=t[n],o=zl(e,i);r(o,i)&&Wl(s,kl(i,e),o)}return s}var Yl=Xl,Zl=Zt,Jl=Zl(Object.getPrototypeOf,Object),Ql=Jl,ed=Ht,td=Ql,rd=Nt,nd=Rt,ad=Object.getOwnPropertySymbols,sd=ad?function(e){for(var t=[];e;)ed(t,rd(e)),e=td(e);return t}:nd,id=sd;function od(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}var ud=od,cd=re,fd=Yt,ld=ud,dd=Object.prototype,vd=dd.hasOwnProperty;function hd(e){if(!cd(e))return ld(e);var t=fd(e),r=[];for(var n in e)n=="constructor"&&(t||!vd.call(e,n))||r.push(n);return r}var yd=hd,pd=Xt,gd=yd,md=Jt;function bd(e){return md(e)?pd(e,!0):gd(e)}var _d=bd,$d=Vt,Sd=id,Pd=_d;function Ed(e){return $d(e,Pd,Sd)}var Id=Ed,Ad=br,Od=Er,Td=Yl,Fd=Id;function wd(e,t){if(e==null)return{};var r=Ad(Fd(e),function(n){return[n]});return t=Od(t),Td(e,r,function(n,a){return t(n,a[0])})}var Cd=wd,xd=Er,Dd=Fl,Md=Cd;function jd(e,t){return Md(e,Dd(xd(t)))}var Ld=jd;const Gd=(e="on",t)=>{if(Array.isArray(t))return t.some(r=>r===!0||r===e);if(typeof t=="boolean")return t;if(typeof t=="string")return t===e},Hd=(e="on",t)=>{if(typeof t=="string")return t===e},Vd={initial:"onBlur",whenTouched:"onChange",whenSubmitted:"onChange"},Rd=({clearError:e,validate:t,defaultValue:r,touched:n,setTouched:a,hasBeenSubmitted:s,validationBehavior:i,name:o})=>{const c=j(j({},Vd),i);return(u={})=>{const f=s?c.whenSubmitted:n?c.whenTouched:c.initial,l=Q(j({},u),{onChange:(...d)=>{var h;return f==="onChange"?t():e(),(h=u==null?void 0:u.onChange)==null?void 0:h.call(u,...d)},onBlur:(...d)=>{var h;return f==="onBlur"&&t(),a(!0),(h=u==null?void 0:u.onBlur)==null?void 0:h.call(u,...d)},name:o});return u.type==="checkbox"?l.defaultChecked=Gd(u.value,r):u.type==="radio"?l.defaultChecked=Hd(u.value,r):u.value===void 0&&(l.defaultValue=r),Ld(l,d=>d===void 0)}};var Kd="Invariant failed";function se(e,t){if(!e)throw new Error(Kd)}const $e="__rvfInternalFormId",Nd="__rvfInternalFormDefaults",Tr=e=>`${Nd}_${e}`,Fr=v.createContext(null),Ze=e=>({hydrateTo:()=>e,map:t=>Ze(t(e))}),Je=()=>({hydrateTo:e=>e,map:()=>Je()}),ie={serverData:Ze,hydratedData:Je,from:(e,t)=>t?Je():Ze(e)},wr=e=>{let t;const r=new Set,n=(c,u)=>{const f=typeof c=="function"?c(t):c;if(f!==t){const l=t;t=u?f:Object.assign({},t,f),r.forEach(d=>d(t,l))}},a=()=>t,o={setState:n,getState:a,subscribe:c=>(r.add(c),()=>r.delete(c)),destroy:()=>r.clear()};return t=e(n,a,o),o},Bd=e=>e?wr(e):wr;var Cr={exports:{}},xr={},Dr={exports:{}},Mr={};/**
2
+ * @license React
3
+ * use-sync-external-store-shim.production.min.js
4
+ *
5
+ * Copyright (c) Facebook, Inc. and its affiliates.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */var k=L.default;function Ud(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var qd=typeof Object.is=="function"?Object.is:Ud,zd=k.useState,Wd=k.useEffect,kd=k.useLayoutEffect,Xd=k.useDebugValue;function Yd(e,t){var r=t(),n=zd({inst:{value:r,getSnapshot:t}}),a=n[0].inst,s=n[1];return kd(function(){a.value=r,a.getSnapshot=t,Qe(a)&&s({inst:a})},[e,r,t]),Wd(function(){return Qe(a)&&s({inst:a}),e(function(){Qe(a)&&s({inst:a})})},[e]),Xd(r),r}function Qe(e){var t=e.getSnapshot;e=e.value;try{var r=t();return!qd(e,r)}catch{return!0}}function Zd(e,t){return t()}var Jd=typeof window=="undefined"||typeof window.document=="undefined"||typeof window.document.createElement=="undefined"?Zd:Yd;Mr.useSyncExternalStore=k.useSyncExternalStore!==void 0?k.useSyncExternalStore:Jd,Dr.exports=Mr;/**
10
+ * @license React
11
+ * use-sync-external-store-shim/with-selector.production.min.js
12
+ *
13
+ * Copyright (c) Facebook, Inc. and its affiliates.
14
+ *
15
+ * This source code is licensed under the MIT license found in the
16
+ * LICENSE file in the root directory of this source tree.
17
+ */var Se=L.default,Qd=Dr.exports;function ev(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var tv=typeof Object.is=="function"?Object.is:ev,rv=Qd.useSyncExternalStore,nv=Se.useRef,av=Se.useEffect,sv=Se.useMemo,iv=Se.useDebugValue;xr.useSyncExternalStoreWithSelector=function(e,t,r,n,a){var s=nv(null);if(s.current===null){var i={hasValue:!1,value:null};s.current=i}else i=s.current;s=sv(function(){function c(h){if(!u){if(u=!0,f=h,h=n(h),a!==void 0&&i.hasValue){var m=i.value;if(a(m,h))return l=m}return l=h}if(m=l,tv(f,h))return m;var _=n(h);return a!==void 0&&a(m,_)?m:(f=h,l=_)}var u=!1,f,l,d=r===void 0?null:r;return[function(){return c(t())},d===null?void 0:function(){return c(d())}]},[t,r,n,a]);var o=rv(e,s[0],s[1]);return av(function(){i.hasValue=!0,i.value=o},[o]),iv(o),o},Cr.exports=xr;function ov(e,t=e.getState,r){const n=Cr.exports.useSyncExternalStoreWithSelector(e.subscribe,e.getState,e.getServerState||e.getState,t,r);return v.useDebugValue(n),n}const jr=e=>{const t=typeof e=="function"?Bd(e):e,r=(n,a)=>ov(t,n,a);return Object.assign(r,t),r};var Lr=e=>e?jr(e):jr;function w(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];throw Error("[Immer] minified error nr: "+e+(r.length?" "+r.map(function(a){return"'"+a+"'"}).join(","):"")+". Find the full error at: https://bit.ly/3cXEKWf")}function X(e){return!!e&&!!e[E]}function K(e){return!!e&&(function(t){if(!t||typeof t!="object")return!1;var r=Object.getPrototypeOf(t);if(r===null)return!0;var n=Object.hasOwnProperty.call(r,"constructor")&&r.constructor;return n===Object||typeof n=="function"&&Function.toString.call(n)===yv}(e)||Array.isArray(e)||!!e[zr]||!!e.constructor[zr]||tt(e)||rt(e))}function oe(e,t,r){r===void 0&&(r=!1),Y(e)===0?(r?Object.keys:ht)(e).forEach(function(n){r&&typeof n=="symbol"||t(n,e[n],e)}):e.forEach(function(n,a){return t(a,n,e)})}function Y(e){var t=e[E];return t?t.i>3?t.i-4:t.i:Array.isArray(e)?1:tt(e)?2:rt(e)?3:0}function et(e,t){return Y(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function uv(e,t){return Y(e)===2?e.get(t):e[t]}function Gr(e,t,r){var n=Y(e);n===2?e.set(t,r):n===3?(e.delete(t),e.add(r)):e[t]=r}function cv(e,t){return e===t?e!==0||1/e==1/t:e!=e&&t!=t}function tt(e){return vv&&e instanceof Map}function rt(e){return hv&&e instanceof Set}function N(e){return e.o||e.t}function nt(e){if(Array.isArray(e))return Array.prototype.slice.call(e);var t=pv(e);delete t[E];for(var r=ht(t),n=0;n<r.length;n++){var a=r[n],s=t[a];s.writable===!1&&(s.writable=!0,s.configurable=!0),(s.get||s.set)&&(t[a]={configurable:!0,writable:!0,enumerable:s.enumerable,value:e[a]})}return Object.create(Object.getPrototypeOf(e),t)}function at(e,t){return t===void 0&&(t=!1),st(e)||X(e)||!K(e)||(Y(e)>1&&(e.set=e.add=e.clear=e.delete=fv),Object.freeze(e),t&&oe(e,function(r,n){return at(n,!0)},!0)),e}function fv(){w(2)}function st(e){return e==null||typeof e!="object"||Object.isFrozen(e)}function C(e){var t=gv[e];return t||w(18,e),t}function Hr(){return ue}function it(e,t){t&&(C("Patches"),e.u=[],e.s=[],e.v=t)}function Pe(e){ot(e),e.p.forEach(lv),e.p=null}function ot(e){e===ue&&(ue=e.l)}function Vr(e){return ue={p:[],l:ue,h:e,m:!0,_:0}}function lv(e){var t=e[E];t.i===0||t.i===1?t.j():t.O=!0}function ut(e,t){t._=t.p.length;var r=t.p[0],n=e!==void 0&&e!==r;return t.h.g||C("ES5").S(t,e,n),n?(r[E].P&&(Pe(t),w(4)),K(e)&&(e=Ee(t,e),t.l||Ie(t,e)),t.u&&C("Patches").M(r[E].t,e,t.u,t.s)):e=Ee(t,r,[]),Pe(t),t.u&&t.v(t.u,t.s),e!==qr?e:void 0}function Ee(e,t,r){if(st(t))return t;var n=t[E];if(!n)return oe(t,function(s,i){return Rr(e,n,t,s,i,r)},!0),t;if(n.A!==e)return t;if(!n.P)return Ie(e,n.t,!0),n.t;if(!n.I){n.I=!0,n.A._--;var a=n.i===4||n.i===5?n.o=nt(n.k):n.o;oe(n.i===3?new Set(a):a,function(s,i){return Rr(e,n,a,s,i,r)}),Ie(e,a,!1),r&&e.u&&C("Patches").R(n,r,e.u,e.s)}return n.o}function Rr(e,t,r,n,a,s){if(X(a)){var i=Ee(e,a,s&&t&&t.i!==3&&!et(t.D,n)?s.concat(n):void 0);if(Gr(r,n,i),!X(i))return;e.m=!1}if(K(a)&&!st(a)){if(!e.h.F&&e._<1)return;Ee(e,a),t&&t.A.l||Ie(e,a)}}function Ie(e,t,r){r===void 0&&(r=!1),e.h.F&&e.m&&at(t,r)}function ct(e,t){var r=e[E];return(r?N(r):e)[t]}function Kr(e,t){if(t in e)for(var r=Object.getPrototypeOf(e);r;){var n=Object.getOwnPropertyDescriptor(r,t);if(n)return n;r=Object.getPrototypeOf(r)}}function ft(e){e.P||(e.P=!0,e.l&&ft(e.l))}function lt(e){e.o||(e.o=nt(e.t))}function dt(e,t,r){var n=tt(t)?C("MapSet").N(t,r):rt(t)?C("MapSet").T(t,r):e.g?function(a,s){var i=Array.isArray(a),o={i:i?1:0,A:s?s.A:Hr(),P:!1,I:!1,D:{},l:s,t:a,k:null,o:null,j:null,C:!1},c=o,u=yt;i&&(c=[o],u=ce);var f=Proxy.revocable(c,u),l=f.revoke,d=f.proxy;return o.k=d,o.j=l,d}(t,r):C("ES5").J(t,r);return(r?r.A:Hr()).p.push(n),n}function dv(e){return X(e)||w(22,e),function t(r){if(!K(r))return r;var n,a=r[E],s=Y(r);if(a){if(!a.P&&(a.i<4||!C("ES5").K(a)))return a.t;a.I=!0,n=Nr(r,s),a.I=!1}else n=Nr(r,s);return oe(n,function(i,o){a&&uv(a.t,i)===o||Gr(n,i,t(o))}),s===3?new Set(n):n}(e)}function Nr(e,t){switch(t){case 2:return new Map(e);case 3:return Array.from(e)}return nt(e)}var Br,ue,vt=typeof Symbol!="undefined"&&typeof Symbol("x")=="symbol",vv=typeof Map!="undefined",hv=typeof Set!="undefined",Ur=typeof Proxy!="undefined"&&Proxy.revocable!==void 0&&typeof Reflect!="undefined",qr=vt?Symbol.for("immer-nothing"):((Br={})["immer-nothing"]=!0,Br),zr=vt?Symbol.for("immer-draftable"):"__$immer_draftable",E=vt?Symbol.for("immer-state"):"__$immer_state",yv=""+Object.prototype.constructor,ht=typeof Reflect!="undefined"&&Reflect.ownKeys?Reflect.ownKeys:Object.getOwnPropertySymbols!==void 0?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Object.getOwnPropertyNames,pv=Object.getOwnPropertyDescriptors||function(e){var t={};return ht(e).forEach(function(r){t[r]=Object.getOwnPropertyDescriptor(e,r)}),t},gv={},yt={get:function(e,t){if(t===E)return e;var r=N(e);if(!et(r,t))return function(a,s,i){var o,c=Kr(s,i);return c?"value"in c?c.value:(o=c.get)===null||o===void 0?void 0:o.call(a.k):void 0}(e,r,t);var n=r[t];return e.I||!K(n)?n:n===ct(e.t,t)?(lt(e),e.o[t]=dt(e.A.h,n,e)):n},has:function(e,t){return t in N(e)},ownKeys:function(e){return Reflect.ownKeys(N(e))},set:function(e,t,r){var n=Kr(N(e),t);if(n!=null&&n.set)return n.set.call(e.k,r),!0;if(!e.P){var a=ct(N(e),t),s=a==null?void 0:a[E];if(s&&s.t===r)return e.o[t]=r,e.D[t]=!1,!0;if(cv(r,a)&&(r!==void 0||et(e.t,t)))return!0;lt(e),ft(e)}return e.o[t]===r&&typeof r!="number"&&(r!==void 0||t in e.o)||(e.o[t]=r,e.D[t]=!0,!0)},deleteProperty:function(e,t){return ct(e.t,t)!==void 0||t in e.t?(e.D[t]=!1,lt(e),ft(e)):delete e.D[t],e.o&&delete e.o[t],!0},getOwnPropertyDescriptor:function(e,t){var r=N(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n&&{writable:!0,configurable:e.i!==1||t!=="length",enumerable:n.enumerable,value:r[t]}},defineProperty:function(){w(11)},getPrototypeOf:function(e){return Object.getPrototypeOf(e.t)},setPrototypeOf:function(){w(12)}},ce={};oe(yt,function(e,t){ce[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}}),ce.deleteProperty=function(e,t){return ce.set.call(this,e,t,void 0)},ce.set=function(e,t,r){return yt.set.call(this,e[0],t,r,e[0])};var mv=function(){function e(r){var n=this;this.g=Ur,this.F=!0,this.produce=function(a,s,i){if(typeof a=="function"&&typeof s!="function"){var o=s;s=a;var c=n;return function(_){var A=this;_===void 0&&(_=o);for(var $=arguments.length,P=Array($>1?$-1:0),T=1;T<$;T++)P[T-1]=arguments[T];return c.produce(_,function(O){var x;return(x=s).call.apply(x,[A,O].concat(P))})}}var u;if(typeof s!="function"&&w(6),i!==void 0&&typeof i!="function"&&w(7),K(a)){var f=Vr(n),l=dt(n,a,void 0),d=!0;try{u=s(l),d=!1}finally{d?Pe(f):ot(f)}return typeof Promise!="undefined"&&u instanceof Promise?u.then(function(_){return it(f,i),ut(_,f)},function(_){throw Pe(f),_}):(it(f,i),ut(u,f))}if(!a||typeof a!="object"){if((u=s(a))===void 0&&(u=a),u===qr&&(u=void 0),n.F&&at(u,!0),i){var h=[],m=[];C("Patches").M(a,u,h,m),i(h,m)}return u}w(21,a)},this.produceWithPatches=function(a,s){if(typeof a=="function")return function(u){for(var f=arguments.length,l=Array(f>1?f-1:0),d=1;d<f;d++)l[d-1]=arguments[d];return n.produceWithPatches(u,function(h){return a.apply(void 0,[h].concat(l))})};var i,o,c=n.produce(a,s,function(u,f){i=u,o=f});return typeof Promise!="undefined"&&c instanceof Promise?c.then(function(u){return[u,i,o]}):[c,i,o]},typeof(r==null?void 0:r.useProxies)=="boolean"&&this.setUseProxies(r.useProxies),typeof(r==null?void 0:r.autoFreeze)=="boolean"&&this.setAutoFreeze(r.autoFreeze)}var t=e.prototype;return t.createDraft=function(r){K(r)||w(8),X(r)&&(r=dv(r));var n=Vr(this),a=dt(this,r,void 0);return a[E].C=!0,ot(n),a},t.finishDraft=function(r,n){var a=r&&r[E],s=a.A;return it(s,n),ut(void 0,s)},t.setAutoFreeze=function(r){this.F=r},t.setUseProxies=function(r){r&&!Ur&&w(20),this.g=r},t.applyPatches=function(r,n){var a;for(a=n.length-1;a>=0;a--){var s=n[a];if(s.path.length===0&&s.op==="replace"){r=s.value;break}}a>-1&&(n=n.slice(a+1));var i=C("Patches").$;return X(r)?i(r,n):this.produce(r,function(o){return i(o,n)})},e}(),I=new mv,bv=I.produce;I.produceWithPatches.bind(I),I.setAutoFreeze.bind(I),I.setUseProxies.bind(I),I.applyPatches.bind(I),I.createDraft.bind(I),I.finishDraft.bind(I);const Wr=e=>(t,r,n)=>(n.setState=(a,s,...i)=>{const o=typeof a=="function"?bv(a):a;return t(o,s,...i)},e(n.setState,r,n)),kr=e=>{const t=new Map,r=n=>{if(t.has(n))return t.get(n);const a=e(n);return t.set(n,a),a};return r.remove=n=>{t.delete(n)},r},Z=kr(()=>Lr()(Wr((e,t,r)=>({fields:{},register:n=>e(a=>{a.fields[n]?a.fields[n].refCount++:a.fields[n]={refCount:1,value:void 0,hydrated:!1,valueUpdatePromise:void 0,resolveValueUpdate:void 0}}),unregister:n=>e(a=>{const s=a.fields[n];!s||(s.refCount--,s.refCount===0&&delete a.fields[n])}),setValue:(n,a)=>e(s=>{const i=s.fields[n];if(!i)return;i.value=a;const o=new Promise(c=>{i.resolveValueUpdate=c});i.valueUpdatePromise=o}),hydrateWithDefault:(n,a)=>e(s=>{const i=s.fields[n];!i||(i.value=a,i.defaultValue=a,i.hydrated=!0)}),awaitValueUpdate:async n=>{var a;await((a=t().fields[n])==null?void 0:a.valueUpdatePromise)},reset:()=>e(n=>{Object.values(n.fields).forEach(a=>{!a||(a.value=a.defaultValue)})})})))),pt=kr(e=>Lr()(Wr((t,r,n)=>({isHydrated:!1,isSubmitting:!1,hasBeenSubmitted:!1,touchedFields:{},fieldErrors:{},formElement:null,isValid:()=>Object.keys(r().fieldErrors).length===0,startSubmit:()=>t(a=>{a.isSubmitting=!0,a.hasBeenSubmitted=!0}),endSubmit:()=>t(a=>{a.isSubmitting=!1}),setTouched:(a,s)=>t(i=>{i.touchedFields[a]=s}),setFieldError:(a,s)=>t(i=>{i.fieldErrors[a]=s}),setFieldErrors:a=>t(s=>{s.fieldErrors=a}),clearFieldError:a=>t(s=>{delete s.fieldErrors[a]}),reset:()=>t(a=>{a.fieldErrors={},a.touchedFields={},a.hasBeenSubmitted=!1}),syncFormProps:a=>t(s=>{s.formProps=a}),setHydrated:()=>t(a=>{a.isHydrated=!0}),setFormElement:a=>{r().formElement!==a&&t(s=>{s.formElement=a})},validateField:async a=>{var c,u,f;const s=r().formElement;se(s);const i=(c=r().formProps)==null?void 0:c.validator;se(i),await((f=(u=Z(e).getState()).awaitValueUpdate)==null?void 0:f.call(u,a));const{error:o}=await i.validateField(new FormData(s),a);return o?(r().setFieldError(a,o),o):(r().clearFieldError(a),null)},validate:async()=>{var o;const a=r().formElement;se(a);const s=(o=r().formProps)==null?void 0:o.validator;se(s);const{error:i}=await s.validate(new FormData(a));i&&r().setFieldErrors(i.fieldErrors)},resetFormElement:()=>{var a;return(a=r().formElement)==null?void 0:a.reset()}})))),g=(e,t)=>pt(e)(t),_v=(e,t)=>Z(e)(t),H=(e,t)=>{const r=v.useContext(Fr);if(e)return{formId:e};if(r)return r;throw new Error(`Unable to determine form for ${t}. Please use it inside a ValidatedForm or pass a 'formId'.`)};function gt({fetcher:e,subaction:t,formId:r}){var a;const n=S.useActionData();return e?(a=e.data)!=null&&a.fieldErrors?e.data:null:n!=null&&n.fieldErrors?typeof r=="string"&&n.formId?n.formId===r?n:null:!t&&!n.subaction||n.subaction===t?n:null:null}const Xr=e=>{const t=gt(e),r=g(e.formId,n=>n.isHydrated);return ie.from(t==null?void 0:t.fieldErrors,r)},Yr=({formId:e})=>{const t=S.useMatches();if(typeof e=="string"){const r=Tr(e),n=t.reverse().find(a=>a.data&&r in a.data);return n==null?void 0:n.data[r]}return null},Zr=e=>{const{formId:t,defaultValuesProp:r}=e,n=g(t,i=>i.isHydrated),a=gt(e),s=Yr(e);return n?ie.hydratedData():a!=null&&a.repopulateFields?(se(typeof a.repopulateFields=="object"),ie.serverData(a.repopulateFields)):r?ie.serverData(r):ie.serverData(s)},$v=({fetcher:e})=>{const t=S.useTransition();return e?e.state==="submitting":!!t.submission},Sv=(e,{formId:t})=>{const r=g(t,s=>s.touchedFields[e]),n=g(t,s=>s.setTouched),a=v.useCallback(s=>n(e,s),[e,n]);return[r,a]},Pv=(e,t)=>{const r=Xr(t),n=g(t.formId,a=>a.fieldErrors[e]);return r.map(a=>a==null?void 0:a[e]).hydrateTo(n)},Jr=e=>{const{formId:t}=e;return g(t,r=>r.clearFieldError)},Qr=(e,t)=>{const r=Zr(t),n=sn(t.formId);return r.map(a=>Ye(a,e)).hydrateTo(Ye(n,e))},en=e=>g(e,t=>t.isSubmitting),tn=e=>g(e,t=>t.isValid()),rn=e=>g(e,t=>t.hasBeenSubmitted),nn=e=>g(e,t=>t.validateField),Ev=e=>g(e,t=>t.validate),Iv=()=>()=>{},an=e=>g(e,t=>{var r,n;return(n=(r=t.formProps)==null?void 0:r.registerReceiveFocus)!=null?n:Iv}),Av={},sn=e=>g(e,t=>{var r,n;return(n=(r=t.formProps)==null?void 0:r.defaultValues)!=null?n:Av}),Ov=({formId:e})=>g(e,t=>t.setTouched),Tv=e=>g(e,t=>t.touchedFields),Fv=e=>g(e,t=>t.fieldErrors),on=e=>g(e,t=>t.setFieldErrors),wv=e=>g(e,t=>t.resetFormElement),Cv=e=>g(e,t=>{var r;return(r=t.formProps)==null?void 0:r.action}),xv=e=>g(e,t=>{var r;return(r=t.formProps)==null?void 0:r.subaction}),Dv=(e,t)=>{const r=Z(e.formId),n=r(u=>{var f;return(f=u.fields[t])==null?void 0:f.value}),s=pt(e.formId)(u=>u.isHydrated),i=Qr(t,e),o=r(u=>{var f,l;return(l=(f=u.fields[t])==null?void 0:f.hydrated)!=null?l:!1}),c=r(u=>u.hydrateWithDefault);return v.useEffect(()=>{s&&!o&&c(t,i)},[i,t,c,o,s]),o?n:i},Mv=(e,t)=>{const r=Z(e.formId),n=r(u=>{var f;return(f=u.fields[t])==null?void 0:f.resolveValueUpdate});v.useEffect(()=>{n==null||n()},[n]);const a=r(u=>u.register),s=r(u=>u.unregister);v.useEffect(()=>(a(t),()=>s(t)),[e.formId,t,a,s]);const i=r(u=>u.setValue),o=v.useCallback(u=>i(t,u),[t,i]);return[Dv(e,t),o]},jv=e=>Z(e)(r=>r.setValue),un=e=>{const t=H(e,"useIsSubmitting");return en(t.formId)},cn=e=>{const t=H(e,"useIsValid");return tn(t.formId)},Lv=(e,t)=>{const{formId:r,handleReceiveFocus:n}=t!=null?t:{},a=H(r,"useField"),s=Qr(e,a),[i,o]=Sv(e,a),c=Pv(e,a),u=Jr(a),f=rn(a.formId),l=nn(a.formId),d=an(a.formId);return v.useEffect(()=>{if(n)return d(e,n)},[n,e,d]),v.useMemo(()=>{const m={error:c,clearError:()=>u(e),validate:()=>{l(e)},defaultValue:s,touched:i,setTouched:o},_=Rd(Q(j({},m),{name:e,hasBeenSubmitted:f,validationBehavior:t==null?void 0:t.validationBehavior}));return Q(j({},m),{getInputProps:_})},[c,u,s,i,o,e,f,t==null?void 0:t.validationBehavior,l])},Gv=(e,t)=>{const r=H(t,"useControlField"),[n,a]=Mv(r,e);return[n,a]},Hv=e=>{const t=H(e,"useControlField");return jv(t.formId)};function Vv(e,t,r){return F.json({fieldErrors:e.fieldErrors,subaction:e.subaction,repopulateFields:t,formId:e.formId},j({status:422},r))}const Rv=(e,t)=>({[Tr(e)]:t});function Kv(e,t,r,n){for(var a=e.length,s=r+(n?1:-1);n?s--:++s<a;)if(t(e[s],s,e))return s;return-1}var Nv=Kv;function Bv(e){return e!==e}var Uv=Bv;function qv(e,t,r){for(var n=r-1,a=e.length;++n<a;)if(e[n]===t)return n;return-1}var zv=qv,Wv=Nv,kv=Uv,Xv=zv;function Yv(e,t,r){return t===t?Xv(e,t,r):Wv(e,kv,r)}var Zv=Yv,Jv=Zv;function Qv(e,t){var r=e==null?0:e.length;return!!r&&Jv(e,t,0)>-1}var eh=Qv;function th(e,t,r){for(var n=-1,a=e==null?0:e.length;++n<a;)if(r(t,e[n]))return!0;return!1}var rh=th;function nh(){}var ah=nh,mt=tr,sh=ah,ih=Me,oh=1/0,uh=mt&&1/ih(new mt([,-0]))[1]==oh?function(e){return new mt(e)}:sh,ch=uh,fh=xt,lh=eh,dh=rh,vh=Dt,hh=ch,yh=Me,ph=200;function gh(e,t,r){var n=-1,a=lh,s=e.length,i=!0,o=[],c=o;if(r)i=!1,a=dh;else if(s>=ph){var u=t?null:hh(e);if(u)return yh(u);i=!1,a=vh,c=new fh}else c=t?[]:o;e:for(;++n<s;){var f=e[n],l=t?t(f):f;if(f=r||f!==0?f:0,i&&l===l){for(var d=c.length;d--;)if(c[d]===l)continue e;t&&c.push(l),o.push(f)}else a(c,l,r)||(c!==o&&c.push(l),o.push(f))}return o}var mh=gh,bh=mh;function _h(e){return e&&e.length?bh(e):[]}var $h=_h;class fn{constructor(){this.dict=new Map,this.add=(t,r)=>{this.dict.has(t)?this.dict.get(t).push(r):this.dict.set(t,[r])},this.delete=t=>{this.dict.delete(t)},this.remove=(t,r)=>{if(!this.dict.has(t))return;const n=this.dict.get(t),a=n.indexOf(r);a!==-1&&n.splice(a,1),n.length===0&&this.dict.delete(t)},this.getAll=t=>{var r;return(r=this.dict.get(t))!=null?r:[]},this.entries=()=>this.dict.entries(),this.values=()=>this.dict.values(),this.has=t=>this.dict.has(t)}}const Sh=()=>{const e=v.useRef(null);return v.useCallback(()=>(e.current||(e.current=new fn),e.current),[])},Ph=e=>{pt.remove(e),Z.remove(e)};function ln(e,t){const r=v.useRef(!1);v.useEffect(()=>{e&&(r.current=!0),!e&&r.current&&(r.current=!1,t())})}var Eh=qe;function Ih(e,t){return Eh(e,t)}var Ah=Ih;const Oh=e=>t=>{e.filter(Boolean).forEach(r=>{typeof r=="function"?r(t):r!=null&&(r.current=t)})},Th=typeof window!="undefined"?v.useLayoutEffect:v.useEffect,Fh=e=>{const t=v.useRef(e),r=t.current===e||Ah(t.current,e);return v.useEffect(()=>{r||(t.current=e)}),r?t.current:e},wh=e=>new FormData(e);function Ch(e){return e!==null}const xh=(e,t,r)=>{var s;const n=[...r.elements].map(i=>{const o=i instanceof RadioNodeList?i[0]:i;return o instanceof HTMLInputElement?o.name:null}).filter(Ch).filter(i=>i in e),a=$h(n);for(const i of a){if(t.has(i)){t.getAll(i).forEach(c=>{c()});break}const o=r.elements.namedItem(i);if(!!o){if(o instanceof RadioNodeList){const c=(s=[...o].filter(u=>u instanceof HTMLInputElement).find(u=>u.value===o.value))!=null?s:o[0];if(c&&c instanceof HTMLInputElement){c.focus();break}}if(o instanceof HTMLInputElement){if(o.type==="hidden")continue;o.focus();break}}}},Dh=e=>{const[t]=v.useState(()=>Symbol("remix-validated-form-id"));return e!=null?e:t},Mh=({resetAfterSubmit:e,formRef:t})=>{const r=un(),n=cn();return ln(r,()=>{var a;n&&e&&((a=t.current)==null||a.reset())}),null};function jh(e){let t=!1;return new Proxy(e,{get:(r,n)=>n==="preventDefault"?()=>{t=!0}:n==="defaultPrevented"?t:r[n]})}function Lh(_){var A=_,{validator:e,onSubmit:t,children:r,fetcher:n,action:a,defaultValues:s,formRef:i,onReset:o,subaction:c,resetAfterSubmit:u=!1,disableFocusOnError:f,method:l,replace:d,id:h}=A,m=$n(A,["validator","onSubmit","children","fetcher","action","defaultValues","formRef","onReset","subaction","resetAfterSubmit","disableFocusOnError","method","replace","id"]);var gn;const $=Dh(h),P=Fh(s),T=v.useMemo(()=>({formId:$,action:a,subaction:c,defaultValuesProp:P,fetcher:n}),[a,n,$,P,c]),O=gt(T),x=Yr(T),Uh=$v(T),J=v.useRef(null),qh=(gn=n==null?void 0:n.Form)!=null?gn:S.Form,zh=S.useSubmit(),bt=on($),Wh=g($,p=>p.setFieldError),kh=g($,p=>p.reset),Xh=_v($,p=>p.reset),Yh=g($,p=>p.startSubmit),_t=g($,p=>p.endSubmit),hn=g($,p=>p.syncFormProps),yn=g($,p=>p.setHydrated),Zh=g($,p=>p.setFormElement);v.useEffect(()=>(yn(),()=>Ph($)),[$,yn]);const Ae=Sh(),pn=v.useCallback((p,D)=>(Ae().add(p,D),()=>{Ae().remove(p,D)}),[Ae]);Th(()=>{var p;hn({action:a,defaultValues:(p=P!=null?P:x)!=null?p:{},subaction:c,registerReceiveFocus:pn,validator:e})},[a,P,pn,c,hn,x,e]),v.useEffect(()=>{var p;bt((p=O==null?void 0:O.fieldErrors)!=null?p:{})},[O==null?void 0:O.fieldErrors,bt,Wh]),ln(Uh,()=>{_t()});let Oe=L.default.useRef();v.useEffect(()=>{let p=J.current;if(!p)return;function D(fe){if(!(fe.target instanceof HTMLElement))return;let Te=fe.target.closest("button,input[type=submit]");Te&&Te.form===p&&Te.type==="submit"&&(Oe.current=Te)}return window.addEventListener("click",D,{capture:!0}),()=>{window.removeEventListener("click",D,{capture:!0})}},[]);const Jh=async p=>{Yh();const D=await e.validate(wh(p.currentTarget));if(D.error)_t(),bt(D.error.fieldErrors),f||xh(D.error.fieldErrors,Ae(),J.current);else{const fe=jh(p);if(await(t==null?void 0:t(D.data,fe)),fe.defaultPrevented){_t();return}n?n.submit(Oe.current||J.current):zh(Oe.current||J.current,{method:l,replace:d}),Oe.current=null}};return L.default.createElement(qh,Q(j({ref:Oh([J,i,Zh])},m),{id:h,action:a,method:l,replace:d,onSubmit:p=>{p.preventDefault(),Jh(p)},onReset:p=>{o==null||o(p),!p.defaultPrevented&&(kh(),Xh())}}),L.default.createElement(Fr.Provider,{value:T},L.default.createElement(Mh,{formRef:J,resetAfterSubmit:u}),c&&L.default.createElement("input",{type:"hidden",value:c,name:"subaction"}),h&&L.default.createElement("input",{type:"hidden",value:h,name:$e}),r))}var Gh=Or;function Hh(e,t,r){return e==null?e:Gh(e,t,r)}var Vh=Hh;const dn=e=>{const t=new fn;return e.forEach(([r,n])=>t.add(r,n)),[...t.entries()].reduce((r,[n,a])=>Vh(r,n,a.length===1?a[0]:a),{})},vn=e=>"entries"in e&&typeof e.entries=="function"?dn([...e.entries()]):dn(Object.entries(e));function Rh(e){return{validate:async t=>{const r=vn(t),n=await e.validate(r);return n.error?{data:void 0,error:{fieldErrors:n.error,subaction:r.subaction,formId:r[$e]},submittedData:r,formId:r[$e]}:{data:n.data,error:void 0,submittedData:r,formId:r[$e]}},validateField:(t,r)=>e.validateField(vn(t),r)}}const Kh=e=>{const t=H(e,"useFormState"),r=en(t.formId),n=rn(t.formId),a=Tv(t.formId),s=tn(t.formId),i=Cv(t.formId),o=xv(t.formId),c=sn(t.formId),f=Zr(t).hydrateTo(c),l=Fv(t.formId),h=Xr(t).hydrateTo(l);return v.useMemo(()=>({action:i,subaction:o,defaultValues:f,fieldErrors:h!=null?h:{},hasBeenSubmitted:n,isSubmitting:r,touchedFields:a,isValid:s}),[i,n,f,h,r,s,o,a])},Nh=e=>{const t=H(e,"useFormHelpers"),r=Ov(t),n=nn(t.formId),a=Ev(t.formId),s=Jr(t),i=on(t.formId),o=wv(t.formId);return v.useMemo(()=>({setTouched:r,validateField:n,clearError:s,validate:a,clearAllErrors:()=>i({}),reset:o}),[s,o,i,r,a,n])},Bh=e=>{const t=H(e,"useFormContext"),r=Kh(e),{clearError:n,setTouched:a,validateField:s,clearAllErrors:i,validate:o}=Nh(e),c=an(t.formId),u=v.useCallback((...f)=>{f.forEach(l=>{n(l)})},[n]);return Q(j({},r),{setFieldTouched:a,validateField:s,clearError:u,registerReceiveFocus:c,clearAllErrors:i,validate:o})};y.ValidatedForm=Lh,y.createValidator=Rh,y.setFormDefaults=Rv,y.useControlField=Gv,y.useField=Lv,y.useFormContext=Bh,y.useIsSubmitting=un,y.useIsValid=cn,y.useUpdateControlledField=Hv,y.validationError=Vv,Object.defineProperties(y,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
File without changes
@@ -63,3 +63,5 @@ export declare const useField: (name: string, options?: {
63
63
  */
64
64
  formId?: string | undefined;
65
65
  } | undefined) => FieldProps;
66
+ export declare const useControlField: <T>(name: string, formId?: string | undefined) => readonly [T, (value: T) => void];
67
+ export declare const useUpdateControlledField: (formId?: string | undefined) => (fieldName: string, value: unknown) => void;
File without changes
@@ -1,9 +1,11 @@
1
1
  export declare class MultiValueMap<Key, Value> {
2
2
  private dict;
3
3
  add: (key: Key, value: Value) => void;
4
+ delete: (key: Key) => void;
4
5
  remove: (key: Key, value: Value) => void;
5
6
  getAll: (key: Key) => Value[];
6
7
  entries: () => IterableIterator<[Key, Value[]]>;
8
+ values: () => IterableIterator<Value[]>;
7
9
  has: (key: Key) => boolean;
8
10
  }
9
11
  export declare const useMultiValueMap: <Key, Value>() => () => MultiValueMap<Key, Value>;
File without changes
File without changes
File without changes
@@ -0,0 +1,32 @@
1
+ import { FieldErrors, ValidationErrorResponseData } from "..";
2
+ import { InternalFormContextValue } from "./formContext";
3
+ import { Hydratable } from "./hydratable";
4
+ import { InternalFormId } from "./state/storeFamily";
5
+ export declare const useInternalFormContext: (formId?: string | symbol | undefined, hookName?: string | undefined) => InternalFormContextValue;
6
+ export declare function useErrorResponseForForm({ fetcher, subaction, formId, }: InternalFormContextValue): ValidationErrorResponseData | null;
7
+ export declare const useFieldErrorsForForm: (context: InternalFormContextValue) => Hydratable<FieldErrors | undefined>;
8
+ export declare const useDefaultValuesFromLoader: ({ formId, }: InternalFormContextValue) => any;
9
+ export declare const useDefaultValuesForForm: (context: InternalFormContextValue) => Hydratable<{
10
+ [fieldName: string]: any;
11
+ }>;
12
+ export declare const useHasActiveFormSubmit: ({ fetcher, }: InternalFormContextValue) => boolean;
13
+ export declare const useFieldTouched: (field: string, { formId }: InternalFormContextValue) => readonly [boolean, (touched: boolean) => void];
14
+ export declare const useFieldError: (name: string, context: InternalFormContextValue) => string | undefined;
15
+ export declare const useClearError: (context: InternalFormContextValue) => (field: string) => void;
16
+ export declare const useFieldDefaultValue: (name: string, context: InternalFormContextValue) => any;
17
+ export declare const useInternalIsSubmitting: (formId: InternalFormId) => boolean;
18
+ export declare const useInternalIsValid: (formId: InternalFormId) => boolean;
19
+ export declare const useInternalHasBeenSubmitted: (formId: InternalFormId) => boolean;
20
+ export declare const useValidateField: (formId: InternalFormId) => (fieldName: string) => Promise<string | null>;
21
+ export declare const useValidate: (formId: InternalFormId) => () => Promise<void>;
22
+ export declare const useRegisterReceiveFocus: (formId: InternalFormId) => (fieldName: string, handler: () => void) => () => void;
23
+ export declare const useSyncedDefaultValues: (formId: InternalFormId) => {
24
+ [fieldName: string]: any;
25
+ };
26
+ export declare const useSetTouched: ({ formId }: InternalFormContextValue) => (field: string, touched: boolean) => void;
27
+ export declare const useTouchedFields: (formId: InternalFormId) => import("..").TouchedFields;
28
+ export declare const useFieldErrors: (formId: InternalFormId) => FieldErrors;
29
+ export declare const useSetFieldErrors: (formId: InternalFormId) => (errors: FieldErrors) => void;
30
+ export declare const useResetFormElement: (formId: InternalFormId) => () => void;
31
+ export declare const useFormActionProp: (formId: InternalFormId) => string | undefined;
32
+ export declare const useFormSubactionProp: (formId: InternalFormId) => string | undefined;
File without changes
@@ -0,0 +1,2 @@
1
+ import { InternalFormId } from "./storeFamily";
2
+ export declare const cleanupFormState: (formId: InternalFormId) => void;
@@ -0,0 +1,24 @@
1
+ export declare type ControlledFieldState = {
2
+ fields: {
3
+ [fieldName: string]: {
4
+ refCount: number;
5
+ value: unknown;
6
+ defaultValue?: unknown;
7
+ hydrated: boolean;
8
+ valueUpdatePromise: Promise<void> | undefined;
9
+ resolveValueUpdate: (() => void) | undefined;
10
+ } | undefined;
11
+ };
12
+ register: (fieldName: string) => void;
13
+ unregister: (fieldName: string) => void;
14
+ setValue: (fieldName: string, value: unknown) => void;
15
+ hydrateWithDefault: (fieldName: string, defaultValue: unknown) => void;
16
+ awaitValueUpdate: (fieldName: string) => Promise<void>;
17
+ reset: () => void;
18
+ };
19
+ export declare const controlledFieldStore: {
20
+ (formId: import("./storeFamily").InternalFormId): import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<ControlledFieldState>, "setState"> & {
21
+ setState(nextStateOrUpdater: ControlledFieldState | Partial<ControlledFieldState> | ((state: import("immer/dist/internal").WritableDraft<ControlledFieldState>) => void), shouldReplace?: boolean | undefined): void;
22
+ }>;
23
+ remove(formId: import("./storeFamily").InternalFormId): void;
24
+ };
@@ -0,0 +1,6 @@
1
+ import { InternalFormContextValue } from "../formContext";
2
+ import { InternalFormId } from "./storeFamily";
3
+ export declare const useControlledFieldValue: (context: InternalFormContextValue, field: string) => any;
4
+ export declare const useControllableValue: (context: InternalFormContextValue, field: string) => readonly [any, (value: unknown) => void];
5
+ export declare const useUpdateControllableValue: (formId: InternalFormId) => (fieldName: string, value: unknown) => void;
6
+ export declare const useAwaitValue: (formId: InternalFormId) => (fieldName: string) => Promise<void>;
@@ -0,0 +1,40 @@
1
+ import { FieldErrors, TouchedFields, Validator } from "../../validation/types";
2
+ export declare type SyncedFormProps = {
3
+ formId?: string;
4
+ action?: string;
5
+ subaction?: string;
6
+ defaultValues: {
7
+ [fieldName: string]: any;
8
+ };
9
+ registerReceiveFocus: (fieldName: string, handler: () => void) => () => void;
10
+ validator: Validator<unknown>;
11
+ };
12
+ export declare type FormState = {
13
+ isHydrated: boolean;
14
+ isSubmitting: boolean;
15
+ hasBeenSubmitted: boolean;
16
+ fieldErrors: FieldErrors;
17
+ touchedFields: TouchedFields;
18
+ formProps?: SyncedFormProps;
19
+ formElement: HTMLFormElement | null;
20
+ isValid: () => boolean;
21
+ startSubmit: () => void;
22
+ endSubmit: () => void;
23
+ setTouched: (field: string, touched: boolean) => void;
24
+ setFieldError: (field: string, error: string) => void;
25
+ setFieldErrors: (errors: FieldErrors) => void;
26
+ clearFieldError: (field: string) => void;
27
+ reset: () => void;
28
+ syncFormProps: (props: SyncedFormProps) => void;
29
+ setHydrated: () => void;
30
+ setFormElement: (formElement: HTMLFormElement | null) => void;
31
+ validateField: (fieldName: string) => Promise<string | null>;
32
+ validate: () => Promise<void>;
33
+ resetFormElement: () => void;
34
+ };
35
+ export declare const formStore: {
36
+ (formId: import("./storeFamily").InternalFormId): import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<FormState>, "setState"> & {
37
+ setState(nextStateOrUpdater: FormState | Partial<FormState> | ((state: import("immer/dist/internal").WritableDraft<FormState>) => void), shouldReplace?: boolean | undefined): void;
38
+ }>;
39
+ remove(formId: import("./storeFamily").InternalFormId): void;
40
+ };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * This is basically what `atomFamily` from jotai does,
3
+ * but it doesn't make sense to include the entire jotai library just for that api.
4
+ */
5
+ export declare type InternalFormId = string | symbol;
6
+ export declare const storeFamily: <T>(create: (formId: InternalFormId) => T) => {
7
+ (formId: InternalFormId): T;
8
+ remove(formId: InternalFormId): void;
9
+ };
@@ -0,0 +1,5 @@
1
+ import { ControlledFieldState } from "./controlledFieldStore";
2
+ import { FormState } from "./createFormStore";
3
+ import { InternalFormId } from "./storeFamily";
4
+ export declare const useFormStore: <T>(formId: InternalFormId, selector: (state: FormState) => T) => T;
5
+ export declare const useControlledFieldStore: <T>(formId: InternalFormId, selector: (state: ControlledFieldState) => T) => T;
File without changes
File without changes
@@ -30,6 +30,21 @@ export declare type FormHelpers = {
30
30
  * Change the touched state of the specified field.
31
31
  */
32
32
  setTouched: (fieldName: string, touched: boolean) => void;
33
+ /**
34
+ * Validate the whole form and populate any errors.
35
+ */
36
+ validate: () => Promise<void>;
37
+ /**
38
+ * Clears all errors on the form.
39
+ */
40
+ clearAllErrors: () => void;
41
+ /**
42
+ * Resets the form.
43
+ *
44
+ * _Note_: The equivalent behavior can be achieved by calling formElement.reset()
45
+ * or clicking a button element with `type="reset"`.
46
+ */
47
+ reset: () => void;
33
48
  };
34
49
  /**
35
50
  * Returns helpers that can be used to update the form state.
@@ -53,6 +53,14 @@ export declare type FormContextValue = {
53
53
  * Change the touched state of the specified field.
54
54
  */
55
55
  setFieldTouched: (fieldName: string, touched: boolean) => void;
56
+ /**
57
+ * Validate the whole form and populate any errors.
58
+ */
59
+ validate: () => Promise<void>;
60
+ /**
61
+ * Clears all errors on the form.
62
+ */
63
+ clearAllErrors: () => void;
56
64
  };
57
65
  /**
58
66
  * Provides access to some of the internal state of the form.
File without changes
package/package.json CHANGED
@@ -1,9 +1,11 @@
1
1
  {
2
2
  "name": "remix-validated-form",
3
- "version": "4.2.0",
3
+ "version": "4.4.0",
4
4
  "description": "Form component and utils for easy form validation in remix",
5
- "browser": "./browser/index.js",
6
- "main": "./build/index.js",
5
+ "browser": "./dist/remix-validated-form.cjs.js",
6
+ "main": "./dist/remix-validated-form.umd.js",
7
+ "module": "./dist/remix-validated-form.es.js",
8
+ "types": "./dist/types/index.d.ts",
7
9
  "repository": {
8
10
  "type": "git",
9
11
  "url": "https://github.com/airjp73/remix-validated-form"
@@ -11,9 +13,7 @@
11
13
  "sideEffects": false,
12
14
  "scripts": {
13
15
  "dev": "tsc --module ESNext --outDir ./browser --watch",
14
- "build": "npm run build:browser && npm run build:main",
15
- "build:browser": "tsc --module ESNext --outDir ./browser",
16
- "build:main": "tsc --module CommonJS --outDir ./build",
16
+ "build": "vite build",
17
17
  "prepublishOnly": "cp ../../README.md ./README.md && npm run build",
18
18
  "postpublish": "rm ./README.md"
19
19
  },
@@ -45,11 +45,13 @@
45
45
  "fetch-blob": "^3.1.3",
46
46
  "react": "^17.0.2",
47
47
  "tsconfig": "*",
48
- "typescript": "^4.5.3"
48
+ "typescript": "^4.5.3",
49
+ "vite-config": "*"
49
50
  },
50
51
  "dependencies": {
51
- "jotai": "^1.5.3",
52
+ "immer": "^9.0.12",
52
53
  "lodash": "^4.17.21",
53
- "tiny-invariant": "^1.2.0"
54
+ "tiny-invariant": "^1.2.0",
55
+ "zustand": "^4.0.0-rc.0"
54
56
  }
55
57
  }
@@ -10,7 +10,6 @@ import React, {
10
10
  useRef,
11
11
  useState,
12
12
  } from "react";
13
- import invariant from "tiny-invariant";
14
13
  import { useIsSubmitting, useIsValid } from "./hooks";
15
14
  import { FORM_ID_FIELD } from "./internal/constants";
16
15
  import {
@@ -20,22 +19,16 @@ import {
20
19
  import {
21
20
  useDefaultValuesFromLoader,
22
21
  useErrorResponseForForm,
23
- useFormUpdateAtom,
24
22
  useHasActiveFormSubmit,
23
+ useSetFieldErrors,
25
24
  } from "./internal/hooks";
26
25
  import { MultiValueMap, useMultiValueMap } from "./internal/MultiValueMap";
26
+ import { cleanupFormState } from "./internal/state/cleanup";
27
+ import { SyncedFormProps } from "./internal/state/createFormStore";
27
28
  import {
28
- cleanupFormState,
29
- endSubmitAtom,
30
- fieldErrorsAtom,
31
- formElementAtom,
32
- formPropsAtom,
33
- isHydratedAtom,
34
- resetAtom,
35
- setFieldErrorAtom,
36
- startSubmitAtom,
37
- SyncedFormProps,
38
- } from "./internal/state";
29
+ useControlledFieldStore,
30
+ useFormStore,
31
+ } from "./internal/state/storeHooks";
39
32
  import { useSubmitComplete } from "./internal/submissionCallbacks";
40
33
  import {
41
34
  mergeRefs,
@@ -232,39 +225,27 @@ export function ValidatedForm<DataType>({
232
225
  const Form = fetcher?.Form ?? RemixForm;
233
226
 
234
227
  const submit = useSubmit();
235
- const setFieldErrors = useFormUpdateAtom(fieldErrorsAtom(formId));
236
- const setFieldError = useFormUpdateAtom(setFieldErrorAtom(formId));
237
- const reset = useFormUpdateAtom(resetAtom(formId));
238
- const startSubmit = useFormUpdateAtom(startSubmitAtom(formId));
239
- const endSubmit = useFormUpdateAtom(endSubmitAtom(formId));
240
- const syncFormProps = useFormUpdateAtom(formPropsAtom(formId));
241
- const setHydrated = useFormUpdateAtom(isHydratedAtom(formId));
242
- const setFormElementInState = useFormUpdateAtom(formElementAtom(formId));
228
+ const setFieldErrors = useSetFieldErrors(formId);
229
+ const setFieldError = useFormStore(formId, (state) => state.setFieldError);
230
+ const reset = useFormStore(formId, (state) => state.reset);
231
+ const resetControlledFields = useControlledFieldStore(
232
+ formId,
233
+ (state) => state.reset
234
+ );
235
+ const startSubmit = useFormStore(formId, (state) => state.startSubmit);
236
+ const endSubmit = useFormStore(formId, (state) => state.endSubmit);
237
+ const syncFormProps = useFormStore(formId, (state) => state.syncFormProps);
238
+ const setHydrated = useFormStore(formId, (state) => state.setHydrated);
239
+ const setFormElementInState = useFormStore(
240
+ formId,
241
+ (state) => state.setFormElement
242
+ );
243
243
 
244
244
  useEffect(() => {
245
- setHydrated(true);
245
+ setHydrated();
246
246
  return () => cleanupFormState(formId);
247
247
  }, [formId, setHydrated]);
248
248
 
249
- const validateField: SyncedFormProps["validateField"] = useCallback(
250
- async (field) => {
251
- invariant(formRef.current, "Cannot find reference to form");
252
- const { error } = await validator.validateField(
253
- getDataFromForm(formRef.current),
254
- field
255
- );
256
-
257
- if (error) {
258
- setFieldError({ field, error });
259
- return error;
260
- } else {
261
- setFieldError({ field, error: undefined });
262
- return null;
263
- }
264
- },
265
- [setFieldError, validator]
266
- );
267
-
268
249
  const customFocusHandlers = useMultiValueMap<string, () => void>();
269
250
  const registerReceiveFocus: SyncedFormProps["registerReceiveFocus"] =
270
251
  useCallback(
@@ -282,8 +263,8 @@ export function ValidatedForm<DataType>({
282
263
  action,
283
264
  defaultValues: providedDefaultValues ?? backendDefaultValues ?? {},
284
265
  subaction,
285
- validateField,
286
266
  registerReceiveFocus,
267
+ validator,
287
268
  });
288
269
  }, [
289
270
  action,
@@ -291,8 +272,8 @@ export function ValidatedForm<DataType>({
291
272
  registerReceiveFocus,
292
273
  subaction,
293
274
  syncFormProps,
294
- validateField,
295
275
  backendDefaultValues,
276
+ validator,
296
277
  ]);
297
278
 
298
279
  useEffect(() => {
@@ -382,6 +363,7 @@ export function ValidatedForm<DataType>({
382
363
  onReset?.(event);
383
364
  if (event.defaultPrevented) return;
384
365
  reset();
366
+ resetControlledFields();
385
367
  }}
386
368
  >
387
369
  <InternalFormContext.Provider value={contextValue}>
package/src/hooks.ts CHANGED
@@ -8,15 +8,18 @@ import {
8
8
  useInternalFormContext,
9
9
  useFieldTouched,
10
10
  useFieldError,
11
- useFormAtomValue,
12
11
  useFieldDefaultValue,
12
+ useClearError,
13
+ useInternalIsSubmitting,
14
+ useInternalIsValid,
15
+ useInternalHasBeenSubmitted,
16
+ useValidateField,
17
+ useRegisterReceiveFocus,
13
18
  } from "./internal/hooks";
14
19
  import {
15
- formPropsAtom,
16
- hasBeenSubmittedAtom,
17
- isSubmittingAtom,
18
- isValidAtom,
19
- } from "./internal/state";
20
+ useControllableValue,
21
+ useUpdateControllableValue,
22
+ } from "./internal/state/controlledFields";
20
23
 
21
24
  /**
22
25
  * Returns whether or not the parent form is currently being submitted.
@@ -27,7 +30,7 @@ import {
27
30
  */
28
31
  export const useIsSubmitting = (formId?: string) => {
29
32
  const formContext = useInternalFormContext(formId, "useIsSubmitting");
30
- return useFormAtomValue(isSubmittingAtom(formContext.formId));
33
+ return useInternalIsSubmitting(formContext.formId);
31
34
  };
32
35
 
33
36
  /**
@@ -37,7 +40,7 @@ export const useIsSubmitting = (formId?: string) => {
37
40
  */
38
41
  export const useIsValid = (formId?: string) => {
39
42
  const formContext = useInternalFormContext(formId, "useIsValid");
40
- return useFormAtomValue(isValidAtom(formContext.formId));
43
+ return useInternalIsValid(formContext.formId);
41
44
  };
42
45
 
43
46
  export type FieldProps = {
@@ -99,14 +102,12 @@ export const useField = (
99
102
 
100
103
  const defaultValue = useFieldDefaultValue(name, formContext);
101
104
  const [touched, setTouched] = useFieldTouched(name, formContext);
102
- const [error, setError] = useFieldError(name, formContext);
105
+ const error = useFieldError(name, formContext);
106
+ const clearError = useClearError(formContext);
103
107
 
104
- const hasBeenSubmitted = useFormAtomValue(
105
- hasBeenSubmittedAtom(formContext.formId)
106
- );
107
- const { validateField, registerReceiveFocus } = useFormAtomValue(
108
- formPropsAtom(formContext.formId)
109
- );
108
+ const hasBeenSubmitted = useInternalHasBeenSubmitted(formContext.formId);
109
+ const validateField = useValidateField(formContext.formId);
110
+ const registerReceiveFocus = useRegisterReceiveFocus(formContext.formId);
110
111
 
111
112
  useEffect(() => {
112
113
  if (handleReceiveFocus)
@@ -116,7 +117,7 @@ export const useField = (
116
117
  const field = useMemo<FieldProps>(() => {
117
118
  const helpers = {
118
119
  error,
119
- clearError: () => setError(undefined),
120
+ clearError: () => clearError(name),
120
121
  validate: () => {
121
122
  validateField(name);
122
123
  },
@@ -136,15 +137,26 @@ export const useField = (
136
137
  };
137
138
  }, [
138
139
  error,
140
+ clearError,
139
141
  defaultValue,
140
142
  touched,
141
143
  setTouched,
142
144
  name,
143
145
  hasBeenSubmitted,
144
146
  options?.validationBehavior,
145
- setError,
146
147
  validateField,
147
148
  ]);
148
149
 
149
150
  return field;
150
151
  };
152
+
153
+ export const useControlField = <T>(name: string, formId?: string) => {
154
+ const context = useInternalFormContext(formId, "useControlField");
155
+ const [value, setValue] = useControllableValue(context, name);
156
+ return [value as T, setValue as (value: T) => void] as const;
157
+ };
158
+
159
+ export const useUpdateControlledField = (formId?: string) => {
160
+ const context = useInternalFormContext(formId, "useControlField");
161
+ return useUpdateControllableValue(context.formId);
162
+ };
@@ -11,6 +11,10 @@ export class MultiValueMap<Key, Value> {
11
11
  }
12
12
  };
13
13
 
14
+ delete = (key: Key) => {
15
+ this.dict.delete(key);
16
+ };
17
+
14
18
  remove = (key: Key, value: Value) => {
15
19
  if (!this.dict.has(key)) return;
16
20
  const array = this.dict.get(key)!;
@@ -25,6 +29,8 @@ export class MultiValueMap<Key, Value> {
25
29
 
26
30
  entries = (): IterableIterator<[Key, Value[]]> => this.dict.entries();
27
31
 
32
+ values = (): IterableIterator<Value[]> => this.dict.values();
33
+
28
34
  has = (key: Key): boolean => this.dict.has(key);
29
35
  }
30
36