@lehnihon/bit-form 2.2.9 → 2.2.11

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 (139) hide show
  1. package/README.md +17 -0
  2. package/dist/angular/index.cjs +1 -1
  3. package/dist/angular/index.d.cts +19 -52
  4. package/dist/angular/index.d.ts +19 -52
  5. package/dist/angular/index.js +1 -1
  6. package/dist/angular/index.js.map +1 -1
  7. package/dist/bus-BFOBGmd9.d.ts +41 -0
  8. package/dist/bus-DzTqgkZ4.d.cts +41 -0
  9. package/dist/chunk-23IYGRVG.js +2 -0
  10. package/dist/chunk-23IYGRVG.js.map +1 -0
  11. package/dist/chunk-ACEJG5FJ.cjs +2 -0
  12. package/dist/chunk-ACEJG5FJ.cjs.map +1 -0
  13. package/dist/chunk-DRLFDQ5Z.js +2 -0
  14. package/dist/chunk-DRLFDQ5Z.js.map +1 -0
  15. package/dist/{chunk-N4HCGMMM.js → chunk-HDZV334O.js} +2 -2
  16. package/dist/{chunk-GGZPA7AO.cjs → chunk-IQVY4MNY.cjs} +2 -2
  17. package/dist/{chunk-GGZPA7AO.cjs.map → chunk-IQVY4MNY.cjs.map} +1 -1
  18. package/dist/chunk-KYX4G4YS.cjs +2 -0
  19. package/dist/chunk-KYX4G4YS.cjs.map +1 -0
  20. package/dist/chunk-NYKX3QED.js +2 -0
  21. package/dist/chunk-NYKX3QED.js.map +1 -0
  22. package/dist/chunk-PA43XYOW.cjs +2 -0
  23. package/dist/{chunk-IV32WXCF.cjs.map → chunk-PA43XYOW.cjs.map} +1 -1
  24. package/dist/chunk-PG7ZH32Z.js +2 -0
  25. package/dist/chunk-PG7ZH32Z.js.map +1 -0
  26. package/dist/{chunk-2QLQPMCZ.js → chunk-RMD37PXW.js} +2 -2
  27. package/dist/{chunk-OLQVH24Z.cjs → chunk-UFJJOXVB.cjs} +2 -2
  28. package/dist/{chunk-OLQVH24Z.cjs.map → chunk-UFJJOXVB.cjs.map} +1 -1
  29. package/dist/chunk-VAP2C5QV.cjs +2 -0
  30. package/dist/{chunk-J5ALITQW.cjs.map → chunk-VAP2C5QV.cjs.map} +1 -1
  31. package/dist/chunk-W56UISAF.cjs +2 -0
  32. package/dist/chunk-W56UISAF.cjs.map +1 -0
  33. package/dist/chunk-YWBRZGEI.js +2 -0
  34. package/dist/chunk-YWBRZGEI.js.map +1 -0
  35. package/dist/cli/index.cjs +5 -5
  36. package/dist/{types-SOg9xEce.d.cts → config-types-5eR82k2V.d.cts} +40 -169
  37. package/dist/{types-CRCP4Pgq.d.ts → config-types-D9n-rQLk.d.ts} +40 -169
  38. package/dist/core/bindings.cjs +1 -1
  39. package/dist/core/bindings.d.cts +15 -11
  40. package/dist/core/bindings.d.ts +15 -11
  41. package/dist/core/bindings.js +1 -1
  42. package/dist/core/status.d.cts +3 -4
  43. package/dist/core/status.d.ts +3 -4
  44. package/dist/core/store.cjs +1 -1
  45. package/dist/core/store.d.cts +8 -6
  46. package/dist/core/store.d.ts +8 -6
  47. package/dist/core/store.js +1 -1
  48. package/dist/core/utils.cjs +1 -1
  49. package/dist/core/utils.d.cts +2 -3
  50. package/dist/core/utils.d.ts +2 -3
  51. package/dist/core/utils.js +1 -1
  52. package/dist/core.cjs +1 -1
  53. package/dist/core.d.cts +10 -9
  54. package/dist/core.d.ts +10 -9
  55. package/dist/core.js +1 -1
  56. package/dist/devtools/bridge.cjs +1 -1
  57. package/dist/devtools/bridge.d.cts +2 -3
  58. package/dist/devtools/bridge.d.ts +2 -3
  59. package/dist/devtools/bridge.js +1 -1
  60. package/dist/devtools/index.cjs +2 -2
  61. package/dist/devtools/index.d.cts +5 -3
  62. package/dist/devtools/index.d.ts +5 -3
  63. package/dist/devtools/index.js +1 -1
  64. package/dist/{field-binding-MX6jVQbT.d.ts → field-binding-Bi1g-D8X.d.ts} +1 -1
  65. package/dist/{field-binding-B_OX3bjp.d.cts → field-binding-X5TkvfUt.d.cts} +1 -1
  66. package/dist/index.cjs +1 -1
  67. package/dist/index.d.cts +7 -5
  68. package/dist/index.d.ts +7 -5
  69. package/dist/index.js +1 -1
  70. package/dist/mask.d.cts +2 -2
  71. package/dist/mask.d.ts +2 -2
  72. package/dist/meta-types-BC1VLABk.d.cts +28 -0
  73. package/dist/meta-types-BC1VLABk.d.ts +28 -0
  74. package/dist/react/index.cjs +1 -1
  75. package/dist/react/index.cjs.map +1 -1
  76. package/dist/react/index.d.cts +12 -12
  77. package/dist/react/index.d.ts +12 -12
  78. package/dist/react/index.js +1 -1
  79. package/dist/react/index.js.map +1 -1
  80. package/dist/react-native/index.cjs +1 -1
  81. package/dist/react-native/index.d.cts +10 -9
  82. package/dist/react-native/index.d.ts +10 -9
  83. package/dist/react-native/index.js +1 -1
  84. package/dist/resolvers/index.d.cts +2 -3
  85. package/dist/resolvers/index.d.ts +2 -3
  86. package/dist/resolvers/joi.d.cts +2 -3
  87. package/dist/resolvers/joi.d.ts +2 -3
  88. package/dist/resolvers/yup.d.cts +2 -3
  89. package/dist/resolvers/yup.d.ts +2 -3
  90. package/dist/resolvers/zod.d.cts +2 -3
  91. package/dist/resolvers/zod.d.ts +2 -3
  92. package/dist/runtime-types-D1SRZr-n.d.cts +43 -0
  93. package/dist/runtime-types-D1SRZr-n.d.ts +43 -0
  94. package/dist/state-types-8bUndWfg.d.cts +42 -0
  95. package/dist/state-types-8bUndWfg.d.ts +42 -0
  96. package/dist/{store-api-types-Bm3EAqR_.d.cts → store-api-types-Bozwlwyb.d.ts} +9 -5
  97. package/dist/{store-api-types-DfTFy2h4.d.ts → store-api-types-DSgYwMS3.d.cts} +9 -5
  98. package/dist/{types-D8DgIUhJ.d.cts → types-CUXh7PqD.d.cts} +1 -1
  99. package/dist/{types-D8DgIUhJ.d.ts → types-CUXh7PqD.d.ts} +1 -1
  100. package/dist/upload-C4JqIaU2.d.cts +89 -0
  101. package/dist/upload-ao6skK9K.d.ts +89 -0
  102. package/dist/{use-bit-persist-BDMZmxBh.d.ts → use-bit-persist-Bd1H2fge.d.ts} +12 -45
  103. package/dist/{use-bit-persist-CBTZIMc5.d.cts → use-bit-persist-DDxV21AN.d.cts} +12 -45
  104. package/dist/utils.cjs +1 -1
  105. package/dist/utils.js +1 -1
  106. package/dist/vue/index.cjs +1 -1
  107. package/dist/vue/index.d.cts +18 -51
  108. package/dist/vue/index.d.ts +18 -51
  109. package/dist/vue/index.js +1 -1
  110. package/dist/vue/index.js.map +1 -1
  111. package/package.json +2 -2
  112. package/dist/array-controller-C61ByyG6.d.ts +0 -23
  113. package/dist/array-controller-CtlqjA0e.d.cts +0 -23
  114. package/dist/bus-BKuMV3E7.d.ts +0 -19
  115. package/dist/bus-WOHGxuVy.d.cts +0 -19
  116. package/dist/chunk-6LNXTSZ6.cjs +0 -2
  117. package/dist/chunk-6LNXTSZ6.cjs.map +0 -1
  118. package/dist/chunk-IV32WXCF.cjs +0 -2
  119. package/dist/chunk-J5ALITQW.cjs +0 -2
  120. package/dist/chunk-J5GQLEVA.js +0 -2
  121. package/dist/chunk-J5GQLEVA.js.map +0 -1
  122. package/dist/chunk-KDHPLXZF.cjs +0 -2
  123. package/dist/chunk-KDHPLXZF.cjs.map +0 -1
  124. package/dist/chunk-O5UPA33R.js +0 -2
  125. package/dist/chunk-O5UPA33R.js.map +0 -1
  126. package/dist/chunk-QX2IVNMK.js +0 -2
  127. package/dist/chunk-QX2IVNMK.js.map +0 -1
  128. package/dist/chunk-UARLAXZX.js +0 -2
  129. package/dist/chunk-UARLAXZX.js.map +0 -1
  130. package/dist/chunk-X5UCRGYJ.cjs +0 -2
  131. package/dist/chunk-X5UCRGYJ.cjs.map +0 -1
  132. package/dist/chunk-Y3XVQGCU.js +0 -2
  133. package/dist/chunk-Y3XVQGCU.js.map +0 -1
  134. package/dist/meta-types-Bzmm21TP.d.cts +0 -18
  135. package/dist/meta-types-Bzmm21TP.d.ts +0 -18
  136. package/dist/upload-C2mpfhp1.d.cts +0 -17
  137. package/dist/upload-C2mpfhp1.d.ts +0 -17
  138. /package/dist/{chunk-N4HCGMMM.js.map → chunk-HDZV334O.js.map} +0 -0
  139. /package/dist/{chunk-2QLQPMCZ.js.map → chunk-RMD37PXW.js.map} +0 -0
package/README.md CHANGED
@@ -172,6 +172,8 @@ npm install @lehnihon/bit-form
172
172
 
173
173
  The complete documentation is available in the `/docs` folder. Explore the guides below to get started:
174
174
 
175
+ - **[Documentation Hub](./docs/README.md)**: Start here to navigate by goal (onboarding, troubleshooting, API).
176
+
175
177
  ### 🚀 Getting Started
176
178
 
177
179
  - **[Introduction & Installation](./docs/01-getting-started.md)**: Overview and basic setup.
@@ -202,8 +204,22 @@ The complete documentation is available in the `/docs` folder. Explore the guide
202
204
  ### 📖 Guides & Examples
203
205
 
204
206
  - **[When to Use What](./docs/guides/when-to-use-what.md)**: Quick reference for resolver vs asyncValidate vs setServerErrors, computed vs transform, and conditional fields.
207
+ - **[Troubleshooting](./docs/guides/troubleshooting.md)**: Debug common form setup, validation, and devtools issues.
208
+ - **[Migration Guide](./docs/guides/migration.md)**: Plan upgrades and breaking-change checks safely.
209
+ - **[Testing Guide](./docs/guides/testing.md)**: Unit, integration, and e2e testing strategies.
210
+ - **[Performance Guide](./docs/guides/performance.md)**: Optimize large forms and subscription patterns.
211
+ - **[Accessibility Guide](./docs/guides/accessibility.md)**: Build accessible form experiences across frameworks.
212
+ - **[Compatibility Matrix](./docs/guides/compatibility-matrix.md)**: Runtime and framework target baseline.
213
+ - **[Release Gates](./docs/guides/release-gates.md)**: Pre-release quality and docs synchronization checks.
214
+ - **[FAQ](./docs/guides/faq.md)**: Quick answers for common implementation questions.
215
+ - **[Example Template](./docs/guides/example-template.md)**: Editorial template for consistent, copy-paste-ready examples.
205
216
  - **[Complete Form Example](./docs/examples/complete-form-example.md)**: End-to-end example with masks, asyncValidate, conditional logic, scopes, history, and DevTools.
217
+ - **[Conditional + Server Validation Example](./docs/examples/conditional-server-validation-example.md)**: Dynamic fields with 422/server mapping workflow.
218
+ - **[Multi-Step + Draft Example](./docs/examples/multi-step-draft-example.md)**: Scope-based wizard with persistence controls.
219
+ - **[Array Reorder Example](./docs/examples/array-reorder-example.md)**: Stable keys and automatic error reallocation during reorder/remove.
220
+ - **[Plugin + DevTools Example](./docs/examples/plugin-devtools-lifecycle-example.md)**: Lifecycle audit logs with local timeline inspection.
206
221
  - **[Upload Integration Example](./docs/examples/upload-integration-example.md)**: Backend-first upload example using `useBitUpload`/`injectBitUpload`.
222
+ - **[E-commerce Checkout Example](./docs/examples/ecommerce-checkout-example.md)**: Advanced nested + arrays + computed + async shipping quote flow.
207
223
  - **[Server Errors](./docs/examples/server-errors.md)**: Client validation (resolver/asyncValidate) vs API 422 handling (setServerErrors, onSubmit).
208
224
 
209
225
  ### 🔍 DevTools & CLI
@@ -217,6 +233,7 @@ The complete documentation is available in the `/docs` folder. Explore the guide
217
233
 
218
234
  - **[API Reference](./docs/api-reference/bit-store.md)**: Full `BitStore` class documentation.
219
235
  - **[Type Definitions](./docs/api-reference/types.md)**: Core TypeScript interfaces and types.
236
+ - **[Advanced Core API](./docs/api-reference/advanced-core.md)**: Public advanced exports for custom adapters and tooling.
220
237
 
221
238
  ## ⚠️ Breaking Changes (dev branch)
222
239
 
@@ -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');require('../chunk-W5CLDRRE.cjs');var _chunkJ5ALITQWcjs = require('../chunk-J5ALITQW.cjs');var _chunkKDHPLXZFcjs = require('../chunk-KDHPLXZF.cjs');var _chunkBSGJ3T5Scjs = require('../chunk-BSGJ3T5S.cjs');var _chunkRHMJPKNVcjs = require('../chunk-RHMJPKNV.cjs');var _chunk3KI3GEU3cjs = require('../chunk-3KI3GEU3.cjs');require('../chunk-OLQVH24Z.cjs');var _chunk6LNXTSZ6cjs = require('../chunk-6LNXTSZ6.cjs');var _chunkPFPGASVZcjs = require('../chunk-PFPGASVZ.cjs');var _core = require('@angular/core');var B=new (0, _core.InjectionToken)("BIT_STORE");function at(t){return{provide:B,useValue:_chunkJ5ALITQWcjs.d.call(void 0, t)}}function u(){let t=_core.inject.call(void 0, B,{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),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=_chunkKDHPLXZFcjs.c.call(void 0, t,m=>{r.set(m)});e.onDestroy(()=>i());let p=_core.computed.call(void 0, ()=>r().isValid),a=_core.computed.call(void 0, ()=>r().isSubmitting),d=_core.computed.call(void 0, ()=>r().isDirty),{controller:c,actions:n}=_chunkKDHPLXZFcjs.i.call(void 0, t,{clearSubmissionState:()=>{o.set(null),s.set(null)},setSubmissionResult:m=>{s.set(m)},setSubmissionError:m=>{o.set(m)}},{stopPropagation:!0});return{meta:{isValid:p,isDirty:d,isSubmitting:a,submitError:o.asReadonly(),lastResponse:s.asReadonly()},getValues:c.getValues,getErrors:c.getErrors,getTouched:c.getTouched,getDirtyValues:c.getDirtyValues,submit:c.submit,onSubmit:c.onSubmit,reset:c.reset,...n}}function E(t){let e=_core.inject.call(void 0, B),r=_core.signal.call(void 0, e.read.getFieldState(t)),o=e.observe.subscribeFieldState(t,y=>{r.set(y)});_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>{o(),_chunkKDHPLXZFcjs.j.call(void 0, e,t)});let s=_core.computed.call(void 0, ()=>r().value),i=_core.computed.call(void 0, ()=>_chunk3KI3GEU3cjs.a.call(void 0, r())),p=_core.computed.call(void 0, ()=>i().error),a=_core.computed.call(void 0, ()=>i().touched),d=_core.computed.call(void 0, ()=>i().invalid),c=_core.computed.call(void 0, ()=>i().isDirty),n=_core.computed.call(void 0, ()=>i().isValidating),f=_core.computed.call(void 0, ()=>i().isHidden),m=_core.computed.call(void 0, ()=>i().isRequired),{fieldController:j}=_chunkKDHPLXZFcjs.h.call(void 0, e,t),T=_core.computed.call(void 0, ()=>j.displayValue(s())),v=y=>{j.setValue(y)},h=()=>j.setBlur(),x=_core.computed.call(void 0, ()=>i().hasError);return{value:s,displayValue:T,setValue:v,setBlur:h,update:y=>v(_chunkPFPGASVZcjs.a.call(void 0, y)?_nullishCoalesce(_optionalChain([y, 'access', _2 => _2.target, 'optionalAccess', _3 => _3.value]), () => (null)):y),meta:{error:p,touched:a,invalid:d,isDirty:c,isValidating:n,isHidden:f,isRequired:m,hasError:x}}}function ft(t){let e=_core.inject.call(void 0, B),r=_core.inject.call(void 0, _core.DestroyRef),o=_chunkKDHPLXZFcjs.g.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(),_chunkKDHPLXZFcjs.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 Rt(){let t=u(),e=_core.inject.call(void 0, _core.DestroyRef),r=_core.signal.call(void 0, _chunkRHMJPKNVcjs.f.call(void 0, t)),o=_chunkRHMJPKNVcjs.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,f=>{o.set(f)});_optionalChain([_core.inject.call(void 0, _core.DestroyRef,{optional:!0}), 'optionalAccess', _4 => _4.onDestroy, 'call', _5 => _5(()=>s())]);let p=async()=>{let f=await e.feature.validate({scope:t}),m=e.read.getScopeErrors(t);return{valid:f,errors:m}},a=()=>e.read.getScopeErrors(t),d=_core.computed.call(void 0, ()=>!o().hasErrors),c=_core.computed.call(void 0, ()=>o().isDirty),n=_core.computed.call(void 0, ()=>o().errors);return{scopeName:t,status:o,errors:n,validate:p,getErrors:a,isValid:d,isDirty:c,unsubscribe:s}}function ht(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())),p=()=>{let l=s(),g=e.read.getScopeStatus(l),b=i();_chunkRHMJPKNVcjs.b.call(void 0, b,g)||i.set(g)},a=e.observe.subscribeScopeStatus(s(),p),d=()=>{a(),a=e.observe.subscribeScopeStatus(s(),p)};_optionalChain([_core.inject.call(void 0, _core.DestroyRef,{optional:!0}), 'optionalAccess', _6 => _6.onDestroy, 'call', _7 => _7(()=>a())]);let n=async()=>{let l=s(),g=await e.feature.validate({scope:l}),b=e.read.getScopeErrors(l);return{valid:g,errors:b}},f=()=>e.read.getScopeErrors(s()),m=async()=>{let l=s(),g=e.read.getScopeFields(l);if(e.feature.hasValidationsInProgress(g))return!1;let b=await e.feature.validate({scope:l});if(b){let F=Math.min(r()+1,t.length-1);r.set(F),i.set(e.read.getScopeStatus(_nullishCoalesce(t[F], () => ("")))),d()}else{let F=e.read.getScopeErrors(l),k=Object.keys(F);k.length>0&&e.write.markFieldsTouched(k)}return b},j=()=>{let l=Math.max(r()-1,0);r.set(l),i.set(e.read.getScopeStatus(_nullishCoalesce(t[l], () => ("")))),d()},T=l=>{let g=Math.max(0,Math.min(l-1,t.length-1));r.set(g),i.set(e.read.getScopeStatus(_nullishCoalesce(t[g], () => ("")))),d()},v=_core.computed.call(void 0, ()=>r()+1),h=_core.computed.call(void 0, ()=>r()===0),x=_core.computed.call(void 0, ()=>r()>=t.length-1),U=_core.computed.call(void 0, ()=>!i().hasErrors),y=_core.computed.call(void 0, ()=>i().isDirty),st=_core.computed.call(void 0, ()=>i().errors);return{step:v,stepIndex:r,scope:o,next:m,prev:j,goTo:T,isFirst:h,isLast:x,status:i,errors:st,isValid:U,isDirty:y,validate:n,getErrors:f}}function Et(t){let e=u(),r=_core.inject.call(void 0, _core.DestroyRef),o=_core.signal.call(void 0, _chunk6LNXTSZ6cjs.f.call(void 0, e.read.getState().values,t),{equal:_chunk6LNXTSZ6cjs.c}),s=e.observe.subscribePath(t,i=>{o.set(i)});return r.onDestroy(s),o.asReadonly()}function At(t,e,r){let o=_core.inject.call(void 0, B),s=E(t),i=null,p=_core.signal.call(void 0, !1),a={setLoading:n=>p.set(n),setError:(n,f)=>o.write.setError(n,f),setValue:n=>s.setValue(n),getUploadKey:()=>i,setUploadKey:n=>{i=n}},d=_chunkIV32WXCFcjs.a.call(void 0, t,e,a),c=_chunkIV32WXCFcjs.b.call(void 0, t,r,a);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()||p()),upload:d,remove:c}}function Ht(){let t=u(),e=_core.signal.call(void 0, t.read.getPersistMetadata()),r=_chunkKDHPLXZFcjs.f.call(void 0, t,a=>{e.set(a)});return _optionalChain([_core.inject.call(void 0, _core.DestroyRef,{optional:!0}), 'optionalAccess', _8 => _8.onDestroy, 'call', _9 => _9(()=>r())]),{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 = ft; exports.injectBitField = E; exports.injectBitForm = ut; exports.injectBitHistory = Rt; exports.injectBitPersist = Ht; exports.injectBitScope = Ft; exports.injectBitSteps = ht; exports.injectBitUpload = At; 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 _chunkPA43XYOWcjs = require('../chunk-PA43XYOW.cjs');require('../chunk-W5CLDRRE.cjs');var _chunkVAP2C5QVcjs = require('../chunk-VAP2C5QV.cjs');var _chunkACEJG5FJcjs = require('../chunk-ACEJG5FJ.cjs');var _chunkBSGJ3T5Scjs = require('../chunk-BSGJ3T5S.cjs');var _chunkRHMJPKNVcjs = require('../chunk-RHMJPKNV.cjs');var _chunk3KI3GEU3cjs = require('../chunk-3KI3GEU3.cjs');require('../chunk-UFJJOXVB.cjs');var _chunkKYX4G4YScjs = require('../chunk-KYX4G4YS.cjs');var _chunkPFPGASVZcjs = require('../chunk-PFPGASVZ.cjs');var _core = require('@angular/core');var B=new (0, _core.InjectionToken)("BIT_STORE");function at(t){return{provide:B,useValue:_chunkVAP2C5QVcjs.d.call(void 0, t)}}function l(){let t=_core.inject.call(void 0, B,{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=l(),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=_chunkACEJG5FJcjs.c.call(void 0, t,m=>{r.set(m)});e.onDestroy(()=>i());let p=_core.computed.call(void 0, ()=>r().isValid),a=_core.computed.call(void 0, ()=>r().isSubmitting),d=_core.computed.call(void 0, ()=>r().isDirty),{controller:c,actions:n}=_chunkACEJG5FJcjs.i.call(void 0, t,{clearSubmissionState:()=>{o.set(null),s.set(null)},setSubmissionResult:m=>{s.set(m)},setSubmissionError:m=>{o.set(m)}},{stopPropagation:!0});return{meta:{isValid:p,isDirty:d,isSubmitting:a,submitError:o.asReadonly(),lastResponse:s.asReadonly()},getValues:c.getValues,getErrors:c.getErrors,getTouched:c.getTouched,getDirtyValues:c.getDirtyValues,submit:c.submit,onSubmit:c.onSubmit,reset:c.reset,...n}}function E(t){let e=_core.inject.call(void 0, B),r=_core.signal.call(void 0, e.read.getFieldState(t)),o=e.observe.subscribeFieldState(t,y=>{r.set(y)});_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>{o(),_chunkACEJG5FJcjs.j.call(void 0, e,t)});let s=_core.computed.call(void 0, ()=>r().value),i=_core.computed.call(void 0, ()=>_chunk3KI3GEU3cjs.a.call(void 0, r())),p=_core.computed.call(void 0, ()=>i().error),a=_core.computed.call(void 0, ()=>i().touched),d=_core.computed.call(void 0, ()=>i().invalid),c=_core.computed.call(void 0, ()=>i().isDirty),n=_core.computed.call(void 0, ()=>i().isValidating),f=_core.computed.call(void 0, ()=>i().isHidden),m=_core.computed.call(void 0, ()=>i().isRequired),{fieldController:j}=_chunkACEJG5FJcjs.h.call(void 0, e,t),T=_core.computed.call(void 0, ()=>j.displayValue(s())),v=y=>{j.setValue(y)},h=()=>j.setBlur(),x=_core.computed.call(void 0, ()=>i().hasError);return{value:s,displayValue:T,setValue:v,setBlur:h,update:y=>v(_chunkPFPGASVZcjs.a.call(void 0, y)?_nullishCoalesce(_optionalChain([y, 'access', _2 => _2.target, 'optionalAccess', _3 => _3.value]), () => (null)):y),meta:{error:p,touched:a,invalid:d,isDirty:c,isValidating:n,isHidden:f,isRequired:m,hasError:x}}}function ft(t){let e=_core.inject.call(void 0, B),r=_core.inject.call(void 0, _core.DestroyRef),o=_chunkACEJG5FJcjs.g.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(),_chunkACEJG5FJcjs.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 Rt(){let t=l(),e=_core.inject.call(void 0, _core.DestroyRef),r=_core.signal.call(void 0, _chunkRHMJPKNVcjs.f.call(void 0, t)),o=_chunkRHMJPKNVcjs.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=l(),r=e.read.getScopeStatus(t),o=_core.signal.call(void 0, r),s=_chunkBSGJ3T5Scjs.a.call(void 0, e,t,f=>{o.set(f)});_optionalChain([_core.inject.call(void 0, _core.DestroyRef,{optional:!0}), 'optionalAccess', _4 => _4.onDestroy, 'call', _5 => _5(()=>s())]);let p=async()=>{let f=await e.feature.validate({scope:t}),m=e.read.getScopeErrors(t);return{valid:f,errors:m}},a=()=>e.read.getScopeErrors(t),d=_core.computed.call(void 0, ()=>!o().hasErrors),c=_core.computed.call(void 0, ()=>o().isDirty),n=_core.computed.call(void 0, ()=>o().errors);return{scopeName:t,status:o,errors:n,validate:p,getErrors:a,isValid:d,isDirty:c,unsubscribe:s}}function ht(t){let e=l(),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())),p=()=>{let u=s(),g=e.read.getScopeStatus(u),b=i();_chunkRHMJPKNVcjs.b.call(void 0, b,g)||i.set(g)},a=e.observe.subscribeScopeStatus(s(),p),d=()=>{a(),a=e.observe.subscribeScopeStatus(s(),p)};_optionalChain([_core.inject.call(void 0, _core.DestroyRef,{optional:!0}), 'optionalAccess', _6 => _6.onDestroy, 'call', _7 => _7(()=>a())]);let n=async()=>{let u=s(),g=await e.feature.validate({scope:u}),b=e.read.getScopeErrors(u);return{valid:g,errors:b}},f=()=>e.read.getScopeErrors(s()),m=async()=>{let u=s(),g=e.read.getScopeFields(u);if(e.feature.hasValidationsInProgress(g))return!1;let b=await e.feature.validate({scope:u});if(b){let F=Math.min(r()+1,t.length-1);r.set(F),i.set(e.read.getScopeStatus(_nullishCoalesce(t[F], () => ("")))),d()}else{let F=e.read.getScopeErrors(u),U=Object.keys(F);U.length>0&&e.write.markFieldsTouched(U)}return b},j=()=>{let u=Math.max(r()-1,0);r.set(u),i.set(e.read.getScopeStatus(_nullishCoalesce(t[u], () => ("")))),d()},T=u=>{let g=Math.max(0,Math.min(u-1,t.length-1));r.set(g),i.set(e.read.getScopeStatus(_nullishCoalesce(t[g], () => ("")))),d()},v=_core.computed.call(void 0, ()=>r()+1),h=_core.computed.call(void 0, ()=>r()===0),x=_core.computed.call(void 0, ()=>r()>=t.length-1),A=_core.computed.call(void 0, ()=>!i().hasErrors),y=_core.computed.call(void 0, ()=>i().isDirty),st=_core.computed.call(void 0, ()=>i().errors);return{step:v,stepIndex:r,scope:o,next:m,prev:j,goTo:T,isFirst:h,isLast:x,status:i,errors:st,isValid:A,isDirty:y,validate:n,getErrors:f}}function Et(t){let e=l(),r=_core.inject.call(void 0, _core.DestroyRef),o=_core.signal.call(void 0, _chunkKYX4G4YScjs.f.call(void 0, e.read.getState().values,t),{equal:_chunkKYX4G4YScjs.c}),s=e.observe.subscribePath(t,i=>{o.set(i)});return r.onDestroy(s),o.asReadonly()}function kt(t,e,r){let o=_core.inject.call(void 0, B),s=E(t),i=null,p=_core.signal.call(void 0, !1),a={setLoading:n=>p.set(n),setError:(n,f)=>o.write.setError(n,f),setValue:n=>s.setValue(n),getUploadKey:()=>i,setUploadKey:n=>{i=n}},d=_chunkPA43XYOWcjs.a.call(void 0, t,e,a),c=_chunkPA43XYOWcjs.b.call(void 0, t,r,a);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()||p()),upload:d,remove:c}}function Ht(){let t=l(),e=_core.signal.call(void 0, t.read.getPersistMetadata()),r=_chunkACEJG5FJcjs.f.call(void 0, t,a=>{e.set(a)});return _optionalChain([_core.inject.call(void 0, _core.DestroyRef,{optional:!0}), 'optionalAccess', _8 => _8.onDestroy, 'call', _9 => _9(()=>r())]),{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 = ft; exports.injectBitField = E; exports.injectBitForm = lt; exports.injectBitHistory = Rt; exports.injectBitPersist = Ht; exports.injectBitScope = Ft; exports.injectBitSteps = ht; exports.injectBitUpload = kt; exports.injectBitWatch = Et; exports.provideBitStore = at; exports.useBitStore = l;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,13 +1,14 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { Provider, Signal } from '@angular/core';
3
- import { b as BitFrameworkStoreApi, e as BitStoreApi } from '../store-api-types-Bm3EAqR_.cjs';
4
- import '../bus-WOHGxuVy.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-SOg9xEce.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-CtlqjA0e.cjs';
9
- import { a as BitUploadFn, B as BitDeleteUploadFn } from '../upload-C2mpfhp1.cjs';
10
- import '../types-D8DgIUhJ.cjs';
3
+ import { b as BitFrameworkStoreApi, e as BitStoreApi } from '../store-api-types-DSgYwMS3.cjs';
4
+ import '../bus-DzTqgkZ4.cjs';
5
+ import { d as BitPath, e as BitPathValue, f as BitPersistMetadata, b as BitErrors, h as BitTouched, D as DeepPartial, a as BitArrayPath, B as BitArrayItem } from '../state-types-8bUndWfg.cjs';
6
+ import { V as ValidateScopeResult, S as ScopeStatus } from '../runtime-types-D1SRZr-n.cjs';
7
+ import { b as BitValidationOptions } from '../meta-types-BC1VLABk.cjs';
8
+ import { B as BitFieldInputEvent } from '../field-binding-X5TkvfUt.cjs';
9
+ import { c as BitHistoryAdapterResult, d as BitPersistAdapterResult, e as BitStepsAdapterResult, f as BitUploadAdapterResult, a as BitArrayBindingField, g as BitUploadFn, b as BitDeleteUploadFn } from '../upload-C4JqIaU2.cjs';
10
+ import '../types-CUXh7PqD.cjs';
11
+ import '../config-types-5eR82k2V.cjs';
11
12
 
12
13
  declare function provideBitStore<T extends object>(store: BitFrameworkStoreApi<T> | BitStoreApi<T>): Provider;
13
14
  declare function useBitStore<T extends object>(): BitFrameworkStoreApi<T>;
@@ -41,56 +42,22 @@ interface InjectBitFieldResult<TForm extends object = any, P extends BitPath<TFo
41
42
  * Result from injectBitSteps in Angular.
42
43
  * Provides multi-step form navigation and validation using Angular Signals.
43
44
  */
44
- interface InjectBitStepsResult {
45
- step: ReturnType<typeof _angular_core.computed<number>>;
46
- stepIndex: ReturnType<typeof _angular_core.signal<number>>;
47
- scope: ReturnType<typeof _angular_core.computed<string>>;
48
- next: () => Promise<boolean>;
49
- prev: () => void;
50
- goTo: (step: number) => void;
51
- isFirst: ReturnType<typeof _angular_core.computed<boolean>>;
52
- isLast: ReturnType<typeof _angular_core.computed<boolean>>;
53
- status: ReturnType<typeof _angular_core.signal<ScopeStatus>>;
54
- errors: ReturnType<typeof _angular_core.computed<Record<string, string>>>;
55
- isValid: ReturnType<typeof _angular_core.computed<boolean>>;
56
- isDirty: ReturnType<typeof _angular_core.computed<boolean>>;
57
- validate: () => Promise<ValidateScopeResult>;
58
- getErrors: () => Record<string, string>;
59
- }
45
+ type InjectBitStepsResult = BitStepsAdapterResult<ReturnType<typeof _angular_core.computed<number>>, ReturnType<typeof _angular_core.signal<number>>, ReturnType<typeof _angular_core.computed<string>>, ReturnType<typeof _angular_core.computed<boolean>>, ReturnType<typeof _angular_core.signal<ScopeStatus>>, ReturnType<typeof _angular_core.computed<Record<string, string>>>, ValidateScopeResult>;
60
46
  /**
61
47
  * Result from injectBitUpload in Angular.
62
48
  * Provides file upload functionality with integrated validation (Angular Signal).
63
49
  */
64
- interface InjectBitUploadResult {
65
- value: Signal<string | File | null>;
66
- setValue: (value: string | File | null) => void;
67
- error: Signal<string | undefined>;
68
- isValidating: Signal<boolean>;
69
- upload: (file: File | null | undefined) => Promise<void>;
70
- remove: () => Promise<void>;
71
- }
50
+ type InjectBitUploadResult = BitUploadAdapterResult<Signal<string | File | null>, Signal<string | undefined>, Signal<boolean>>;
72
51
  /**
73
52
  * Result from injectBitHistory in Angular.
74
53
  * Provides form history undo/redo capabilities (Angular Signals).
75
54
  */
76
- interface InjectBitHistoryResult {
77
- canUndo: ReturnType<typeof _angular_core.computed<boolean>>;
78
- canRedo: ReturnType<typeof _angular_core.computed<boolean>>;
79
- historyIndex: ReturnType<typeof _angular_core.computed<BitHistoryMetadata["historyIndex"]>>;
80
- historySize: ReturnType<typeof _angular_core.computed<BitHistoryMetadata["historySize"]>>;
81
- undo: () => void;
82
- redo: () => void;
83
- }
84
- interface InjectBitPersistResult {
85
- restore: () => Promise<boolean>;
86
- save: () => Promise<void>;
87
- clear: () => Promise<void>;
88
- meta: {
89
- isSaving: Signal<BitPersistMetadata["isSaving"]>;
90
- isRestoring: Signal<BitPersistMetadata["isRestoring"]>;
91
- error: Signal<BitPersistMetadata["error"]>;
92
- };
93
- }
55
+ type InjectBitHistoryResult = BitHistoryAdapterResult<ReturnType<typeof _angular_core.computed<boolean>>, ReturnType<typeof _angular_core.computed<boolean>>, ReturnType<typeof _angular_core.computed<BitHistoryMetadata["historyIndex"]>>, ReturnType<typeof _angular_core.computed<BitHistoryMetadata["historySize"]>>>;
56
+ type InjectBitPersistResult = BitPersistAdapterResult<{
57
+ isSaving: Signal<BitPersistMetadata["isSaving"]>;
58
+ isRestoring: Signal<BitPersistMetadata["isRestoring"]>;
59
+ error: Signal<BitPersistMetadata["error"]>;
60
+ }>;
94
61
  interface InjectBitFormResult<T extends object = any> {
95
62
  meta: {
96
63
  isValid: ReturnType<typeof _angular_core.computed<boolean>>;
@@ -103,7 +70,7 @@ interface InjectBitFormResult<T extends object = any> {
103
70
  getErrors: () => BitErrors<T>;
104
71
  getTouched: () => BitTouched<T>;
105
72
  getDirtyValues: () => Partial<T>;
106
- submit: (onSuccess: (values: T, dirtyValues?: Partial<T>) => void | Promise<void>) => (event?: Event) => Promise<void>;
73
+ submit: (onSuccess: (values: T, dirtyValues?: Partial<T>) => unknown | Promise<unknown>) => (event?: Event) => Promise<void>;
107
74
  onSubmit: (handler: (values: T, dirtyValues?: Partial<T>) => Promise<unknown>) => (event?: Event) => Promise<void>;
108
75
  reset: () => void;
109
76
  transaction: <TResult>(callback: () => TResult) => TResult;
@@ -160,7 +127,7 @@ declare function injectBitWatch<TForm extends object = any, P extends BitPath<TF
160
127
  * Minimal upload API integrated with global field validation lifecycle.
161
128
  */
162
129
 
163
- declare function injectBitUpload(fieldPath: string, uploadFn: BitUploadFn, deleteFile?: BitDeleteUploadFn): InjectBitUploadResult;
130
+ declare function injectBitUpload<TMetadata extends Record<string, unknown> = Record<string, unknown>>(fieldPath: string, uploadFn: BitUploadFn<TMetadata>, deleteFile?: BitDeleteUploadFn): InjectBitUploadResult;
164
131
 
165
132
  declare function injectBitPersist<T extends object = any>(): InjectBitPersistResult;
166
133
 
@@ -1,13 +1,14 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { Provider, Signal } from '@angular/core';
3
- import { b as BitFrameworkStoreApi, e as BitStoreApi } from '../store-api-types-DfTFy2h4.js';
4
- import '../bus-BKuMV3E7.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-CRCP4Pgq.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-C61ByyG6.js';
9
- import { a as BitUploadFn, B as BitDeleteUploadFn } from '../upload-C2mpfhp1.js';
10
- import '../types-D8DgIUhJ.js';
3
+ import { b as BitFrameworkStoreApi, e as BitStoreApi } from '../store-api-types-Bozwlwyb.js';
4
+ import '../bus-BFOBGmd9.js';
5
+ import { d as BitPath, e as BitPathValue, f as BitPersistMetadata, b as BitErrors, h as BitTouched, D as DeepPartial, a as BitArrayPath, B as BitArrayItem } from '../state-types-8bUndWfg.js';
6
+ import { V as ValidateScopeResult, S as ScopeStatus } from '../runtime-types-D1SRZr-n.js';
7
+ import { b as BitValidationOptions } from '../meta-types-BC1VLABk.js';
8
+ import { B as BitFieldInputEvent } from '../field-binding-Bi1g-D8X.js';
9
+ import { c as BitHistoryAdapterResult, d as BitPersistAdapterResult, e as BitStepsAdapterResult, f as BitUploadAdapterResult, a as BitArrayBindingField, g as BitUploadFn, b as BitDeleteUploadFn } from '../upload-ao6skK9K.js';
10
+ import '../types-CUXh7PqD.js';
11
+ import '../config-types-D9n-rQLk.js';
11
12
 
12
13
  declare function provideBitStore<T extends object>(store: BitFrameworkStoreApi<T> | BitStoreApi<T>): Provider;
13
14
  declare function useBitStore<T extends object>(): BitFrameworkStoreApi<T>;
@@ -41,56 +42,22 @@ interface InjectBitFieldResult<TForm extends object = any, P extends BitPath<TFo
41
42
  * Result from injectBitSteps in Angular.
42
43
  * Provides multi-step form navigation and validation using Angular Signals.
43
44
  */
44
- interface InjectBitStepsResult {
45
- step: ReturnType<typeof _angular_core.computed<number>>;
46
- stepIndex: ReturnType<typeof _angular_core.signal<number>>;
47
- scope: ReturnType<typeof _angular_core.computed<string>>;
48
- next: () => Promise<boolean>;
49
- prev: () => void;
50
- goTo: (step: number) => void;
51
- isFirst: ReturnType<typeof _angular_core.computed<boolean>>;
52
- isLast: ReturnType<typeof _angular_core.computed<boolean>>;
53
- status: ReturnType<typeof _angular_core.signal<ScopeStatus>>;
54
- errors: ReturnType<typeof _angular_core.computed<Record<string, string>>>;
55
- isValid: ReturnType<typeof _angular_core.computed<boolean>>;
56
- isDirty: ReturnType<typeof _angular_core.computed<boolean>>;
57
- validate: () => Promise<ValidateScopeResult>;
58
- getErrors: () => Record<string, string>;
59
- }
45
+ type InjectBitStepsResult = BitStepsAdapterResult<ReturnType<typeof _angular_core.computed<number>>, ReturnType<typeof _angular_core.signal<number>>, ReturnType<typeof _angular_core.computed<string>>, ReturnType<typeof _angular_core.computed<boolean>>, ReturnType<typeof _angular_core.signal<ScopeStatus>>, ReturnType<typeof _angular_core.computed<Record<string, string>>>, ValidateScopeResult>;
60
46
  /**
61
47
  * Result from injectBitUpload in Angular.
62
48
  * Provides file upload functionality with integrated validation (Angular Signal).
63
49
  */
64
- interface InjectBitUploadResult {
65
- value: Signal<string | File | null>;
66
- setValue: (value: string | File | null) => void;
67
- error: Signal<string | undefined>;
68
- isValidating: Signal<boolean>;
69
- upload: (file: File | null | undefined) => Promise<void>;
70
- remove: () => Promise<void>;
71
- }
50
+ type InjectBitUploadResult = BitUploadAdapterResult<Signal<string | File | null>, Signal<string | undefined>, Signal<boolean>>;
72
51
  /**
73
52
  * Result from injectBitHistory in Angular.
74
53
  * Provides form history undo/redo capabilities (Angular Signals).
75
54
  */
76
- interface InjectBitHistoryResult {
77
- canUndo: ReturnType<typeof _angular_core.computed<boolean>>;
78
- canRedo: ReturnType<typeof _angular_core.computed<boolean>>;
79
- historyIndex: ReturnType<typeof _angular_core.computed<BitHistoryMetadata["historyIndex"]>>;
80
- historySize: ReturnType<typeof _angular_core.computed<BitHistoryMetadata["historySize"]>>;
81
- undo: () => void;
82
- redo: () => void;
83
- }
84
- interface InjectBitPersistResult {
85
- restore: () => Promise<boolean>;
86
- save: () => Promise<void>;
87
- clear: () => Promise<void>;
88
- meta: {
89
- isSaving: Signal<BitPersistMetadata["isSaving"]>;
90
- isRestoring: Signal<BitPersistMetadata["isRestoring"]>;
91
- error: Signal<BitPersistMetadata["error"]>;
92
- };
93
- }
55
+ type InjectBitHistoryResult = BitHistoryAdapterResult<ReturnType<typeof _angular_core.computed<boolean>>, ReturnType<typeof _angular_core.computed<boolean>>, ReturnType<typeof _angular_core.computed<BitHistoryMetadata["historyIndex"]>>, ReturnType<typeof _angular_core.computed<BitHistoryMetadata["historySize"]>>>;
56
+ type InjectBitPersistResult = BitPersistAdapterResult<{
57
+ isSaving: Signal<BitPersistMetadata["isSaving"]>;
58
+ isRestoring: Signal<BitPersistMetadata["isRestoring"]>;
59
+ error: Signal<BitPersistMetadata["error"]>;
60
+ }>;
94
61
  interface InjectBitFormResult<T extends object = any> {
95
62
  meta: {
96
63
  isValid: ReturnType<typeof _angular_core.computed<boolean>>;
@@ -103,7 +70,7 @@ interface InjectBitFormResult<T extends object = any> {
103
70
  getErrors: () => BitErrors<T>;
104
71
  getTouched: () => BitTouched<T>;
105
72
  getDirtyValues: () => Partial<T>;
106
- submit: (onSuccess: (values: T, dirtyValues?: Partial<T>) => void | Promise<void>) => (event?: Event) => Promise<void>;
73
+ submit: (onSuccess: (values: T, dirtyValues?: Partial<T>) => unknown | Promise<unknown>) => (event?: Event) => Promise<void>;
107
74
  onSubmit: (handler: (values: T, dirtyValues?: Partial<T>) => Promise<unknown>) => (event?: Event) => Promise<void>;
108
75
  reset: () => void;
109
76
  transaction: <TResult>(callback: () => TResult) => TResult;
@@ -160,7 +127,7 @@ declare function injectBitWatch<TForm extends object = any, P extends BitPath<TF
160
127
  * Minimal upload API integrated with global field validation lifecycle.
161
128
  */
162
129
 
163
- declare function injectBitUpload(fieldPath: string, uploadFn: BitUploadFn, deleteFile?: BitDeleteUploadFn): InjectBitUploadResult;
130
+ declare function injectBitUpload<TMetadata extends Record<string, unknown> = Record<string, unknown>>(fieldPath: string, uploadFn: BitUploadFn<TMetadata>, deleteFile?: BitDeleteUploadFn): InjectBitUploadResult;
164
131
 
165
132
  declare function injectBitPersist<T extends object = any>(): InjectBitPersistResult;
166
133
 
@@ -1,2 +1,2 @@
1
- import{a as Z,b as N}from"../chunk-O5UPA33R.js";import"../chunk-5NA2TFPG.js";import{d as K}from"../chunk-UARLAXZX.js";import{c as C,f as W,g as z,h as $,i as G,j as J,k as Q}from"../chunk-Y3XVQGCU.js";import{a as X}from"../chunk-W2E5UIXT.js";import{b as O,f as _,g as q}from"../chunk-UIKO6GGW.js";import{a as Y}from"../chunk-ICYXODTQ.js";import"../chunk-2QLQPMCZ.js";import{c as M,f as H}from"../chunk-QX2IVNMK.js";import{a as L}from"../chunk-3NUJVIAM.js";import{inject as it,InjectionToken as nt}from"@angular/core";var B=new nt("BIT_STORE");function at(t){return{provide:B,useValue:K(t)}}function u(){let t=it(B,{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),r=V({isValid:!0,isDirty:!1,isSubmitting:!1}),o=V(null),s=V(null),i=C(t,m=>{r.set(m)});e.onDestroy(()=>i());let p=I(()=>r().isValid),a=I(()=>r().isSubmitting),d=I(()=>r().isDirty),{controller:c,actions:n}=G(t,{clearSubmissionState:()=>{o.set(null),s.set(null)},setSubmissionResult:m=>{s.set(m)},setSubmissionError:m=>{o.set(m)}},{stopPropagation:!0});return{meta:{isValid:p,isDirty:d,isSubmitting:a,submitError:o.asReadonly(),lastResponse:s.asReadonly()},getValues:c.getValues,getErrors:c.getErrors,getTouched:c.getTouched,getDirtyValues:c.getDirtyValues,submit:c.submit,onSubmit:c.onSubmit,reset:c.reset,...n}}import{DestroyRef as pt,computed as S,inject as tt,signal as dt}from"@angular/core";function E(t){let e=tt(B),r=dt(e.read.getFieldState(t)),o=e.observe.subscribeFieldState(t,y=>{r.set(y)});tt(pt).onDestroy(()=>{o(),J(e,t)});let s=S(()=>r().value),i=S(()=>Y(r())),p=S(()=>i().error),a=S(()=>i().touched),d=S(()=>i().invalid),c=S(()=>i().isDirty),n=S(()=>i().isValidating),f=S(()=>i().isHidden),m=S(()=>i().isRequired),{fieldController:j}=$(e,t),T=S(()=>j.displayValue(s())),v=y=>{j.setValue(y)},h=()=>j.setBlur(),x=S(()=>i().hasError);return{value:s,displayValue:T,setValue:v,setBlur:h,update:y=>v(L(y)?y.target?.value??null:y),meta:{error:p,touched:a,invalid:d,isDirty:c,isValidating:n,isHidden:f,isRequired:m,hasError:x}}}import{computed as et,DestroyRef as mt,inject as rt,signal as St}from"@angular/core";function ft(t){let e=rt(B),r=rt(mt),o=z(e,t),s=St(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 yt,inject as gt,signal as Bt}from"@angular/core";function Rt(){let t=u(),e=gt(yt),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{computed as D,DestroyRef as bt,inject as jt,signal as vt}from"@angular/core";function Ft(t){let e=u(),r=e.read.getScopeStatus(t),o=vt(r),s=X(e,t,f=>{o.set(f)});jt(bt,{optional:!0})?.onDestroy(()=>s());let p=async()=>{let f=await e.feature.validate({scope:t}),m=e.read.getScopeErrors(t);return{valid:f,errors:m}},a=()=>e.read.getScopeErrors(t),d=D(()=>!o().hasErrors),c=D(()=>o().isDirty),n=D(()=>o().errors);return{scopeName:t,status:o,errors:n,validate:p,getErrors:a,isValid:d,isDirty:c,unsubscribe:s}}import{computed as R,DestroyRef as Pt,inject as Tt,signal as ot}from"@angular/core";function ht(t){let e=u(),r=ot(0),o=R(()=>t[r()]??""),s=()=>t[r()]??"",i=ot(e.read.getScopeStatus(s())),p=()=>{let l=s(),g=e.read.getScopeStatus(l),b=i();O(b,g)||i.set(g)},a=e.observe.subscribeScopeStatus(s(),p),d=()=>{a(),a=e.observe.subscribeScopeStatus(s(),p)};Tt(Pt,{optional:!0})?.onDestroy(()=>a());let n=async()=>{let l=s(),g=await e.feature.validate({scope:l}),b=e.read.getScopeErrors(l);return{valid:g,errors:b}},f=()=>e.read.getScopeErrors(s()),m=async()=>{let l=s(),g=e.read.getScopeFields(l);if(e.feature.hasValidationsInProgress(g))return!1;let b=await e.feature.validate({scope:l});if(b){let F=Math.min(r()+1,t.length-1);r.set(F),i.set(e.read.getScopeStatus(t[F]??"")),d()}else{let F=e.read.getScopeErrors(l),k=Object.keys(F);k.length>0&&e.write.markFieldsTouched(k)}return b},j=()=>{let l=Math.max(r()-1,0);r.set(l),i.set(e.read.getScopeStatus(t[l]??"")),d()},T=l=>{let g=Math.max(0,Math.min(l-1,t.length-1));r.set(g),i.set(e.read.getScopeStatus(t[g]??"")),d()},v=R(()=>r()+1),h=R(()=>r()===0),x=R(()=>r()>=t.length-1),U=R(()=>!i().hasErrors),y=R(()=>i().isDirty),st=R(()=>i().errors);return{step:v,stepIndex:r,scope:o,next:m,prev:j,goTo:T,isFirst:h,isLast:x,status:i,errors:st,isValid:U,isDirty:y,validate:n,getErrors:f}}import{DestroyRef as xt,signal as Vt,inject as It}from"@angular/core";function Et(t){let e=u(),r=It(xt),o=Vt(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 Dt,signal as wt}from"@angular/core";function At(t,e,r){let o=Dt(B),s=E(t),i=null,p=wt(!1),a={setLoading:n=>p.set(n),setError:(n,f)=>o.write.setError(n,f),setValue:n=>s.setValue(n),getUploadKey:()=>i,setUploadKey:n=>{i=n}},d=Z(t,e,a),c=N(t,r,a);return{value:w(()=>s.value()),setValue:s.setValue,error:w(()=>s.meta.error()),isValidating:w(()=>!!s.meta.isValidating()||p()),upload:d,remove:c}}import{computed as A,DestroyRef as Ut,inject as kt,signal as Mt}from"@angular/core";function Ht(){let t=u(),e=Mt(t.read.getPersistMetadata()),r=W(t,a=>{e.set(a)});return kt(Ut,{optional:!0})?.onDestroy(()=>r()),{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{ft as injectBitArray,E as injectBitField,ut as injectBitForm,Rt as injectBitHistory,Ht as injectBitPersist,Ft as injectBitScope,ht as injectBitSteps,At as injectBitUpload,Et as injectBitWatch,at as provideBitStore,u as useBitStore};
1
+ import{a as Z,b as N}from"../chunk-PG7ZH32Z.js";import"../chunk-5NA2TFPG.js";import{d as K}from"../chunk-23IYGRVG.js";import{c as C,f as W,g as z,h as $,i as G,j as J,k as Q}from"../chunk-YWBRZGEI.js";import{a as X}from"../chunk-W2E5UIXT.js";import{b as O,f as _,g as q}from"../chunk-UIKO6GGW.js";import{a as Y}from"../chunk-ICYXODTQ.js";import"../chunk-RMD37PXW.js";import{c as M,f as H}from"../chunk-DRLFDQ5Z.js";import{a as L}from"../chunk-3NUJVIAM.js";import{inject as it,InjectionToken as nt}from"@angular/core";var B=new nt("BIT_STORE");function at(t){return{provide:B,useValue:K(t)}}function l(){let t=it(B,{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 ut}from"@angular/core";function lt(){let t=l(),e=ct(ut),r=V({isValid:!0,isDirty:!1,isSubmitting:!1}),o=V(null),s=V(null),i=C(t,m=>{r.set(m)});e.onDestroy(()=>i());let p=I(()=>r().isValid),a=I(()=>r().isSubmitting),d=I(()=>r().isDirty),{controller:c,actions:n}=G(t,{clearSubmissionState:()=>{o.set(null),s.set(null)},setSubmissionResult:m=>{s.set(m)},setSubmissionError:m=>{o.set(m)}},{stopPropagation:!0});return{meta:{isValid:p,isDirty:d,isSubmitting:a,submitError:o.asReadonly(),lastResponse:s.asReadonly()},getValues:c.getValues,getErrors:c.getErrors,getTouched:c.getTouched,getDirtyValues:c.getDirtyValues,submit:c.submit,onSubmit:c.onSubmit,reset:c.reset,...n}}import{DestroyRef as pt,computed as S,inject as tt,signal as dt}from"@angular/core";function E(t){let e=tt(B),r=dt(e.read.getFieldState(t)),o=e.observe.subscribeFieldState(t,y=>{r.set(y)});tt(pt).onDestroy(()=>{o(),J(e,t)});let s=S(()=>r().value),i=S(()=>Y(r())),p=S(()=>i().error),a=S(()=>i().touched),d=S(()=>i().invalid),c=S(()=>i().isDirty),n=S(()=>i().isValidating),f=S(()=>i().isHidden),m=S(()=>i().isRequired),{fieldController:j}=$(e,t),T=S(()=>j.displayValue(s())),v=y=>{j.setValue(y)},h=()=>j.setBlur(),x=S(()=>i().hasError);return{value:s,displayValue:T,setValue:v,setBlur:h,update:y=>v(L(y)?y.target?.value??null:y),meta:{error:p,touched:a,invalid:d,isDirty:c,isValidating:n,isHidden:f,isRequired:m,hasError:x}}}import{computed as et,DestroyRef as mt,inject as rt,signal as St}from"@angular/core";function ft(t){let e=rt(B),r=rt(mt),o=z(e,t),s=St(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 yt,inject as gt,signal as Bt}from"@angular/core";function Rt(){let t=l(),e=gt(yt),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{computed as D,DestroyRef as bt,inject as jt,signal as vt}from"@angular/core";function Ft(t){let e=l(),r=e.read.getScopeStatus(t),o=vt(r),s=X(e,t,f=>{o.set(f)});jt(bt,{optional:!0})?.onDestroy(()=>s());let p=async()=>{let f=await e.feature.validate({scope:t}),m=e.read.getScopeErrors(t);return{valid:f,errors:m}},a=()=>e.read.getScopeErrors(t),d=D(()=>!o().hasErrors),c=D(()=>o().isDirty),n=D(()=>o().errors);return{scopeName:t,status:o,errors:n,validate:p,getErrors:a,isValid:d,isDirty:c,unsubscribe:s}}import{computed as R,DestroyRef as Pt,inject as Tt,signal as ot}from"@angular/core";function ht(t){let e=l(),r=ot(0),o=R(()=>t[r()]??""),s=()=>t[r()]??"",i=ot(e.read.getScopeStatus(s())),p=()=>{let u=s(),g=e.read.getScopeStatus(u),b=i();O(b,g)||i.set(g)},a=e.observe.subscribeScopeStatus(s(),p),d=()=>{a(),a=e.observe.subscribeScopeStatus(s(),p)};Tt(Pt,{optional:!0})?.onDestroy(()=>a());let n=async()=>{let u=s(),g=await e.feature.validate({scope:u}),b=e.read.getScopeErrors(u);return{valid:g,errors:b}},f=()=>e.read.getScopeErrors(s()),m=async()=>{let u=s(),g=e.read.getScopeFields(u);if(e.feature.hasValidationsInProgress(g))return!1;let b=await e.feature.validate({scope:u});if(b){let F=Math.min(r()+1,t.length-1);r.set(F),i.set(e.read.getScopeStatus(t[F]??"")),d()}else{let F=e.read.getScopeErrors(u),U=Object.keys(F);U.length>0&&e.write.markFieldsTouched(U)}return b},j=()=>{let u=Math.max(r()-1,0);r.set(u),i.set(e.read.getScopeStatus(t[u]??"")),d()},T=u=>{let g=Math.max(0,Math.min(u-1,t.length-1));r.set(g),i.set(e.read.getScopeStatus(t[g]??"")),d()},v=R(()=>r()+1),h=R(()=>r()===0),x=R(()=>r()>=t.length-1),A=R(()=>!i().hasErrors),y=R(()=>i().isDirty),st=R(()=>i().errors);return{step:v,stepIndex:r,scope:o,next:m,prev:j,goTo:T,isFirst:h,isLast:x,status:i,errors:st,isValid:A,isDirty:y,validate:n,getErrors:f}}import{DestroyRef as xt,signal as Vt,inject as It}from"@angular/core";function Et(t){let e=l(),r=It(xt),o=Vt(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 Dt,signal as wt}from"@angular/core";function kt(t,e,r){let o=Dt(B),s=E(t),i=null,p=wt(!1),a={setLoading:n=>p.set(n),setError:(n,f)=>o.write.setError(n,f),setValue:n=>s.setValue(n),getUploadKey:()=>i,setUploadKey:n=>{i=n}},d=Z(t,e,a),c=N(t,r,a);return{value:w(()=>s.value()),setValue:s.setValue,error:w(()=>s.meta.error()),isValidating:w(()=>!!s.meta.isValidating()||p()),upload:d,remove:c}}import{computed as k,DestroyRef as At,inject as Ut,signal as Mt}from"@angular/core";function Ht(){let t=l(),e=Mt(t.read.getPersistMetadata()),r=W(t,a=>{e.set(a)});return Ut(At,{optional:!0})?.onDestroy(()=>r()),{restore:async()=>t.feature.restorePersisted(),save:async()=>{await t.feature.forceSave()},clear:async()=>{await t.feature.clearPersisted()},meta:{isSaving:k(()=>e().isSaving),isRestoring:k(()=>e().isRestoring),error:k(()=>e().error)}}}export{ft as injectBitArray,E as injectBitField,lt as injectBitForm,Rt as injectBitHistory,Ht as injectBitPersist,Ft as injectBitScope,ht as injectBitSteps,kt as injectBitUpload,Et as injectBitWatch,at as provideBitStore,l 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 { 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 { DestroyRef, computed, inject, signal } from \"@angular/core\";\nimport {\n BitPath,\n BitPathValue,\n cleanupRegisteredField,\n createFrameworkMaskedFieldBinding,\n deriveFieldMeta,\n isBitFieldInputEventObject,\n} from \"../core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport type { BitFieldInputEvent, InjectBitFieldResult } 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 { computed, DestroyRef, inject, signal } from \"@angular/core\";\nimport {\n BitArrayItem,\n BitArrayPath,\n BitPathValue,\n cleanupRegisteredPrefix,\n createArrayBinding,\n} from \"../core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\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 = createArrayBinding<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 type { Signal } from \"@angular/core\";\nimport { computed, DestroyRef, inject, signal } from \"@angular/core\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { observeScopeStatusSnapshot } from \"../core\";\nimport { useBitStore } from \"./provider\";\n\nexport type { ScopeStatus, ValidateScopeResult };\n\ninterface InjectBitScopeResult {\n scopeName: string;\n status: Signal<ScopeStatus>;\n errors: Signal<Record<string, string>>;\n validate: () => Promise<ValidateScopeResult>;\n getErrors: () => Record<string, string>;\n isValid: Signal<boolean>;\n isDirty: Signal<boolean>;\n unsubscribe: () => void;\n}\n\nexport function injectBitScope(scopeName: string): InjectBitScopeResult {\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 const destroyRef = inject(DestroyRef, { optional: true });\n destroyRef?.onDestroy(() => unsubscribe());\n\n const validate = async (): Promise<ValidateScopeResult> => {\n const valid = await store.feature.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 { computed, DestroyRef, inject, signal } 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 const destroyRef = inject(DestroyRef, { optional: true });\n destroyRef?.onDestroy(() => unsubscribe());\n\n const validate = async (): Promise<ValidateScopeResult> => {\n const scopeName = getCurrentScope();\n const valid = await store.feature.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.feature.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, DestroyRef, inject, signal } from \"@angular/core\";\nimport { observePersistMetaSnapshot } from \"../core\";\nimport { useBitStore } from \"./provider\";\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 const destroyRef = inject(DestroyRef, { optional: true });\n destroyRef?.onDestroy(() => unsubscribe());\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","DestroyRef","computed","inject","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","computed","DestroyRef","inject","signal","injectBitArray","path","store","inject","BIT_STORE_TOKEN","destroyRef","DestroyRef","controller","createArrayBinding","valuesSig","signal","unsub","cleanupRegisteredPrefix","computed","computed","DestroyRef","inject","signal","injectBitHistory","store","useBitStore","destroyRef","inject","DestroyRef","meta","signal","readHistoryMetaSnapshot","sub","observeHistoryMetaSnapshot","nextMeta","computed","computed","DestroyRef","inject","signal","injectBitScope","scopeName","store","useBitStore","initialStatus","status","signal","unsubscribe","observeScopeStatusSnapshot","nextStatus","inject","DestroyRef","validate","valid","errors","getErrors","isValid","computed","isDirty","computed","DestroyRef","inject","signal","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","DestroyRef","inject","signal","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 { DestroyRef, computed, inject, signal } from \"@angular/core\";\nimport {\n BitPath,\n BitPathValue,\n cleanupRegisteredField,\n createFrameworkMaskedFieldBinding,\n deriveFieldMeta,\n isBitFieldInputEventObject,\n} from \"../core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport type { BitFieldInputEvent, InjectBitFieldResult } 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 { computed, DestroyRef, inject, signal } from \"@angular/core\";\nimport {\n BitArrayItem,\n BitArrayPath,\n BitPathValue,\n cleanupRegisteredPrefix,\n createArrayBinding,\n} from \"../core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\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 = createArrayBinding<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 type { Signal } from \"@angular/core\";\nimport { computed, DestroyRef, inject, signal } from \"@angular/core\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { observeScopeStatusSnapshot } from \"../core\";\nimport { useBitStore } from \"./provider\";\n\nexport type { ScopeStatus, ValidateScopeResult };\n\ninterface InjectBitScopeResult {\n scopeName: string;\n status: Signal<ScopeStatus>;\n errors: Signal<Record<string, string>>;\n validate: () => Promise<ValidateScopeResult>;\n getErrors: () => Record<string, string>;\n isValid: Signal<boolean>;\n isDirty: Signal<boolean>;\n unsubscribe: () => void;\n}\n\nexport function injectBitScope(scopeName: string): InjectBitScopeResult {\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 const destroyRef = inject(DestroyRef, { optional: true });\n destroyRef?.onDestroy(() => unsubscribe());\n\n const validate = async (): Promise<ValidateScopeResult> => {\n const valid = await store.feature.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 { computed, DestroyRef, inject, signal } 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 const destroyRef = inject(DestroyRef, { optional: true });\n destroyRef?.onDestroy(() => unsubscribe());\n\n const validate = async (): Promise<ValidateScopeResult> => {\n const scopeName = getCurrentScope();\n const valid = await store.feature.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.feature.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 type { BitDeleteUploadFn, BitUploadFn } from \"../core\";\nimport { createRemoveHandler, createUploadHandler } from \"../core/adapters\";\nimport { injectBitField } from \"./inject-bit-field\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport type { InjectBitUploadResult } from \"./types\";\n\nexport function injectBitUpload<\n TMetadata extends Record<string, unknown> = Record<string, unknown>,\n>(\n fieldPath: string,\n uploadFn: BitUploadFn<TMetadata>,\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, DestroyRef, inject, signal } from \"@angular/core\";\nimport { observePersistMetaSnapshot } from \"../core\";\nimport { useBitStore } from \"./provider\";\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 const destroyRef = inject(DestroyRef, { optional: true });\n destroyRef?.onDestroy(() => unsubscribe());\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","DestroyRef","computed","inject","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","computed","DestroyRef","inject","signal","injectBitArray","path","store","inject","BIT_STORE_TOKEN","destroyRef","DestroyRef","controller","createArrayBinding","valuesSig","signal","unsub","cleanupRegisteredPrefix","computed","computed","DestroyRef","inject","signal","injectBitHistory","store","useBitStore","destroyRef","inject","DestroyRef","meta","signal","readHistoryMetaSnapshot","sub","observeHistoryMetaSnapshot","nextMeta","computed","computed","DestroyRef","inject","signal","injectBitScope","scopeName","store","useBitStore","initialStatus","status","signal","unsubscribe","observeScopeStatusSnapshot","nextStatus","inject","DestroyRef","validate","valid","errors","getErrors","isValid","computed","isDirty","computed","DestroyRef","inject","signal","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","DestroyRef","inject","signal","injectBitPersist","store","useBitStore","persist","signal","unsubscribe","observePersistMetaSnapshot","nextPersist","inject","DestroyRef","computed"]}
@@ -0,0 +1,41 @@
1
+ import { g as BitState } from './state-types-8bUndWfg.js';
2
+
3
+ interface BitBusStorePort<T extends object = object> {
4
+ getState: () => Readonly<BitState<T>>;
5
+ getHistoryMetadata: () => {
6
+ canUndo: boolean;
7
+ canRedo: boolean;
8
+ historySize: number;
9
+ historyIndex: number;
10
+ };
11
+ undo: () => void;
12
+ redo: () => void;
13
+ reset: () => void;
14
+ }
15
+ type BitBusListener<T extends object = object> = (storeId: string, newState: BitState<T>) => void;
16
+ interface BitFormGlobal {
17
+ stores: Record<string, BitBusStorePort<object>>;
18
+ listeners: Set<BitBusListener>;
19
+ dispatch: (storeId: string, state: BitState<object>) => void;
20
+ subscribe: (fn: BitBusListener) => () => void;
21
+ }
22
+ /** Alias for {@link BitFormGlobal}. Prefer this name in user-facing APIs. */
23
+ type BitBus = BitFormGlobal;
24
+
25
+ declare global {
26
+ var __BIT_FORM__: BitFormGlobal | undefined;
27
+ }
28
+ declare const bitBus: BitFormGlobal;
29
+ /**
30
+ * Creates an isolated bus instance — not connected to the browser global.
31
+ * Use this in SSR / Edge Runtime environments (e.g. Next.js Edge) where a
32
+ * shared `globalThis` singleton is unsafe across request contexts.
33
+ *
34
+ * @example
35
+ * // _app.tsx (SSR-safe)
36
+ * const bus = createBitBus();
37
+ * const store = createBitStore({ bus, initialValues: { ... } });
38
+ */
39
+ declare function createBitBus(): BitFormGlobal;
40
+
41
+ export { type BitBus as B, type BitBusListener as a, type BitBusStorePort as b, type BitFormGlobal as c, bitBus as d, createBitBus as e };
@@ -0,0 +1,41 @@
1
+ import { g as BitState } from './state-types-8bUndWfg.cjs';
2
+
3
+ interface BitBusStorePort<T extends object = object> {
4
+ getState: () => Readonly<BitState<T>>;
5
+ getHistoryMetadata: () => {
6
+ canUndo: boolean;
7
+ canRedo: boolean;
8
+ historySize: number;
9
+ historyIndex: number;
10
+ };
11
+ undo: () => void;
12
+ redo: () => void;
13
+ reset: () => void;
14
+ }
15
+ type BitBusListener<T extends object = object> = (storeId: string, newState: BitState<T>) => void;
16
+ interface BitFormGlobal {
17
+ stores: Record<string, BitBusStorePort<object>>;
18
+ listeners: Set<BitBusListener>;
19
+ dispatch: (storeId: string, state: BitState<object>) => void;
20
+ subscribe: (fn: BitBusListener) => () => void;
21
+ }
22
+ /** Alias for {@link BitFormGlobal}. Prefer this name in user-facing APIs. */
23
+ type BitBus = BitFormGlobal;
24
+
25
+ declare global {
26
+ var __BIT_FORM__: BitFormGlobal | undefined;
27
+ }
28
+ declare const bitBus: BitFormGlobal;
29
+ /**
30
+ * Creates an isolated bus instance — not connected to the browser global.
31
+ * Use this in SSR / Edge Runtime environments (e.g. Next.js Edge) where a
32
+ * shared `globalThis` singleton is unsafe across request contexts.
33
+ *
34
+ * @example
35
+ * // _app.tsx (SSR-safe)
36
+ * const bus = createBitBus();
37
+ * const store = createBitStore({ bus, initialValues: { ... } });
38
+ */
39
+ declare function createBitBus(): BitFormGlobal;
40
+
41
+ export { type BitBus as B, type BitBusListener as a, type BitBusStorePort as b, type BitFormGlobal as c, bitBus as d, createBitBus as e };