@lehnihon/bit-form 2.2.7 → 2.2.8

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 (158) hide show
  1. package/README.md +6 -6
  2. package/dist/angular/index.cjs +1 -1
  3. package/dist/angular/index.cjs.map +1 -1
  4. package/dist/angular/index.d.cts +10 -8
  5. package/dist/angular/index.d.ts +10 -8
  6. package/dist/angular/index.js +1 -1
  7. package/dist/angular/index.js.map +1 -1
  8. package/dist/{array-controller-DtkmcnUr.d.ts → array-controller-B5bfXV1W.d.cts} +4 -4
  9. package/dist/{array-controller-C1A5VKYd.d.cts → array-controller-Cx-DMH7Y.d.ts} +4 -4
  10. package/dist/bus-B2VEKrPI.d.ts +19 -0
  11. package/dist/bus-ZLQeq4Vr.d.cts +19 -0
  12. package/dist/chunk-5NA2TFPG.js +1 -0
  13. package/dist/chunk-5NA2TFPG.js.map +1 -0
  14. package/dist/chunk-63OJBMKK.js +2 -0
  15. package/dist/chunk-63OJBMKK.js.map +1 -0
  16. package/dist/chunk-BSGJ3T5S.cjs +2 -0
  17. package/dist/chunk-BSGJ3T5S.cjs.map +1 -0
  18. package/dist/chunk-CPP7ELA5.js +2 -0
  19. package/dist/chunk-CPP7ELA5.js.map +1 -0
  20. package/dist/chunk-D7JQWF6V.cjs +2 -0
  21. package/dist/chunk-D7JQWF6V.cjs.map +1 -0
  22. package/dist/chunk-E2NZR44P.js +2 -0
  23. package/dist/chunk-E2NZR44P.js.map +1 -0
  24. package/dist/chunk-EQ55DKX2.js +2 -0
  25. package/dist/chunk-EQ55DKX2.js.map +1 -0
  26. package/dist/chunk-JC4R5WCC.js +2 -0
  27. package/dist/chunk-JC4R5WCC.js.map +1 -0
  28. package/dist/chunk-M6WBNHIT.cjs +2 -0
  29. package/dist/chunk-M6WBNHIT.cjs.map +1 -0
  30. package/dist/chunk-MFSQATNZ.cjs +2 -0
  31. package/dist/chunk-MFSQATNZ.cjs.map +1 -0
  32. package/dist/chunk-MFTWAFMG.cjs +2 -0
  33. package/dist/chunk-MFTWAFMG.cjs.map +1 -0
  34. package/dist/chunk-P2YWYBWG.cjs +2 -0
  35. package/dist/chunk-P2YWYBWG.cjs.map +1 -0
  36. package/dist/chunk-RD73EBSN.js +2 -0
  37. package/dist/chunk-RD73EBSN.js.map +1 -0
  38. package/dist/chunk-T2JRSWQU.cjs +2 -0
  39. package/dist/chunk-T2JRSWQU.cjs.map +1 -0
  40. package/dist/chunk-UQ3DSUWC.js +2 -0
  41. package/dist/chunk-UQ3DSUWC.js.map +1 -0
  42. package/dist/chunk-VZHG372Q.cjs +2 -0
  43. package/dist/chunk-VZHG372Q.cjs.map +1 -0
  44. package/dist/chunk-W2E5UIXT.js +2 -0
  45. package/dist/chunk-W2E5UIXT.js.map +1 -0
  46. package/dist/chunk-W5CLDRRE.cjs +1 -0
  47. package/dist/chunk-W5CLDRRE.cjs.map +1 -0
  48. package/dist/core/bindings.cjs +2 -0
  49. package/dist/core/bindings.cjs.map +1 -0
  50. package/dist/core/bindings.d.cts +81 -0
  51. package/dist/core/bindings.d.ts +81 -0
  52. package/dist/core/bindings.js +2 -0
  53. package/dist/core/bindings.js.map +1 -0
  54. package/dist/core/status.cjs +2 -0
  55. package/dist/core/status.cjs.map +1 -0
  56. package/dist/core/status.d.cts +44 -0
  57. package/dist/core/status.d.ts +44 -0
  58. package/dist/core/status.js +2 -0
  59. package/dist/core/status.js.map +1 -0
  60. package/dist/core/store.cjs +2 -0
  61. package/dist/core/store.cjs.map +1 -0
  62. package/dist/core/store.d.cts +84 -0
  63. package/dist/core/store.d.ts +84 -0
  64. package/dist/core/store.js +2 -0
  65. package/dist/core/store.js.map +1 -0
  66. package/dist/core/utils.cjs +2 -0
  67. package/dist/core/utils.cjs.map +1 -0
  68. package/dist/core/utils.d.cts +81 -0
  69. package/dist/core/utils.d.ts +81 -0
  70. package/dist/core/utils.js +2 -0
  71. package/dist/core/utils.js.map +1 -0
  72. package/dist/core.cjs +1 -1
  73. package/dist/core.cjs.map +1 -1
  74. package/dist/core.d.cts +14 -122
  75. package/dist/core.d.ts +14 -122
  76. package/dist/core.js +1 -1
  77. package/dist/devtools/bridge.cjs +1 -1
  78. package/dist/devtools/bridge.cjs.map +1 -1
  79. package/dist/devtools/bridge.d.cts +3 -2
  80. package/dist/devtools/bridge.d.ts +3 -2
  81. package/dist/devtools/bridge.js +1 -1
  82. package/dist/devtools/index.cjs +2 -2
  83. package/dist/devtools/index.cjs.map +1 -1
  84. package/dist/devtools/index.d.cts +3 -2
  85. package/dist/devtools/index.d.ts +3 -2
  86. package/dist/devtools/index.js +1 -1
  87. package/dist/devtools/index.js.map +1 -1
  88. package/dist/{field-binding-X5TkvfUt.d.cts → field-binding-B_OX3bjp.d.cts} +1 -1
  89. package/dist/{field-binding-Bi1g-D8X.d.ts → field-binding-MX6jVQbT.d.ts} +1 -1
  90. package/dist/index.cjs +1 -1
  91. package/dist/index.cjs.map +1 -1
  92. package/dist/index.d.cts +8 -85
  93. package/dist/index.d.ts +8 -85
  94. package/dist/index.js +1 -1
  95. package/dist/mask.d.cts +2 -2
  96. package/dist/mask.d.ts +2 -2
  97. package/dist/meta-types-Bzmm21TP.d.cts +18 -0
  98. package/dist/meta-types-Bzmm21TP.d.ts +18 -0
  99. package/dist/react/index.cjs +1 -1
  100. package/dist/react/index.cjs.map +1 -1
  101. package/dist/react/index.d.cts +11 -9
  102. package/dist/react/index.d.ts +11 -9
  103. package/dist/react/index.js +1 -1
  104. package/dist/react/index.js.map +1 -1
  105. package/dist/react-native/index.cjs +1 -1
  106. package/dist/react-native/index.cjs.map +1 -1
  107. package/dist/react-native/index.d.cts +9 -7
  108. package/dist/react-native/index.d.ts +9 -7
  109. package/dist/react-native/index.js +1 -1
  110. package/dist/react-native/index.js.map +1 -1
  111. package/dist/resolvers/index.cjs +1 -1
  112. package/dist/resolvers/index.cjs.map +1 -1
  113. package/dist/resolvers/index.d.cts +3 -2
  114. package/dist/resolvers/index.d.ts +3 -2
  115. package/dist/resolvers/index.js +1 -1
  116. package/dist/resolvers/joi.d.cts +3 -2
  117. package/dist/resolvers/joi.d.ts +3 -2
  118. package/dist/resolvers/yup.d.cts +3 -2
  119. package/dist/resolvers/yup.d.ts +3 -2
  120. package/dist/resolvers/zod.d.cts +3 -2
  121. package/dist/resolvers/zod.d.ts +3 -2
  122. package/dist/store-api-types-D-ZHxzRy.d.cts +161 -0
  123. package/dist/store-api-types-DPi30jQF.d.ts +161 -0
  124. package/dist/{bus-DgilLszS.d.ts → types-CG5nYeRk.d.ts} +76 -45
  125. package/dist/{bus-rcUiufS7.d.cts → types-D6LhF5GC.d.cts} +76 -45
  126. package/dist/{types-CUXh7PqD.d.cts → types-D8DgIUhJ.d.cts} +1 -1
  127. package/dist/{types-CUXh7PqD.d.ts → types-D8DgIUhJ.d.ts} +1 -1
  128. package/dist/{upload-EXnJLq8k.d.cts → upload-C2mpfhp1.d.cts} +1 -1
  129. package/dist/{upload-EXnJLq8k.d.ts → upload-C2mpfhp1.d.ts} +1 -1
  130. package/dist/{use-bit-persist-CIKFwtdM.d.cts → use-bit-persist-BTwy8kvA.d.ts} +8 -6
  131. package/dist/{use-bit-persist-Bc06fmqZ.d.ts → use-bit-persist-C2LHNTVv.d.cts} +8 -6
  132. package/dist/utils.cjs +2 -0
  133. package/dist/utils.cjs.map +1 -0
  134. package/dist/utils.d.cts +6 -0
  135. package/dist/utils.d.ts +6 -0
  136. package/dist/utils.js +2 -0
  137. package/dist/utils.js.map +1 -0
  138. package/dist/vue/index.cjs +1 -1
  139. package/dist/vue/index.cjs.map +1 -1
  140. package/dist/vue/index.d.cts +9 -7
  141. package/dist/vue/index.d.ts +9 -7
  142. package/dist/vue/index.js +1 -1
  143. package/dist/vue/index.js.map +1 -1
  144. package/package.json +32 -10
  145. package/dist/chunk-DIEE6LUO.js +0 -2
  146. package/dist/chunk-DIEE6LUO.js.map +0 -1
  147. package/dist/chunk-FUUQB4DV.cjs +0 -2
  148. package/dist/chunk-FUUQB4DV.cjs.map +0 -1
  149. package/dist/chunk-KWLLYQOL.cjs +0 -2
  150. package/dist/chunk-KWLLYQOL.cjs.map +0 -1
  151. package/dist/chunk-LIYZPSWM.js +0 -2
  152. package/dist/chunk-LIYZPSWM.js.map +0 -1
  153. package/dist/chunk-QAL6J5GQ.cjs +0 -2
  154. package/dist/chunk-QAL6J5GQ.cjs.map +0 -1
  155. package/dist/chunk-SA47B5OP.js +0 -2
  156. package/dist/chunk-SA47B5OP.js.map +0 -1
  157. package/dist/store-api-types-9ipdute1.d.ts +0 -187
  158. package/dist/store-api-types-B6_bPoVI.d.cts +0 -187
package/README.md CHANGED
@@ -104,11 +104,8 @@ Below are **measured results** from the quality benchmarks currently in this rep
104
104
  - Source tests:
105
105
  - `quality/bench/rhf-compare.test.ts`
106
106
  - `quality/bench/perf.test.ts`
107
- - `quality/e2e/tests/benchmark-compare.spec.ts`
108
107
  - Reproduce with:
109
108
  - `npm run test:bench:compare`
110
- - `npm run test:bench:compare:browser`
111
- - `npm run test:bench:compare:browser:prod`
112
109
  - `npm run test:bench`
113
110
 
114
111
  #### React benchmark methodology
@@ -119,7 +116,6 @@ The comparison now uses a more realistic and stricter setup:
119
116
  - validation is triggered once at the end of each measured cycle
120
117
  - React commit stabilization before and after each sample
121
118
  - larger load (`600` fields for bulk, `240` iterations for async burst)
122
- - browser confirmation with Playwright in both dev and production preview modes
123
119
 
124
120
  #### React benchmark (Bit-Form vs RHF/Formik/TanStack)
125
121
 
@@ -229,17 +225,21 @@ This branch currently allows breaking changes while architecture/performance wor
229
225
  - **New explicit `@lehnihon/bit-form/core` subpath** for store/runtime contracts. The package root is now curated for app usage and no longer mirrors every core helper/export.
230
226
  - **History default limit changed** from `15` to `50` (`history.limit`).
231
227
  - **Selector subscriptions no longer rely on deep value diff inference** when no `paths` are provided internally; updates are now path-driven for predictable performance.
232
- - **New `subscribeTracked`** was added to auto-track selector dependencies and re-track when selector branches change.
228
+ - **`subscribeSelector` now supports explicit modes**: `mode: "scoped"` (default, path-driven) and `mode: "tracked"` (auto-track with re-track on branch changes).
233
229
  - **`resolveBitStoreForHooks` now uses symbol branding** instead of duck-typing checks.
234
230
  - **SSR/Edge support improved** with injectable bus instances (`createBitBus`, `config.bus`, `initDevTools({ bus })`).
235
231
  - **Field `asyncValidate` now defaults to `blur` trigger**. To keep validation while typing, set `validation.asyncValidateOn: "change"` explicitly.
236
232
  - **Framework bindings now share internal binding-core helpers** for form meta and field-array orchestration, reducing adapter drift across React, Vue and Angular.
237
233
  - **New dedicated metadata subscriptions**: `subscribePersistMeta`, `subscribeHistoryMeta` and `subscribeScopeStatus` reduce adapter reliance on generic selectors/tracked subscriptions.
238
234
  - **React Native is now treated as a thin derivative of the React binding layer**, keeping only native-specific field adaptation.
235
+ - **Store capabilities are now first-class namespaces**: `read`, `observe`, `write`, `feature` are the primary contract and `slices` was removed in this major.
236
+ - **`BitStoreApi` now represents the namespaced contract only** (`read/observe/write/feature`). During dev migration, flat methods remain available in `BitStoreHooksApi` returned by `createBitStore` for internal/framework compatibility.
237
+ - **Capability registry indirection removed from runtime composition**: ports are wired directly in store runtime creation.
238
+ - **Devtools bus now stores a typed store port** (state/history/actions) instead of arbitrary store instance references.
239
239
 
240
240
  ### Migration quick notes
241
241
 
242
- - If you relied on implicit broad selector notifications, prefer explicit `paths` or use `subscribeTracked`.
242
+ - If you relied on broad selector notifications, migrate to `subscribeSelector` with `mode: "scoped"` + `paths`, or `mode: "tracked"` when auto-tracking is needed.
243
243
  - If you built internal adapters over generic metadata selectors, migrate to `subscribePersistMeta`, `subscribeHistoryMeta` and `subscribeScopeStatus`.
244
244
  - If you need old history density, set `history: { limit: 15 }` explicitly.
245
245
  - In SSR/Edge runtimes, create one bus per request scope and inject it into the store and DevTools.
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkIV32WXCFcjs = require('../chunk-IV32WXCF.cjs');var _chunkFUUQB4DVcjs = require('../chunk-FUUQB4DV.cjs');var _chunkPFPGASVZcjs = require('../chunk-PFPGASVZ.cjs');var _core = require('@angular/core');var g=new (0, _core.InjectionToken)("BIT_STORE");function at(t){return{provide:g,useValue:_chunkFUUQB4DVcjs.s.call(void 0, t)}}function u(){let t=_core.inject.call(void 0, g,{optional:!0});if(!t)throw new Error('BitForm: N\xE3o foi poss\xEDvel encontrar a BitStore. Certifique-se de que voc\xEA adicionou "provideBitStore(store)" nos providers do seu componente.');return t}function ut(){let t=u(),e=_core.inject.call(void 0, _core.DestroyRef),o=_core.signal.call(void 0, {isValid:!0,isDirty:!1,isSubmitting:!1}),r=_core.signal.call(void 0, null),s=_core.signal.call(void 0, null),i=_chunkFUUQB4DVcjs.y.call(void 0, t,S=>{o.set(S)});e.onDestroy(()=>i());let l=_core.computed.call(void 0, ()=>o().isValid),p=_core.computed.call(void 0, ()=>o().isSubmitting),m=_core.computed.call(void 0, ()=>o().isDirty),{controller:a,actions:n}=_chunkFUUQB4DVcjs.C.call(void 0, t,{clearSubmissionState:()=>{r.set(null),s.set(null)},setSubmissionResult:S=>{s.set(S)},setSubmissionError:S=>{r.set(S)}},{stopPropagation:!0});return{meta:{isValid:l,isDirty:m,isSubmitting:p,submitError:r.asReadonly(),lastResponse:s.asReadonly()},getValues:a.getValues,getErrors:a.getErrors,getTouched:a.getTouched,getDirtyValues:a.getDirtyValues,submit:a.submit,onSubmit:a.onSubmit,reset:a.reset,...n}}function E(t){let e=_core.inject.call(void 0, g),o=_core.signal.call(void 0, e.getFieldState(t)),r=_chunkFUUQB4DVcjs.D.call(void 0, e,t,y=>{o.set(y)});_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>{r(),_chunkFUUQB4DVcjs.G.call(void 0, e,t)});let s=_core.computed.call(void 0, ()=>o().value),i=_core.computed.call(void 0, ()=>_chunkFUUQB4DVcjs.I.call(void 0, o())),l=_core.computed.call(void 0, ()=>i().error),p=_core.computed.call(void 0, ()=>i().touched),m=_core.computed.call(void 0, ()=>i().invalid),a=_core.computed.call(void 0, ()=>i().isDirty),n=_core.computed.call(void 0, ()=>i().isValidating),f=_core.computed.call(void 0, ()=>i().isHidden),S=_core.computed.call(void 0, ()=>i().isRequired),{fieldController:F}=_chunkFUUQB4DVcjs.E.call(void 0, e,t),h=_core.computed.call(void 0, ()=>F.displayValue(s())),b=y=>{F.setValue(y)},T=()=>F.setBlur(),x=_core.computed.call(void 0, ()=>i().hasError);return{value:s,displayValue:h,setValue:b,setBlur:T,update:y=>b(_chunkPFPGASVZcjs.a.call(void 0, y)?_nullishCoalesce(_optionalChain([y, 'access', _2 => _2.target, 'optionalAccess', _3 => _3.value]), () => (null)):y),meta:{error:l,touched:p,invalid:m,isDirty:a,isValidating:n,isHidden:f,isRequired:S,hasError:x}}}function yt(t){let e=_core.inject.call(void 0, g),o=_core.inject.call(void 0, _core.DestroyRef),r=_chunkFUUQB4DVcjs.F.call(void 0, e,t),s=_core.signal.call(void 0, r.readItems()),i=e.subscribePath(t,()=>{s.set(r.readItems())});return o.onDestroy(()=>{i(),_chunkFUUQB4DVcjs.H.call(void 0, e,`${t}.`)}),{fields:_core.computed.call(void 0, ()=>r.getFields(s())),length:_core.computed.call(void 0, ()=>s().length),append:r.append,prepend:r.prepend,remove:r.remove,insert:r.insert,swap:r.swap,move:r.move,replace:r.replace,clear:r.clear}}function jt(){let t=u(),e=_core.inject.call(void 0, _core.DestroyRef),o=_core.signal.call(void 0, _chunkFUUQB4DVcjs.m.call(void 0, t)),r=_chunkFUUQB4DVcjs.n.call(void 0, t,s=>{o.set(s)});return e.onDestroy(()=>r()),{canUndo:_core.computed.call(void 0, ()=>o().canUndo),canRedo:_core.computed.call(void 0, ()=>o().canRedo),historyIndex:_core.computed.call(void 0, ()=>o().historyIndex),historySize:_core.computed.call(void 0, ()=>o().historySize),undo:()=>t.undo(),redo:()=>t.redo()}}function Pt(t){let e=u(),o=e.getStepStatus(t),r=_core.signal.call(void 0, o),s=_chunkFUUQB4DVcjs.r.call(void 0, e,t,n=>{r.set(n)});try{_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>s())}catch (e2){}let i=async()=>{let n=await e.validate({scope:t}),f=e.getStepErrors(t);return{valid:n,errors:f}},l=()=>e.getStepErrors(t),p=_core.computed.call(void 0, ()=>!r().hasErrors),m=_core.computed.call(void 0, ()=>r().isDirty),a=_core.computed.call(void 0, ()=>r().errors);return{scopeName:t,status:r,errors:a,validate:i,getErrors:l,isValid:p,isDirty:m,unsubscribe:s}}function Tt(t){let e=u(),o=_core.signal.call(void 0, 0),r=_core.computed.call(void 0, ()=>_nullishCoalesce(t[o()], () => (""))),s=()=>_nullishCoalesce(t[o()], () => ("")),i=_core.signal.call(void 0, e.getStepStatus(s())),l=()=>{let c=s(),B=e.getStepStatus(c),R=i();_chunkFUUQB4DVcjs.p.call(void 0, R,B)||i.set(B)},p=e.subscribeScopeStatus(s(),l),m=()=>{p(),p=e.subscribeScopeStatus(s(),l)};try{_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>p())}catch (e3){}let a=async()=>{let c=s(),B=await e.validate({scope:c}),R=e.getStepErrors(c);return{valid:B,errors:R}},n=()=>e.getStepErrors(s()),f=async()=>{let c=s(),B=e.getScopeFields(c);if(e.hasValidationsInProgress(B))return!1;let R=await e.validate({scope:c});if(R){let P=Math.min(o()+1,t.length-1);o.set(P),i.set(e.getStepStatus(_nullishCoalesce(t[P], () => ("")))),m()}else{let P=e.getStepErrors(c),A=Object.keys(P);A.length>0&&e.markFieldsTouched(A)}return R},S=()=>{let c=Math.max(o()-1,0);o.set(c),i.set(e.getStepStatus(_nullishCoalesce(t[c], () => ("")))),m()},F=c=>{let B=Math.max(0,Math.min(c-1,t.length-1));o.set(B),i.set(e.getStepStatus(_nullishCoalesce(t[B], () => ("")))),m()},h=_core.computed.call(void 0, ()=>o()+1),b=_core.computed.call(void 0, ()=>o()===0),T=_core.computed.call(void 0, ()=>o()>=t.length-1),x=_core.computed.call(void 0, ()=>!i().hasErrors),H=_core.computed.call(void 0, ()=>i().isDirty),y=_core.computed.call(void 0, ()=>i().errors);return{step:h,stepIndex:o,scope:r,next:f,prev:S,goTo:F,isFirst:b,isLast:T,status:i,errors:y,isValid:x,isDirty:H,validate:a,getErrors:n}}function Et(t){let e=u(),o=_core.inject.call(void 0, _core.DestroyRef),r=_core.signal.call(void 0, _chunkFUUQB4DVcjs.e.call(void 0, e.getState().values,t),{equal:_chunkFUUQB4DVcjs.c}),s=e.subscribePath(t,i=>{r.set(i)});return o.onDestroy(s),r.asReadonly()}function Ut(t,e,o){let r=_core.inject.call(void 0, g),s=E(t),i=null,l=_core.signal.call(void 0, !1),p={setLoading:n=>l.set(n),setError:(n,f)=>r.setError(n,f),setValue:n=>s.setValue(n),getUploadKey:()=>i,setUploadKey:n=>{i=n}},m=_chunkIV32WXCFcjs.a.call(void 0, t,e,p),a=_chunkIV32WXCFcjs.b.call(void 0, t,o,p);return{value:_core.computed.call(void 0, ()=>s.value()),setValue:s.setValue,error:_core.computed.call(void 0, ()=>s.meta.error()),isValidating:_core.computed.call(void 0, ()=>!!s.meta.isValidating()||l()),upload:m,remove:a}}function kt(){let t=u(),e=_core.signal.call(void 0, t.getPersistMetadata()),o=_chunkFUUQB4DVcjs.B.call(void 0, t,l=>{e.set(l)});try{_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>o())}catch (e4){}return{restore:async()=>t.restorePersisted(),save:async()=>{await t.forceSave()},clear:async()=>{await t.clearPersisted()},meta:{isSaving:_core.computed.call(void 0, ()=>e().isSaving),isRestoring:_core.computed.call(void 0, ()=>e().isRestoring),error:_core.computed.call(void 0, ()=>e().error)}}}exports.injectBitArray = yt; exports.injectBitField = E; exports.injectBitForm = ut; exports.injectBitHistory = jt; exports.injectBitPersist = kt; exports.injectBitScope = Pt; exports.injectBitSteps = Tt; exports.injectBitUpload = Ut; exports.injectBitWatch = Et; exports.provideBitStore = at; exports.useBitStore = u;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkIV32WXCFcjs = require('../chunk-IV32WXCF.cjs');require('../chunk-W5CLDRRE.cjs');var _chunkVZHG372Qcjs = require('../chunk-VZHG372Q.cjs');var _chunkMFTWAFMGcjs = require('../chunk-MFTWAFMG.cjs');var _chunkBSGJ3T5Scjs = require('../chunk-BSGJ3T5S.cjs');var _chunkD7JQWF6Vcjs = require('../chunk-D7JQWF6V.cjs');var _chunkM6WBNHITcjs = require('../chunk-M6WBNHIT.cjs');var _chunkT2JRSWQUcjs = require('../chunk-T2JRSWQU.cjs');var _chunkPFPGASVZcjs = require('../chunk-PFPGASVZ.cjs');var _core = require('@angular/core');var g=new (0, _core.InjectionToken)("BIT_STORE");function nt(t){return{provide:g,useValue:_chunkVZHG372Qcjs.d.call(void 0, t)}}function u(){let t=_core.inject.call(void 0, g,{optional:!0});if(!t)throw new Error('BitForm: N\xE3o foi poss\xEDvel encontrar a BitStore. Certifique-se de que voc\xEA adicionou "provideBitStore(store)" nos providers do seu componente.');return t}function lt(){let t=u(),e=_core.inject.call(void 0, _core.DestroyRef),r=_core.signal.call(void 0, {isValid:!0,isDirty:!1,isSubmitting:!1}),o=_core.signal.call(void 0, null),s=_core.signal.call(void 0, null),i=_chunkMFTWAFMGcjs.c.call(void 0, t,S=>{r.set(S)});e.onDestroy(()=>i());let l=_core.computed.call(void 0, ()=>r().isValid),p=_core.computed.call(void 0, ()=>r().isSubmitting),d=_core.computed.call(void 0, ()=>r().isDirty),{controller:a,actions:n}=_chunkMFTWAFMGcjs.g.call(void 0, t,{clearSubmissionState:()=>{o.set(null),s.set(null)},setSubmissionResult:S=>{s.set(S)},setSubmissionError:S=>{o.set(S)}},{stopPropagation:!0});return{meta:{isValid:l,isDirty:d,isSubmitting:p,submitError:o.asReadonly(),lastResponse:s.asReadonly()},getValues:a.getValues,getErrors:a.getErrors,getTouched:a.getTouched,getDirtyValues:a.getDirtyValues,submit:a.submit,onSubmit:a.onSubmit,reset:a.reset,...n}}function E(t){let e=_core.inject.call(void 0, g),r=_core.signal.call(void 0, e.read.getFieldState(t)),o=e.observe.subscribeFieldState(t,f=>{r.set(f)});_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>{o(),_chunkMFTWAFMGcjs.j.call(void 0, e,t)});let s=_core.computed.call(void 0, ()=>r().value),i=_core.computed.call(void 0, ()=>_chunkM6WBNHITcjs.c.call(void 0, r())),l=_core.computed.call(void 0, ()=>i().error),p=_core.computed.call(void 0, ()=>i().touched),d=_core.computed.call(void 0, ()=>i().invalid),a=_core.computed.call(void 0, ()=>i().isDirty),n=_core.computed.call(void 0, ()=>i().isValidating),B=_core.computed.call(void 0, ()=>i().isHidden),S=_core.computed.call(void 0, ()=>i().isRequired),{fieldController:j}=_chunkMFTWAFMGcjs.h.call(void 0, e,t),T=_core.computed.call(void 0, ()=>j.displayValue(s())),F=f=>{j.setValue(f)},h=()=>j.setBlur(),x=_core.computed.call(void 0, ()=>i().hasError);return{value:s,displayValue:T,setValue:F,setBlur:h,update:f=>F(_chunkPFPGASVZcjs.a.call(void 0, f)?_nullishCoalesce(_optionalChain([f, 'access', _2 => _2.target, 'optionalAccess', _3 => _3.value]), () => (null)):f),meta:{error:l,touched:p,invalid:d,isDirty:a,isValidating:n,isHidden:B,isRequired:S,hasError:x}}}function St(t){let e=_core.inject.call(void 0, g),r=_core.inject.call(void 0, _core.DestroyRef),o=_chunkMFTWAFMGcjs.i.call(void 0, e,t),s=_core.signal.call(void 0, o.readItems()),i=e.observe.subscribePath(t,()=>{s.set(o.readItems())});return r.onDestroy(()=>{i(),_chunkMFTWAFMGcjs.k.call(void 0, e,`${t}.`)}),{fields:_core.computed.call(void 0, ()=>o.getFields(s())),length:_core.computed.call(void 0, ()=>s().length),append:o.append,prepend:o.prepend,remove:o.remove,insert:o.insert,swap:o.swap,move:o.move,replace:o.replace,clear:o.clear}}function gt(){let t=u(),e=_core.inject.call(void 0, _core.DestroyRef),r=_core.signal.call(void 0, _chunkD7JQWF6Vcjs.f.call(void 0, t)),o=_chunkD7JQWF6Vcjs.g.call(void 0, t,s=>{r.set(s)});return e.onDestroy(()=>o()),{canUndo:_core.computed.call(void 0, ()=>r().canUndo),canRedo:_core.computed.call(void 0, ()=>r().canRedo),historyIndex:_core.computed.call(void 0, ()=>r().historyIndex),historySize:_core.computed.call(void 0, ()=>r().historySize),undo:()=>t.feature.undo(),redo:()=>t.feature.redo()}}function Ft(t){let e=u(),r=e.read.getScopeStatus(t),o=_core.signal.call(void 0, r),s=_chunkBSGJ3T5Scjs.a.call(void 0, e,t,n=>{o.set(n)});try{_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>s())}catch (e2){}let i=async()=>{let n=await e.write.validate({scope:t}),B=e.read.getScopeErrors(t);return{valid:n,errors:B}},l=()=>e.read.getScopeErrors(t),p=_core.computed.call(void 0, ()=>!o().hasErrors),d=_core.computed.call(void 0, ()=>o().isDirty),a=_core.computed.call(void 0, ()=>o().errors);return{scopeName:t,status:o,errors:a,validate:i,getErrors:l,isValid:p,isDirty:d,unsubscribe:s}}function Tt(t){let e=u(),r=_core.signal.call(void 0, 0),o=_core.computed.call(void 0, ()=>_nullishCoalesce(t[r()], () => (""))),s=()=>_nullishCoalesce(t[r()], () => ("")),i=_core.signal.call(void 0, e.read.getScopeStatus(s())),l=()=>{let c=s(),y=e.read.getScopeStatus(c),R=i();_chunkD7JQWF6Vcjs.b.call(void 0, R,y)||i.set(y)},p=e.observe.subscribeScopeStatus(s(),l),d=()=>{p(),p=e.observe.subscribeScopeStatus(s(),l)};try{_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>p())}catch (e3){}let a=async()=>{let c=s(),y=await e.write.validate({scope:c}),R=e.read.getScopeErrors(c);return{valid:y,errors:R}},n=()=>e.read.getScopeErrors(s()),B=async()=>{let c=s(),y=e.read.getScopeFields(c);if(e.feature.hasValidationsInProgress(y))return!1;let R=await e.write.validate({scope:c});if(R){let v=Math.min(r()+1,t.length-1);r.set(v),i.set(e.read.getScopeStatus(_nullishCoalesce(t[v], () => ("")))),d()}else{let v=e.read.getScopeErrors(c),k=Object.keys(v);k.length>0&&e.write.markFieldsTouched(k)}return R},S=()=>{let c=Math.max(r()-1,0);r.set(c),i.set(e.read.getScopeStatus(_nullishCoalesce(t[c], () => ("")))),d()},j=c=>{let y=Math.max(0,Math.min(c-1,t.length-1));r.set(y),i.set(e.read.getScopeStatus(_nullishCoalesce(t[y], () => ("")))),d()},T=_core.computed.call(void 0, ()=>r()+1),F=_core.computed.call(void 0, ()=>r()===0),h=_core.computed.call(void 0, ()=>r()>=t.length-1),x=_core.computed.call(void 0, ()=>!i().hasErrors),U=_core.computed.call(void 0, ()=>i().isDirty),f=_core.computed.call(void 0, ()=>i().errors);return{step:T,stepIndex:r,scope:o,next:B,prev:S,goTo:j,isFirst:F,isLast:h,status:i,errors:f,isValid:x,isDirty:U,validate:a,getErrors:n}}function It(t){let e=u(),r=_core.inject.call(void 0, _core.DestroyRef),o=_core.signal.call(void 0, _chunkT2JRSWQUcjs.f.call(void 0, e.read.getState().values,t),{equal:_chunkT2JRSWQUcjs.c}),s=e.observe.subscribePath(t,i=>{o.set(i)});return r.onDestroy(s),o.asReadonly()}function wt(t,e,r){let o=_core.inject.call(void 0, g),s=E(t),i=null,l=_core.signal.call(void 0, !1),p={setLoading:n=>l.set(n),setError:(n,B)=>o.write.setError(n,B),setValue:n=>s.setValue(n),getUploadKey:()=>i,setUploadKey:n=>{i=n}},d=_chunkIV32WXCFcjs.a.call(void 0, t,e,p),a=_chunkIV32WXCFcjs.b.call(void 0, t,r,p);return{value:_core.computed.call(void 0, ()=>s.value()),setValue:s.setValue,error:_core.computed.call(void 0, ()=>s.meta.error()),isValidating:_core.computed.call(void 0, ()=>!!s.meta.isValidating()||l()),upload:d,remove:a}}function Mt(){let t=u(),e=_core.signal.call(void 0, t.read.getPersistMetadata()),r=_chunkMFTWAFMGcjs.f.call(void 0, t,l=>{e.set(l)});try{_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>r())}catch (e4){}return{restore:async()=>t.feature.restorePersisted(),save:async()=>{await t.feature.forceSave()},clear:async()=>{await t.feature.clearPersisted()},meta:{isSaving:_core.computed.call(void 0, ()=>e().isSaving),isRestoring:_core.computed.call(void 0, ()=>e().isRestoring),error:_core.computed.call(void 0, ()=>e().error)}}}exports.injectBitArray = St; exports.injectBitField = E; exports.injectBitForm = lt; exports.injectBitHistory = gt; exports.injectBitPersist = Mt; exports.injectBitScope = Ft; exports.injectBitSteps = Tt; exports.injectBitUpload = wt; exports.injectBitWatch = It; exports.provideBitStore = nt; exports.useBitStore = u;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/angular/index.cjs","../../src/angular/provider.ts","../../src/angular/inject-bit-form.ts","../../src/angular/inject-bit-field.ts","../../src/angular/inject-bit-array.ts"],"names":["BIT_STORE_TOKEN","InjectionToken","provideBitStore","store","resolveBitStoreForHooks","useBitStore","inject","injectBitForm","destroyRef","stateSignal","signal","submitError","lastResponse","sub","observeFormMetaSnapshot","nextMeta","isValid","computed","isSubmitting","isDirty","controller","actions","createFrameworkFormBinding","result","error","injectBitField","path","unsubscribe","subscribeFieldState","nextState","cleanupRegisteredField","value","metaState","deriveFieldMeta","touched","invalid","isValidating","isHidden","isRequired","fieldController","createFrameworkMaskedFieldBinding","displayValue","setValue","val","setBlur","hasError","e","isBitFieldInputEventObject","injectBitArray","createArrayBindingController","valuesSig","unsub","cleanupRegisteredPrefix"],"mappings":"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","file":"/home/runner/work/bit-form/bit-form/dist/angular/index.cjs","sourcesContent":[null,"import { inject, InjectionToken, Provider } from \"@angular/core\";\nimport type { BitFormBindingApi, BitStoreHooksApi } from \"../core\";\nimport { resolveBitStoreForHooks } from \"../core\";\n\nexport const BIT_STORE_TOKEN = new InjectionToken<BitFormBindingApi<any>>(\n \"BIT_STORE\",\n);\n\nexport function provideBitStore<T extends object>(\n store: BitStoreHooksApi<T>,\n): Provider {\n return { provide: BIT_STORE_TOKEN, useValue: resolveBitStoreForHooks(store) };\n}\n\nexport function useBitStore<T extends object>() {\n const store = inject(BIT_STORE_TOKEN, { optional: true });\n\n if (!store) {\n throw new Error(\n \"BitForm: Não foi possível encontrar a BitStore. \" +\n 'Certifique-se de que você adicionou \"provideBitStore(store)\" nos providers do seu componente.',\n );\n }\n\n return store as BitFormBindingApi<T>;\n}\n","import { signal, computed, inject, DestroyRef } from \"@angular/core\";\nimport { useBitStore } from \"./provider\";\nimport { createFrameworkFormBinding, observeFormMetaSnapshot } from \"../core\";\nimport type { InjectBitFormResult } from \"./types\";\n\nexport function injectBitForm<T extends object>(): InjectBitFormResult<T> {\n const store = useBitStore<T>();\n const destroyRef = inject(DestroyRef);\n const stateSignal = signal({\n isValid: true,\n isDirty: false,\n isSubmitting: false,\n });\n const submitError = signal<Error | null>(null);\n const lastResponse = signal<unknown>(null);\n\n const sub = observeFormMetaSnapshot(store, (nextMeta) => {\n stateSignal.set(nextMeta);\n });\n\n destroyRef.onDestroy(() => sub());\n\n const isValid = computed(() => stateSignal().isValid);\n const isSubmitting = computed(() => stateSignal().isSubmitting);\n const isDirty = computed(() => stateSignal().isDirty);\n\n const { controller, actions } = createFrameworkFormBinding(\n store,\n {\n clearSubmissionState: () => {\n submitError.set(null);\n lastResponse.set(null);\n },\n setSubmissionResult: (result) => {\n lastResponse.set(result);\n },\n setSubmissionError: (error) => {\n submitError.set(error);\n },\n },\n { stopPropagation: true },\n );\n\n const meta = {\n isValid,\n isDirty,\n isSubmitting,\n submitError: submitError.asReadonly(),\n lastResponse: lastResponse.asReadonly(),\n };\n\n return {\n // Metadata (grouped)\n meta,\n // Getters\n getValues: controller.getValues,\n getErrors: controller.getErrors,\n getTouched: controller.getTouched,\n getDirtyValues: controller.getDirtyValues,\n // Main actions (frequent use - flat)\n submit: controller.submit,\n onSubmit: controller.onSubmit,\n reset: controller.reset,\n ...actions,\n };\n}\n","import { inject, DestroyRef, computed, signal } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport {\n BitPath,\n BitPathValue,\n cleanupRegisteredField,\n createFrameworkMaskedFieldBinding,\n deriveFieldMeta,\n isBitFieldInputEventObject,\n subscribeFieldState,\n} from \"../core\";\nimport type {\n BitFieldInputEvent,\n InjectBitFieldMeta,\n InjectBitFieldResult,\n} from \"./types\";\n\nexport function injectBitField<\n TValue = any,\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P): InjectBitFieldResult<TForm, P> {\n const store = inject(BIT_STORE_TOKEN);\n\n const stateSignal = signal(store.getFieldState(path));\n\n const unsubscribe = subscribeFieldState(store, path, (nextState) => {\n stateSignal.set(nextState);\n });\n\n inject(DestroyRef).onDestroy(() => {\n unsubscribe();\n cleanupRegisteredField(store, path as string);\n });\n\n const value = computed(() => stateSignal().value as BitPathValue<TForm, P>);\n const metaState = computed(() => deriveFieldMeta(stateSignal()));\n const error = computed(() => metaState().error);\n const touched = computed(() => metaState().touched);\n const invalid = computed(() => metaState().invalid);\n const isDirty = computed(() => metaState().isDirty);\n const isValidating = computed(() => metaState().isValidating);\n const isHidden = computed(() => metaState().isHidden);\n const isRequired = computed(() => metaState().isRequired);\n\n const { fieldController } = createFrameworkMaskedFieldBinding(store, path);\n\n const displayValue = computed(() => fieldController.displayValue(value()));\n\n const setValue = (\n val: BitPathValue<TForm, P> | string | number | null | undefined,\n ) => {\n fieldController.setValue(val);\n };\n\n const setBlur = () => fieldController.setBlur();\n\n const hasError = computed(() => metaState().hasError);\n\n const update = (e: BitFieldInputEvent) =>\n setValue(isBitFieldInputEventObject(e) ? (e.target?.value ?? null) : e);\n\n return {\n // Main handlers and values (flat)\n value,\n displayValue,\n setValue,\n setBlur,\n update,\n // Metadata (grouped)\n meta: {\n error,\n touched,\n invalid,\n isDirty,\n isValidating,\n isHidden,\n isRequired,\n hasError,\n },\n };\n}\n","import { DestroyRef, signal, computed, inject } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport {\n createArrayBindingController,\n BitArrayPath,\n BitPathValue,\n BitArrayItem,\n cleanupRegisteredPrefix,\n} from \"../core\";\n\nexport function injectBitArray<\n TForm extends object = any,\n P extends BitArrayPath<TForm> = BitArrayPath<TForm>,\n>(path: P) {\n const store = inject(BIT_STORE_TOKEN);\n const destroyRef = inject(DestroyRef);\n const controller = createArrayBindingController<TForm, P>(store, path);\n\n const valuesSig = signal<BitArrayItem<BitPathValue<TForm, P>>[]>(\n controller.readItems(),\n );\n\n const unsub = store.subscribePath(path, () => {\n valuesSig.set(controller.readItems());\n });\n\n destroyRef.onDestroy(() => {\n unsub();\n cleanupRegisteredPrefix(store, `${path as string}.`);\n });\n\n return {\n fields: computed(() => controller.getFields(valuesSig())),\n length: computed(() => valuesSig().length),\n append: controller.append,\n prepend: controller.prepend,\n remove: controller.remove,\n insert: controller.insert,\n swap: controller.swap,\n move: controller.move,\n replace: controller.replace,\n clear: controller.clear,\n };\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/angular/index.cjs","../../src/angular/provider.ts","../../src/angular/inject-bit-form.ts","../../src/angular/inject-bit-field.ts","../../src/angular/inject-bit-array.ts"],"names":["BIT_STORE_TOKEN","InjectionToken","provideBitStore","store","createFrameworkStoreAdapter","useBitStore","inject","injectBitForm","destroyRef","stateSignal","signal","submitError","lastResponse","sub","observeFormMetaSnapshot","nextMeta","isValid","computed","isSubmitting","isDirty","controller","actions","createFrameworkFormBinding","result","error","injectBitField","path","unsubscribe","nextState","cleanupRegisteredField","value","metaState","deriveFieldMeta","touched","invalid","isValidating","isHidden","isRequired","fieldController","createFrameworkMaskedFieldBinding","displayValue","setValue","val","setBlur","hasError","e","isBitFieldInputEventObject","injectBitArray","createArrayBindingController","valuesSig","unsub","cleanupRegisteredPrefix"],"mappings":"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","file":"/home/runner/work/bit-form/bit-form/dist/angular/index.cjs","sourcesContent":[null,"import { inject, InjectionToken, Provider } from \"@angular/core\";\nimport type { BitFrameworkStoreApi, BitStoreApi } from \"../core\";\nimport { createFrameworkStoreAdapter } from \"../core\";\n\nexport const BIT_STORE_TOKEN = new InjectionToken<BitFrameworkStoreApi<any>>(\n \"BIT_STORE\",\n);\n\nexport function provideBitStore<T extends object>(\n store: BitFrameworkStoreApi<T> | BitStoreApi<T>,\n): Provider {\n return {\n provide: BIT_STORE_TOKEN,\n useValue: createFrameworkStoreAdapter<T>(store),\n };\n}\n\nexport function useBitStore<T extends object>() {\n const store = inject(BIT_STORE_TOKEN, { optional: true });\n\n if (!store) {\n throw new Error(\n \"BitForm: Não foi possível encontrar a BitStore. \" +\n 'Certifique-se de que você adicionou \"provideBitStore(store)\" nos providers do seu componente.',\n );\n }\n\n return store as BitFrameworkStoreApi<T>;\n}\n","import { signal, computed, inject, DestroyRef } from \"@angular/core\";\nimport { useBitStore } from \"./provider\";\nimport { createFrameworkFormBinding, observeFormMetaSnapshot } from \"../core\";\nimport type { InjectBitFormResult } from \"./types\";\n\nexport function injectBitForm<T extends object>(): InjectBitFormResult<T> {\n const store = useBitStore<T>();\n const destroyRef = inject(DestroyRef);\n const stateSignal = signal({\n isValid: true,\n isDirty: false,\n isSubmitting: false,\n });\n const submitError = signal<Error | null>(null);\n const lastResponse = signal<unknown>(null);\n\n const sub = observeFormMetaSnapshot(store, (nextMeta) => {\n stateSignal.set(nextMeta);\n });\n\n destroyRef.onDestroy(() => sub());\n\n const isValid = computed(() => stateSignal().isValid);\n const isSubmitting = computed(() => stateSignal().isSubmitting);\n const isDirty = computed(() => stateSignal().isDirty);\n\n const { controller, actions } = createFrameworkFormBinding(\n store,\n {\n clearSubmissionState: () => {\n submitError.set(null);\n lastResponse.set(null);\n },\n setSubmissionResult: (result) => {\n lastResponse.set(result);\n },\n setSubmissionError: (error) => {\n submitError.set(error);\n },\n },\n { stopPropagation: true },\n );\n\n const meta = {\n isValid,\n isDirty,\n isSubmitting,\n submitError: submitError.asReadonly(),\n lastResponse: lastResponse.asReadonly(),\n };\n\n return {\n // Metadata (grouped)\n meta,\n // Getters\n getValues: controller.getValues,\n getErrors: controller.getErrors,\n getTouched: controller.getTouched,\n getDirtyValues: controller.getDirtyValues,\n // Main actions (frequent use - flat)\n submit: controller.submit,\n onSubmit: controller.onSubmit,\n reset: controller.reset,\n ...actions,\n };\n}\n","import { inject, DestroyRef, computed, signal } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport {\n BitPath,\n BitPathValue,\n cleanupRegisteredField,\n createFrameworkMaskedFieldBinding,\n deriveFieldMeta,\n isBitFieldInputEventObject,\n} from \"../core\";\nimport type {\n BitFieldInputEvent,\n InjectBitFieldResult,\n} from \"./types\";\n\nexport function injectBitField<\n TValue = any,\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P): InjectBitFieldResult<TForm, P> {\n const store = inject(BIT_STORE_TOKEN);\n\n const stateSignal = signal(store.read.getFieldState(path));\n\n const unsubscribe = store.observe.subscribeFieldState(path, (nextState) => {\n stateSignal.set(nextState);\n });\n\n inject(DestroyRef).onDestroy(() => {\n unsubscribe();\n cleanupRegisteredField(store, path as string);\n });\n\n const value = computed(() => stateSignal().value as BitPathValue<TForm, P>);\n const metaState = computed(() => deriveFieldMeta(stateSignal()));\n const error = computed(() => metaState().error);\n const touched = computed(() => metaState().touched);\n const invalid = computed(() => metaState().invalid);\n const isDirty = computed(() => metaState().isDirty);\n const isValidating = computed(() => metaState().isValidating);\n const isHidden = computed(() => metaState().isHidden);\n const isRequired = computed(() => metaState().isRequired);\n\n const { fieldController } = createFrameworkMaskedFieldBinding(store, path);\n\n const displayValue = computed(() => fieldController.displayValue(value()));\n\n const setValue = (\n val: BitPathValue<TForm, P> | string | number | null | undefined,\n ) => {\n fieldController.setValue(val);\n };\n\n const setBlur = () => fieldController.setBlur();\n\n const hasError = computed(() => metaState().hasError);\n\n const update = (e: BitFieldInputEvent) =>\n setValue(isBitFieldInputEventObject(e) ? (e.target?.value ?? null) : e);\n\n return {\n // Main handlers and values (flat)\n value,\n displayValue,\n setValue,\n setBlur,\n update,\n // Metadata (grouped)\n meta: {\n error,\n touched,\n invalid,\n isDirty,\n isValidating,\n isHidden,\n isRequired,\n hasError,\n },\n };\n}\n","import { DestroyRef, signal, computed, inject } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport {\n createArrayBindingController,\n BitArrayPath,\n BitPathValue,\n BitArrayItem,\n cleanupRegisteredPrefix,\n} from \"../core\";\n\nexport function injectBitArray<\n TForm extends object = any,\n P extends BitArrayPath<TForm> = BitArrayPath<TForm>,\n>(path: P) {\n const store = inject(BIT_STORE_TOKEN);\n const destroyRef = inject(DestroyRef);\n const controller = createArrayBindingController<TForm, P>(store, path);\n\n const valuesSig = signal<BitArrayItem<BitPathValue<TForm, P>>[]>(\n controller.readItems(),\n );\n\n const unsub = store.observe.subscribePath(path, () => {\n valuesSig.set(controller.readItems());\n });\n\n destroyRef.onDestroy(() => {\n unsub();\n cleanupRegisteredPrefix(store, `${path as string}.`);\n });\n\n return {\n fields: computed(() => controller.getFields(valuesSig())),\n length: computed(() => valuesSig().length),\n append: controller.append,\n prepend: controller.prepend,\n remove: controller.remove,\n insert: controller.insert,\n swap: controller.swap,\n move: controller.move,\n replace: controller.replace,\n clear: controller.clear,\n };\n}\n"]}
@@ -1,14 +1,16 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { Provider, Signal } from '@angular/core';
3
- import { a as BitStoreHooksApi, b as BitFormBindingApi, d as BitValidationOptions } from '../store-api-types-B6_bPoVI.cjs';
4
- import { e as BitPath, b as BitPathValue, i as BitPersistMetadata, V as ValidateScopeResult, c as BitErrors, r as BitTouched, D as DeepPartial, B as BitArrayPath, a as BitArrayItem, S as ScopeStatus } from '../bus-rcUiufS7.cjs';
5
- import { B as BitFieldInputEvent } from '../field-binding-X5TkvfUt.cjs';
6
- import { B as BitArrayBindingField } from '../array-controller-C1A5VKYd.cjs';
7
- import { B as BitUploadFn, a as BitDeleteUploadFn } from '../upload-EXnJLq8k.cjs';
8
- import '../types-CUXh7PqD.cjs';
3
+ import { b as BitFrameworkStoreApi, e as BitStoreApi } from '../store-api-types-D-ZHxzRy.cjs';
4
+ import '../bus-ZLQeq4Vr.cjs';
5
+ import { u as BitPath, v as BitPathValue, x as BitPersistMetadata, V as ValidateScopeResult, k as BitErrors, I as BitTouched, L as DeepPartial, c as BitArrayPath, b as BitArrayItem, S as ScopeStatus } from '../types-D6LhF5GC.cjs';
6
+ import { b as BitValidationOptions } from '../meta-types-Bzmm21TP.cjs';
7
+ import { B as BitFieldInputEvent } from '../field-binding-B_OX3bjp.cjs';
8
+ import { a as BitArrayBindingField } from '../array-controller-B5bfXV1W.cjs';
9
+ import { a as BitUploadFn, B as BitDeleteUploadFn } from '../upload-C2mpfhp1.cjs';
10
+ import '../types-D8DgIUhJ.cjs';
9
11
 
10
- declare function provideBitStore<T extends object>(store: BitStoreHooksApi<T>): Provider;
11
- declare function useBitStore<T extends object>(): BitFormBindingApi<T>;
12
+ declare function provideBitStore<T extends object>(store: BitFrameworkStoreApi<T> | BitStoreApi<T>): Provider;
13
+ declare function useBitStore<T extends object>(): BitFrameworkStoreApi<T>;
12
14
 
13
15
  /**
14
16
  * Metadata describing the current state of a form field (Angular Signal).
@@ -1,14 +1,16 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { Provider, Signal } from '@angular/core';
3
- import { a as BitStoreHooksApi, b as BitFormBindingApi, d as BitValidationOptions } from '../store-api-types-9ipdute1.js';
4
- import { e as BitPath, b as BitPathValue, i as BitPersistMetadata, V as ValidateScopeResult, c as BitErrors, r as BitTouched, D as DeepPartial, B as BitArrayPath, a as BitArrayItem, S as ScopeStatus } from '../bus-DgilLszS.js';
5
- import { B as BitFieldInputEvent } from '../field-binding-Bi1g-D8X.js';
6
- import { B as BitArrayBindingField } from '../array-controller-DtkmcnUr.js';
7
- import { B as BitUploadFn, a as BitDeleteUploadFn } from '../upload-EXnJLq8k.js';
8
- import '../types-CUXh7PqD.js';
3
+ import { b as BitFrameworkStoreApi, e as BitStoreApi } from '../store-api-types-DPi30jQF.js';
4
+ import '../bus-B2VEKrPI.js';
5
+ import { u as BitPath, v as BitPathValue, x as BitPersistMetadata, V as ValidateScopeResult, k as BitErrors, I as BitTouched, L as DeepPartial, c as BitArrayPath, b as BitArrayItem, S as ScopeStatus } from '../types-CG5nYeRk.js';
6
+ import { b as BitValidationOptions } from '../meta-types-Bzmm21TP.js';
7
+ import { B as BitFieldInputEvent } from '../field-binding-MX6jVQbT.js';
8
+ import { a as BitArrayBindingField } from '../array-controller-Cx-DMH7Y.js';
9
+ import { a as BitUploadFn, B as BitDeleteUploadFn } from '../upload-C2mpfhp1.js';
10
+ import '../types-D8DgIUhJ.js';
9
11
 
10
- declare function provideBitStore<T extends object>(store: BitStoreHooksApi<T>): Provider;
11
- declare function useBitStore<T extends object>(): BitFormBindingApi<T>;
12
+ declare function provideBitStore<T extends object>(store: BitFrameworkStoreApi<T> | BitStoreApi<T>): Provider;
13
+ declare function useBitStore<T extends object>(): BitFrameworkStoreApi<T>;
12
14
 
13
15
  /**
14
16
  * Metadata describing the current state of a form field (Angular Signal).
@@ -1,2 +1,2 @@
1
- import{a as N,b as tt}from"../chunk-O5UPA33R.js";import{B as z,C as L,D as G,E as J,F as Q,G as X,H as Y,I as Z,c as M,e as k,m as O,n as _,p as q,r as K,s as C,y as W}from"../chunk-SA47B5OP.js";import{a as $}from"../chunk-3NUJVIAM.js";import{inject as it,InjectionToken as nt}from"@angular/core";var g=new nt("BIT_STORE");function at(t){return{provide:g,useValue:C(t)}}function u(){let t=it(g,{optional:!0});if(!t)throw new Error('BitForm: N\xE3o foi poss\xEDvel encontrar a BitStore. Certifique-se de que voc\xEA adicionou "provideBitStore(store)" nos providers do seu componente.');return t}import{signal as V,computed as I,inject as ct,DestroyRef as lt}from"@angular/core";function ut(){let t=u(),e=ct(lt),o=V({isValid:!0,isDirty:!1,isSubmitting:!1}),r=V(null),s=V(null),i=W(t,S=>{o.set(S)});e.onDestroy(()=>i());let l=I(()=>o().isValid),p=I(()=>o().isSubmitting),m=I(()=>o().isDirty),{controller:a,actions:n}=L(t,{clearSubmissionState:()=>{r.set(null),s.set(null)},setSubmissionResult:S=>{s.set(S)},setSubmissionError:S=>{r.set(S)}},{stopPropagation:!0});return{meta:{isValid:l,isDirty:m,isSubmitting:p,submitError:r.asReadonly(),lastResponse:s.asReadonly()},getValues:a.getValues,getErrors:a.getErrors,getTouched:a.getTouched,getDirtyValues:a.getDirtyValues,submit:a.submit,onSubmit:a.onSubmit,reset:a.reset,...n}}import{inject as et,DestroyRef as pt,computed as d,signal as mt}from"@angular/core";function E(t){let e=et(g),o=mt(e.getFieldState(t)),r=G(e,t,y=>{o.set(y)});et(pt).onDestroy(()=>{r(),X(e,t)});let s=d(()=>o().value),i=d(()=>Z(o())),l=d(()=>i().error),p=d(()=>i().touched),m=d(()=>i().invalid),a=d(()=>i().isDirty),n=d(()=>i().isValidating),f=d(()=>i().isHidden),S=d(()=>i().isRequired),{fieldController:F}=J(e,t),h=d(()=>F.displayValue(s())),b=y=>{F.setValue(y)},T=()=>F.setBlur(),x=d(()=>i().hasError);return{value:s,displayValue:h,setValue:b,setBlur:T,update:y=>b($(y)?y.target?.value??null:y),meta:{error:l,touched:p,invalid:m,isDirty:a,isValidating:n,isHidden:f,isRequired:S,hasError:x}}}import{DestroyRef as dt,signal as St,computed as ot,inject as rt}from"@angular/core";function yt(t){let e=rt(g),o=rt(dt),r=Q(e,t),s=St(r.readItems()),i=e.subscribePath(t,()=>{s.set(r.readItems())});return o.onDestroy(()=>{i(),Y(e,`${t}.`)}),{fields:ot(()=>r.getFields(s())),length:ot(()=>s().length),append:r.append,prepend:r.prepend,remove:r.remove,insert:r.insert,swap:r.swap,move:r.move,replace:r.replace,clear:r.clear}}import{computed as v,DestroyRef as Bt,inject as ft,signal as gt}from"@angular/core";function jt(){let t=u(),e=ft(Bt),o=gt(O(t)),r=_(t,s=>{o.set(s)});return e.onDestroy(()=>r()),{canUndo:v(()=>o().canUndo),canRedo:v(()=>o().canRedo),historyIndex:v(()=>o().historyIndex),historySize:v(()=>o().historySize),undo:()=>t.undo(),redo:()=>t.redo()}}import{signal as Rt,computed as D,DestroyRef as Ft,inject as bt}from"@angular/core";function Pt(t){let e=u(),o=e.getStepStatus(t),r=Rt(o),s=K(e,t,n=>{r.set(n)});try{bt(Ft).onDestroy(()=>s())}catch{}let i=async()=>{let n=await e.validate({scope:t}),f=e.getStepErrors(t);return{valid:n,errors:f}},l=()=>e.getStepErrors(t),p=D(()=>!r().hasErrors),m=D(()=>r().isDirty),a=D(()=>r().errors);return{scopeName:t,status:r,errors:a,validate:i,getErrors:l,isValid:p,isDirty:m,unsubscribe:s}}import{signal as st,computed as j,DestroyRef as vt,inject as ht}from"@angular/core";function Tt(t){let e=u(),o=st(0),r=j(()=>t[o()]??""),s=()=>t[o()]??"",i=st(e.getStepStatus(s())),l=()=>{let c=s(),B=e.getStepStatus(c),R=i();q(R,B)||i.set(B)},p=e.subscribeScopeStatus(s(),l),m=()=>{p(),p=e.subscribeScopeStatus(s(),l)};try{ht(vt).onDestroy(()=>p())}catch{}let a=async()=>{let c=s(),B=await e.validate({scope:c}),R=e.getStepErrors(c);return{valid:B,errors:R}},n=()=>e.getStepErrors(s()),f=async()=>{let c=s(),B=e.getScopeFields(c);if(e.hasValidationsInProgress(B))return!1;let R=await e.validate({scope:c});if(R){let P=Math.min(o()+1,t.length-1);o.set(P),i.set(e.getStepStatus(t[P]??"")),m()}else{let P=e.getStepErrors(c),A=Object.keys(P);A.length>0&&e.markFieldsTouched(A)}return R},S=()=>{let c=Math.max(o()-1,0);o.set(c),i.set(e.getStepStatus(t[c]??"")),m()},F=c=>{let B=Math.max(0,Math.min(c-1,t.length-1));o.set(B),i.set(e.getStepStatus(t[B]??"")),m()},h=j(()=>o()+1),b=j(()=>o()===0),T=j(()=>o()>=t.length-1),x=j(()=>!i().hasErrors),H=j(()=>i().isDirty),y=j(()=>i().errors);return{step:h,stepIndex:o,scope:r,next:f,prev:S,goTo:F,isFirst:b,isLast:T,status:i,errors:y,isValid:x,isDirty:H,validate:a,getErrors:n}}import{DestroyRef as xt,signal as Vt,inject as It}from"@angular/core";function Et(t){let e=u(),o=It(xt),r=Vt(k(e.getState().values,t),{equal:M}),s=e.subscribePath(t,i=>{r.set(i)});return o.onDestroy(s),r.asReadonly()}import{computed as w,inject as Dt,signal as wt}from"@angular/core";function Ut(t,e,o){let r=Dt(g),s=E(t),i=null,l=wt(!1),p={setLoading:n=>l.set(n),setError:(n,f)=>r.setError(n,f),setValue:n=>s.setValue(n),getUploadKey:()=>i,setUploadKey:n=>{i=n}},m=N(t,e,p),a=tt(t,o,p);return{value:w(()=>s.value()),setValue:s.setValue,error:w(()=>s.meta.error()),isValidating:w(()=>!!s.meta.isValidating()||l()),upload:m,remove:a}}import{computed as U,inject as Ht,signal as At,DestroyRef as Mt}from"@angular/core";function kt(){let t=u(),e=At(t.getPersistMetadata()),o=z(t,l=>{e.set(l)});try{Ht(Mt).onDestroy(()=>o())}catch{}return{restore:async()=>t.restorePersisted(),save:async()=>{await t.forceSave()},clear:async()=>{await t.clearPersisted()},meta:{isSaving:U(()=>e().isSaving),isRestoring:U(()=>e().isRestoring),error:U(()=>e().error)}}}export{yt as injectBitArray,E as injectBitField,ut as injectBitForm,jt as injectBitHistory,kt as injectBitPersist,Pt as injectBitScope,Tt as injectBitSteps,Ut as injectBitUpload,Et as injectBitWatch,at as provideBitStore,u as useBitStore};
1
+ import{a as Z,b as N}from"../chunk-O5UPA33R.js";import"../chunk-5NA2TFPG.js";import{d as K}from"../chunk-UQ3DSUWC.js";import{c as C,f as W,g as z,h as $,i as G,j as J,k as Q}from"../chunk-E2NZR44P.js";import{a as X}from"../chunk-W2E5UIXT.js";import{b as O,f as _,g as q}from"../chunk-EQ55DKX2.js";import{c as Y}from"../chunk-63OJBMKK.js";import{c as M,f as H}from"../chunk-RD73EBSN.js";import{a as L}from"../chunk-3NUJVIAM.js";import{inject as st,InjectionToken as it}from"@angular/core";var g=new it("BIT_STORE");function nt(t){return{provide:g,useValue:K(t)}}function u(){let t=st(g,{optional:!0});if(!t)throw new Error('BitForm: N\xE3o foi poss\xEDvel encontrar a BitStore. Certifique-se de que voc\xEA adicionou "provideBitStore(store)" nos providers do seu componente.');return t}import{signal as V,computed as I,inject as at,DestroyRef as ct}from"@angular/core";function lt(){let t=u(),e=at(ct),r=V({isValid:!0,isDirty:!1,isSubmitting:!1}),o=V(null),s=V(null),i=C(t,S=>{r.set(S)});e.onDestroy(()=>i());let l=I(()=>r().isValid),p=I(()=>r().isSubmitting),d=I(()=>r().isDirty),{controller:a,actions:n}=z(t,{clearSubmissionState:()=>{o.set(null),s.set(null)},setSubmissionResult:S=>{s.set(S)},setSubmissionError:S=>{o.set(S)}},{stopPropagation:!0});return{meta:{isValid:l,isDirty:d,isSubmitting:p,submitError:o.asReadonly(),lastResponse:s.asReadonly()},getValues:a.getValues,getErrors:a.getErrors,getTouched:a.getTouched,getDirtyValues:a.getDirtyValues,submit:a.submit,onSubmit:a.onSubmit,reset:a.reset,...n}}import{inject as tt,DestroyRef as ut,computed as m,signal as pt}from"@angular/core";function E(t){let e=tt(g),r=pt(e.read.getFieldState(t)),o=e.observe.subscribeFieldState(t,f=>{r.set(f)});tt(ut).onDestroy(()=>{o(),J(e,t)});let s=m(()=>r().value),i=m(()=>Y(r())),l=m(()=>i().error),p=m(()=>i().touched),d=m(()=>i().invalid),a=m(()=>i().isDirty),n=m(()=>i().isValidating),B=m(()=>i().isHidden),S=m(()=>i().isRequired),{fieldController:j}=$(e,t),T=m(()=>j.displayValue(s())),F=f=>{j.setValue(f)},h=()=>j.setBlur(),x=m(()=>i().hasError);return{value:s,displayValue:T,setValue:F,setBlur:h,update:f=>F(L(f)?f.target?.value??null:f),meta:{error:l,touched:p,invalid:d,isDirty:a,isValidating:n,isHidden:B,isRequired:S,hasError:x}}}import{DestroyRef as dt,signal as mt,computed as et,inject as rt}from"@angular/core";function St(t){let e=rt(g),r=rt(dt),o=G(e,t),s=mt(o.readItems()),i=e.observe.subscribePath(t,()=>{s.set(o.readItems())});return r.onDestroy(()=>{i(),Q(e,`${t}.`)}),{fields:et(()=>o.getFields(s())),length:et(()=>s().length),append:o.append,prepend:o.prepend,remove:o.remove,insert:o.insert,swap:o.swap,move:o.move,replace:o.replace,clear:o.clear}}import{computed as P,DestroyRef as ft,inject as yt,signal as Bt}from"@angular/core";function gt(){let t=u(),e=yt(ft),r=Bt(_(t)),o=q(t,s=>{r.set(s)});return e.onDestroy(()=>o()),{canUndo:P(()=>r().canUndo),canRedo:P(()=>r().canRedo),historyIndex:P(()=>r().historyIndex),historySize:P(()=>r().historySize),undo:()=>t.feature.undo(),redo:()=>t.feature.redo()}}import{signal as bt,computed as D,DestroyRef as Rt,inject as jt}from"@angular/core";function Ft(t){let e=u(),r=e.read.getScopeStatus(t),o=bt(r),s=X(e,t,n=>{o.set(n)});try{jt(Rt).onDestroy(()=>s())}catch{}let i=async()=>{let n=await e.write.validate({scope:t}),B=e.read.getScopeErrors(t);return{valid:n,errors:B}},l=()=>e.read.getScopeErrors(t),p=D(()=>!o().hasErrors),d=D(()=>o().isDirty),a=D(()=>o().errors);return{scopeName:t,status:o,errors:a,validate:i,getErrors:l,isValid:p,isDirty:d,unsubscribe:s}}import{signal as ot,computed as b,DestroyRef as vt,inject as Pt}from"@angular/core";function Tt(t){let e=u(),r=ot(0),o=b(()=>t[r()]??""),s=()=>t[r()]??"",i=ot(e.read.getScopeStatus(s())),l=()=>{let c=s(),y=e.read.getScopeStatus(c),R=i();O(R,y)||i.set(y)},p=e.observe.subscribeScopeStatus(s(),l),d=()=>{p(),p=e.observe.subscribeScopeStatus(s(),l)};try{Pt(vt).onDestroy(()=>p())}catch{}let a=async()=>{let c=s(),y=await e.write.validate({scope:c}),R=e.read.getScopeErrors(c);return{valid:y,errors:R}},n=()=>e.read.getScopeErrors(s()),B=async()=>{let c=s(),y=e.read.getScopeFields(c);if(e.feature.hasValidationsInProgress(y))return!1;let R=await e.write.validate({scope:c});if(R){let v=Math.min(r()+1,t.length-1);r.set(v),i.set(e.read.getScopeStatus(t[v]??"")),d()}else{let v=e.read.getScopeErrors(c),k=Object.keys(v);k.length>0&&e.write.markFieldsTouched(k)}return R},S=()=>{let c=Math.max(r()-1,0);r.set(c),i.set(e.read.getScopeStatus(t[c]??"")),d()},j=c=>{let y=Math.max(0,Math.min(c-1,t.length-1));r.set(y),i.set(e.read.getScopeStatus(t[y]??"")),d()},T=b(()=>r()+1),F=b(()=>r()===0),h=b(()=>r()>=t.length-1),x=b(()=>!i().hasErrors),U=b(()=>i().isDirty),f=b(()=>i().errors);return{step:T,stepIndex:r,scope:o,next:B,prev:S,goTo:j,isFirst:F,isLast:h,status:i,errors:f,isValid:x,isDirty:U,validate:a,getErrors:n}}import{DestroyRef as ht,signal as xt,inject as Vt}from"@angular/core";function It(t){let e=u(),r=Vt(ht),o=xt(H(e.read.getState().values,t),{equal:M}),s=e.observe.subscribePath(t,i=>{o.set(i)});return r.onDestroy(s),o.asReadonly()}import{computed as w,inject as Et,signal as Dt}from"@angular/core";function wt(t,e,r){let o=Et(g),s=E(t),i=null,l=Dt(!1),p={setLoading:n=>l.set(n),setError:(n,B)=>o.write.setError(n,B),setValue:n=>s.setValue(n),getUploadKey:()=>i,setUploadKey:n=>{i=n}},d=Z(t,e,p),a=N(t,r,p);return{value:w(()=>s.value()),setValue:s.setValue,error:w(()=>s.meta.error()),isValidating:w(()=>!!s.meta.isValidating()||l()),upload:d,remove:a}}import{computed as A,inject as At,signal as Ut,DestroyRef as kt}from"@angular/core";function Mt(){let t=u(),e=Ut(t.read.getPersistMetadata()),r=W(t,l=>{e.set(l)});try{At(kt).onDestroy(()=>r())}catch{}return{restore:async()=>t.feature.restorePersisted(),save:async()=>{await t.feature.forceSave()},clear:async()=>{await t.feature.clearPersisted()},meta:{isSaving:A(()=>e().isSaving),isRestoring:A(()=>e().isRestoring),error:A(()=>e().error)}}}export{St as injectBitArray,E as injectBitField,lt as injectBitForm,gt as injectBitHistory,Mt as injectBitPersist,Ft as injectBitScope,Tt as injectBitSteps,wt as injectBitUpload,It as injectBitWatch,nt as provideBitStore,u as useBitStore};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/angular/provider.ts","../../src/angular/inject-bit-form.ts","../../src/angular/inject-bit-field.ts","../../src/angular/inject-bit-array.ts","../../src/angular/inject-bit-history.ts","../../src/angular/inject-bit-scope.ts","../../src/angular/inject-bit-steps.ts","../../src/angular/inject-bit-watch.ts","../../src/angular/inject-bit-upload.ts","../../src/angular/inject-bit-persist.ts"],"sourcesContent":["import { inject, InjectionToken, Provider } from \"@angular/core\";\nimport type { BitFormBindingApi, BitStoreHooksApi } from \"../core\";\nimport { resolveBitStoreForHooks } from \"../core\";\n\nexport const BIT_STORE_TOKEN = new InjectionToken<BitFormBindingApi<any>>(\n \"BIT_STORE\",\n);\n\nexport function provideBitStore<T extends object>(\n store: BitStoreHooksApi<T>,\n): Provider {\n return { provide: BIT_STORE_TOKEN, useValue: resolveBitStoreForHooks(store) };\n}\n\nexport function useBitStore<T extends object>() {\n const store = inject(BIT_STORE_TOKEN, { optional: true });\n\n if (!store) {\n throw new Error(\n \"BitForm: Não foi possível encontrar a BitStore. \" +\n 'Certifique-se de que você adicionou \"provideBitStore(store)\" nos providers do seu componente.',\n );\n }\n\n return store as BitFormBindingApi<T>;\n}\n","import { signal, computed, inject, DestroyRef } from \"@angular/core\";\nimport { useBitStore } from \"./provider\";\nimport { createFrameworkFormBinding, observeFormMetaSnapshot } from \"../core\";\nimport type { InjectBitFormResult } from \"./types\";\n\nexport function injectBitForm<T extends object>(): InjectBitFormResult<T> {\n const store = useBitStore<T>();\n const destroyRef = inject(DestroyRef);\n const stateSignal = signal({\n isValid: true,\n isDirty: false,\n isSubmitting: false,\n });\n const submitError = signal<Error | null>(null);\n const lastResponse = signal<unknown>(null);\n\n const sub = observeFormMetaSnapshot(store, (nextMeta) => {\n stateSignal.set(nextMeta);\n });\n\n destroyRef.onDestroy(() => sub());\n\n const isValid = computed(() => stateSignal().isValid);\n const isSubmitting = computed(() => stateSignal().isSubmitting);\n const isDirty = computed(() => stateSignal().isDirty);\n\n const { controller, actions } = createFrameworkFormBinding(\n store,\n {\n clearSubmissionState: () => {\n submitError.set(null);\n lastResponse.set(null);\n },\n setSubmissionResult: (result) => {\n lastResponse.set(result);\n },\n setSubmissionError: (error) => {\n submitError.set(error);\n },\n },\n { stopPropagation: true },\n );\n\n const meta = {\n isValid,\n isDirty,\n isSubmitting,\n submitError: submitError.asReadonly(),\n lastResponse: lastResponse.asReadonly(),\n };\n\n return {\n // Metadata (grouped)\n meta,\n // Getters\n getValues: controller.getValues,\n getErrors: controller.getErrors,\n getTouched: controller.getTouched,\n getDirtyValues: controller.getDirtyValues,\n // Main actions (frequent use - flat)\n submit: controller.submit,\n onSubmit: controller.onSubmit,\n reset: controller.reset,\n ...actions,\n };\n}\n","import { inject, DestroyRef, computed, signal } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport {\n BitPath,\n BitPathValue,\n cleanupRegisteredField,\n createFrameworkMaskedFieldBinding,\n deriveFieldMeta,\n isBitFieldInputEventObject,\n subscribeFieldState,\n} from \"../core\";\nimport type {\n BitFieldInputEvent,\n InjectBitFieldMeta,\n InjectBitFieldResult,\n} from \"./types\";\n\nexport function injectBitField<\n TValue = any,\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P): InjectBitFieldResult<TForm, P> {\n const store = inject(BIT_STORE_TOKEN);\n\n const stateSignal = signal(store.getFieldState(path));\n\n const unsubscribe = subscribeFieldState(store, path, (nextState) => {\n stateSignal.set(nextState);\n });\n\n inject(DestroyRef).onDestroy(() => {\n unsubscribe();\n cleanupRegisteredField(store, path as string);\n });\n\n const value = computed(() => stateSignal().value as BitPathValue<TForm, P>);\n const metaState = computed(() => deriveFieldMeta(stateSignal()));\n const error = computed(() => metaState().error);\n const touched = computed(() => metaState().touched);\n const invalid = computed(() => metaState().invalid);\n const isDirty = computed(() => metaState().isDirty);\n const isValidating = computed(() => metaState().isValidating);\n const isHidden = computed(() => metaState().isHidden);\n const isRequired = computed(() => metaState().isRequired);\n\n const { fieldController } = createFrameworkMaskedFieldBinding(store, path);\n\n const displayValue = computed(() => fieldController.displayValue(value()));\n\n const setValue = (\n val: BitPathValue<TForm, P> | string | number | null | undefined,\n ) => {\n fieldController.setValue(val);\n };\n\n const setBlur = () => fieldController.setBlur();\n\n const hasError = computed(() => metaState().hasError);\n\n const update = (e: BitFieldInputEvent) =>\n setValue(isBitFieldInputEventObject(e) ? (e.target?.value ?? null) : e);\n\n return {\n // Main handlers and values (flat)\n value,\n displayValue,\n setValue,\n setBlur,\n update,\n // Metadata (grouped)\n meta: {\n error,\n touched,\n invalid,\n isDirty,\n isValidating,\n isHidden,\n isRequired,\n hasError,\n },\n };\n}\n","import { DestroyRef, signal, computed, inject } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport {\n createArrayBindingController,\n BitArrayPath,\n BitPathValue,\n BitArrayItem,\n cleanupRegisteredPrefix,\n} from \"../core\";\n\nexport function injectBitArray<\n TForm extends object = any,\n P extends BitArrayPath<TForm> = BitArrayPath<TForm>,\n>(path: P) {\n const store = inject(BIT_STORE_TOKEN);\n const destroyRef = inject(DestroyRef);\n const controller = createArrayBindingController<TForm, P>(store, path);\n\n const valuesSig = signal<BitArrayItem<BitPathValue<TForm, P>>[]>(\n controller.readItems(),\n );\n\n const unsub = store.subscribePath(path, () => {\n valuesSig.set(controller.readItems());\n });\n\n destroyRef.onDestroy(() => {\n unsub();\n cleanupRegisteredPrefix(store, `${path as string}.`);\n });\n\n return {\n fields: computed(() => controller.getFields(valuesSig())),\n length: computed(() => valuesSig().length),\n append: controller.append,\n prepend: controller.prepend,\n remove: controller.remove,\n insert: controller.insert,\n swap: controller.swap,\n move: controller.move,\n replace: controller.replace,\n clear: controller.clear,\n };\n}\n","import { computed, DestroyRef, inject, signal } from \"@angular/core\";\nimport { observeHistoryMetaSnapshot, readHistoryMetaSnapshot } from \"../core\";\nimport { useBitStore } from \"./provider\";\nimport type { InjectBitHistoryResult } from \"./types\";\n\nexport function injectBitHistory<\n T extends object = any,\n>(): InjectBitHistoryResult {\n const store = useBitStore<T>();\n const destroyRef = inject(DestroyRef);\n\n const meta = signal(readHistoryMetaSnapshot(store));\n\n const sub = observeHistoryMetaSnapshot(store, (nextMeta) => {\n meta.set(nextMeta);\n });\n\n destroyRef.onDestroy(() => sub());\n\n return {\n canUndo: computed(() => meta().canUndo),\n canRedo: computed(() => meta().canRedo),\n historyIndex: computed(() => meta().historyIndex),\n historySize: computed(() => meta().historySize),\n undo: () => store.undo(),\n redo: () => store.redo(),\n };\n}\n","import { signal, computed, DestroyRef, inject } from \"@angular/core\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { observeScopeStatusSnapshot } from \"../core\";\nimport { useBitStore } from \"./provider\";\n\nexport type { ScopeStatus, ValidateScopeResult };\n\nexport function injectBitScope(scopeName: string) {\n const store = useBitStore();\n const initialStatus = store.getStepStatus(scopeName);\n\n const status = signal<ScopeStatus>(initialStatus);\n\n const unsubscribe = observeScopeStatusSnapshot(\n store,\n scopeName,\n (nextStatus) => {\n status.set(nextStatus);\n },\n );\n\n try {\n const destroyRef = inject(DestroyRef);\n destroyRef.onDestroy(() => unsubscribe());\n } catch {}\n\n const validate = async (): Promise<ValidateScopeResult> => {\n const valid = await store.validate({ scope: scopeName });\n const errors = store.getStepErrors(scopeName);\n return { valid, errors };\n };\n\n const getErrors = () => store.getStepErrors(scopeName);\n\n const isValid = computed(() => !status().hasErrors);\n const isDirty = computed(() => status().isDirty);\n const errors = computed(() => status().errors);\n\n return {\n scopeName,\n status,\n errors,\n validate,\n getErrors,\n isValid,\n isDirty,\n unsubscribe,\n };\n}\n","import { signal, computed, DestroyRef, inject } from \"@angular/core\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { isScopeStatusEqual } from \"../core\";\nimport { useBitStore } from \"./provider\";\nimport type { InjectBitStepsResult } from \"./types\";\n\nexport function injectBitSteps(scopeNames: string[]): InjectBitStepsResult {\n const store = useBitStore();\n const stepIndex = signal(0);\n\n const scope = computed(() => scopeNames[stepIndex()] ?? \"\");\n\n const getCurrentScope = () => scopeNames[stepIndex()] ?? \"\";\n const status = signal<ScopeStatus>(store.getStepStatus(getCurrentScope()));\n\n const updateStatus = () => {\n const scopeName = getCurrentScope();\n const newStatus = store.getStepStatus(scopeName);\n const current = status();\n if (!isScopeStatusEqual(current, newStatus)) {\n status.set(newStatus);\n }\n };\n\n let unsubscribe = store.subscribeScopeStatus(getCurrentScope(), updateStatus);\n\n const rebindScopeSubscription = () => {\n unsubscribe();\n unsubscribe = store.subscribeScopeStatus(getCurrentScope(), updateStatus);\n };\n\n try {\n const destroyRef = inject(DestroyRef);\n destroyRef.onDestroy(() => unsubscribe());\n } catch {}\n\n const validate = async (): Promise<ValidateScopeResult> => {\n const scopeName = getCurrentScope();\n const valid = await store.validate({ scope: scopeName });\n const errors = store.getStepErrors(scopeName);\n return { valid, errors };\n };\n\n const getErrors = () => store.getStepErrors(getCurrentScope());\n\n const next = async (): Promise<boolean> => {\n const scopeName = getCurrentScope();\n\n const scopeFields = store.getScopeFields(scopeName);\n if (store.hasValidationsInProgress(scopeFields)) {\n return false;\n }\n\n const valid = await store.validate({ scope: scopeName });\n if (valid) {\n const newIndex = Math.min(stepIndex() + 1, scopeNames.length - 1);\n stepIndex.set(newIndex);\n status.set(store.getStepStatus(scopeNames[newIndex] ?? \"\"));\n rebindScopeSubscription();\n } else {\n const errors = store.getStepErrors(scopeName);\n const pathsWithErrors = Object.keys(errors);\n if (pathsWithErrors.length > 0) {\n store.markFieldsTouched(pathsWithErrors);\n }\n }\n return valid;\n };\n\n const prev = () => {\n const newIndex = Math.max(stepIndex() - 1, 0);\n stepIndex.set(newIndex);\n status.set(store.getStepStatus(scopeNames[newIndex] ?? \"\"));\n rebindScopeSubscription();\n };\n\n const goTo = (targetStep: number) => {\n const newIndex = Math.max(\n 0,\n Math.min(targetStep - 1, scopeNames.length - 1),\n );\n stepIndex.set(newIndex);\n status.set(store.getStepStatus(scopeNames[newIndex] ?? \"\"));\n rebindScopeSubscription();\n };\n\n const step = computed(() => stepIndex() + 1);\n const isFirst = computed(() => stepIndex() === 0);\n const isLast = computed(() => stepIndex() >= scopeNames.length - 1);\n const isValid = computed(() => !status().hasErrors);\n const isDirty = computed(() => status().isDirty);\n const errors = computed(() => status().errors);\n\n return {\n step,\n stepIndex,\n scope,\n next,\n prev,\n goTo,\n isFirst,\n isLast,\n status,\n errors,\n isValid,\n isDirty,\n validate,\n getErrors,\n };\n}\n","import { DestroyRef, signal, Signal, inject } from \"@angular/core\";\nimport { useBitStore } from \"./provider\";\nimport { getDeepValue, valueEqual, BitPath, BitPathValue } from \"../core\";\n\nexport function injectBitWatch<\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P): Signal<BitPathValue<TForm, P>> {\n const store = useBitStore<TForm>();\n const destroyRef = inject(DestroyRef);\n const valueSig = signal<BitPathValue<TForm, P>>(\n getDeepValue(store.getState().values, path as string) as BitPathValue<\n TForm,\n P\n >,\n { equal: valueEqual },\n );\n\n const unsub = store.subscribePath(path, (v) => {\n valueSig.set(v as BitPathValue<TForm, P>);\n });\n\n destroyRef.onDestroy(unsub);\n\n return valueSig.asReadonly();\n}\n","/**\n * Angular Dependency Injection for File Upload\n *\n * Minimal upload API integrated with global field validation lifecycle.\n */\n\nimport { computed, inject, signal } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport { injectBitField } from \"./inject-bit-field\";\nimport { BitUploadFn, BitDeleteUploadFn } from \"../core\";\nimport { createUploadHandler, createRemoveHandler } from \"../core/adapters\";\nimport type { InjectBitUploadResult } from \"./types\";\n\nexport function injectBitUpload(\n fieldPath: string,\n uploadFn: BitUploadFn,\n deleteFile?: BitDeleteUploadFn,\n): InjectBitUploadResult {\n const store = inject(BIT_STORE_TOKEN);\n const field = injectBitField(fieldPath);\n let uploadKey: string | null = null;\n const isUploading = signal(false);\n\n const kernelCallbacks = {\n setLoading: (val: boolean) => isUploading.set(val),\n setError: (path: string, msg: string | undefined) =>\n store.setError(path, msg),\n setValue: (val: string | null) => field.setValue(val),\n getUploadKey: () => uploadKey,\n setUploadKey: (key: string | null) => {\n uploadKey = key;\n },\n };\n\n const upload = createUploadHandler(fieldPath, uploadFn, kernelCallbacks);\n const remove = createRemoveHandler(fieldPath, deleteFile, kernelCallbacks);\n\n return {\n value: computed(() => field.value()),\n setValue: field.setValue,\n error: computed(() => field.meta.error()),\n isValidating: computed(() => !!field.meta.isValidating() || isUploading()),\n upload,\n remove,\n };\n}\n","import { computed, inject, signal, DestroyRef } from \"@angular/core\";\nimport { useBitStore } from \"./provider\";\nimport { observePersistMetaSnapshot } from \"../core\";\nimport type { InjectBitPersistResult } from \"./types\";\n\nexport function injectBitPersist<\n T extends object = any,\n>(): InjectBitPersistResult {\n const store = useBitStore<T>();\n const persist = signal(store.getPersistMetadata());\n\n const unsubscribe = observePersistMetaSnapshot(store, (nextPersist) => {\n persist.set(nextPersist);\n });\n\n try {\n inject(DestroyRef).onDestroy(() => unsubscribe());\n } catch {}\n\n const restore = async (): Promise<boolean> => {\n return store.restorePersisted();\n };\n\n const save = async (): Promise<void> => {\n await store.forceSave();\n };\n\n const clear = async (): Promise<void> => {\n await store.clearPersisted();\n };\n\n return {\n restore,\n save,\n clear,\n meta: {\n isSaving: computed(() => persist().isSaving),\n isRestoring: computed(() => persist().isRestoring),\n error: computed(() => persist().error),\n },\n };\n}\n"],"mappings":"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","names":["inject","InjectionToken","BIT_STORE_TOKEN","InjectionToken","provideBitStore","store","resolveBitStoreForHooks","useBitStore","inject","signal","computed","inject","DestroyRef","injectBitForm","store","useBitStore","destroyRef","inject","DestroyRef","stateSignal","signal","submitError","lastResponse","sub","observeFormMetaSnapshot","nextMeta","isValid","computed","isSubmitting","isDirty","controller","actions","createFrameworkFormBinding","result","error","inject","DestroyRef","computed","signal","injectBitField","path","store","inject","BIT_STORE_TOKEN","stateSignal","signal","unsubscribe","subscribeFieldState","nextState","DestroyRef","cleanupRegisteredField","value","computed","metaState","deriveFieldMeta","error","touched","invalid","isDirty","isValidating","isHidden","isRequired","fieldController","createFrameworkMaskedFieldBinding","displayValue","setValue","val","setBlur","hasError","e","isBitFieldInputEventObject","DestroyRef","signal","computed","inject","injectBitArray","path","store","inject","BIT_STORE_TOKEN","destroyRef","DestroyRef","controller","createArrayBindingController","valuesSig","signal","unsub","cleanupRegisteredPrefix","computed","computed","DestroyRef","inject","signal","injectBitHistory","store","useBitStore","destroyRef","inject","DestroyRef","meta","signal","readHistoryMetaSnapshot","sub","observeHistoryMetaSnapshot","nextMeta","computed","signal","computed","DestroyRef","inject","injectBitScope","scopeName","store","useBitStore","initialStatus","status","signal","unsubscribe","observeScopeStatusSnapshot","nextStatus","inject","DestroyRef","validate","valid","errors","getErrors","isValid","computed","isDirty","signal","computed","DestroyRef","inject","injectBitSteps","scopeNames","store","useBitStore","stepIndex","signal","scope","computed","getCurrentScope","status","updateStatus","scopeName","newStatus","current","isScopeStatusEqual","unsubscribe","rebindScopeSubscription","inject","DestroyRef","validate","valid","errors","getErrors","next","scopeFields","newIndex","pathsWithErrors","prev","goTo","targetStep","step","isFirst","isLast","isValid","isDirty","DestroyRef","signal","inject","injectBitWatch","path","store","useBitStore","destroyRef","inject","DestroyRef","valueSig","signal","getDeepValue","valueEqual","unsub","v","computed","inject","signal","injectBitUpload","fieldPath","uploadFn","deleteFile","store","inject","BIT_STORE_TOKEN","field","injectBitField","uploadKey","isUploading","signal","kernelCallbacks","val","path","msg","key","upload","createUploadHandler","remove","createRemoveHandler","computed","computed","inject","signal","DestroyRef","injectBitPersist","store","useBitStore","persist","signal","unsubscribe","observePersistMetaSnapshot","nextPersist","inject","DestroyRef","computed"]}
1
+ {"version":3,"sources":["../../src/angular/provider.ts","../../src/angular/inject-bit-form.ts","../../src/angular/inject-bit-field.ts","../../src/angular/inject-bit-array.ts","../../src/angular/inject-bit-history.ts","../../src/angular/inject-bit-scope.ts","../../src/angular/inject-bit-steps.ts","../../src/angular/inject-bit-watch.ts","../../src/angular/inject-bit-upload.ts","../../src/angular/inject-bit-persist.ts"],"sourcesContent":["import { inject, InjectionToken, Provider } from \"@angular/core\";\nimport type { BitFrameworkStoreApi, BitStoreApi } from \"../core\";\nimport { createFrameworkStoreAdapter } from \"../core\";\n\nexport const BIT_STORE_TOKEN = new InjectionToken<BitFrameworkStoreApi<any>>(\n \"BIT_STORE\",\n);\n\nexport function provideBitStore<T extends object>(\n store: BitFrameworkStoreApi<T> | BitStoreApi<T>,\n): Provider {\n return {\n provide: BIT_STORE_TOKEN,\n useValue: createFrameworkStoreAdapter<T>(store),\n };\n}\n\nexport function useBitStore<T extends object>() {\n const store = inject(BIT_STORE_TOKEN, { optional: true });\n\n if (!store) {\n throw new Error(\n \"BitForm: Não foi possível encontrar a BitStore. \" +\n 'Certifique-se de que você adicionou \"provideBitStore(store)\" nos providers do seu componente.',\n );\n }\n\n return store as BitFrameworkStoreApi<T>;\n}\n","import { signal, computed, inject, DestroyRef } from \"@angular/core\";\nimport { useBitStore } from \"./provider\";\nimport { createFrameworkFormBinding, observeFormMetaSnapshot } from \"../core\";\nimport type { InjectBitFormResult } from \"./types\";\n\nexport function injectBitForm<T extends object>(): InjectBitFormResult<T> {\n const store = useBitStore<T>();\n const destroyRef = inject(DestroyRef);\n const stateSignal = signal({\n isValid: true,\n isDirty: false,\n isSubmitting: false,\n });\n const submitError = signal<Error | null>(null);\n const lastResponse = signal<unknown>(null);\n\n const sub = observeFormMetaSnapshot(store, (nextMeta) => {\n stateSignal.set(nextMeta);\n });\n\n destroyRef.onDestroy(() => sub());\n\n const isValid = computed(() => stateSignal().isValid);\n const isSubmitting = computed(() => stateSignal().isSubmitting);\n const isDirty = computed(() => stateSignal().isDirty);\n\n const { controller, actions } = createFrameworkFormBinding(\n store,\n {\n clearSubmissionState: () => {\n submitError.set(null);\n lastResponse.set(null);\n },\n setSubmissionResult: (result) => {\n lastResponse.set(result);\n },\n setSubmissionError: (error) => {\n submitError.set(error);\n },\n },\n { stopPropagation: true },\n );\n\n const meta = {\n isValid,\n isDirty,\n isSubmitting,\n submitError: submitError.asReadonly(),\n lastResponse: lastResponse.asReadonly(),\n };\n\n return {\n // Metadata (grouped)\n meta,\n // Getters\n getValues: controller.getValues,\n getErrors: controller.getErrors,\n getTouched: controller.getTouched,\n getDirtyValues: controller.getDirtyValues,\n // Main actions (frequent use - flat)\n submit: controller.submit,\n onSubmit: controller.onSubmit,\n reset: controller.reset,\n ...actions,\n };\n}\n","import { inject, DestroyRef, computed, signal } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport {\n BitPath,\n BitPathValue,\n cleanupRegisteredField,\n createFrameworkMaskedFieldBinding,\n deriveFieldMeta,\n isBitFieldInputEventObject,\n} from \"../core\";\nimport type {\n BitFieldInputEvent,\n InjectBitFieldResult,\n} from \"./types\";\n\nexport function injectBitField<\n TValue = any,\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P): InjectBitFieldResult<TForm, P> {\n const store = inject(BIT_STORE_TOKEN);\n\n const stateSignal = signal(store.read.getFieldState(path));\n\n const unsubscribe = store.observe.subscribeFieldState(path, (nextState) => {\n stateSignal.set(nextState);\n });\n\n inject(DestroyRef).onDestroy(() => {\n unsubscribe();\n cleanupRegisteredField(store, path as string);\n });\n\n const value = computed(() => stateSignal().value as BitPathValue<TForm, P>);\n const metaState = computed(() => deriveFieldMeta(stateSignal()));\n const error = computed(() => metaState().error);\n const touched = computed(() => metaState().touched);\n const invalid = computed(() => metaState().invalid);\n const isDirty = computed(() => metaState().isDirty);\n const isValidating = computed(() => metaState().isValidating);\n const isHidden = computed(() => metaState().isHidden);\n const isRequired = computed(() => metaState().isRequired);\n\n const { fieldController } = createFrameworkMaskedFieldBinding(store, path);\n\n const displayValue = computed(() => fieldController.displayValue(value()));\n\n const setValue = (\n val: BitPathValue<TForm, P> | string | number | null | undefined,\n ) => {\n fieldController.setValue(val);\n };\n\n const setBlur = () => fieldController.setBlur();\n\n const hasError = computed(() => metaState().hasError);\n\n const update = (e: BitFieldInputEvent) =>\n setValue(isBitFieldInputEventObject(e) ? (e.target?.value ?? null) : e);\n\n return {\n // Main handlers and values (flat)\n value,\n displayValue,\n setValue,\n setBlur,\n update,\n // Metadata (grouped)\n meta: {\n error,\n touched,\n invalid,\n isDirty,\n isValidating,\n isHidden,\n isRequired,\n hasError,\n },\n };\n}\n","import { DestroyRef, signal, computed, inject } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport {\n createArrayBindingController,\n BitArrayPath,\n BitPathValue,\n BitArrayItem,\n cleanupRegisteredPrefix,\n} from \"../core\";\n\nexport function injectBitArray<\n TForm extends object = any,\n P extends BitArrayPath<TForm> = BitArrayPath<TForm>,\n>(path: P) {\n const store = inject(BIT_STORE_TOKEN);\n const destroyRef = inject(DestroyRef);\n const controller = createArrayBindingController<TForm, P>(store, path);\n\n const valuesSig = signal<BitArrayItem<BitPathValue<TForm, P>>[]>(\n controller.readItems(),\n );\n\n const unsub = store.observe.subscribePath(path, () => {\n valuesSig.set(controller.readItems());\n });\n\n destroyRef.onDestroy(() => {\n unsub();\n cleanupRegisteredPrefix(store, `${path as string}.`);\n });\n\n return {\n fields: computed(() => controller.getFields(valuesSig())),\n length: computed(() => valuesSig().length),\n append: controller.append,\n prepend: controller.prepend,\n remove: controller.remove,\n insert: controller.insert,\n swap: controller.swap,\n move: controller.move,\n replace: controller.replace,\n clear: controller.clear,\n };\n}\n","import { computed, DestroyRef, inject, signal } from \"@angular/core\";\nimport { observeHistoryMetaSnapshot, readHistoryMetaSnapshot } from \"../core\";\nimport { useBitStore } from \"./provider\";\nimport type { InjectBitHistoryResult } from \"./types\";\n\nexport function injectBitHistory<\n T extends object = any,\n>(): InjectBitHistoryResult {\n const store = useBitStore<T>();\n const destroyRef = inject(DestroyRef);\n\n const meta = signal(readHistoryMetaSnapshot(store));\n\n const sub = observeHistoryMetaSnapshot(store, (nextMeta) => {\n meta.set(nextMeta);\n });\n\n destroyRef.onDestroy(() => sub());\n\n return {\n canUndo: computed(() => meta().canUndo),\n canRedo: computed(() => meta().canRedo),\n historyIndex: computed(() => meta().historyIndex),\n historySize: computed(() => meta().historySize),\n undo: () => store.feature.undo(),\n redo: () => store.feature.redo(),\n };\n}\n","import { signal, computed, DestroyRef, inject } from \"@angular/core\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { observeScopeStatusSnapshot } from \"../core\";\nimport { useBitStore } from \"./provider\";\n\nexport type { ScopeStatus, ValidateScopeResult };\n\nexport function injectBitScope(scopeName: string) {\n const store = useBitStore();\n const initialStatus = store.read.getScopeStatus(scopeName);\n\n const status = signal<ScopeStatus>(initialStatus);\n\n const unsubscribe = observeScopeStatusSnapshot(\n store,\n scopeName,\n (nextStatus) => {\n status.set(nextStatus);\n },\n );\n\n try {\n const destroyRef = inject(DestroyRef);\n destroyRef.onDestroy(() => unsubscribe());\n } catch {}\n\n const validate = async (): Promise<ValidateScopeResult> => {\n const valid = await store.write.validate({ scope: scopeName });\n const errors = store.read.getScopeErrors(scopeName);\n return { valid, errors };\n };\n\n const getErrors = () => store.read.getScopeErrors(scopeName);\n\n const isValid = computed(() => !status().hasErrors);\n const isDirty = computed(() => status().isDirty);\n const errors = computed(() => status().errors);\n\n return {\n scopeName,\n status,\n errors,\n validate,\n getErrors,\n isValid,\n isDirty,\n unsubscribe,\n };\n}\n","import { signal, computed, DestroyRef, inject } from \"@angular/core\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { isScopeStatusEqual } from \"../core\";\nimport { useBitStore } from \"./provider\";\nimport type { InjectBitStepsResult } from \"./types\";\n\nexport function injectBitSteps(scopeNames: string[]): InjectBitStepsResult {\n const store = useBitStore();\n const stepIndex = signal(0);\n\n const scope = computed(() => scopeNames[stepIndex()] ?? \"\");\n\n const getCurrentScope = () => scopeNames[stepIndex()] ?? \"\";\n const status = signal<ScopeStatus>(\n store.read.getScopeStatus(getCurrentScope()),\n );\n\n const updateStatus = () => {\n const scopeName = getCurrentScope();\n const newStatus = store.read.getScopeStatus(scopeName);\n const current = status();\n if (!isScopeStatusEqual(current, newStatus)) {\n status.set(newStatus);\n }\n };\n\n let unsubscribe = store.observe.subscribeScopeStatus(\n getCurrentScope(),\n updateStatus,\n );\n\n const rebindScopeSubscription = () => {\n unsubscribe();\n unsubscribe = store.observe.subscribeScopeStatus(\n getCurrentScope(),\n updateStatus,\n );\n };\n\n try {\n const destroyRef = inject(DestroyRef);\n destroyRef.onDestroy(() => unsubscribe());\n } catch {}\n\n const validate = async (): Promise<ValidateScopeResult> => {\n const scopeName = getCurrentScope();\n const valid = await store.write.validate({ scope: scopeName });\n const errors = store.read.getScopeErrors(scopeName);\n return { valid, errors };\n };\n\n const getErrors = () => store.read.getScopeErrors(getCurrentScope());\n\n const next = async (): Promise<boolean> => {\n const scopeName = getCurrentScope();\n\n const scopeFields = store.read.getScopeFields(scopeName);\n if (store.feature.hasValidationsInProgress(scopeFields)) {\n return false;\n }\n\n const valid = await store.write.validate({ scope: scopeName });\n if (valid) {\n const newIndex = Math.min(stepIndex() + 1, scopeNames.length - 1);\n stepIndex.set(newIndex);\n status.set(store.read.getScopeStatus(scopeNames[newIndex] ?? \"\"));\n rebindScopeSubscription();\n } else {\n const errors = store.read.getScopeErrors(scopeName);\n const pathsWithErrors = Object.keys(errors);\n if (pathsWithErrors.length > 0) {\n store.write.markFieldsTouched(pathsWithErrors);\n }\n }\n return valid;\n };\n\n const prev = () => {\n const newIndex = Math.max(stepIndex() - 1, 0);\n stepIndex.set(newIndex);\n status.set(store.read.getScopeStatus(scopeNames[newIndex] ?? \"\"));\n rebindScopeSubscription();\n };\n\n const goTo = (targetStep: number) => {\n const newIndex = Math.max(\n 0,\n Math.min(targetStep - 1, scopeNames.length - 1),\n );\n stepIndex.set(newIndex);\n status.set(store.read.getScopeStatus(scopeNames[newIndex] ?? \"\"));\n rebindScopeSubscription();\n };\n\n const step = computed(() => stepIndex() + 1);\n const isFirst = computed(() => stepIndex() === 0);\n const isLast = computed(() => stepIndex() >= scopeNames.length - 1);\n const isValid = computed(() => !status().hasErrors);\n const isDirty = computed(() => status().isDirty);\n const errors = computed(() => status().errors);\n\n return {\n step,\n stepIndex,\n scope,\n next,\n prev,\n goTo,\n isFirst,\n isLast,\n status,\n errors,\n isValid,\n isDirty,\n validate,\n getErrors,\n };\n}\n","import { DestroyRef, signal, Signal, inject } from \"@angular/core\";\nimport { useBitStore } from \"./provider\";\nimport { getDeepValue, valueEqual, BitPath, BitPathValue } from \"../core\";\n\nexport function injectBitWatch<\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P): Signal<BitPathValue<TForm, P>> {\n const store = useBitStore<TForm>();\n const destroyRef = inject(DestroyRef);\n const valueSig = signal<BitPathValue<TForm, P>>(\n getDeepValue(store.read.getState().values, path as string) as BitPathValue<\n TForm,\n P\n >,\n { equal: valueEqual },\n );\n\n const unsub = store.observe.subscribePath(path, (v) => {\n valueSig.set(v as BitPathValue<TForm, P>);\n });\n\n destroyRef.onDestroy(unsub);\n\n return valueSig.asReadonly();\n}\n","/**\n * Angular Dependency Injection for File Upload\n *\n * Minimal upload API integrated with global field validation lifecycle.\n */\n\nimport { computed, inject, signal } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport { injectBitField } from \"./inject-bit-field\";\nimport { BitUploadFn, BitDeleteUploadFn } from \"../core\";\nimport { createUploadHandler, createRemoveHandler } from \"../core/adapters\";\nimport type { InjectBitUploadResult } from \"./types\";\n\nexport function injectBitUpload(\n fieldPath: string,\n uploadFn: BitUploadFn,\n deleteFile?: BitDeleteUploadFn,\n): InjectBitUploadResult {\n const store = inject(BIT_STORE_TOKEN);\n const field = injectBitField(fieldPath);\n let uploadKey: string | null = null;\n const isUploading = signal(false);\n\n const kernelCallbacks = {\n setLoading: (val: boolean) => isUploading.set(val),\n setError: (path: string, msg: string | undefined) =>\n store.write.setError(path, msg),\n setValue: (val: string | null) => field.setValue(val),\n getUploadKey: () => uploadKey,\n setUploadKey: (key: string | null) => {\n uploadKey = key;\n },\n };\n\n const upload = createUploadHandler(fieldPath, uploadFn, kernelCallbacks);\n const remove = createRemoveHandler(fieldPath, deleteFile, kernelCallbacks);\n\n return {\n value: computed(() => field.value()),\n setValue: field.setValue,\n error: computed(() => field.meta.error()),\n isValidating: computed(() => !!field.meta.isValidating() || isUploading()),\n upload,\n remove,\n };\n}\n","import { computed, inject, signal, DestroyRef } from \"@angular/core\";\nimport { useBitStore } from \"./provider\";\nimport { observePersistMetaSnapshot } from \"../core\";\nimport type { InjectBitPersistResult } from \"./types\";\n\nexport function injectBitPersist<\n T extends object = any,\n>(): InjectBitPersistResult {\n const store = useBitStore<T>();\n const persist = signal(store.read.getPersistMetadata());\n\n const unsubscribe = observePersistMetaSnapshot(store, (nextPersist) => {\n persist.set(nextPersist);\n });\n\n try {\n inject(DestroyRef).onDestroy(() => unsubscribe());\n } catch {}\n\n const restore = async (): Promise<boolean> => {\n return store.feature.restorePersisted();\n };\n\n const save = async (): Promise<void> => {\n await store.feature.forceSave();\n };\n\n const clear = async (): Promise<void> => {\n await store.feature.clearPersisted();\n };\n\n return {\n restore,\n save,\n clear,\n meta: {\n isSaving: computed(() => persist().isSaving),\n isRestoring: computed(() => persist().isRestoring),\n error: computed(() => persist().error),\n },\n };\n}\n"],"mappings":"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","names":["inject","InjectionToken","BIT_STORE_TOKEN","InjectionToken","provideBitStore","store","createFrameworkStoreAdapter","useBitStore","inject","signal","computed","inject","DestroyRef","injectBitForm","store","useBitStore","destroyRef","inject","DestroyRef","stateSignal","signal","submitError","lastResponse","sub","observeFormMetaSnapshot","nextMeta","isValid","computed","isSubmitting","isDirty","controller","actions","createFrameworkFormBinding","result","error","inject","DestroyRef","computed","signal","injectBitField","path","store","inject","BIT_STORE_TOKEN","stateSignal","signal","unsubscribe","nextState","DestroyRef","cleanupRegisteredField","value","computed","metaState","deriveFieldMeta","error","touched","invalid","isDirty","isValidating","isHidden","isRequired","fieldController","createFrameworkMaskedFieldBinding","displayValue","setValue","val","setBlur","hasError","e","isBitFieldInputEventObject","DestroyRef","signal","computed","inject","injectBitArray","path","store","inject","BIT_STORE_TOKEN","destroyRef","DestroyRef","controller","createArrayBindingController","valuesSig","signal","unsub","cleanupRegisteredPrefix","computed","computed","DestroyRef","inject","signal","injectBitHistory","store","useBitStore","destroyRef","inject","DestroyRef","meta","signal","readHistoryMetaSnapshot","sub","observeHistoryMetaSnapshot","nextMeta","computed","signal","computed","DestroyRef","inject","injectBitScope","scopeName","store","useBitStore","initialStatus","status","signal","unsubscribe","observeScopeStatusSnapshot","nextStatus","inject","DestroyRef","validate","valid","errors","getErrors","isValid","computed","isDirty","signal","computed","DestroyRef","inject","injectBitSteps","scopeNames","store","useBitStore","stepIndex","signal","scope","computed","getCurrentScope","status","updateStatus","scopeName","newStatus","current","isScopeStatusEqual","unsubscribe","rebindScopeSubscription","inject","DestroyRef","validate","valid","errors","getErrors","next","scopeFields","newIndex","pathsWithErrors","prev","goTo","targetStep","step","isFirst","isLast","isValid","isDirty","DestroyRef","signal","inject","injectBitWatch","path","store","useBitStore","destroyRef","inject","DestroyRef","valueSig","signal","getDeepValue","valueEqual","unsub","v","computed","inject","signal","injectBitUpload","fieldPath","uploadFn","deleteFile","store","inject","BIT_STORE_TOKEN","field","injectBitField","uploadKey","isUploading","signal","kernelCallbacks","val","path","msg","key","upload","createUploadHandler","remove","createRemoveHandler","computed","computed","inject","signal","DestroyRef","injectBitPersist","store","useBitStore","persist","signal","unsubscribe","observePersistMetaSnapshot","nextPersist","inject","DestroyRef","computed"]}
@@ -1,5 +1,5 @@
1
- import { B as BitArrayPath, a as BitArrayItem, b as BitPathValue } from './bus-DgilLszS.js';
2
- import { B as BitArrayBindingApi } from './store-api-types-9ipdute1.js';
1
+ import { e as BitStoreApi } from './store-api-types-D-ZHxzRy.cjs';
2
+ import { c as BitArrayPath, b as BitArrayItem, v as BitPathValue } from './types-D6LhF5GC.cjs';
3
3
 
4
4
  interface BitArrayBindingField<TItem> {
5
5
  key: string;
@@ -18,6 +18,6 @@ interface BitArrayBindingController<TForm extends object, P extends BitArrayPath
18
18
  replace(items: BitArrayItem<BitPathValue<TForm, P>>[]): void;
19
19
  clear(): void;
20
20
  }
21
- declare function createArrayBindingController<TForm extends object, P extends BitArrayPath<TForm>>(store: BitArrayBindingApi<TForm>, path: P): BitArrayBindingController<TForm, P>;
21
+ declare function createArrayBindingController<TForm extends object, P extends BitArrayPath<TForm>>(store: BitStoreApi<TForm>, path: P): BitArrayBindingController<TForm, P>;
22
22
 
23
- export { type BitArrayBindingField as B, type BitArrayBindingController as a, createArrayBindingController as c };
23
+ export { type BitArrayBindingController as B, type BitArrayBindingField as a, createArrayBindingController as c };
@@ -1,5 +1,5 @@
1
- import { B as BitArrayPath, a as BitArrayItem, b as BitPathValue } from './bus-rcUiufS7.cjs';
2
- import { B as BitArrayBindingApi } from './store-api-types-B6_bPoVI.cjs';
1
+ import { e as BitStoreApi } from './store-api-types-DPi30jQF.js';
2
+ import { c as BitArrayPath, b as BitArrayItem, v as BitPathValue } from './types-CG5nYeRk.js';
3
3
 
4
4
  interface BitArrayBindingField<TItem> {
5
5
  key: string;
@@ -18,6 +18,6 @@ interface BitArrayBindingController<TForm extends object, P extends BitArrayPath
18
18
  replace(items: BitArrayItem<BitPathValue<TForm, P>>[]): void;
19
19
  clear(): void;
20
20
  }
21
- declare function createArrayBindingController<TForm extends object, P extends BitArrayPath<TForm>>(store: BitArrayBindingApi<TForm>, path: P): BitArrayBindingController<TForm, P>;
21
+ declare function createArrayBindingController<TForm extends object, P extends BitArrayPath<TForm>>(store: BitStoreApi<TForm>, path: P): BitArrayBindingController<TForm, P>;
22
22
 
23
- export { type BitArrayBindingField as B, type BitArrayBindingController as a, createArrayBindingController as c };
23
+ export { type BitArrayBindingController as B, type BitArrayBindingField as a, createArrayBindingController as c };
@@ -0,0 +1,19 @@
1
+ import { r as BitFormGlobal } from './types-CG5nYeRk.js';
2
+
3
+ declare global {
4
+ var __BIT_FORM__: BitFormGlobal | undefined;
5
+ }
6
+ declare const bitBus: BitFormGlobal;
7
+ /**
8
+ * Creates an isolated bus instance — not connected to the browser global.
9
+ * Use this in SSR / Edge Runtime environments (e.g. Next.js Edge) where a
10
+ * shared `globalThis` singleton is unsafe across request contexts.
11
+ *
12
+ * @example
13
+ * // _app.tsx (SSR-safe)
14
+ * const bus = createBitBus();
15
+ * const store = createBitStore({ bus, initialValues: { ... } });
16
+ */
17
+ declare function createBitBus(): BitFormGlobal;
18
+
19
+ export { bitBus as b, createBitBus as c };
@@ -0,0 +1,19 @@
1
+ import { r as BitFormGlobal } from './types-D6LhF5GC.cjs';
2
+
3
+ declare global {
4
+ var __BIT_FORM__: BitFormGlobal | undefined;
5
+ }
6
+ declare const bitBus: BitFormGlobal;
7
+ /**
8
+ * Creates an isolated bus instance — not connected to the browser global.
9
+ * Use this in SSR / Edge Runtime environments (e.g. Next.js Edge) where a
10
+ * shared `globalThis` singleton is unsafe across request contexts.
11
+ *
12
+ * @example
13
+ * // _app.tsx (SSR-safe)
14
+ * const bus = createBitBus();
15
+ * const store = createBitStore({ bus, initialValues: { ... } });
16
+ */
17
+ declare function createBitBus(): BitFormGlobal;
18
+
19
+ export { bitBus as b, createBitBus as c };
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=chunk-5NA2TFPG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,2 @@
1
+ import{d as r}from"./chunk-RD73EBSN.js";function o(e,i){return i&&i.value===e.value&&i.error===e.error&&i.touched===e.touched&&i.isHidden===e.isHidden&&i.isRequired===e.isRequired&&i.isDirty===e.isDirty&&i.isValidating===e.isValidating?i:{value:e.value,error:e.error,touched:e.touched,isHidden:e.isHidden,isRequired:e.isRequired,isDirty:e.isDirty,isValidating:e.isValidating}}function l(e,i){return e===i?!0:!e||!i?!1:r(e.value,i.value)&&e.error===i.error&&e.touched===i.touched&&e.isHidden===i.isHidden&&e.isRequired===i.isRequired&&e.isDirty===i.isDirty&&e.isValidating===i.isValidating}function u(e){let i=e.touched?e.error:void 0,d=!!e.error;return{error:i,touched:e.touched,invalid:!!(e.touched&&e.error),isValidating:e.isValidating,isDirty:e.isDirty,isHidden:e.isHidden,isRequired:e.isRequired,hasError:d}}export{o as a,l as b,u as c};
2
+ //# sourceMappingURL=chunk-63OJBMKK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/utils/field-state-snapshot.ts","../src/core/utils/field-meta.ts"],"sourcesContent":["/**\n * Field State Snapshot Utilities\n *\n * Shared utilities for creating and managing field state snapshots across frameworks\n * (React, Vue, Angular). Reduces code duplication while maintaining type safety.\n */\n\nimport { deepEqual } from \"../utils\";\n\n/**\n * Represents a stable snapshot of field state that can be compared for equality.\n */\nexport interface BitFieldSnapshot<TValue = any> {\n value: TValue;\n error: string | undefined;\n touched: boolean;\n isHidden: boolean;\n isRequired: boolean;\n isDirty: boolean;\n isValidating: boolean;\n}\n\n/**\n * Creates or reuses a field state snapshot with shallow equality checking.\n *\n * This function prevents unnecessary re-renders in frameworks like React by\n * returning the same object reference when field state hasn't changed.\n *\n * @param nextState - The new field state from the store\n * @param lastSnapshot - The previous snapshot (can be null on first call)\n * @returns A stable snapshot object that can be used for equality comparison\n *\n * @example\n * ```typescript\n * const snapshot = createFieldStateSnapshot(store.getFieldState(\"email\"), lastSnapshot);\n * if (snapshot !== lastSnapshot) {\n * // Field state changed, update component\n * render(snapshot);\n * }\n * ```\n */\nexport function createFieldStateSnapshot<TValue = any>(\n nextState: {\n value: TValue;\n error: string | undefined;\n touched: boolean;\n isHidden: boolean;\n isRequired: boolean;\n isDirty: boolean;\n isValidating: boolean;\n },\n lastSnapshot: BitFieldSnapshot<TValue> | null,\n): BitFieldSnapshot<TValue> {\n // Use shallow equality: return cached if all fields are equal by reference\n if (lastSnapshot) {\n const shallowEqual =\n lastSnapshot.value === nextState.value &&\n lastSnapshot.error === nextState.error &&\n lastSnapshot.touched === nextState.touched &&\n lastSnapshot.isHidden === nextState.isHidden &&\n lastSnapshot.isRequired === nextState.isRequired &&\n lastSnapshot.isDirty === nextState.isDirty &&\n lastSnapshot.isValidating === nextState.isValidating;\n\n if (shallowEqual) {\n return lastSnapshot;\n }\n }\n\n return {\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}\n\n/**\n * Deep comparison utility for field state snapshots.\n * Useful for scenarios where shallow comparison isn't sufficient (e.g., object/array values).\n *\n * @param snapshotA - First snapshot\n * @param snapshotB - Second snapshot\n * @returns true if snapshots are deeply equal\n */\nexport function areFieldSnapshotsEqual(\n snapshotA: BitFieldSnapshot | null | undefined,\n snapshotB: BitFieldSnapshot | null | undefined,\n): boolean {\n if (snapshotA === snapshotB) return true;\n if (!snapshotA || !snapshotB) return false;\n\n return (\n deepEqual(snapshotA.value, snapshotB.value) &&\n snapshotA.error === snapshotB.error &&\n snapshotA.touched === snapshotB.touched &&\n snapshotA.isHidden === snapshotB.isHidden &&\n snapshotA.isRequired === snapshotB.isRequired &&\n snapshotA.isDirty === snapshotB.isDirty &&\n snapshotA.isValidating === snapshotB.isValidating\n );\n}\n","import type { BitFieldState } from \"../store/contracts/types\";\n\nexport interface BitDerivedFieldMeta {\n error: string | undefined;\n touched: boolean;\n invalid: boolean;\n isValidating: boolean;\n isDirty: boolean;\n isHidden: boolean;\n isRequired: boolean;\n hasError: boolean;\n}\n\nexport function deriveFieldMeta<T extends object, TValue>(\n state: Readonly<BitFieldState<T, TValue>>,\n): BitDerivedFieldMeta {\n const error = state.touched ? state.error : undefined;\n const hasError = !!state.error;\n\n return {\n error,\n touched: state.touched,\n invalid: !!(state.touched && state.error),\n isValidating: state.isValidating,\n isDirty: state.isDirty,\n isHidden: state.isHidden,\n isRequired: state.isRequired,\n hasError,\n };\n}\n"],"mappings":"wCAyCO,SAASA,EACdC,EASAC,EAC0B,CAE1B,OAAIA,GAEAA,EAAa,QAAUD,EAAU,OACjCC,EAAa,QAAUD,EAAU,OACjCC,EAAa,UAAYD,EAAU,SACnCC,EAAa,WAAaD,EAAU,UACpCC,EAAa,aAAeD,EAAU,YACtCC,EAAa,UAAYD,EAAU,SACnCC,EAAa,eAAiBD,EAAU,aAGjCC,EAIJ,CACL,MAAOD,EAAU,MACjB,MAAOA,EAAU,MACjB,QAASA,EAAU,QACnB,SAAUA,EAAU,SACpB,WAAYA,EAAU,WACtB,QAASA,EAAU,QACnB,aAAcA,EAAU,YAC1B,CACF,CAUO,SAASE,EACdC,EACAC,EACS,CACT,OAAID,IAAcC,EAAkB,GAChC,CAACD,GAAa,CAACC,EAAkB,GAGnCC,EAAUF,EAAU,MAAOC,EAAU,KAAK,GAC1CD,EAAU,QAAUC,EAAU,OAC9BD,EAAU,UAAYC,EAAU,SAChCD,EAAU,WAAaC,EAAU,UACjCD,EAAU,aAAeC,EAAU,YACnCD,EAAU,UAAYC,EAAU,SAChCD,EAAU,eAAiBC,EAAU,YAEzC,CC3FO,SAASE,EACdC,EACqB,CACrB,IAAMC,EAAQD,EAAM,QAAUA,EAAM,MAAQ,OACtCE,EAAW,CAAC,CAACF,EAAM,MAEzB,MAAO,CACL,MAAAC,EACA,QAASD,EAAM,QACf,QAAS,CAAC,EAAEA,EAAM,SAAWA,EAAM,OACnC,aAAcA,EAAM,aACpB,QAASA,EAAM,QACf,SAAUA,EAAM,SAChB,WAAYA,EAAM,WAClB,SAAAE,CACF,CACF","names":["createFieldStateSnapshot","nextState","lastSnapshot","areFieldSnapshotsEqual","snapshotA","snapshotB","deepEqual","deriveFieldMeta","state","error","hasError"]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});function p(t,e,o){return o(t.read.getScopeStatus(e)),t.observe.subscribeScopeStatus(e,o)}exports.a = p;
2
+ //# sourceMappingURL=chunk-BSGJ3T5S.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/scope-status.ts"],"names":["observeScopeStatusSnapshot","store","scopeName","listener"],"mappings":"AAOO,kFAASA,CAAAA,CACdC,CAAAA,CAWAC,CAAAA,CACAC,CAAAA,CACY,CACZ,OAAAA,CAAAA,CAASF,CAAAA,CAAM,IAAA,CAAK,cAAA,CAAeC,CAAS,CAAC,CAAA,CAEtCD,CAAAA,CAAM,OAAA,CAAQ,oBAAA,CAAqBC,CAAAA,CAAWC,CAAQ,CAC/D,CAAA,cAAA","file":"/home/runner/work/bit-form/bit-form/dist/chunk-BSGJ3T5S.cjs","sourcesContent":["import type { ScopeStatus } from \"./store/contracts/types\";\nexport {\n areScopeErrorsEqual,\n isScopeStatusEqual,\n getScopeSubscriptionPaths,\n} from \"./store/shared/scope-status\";\n\nexport function observeScopeStatusSnapshot(\n store: {\n read: {\n getScopeStatus(scopeName: string): ScopeStatus;\n };\n observe: {\n subscribeScopeStatus(\n scopeName: string,\n listener: (status: ScopeStatus) => void,\n ): () => void;\n };\n },\n scopeName: string,\n listener: (status: ScopeStatus) => void,\n): () => void {\n listener(store.read.getScopeStatus(scopeName));\n\n return store.observe.subscribeScopeStatus(scopeName, listener);\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import{d as k}from"./chunk-UQ3DSUWC.js";import{a as M,b as A,d as E,e as C,g as D,i as U,j,k as I}from"./chunk-E2NZR44P.js";import{b as F}from"./chunk-EQ55DKX2.js";import{a as q}from"./chunk-63OJBMKK.js";import{c as V,f as w}from"./chunk-RD73EBSN.js";import{createContext as H,useContext as J}from"react";import{jsx as K}from"react/jsx-runtime";var L=H(null),dt=({store:t,children:e})=>K(L.Provider,{value:k(t),children:e}),c=()=>{let t=J(L);if(!t)throw new Error("BitForm hooks devem ser usados dentro de um BitFormProvider");return t};import{useCallback as p,useSyncExternalStore as Q,useMemo as W,useRef as X,useState as O}from"react";function yt(){let t=c(),[e,r]=O(null),[n,o]=O(null),s=X(null),m=p(S=>A(t,S),[t]),l=p(()=>{let S=M(t);return s.current&&s.current.isValid===S.isValid&&s.current.isDirty===S.isDirty&&s.current.isSubmitting===S.isSubmitting?s.current:(s.current=S,S)},[t]),i=Q(m,l,l),d=W(()=>D(t,{clearSubmissionState:()=>{r(null),o(null)},setSubmissionResult:S=>{o(S)},setSubmissionError:S=>{r(S)}}),[t]),{controller:a,actions:h}=d,x=p(a.submit,[a]),v=p(a.onSubmit,[a]),T=p(a.reset,[a]),u=p(a.getValues,[a]),b=p(a.getErrors,[a]),B=p(a.getTouched,[a]),g=p(a.getDirtyValues,[a]);return{meta:W(()=>({...i,submitError:e,lastResponse:n}),[i,e,n]),getValues:u,getErrors:b,getTouched:B,getDirtyValues:g,submit:x,onSubmit:v,reset:T,...h}}import{useCallback as $,useEffect as Y,useSyncExternalStore as Z,useMemo as z}from"react";function Et(t){let e=c(),r=z(()=>U(e,t),[e,t]),n=$(()=>r.readItems(),[r]),o=$(l=>e.observe.subscribePath(t,()=>l()),[e,t]),s=Z(o,n,n),m=z(()=>r.getFields(s),[r,s]);return Y(()=>()=>{I(e,`${t}.`)},[e,t]),{fields:m,length:s.length,append:r.append,prepend:r.prepend,insert:r.insert,remove:r.remove,move:r.move,swap:r.swap,replace:r.replace,clear:r.clear}}import{useCallback as y,useSyncExternalStore as _,useRef as N}from"react";function Mt(t){let e=c(),r=N(null),n=y(()=>{let i=e.read.getScopeStatus(t);return r.current&&F(r.current,i)?r.current:(r.current=i,i)},[e,t]),o=y(i=>e.observe.subscribeScopeStatus(t,()=>i()),[e,t]),s=_(o,n,n),m=y(async()=>{let i=await e.write.validate({scope:t}),d=e.read.getScopeErrors(t);return{valid:i,errors:d}},[e,t]),l=y(()=>e.read.getScopeErrors(t),[e,t]);return{scopeName:t,status:s,errors:s.errors,validate:m,getErrors:l,isValid:!s.hasErrors,isDirty:s.isDirty}}import{useCallback as f,useSyncExternalStore as tt,useRef as et,useState as rt}from"react";function jt(t){let e=c(),[r,n]=rt(0),o=t[r]??"",s=et(null),m=f(()=>{let u=e.read.getScopeStatus(o);return s.current&&F(s.current,u)?s.current:(s.current=u,u)},[e,o]),l=tt(f(u=>e.observe.subscribeScopeStatus(o,()=>u()),[e,o]),m,m),i=f(async()=>{let u=await e.write.validate({scope:o}),b=e.read.getScopeErrors(o);return{valid:u,errors:b}},[e,o]),d=f(()=>e.read.getScopeErrors(o),[e,o]),a=f(async()=>{let u=e.read.getScopeFields(o);if(e.feature.hasValidationsInProgress(u))return!1;let b=await e.write.validate({scope:o});if(b)n(B=>Math.min(B+1,t.length-1));else{let B=e.read.getScopeErrors(o),g=Object.keys(B);g.length>0&&e.write.markFieldsTouched(g)}return b},[e,o,t.length]),h=f(()=>{n(u=>Math.max(u-1,0))},[]),x=f(u=>{n(Math.max(0,Math.min(u-1,t.length-1)))},[t.length]),v=r===0,T=r>=t.length-1;return{step:r+1,stepIndex:r,scope:o,next:a,prev:h,goTo:x,isFirst:v,isLast:T,status:l,errors:l.errors,isValid:!l.hasErrors,isDirty:l.isDirty,validate:i,getErrors:d}}import{useCallback as G,useSyncExternalStore as st,useRef as ot}from"react";function zt(t){let e=c(),r=ot(null),n=G(()=>{let s=w(e.read.getState().values,t);return r.current!==null&&V(r.current,s)?r.current:(r.current=s,s)},[e,t]),o=G(s=>e.observe.subscribePath(t,()=>s()),[e,t]);return st(o,n,n)}import{useCallback as R,useMemo as nt,useSyncExternalStore as it}from"react";function Qt(){let t=c(),e=it(m=>C(t,m),()=>E(t),()=>E(t)),r=R(async()=>t.feature.restorePersisted(),[t]),n=R(async()=>{await t.feature.forceSave()},[t]),o=R(async()=>{await t.feature.clearPersisted()},[t]),s=nt(()=>({isSaving:e.isSaving,isRestoring:e.isRestoring,error:e.error}),[e]);return{restore:r,save:n,clear:o,meta:s}}import{useCallback as P,useSyncExternalStore as at,useRef as ut,useEffect as ct}from"react";function re(t){let e=c(),r=ut(null);ct(()=>()=>j(e,t),[e,t]);let n=P(()=>{let i=e.read.getFieldState(t),d=q(i,r.current);return r.current=d,d},[e,t]),o=P(i=>e.observe.subscribeFieldState(t,()=>i()),[e,t]),s=at(o,n,n),m=P(i=>e.write.setField(t,i),[e,t]),l=P(()=>e.write.blurField(t),[e,t]);return{fieldState:s,setValue:m,setBlur:l,store:e}}export{dt as a,c as b,yt as c,re as d,Et as e,Mt as f,jt as g,zt as h,Qt as i};
2
+ //# sourceMappingURL=chunk-CPP7ELA5.js.map