@lehnihon/bit-form 2.2.3 → 2.2.4

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 (127) hide show
  1. package/dist/angular/index.cjs +1 -1
  2. package/dist/angular/index.cjs.map +1 -1
  3. package/dist/angular/index.d.cts +6 -5
  4. package/dist/angular/index.d.ts +6 -5
  5. package/dist/angular/index.js +1 -1
  6. package/dist/angular/index.js.map +1 -1
  7. package/dist/{bus-DHQHDwUp.d.ts → bus-BQI1FIOs.d.ts} +20 -10
  8. package/dist/{bus-CILR-ENq.d.cts → bus-a_GA51Qw.d.cts} +20 -10
  9. package/dist/chunk-4XLU5ZCX.js +2 -0
  10. package/dist/chunk-4XLU5ZCX.js.map +1 -0
  11. package/dist/chunk-66DIO2SH.js +2 -0
  12. package/dist/chunk-66DIO2SH.js.map +1 -0
  13. package/dist/chunk-7LMNIQTT.js +2 -0
  14. package/dist/{chunk-VDWCFNA6.js.map → chunk-7LMNIQTT.js.map} +1 -1
  15. package/dist/chunk-AE4G32HS.js +2 -0
  16. package/dist/chunk-AE4G32HS.js.map +1 -0
  17. package/dist/chunk-BMHK77NL.js +2 -0
  18. package/dist/chunk-BMHK77NL.js.map +1 -0
  19. package/dist/chunk-CFFLDMLG.cjs +2 -0
  20. package/dist/chunk-CFFLDMLG.cjs.map +1 -0
  21. package/dist/chunk-EI5L5L3R.cjs +2 -0
  22. package/dist/{chunk-PA6T2CBR.cjs.map → chunk-EI5L5L3R.cjs.map} +1 -1
  23. package/dist/chunk-FQLJOSF7.js +1 -0
  24. package/dist/chunk-FQLJOSF7.js.map +1 -0
  25. package/dist/chunk-IV32WXCF.cjs +2 -0
  26. package/dist/chunk-IV32WXCF.cjs.map +1 -0
  27. package/dist/chunk-K5NZDYAT.js +2 -0
  28. package/dist/chunk-K5NZDYAT.js.map +1 -0
  29. package/dist/chunk-KYM7JG2G.cjs +2 -0
  30. package/dist/chunk-KYM7JG2G.cjs.map +1 -0
  31. package/dist/chunk-LOYB7TTM.cjs +2 -0
  32. package/dist/{chunk-JO37BU2C.cjs.map → chunk-LOYB7TTM.cjs.map} +1 -1
  33. package/dist/chunk-MBTLLIBM.js +2 -0
  34. package/dist/chunk-MBTLLIBM.js.map +1 -0
  35. package/dist/chunk-MFSDDSVG.cjs +1 -0
  36. package/dist/chunk-MFSDDSVG.cjs.map +1 -0
  37. package/dist/chunk-MQX4YS6D.cjs +2 -0
  38. package/dist/chunk-MQX4YS6D.cjs.map +1 -0
  39. package/dist/chunk-O5UPA33R.js +2 -0
  40. package/dist/chunk-O5UPA33R.js.map +1 -0
  41. package/dist/{chunk-NNKZFXEK.cjs → chunk-RFFMBY7M.cjs} +2 -2
  42. package/dist/{chunk-NNKZFXEK.cjs.map → chunk-RFFMBY7M.cjs.map} +1 -1
  43. package/dist/chunk-YEXRRTI3.cjs +2 -0
  44. package/dist/chunk-YEXRRTI3.cjs.map +1 -0
  45. package/dist/{chunk-FEW3ABPD.js → chunk-YGAD4ZZW.js} +2 -2
  46. package/dist/chunk-YGAD4ZZW.js.map +1 -0
  47. package/dist/chunk-ZO3GXKF3.cjs +2 -0
  48. package/dist/chunk-ZO3GXKF3.cjs.map +1 -0
  49. package/dist/devtools/bridge.cjs +1 -1
  50. package/dist/devtools/bridge.js +1 -1
  51. package/dist/devtools/index.cjs +2 -2
  52. package/dist/devtools/index.cjs.map +1 -1
  53. package/dist/devtools/index.js +1 -1
  54. package/dist/devtools/index.js.map +1 -1
  55. package/dist/field-binding-BXw0Ku2c.d.cts +12 -0
  56. package/dist/field-binding-BXw0Ku2c.d.ts +12 -0
  57. package/dist/index.cjs +1 -1
  58. package/dist/index.cjs.map +1 -1
  59. package/dist/index.d.cts +20 -15
  60. package/dist/index.d.ts +20 -15
  61. package/dist/index.js +1 -1
  62. package/dist/mask.cjs +1 -1
  63. package/dist/mask.js +1 -1
  64. package/dist/{public-types-SU17BarA.d.cts → public-types-D14VY_4o.d.cts} +4 -9
  65. package/dist/{public-types-Bgws0aVJ.d.ts → public-types-D3WIiMGu.d.ts} +4 -9
  66. package/dist/react/index.cjs +1 -1
  67. package/dist/react/index.cjs.map +1 -1
  68. package/dist/react/index.d.cts +7 -6
  69. package/dist/react/index.d.ts +7 -6
  70. package/dist/react/index.js +1 -1
  71. package/dist/react/index.js.map +1 -1
  72. package/dist/react-native/index.cjs +1 -1
  73. package/dist/react-native/index.d.cts +5 -4
  74. package/dist/react-native/index.d.ts +5 -4
  75. package/dist/react-native/index.js +1 -1
  76. package/dist/resolvers/index.cjs +2 -0
  77. package/dist/resolvers/index.cjs.map +1 -0
  78. package/dist/resolvers/index.d.cts +9 -0
  79. package/dist/resolvers/index.d.ts +9 -0
  80. package/dist/resolvers/index.js +2 -0
  81. package/dist/resolvers/index.js.map +1 -0
  82. package/dist/resolvers/joi.cjs +1 -1
  83. package/dist/resolvers/joi.cjs.map +1 -1
  84. package/dist/resolvers/joi.d.cts +1 -1
  85. package/dist/resolvers/joi.d.ts +1 -1
  86. package/dist/resolvers/joi.js +1 -1
  87. package/dist/resolvers/joi.js.map +1 -1
  88. package/dist/resolvers/types.cjs +2 -1
  89. package/dist/resolvers/types.cjs.map +1 -1
  90. package/dist/resolvers/types.js +1 -0
  91. package/dist/resolvers/yup.cjs +1 -1
  92. package/dist/resolvers/yup.cjs.map +1 -1
  93. package/dist/resolvers/yup.d.cts +1 -1
  94. package/dist/resolvers/yup.d.ts +1 -1
  95. package/dist/resolvers/yup.js +1 -1
  96. package/dist/resolvers/yup.js.map +1 -1
  97. package/dist/resolvers/zod.cjs +1 -1
  98. package/dist/resolvers/zod.cjs.map +1 -1
  99. package/dist/resolvers/zod.d.cts +1 -1
  100. package/dist/resolvers/zod.d.ts +1 -1
  101. package/dist/resolvers/zod.js +1 -1
  102. package/dist/resolvers/zod.js.map +1 -1
  103. package/dist/{types-C2mpfhp1.d.cts → upload-EXnJLq8k.d.cts} +1 -1
  104. package/dist/{types-C2mpfhp1.d.ts → upload-EXnJLq8k.d.ts} +1 -1
  105. package/dist/{use-bit-persist-DEWMhvit.d.cts → use-bit-persist-CNtQ3Gaq.d.ts} +7 -6
  106. package/dist/{use-bit-persist-BlR-hHk6.d.ts → use-bit-persist-Dt4zIl2u.d.cts} +7 -6
  107. package/dist/vue/index.cjs +1 -1
  108. package/dist/vue/index.cjs.map +1 -1
  109. package/dist/vue/index.d.cts +3 -3
  110. package/dist/vue/index.d.ts +3 -3
  111. package/dist/vue/index.js +1 -1
  112. package/dist/vue/index.js.map +1 -1
  113. package/package.json +6 -1
  114. package/dist/chunk-3MUULXXZ.js +0 -2
  115. package/dist/chunk-3MUULXXZ.js.map +0 -1
  116. package/dist/chunk-7MBRAKBL.js +0 -2
  117. package/dist/chunk-7MBRAKBL.js.map +0 -1
  118. package/dist/chunk-ER2DNS7T.cjs +0 -2
  119. package/dist/chunk-ER2DNS7T.cjs.map +0 -1
  120. package/dist/chunk-FEW3ABPD.js.map +0 -1
  121. package/dist/chunk-JO37BU2C.cjs +0 -2
  122. package/dist/chunk-PA6T2CBR.cjs +0 -2
  123. package/dist/chunk-T3XN5O7V.cjs +0 -2
  124. package/dist/chunk-T3XN5O7V.cjs.map +0 -1
  125. package/dist/chunk-ULC4OPIQ.js +0 -2
  126. package/dist/chunk-ULC4OPIQ.js.map +0 -1
  127. package/dist/chunk-VDWCFNA6.js +0 -2
@@ -0,0 +1,2 @@
1
+ import{a as k,b as I}from"./chunk-YGAD4ZZW.js";import{d as x,e as v,k as D}from"./chunk-AE4G32HS.js";import{createContext as H,useContext as O}from"react";import{jsx as q}from"react/jsx-runtime";var w=H(null),nt=({store:t,children:e})=>q(w.Provider,{value:D(t),children:e}),S=()=>{let t=O(w);if(!t)throw new Error("BitForm hooks devem ser usados dentro de um BitFormProvider");return t};import{useCallback as p,useSyncExternalStore as U,useMemo as M,useRef as _,useState as A}from"react";function mt(){let t=S(),[e,s]=A(null),[o,u]=A(null),i=_(null),m=p(()=>{let b=t.getState(),g={isValid:b.isValid,isDirty:b.isDirty,isSubmitting:b.isSubmitting};return i.current&&i.current.isValid===g.isValid&&i.current.isDirty===g.isDirty&&i.current.isSubmitting===g.isSubmitting?i.current:(i.current=g,g)},[t]),d=p(b=>t.subscribeSelector(g=>({isValid:g.isValid,isDirty:g.isDirty,isSubmitting:g.isSubmitting}),()=>b()),[t]),n=U(d,m,m),r=M(()=>k(t,{clearSubmissionState:()=>{s(null),u(null)},setSubmissionResult:b=>{u(b)},setSubmissionError:b=>{s(b)}}),[t]),c=p(r.submit,[r]),a=p(r.onSubmit,[r]),f=p(r.reset,[r]),F=p(r.getValues,[r]),P=p(r.getErrors,[r]),l=p(r.getTouched,[r]),y=p(r.getDirtyValues,[r]);return{meta:M(()=>({...n,submitError:e,lastResponse:o}),[n,e,o]),getValues:F,getErrors:P,getTouched:l,getDirtyValues:y,submit:c,onSubmit:a,reset:f,setField:t.setField.bind(t),blurField:t.blurField.bind(t),replaceValues:t.replaceValues.bind(t),hydrate:t.hydrate.bind(t),rebase:t.rebase.bind(t),setError:t.setError.bind(t),setErrors:t.setErrors.bind(t),setServerErrors:t.setServerErrors.bind(t),validate:t.validate.bind(t)}}import{useCallback as T,useSyncExternalStore as L,useRef as W,useMemo as C}from"react";function ht(t){let e=S(),s=T(r=>e.config.idFactory({scope:"array",path:t,index:r}),[e,t]),o=W([]),u=T(()=>{let r=e.getState(),c=v(r.values,t),a=Array.isArray(c)?c:[];if(a.length!==o.current.length)if(a.length>o.current.length){let f=a.length-o.current.length;o.current=[...o.current,...Array(f).fill(null).map((F,P)=>s(o.current.length+P))]}else o.current=o.current.slice(0,a.length);return a},[e,t,s]),i=T(r=>e.subscribePath(t,()=>r()),[e,t]),m=L(i,u,u),d=C(()=>({append:r=>{o.current=[...o.current,s(o.current.length)],e.pushItem(t,r)},prepend:r=>{o.current=[s(0),...o.current],e.prependItem(t,r)},insert:(r,c)=>{let a=[...o.current];a.splice(r,0,s(r)),o.current=a,e.insertItem(t,r,c)},remove:r=>{o.current=o.current.filter((c,a)=>a!==r),e.removeItem(t,r)},move:(r,c)=>{let a=[...o.current],[f]=a.splice(r,1);a.splice(c,0,f),o.current=a,e.moveItem(t,r,c)},swap:(r,c)=>{let a=[...o.current];[a[r],a[c]]=[a[c],a[r]],o.current=a,e.swapItems(t,r,c)},replace:r=>{o.current=r.map((c,a)=>s(a)),e.setField(t,r)},clear:()=>{o.current=[],e.setField(t,[])}}),[e,t,s]);return{fields:C(()=>m.map((r,c)=>({key:o.current[c]||`temp-${c}`,value:r,index:c})),[m]),length:m.length,...d}}import{useCallback as V,useSyncExternalStore as $,useRef as z}from"react";function Vt(t){let e=S(),s=z(null),o=V(()=>{let n=e.getStepStatus(t);return s.current&&s.current.hasErrors===n.hasErrors&&s.current.isDirty===n.isDirty&&Object.keys(s.current.errors).length===Object.keys(n.errors).length&&Object.entries(n.errors).every(([r,c])=>s.current.errors[r]===c)?s.current:(s.current=n,n)},[e,t]),u=V(n=>e.subscribeSelector(r=>({errors:r.errors,isDirty:r.isDirty}),()=>n()),[e]),i=$(u,o,o),m=V(async()=>{let n=await e.validate({scope:t}),r=e.getStepErrors(t);return{valid:n,errors:r}},[e,t]),d=V(()=>e.getStepErrors(t),[e,t]);return{scopeName:t,status:i,errors:i.errors,validate:m,getErrors:d,isValid:!i.hasErrors,isDirty:i.isDirty}}import{useCallback as h,useSyncExternalStore as G,useRef as J,useState as K}from"react";function xt(t){let e=S(),[s,o]=K(0),u=t[s]??"",i=J(null),m=h(()=>{let l=e.getStepStatus(u);return i.current&&i.current.hasErrors===l.hasErrors&&i.current.isDirty===l.isDirty&&Object.keys(i.current.errors).length===Object.keys(l.errors).length&&Object.entries(l.errors).every(([y,B])=>i.current.errors[y]===B)?i.current:(i.current=l,l)},[e,u]),d=G(l=>e.subscribeSelector(y=>({errors:y.errors,isDirty:y.isDirty}),()=>l()),m,m),n=h(async()=>{let l=await e.validate({scope:u}),y=e.getStepErrors(u);return{valid:l,errors:y}},[e,u]),r=h(()=>e.getStepErrors(u),[e,u]),c=h(async()=>{let l=e.getScopeFields(u);if(e.hasValidationsInProgress(l))return!1;let y=await e.validate({scope:u});if(y)o(B=>Math.min(B+1,t.length-1));else{let B=e.getStepErrors(u),b=Object.keys(B);b.length>0&&e.markFieldsTouched(b)}return y},[e,u,t.length]),a=h(()=>{o(l=>Math.max(l-1,0))},[]),f=h(l=>{o(Math.max(0,Math.min(l-1,t.length-1)))},[t.length]),F=s===0,P=s>=t.length-1;return{step:s+1,stepIndex:s,scope:u,next:c,prev:a,goTo:f,isFirst:F,isLast:P,status:d,errors:d.errors,isValid:!d.hasErrors,isDirty:d.isDirty,validate:n,getErrors:r}}import{useCallback as j,useSyncExternalStore as Q,useRef as X}from"react";function Ct(t){let e=S(),s=X(null),o=j(()=>{let i=v(e.getState().values,t);return s.current!==null&&x(s.current,i)?s.current:(s.current=i,i)},[e,t]),u=j(i=>e.subscribePath(t,()=>i()),[e,t]);return Q(u,o,o)}import{useCallback as R,useMemo as Y,useSyncExternalStore as Z}from"react";function qt(){let t=S(),e=Z(m=>t.subscribeSelector(d=>d.persist,()=>m()),()=>t.getPersistMetadata(),()=>t.getPersistMetadata()),s=R(async()=>t.restorePersisted(),[t]),o=R(async()=>{await t.forceSave()},[t]),u=R(async()=>{await t.clearPersisted()},[t]),i=Y(()=>({isSaving:e.isSaving,isRestoring:e.isRestoring,error:e.error}),[e]);return{restore:s,save:o,clear:u,meta:i}}import{useCallback as E,useSyncExternalStore as N,useRef as tt,useEffect as et}from"react";function $t(t){let e=S(),s=tt(null);et(()=>()=>{e.unregisterField&&e.unregisterField(t)},[e,t]);let o=E(()=>{let n=e.getFieldState(t);if(s.current&&s.current.value===n.value&&s.current.error===n.error&&s.current.touched===n.touched&&s.current.isHidden===n.isHidden&&s.current.isRequired===n.isRequired&&s.current.isDirty===n.isDirty&&s.current.isValidating===n.isValidating)return s.current;let r={value:n.value,error:n.error,touched:n.touched,isHidden:n.isHidden,isRequired:n.isRequired,isDirty:n.isDirty,isValidating:n.isValidating};return s.current=r,r},[e,t]),u=E(n=>I(e,t,()=>n()),[e,t]),i=N(u,o,o),m=E(n=>e.setField(t,n),[e,t]),d=E(()=>e.blurField(t),[e,t]);return{fieldState:i,setValue:m,setBlur:d,store:e}}export{nt as a,S as b,mt as c,$t as d,ht as e,Vt as f,xt as g,Ct as h,qt as i};
2
+ //# sourceMappingURL=chunk-66DIO2SH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/react/context.tsx","../src/react/use-bit-form.ts","../src/react/use-bit-array.ts","../src/react/use-bit-scope.ts","../src/react/use-bit-steps.ts","../src/react/use-bit-watch.ts","../src/react/use-bit-persist.ts","../src/react/use-bit-field-base.ts"],"sourcesContent":["import React, { createContext, useContext } from \"react\";\nimport type { BitStoreApi, BitStoreHooksApi } from \"../core\";\nimport { resolveBitStoreForHooks } from \"../core\";\n\nconst BitContext = createContext<BitStoreHooksApi<any> | null>(null);\n\nexport const BitFormProvider = ({\n store,\n children,\n}: {\n store: BitStoreApi<any>;\n children: React.ReactNode;\n}) => (\n <BitContext.Provider value={resolveBitStoreForHooks(store)}>\n {children}\n </BitContext.Provider>\n);\n\nexport const useBitStore = <T extends object>() => {\n const store = useContext(BitContext);\n if (!store)\n throw new Error(\n \"BitForm hooks devem ser usados dentro de um BitFormProvider\",\n );\n return store as BitStoreHooksApi<T>;\n};\n","import {\n useCallback,\n useSyncExternalStore,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useBitStore } from \"./context\";\nimport { createFormController } from \"../core/form-controller\";\nimport type { UseBitFormResult } from \"./types\";\n\nexport function useBitForm<T extends object>(): UseBitFormResult<T> {\n const store = useBitStore<T>();\n\n const [submitError, setSubmitError] = useState<Error | null>(null);\n const [lastResponse, setLastResponse] = useState<unknown>(null);\n const lastMeta = useRef<{\n isValid: boolean;\n isDirty: boolean;\n isSubmitting: boolean;\n } | null>(null);\n\n const getMetaSnapshot = useCallback(() => {\n const state = store.getState();\n const nextMeta = {\n isValid: state.isValid,\n isDirty: state.isDirty,\n isSubmitting: state.isSubmitting,\n };\n\n if (\n lastMeta.current &&\n lastMeta.current.isValid === nextMeta.isValid &&\n lastMeta.current.isDirty === nextMeta.isDirty &&\n lastMeta.current.isSubmitting === nextMeta.isSubmitting\n ) {\n return lastMeta.current;\n }\n\n lastMeta.current = nextMeta;\n return nextMeta;\n }, [store]);\n\n const subscribeMeta = useCallback(\n (cb: () => void) =>\n store.subscribeSelector(\n (state) => ({\n isValid: state.isValid,\n isDirty: state.isDirty,\n isSubmitting: state.isSubmitting,\n }),\n () => cb(),\n ),\n [store],\n );\n\n const metaState = useSyncExternalStore(\n subscribeMeta,\n getMetaSnapshot,\n getMetaSnapshot,\n );\n\n const controller = useMemo(\n () =>\n createFormController(store, {\n clearSubmissionState: () => {\n setSubmitError(null);\n setLastResponse(null);\n },\n setSubmissionResult: (result) => {\n setLastResponse(result);\n },\n setSubmissionError: (error) => {\n setSubmitError(error);\n },\n }),\n [store],\n );\n\n const submit = useCallback(controller.submit, [controller]);\n const onSubmit = useCallback(controller.onSubmit, [controller]);\n const reset = useCallback(controller.reset, [controller]);\n\n const getValues = useCallback(controller.getValues, [controller]);\n const getErrors = useCallback(controller.getErrors, [controller]);\n const getTouched = useCallback(controller.getTouched, [controller]);\n const getDirtyValues = useCallback(controller.getDirtyValues, [controller]);\n\n const meta = useMemo(\n () => ({\n ...metaState,\n submitError,\n lastResponse,\n }),\n [metaState, submitError, lastResponse],\n );\n\n return {\n // Metadata (grouped)\n meta,\n // Getters\n getValues,\n getErrors,\n getTouched,\n getDirtyValues,\n // Main actions (frequent use - flat)\n submit,\n onSubmit,\n reset,\n setField: store.setField.bind(store),\n blurField: store.blurField.bind(store),\n replaceValues: store.replaceValues.bind(store),\n hydrate: store.hydrate.bind(store),\n rebase: store.rebase.bind(store),\n setError: store.setError.bind(store),\n setErrors: store.setErrors.bind(store),\n setServerErrors: store.setServerErrors.bind(store),\n validate: store.validate.bind(store),\n };\n}\n","import { useCallback, useSyncExternalStore, useRef, useMemo } from \"react\";\nimport { useBitStore } from \"./context\";\nimport {\n getDeepValue,\n BitArrayPath,\n BitPathValue,\n BitArrayItem,\n BitPath,\n} from \"../core\";\n\nexport function useBitArray<\n TForm extends object = any,\n P extends BitArrayPath<TForm> = BitArrayPath<TForm>,\n>(path: P) {\n const store = useBitStore<TForm>();\n const createId = useCallback(\n (index?: number) =>\n store.config.idFactory({\n scope: \"array\",\n path: path as string,\n index,\n }),\n [store, path],\n );\n const idsRef = useRef<string[]>([]);\n\n type Item = BitArrayItem<BitPathValue<TForm, P>>;\n\n const getSnapshot = useCallback(() => {\n const state = store.getState();\n const value = getDeepValue(state.values, path as string) as\n | BitPathValue<TForm, P>\n | undefined;\n const arrayValue = Array.isArray(value) ? (value as Item[]) : [];\n\n if (arrayValue.length !== idsRef.current.length) {\n if (arrayValue.length > idsRef.current.length) {\n const diff = arrayValue.length - idsRef.current.length;\n idsRef.current = [\n ...idsRef.current,\n ...Array(diff)\n .fill(null)\n .map((_, i) => createId(idsRef.current.length + i)),\n ];\n } else {\n idsRef.current = idsRef.current.slice(0, arrayValue.length);\n }\n }\n\n return arrayValue;\n }, [store, path, createId]);\n\n const subscribeArray = useCallback(\n (cb: () => void) => store.subscribePath(path, () => cb()),\n [store, path],\n );\n\n const data = useSyncExternalStore(subscribeArray, getSnapshot, getSnapshot);\n\n const methods = useMemo(\n () => ({\n append: (value: Item) => {\n idsRef.current = [...idsRef.current, createId(idsRef.current.length)];\n store.pushItem(path, value);\n },\n prepend: (value: Item) => {\n idsRef.current = [createId(0), ...idsRef.current];\n store.prependItem(path, value);\n },\n insert: (index: number, value: Item) => {\n const newIds = [...idsRef.current];\n newIds.splice(index, 0, createId(index));\n idsRef.current = newIds;\n store.insertItem(path, index, value);\n },\n remove: (index: number) => {\n idsRef.current = idsRef.current.filter((_, i) => i !== index);\n store.removeItem(path, index);\n },\n move: (from: number, to: number) => {\n const newIds = [...idsRef.current];\n const [item] = newIds.splice(from, 1);\n newIds.splice(to, 0, item);\n idsRef.current = newIds;\n store.moveItem(path, from, to);\n },\n swap: (indexA: number, indexB: number) => {\n const newIds = [...idsRef.current];\n [newIds[indexA], newIds[indexB]] = [newIds[indexB], newIds[indexA]];\n idsRef.current = newIds;\n store.swapItems(path, indexA, indexB);\n },\n replace: (items: Item[]) => {\n idsRef.current = items.map((_, index) => createId(index));\n store.setField(\n path as unknown as BitPath<TForm>,\n items as unknown as BitPathValue<TForm, BitPath<TForm>>,\n );\n },\n clear: () => {\n idsRef.current = [];\n store.setField(\n path as unknown as BitPath<TForm>,\n [] as unknown as BitPathValue<TForm, BitPath<TForm>>,\n );\n },\n }),\n [store, path, createId],\n );\n\n const fields = useMemo(\n () =>\n (data as Item[]).map((item: Item, index: number) => ({\n key: idsRef.current[index] || `temp-${index}`,\n value: item,\n index,\n })),\n [data],\n );\n\n return {\n fields,\n length: data.length,\n ...methods,\n };\n}\n","import { useCallback, useSyncExternalStore, useRef } from \"react\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { useBitStore } from \"./context\";\n\nexport type { ScopeStatus, ValidateScopeResult };\n\nexport function useBitScope(scopeName: string) {\n const store = useBitStore();\n\n const lastStatus = useRef<ScopeStatus | null>(null);\n\n const getStatusSnapshot = useCallback(() => {\n const nextStatus = store.getStepStatus(scopeName);\n\n if (\n lastStatus.current &&\n lastStatus.current.hasErrors === nextStatus.hasErrors &&\n lastStatus.current.isDirty === nextStatus.isDirty &&\n Object.keys(lastStatus.current.errors).length ===\n Object.keys(nextStatus.errors).length &&\n Object.entries(nextStatus.errors).every(\n ([k, v]) => lastStatus.current!.errors[k] === v,\n )\n ) {\n return lastStatus.current;\n }\n\n lastStatus.current = nextStatus;\n return nextStatus;\n }, [store, scopeName]);\n\n // Assina apenas os slices de estado relevantes para o escopo (errors e\n // isDirty), evitando execuções desnecessárias do getStatusSnapshot em\n // mudanças não relacionadas (isSubmitting, isValidating de outros campos…)\n const subscribe = useCallback(\n (cb: () => void) =>\n store.subscribeSelector(\n (state) => ({ errors: state.errors, isDirty: state.isDirty }),\n () => cb(),\n ),\n [store],\n );\n\n const status = useSyncExternalStore(\n subscribe,\n getStatusSnapshot,\n getStatusSnapshot,\n );\n\n const validate = useCallback(async (): Promise<ValidateScopeResult> => {\n const valid = await store.validate({ scope: scopeName });\n const errors = store.getStepErrors(scopeName);\n return { valid, errors };\n }, [store, scopeName]);\n\n const getErrors = useCallback(() => {\n return store.getStepErrors(scopeName);\n }, [store, scopeName]);\n\n return {\n scopeName,\n status,\n errors: status.errors,\n validate,\n getErrors,\n isValid: !status.hasErrors,\n isDirty: status.isDirty,\n };\n}\n","import { useCallback, useSyncExternalStore, useRef, useState } from \"react\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { useBitStore } from \"./context\";\nimport type { UseBitStepsResult } from \"./types\";\n\nexport function useBitSteps(scopeNames: string[]): UseBitStepsResult {\n const store = useBitStore();\n const [stepIndex, setStepIndex] = useState(0);\n\n const scope = scopeNames[stepIndex] ?? \"\";\n const lastStatus = useRef<ScopeStatus | null>(null);\n\n const getStatusSnapshot = useCallback(() => {\n const nextStatus = store.getStepStatus(scope);\n\n if (\n lastStatus.current &&\n lastStatus.current.hasErrors === nextStatus.hasErrors &&\n lastStatus.current.isDirty === nextStatus.isDirty &&\n Object.keys(lastStatus.current.errors).length ===\n Object.keys(nextStatus.errors).length &&\n Object.entries(nextStatus.errors).every(\n ([k, v]) => lastStatus.current!.errors[k] === v,\n )\n ) {\n return lastStatus.current;\n }\n\n lastStatus.current = nextStatus;\n return nextStatus;\n }, [store, scope]);\n\n const status = useSyncExternalStore(\n (cb) =>\n store.subscribeSelector(\n (state) => ({ errors: state.errors, isDirty: state.isDirty }),\n () => cb(),\n ),\n getStatusSnapshot,\n getStatusSnapshot,\n );\n\n const validate = useCallback(async (): Promise<ValidateScopeResult> => {\n const valid = await store.validate({ scope });\n const errors = store.getStepErrors(scope);\n return { valid, errors };\n }, [store, scope]);\n\n const getErrors = useCallback(() => {\n return store.getStepErrors(scope);\n }, [store, scope]);\n\n const next = useCallback(async (): Promise<boolean> => {\n const scopeFields = store.getScopeFields(scope);\n\n if (store.hasValidationsInProgress(scopeFields)) {\n return false;\n }\n\n const valid = await store.validate({ scope });\n if (valid) {\n setStepIndex((s) => Math.min(s + 1, scopeNames.length - 1));\n } else {\n const errors = store.getStepErrors(scope);\n const pathsWithErrors = Object.keys(errors);\n if (pathsWithErrors.length > 0) {\n store.markFieldsTouched(pathsWithErrors);\n }\n }\n return valid;\n }, [store, scope, scopeNames.length]);\n\n const prev = useCallback(() => {\n setStepIndex((s) => Math.max(s - 1, 0));\n }, []);\n\n const goTo = useCallback(\n (targetStep: number) => {\n setStepIndex(\n Math.max(0, Math.min(targetStep - 1, scopeNames.length - 1)),\n );\n },\n [scopeNames.length],\n );\n\n const isFirst = stepIndex === 0;\n const isLast = stepIndex >= scopeNames.length - 1;\n\n return {\n step: stepIndex + 1,\n stepIndex,\n scope,\n next,\n prev,\n goTo,\n isFirst,\n isLast,\n status,\n errors: status.errors,\n isValid: !status.hasErrors,\n isDirty: status.isDirty,\n validate,\n getErrors,\n };\n}\n","import { useCallback, useSyncExternalStore, useRef } from \"react\";\nimport { useBitStore } from \"./context\";\nimport { getDeepValue, deepEqual, BitPath, BitPathValue } from \"../core\";\n\nexport function useBitWatch<\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P): BitPathValue<TForm, P> {\n const store = useBitStore<TForm>();\n const lastValue = useRef<BitPathValue<TForm, P> | null>(null);\n\n const getSnapshot = useCallback(() => {\n const value = getDeepValue(\n store.getState().values,\n path as string,\n ) as BitPathValue<TForm, P>;\n\n if (lastValue.current !== null && deepEqual(lastValue.current, value)) {\n return lastValue.current;\n }\n\n lastValue.current = value;\n return value;\n }, [store, path]);\n\n // Assina apenas o path monitorado → evita executar getSnapshot em toda\n // mudança de estado do store (blur, validation, outros campos, etc.)\n const subscribe = useCallback(\n (cb: () => void) => store.subscribePath(path, () => cb()),\n [store, path],\n );\n\n return useSyncExternalStore(\n subscribe,\n getSnapshot,\n getSnapshot,\n ) as BitPathValue<TForm, P>;\n}\n","import { useCallback, useMemo, useSyncExternalStore } from \"react\";\nimport { useBitStore } from \"./context\";\nimport type { UseBitPersistResult } from \"./types\";\n\nexport function useBitPersist(): UseBitPersistResult {\n const store = useBitStore<any>();\n\n const persistMeta = useSyncExternalStore(\n (cb) =>\n store.subscribeSelector(\n (state) => state.persist,\n () => cb(),\n ),\n () => store.getPersistMetadata(),\n () => store.getPersistMetadata(),\n );\n\n const restore = useCallback(async () => {\n return store.restorePersisted();\n }, [store]);\n\n const save = useCallback(async () => {\n await store.forceSave();\n }, [store]);\n\n const clear = useCallback(async () => {\n await store.clearPersisted();\n }, [store]);\n\n const meta = useMemo(\n () => ({\n isSaving: persistMeta.isSaving,\n isRestoring: persistMeta.isRestoring,\n error: persistMeta.error,\n }),\n [persistMeta],\n );\n\n return {\n restore,\n save,\n clear,\n meta,\n };\n}\n","import { useCallback, useSyncExternalStore, useRef, useEffect } from \"react\";\nimport { useBitStore } from \"./context\";\nimport { BitPath, BitPathValue } from \"../core\";\nimport { subscribeFieldState } from \"../core/field-controller\";\n\nexport function useBitFieldBase<\n TValue = any,\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P) {\n const store = useBitStore<TForm>();\n const lastState = useRef<{\n value: BitPathValue<TForm, P>;\n error: any;\n touched: boolean;\n isHidden: boolean;\n isRequired: boolean;\n isDirty: boolean;\n isValidating: boolean;\n } | null>(null);\n\n useEffect(() => {\n return () => {\n if (store.unregisterField) {\n store.unregisterField(path);\n }\n };\n }, [store, path]);\n\n const getSnapshot = useCallback(() => {\n const nextState = store.getFieldState(path);\n\n if (\n lastState.current &&\n lastState.current.value === nextState.value &&\n lastState.current.error === nextState.error &&\n lastState.current.touched === nextState.touched &&\n lastState.current.isHidden === nextState.isHidden &&\n lastState.current.isRequired === nextState.isRequired &&\n lastState.current.isDirty === nextState.isDirty &&\n lastState.current.isValidating === nextState.isValidating\n ) {\n return lastState.current;\n }\n\n const newState = {\n value: nextState.value,\n error: nextState.error,\n touched: nextState.touched,\n isHidden: nextState.isHidden,\n isRequired: nextState.isRequired,\n isDirty: nextState.isDirty,\n isValidating: nextState.isValidating,\n };\n lastState.current = newState;\n return newState;\n }, [store, path]);\n\n const subscribe = useCallback(\n (cb: () => void) => subscribeFieldState(store, path, () => cb()),\n [store, path],\n );\n\n const fieldState = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n const setValue = useCallback(\n (val: BitPathValue<TForm, P>) => store.setField(path, val),\n [store, path],\n );\n\n const setBlur = useCallback(() => store.blurField(path), [store, path]);\n\n return { fieldState, setValue, setBlur, store };\n}\n"],"mappings":"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","names":["createContext","useContext","jsx","BitContext","createContext","BitFormProvider","store","children","resolveBitStoreForHooks","useBitStore","useContext","useCallback","useSyncExternalStore","useMemo","useRef","useState","useBitForm","store","useBitStore","submitError","setSubmitError","useState","lastResponse","setLastResponse","lastMeta","useRef","getMetaSnapshot","useCallback","state","nextMeta","subscribeMeta","cb","metaState","useSyncExternalStore","controller","useMemo","createFormController","result","error","submit","onSubmit","reset","getValues","getErrors","getTouched","getDirtyValues","useCallback","useSyncExternalStore","useRef","useMemo","useBitArray","path","store","useBitStore","createId","useCallback","index","idsRef","useRef","getSnapshot","state","value","getDeepValue","arrayValue","diff","_","i","subscribeArray","cb","data","useSyncExternalStore","methods","useMemo","newIds","from","to","item","indexA","indexB","items","useCallback","useSyncExternalStore","useRef","useBitScope","scopeName","store","useBitStore","lastStatus","useRef","getStatusSnapshot","useCallback","nextStatus","k","v","subscribe","cb","state","status","useSyncExternalStore","validate","valid","errors","getErrors","useCallback","useSyncExternalStore","useRef","useState","useBitSteps","scopeNames","store","useBitStore","stepIndex","setStepIndex","useState","scope","lastStatus","useRef","getStatusSnapshot","useCallback","nextStatus","k","v","status","useSyncExternalStore","cb","state","validate","valid","errors","getErrors","next","scopeFields","s","pathsWithErrors","prev","goTo","targetStep","isFirst","isLast","useCallback","useSyncExternalStore","useRef","useBitWatch","path","store","useBitStore","lastValue","useRef","getSnapshot","useCallback","value","getDeepValue","deepEqual","subscribe","cb","useSyncExternalStore","useCallback","useMemo","useSyncExternalStore","useBitPersist","store","useBitStore","persistMeta","useSyncExternalStore","cb","state","restore","useCallback","save","clear","meta","useMemo","useCallback","useSyncExternalStore","useRef","useEffect","useBitFieldBase","path","store","useBitStore","lastState","useRef","useEffect","getSnapshot","useCallback","nextState","newState","subscribe","cb","subscribeFieldState","fieldState","useSyncExternalStore","setValue","val","setBlur"]}
@@ -0,0 +1,2 @@
1
+ var X={"#":/\d/,A:/[a-zA-Z]/,X:/[a-zA-Z0-9]/,H:/[0-9a-fA-F]/,U:/[A-Z]/,L:/[a-z]/,"*":/./},h=(e,t)=>{if(e==null||e==="")return"";let r=String(e),p=r.startsWith("-"),n=t?t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"):"",c=new RegExp(`[^a-zA-Z0-9${n}]`,"g"),m=r.replace(c,"");return p&&m&&!m.startsWith("-")?`-${m}`:m},te=(e,t=2)=>{if(typeof e=="number")return e;if(!e)return 0;let r=String(e),p=r.includes("-"),n=r.replace(/\D/g,"");if(!n)return 0;let c=parseInt(n,10)/Math.pow(10,t);return p?-c:c},a=(e,t)=>{let r=o=>o.split("").filter(s=>X[s]).length,n=[...Array.isArray(e)?e:[e]].sort((o,s)=>r(o)-r(s)),c=o=>{let s=n[n.length-1];for(let i of n)if(o<=r(i)){s=i;break}return s},m=o=>{let s=h(o,t?.allowChars);if(!s&&!t?.guide)return"";let i=c(s.length),l=t?.guide||!1,d=t?.placeholderChar||"_",u="",H=0;for(let f=0;f<i.length;f++){let x=i[f],C=X[x];if(H<s.length){let g=s[H];if(C)if(x==="U"&&(g=g.toUpperCase()),x==="L"&&(g=g.toLowerCase()),C.test(g))u+=g,H++;else if(l)u+=d;else break;else u+=x,g===x&&H++}else if(l)u+=C?d:x;else break}return u};return{format:m,parse:o=>{if(t?.customParse)return t.customParse(o);let s=m(o);if(t?.saveRaw){if(t?.guide){let l=(t.placeholderChar||"_").replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),d=new RegExp(l,"g");return s.replace(d,"")}return s}return h(s,t?.allowChars)}}},k=({prefix:e="",suffix:t="",thousand:r,decimal:p,precision:n=2,allowNegative:c=!0,saveRaw:m=!1})=>{let o=s=>{if(s==null||s==="")return"";let i="";if(typeof s=="number"?i=Math.abs(s).toFixed(n).replace(/\D/g,""):i=String(s).replace(/\D/g,""),!i&&String(s).includes("-")&&c)return"-";if(!i)return"";i=i.padStart(n+1,"0");let l=n>0?i.slice(0,-n).replace(/^0+(?=\d)/,"")||"0":i.replace(/^0+(?=\d)/,"")||"0",d=n>0?i.slice(-n):"",u=l.replace(/\B(?=(\d{3})+(?!\d))/g,r),f=(typeof s=="number"?s<0:String(s).includes("-"))&&c?"-":"";return n===0?`${f}${e}${u}${t}`:`${f}${e}${u}${p}${d}${t}`};return{format:o,parse:s=>{let i=te(s,n),l=c?i:Math.abs(i);return m?o(l):l}}},$=e=>{let t=r=>/^3[47]/.test(r)?"#### ###### #####":/^3(?:0[0-5]|[68])/.test(r)?"#### ###### ####":"#### #### #### ####";return{format:r=>{let p=h(r,e?.allowChars),n=t(p);return a(n,e).format(r)},parse:r=>{let p=h(r,e?.allowChars),n=t(p);return a(n,e).parse(r)}}},M=e=>{let r=(e?.format||"DD/MM/YYYY")==="YYYY-MM-DD",p=a(r?"####-##-##":"##/##/####",e);return{format:n=>{let c=h(n);if(!c)return"";let m="",o="",s="";if(r?(s=c.substring(0,4),o=c.substring(4,6),m=c.substring(6,8)):(m=c.substring(0,2),o=c.substring(2,4),s=c.substring(4,8)),m.length===2){let l=parseInt(m,10);l>31&&(m="31"),l===0&&(m="01")}if(o.length===2){let l=parseInt(o,10);l>12&&(o="12"),l===0&&(o="01")}let i=r?`${s}${o}${m}`:`${m}${o}${s}`;return p.format(i)},parse:n=>p.parse(n)}};var b=k({prefix:"R$ ",thousand:".",decimal:",",precision:2}),y=k({prefix:"$",thousand:",",decimal:".",precision:2}),B=k({suffix:" \u20AC",thousand:".",decimal:",",precision:2}),D=k({prefix:"\xA3",thousand:",",decimal:".",precision:2}),S=k({prefix:"\xA5",thousand:",",decimal:".",precision:0}),I=k({suffix:"%",thousand:".",decimal:",",precision:1}),Y=k({thousand:".",decimal:",",precision:2}),P=k({thousand:".",decimal:",",precision:0}),A=a("###.###.###-##"),R=a("##.###.###/####-##"),U=a(["(##) ####-####","(##) #####-####"]),N=a("(##) ####-####"),V=a("#####-###"),w=M({format:"DD/MM/YYYY",guide:!0,customParse:e=>{let t=e.replace(/_/g,""),r=t.split("/");return r.length===3&&r[2].length===4?`${r[2]}-${r[1]}-${r[0]}`:t.replace(/\D/g,"")}}),E=a("##:##"),F=a("###########"),Z=a("##.###.###-X"),L=a(["###.###.###-##","##.###.###/####-##"]),O={format(e){let t=String(e??"").replace(/[^a-zA-Z0-9]/g,"").toUpperCase().slice(0,7);if(t.length===0)return"";let r=t.slice(0,3),p=t.slice(3);return p.length===0?r:p.length>=2&&/[A-Z]/.test(p[1])?`${r}${p}`:`${r}-${p}`},parse(e){return String(e??"").replace(/[^a-zA-Z0-9]/g,"").toUpperCase().slice(0,7)}},z=a("(###) ###-####"),J=a("#####-####"),T=a("##/##/####"),j=a("###-##-####"),G=$(),_=a("####"),W=M({format:"YYYY-MM-DD",saveRaw:!0,guide:!0}),q=a("HH:HH:HH:HH:HH:HH"),K=a("#HHHHHH"),Q=a("###.###.###.###"),v=a("HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH"),ee=a("UU## XXXX XXXX XXXX XXXX XXXX XXXX XXXX XX",{allowChars:" "});function ae(e){return e!=null&&typeof e=="object"&&"target"in e}var oe=(e,t)=>e==null||e===""?"":t?t.format(e):String(e),ie=(e,t)=>t?t.parse(String(e??"")):e;var pe={brl:b,usd:y,eur:B,gbp:D,jpy:S,percent:I,decimal:Y,int:P,integer:P,cpf:A,cnpj:R,cpfCnpj:L,rg:Z,cep:V,cnh:F,plate:O,phone:U,landline:N,date:w,time:E,usPhone:z,zipCode:J,dateUS:T,ssn:j,cc:G,cvv:_,dateISO:W,ip:Q,ipv6:v,mac:q,color:K,iban:ee};export{h as a,te as b,a as c,k as d,$ as e,M as f,b as g,y as h,B as i,D as j,S as k,I as l,Y as m,P as n,A as o,R as p,U as q,N as r,V as s,w as t,E as u,F as v,Z as w,L as x,O as y,z,J as A,T as B,j as C,G as D,_ as E,W as F,q as G,K as H,Q as I,v as J,ee as K,ae as L,oe as M,ie as N,pe as O};
2
+ //# sourceMappingURL=chunk-7LMNIQTT.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/mask/creators.ts","../src/core/mask/presets.ts","../src/core/mask/field-binding.ts","../src/core/mask/index.ts"],"sourcesContent":["import {\n BitMask,\n CurrencyMaskConfig,\n DateMaskConfig,\n PatternMaskOptions,\n} from \"./types\";\n\ntype TokenMap = Record<string, RegExp>;\n\nconst tokens: TokenMap = {\n \"#\": /\\d/,\n A: /[a-zA-Z]/,\n X: /[a-zA-Z0-9]/,\n H: /[0-9a-fA-F]/,\n U: /[A-Z]/,\n L: /[a-z]/,\n \"*\": /./,\n};\n\nexport const unmask = (\n value: string | number | null | undefined,\n allowChars?: string,\n): string => {\n if (value === null || value === undefined || value === \"\") return \"\";\n const stringValue = String(value);\n const isNegative = stringValue.startsWith(\"-\");\n\n const escapedChars = allowChars\n ? allowChars.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n : \"\";\n const regex = new RegExp(`[^a-zA-Z0-9${escapedChars}]`, \"g\");\n\n const clean = stringValue.replace(regex, \"\");\n return isNegative && clean && !clean.startsWith(\"-\") ? `-${clean}` : clean;\n};\n\nexport const unmaskCurrency = (value: any, precision = 2): number => {\n if (typeof value === \"number\") return value;\n if (!value) return 0;\n\n const stringValue = String(value);\n const isNegative = stringValue.includes(\"-\");\n const digits = stringValue.replace(/\\D/g, \"\");\n\n if (!digits) return 0;\n\n const numberValue = parseInt(digits, 10) / Math.pow(10, precision);\n return isNegative ? -numberValue : numberValue;\n};\n\nexport const createPatternMask = (\n pattern: string | string[],\n options?: PatternMaskOptions,\n): BitMask => {\n const getRawLength = (p: string) =>\n p.split(\"\").filter((c) => tokens[c]).length;\n\n const patterns = Array.isArray(pattern) ? pattern : [pattern];\n const sortedPatterns = [...patterns].sort(\n (a, b) => getRawLength(a) - getRawLength(b),\n );\n\n const getActivePattern = (rawValueLength: number) => {\n let activePattern = sortedPatterns[sortedPatterns.length - 1];\n for (const candidate of sortedPatterns) {\n if (rawValueLength <= getRawLength(candidate)) {\n activePattern = candidate;\n break;\n }\n }\n return activePattern;\n };\n\n const formatValue = (value: string | number | null | undefined): string => {\n const stringVal = unmask(value, options?.allowChars);\n\n if (!stringVal && !options?.guide) {\n return \"\";\n }\n\n const activePattern = getActivePattern(stringVal.length);\n const showGuide = options?.guide || false;\n const placeholder = options?.placeholderChar || \"_\";\n\n let masked = \"\";\n let valueIndex = 0;\n\n for (let i = 0; i < activePattern.length; i++) {\n const patternChar = activePattern[i];\n const token = tokens[patternChar];\n\n if (valueIndex < stringVal.length) {\n let dataChar = stringVal[valueIndex];\n\n if (token) {\n if (patternChar === \"U\") dataChar = dataChar.toUpperCase();\n if (patternChar === \"L\") dataChar = dataChar.toLowerCase();\n\n if (token.test(dataChar)) {\n masked += dataChar;\n valueIndex++;\n } else if (showGuide) {\n masked += placeholder;\n } else {\n break;\n }\n } else {\n masked += patternChar;\n if (dataChar === patternChar) valueIndex++;\n }\n } else if (showGuide) {\n masked += token ? placeholder : patternChar;\n } else {\n break;\n }\n }\n\n return masked;\n };\n\n return {\n format: formatValue,\n parse: (value: string) => {\n if (options?.customParse) return options.customParse(value);\n\n const formatted = formatValue(value);\n\n if (options?.saveRaw) {\n if (options?.guide) {\n const placeholder = options.placeholderChar || \"_\";\n const escapedPlaceholder = placeholder.replace(\n /[.*+?^${}()|[\\]\\\\]/g,\n \"\\\\$&\",\n );\n const placeholderRegex = new RegExp(escapedPlaceholder, \"g\");\n\n return formatted.replace(placeholderRegex, \"\");\n }\n\n return formatted;\n }\n\n return unmask(formatted, options?.allowChars);\n },\n };\n};\n\nexport const createCurrencyMask = ({\n prefix = \"\",\n suffix = \"\",\n thousand,\n decimal,\n precision = 2,\n allowNegative = true,\n saveRaw = false,\n}: CurrencyMaskConfig): BitMask => {\n const formatFn = (value: any) => {\n if (value === undefined || value === null || value === \"\") return \"\";\n\n let stringValue = \"\";\n\n if (typeof value === \"number\") {\n stringValue = Math.abs(value).toFixed(precision).replace(/\\D/g, \"\");\n } else {\n stringValue = String(value).replace(/\\D/g, \"\");\n }\n\n if (!stringValue && String(value).includes(\"-\") && allowNegative)\n return \"-\";\n if (!stringValue) return \"\";\n\n stringValue = stringValue.padStart(precision + 1, \"0\");\n\n const integerPart =\n precision > 0\n ? stringValue.slice(0, -precision).replace(/^0+(?=\\d)/, \"\") || \"0\"\n : stringValue.replace(/^0+(?=\\d)/, \"\") || \"0\";\n const decimalPart = precision > 0 ? stringValue.slice(-precision) : \"\";\n\n const formattedInteger = integerPart.replace(\n /\\B(?=(\\d{3})+(?!\\d))/g,\n thousand,\n );\n\n const isNegative =\n typeof value === \"number\" ? value < 0 : String(value).includes(\"-\");\n const sign = isNegative && allowNegative ? \"-\" : \"\";\n\n if (precision === 0) {\n return `${sign}${prefix}${formattedInteger}${suffix}`;\n }\n\n return `${sign}${prefix}${formattedInteger}${decimal}${decimalPart}${suffix}`;\n };\n\n return {\n format: formatFn,\n parse: (value: string) => {\n const numericValue = unmaskCurrency(value, precision);\n const finalNumber = !allowNegative\n ? Math.abs(numericValue)\n : numericValue;\n if (saveRaw) return formatFn(finalNumber);\n return finalNumber;\n },\n };\n};\n\nexport const createCreditCardMask = (options?: PatternMaskOptions): BitMask => {\n // Função auxiliar para descobrir o padrão dinamicamente\n const getCardPattern = (rawValue: string) => {\n // Amex (American Express) começa com 34 ou 37 -> 15 dígitos\n if (/^3[47]/.test(rawValue)) {\n return \"#### ###### #####\";\n }\n // Diners Club começa com 300-305, 36 ou 38 -> 14 dígitos\n if (/^3(?:0[0-5]|[68])/.test(rawValue)) {\n return \"#### ###### ####\";\n }\n // Default: Visa, Mastercard, Discover, Elo, etc -> 16 dígitos\n return \"#### #### #### ####\";\n };\n\n return {\n format: (value: any) => {\n const stringVal = unmask(value, options?.allowChars);\n const pattern = getCardPattern(stringVal);\n const mask = createPatternMask(pattern, options);\n return mask.format(value);\n },\n parse: (value: string) => {\n const stringVal = unmask(value, options?.allowChars);\n const pattern = getCardPattern(stringVal);\n\n const mask = createPatternMask(pattern, options);\n return mask.parse(value);\n },\n };\n};\n\nexport const createDateMask = (config?: DateMaskConfig): BitMask => {\n const formatType = config?.format || \"DD/MM/YYYY\";\n const isISO = formatType === \"YYYY-MM-DD\";\n\n // Criamos a máscara base consoante o formato escolhido\n const baseMask = createPatternMask(\n isISO ? \"####-##-##\" : \"##/##/####\",\n config,\n );\n\n return {\n format: (value: any) => {\n let stringVal = unmask(value);\n if (!stringVal) return \"\";\n\n let day = \"\";\n let month = \"\";\n let year = \"\";\n\n // Separamos os componentes consoante o que o utilizador já digitou\n if (isISO) {\n year = stringVal.substring(0, 4);\n month = stringVal.substring(4, 6);\n day = stringVal.substring(6, 8);\n } else {\n day = stringVal.substring(0, 2);\n month = stringVal.substring(2, 4);\n year = stringVal.substring(4, 8);\n }\n\n // Validação do Dia (01 a 31)\n if (day.length === 2) {\n const d = parseInt(day, 10);\n if (d > 31) day = \"31\";\n if (d === 0) day = \"01\";\n }\n\n // Validação do Mês (01 a 12)\n if (month.length === 2) {\n const m = parseInt(month, 10);\n if (m > 12) month = \"12\";\n if (m === 0) month = \"01\";\n }\n\n // Reconstruímos a string limpa e passamos para o pattern normal\n const safeString = isISO\n ? `${year}${month}${day}`\n : `${day}${month}${year}`;\n\n return baseMask.format(safeString);\n },\n parse: (value: string) => {\n // Usamos a funcionalidade completa da máscara base (incluindo o saveRaw e o unmasking)\n return baseMask.parse(value);\n },\n };\n};\n","import type { BitMask } from \"./types\";\nimport {\n createCreditCardMask,\n createCurrencyMask,\n createDateMask,\n createPatternMask,\n} from \"./creators\";\n\n// ==========================================\n// 💲 MOEDAS (Currencies)\n// ==========================================\n\n/** BRL - Real Brasileiro (R$ 1.000,00) */\nexport const maskBRL = createCurrencyMask({\n prefix: \"R$ \",\n thousand: \".\",\n decimal: \",\",\n precision: 2,\n});\n\n/** USD - Dólar Americano ($1,000.00) */\nexport const maskUSD = createCurrencyMask({\n prefix: \"$\",\n thousand: \",\",\n decimal: \".\",\n precision: 2,\n});\n\n/** EUR - Euro Padrão (€ 1.000,00) - Sufixo comum na Europa */\nexport const maskEUR = createCurrencyMask({\n suffix: \" €\",\n thousand: \".\",\n decimal: \",\",\n precision: 2,\n});\n\n/** GBP - Libra Esterlina (£1,000.00) */\nexport const maskGBP = createCurrencyMask({\n prefix: \"£\",\n thousand: \",\",\n decimal: \".\",\n precision: 2,\n});\n\n/** JPY - Iene Japonês (¥1,000) - Geralmente sem decimais */\nexport const maskJPY = createCurrencyMask({\n prefix: \"¥\",\n thousand: \",\",\n decimal: \".\",\n precision: 0,\n});\n\n// ==========================================\n// 🔢 NÚMEROS E PERCENTUAIS\n// ==========================================\n\n/** Porcentagem PT-BR (10,5%) */\nexport const maskPercent = createCurrencyMask({\n suffix: \"%\",\n thousand: \".\",\n decimal: \",\",\n precision: 1, // Ex: 99,9%\n});\n\n/** Decimal Genérico PT-BR (1.000,00) - Sem símbolo */\nexport const maskDecimal = createCurrencyMask({\n thousand: \".\",\n decimal: \",\",\n precision: 2,\n});\n\n/** Inteiro (1.000) - Apenas separador de milhar */\nexport const maskInteger = createCurrencyMask({\n thousand: \".\",\n decimal: \",\",\n precision: 0,\n});\n\n// ==========================================\n// 🇧🇷 PADRÕES BRASILEIROS (Brazil)\n// ==========================================\n\n/** CPF (000.000.000-00) */\nexport const maskCPF = createPatternMask(\"###.###.###-##\");\n\n/** CNPJ (00.000.000/0000-00) */\nexport const maskCNPJ = createPatternMask(\"##.###.###/####-##\");\n\nexport const maskPhone = createPatternMask([\n \"(##) ####-####\", // Fixo (10 dígitos)\n \"(##) #####-####\", // Celular (11 dígitos)\n]);\n\n/** Telefone Fixo BR (11) 0000-0000 */\nexport const maskLandline = createPatternMask(\"(##) ####-####\");\n\n/** CEP (00000-000) */\nexport const maskCEP = createPatternMask(\"#####-###\");\n\n/** Data PT/BR com correção automática de dia/mês */\nexport const maskDate = createDateMask({\n format: \"DD/MM/YYYY\",\n guide: true,\n customParse: (val) => {\n const cleanVal = val.replace(/_/g, \"\");\n const parts = cleanVal.split(\"/\");\n if (parts.length === 3 && parts[2].length === 4) {\n return `${parts[2]}-${parts[1]}-${parts[0]}`;\n }\n return cleanVal.replace(/\\D/g, \"\");\n },\n});\n\n/** Hora Curta (HH:MM) */\nexport const maskTime = createPatternMask(\"##:##\");\n\n/** CNH (Carteira de Motorista - 11 dígitos) */\nexport const maskCNH = createPatternMask(\"###########\");\n\n/** RG (00.000.000-X) - Suporta o 'X' como dígito verificador */\nexport const maskRG = createPatternMask(\"##.###.###-X\");\n\n/**\n * CPF + CNPJ combinado — alterna automaticamente pelo número de dígitos:\n * - Até 11 dígitos → CPF (000.000.000-00)\n * - Mais de 11 → CNPJ (00.000.000/0000-00)\n */\nexport const maskCPFCNPJ = createPatternMask([\n \"###.###.###-##\",\n \"##.###.###/####-##\",\n]);\n\n/**\n * Placa de veículo BR — detecta o formato pelo 5.º caractere:\n * - Antigo → ABC-1234 (posição 5 é dígito)\n * - Mercosul → ABC1D23 (posição 5 é letra)\n */\nexport const maskPlate: BitMask = {\n format(value: any): string {\n const raw = String(value ?? \"\")\n .replace(/[^a-zA-Z0-9]/g, \"\")\n .toUpperCase()\n .slice(0, 7);\n\n if (raw.length === 0) return \"\";\n\n const prefix = raw.slice(0, 3);\n const rest = raw.slice(3);\n\n if (rest.length === 0) return prefix;\n\n // Posição 5 (rest[1]): letra → Mercosul; dígito → formato antigo\n const isMercosul = rest.length >= 2 && /[A-Z]/.test(rest[1]);\n\n return isMercosul ? `${prefix}${rest}` : `${prefix}-${rest}`;\n },\n parse(value: string): string {\n return String(value ?? \"\")\n .replace(/[^a-zA-Z0-9]/g, \"\")\n .toUpperCase()\n .slice(0, 7);\n },\n};\n\n// ==========================================\n// 🇺🇸 PADRÕES AMERICANOS (USA)\n// ==========================================\n\n/** US Phone ((000) 000-0000) */\nexport const maskUSPhone = createPatternMask(\"(###) ###-####\");\n\n/** ZIP Code (00000 or 00000-0000) */\nexport const maskZipCode = createPatternMask(\"#####-####\");\n\n/** Date US (MM/DD/YYYY) - Igual ao BR, mas semântica diferente */\nexport const maskDateUS = createPatternMask(\"##/##/####\");\n\n/** SSN (Social Security Number) */\nexport const maskSSN = createPatternMask(\"###-##-####\");\n\n// ==========================================\n// 🌐 PADRÕES GLOBAIS / TÉCNICOS\n// ==========================================\n\n/** Cartão de Crédito Inteligente (Detecta Visa/Master, Amex e Diners) */\nexport const maskCreditCard = createCreditCardMask();\n\n/** CVV (3 ou 4 dígitos) */\nexport const maskCVV = createPatternMask(\"####\");\n\n/** Data ISO (Ideal para base de dados: YYYY-MM-DD) */\nexport const maskDateISO = createDateMask({\n format: \"YYYY-MM-DD\",\n saveRaw: true,\n guide: true,\n});\n\n/** Endereço MAC (HH:HH:HH:HH:HH:HH) - Usa o token Hexadecimal */\nexport const maskMacAddress = createPatternMask(\"HH:HH:HH:HH:HH:HH\");\n\n/** Cor Hexadecimal (#HHHHHH) */\nexport const maskColorHex = createPatternMask(\"#HHHHHH\");\n\n/** IPv4 (000.000.000.000) - Formato de blocos fixos */\nexport const maskIPv4 = createPatternMask(\"###.###.###.###\");\n\n/** IPv6 (HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH) */\nexport const maskIPv6 = createPatternMask(\n \"HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH\",\n);\n\n/** * IBAN Internacional\n * Força as duas primeiras letras para maiúsculas e agrupa de 4 em 4.\n * O tamanho máximo cobre os 34 caracteres do padrão IBAN.\n */\nexport const maskIBAN = createPatternMask(\n \"UU## XXXX XXXX XXXX XXXX XXXX XXXX XXXX XX\",\n { allowChars: \" \" },\n);\n","import type { BitMask } from \"./types\";\n\nexport const formatMaskedValue = (value: unknown, mask?: BitMask): string => {\n if (value === undefined || value === null || value === \"\") {\n return \"\";\n }\n\n return mask ? mask.format(value) : String(value);\n};\n\nexport const parseMaskedInput = (value: unknown, mask?: BitMask): unknown => {\n if (!mask) {\n return value;\n }\n\n return mask.parse(String(value ?? \"\"));\n};\n","export * from \"./types\";\nexport * from \"./creators\";\nexport * from \"./presets\";\nexport * from \"./field-binding\";\n\nimport * as presets from \"./presets\";\nimport type { BitMask, BitBuiltInMaskName } from \"./types\";\n\nexport const bitMasks: Record<BitBuiltInMaskName, BitMask> = {\n // Moedas\n brl: presets.maskBRL,\n usd: presets.maskUSD,\n eur: presets.maskEUR,\n gbp: presets.maskGBP,\n jpy: presets.maskJPY,\n // Números\n percent: presets.maskPercent,\n decimal: presets.maskDecimal,\n int: presets.maskInteger,\n integer: presets.maskInteger,\n // Documentos BR\n cpf: presets.maskCPF,\n cnpj: presets.maskCNPJ,\n cpfCnpj: presets.maskCPFCNPJ,\n rg: presets.maskRG,\n cep: presets.maskCEP,\n cnh: presets.maskCNH,\n plate: presets.maskPlate,\n // Comunicação/Data\n phone: presets.maskPhone,\n landline: presets.maskLandline,\n date: presets.maskDate,\n time: presets.maskTime,\n // USA\n usPhone: presets.maskUSPhone,\n zipCode: presets.maskZipCode,\n dateUS: presets.maskDateUS,\n ssn: presets.maskSSN,\n // Tech/Global\n cc: presets.maskCreditCard,\n cvv: presets.maskCVV,\n dateISO: presets.maskDateISO,\n ip: presets.maskIPv4,\n ipv6: presets.maskIPv6,\n mac: presets.maskMacAddress,\n color: presets.maskColorHex,\n iban: presets.maskIBAN,\n};\n"],"mappings":"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","names":["tokens","unmask","value","allowChars","stringValue","isNegative","escapedChars","regex","clean","unmaskCurrency","precision","digits","numberValue","createPatternMask","pattern","options","getRawLength","p","c","sortedPatterns","a","b","getActivePattern","rawValueLength","activePattern","candidate","formatValue","stringVal","showGuide","placeholder","masked","valueIndex","i","patternChar","token","dataChar","formatted","escapedPlaceholder","placeholderRegex","createCurrencyMask","prefix","suffix","thousand","decimal","allowNegative","saveRaw","formatFn","integerPart","decimalPart","formattedInteger","sign","numericValue","finalNumber","createCreditCardMask","getCardPattern","rawValue","createDateMask","config","isISO","baseMask","day","month","year","d","m","safeString","maskBRL","createCurrencyMask","maskUSD","maskEUR","maskGBP","maskJPY","maskPercent","maskDecimal","maskInteger","maskCPF","createPatternMask","maskCNPJ","maskPhone","maskLandline","maskCEP","maskDate","createDateMask","val","cleanVal","parts","maskTime","maskCNH","maskRG","maskCPFCNPJ","maskPlate","value","raw","prefix","rest","maskUSPhone","maskZipCode","maskDateUS","maskSSN","maskCreditCard","createCreditCardMask","maskCVV","maskDateISO","maskMacAddress","maskColorHex","maskIPv4","maskIPv6","maskIBAN","formatMaskedValue","value","mask","parseMaskedInput","bitMasks","maskBRL","maskUSD","maskEUR","maskGBP","maskJPY","maskPercent","maskDecimal","maskInteger","maskCPF","maskCNPJ","maskCPFCNPJ","maskRG","maskCEP","maskCNH","maskPlate","maskPhone","maskLandline","maskDate","maskTime","maskUSPhone","maskZipCode","maskDateUS","maskSSN","maskCreditCard","maskCVV","maskDateISO","maskIPv4","maskIPv6","maskMacAddress","maskColorHex","maskIBAN"]}
1
+ {"version":3,"sources":["../src/core/mask/creators.ts","../src/core/mask/presets.ts","../src/core/mask/field-binding.ts","../src/core/mask/index.ts"],"sourcesContent":["import {\n BitMask,\n CurrencyMaskConfig,\n DateMaskConfig,\n PatternMaskOptions,\n} from \"./types\";\n\ntype TokenMap = Record<string, RegExp>;\n\nconst tokens: TokenMap = {\n \"#\": /\\d/,\n A: /[a-zA-Z]/,\n X: /[a-zA-Z0-9]/,\n H: /[0-9a-fA-F]/,\n U: /[A-Z]/,\n L: /[a-z]/,\n \"*\": /./,\n};\n\nexport const unmask = (\n value: string | number | null | undefined,\n allowChars?: string,\n): string => {\n if (value === null || value === undefined || value === \"\") return \"\";\n const stringValue = String(value);\n const isNegative = stringValue.startsWith(\"-\");\n\n const escapedChars = allowChars\n ? allowChars.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n : \"\";\n const regex = new RegExp(`[^a-zA-Z0-9${escapedChars}]`, \"g\");\n\n const clean = stringValue.replace(regex, \"\");\n return isNegative && clean && !clean.startsWith(\"-\") ? `-${clean}` : clean;\n};\n\nexport const unmaskCurrency = (value: any, precision = 2): number => {\n if (typeof value === \"number\") return value;\n if (!value) return 0;\n\n const stringValue = String(value);\n const isNegative = stringValue.includes(\"-\");\n const digits = stringValue.replace(/\\D/g, \"\");\n\n if (!digits) return 0;\n\n const numberValue = parseInt(digits, 10) / Math.pow(10, precision);\n return isNegative ? -numberValue : numberValue;\n};\n\nexport const createPatternMask = (\n pattern: string | string[],\n options?: PatternMaskOptions,\n): BitMask => {\n const getRawLength = (p: string) =>\n p.split(\"\").filter((c) => tokens[c]).length;\n\n const patterns = Array.isArray(pattern) ? pattern : [pattern];\n const sortedPatterns = [...patterns].sort(\n (a, b) => getRawLength(a) - getRawLength(b),\n );\n\n const getActivePattern = (rawValueLength: number) => {\n let activePattern = sortedPatterns[sortedPatterns.length - 1];\n for (const candidate of sortedPatterns) {\n if (rawValueLength <= getRawLength(candidate)) {\n activePattern = candidate;\n break;\n }\n }\n return activePattern;\n };\n\n const formatValue = (value: string | number | null | undefined): string => {\n const stringVal = unmask(value, options?.allowChars);\n\n if (!stringVal && !options?.guide) {\n return \"\";\n }\n\n const activePattern = getActivePattern(stringVal.length);\n const showGuide = options?.guide || false;\n const placeholder = options?.placeholderChar || \"_\";\n\n let masked = \"\";\n let valueIndex = 0;\n\n for (let i = 0; i < activePattern.length; i++) {\n const patternChar = activePattern[i];\n const token = tokens[patternChar];\n\n if (valueIndex < stringVal.length) {\n let dataChar = stringVal[valueIndex];\n\n if (token) {\n if (patternChar === \"U\") dataChar = dataChar.toUpperCase();\n if (patternChar === \"L\") dataChar = dataChar.toLowerCase();\n\n if (token.test(dataChar)) {\n masked += dataChar;\n valueIndex++;\n } else if (showGuide) {\n masked += placeholder;\n } else {\n break;\n }\n } else {\n masked += patternChar;\n if (dataChar === patternChar) valueIndex++;\n }\n } else if (showGuide) {\n masked += token ? placeholder : patternChar;\n } else {\n break;\n }\n }\n\n return masked;\n };\n\n return {\n format: formatValue,\n parse: (value: string) => {\n if (options?.customParse) return options.customParse(value);\n\n const formatted = formatValue(value);\n\n if (options?.saveRaw) {\n if (options?.guide) {\n const placeholder = options.placeholderChar || \"_\";\n const escapedPlaceholder = placeholder.replace(\n /[.*+?^${}()|[\\]\\\\]/g,\n \"\\\\$&\",\n );\n const placeholderRegex = new RegExp(escapedPlaceholder, \"g\");\n\n return formatted.replace(placeholderRegex, \"\");\n }\n\n return formatted;\n }\n\n return unmask(formatted, options?.allowChars);\n },\n };\n};\n\nexport const createCurrencyMask = ({\n prefix = \"\",\n suffix = \"\",\n thousand,\n decimal,\n precision = 2,\n allowNegative = true,\n saveRaw = false,\n}: CurrencyMaskConfig): BitMask => {\n const formatFn = (value: any) => {\n if (value === undefined || value === null || value === \"\") return \"\";\n\n let stringValue = \"\";\n\n if (typeof value === \"number\") {\n stringValue = Math.abs(value).toFixed(precision).replace(/\\D/g, \"\");\n } else {\n stringValue = String(value).replace(/\\D/g, \"\");\n }\n\n if (!stringValue && String(value).includes(\"-\") && allowNegative)\n return \"-\";\n if (!stringValue) return \"\";\n\n stringValue = stringValue.padStart(precision + 1, \"0\");\n\n const integerPart =\n precision > 0\n ? stringValue.slice(0, -precision).replace(/^0+(?=\\d)/, \"\") || \"0\"\n : stringValue.replace(/^0+(?=\\d)/, \"\") || \"0\";\n const decimalPart = precision > 0 ? stringValue.slice(-precision) : \"\";\n\n const formattedInteger = integerPart.replace(\n /\\B(?=(\\d{3})+(?!\\d))/g,\n thousand,\n );\n\n const isNegative =\n typeof value === \"number\" ? value < 0 : String(value).includes(\"-\");\n const sign = isNegative && allowNegative ? \"-\" : \"\";\n\n if (precision === 0) {\n return `${sign}${prefix}${formattedInteger}${suffix}`;\n }\n\n return `${sign}${prefix}${formattedInteger}${decimal}${decimalPart}${suffix}`;\n };\n\n return {\n format: formatFn,\n parse: (value: string) => {\n const numericValue = unmaskCurrency(value, precision);\n const finalNumber = !allowNegative\n ? Math.abs(numericValue)\n : numericValue;\n if (saveRaw) return formatFn(finalNumber);\n return finalNumber;\n },\n };\n};\n\nexport const createCreditCardMask = (options?: PatternMaskOptions): BitMask => {\n // Função auxiliar para descobrir o padrão dinamicamente\n const getCardPattern = (rawValue: string) => {\n // Amex (American Express) começa com 34 ou 37 -> 15 dígitos\n if (/^3[47]/.test(rawValue)) {\n return \"#### ###### #####\";\n }\n // Diners Club começa com 300-305, 36 ou 38 -> 14 dígitos\n if (/^3(?:0[0-5]|[68])/.test(rawValue)) {\n return \"#### ###### ####\";\n }\n // Default: Visa, Mastercard, Discover, Elo, etc -> 16 dígitos\n return \"#### #### #### ####\";\n };\n\n return {\n format: (value: any) => {\n const stringVal = unmask(value, options?.allowChars);\n const pattern = getCardPattern(stringVal);\n const mask = createPatternMask(pattern, options);\n return mask.format(value);\n },\n parse: (value: string) => {\n const stringVal = unmask(value, options?.allowChars);\n const pattern = getCardPattern(stringVal);\n\n const mask = createPatternMask(pattern, options);\n return mask.parse(value);\n },\n };\n};\n\nexport const createDateMask = (config?: DateMaskConfig): BitMask => {\n const formatType = config?.format || \"DD/MM/YYYY\";\n const isISO = formatType === \"YYYY-MM-DD\";\n\n // Criamos a máscara base consoante o formato escolhido\n const baseMask = createPatternMask(\n isISO ? \"####-##-##\" : \"##/##/####\",\n config,\n );\n\n return {\n format: (value: any) => {\n let stringVal = unmask(value);\n if (!stringVal) return \"\";\n\n let day = \"\";\n let month = \"\";\n let year = \"\";\n\n // Separamos os componentes consoante o que o utilizador já digitou\n if (isISO) {\n year = stringVal.substring(0, 4);\n month = stringVal.substring(4, 6);\n day = stringVal.substring(6, 8);\n } else {\n day = stringVal.substring(0, 2);\n month = stringVal.substring(2, 4);\n year = stringVal.substring(4, 8);\n }\n\n // Validação do Dia (01 a 31)\n if (day.length === 2) {\n const d = parseInt(day, 10);\n if (d > 31) day = \"31\";\n if (d === 0) day = \"01\";\n }\n\n // Validação do Mês (01 a 12)\n if (month.length === 2) {\n const m = parseInt(month, 10);\n if (m > 12) month = \"12\";\n if (m === 0) month = \"01\";\n }\n\n // Reconstruímos a string limpa e passamos para o pattern normal\n const safeString = isISO\n ? `${year}${month}${day}`\n : `${day}${month}${year}`;\n\n return baseMask.format(safeString);\n },\n parse: (value: string) => {\n // Usamos a funcionalidade completa da máscara base (incluindo o saveRaw e o unmasking)\n return baseMask.parse(value);\n },\n };\n};\n","import type { BitMask } from \"./types\";\nimport {\n createCreditCardMask,\n createCurrencyMask,\n createDateMask,\n createPatternMask,\n} from \"./creators\";\n\n// ==========================================\n// 💲 MOEDAS (Currencies)\n// ==========================================\n\n/** BRL - Real Brasileiro (R$ 1.000,00) */\nexport const maskBRL = createCurrencyMask({\n prefix: \"R$ \",\n thousand: \".\",\n decimal: \",\",\n precision: 2,\n});\n\n/** USD - Dólar Americano ($1,000.00) */\nexport const maskUSD = createCurrencyMask({\n prefix: \"$\",\n thousand: \",\",\n decimal: \".\",\n precision: 2,\n});\n\n/** EUR - Euro Padrão (€ 1.000,00) - Sufixo comum na Europa */\nexport const maskEUR = createCurrencyMask({\n suffix: \" €\",\n thousand: \".\",\n decimal: \",\",\n precision: 2,\n});\n\n/** GBP - Libra Esterlina (£1,000.00) */\nexport const maskGBP = createCurrencyMask({\n prefix: \"£\",\n thousand: \",\",\n decimal: \".\",\n precision: 2,\n});\n\n/** JPY - Iene Japonês (¥1,000) - Geralmente sem decimais */\nexport const maskJPY = createCurrencyMask({\n prefix: \"¥\",\n thousand: \",\",\n decimal: \".\",\n precision: 0,\n});\n\n// ==========================================\n// 🔢 NÚMEROS E PERCENTUAIS\n// ==========================================\n\n/** Porcentagem PT-BR (10,5%) */\nexport const maskPercent = createCurrencyMask({\n suffix: \"%\",\n thousand: \".\",\n decimal: \",\",\n precision: 1, // Ex: 99,9%\n});\n\n/** Decimal Genérico PT-BR (1.000,00) - Sem símbolo */\nexport const maskDecimal = createCurrencyMask({\n thousand: \".\",\n decimal: \",\",\n precision: 2,\n});\n\n/** Inteiro (1.000) - Apenas separador de milhar */\nexport const maskInteger = createCurrencyMask({\n thousand: \".\",\n decimal: \",\",\n precision: 0,\n});\n\n// ==========================================\n// 🇧🇷 PADRÕES BRASILEIROS (Brazil)\n// ==========================================\n\n/** CPF (000.000.000-00) */\nexport const maskCPF = createPatternMask(\"###.###.###-##\");\n\n/** CNPJ (00.000.000/0000-00) */\nexport const maskCNPJ = createPatternMask(\"##.###.###/####-##\");\n\nexport const maskPhone = createPatternMask([\n \"(##) ####-####\", // Fixo (10 dígitos)\n \"(##) #####-####\", // Celular (11 dígitos)\n]);\n\n/** Telefone Fixo BR (11) 0000-0000 */\nexport const maskLandline = createPatternMask(\"(##) ####-####\");\n\n/** CEP (00000-000) */\nexport const maskCEP = createPatternMask(\"#####-###\");\n\n/** Data PT/BR com correção automática de dia/mês */\nexport const maskDate = createDateMask({\n format: \"DD/MM/YYYY\",\n guide: true,\n customParse: (val) => {\n const cleanVal = val.replace(/_/g, \"\");\n const parts = cleanVal.split(\"/\");\n if (parts.length === 3 && parts[2].length === 4) {\n return `${parts[2]}-${parts[1]}-${parts[0]}`;\n }\n return cleanVal.replace(/\\D/g, \"\");\n },\n});\n\n/** Hora Curta (HH:MM) */\nexport const maskTime = createPatternMask(\"##:##\");\n\n/** CNH (Carteira de Motorista - 11 dígitos) */\nexport const maskCNH = createPatternMask(\"###########\");\n\n/** RG (00.000.000-X) - Suporta o 'X' como dígito verificador */\nexport const maskRG = createPatternMask(\"##.###.###-X\");\n\n/**\n * CPF + CNPJ combinado — alterna automaticamente pelo número de dígitos:\n * - Até 11 dígitos → CPF (000.000.000-00)\n * - Mais de 11 → CNPJ (00.000.000/0000-00)\n */\nexport const maskCPFCNPJ = createPatternMask([\n \"###.###.###-##\",\n \"##.###.###/####-##\",\n]);\n\n/**\n * Placa de veículo BR — detecta o formato pelo 5.º caractere:\n * - Antigo → ABC-1234 (posição 5 é dígito)\n * - Mercosul → ABC1D23 (posição 5 é letra)\n */\nexport const maskPlate: BitMask = {\n format(value: any): string {\n const raw = String(value ?? \"\")\n .replace(/[^a-zA-Z0-9]/g, \"\")\n .toUpperCase()\n .slice(0, 7);\n\n if (raw.length === 0) return \"\";\n\n const prefix = raw.slice(0, 3);\n const rest = raw.slice(3);\n\n if (rest.length === 0) return prefix;\n\n // Posição 5 (rest[1]): letra → Mercosul; dígito → formato antigo\n const isMercosul = rest.length >= 2 && /[A-Z]/.test(rest[1]);\n\n return isMercosul ? `${prefix}${rest}` : `${prefix}-${rest}`;\n },\n parse(value: string): string {\n return String(value ?? \"\")\n .replace(/[^a-zA-Z0-9]/g, \"\")\n .toUpperCase()\n .slice(0, 7);\n },\n};\n\n// ==========================================\n// 🇺🇸 PADRÕES AMERICANOS (USA)\n// ==========================================\n\n/** US Phone ((000) 000-0000) */\nexport const maskUSPhone = createPatternMask(\"(###) ###-####\");\n\n/** ZIP Code (00000 or 00000-0000) */\nexport const maskZipCode = createPatternMask(\"#####-####\");\n\n/** Date US (MM/DD/YYYY) - Igual ao BR, mas semântica diferente */\nexport const maskDateUS = createPatternMask(\"##/##/####\");\n\n/** SSN (Social Security Number) */\nexport const maskSSN = createPatternMask(\"###-##-####\");\n\n// ==========================================\n// 🌐 PADRÕES GLOBAIS / TÉCNICOS\n// ==========================================\n\n/** Cartão de Crédito Inteligente (Detecta Visa/Master, Amex e Diners) */\nexport const maskCreditCard = createCreditCardMask();\n\n/** CVV (3 ou 4 dígitos) */\nexport const maskCVV = createPatternMask(\"####\");\n\n/** Data ISO (Ideal para base de dados: YYYY-MM-DD) */\nexport const maskDateISO = createDateMask({\n format: \"YYYY-MM-DD\",\n saveRaw: true,\n guide: true,\n});\n\n/** Endereço MAC (HH:HH:HH:HH:HH:HH) - Usa o token Hexadecimal */\nexport const maskMacAddress = createPatternMask(\"HH:HH:HH:HH:HH:HH\");\n\n/** Cor Hexadecimal (#HHHHHH) */\nexport const maskColorHex = createPatternMask(\"#HHHHHH\");\n\n/** IPv4 (000.000.000.000) - Formato de blocos fixos */\nexport const maskIPv4 = createPatternMask(\"###.###.###.###\");\n\n/** IPv6 (HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH) */\nexport const maskIPv6 = createPatternMask(\n \"HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH\",\n);\n\n/** * IBAN Internacional\n * Força as duas primeiras letras para maiúsculas e agrupa de 4 em 4.\n * O tamanho máximo cobre os 34 caracteres do padrão IBAN.\n */\nexport const maskIBAN = createPatternMask(\n \"UU## XXXX XXXX XXXX XXXX XXXX XXXX XXXX XX\",\n { allowChars: \" \" },\n);\n","import type { BitMask } from \"./types\";\n\n/**\n * Tipo de entrada aceito pelos handlers de campo.\n * Cobre eventos nativos (`e.target.value`), eventos sintéticos e valores diretos.\n * Definido aqui para ser compartilhado entre todos os frameworks.\n */\nexport type BitFieldInputEvent =\n | { target?: { value?: string | number | null } }\n | string\n | number\n | null\n | undefined;\n\n/**\n * Type guard: verifica se o valor de entrada é um objeto de evento\n * (com propriedade `target`), diferenciando-o de um valor direto.\n */\nexport function isBitFieldInputEventObject(\n value: BitFieldInputEvent,\n): value is Extract<\n BitFieldInputEvent,\n { target?: { value?: string | number | null } }\n> {\n return value != null && typeof value === \"object\" && \"target\" in value;\n}\n\nexport const formatMaskedValue = (value: unknown, mask?: BitMask): string => {\n if (value === undefined || value === null || value === \"\") {\n return \"\";\n }\n\n return mask ? mask.format(value) : String(value);\n};\n\nexport const parseMaskedInput = (value: unknown, mask?: BitMask): unknown => {\n if (!mask) {\n return value;\n }\n\n return mask.parse(String(value ?? \"\"));\n};\n","export * from \"./types\";\nexport * from \"./creators\";\nexport * from \"./presets\";\nexport * from \"./field-binding\";\n\nimport * as presets from \"./presets\";\nimport type { BitMask, BitBuiltInMaskName } from \"./types\";\n\nexport const bitMasks: Record<BitBuiltInMaskName, BitMask> = {\n // Moedas\n brl: presets.maskBRL,\n usd: presets.maskUSD,\n eur: presets.maskEUR,\n gbp: presets.maskGBP,\n jpy: presets.maskJPY,\n // Números\n percent: presets.maskPercent,\n decimal: presets.maskDecimal,\n int: presets.maskInteger,\n integer: presets.maskInteger,\n // Documentos BR\n cpf: presets.maskCPF,\n cnpj: presets.maskCNPJ,\n cpfCnpj: presets.maskCPFCNPJ,\n rg: presets.maskRG,\n cep: presets.maskCEP,\n cnh: presets.maskCNH,\n plate: presets.maskPlate,\n // Comunicação/Data\n phone: presets.maskPhone,\n landline: presets.maskLandline,\n date: presets.maskDate,\n time: presets.maskTime,\n // USA\n usPhone: presets.maskUSPhone,\n zipCode: presets.maskZipCode,\n dateUS: presets.maskDateUS,\n ssn: presets.maskSSN,\n // Tech/Global\n cc: presets.maskCreditCard,\n cvv: presets.maskCVV,\n dateISO: presets.maskDateISO,\n ip: presets.maskIPv4,\n ipv6: presets.maskIPv6,\n mac: presets.maskMacAddress,\n color: presets.maskColorHex,\n iban: presets.maskIBAN,\n};\n"],"mappings":"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","names":["tokens","unmask","value","allowChars","stringValue","isNegative","escapedChars","regex","clean","unmaskCurrency","precision","digits","numberValue","createPatternMask","pattern","options","getRawLength","p","c","sortedPatterns","a","b","getActivePattern","rawValueLength","activePattern","candidate","formatValue","stringVal","showGuide","placeholder","masked","valueIndex","i","patternChar","token","dataChar","formatted","escapedPlaceholder","placeholderRegex","createCurrencyMask","prefix","suffix","thousand","decimal","allowNegative","saveRaw","formatFn","integerPart","decimalPart","formattedInteger","sign","numericValue","finalNumber","createCreditCardMask","getCardPattern","rawValue","createDateMask","config","isISO","baseMask","day","month","year","d","m","safeString","maskBRL","createCurrencyMask","maskUSD","maskEUR","maskGBP","maskJPY","maskPercent","maskDecimal","maskInteger","maskCPF","createPatternMask","maskCNPJ","maskPhone","maskLandline","maskCEP","maskDate","createDateMask","val","cleanVal","parts","maskTime","maskCNH","maskRG","maskCPFCNPJ","maskPlate","value","raw","prefix","rest","maskUSPhone","maskZipCode","maskDateUS","maskSSN","maskCreditCard","createCreditCardMask","maskCVV","maskDateISO","maskMacAddress","maskColorHex","maskIPv4","maskIPv6","maskIBAN","isBitFieldInputEventObject","value","formatMaskedValue","mask","parseMaskedInput","bitMasks","maskBRL","maskUSD","maskEUR","maskGBP","maskJPY","maskPercent","maskDecimal","maskInteger","maskCPF","maskCNPJ","maskCPFCNPJ","maskRG","maskCEP","maskCNH","maskPlate","maskPhone","maskLandline","maskDate","maskTime","maskUSPhone","maskZipCode","maskDateUS","maskSSN","maskCreditCard","maskCVV","maskDateISO","maskIPv4","maskIPv6","maskMacAddress","maskColorHex","maskIBAN"]}
@@ -0,0 +1,2 @@
1
+ import{O as L}from"./chunk-7LMNIQTT.js";function h(a){if(a===null||typeof a!="object")return a;if(a instanceof Date)return new Date(a.getTime());if(a instanceof RegExp)return new RegExp(a.source,a.flags);if(Array.isArray(a))return a.map(t=>h(t));let e={};for(let t in a)Object.prototype.hasOwnProperty.call(a,t)&&(e[t]=h(a[t]));return e}function B(a,e){if(e===void 0)return h(a);if(e===null||typeof e!="object"||e instanceof Date||e instanceof RegExp||Array.isArray(e))return h(e);let t=a&&typeof a=="object"&&!Array.isArray(a)?h(a):{};for(let i of Object.keys(e)){let r=e[i],s=t[i];if(r!==null&&typeof r=="object"&&!Array.isArray(r)&&!(r instanceof Date)&&!(r instanceof RegExp)){t[i]=B(s,r);continue}t[i]=h(r)}return t}function S(a,e){return a===e?!0:a===null||typeof a!="object"||e===null||typeof e!="object"?!1:f(a,e)}function f(a,e){if(a===e)return!0;if(a===null||typeof a!="object"||e===null||typeof e!="object")return!1;if(a instanceof Date&&e instanceof Date)return a.getTime()===e.getTime();if(a instanceof RegExp&&e instanceof RegExp)return a.toString()===e.toString();let t=Object.keys(a),i=Object.keys(e);if(t.length!==i.length)return!1;for(let r of t)if(!Object.prototype.hasOwnProperty.call(e,r)||!f(a[r],e[r]))return!1;return!0}function U(a,e,t="",i=new Set){if(S(a,e))return i;if(a===null||typeof a!="object"||e===null||typeof e!="object")return t&&i.add(t),i;if(Array.isArray(a)||Array.isArray(e))return!S(a,e)&&t&&i.add(t),i;let r=new Set([...Object.keys(a||{}),...Object.keys(e||{})]);for(let s of r){let n=t?`${t}.${s}`:s;U(a?.[s],e?.[s],n,i)}return i}var te=1e3,m=new Map;function W(a){let e=m.get(a);if(e)return m.delete(a),m.set(a,e),e;let t=a.split(".");if(m.size>=te){let i=m.keys().next().value;i&&m.delete(i)}return m.set(a,t),t}function g(a,e){if(!e)return a;let t=W(e),i=a;for(let r of t){if(i==null)return;i=i[r]}return i}function p(a,e,t){if(!e)return t;let i=W(e),r=Array.isArray(a)?[...a]:{...a},s=r;for(let n=0;n<i.length-1;n++){let o=i[n],l=i[n+1],d=Number(l),u=Number.isInteger(d)&&String(d)===l,c=s[o];c==null?s[o]=u?[]:{}:s[o]=Array.isArray(c)?[...c]:{...c},s=s[o]}return s[i[i.length-1]]=t,r}function ie(a,e){let t={},i=`${e}.`;for(let r in a)r!==e&&!r.startsWith(i)&&(t[r]=a[r]);return t}var j=(a,e,t)=>{let i={},r=`${e}.`;return Object.keys(a).forEach(s=>{if(!s.startsWith(r)){i[s]=a[s];return}let o=s.substring(r.length).split("."),l=parseInt(o[0],10),d=o.slice(1).join(".");if(l!==t)if(l>t){let u=l-1,c=d?`${r}${u}.${d}`:`${r}${u}`;i[c]=a[s]}else i[s]=a[s]}),i},$=(a,e,t,i)=>{let r={},s=`${e}.`;return Object.keys(a).forEach(n=>{if(!n.startsWith(s)){r[n]=a[n];return}let l=n.substring(s.length).split("."),d=parseInt(l[0],10),u=l.slice(1).join(".");if(d===t){let c=u?`${s}${i}.${u}`:`${s}${i}`;r[c]=a[n]}else if(d===i){let c=u?`${s}${t}.${u}`:`${s}${t}`;r[c]=a[n]}else r[n]=a[n]}),r},_=(a,e,t,i)=>{let r={},s=`${e}.`;return Object.keys(a).forEach(n=>{if(!n.startsWith(s)){r[n]=a[n];return}let l=n.substring(s.length).split("."),d=parseInt(l[0],10),u=l.slice(1).join("."),c=d;d===t?c=i:t<i&&d>t&&d<=i?c=d-1:t>i&&d>=i&&d<t&&(c=d+1);let y=u?`${s}${c}.${u}`:`${s}${c}`;r[y]=a[n]}),r};function G(a){if(typeof a!="object"||a===null||Array.isArray(a))return!1;let e=a.errors??a;return typeof e!="object"||e===null||Array.isArray(e)?!1:Object.values(e).every(t=>typeof t=="string"||Array.isArray(t)&&t.every(i=>typeof i=="string"))}function re(a){return G(a)?a.errors??a:{}}var z=typeof globalThis<"u"?globalThis:typeof global<"u"?global:window;z.__BIT_FORM__||(z.__BIT_FORM__={stores:{},listeners:new Set,dispatch(a,e){this.listeners.forEach(t=>t(a,e))},subscribe(a){return this.listeners.add(a),()=>{this.listeners.delete(a)}}});var T=z.__BIT_FORM__;function se(){return`bit-form-${Math.random().toString(36).slice(2,9)}`}function J(a={}){let e=a.initialValues??{},t=a.validation,i=a.history,r=a.name?`bit-form:${a.name}:draft`:"bit-form:draft",s={enabled:a.persist?.enabled??!1,key:a.persist?.key??r,storage:a.persist?.storage,autoSave:a.persist?.autoSave??!0,debounceMs:a.persist?.debounceMs??300,mode:a.persist?.mode??"values",serialize:a.persist?.serialize??JSON.stringify,deserialize:a.persist?.deserialize??(n=>JSON.parse(n)),onError:a.persist?.onError};return{name:a.name,initialValues:h(e),resolver:t?.resolver,validationDelay:t?.delay??300,enableHistory:i?.enabled??!1,historyLimit:i?.limit??15,masks:L,fields:a.fields,devTools:a.devTools,persist:s,idFactory:a.idFactory??se,plugins:a.plugins??[]}}var E=class{fieldConfigs=new Map;dependencies=new Map;hiddenFields=new Set;getFieldConfig(e){return this.fieldConfigs.get(e)}forEachFieldConfig(e){this.fieldConfigs.forEach((t,i)=>e(t,i))}hasFieldConfig(e){return this.fieldConfigs.has(e)}getHiddenFields(){return Array.from(this.hiddenFields)}register(e,t,i){this.fieldConfigs.set(e,t);let r=t.conditional?.dependsOn;r&&r.forEach(s=>{this.dependencies.has(s)||this.dependencies.set(s,new Set),this.dependencies.get(s).add(e)}),this.evaluateFieldCondition(e,i)}isHidden(e){return this.hiddenFields.has(e)}isRequired(e,t){let i=this.fieldConfigs.get(e);return!i||this.isHidden(e)?!1:!!i.conditional?.requiredIf?.(t)}getRequiredErrors(e){let t={};return this.fieldConfigs.forEach((i,r)=>{if(this.isRequired(r,e)){let s=g(e,r);this.isEmpty(s)&&(t[r]=i.conditional?.requiredMessage??"required field")}}),t}evaluateAll(e){this.fieldConfigs.forEach((t,i)=>{this.evaluateFieldCondition(i,e)})}updateDependencies(e,t){let i=[],r=[e],s=new Set;for(;r.length>0;){let n=r.shift();if(s.has(n))continue;s.add(n);let o=this.dependencies.get(n);o&&o.forEach(l=>{let d=this.isHidden(l);this.evaluateFieldCondition(l,t);let u=this.isHidden(l);d!==u&&i.push(l),r.push(l)})}return i}unregister(e){this.fieldConfigs.delete(e),this.hiddenFields.delete(e),this.dependencies.delete(e),this.dependencies.forEach(t=>{t.delete(e)})}unregisterPrefix(e){let t=[];this.fieldConfigs.forEach((i,r)=>{r.startsWith(e)&&t.push(r)}),t.forEach(i=>this.unregister(i))}evaluateFieldCondition(e,t){let r=this.fieldConfigs.get(e)?.conditional?.showIf;r&&(r(t)?this.hiddenFields.delete(e):this.hiddenFields.add(e))}isEmpty(e){return e==null||typeof e=="string"&&e.trim()===""||Array.isArray(e)&&e.length===0}};var P=class a{constructor(e){this.getComputedEntries=e}static MIN_PASSES=4;apply(e){let t=this.getComputedEntries();if(t.length===0)return e;let i=e,r=Math.max(a.MIN_PASSES,t.length*2);for(let s=0;s<r;s++){let n=!1;for(let[o,l]of t){let d=l(i),u=g(i,o);f(u,d)||(i=p(i,o,d),n=!0)}if(!n)break;if(s===r-1)throw new Error("BitStore: computed fields did not stabilize. Check for cyclic computed definitions.")}return i}};var V=class{dirtyPaths=new Set;updateForPath(e,t,i){for(let n of this.dirtyPaths)n.startsWith(e+".")&&this.dirtyPaths.delete(n);let r=g(t,e),s=g(i,e);return S(r,s)?this.dirtyPaths.delete(e):this.dirtyPaths.add(e),this.dirtyPaths.size>0}rebuild(e,t){return this.dirtyPaths=U(e,t),this.dirtyPaths.size>0}clear(){this.dirtyPaths.clear()}get isDirty(){return this.dirtyPaths.size>0}getDirtyPaths(){return this.dirtyPaths}isPathDirty(e){if(this.dirtyPaths.has(e))return!0;for(let t of this.dirtyPaths)if(t.startsWith(`${e}.`)||e.startsWith(`${t}.`))return!0;return!1}buildDirtyValues(e){if(this.dirtyPaths.size===0)return{};let t={},i=new Set;for(let r of this.dirtyPaths){let s=r.match(/^(.+)\.\d+/);if(s){let n=s[1];if(i.has(n))continue;i.add(n);let o=g(e,n);t=p(t,n,o)}else{let n=g(e,r);t=p(t,r,n)}}return t}};var F=class{constructor(e){this.getState=e}listeners=new Set;selectorListeners=new Set;pathScopedSubscriptions=new Map;pathSelectorIndex=new Map;subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}subscribeSelector(e,t,i,r){let s=e(this.getState()),n={notify:d=>{let u=e(d);r(s,u)||(s=u,t(u))}},o=i?.autoTrackPaths===!1?[]:this.collectTrackedSelectorPaths(e),l=this.normalizeSubscriptionPaths([...i?.paths??[],...o]);return l.length>0?(this.pathScopedSubscriptions.set(n,l),l.forEach(d=>{this.expandPathForIndexing(d).forEach(u=>{let c=this.pathSelectorIndex.get(u)??new Set;c.add(n),this.pathSelectorIndex.set(u,c)})})):this.selectorListeners.add(n),i?.emitImmediately&&t(s),()=>{this.selectorListeners.delete(n);let d=this.pathScopedSubscriptions.get(n);d&&(d.forEach(u=>{this.expandPathForIndexing(u).forEach(c=>{let y=this.pathSelectorIndex.get(c);y&&(y.delete(n),y.size===0&&this.pathSelectorIndex.delete(c))})}),this.pathScopedSubscriptions.delete(n))}}notify(e,t){if(this.listeners.forEach(r=>r()),this.selectorListeners.forEach(r=>{r.notify(e)}),this.pathScopedSubscriptions.size===0)return;if(!t||t.length===0||t.includes("*")){this.pathScopedSubscriptions.forEach((r,s)=>{s.notify(e)});return}this.collectSubscribersForChangedPaths(t).forEach(r=>{r.notify(e)})}destroy(){this.listeners.clear(),this.selectorListeners.clear(),this.pathScopedSubscriptions.clear(),this.pathSelectorIndex.clear()}normalizeSubscriptionPaths(e){return!e||e.length===0?[]:Array.from(new Set(e.map(t=>t.trim()).filter(t=>t.length>0)))}collectTrackedSelectorPaths(e){let t=new Set,i=(s,n)=>!s||typeof s!="object"?s:new Proxy(s,{get:(o,l)=>{if(typeof l!="string")return Reflect.get(o,l);let d=n?`${n}.${l}`:l;t.add(d);let u=Reflect.get(o,l);return i(u,d)}}),r=new Proxy(this.getState(),{get:(s,n)=>{if(typeof n!="string")return Reflect.get(s,n);let o=Reflect.get(s,n);return n==="values"?i(o,""):o}});try{return e(r),Array.from(t)}catch{return[]}}collectSubscribersForChangedPaths(e){let t=new Set,i=s=>{let n=this.pathSelectorIndex.get(s);n&&n.forEach(o=>t.add(o))};return this.normalizeSubscriptionPaths(e).forEach(s=>{i(s);let n=s.split(".");for(;n.length>1;)n.pop(),i(n.join("."))}),t}expandPathForIndexing(e){let t=e.split("."),i=[];for(let r=1;r<=t.length;r++)i.push(t.slice(0,r).join("."));return i}};function ae(a){let e={};return Object.entries(a).forEach(([t,i])=>{i!==void 0&&(e[t]=i)}),e}function X(a){let{currentState:e,partialState:t,changedPaths:i,applyComputedValues:r}=a,s={...e,...t},n=!!t.values;t.values&&(s.values=r(t.values)),t.errors&&(s.errors=ae(t.errors)),s.isValid=Object.keys(s.errors).length===0;let o=i&&i.length>0?i:t.values?["*"]:void 0;return{nextState:s,changedPaths:o,valuesChanged:n}}function ne(a){return typeof a=="boolean"?{enabled:a,mode:"local"}:{enabled:!!a,mode:a?.mode??"local",url:a?.url}}function Q(a){let e=ne(a);return e.enabled?{name:"bit-devtools",setup:()=>{let t=null,i=!1;return(async()=>{try{if(e.mode==="remote"){let{setupRemoteBridge:r}=await import("./devtools/bridge.js");t=r(e.url||"ws://localhost:3000")}else{let{initDevTools:r}=await import("./devtools/index.js"),s=r();t=s&&typeof s.destroy=="function"?s.destroy:null}i&&t&&(t(),t=null)}catch{}})(),()=>{i=!0,t&&(t(),t=null)}}}:null}function oe(){if(typeof globalThis>"u")return;let a=globalThis.localStorage;if(a)return{getItem:e=>a.getItem(e),setItem:(e,t)=>a.setItem(e,t),removeItem:e=>a.removeItem(e)}}var C=class{constructor(e,t,i,r){this.config=e;this.getValues=t;this.getDirtyValues=i;this.applyRestoredValues=r}timer;getStorage(){return this.config.storage||oe()}canPersist(){return!!(this.config.enabled&&this.config.key&&this.getStorage())}handleError(e){this.config.onError?.(e)}async saveNow(){if(!this.canPersist())return;let e=this.getStorage();if(e)try{let t=this.config.mode==="dirtyValues"?this.getDirtyValues():this.getValues(),i=this.config.serialize(h(t));await e.setItem(this.config.key,i)}catch(t){this.handleError(t)}}queueSave(){!this.canPersist()||!this.config.autoSave||(this.timer&&clearTimeout(this.timer),this.timer=setTimeout(()=>{this.saveNow()},this.config.debounceMs))}async restore(){if(!this.canPersist())return!1;let e=this.getStorage();if(!e)return!1;try{let t=await e.getItem(this.config.key);if(!t)return!1;let i=this.config.deserialize(t);return!i||typeof i!="object"?!1:(this.applyRestoredValues(i),!0)}catch(t){return this.handleError(t),!1}}async clear(){if(!this.canPersist())return;let e=this.getStorage();if(e)try{await e.removeItem(this.config.key)}catch(t){this.handleError(t)}}destroy(){this.timer&&(clearTimeout(this.timer),this.timer=void 0)}};var w=class{constructor(e,t){this.plugins=e;this.contextFactory=t}teardownFns=[];notifyingError=!1;setupAll(){this.plugins.forEach(e=>{if(e.setup)try{let t=e.setup(this.contextFactory());typeof t=="function"&&this.teardownFns.push(t)}catch(t){this.reportError("setup",t,void 0,e.name)}})}async beforeValidate(e){await this.emitHook("beforeValidate",e)}async afterValidate(e){await this.emitHook("afterValidate",e)}async beforeSubmit(e){await this.emitHook("beforeSubmit",e)}async afterSubmit(e){await this.emitHook("afterSubmit",e)}onFieldChange(e){this.plugins.forEach(t=>{let i=t.hooks?.onFieldChange;if(i)try{let r=i(e,this.contextFactory());Promise.resolve(r).catch(s=>{this.reportError("onFieldChange",s,e,t.name)})}catch(r){this.reportError("onFieldChange",r,e,t.name)}})}async reportError(e,t,i,r){if(this.notifyingError)return;this.notifyingError=!0;let s=this.contextFactory(),n={source:e,pluginName:r,error:t,event:i,values:s.getState().values,state:s.getState()};for(let o of this.plugins){let l=o.hooks?.onError;if(l)try{await l(n,s)}catch{}}this.notifyingError=!1}destroy(){for(let e=this.teardownFns.length-1;e>=0;e-=1){let t=this.teardownFns[e];try{t()}catch(i){this.reportError("teardown",i)}}this.teardownFns=[]}async emitHook(e,t){let i=this.contextFactory();for(let r of this.plugins){let s=r.hooks?.[e];if(s)try{await s(t,i)}catch(n){await this.reportError(e,n,t,r.name)}}}};var x=class{constructor(e,t,i,r){this.storeId=e;this.storeInstance=t;this.persistManager=i;this.pluginManager=r}initialize(){this.pluginManager.setupAll(),T.stores[this.storeId]=this.storeInstance}onStateUpdated(e,t){t&&this.persistManager.queueSave(),T.dispatch(this.storeId,e)}restorePersisted(){return this.persistManager.restore()}savePersistedNow(){return this.persistManager.saveNow()}clearPersisted(){return this.persistManager.clear()}beforeValidate(e){return this.pluginManager.beforeValidate(e)}afterValidate(e){return this.pluginManager.afterValidate(e)}beforeSubmit(e){return this.pluginManager.beforeSubmit(e)}afterSubmit(e){return this.pluginManager.afterSubmit(e)}onFieldChange(e){this.pluginManager.onFieldChange(e)}reportOperationalError(e){return this.pluginManager.reportError(e.source,e.error,e.payload)}destroy(){this.persistManager.destroy(),this.pluginManager.destroy(),delete T.stores[this.storeId]}};var v=class{constructor(e){this.steps=e}async run(e){for(let t of this.steps){if(e.halted)break;await t.run(e)}}},M=class{constructor(e){this.steps=e}run(e){for(let t of this.steps){if(e.halted)break;t.run(e)}}};var D=class{constructor(e){this.store=e}validationTimeout;currentValidationId=0;asyncEpoch=0;asyncTimers={};asyncRequests={};asyncErrors={};updateFieldValidating(e,t){this.store.internalUpdateState({isValidating:{...this.store.getState().isValidating,[e]:t}})}cancelFieldAsync(e){this.asyncTimers[e]&&(clearTimeout(this.asyncTimers[e]),delete this.asyncTimers[e]),this.asyncRequests[e]=(this.asyncRequests[e]||0)+1}cleanupField(e){this.cancelFieldAsync(e),delete this.asyncTimers[e],delete this.asyncRequests[e],delete this.asyncErrors[e],this.updateFieldValidating(e,!1)}cleanupPrefix(e){Object.keys(this.asyncTimers).forEach(t=>{(t===e||t.startsWith(`${e}.`))&&this.cleanupField(t)}),Object.keys(this.asyncRequests).forEach(t=>{(t===e||t.startsWith(`${e}.`))&&delete this.asyncRequests[t]}),Object.keys(this.asyncErrors).forEach(t=>{(t===e||t.startsWith(`${e}.`))&&delete this.asyncErrors[t]})}beginExternalValidation(e){this.cancelFieldAsync(e),this.updateFieldValidating(e,!0)}endExternalValidation(e){this.updateFieldValidating(e,!1)}async setExternalError(e,t){if(t){this.asyncErrors[e]=t,this.store.setError(e,t);return}if(delete this.asyncErrors[e],this.store.validate){await this.store.validate({scopeFields:[e]});return}let i={...this.store.getState().errors};delete i[e],this.store.internalUpdateState({errors:i,isValid:Object.keys(i).length===0})}handleAsync(e,t){let i=this.store.getFieldConfig(e),r=i?.validation?.asyncValidate;if(!r){this.updateFieldValidating(e,!1);return}this.asyncTimers[e]&&clearTimeout(this.asyncTimers[e]);let s=i.validation?.asyncValidateDelay??500;this.updateFieldValidating(e,!0),this.asyncTimers[e]=setTimeout(async()=>{delete this.asyncTimers[e];let n=this.asyncEpoch,o=(this.asyncRequests[e]||0)+1;this.asyncRequests[e]=o;try{let l=await r(t,this.store.getState().values);if(this.asyncRequests[e]!==o||n!==this.asyncEpoch)return;if(l)this.asyncErrors[e]=l,this.store.setError(e,l);else if(delete this.asyncErrors[e],this.store.validate)await this.store.validate({scopeFields:[e]});else{let d={...this.store.getState().errors};delete d[e],this.store.internalUpdateState({errors:d,isValid:Object.keys(d).length===0})}}finally{this.asyncRequests[e]===o&&n===this.asyncEpoch&&this.updateFieldValidating(e,!1)}},s)}hasValidationsInProgress(e){let t=this.store.getState();return e&&e.length>0?e.some(i=>!!t.isValidating[i]):Object.values(t.isValidating).some(Boolean)}trigger(e){this.validationTimeout&&clearTimeout(this.validationTimeout);let t=this.store.config.validationDelay??300;t>0?this.validationTimeout=setTimeout(()=>{this.validate({scopeFields:e})},t):this.validate({scopeFields:e})}async validate(e){let t={options:e,validationId:++this.currentValidationId,currentState:this.store.getState(),targetFields:e?.scopeFields,allErrors:{},isValid:!0,result:!0,aborted:!1};return await new v([{name:"validate:resolve-target-fields",run:r=>{if(r.options?.scope){let s=this.store.getScopeFields(r.options.scope);s.length>0&&(r.targetFields=s)}}},{name:"validate:before-hooks",run:async r=>{await this.store.emitBeforeValidate({values:r.currentState.values,state:r.currentState,scope:r.options?.scope,scopeFields:r.targetFields})}},{name:"validate:resolver",run:async r=>{r.allErrors=this.store.config.resolver?await this.store.config.resolver(r.currentState.values,{scopeFields:r.targetFields}):{}}},{name:"validate:required-and-hidden",run:r=>{let s=this.store.getRequiredErrors(r.currentState.values);r.allErrors={...r.allErrors,...s},this.store.getHiddenFields().forEach(n=>{delete r.allErrors[n],delete this.asyncErrors[n]})}},{name:"validate:abort-check",run:async r=>{r.validationId!==this.currentValidationId&&(r.aborted=!0,r.result=r.currentState.isValid,await this.store.emitAfterValidate({values:this.store.getState().values,state:this.store.getState(),scope:r.options?.scope,scopeFields:r.targetFields,errors:this.store.getState().errors,result:r.currentState.isValid,aborted:!0}),r.halted=!0)}},{name:"validate:commit-scoped",run:async r=>{if(!r.targetFields)return;let s={...r.currentState.errors};r.targetFields.forEach(n=>{r.allErrors[n]?s[n]=r.allErrors[n]:this.asyncErrors[n]?s[n]=this.asyncErrors[n]:delete s[n]}),r.isValid=Object.keys(s).length===0,r.result=r.targetFields.every(n=>!r.allErrors[n]&&!this.asyncErrors[n]),this.store.internalUpdateState({errors:s,isValid:r.isValid}),await this.store.emitAfterValidate({values:this.store.getState().values,state:this.store.getState(),scope:r.options?.scope,scopeFields:r.targetFields,errors:s,result:r.result}),r.halted=!0}},{name:"validate:commit-global",run:async r=>{r.allErrors={...this.asyncErrors,...r.allErrors},r.isValid=Object.keys(r.allErrors).length===0,r.result=r.isValid,this.store.internalUpdateState({errors:r.allErrors,isValid:r.isValid}),await this.store.emitAfterValidate({values:this.store.getState().values,state:this.store.getState(),scope:r.options?.scope,scopeFields:r.targetFields,errors:r.allErrors,result:r.isValid})}}]).run(t),t.result}clear(e){this.asyncTimers[e]&&clearTimeout(this.asyncTimers[e]),delete this.asyncTimers[e],this.updateFieldValidating(e,!1),delete this.asyncErrors[e]}cancelAll(){this.asyncEpoch+=1,this.validationTimeout&&clearTimeout(this.validationTimeout),Object.values(this.asyncTimers).forEach(e=>clearTimeout(e)),this.asyncTimers={},this.asyncRequests={},this.asyncErrors={},this.store.internalUpdateState({isValidating:{}})}};var k=class{constructor(e){this.store=e}updateField(e,t,i={origin:"setField"}){let r=this.store.getState(),s={path:e,value:t,meta:i,previousValue:g(r.values,e),nextValues:p(r.values,e,t),nextErrors:{...r.errors},toggledFields:[],isDirty:!1};new M([{name:"field:clear-current-error",run:o=>{delete o.nextErrors[o.path],this.store.clearFieldValidation(o.path)}},{name:"field:update-dependencies",run:o=>{o.toggledFields=this.store.updateDependencies(o.path,o.nextValues),o.toggledFields.forEach(l=>{this.store.isFieldHidden(l)&&(delete o.nextErrors[l],this.store.clearFieldValidation(l))})}},{name:"field:update-dirty",run:o=>{o.isDirty=this.store.updateDirtyForPath(o.path,o.nextValues,this.store.config.initialValues)}},{name:"field:commit-state",run:o=>{this.store.internalUpdateState({values:o.nextValues,errors:o.nextErrors,isValid:Object.keys(o.nextErrors).length===0,isDirty:o.isDirty},[o.path,...o.toggledFields])}},{name:"field:emit-change",run:o=>{this.store.emitFieldChange({path:o.path,previousValue:o.previousValue,nextValue:o.value,values:this.store.getState().values,state:this.store.getState(),meta:o.meta})}},{name:"field:trigger-validate",run:o=>{this.store.config.resolver&&this.store.triggerValidation([o.path])}},{name:"field:trigger-async-validate",run:o=>{this.store.handleFieldAsyncValidation(o.path,o.value)}}]).run(s)}replaceValues(e,t="replaceValues"){let i=this.store.getState().values,r=h(e);this.store.cancelAllValidations(),this.store.evaluateAllDependencies(r);let s=this.store.rebuildDirtyState(r,this.store.config.initialValues);this.store.internalUpdateState({values:r,errors:{},isValidating:{},isValid:!0,isDirty:s,isSubmitting:!1},["*"]),this.store.internalSaveSnapshot(),this.store.validateNow(),this.store.emitFieldChange({path:"*",previousValue:i,nextValue:r,values:this.store.getState().values,state:this.store.getState(),meta:{origin:t}})}hydrateValues(e){let t=B(this.store.getState().values,e);this.replaceValues(t,"hydrate")}rebaseValues(e){let t=this.store.getState().values,i=h(e);this.store.config.initialValues=h(i),this.store.cancelAllValidations(),this.store.evaluateAllDependencies(i),this.store.clearDirtyState(),this.store.internalUpdateState({values:i,errors:{},touched:{},isValidating:{},isValid:!0,isDirty:!1,isSubmitting:!1},["*"]),this.store.internalSaveSnapshot(),this.store.validateNow(),this.store.emitFieldChange({path:"*",previousValue:t,nextValue:i,values:this.store.getState().values,state:this.store.getState(),meta:{origin:"rebase"}})}async submit(e){if(this.store.getState().isSubmitting||this.store.hasValidationsInProgress())return;this.store.cancelAllValidations();let i={onSuccess:e,isValid:!1,valuesToSubmit:h(this.store.getState().values),dirtyValues:{}},r=new v([{name:"submit:start",run:async s=>{this.store.internalUpdateState({isSubmitting:!0}),s.isValid=await this.store.validateNow()}},{name:"submit:invalid",run:async s=>{if(s.isValid)return;let n=this.store.getState().errors,o={...this.store.getState().touched};Object.keys(n).forEach(l=>{o[l]=!0}),this.store.internalUpdateState({touched:o}),s.dirtyValues=this.store.buildDirtyValues(this.store.getState().values),s.invalid=!0,await this.store.emitAfterSubmit({values:this.store.getState().values,dirtyValues:s.dirtyValues,state:this.store.getState(),success:!1,invalid:!0}),s.halted=!0}},{name:"submit:prepare",run:s=>{this.store.getHiddenFields().forEach(n=>{s.valuesToSubmit=p(s.valuesToSubmit,n,void 0)});for(let[n,o]of this.store.getTransformEntries()){let l=g(s.valuesToSubmit,n);s.valuesToSubmit=p(s.valuesToSubmit,n,o(l,this.store.getState().values))}s.dirtyValues=this.store.buildDirtyValues(s.valuesToSubmit)}},{name:"submit:before-hooks",run:async s=>{await this.store.emitBeforeSubmit({values:s.valuesToSubmit,dirtyValues:s.dirtyValues,state:this.store.getState()})}},{name:"submit:user-handler",run:async s=>{await s.onSuccess(s.valuesToSubmit,s.dirtyValues)}},{name:"submit:after-hooks",run:async s=>{await this.store.emitAfterSubmit({values:s.valuesToSubmit,dirtyValues:s.dirtyValues,state:this.store.getState(),success:!0})}}]);try{await r.run(i)}catch(s){i.error=s,await this.store.emitOperationalError({source:"submit",error:s}),await this.store.emitAfterSubmit({values:this.store.getState().values,dirtyValues:this.store.buildDirtyValues(this.store.getState().values),state:this.store.getState(),success:!1,error:s}),console.error(s)}finally{this.store.internalUpdateState({isSubmitting:!1})}}reset(){this.store.cancelAllValidations();let e=h(this.store.config.initialValues);this.store.evaluateAllDependencies(e),this.store.clearDirtyState(),this.store.internalUpdateState({values:e,errors:{},touched:{},isValidating:{},isValid:!0,isDirty:!1,isSubmitting:!1},["*"]),this.store.resetHistory(e)}};var I=class{constructor(e,t=15){this.enableHistory=e;this.maxHistory=t}history=[];historyIndex=-1;saveSnapshot(e){if(!this.enableHistory)return;let t=this.history[this.historyIndex];t&&f(t,e)||(this.historyIndex<this.history.length-1&&(this.history=this.history.slice(0,this.historyIndex+1)),this.history.push(h(e)),this.history.length>this.maxHistory?this.history.shift():this.historyIndex++)}get canUndo(){return this.enableHistory?this.historyIndex>0:!1}get canRedo(){return this.enableHistory?this.historyIndex<this.history.length-1:!1}undo(){return this.canUndo?(this.historyIndex--,h(this.history[this.historyIndex])):null}redo(){return this.canRedo?(this.historyIndex++,h(this.history[this.historyIndex])):null}reset(e){this.history=[],this.historyIndex=-1,this.saveSnapshot(e)}getMetadata(){return{enabled:this.enableHistory,canUndo:this.canUndo,canRedo:this.canRedo,historyIndex:this.historyIndex,historySize:this.history.length}}};var A=class{constructor(e){this.store=e}pushItem(e,t){let i=g(this.store.getState().values,e)||[];this.store.setFieldWithMeta(e,[...i,t],{origin:"array",operation:"push"}),this.store.internalSaveSnapshot()}prependItem(e,t){let i=g(this.store.getState().values,e)||[];this.store.setFieldWithMeta(e,[t,...i],{origin:"array",operation:"prepend"}),this.store.internalSaveSnapshot()}insertItem(e,t,i){let r=[...g(this.store.getState().values,e)||[]];r.splice(t,0,i),this.store.setFieldWithMeta(e,r,{origin:"array",operation:"insert",index:t}),this.store.internalSaveSnapshot()}removeItem(e,t){let i=this.store.getState(),r=g(i.values,e);if(!Array.isArray(r))return;let s=[...r];this.store.unregisterPrefix&&this.store.unregisterPrefix(`${e}.${t}.`);let n=r.filter((d,u)=>u!==t),o=p(i.values,e,n),l=this.store.updateDirtyForPath(e,o,this.store.getConfig().initialValues);this.store.internalUpdateState({values:o,errors:j(i.errors,e,t),touched:j(i.touched,e,t),isDirty:l}),this.store.emitFieldChange({path:e,previousValue:s,nextValue:n,values:this.store.getState().values,state:this.store.getState(),meta:{origin:"array",operation:"remove",index:t}}),this.store.internalSaveSnapshot(),this.revalidate(e)}swapItems(e,t,i){let r=this.store.getState(),s=[...g(r.values,e)||[]],n=[...s];[s[t],s[i]]=[s[i],s[t]];let o=p(r.values,e,s),l=this.store.updateDirtyForPath(e,o,this.store.getConfig().initialValues);this.store.internalUpdateState({values:o,errors:$(r.errors,e,t,i),touched:$(r.touched,e,t,i),isDirty:l}),this.store.emitFieldChange({path:e,previousValue:n,nextValue:s,values:this.store.getState().values,state:this.store.getState(),meta:{origin:"array",operation:"swap",from:t,to:i}}),this.store.internalSaveSnapshot(),this.revalidate(e)}moveItem(e,t,i){let r=this.store.getState(),s=[...g(r.values,e)||[]],n=[...s],[o]=s.splice(t,1);s.splice(i,0,o);let l=p(r.values,e,s),d=this.store.updateDirtyForPath(e,l,this.store.getConfig().initialValues);this.store.internalUpdateState({values:l,errors:_(r.errors,e,t,i),touched:_(r.touched,e,t,i),isDirty:d}),this.store.emitFieldChange({path:e,previousValue:n,nextValue:s,values:this.store.getState().values,state:this.store.getState(),meta:{origin:"array",operation:"move",from:t,to:i}}),this.store.internalSaveSnapshot(),this.revalidate(e)}revalidate(e){this.store.triggerValidation([e])}};var R=class{constructor(e,t,i,r){this.getState=e;this.getInitialValues=t;this.getScopeFields=i;this.isPathDirty=r}getStepStatus(e){let t=this.getScopeFields(e),i=this.getState(),r=t.some(o=>!!i.errors[o]),s=t.some(o=>this.isPathDirty(o)),n=this.getStepErrors(e);return{hasErrors:r,isDirty:s,errors:n}}getStepErrors(e){let t=this.getScopeFields(e),i=this.getState(),r={};for(let s of t){let n=i.errors[s];n&&(r[s]=n)}return r}};var O=class{constructor(e,t,i,r){this.dependencyManager=e;this.getState=t;this.getConfig=i;this.isPathDirty=r}isHidden(e){return this.dependencyManager.isHidden(e)}isRequired(e){return this.dependencyManager.isRequired(e,this.getState().values)}isFieldDirty(e){return this.isPathDirty(e)}isFieldValidating(e){return!!this.getState().isValidating[e]}};var q=class{constructor(e,t){this.getState=e;this.internalUpdateState=t}setError(e,t){let i={...this.getState().errors,[e]:t};t||delete i[e],this.internalUpdateState({errors:i})}setErrors(e){this.internalUpdateState({errors:{...this.getState().errors,...e}})}setServerErrors(e){let t={};for(let[i,r]of Object.entries(e))t[i]=Array.isArray(r)?r[0]:r;this.setErrors(t)}};var H=class{capabilities=new Map;register(e,t){this.capabilities.set(e,t)}get(e){let t=this.capabilities.get(e);if(!t)throw new Error(`Capability "${String(e)}" is not registered`);return t}has(e){return this.capabilities.has(e)}clear(){this.capabilities.clear()}};function Y(a){let{store:e,dependencyManager:t,dirtyManager:i}=a,r=new H;return r.register("validation",new D(e)),r.register("lifecycle",new k(e)),r.register("history",new I(!!e.config.enableHistory,e.config.historyLimit??15)),r.register("arrays",new A(e)),r.register("scope",new R(()=>e.getState(),()=>e.config.initialValues,s=>e.getScopeFields(s),s=>i.isPathDirty(s))),r.register("query",new O(t,()=>e.getState(),()=>e.config,s=>i.isPathDirty(s))),r.register("error",new q(()=>e.getState(),s=>e.internalUpdateState(s))),r}function Z(a){let{storeId:e,storeInstance:t,config:i,getState:r,getConfig:s,getValues:n,getDirtyValues:o,applyPersistedValues:l}=a,d=new C(i.persist,n,o,l),u=[...i.plugins],c=Q(i.devTools);c&&u.push(c);let y=new w(u,()=>({storeId:e,getState:()=>r(),getConfig:()=>s()})),N=new x(e,t,d,y);return N.initialize(),N}function ee(a){let{config:e,dependencyManager:t,computedManager:i}=a,r=h(e.initialValues);return e.fields&&Object.entries(e.fields).forEach(([n,o])=>{t.register(n,o,r)}),{values:i.apply(r),errors:{},touched:{},isValidating:{},persist:{isSaving:!1,isRestoring:!1,error:null},isValid:!0,isSubmitting:!1,isDirty:!1}}var b=class{state;subscriptions;effects;capabilities;config;storeId;dependencyManager;computedManager;dirtyManager;scopeFieldsIndex=null;computedEntriesCache=null;transformEntriesCache=null;invalidateFieldIndexes(){this.scopeFieldsIndex=null,this.computedEntriesCache=null,this.transformEntriesCache=null}getCapability(e){return this.capabilities.get(e)}get validation(){return this.getCapability("validation")}get lifecycle(){return this.getCapability("lifecycle")}get history(){return this.getCapability("history")}get arrays(){return this.getCapability("arrays")}get scope(){return this.getCapability("scope")}get query(){return this.getCapability("query")}get error(){return this.getCapability("error")}constructor(e={}){this.config=J(e),this.dependencyManager=new E,this.computedManager=new P(()=>this.getComputedEntries()),this.dirtyManager=new V,this.capabilities=Y({store:this,dependencyManager:this.dependencyManager,dirtyManager:this.dirtyManager}),this.state=ee({config:this.config,dependencyManager:this.dependencyManager,computedManager:this.computedManager}),this.subscriptions=new F(()=>this.state),this.internalSaveSnapshot(),this.storeId=e.storeId||this.config.name||this.config.idFactory({scope:"store",storeName:this.config.name}),this.effects=Z({storeId:this.storeId,storeInstance:this,config:this.config,getState:()=>this.getState(),getConfig:()=>this.getConfig(),getValues:()=>this.state.values,getDirtyValues:()=>this.getDirtyValues(),applyPersistedValues:t=>this.applyPersistedValues(t)})}getConfig(){return this.config}getFieldConfig(e){return this.dependencyManager.getFieldConfig(e)||this.config.fields?.[e]}getScopeFields(e){if(!this.scopeFieldsIndex){let t=new Map;this.dependencyManager.forEachFieldConfig((i,r)=>{if(!i.scope)return;let s=t.get(i.scope)??[];s.push(r),t.set(i.scope,s)}),this.scopeFieldsIndex=t}return this.scopeFieldsIndex.get(e)??[]}getComputedEntries(){if(!this.computedEntriesCache){let e=[];this.dependencyManager.forEachFieldConfig((t,i)=>{t.computed&&e.push([i,t.computed])}),this.computedEntriesCache=e}return this.computedEntriesCache}getTransformEntries(){if(!this.transformEntriesCache){let e=[];this.dependencyManager.forEachFieldConfig((t,i)=>{t.transform&&e.push([i,t.transform])}),this.transformEntriesCache=e}return this.transformEntriesCache}resolveMask(e){let t=this.getFieldConfig(e)?.mask;if(t)return typeof t=="string"?this.config.masks?.[t]:t}getState(){return this.state}getFieldState(e){return{value:g(this.state.values,e),error:this.state.errors[e],touched:!!this.state.touched[e],isHidden:this.isHidden(e),isRequired:this.isRequired(e),isDirty:this.isFieldDirty(e),isValidating:this.isFieldValidating(e)}}get isValid(){return this.state.isValid}get isSubmitting(){return this.state.isSubmitting}get isDirty(){return this.state.isDirty}registerField(e,t){this.dependencyManager.register(e,t,this.state.values),this.invalidateFieldIndexes(),this.dependencyManager.isHidden(e)&&this.subscriptions.notify(this.state,["*"])}unregisterField(e){if(this.config.fields?.[e])return;this.validation.cleanupField(e),this.dependencyManager.unregister(e),this.invalidateFieldIndexes();let t={...this.state.errors},i={...this.state.touched},r=!1;t[e]&&(delete t[e],r=!0),i[e]&&(delete i[e],r=!0),r&&this.internalUpdateState({errors:t,touched:i})}unregisterPrefix(e){this.validation.cleanupPrefix(e),this.dependencyManager.unregisterPrefix(e),this.invalidateFieldIndexes()}isHidden(e){return this.query.isHidden(e)}isRequired(e){return this.query.isRequired(e)}isFieldDirty(e){return this.query.isFieldDirty(e)}isFieldValidating(e){return this.query.isFieldValidating(e)}subscribe(e){return this.subscriptions.subscribe(e)}subscribeSelector(e,t,i){let r=i?.equalityFn??S;return this.subscriptions.subscribeSelector(e,t,i,r)}subscribePath(e,t,i){let r=[...i?.paths??[],e];return this.subscribeSelector(s=>g(s.values,e),t,{...i,paths:r})}watch(e,t){return this.subscribePath(e,t,{equalityFn:f})}setField(e,t){this.setFieldWithMeta(e,t,{origin:"setField"})}setFieldWithMeta(e,t,i={origin:"setField"}){this.lifecycle.updateField(e,t,i)}blurField(e){this.internalSaveSnapshot(),this.state.touched[e]||this.internalUpdateState({touched:{...this.state.touched,[e]:!0}}),this.validation.trigger([e])}markFieldsTouched(e){if(e.length===0)return;let t={...this.state.touched};e.forEach(i=>{t[i]=!0}),this.internalUpdateState({touched:t})}replaceValues(e){this.lifecycle.replaceValues(e)}hydrate(e){this.lifecycle.hydrateValues(e)}rebase(e){this.lifecycle.rebaseValues(e)}setError(e,t){this.error.setError(e,t)}setErrors(e){this.error.setErrors(e)}setServerErrors(e){this.error.setServerErrors(e)}reset(){this.lifecycle.reset()}async submit(e){return this.lifecycle.submit(e)}registerMask(e,t){this.config.masks={...this.config.masks||{},[e]:t}}getDirtyValues(){return this.dirtyManager.buildDirtyValues(this.state.values)}getPersistMetadata(){return this.state.persist}async restorePersisted(){this.internalUpdateState({persist:{...this.state.persist,isRestoring:!0,error:null}});try{return await this.effects.restorePersisted()}catch(e){return this.internalUpdateState({persist:{...this.state.persist,isRestoring:!1,error:e instanceof Error?e:new Error(String(e))}}),!1}finally{this.internalUpdateState({persist:{...this.state.persist,isRestoring:!1}})}}async forceSave(){this.internalUpdateState({persist:{...this.state.persist,isSaving:!0,error:null}});try{await this.effects.savePersistedNow()}catch(e){this.internalUpdateState({persist:{...this.state.persist,isSaving:!1,error:e instanceof Error?e:new Error(String(e))}});return}this.internalUpdateState({persist:{...this.state.persist,isSaving:!1}})}async clearPersisted(){this.internalUpdateState({persist:{...this.state.persist,error:null}});try{await this.effects.clearPersisted()}catch(e){this.internalUpdateState({persist:{...this.state.persist,error:e instanceof Error?e:new Error(String(e))}})}}pushItem(e,t){this.arrays.pushItem(e,t)}prependItem(e,t){this.arrays.prependItem(e,t)}insertItem(e,t,i){this.arrays.insertItem(e,t,i)}removeItem(e,t){this.arrays.removeItem(e,t)}swapItems(e,t,i){this.arrays.swapItems(e,t,i)}moveItem(e,t,i){this.arrays.moveItem(e,t,i)}get canUndo(){return this.history.canUndo}get canRedo(){return this.history.canRedo}undo(){let e=this.history.undo();if(e){let t=this.dirtyManager.rebuild(e,this.config.initialValues);this.internalUpdateState({values:e,isDirty:t}),this.validation.validate()}}redo(){let e=this.history.redo();if(e){let t=this.dirtyManager.rebuild(e,this.config.initialValues);this.internalUpdateState({values:e,isDirty:t}),this.validation.validate()}}getHistoryMetadata(){return this.history.getMetadata()}validate(e){return this.validation.validate(e)}emitBeforeValidate(e){return this.effects.beforeValidate(e)}emitAfterValidate(e){return this.effects.afterValidate(e)}emitBeforeSubmit(e){return this.effects.beforeSubmit(e)}emitAfterSubmit(e){return this.effects.afterSubmit(e)}emitFieldChange(e){this.effects.onFieldChange(e)}emitOperationalError(e){return this.effects.reportOperationalError(e)}hasValidationsInProgress(e){return this.validation.hasValidationsInProgress(e)}triggerValidation(e){this.validation.trigger(e)}getStepStatus(e){return this.scope.getStepStatus(e)}getStepErrors(e){return this.scope.getStepErrors(e)}updateDependencies(e,t){return this.dependencyManager.updateDependencies(e,t)}isFieldHidden(e){return this.dependencyManager.isHidden(e)}evaluateAllDependencies(e){this.dependencyManager.evaluateAll(e)}getHiddenFields(){return this.dependencyManager.getHiddenFields()}getRequiredErrors(e){return this.dependencyManager.getRequiredErrors(e)}clearFieldValidation(e){this.validation.clear(e)}handleFieldAsyncValidation(e,t){this.validation.handleAsync(e,t)}cancelAllValidations(){this.validation.cancelAll()}validateNow(e){return this.validation.validate(e)}updateDirtyForPath(e,t,i){return this.dirtyManager.updateForPath(e,t,i)}rebuildDirtyState(e,t){return this.dirtyManager.rebuild(e,t)}clearDirtyState(){this.dirtyManager.clear()}buildDirtyValues(e){return this.dirtyManager.buildDirtyValues(e)}resetHistory(e){this.history.reset(e)}internalUpdateState(e,t){let i=X({currentState:this.state,partialState:e,changedPaths:t,applyComputedValues:r=>this.computedManager.apply(r)});this.state=i.nextState,this.subscriptions.notify(this.state,i.changedPaths),this.effects.onStateUpdated(this.state,i.valuesChanged)}internalSaveSnapshot(){this.history.saveSnapshot(this.state.values)}applyPersistedValues(e){let t=h({...this.config.initialValues,...e});this.validation.cancelAll(),this.dependencyManager.evaluateAll(t);let i=this.dirtyManager.rebuild(t,this.config.initialValues);this.internalUpdateState({values:t,errors:{},touched:{},isValidating:{},persist:{...this.state.persist,error:null},isValid:!0,isDirty:i,isSubmitting:!1}),this.internalSaveSnapshot(),this.validation.validate()}cleanup(){this.subscriptions.destroy(),this.validation.cancelAll(),this.capabilities.clear(),this.effects.destroy()}};var K=Symbol.for("bit-form.store.engine");function le(a){if(a instanceof b)return a;let e=a;if(e[K])return e[K];throw new Error("BitStore: store facade without engine reference cannot be resolved for hooks API.")}function de(a={}){let e=new b(a);return{get config(){return e.config},getConfig:()=>e.getConfig(),getState:()=>e.getState(),subscribe:i=>e.subscribe(i),setField:(i,r)=>e.setField(i,r),blurField:i=>e.blurField(i),replaceValues:i=>e.replaceValues(i),hydrate:i=>e.hydrate(i),rebase:i=>e.rebase(i),setError:(i,r)=>e.setError(i,r),setErrors:i=>e.setErrors(i),setServerErrors:i=>e.setServerErrors(i),validate:i=>e.validate(i),reset:()=>e.reset(),submit:i=>e.submit(i),registerMask:(i,r)=>e.registerMask(i,r),getDirtyValues:()=>e.getDirtyValues(),getPersistMetadata:()=>e.getPersistMetadata(),restorePersisted:()=>e.restorePersisted(),forceSave:()=>e.forceSave(),clearPersisted:()=>e.clearPersisted(),cleanup:()=>e.cleanup(),registerField:(i,r)=>e.registerField(i,r),unregisterField:i=>e.unregisterField(i),isHidden:i=>e.isHidden(i),isRequired:i=>e.isRequired(i),isFieldDirty:i=>e.isFieldDirty(i),isFieldValidating:i=>e.isFieldValidating(i),watch:(i,r)=>e.watch(i,r),pushItem:(i,r)=>e.pushItem(i,r),prependItem:(i,r)=>e.prependItem(i,r),insertItem:(i,r,s)=>e.insertItem(i,r,s),removeItem:(i,r)=>e.removeItem(i,r),moveItem:(i,r,s)=>e.moveItem(i,r,s),swapItems:(i,r,s)=>e.swapItems(i,r,s),getHistoryMetadata:()=>e.getHistoryMetadata(),undo:()=>e.undo(),redo:()=>e.redo(),getStepStatus:i=>e.getStepStatus(i),getStepErrors:i=>e.getStepErrors(i),[K]:e}}export{h as a,B as b,S as c,f as d,g as e,p as f,ie as g,G as h,re as i,T as j,le as k,de as l};
2
+ //# sourceMappingURL=chunk-AE4G32HS.js.map