@lehnihon/bit-form 2.2.5 → 2.2.7

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 (121) hide show
  1. package/README.md +80 -24
  2. package/dist/angular/index.cjs +1 -1
  3. package/dist/angular/index.cjs.map +1 -1
  4. package/dist/angular/index.d.cts +18 -20
  5. package/dist/angular/index.d.ts +18 -20
  6. package/dist/angular/index.js +1 -1
  7. package/dist/angular/index.js.map +1 -1
  8. package/dist/array-controller-C1A5VKYd.d.cts +23 -0
  9. package/dist/array-controller-DtkmcnUr.d.ts +23 -0
  10. package/dist/{bus-B4zZmB9C.d.ts → bus-DgilLszS.d.ts} +83 -15
  11. package/dist/{bus-BeAeZwWu.d.cts → bus-rcUiufS7.d.cts} +83 -15
  12. package/dist/chunk-DIEE6LUO.js +2 -0
  13. package/dist/chunk-DIEE6LUO.js.map +1 -0
  14. package/dist/chunk-FUUQB4DV.cjs +2 -0
  15. package/dist/chunk-FUUQB4DV.cjs.map +1 -0
  16. package/dist/chunk-IV32WXCF.cjs +2 -0
  17. package/dist/chunk-IV32WXCF.cjs.map +1 -0
  18. package/dist/chunk-K5X37E3U.js +2 -0
  19. package/dist/chunk-K5X37E3U.js.map +1 -0
  20. package/dist/chunk-KWLLYQOL.cjs +2 -0
  21. package/dist/chunk-KWLLYQOL.cjs.map +1 -0
  22. package/dist/chunk-LIYZPSWM.js +2 -0
  23. package/dist/chunk-LIYZPSWM.js.map +1 -0
  24. package/dist/chunk-O5UPA33R.js +2 -0
  25. package/dist/chunk-O5UPA33R.js.map +1 -0
  26. package/dist/chunk-QAL6J5GQ.cjs +2 -0
  27. package/dist/chunk-QAL6J5GQ.cjs.map +1 -0
  28. package/dist/chunk-QKGTVKBU.cjs +2 -0
  29. package/dist/chunk-QKGTVKBU.cjs.map +1 -0
  30. package/dist/chunk-SA47B5OP.js +2 -0
  31. package/dist/chunk-SA47B5OP.js.map +1 -0
  32. package/dist/cli/index.cjs +22 -22
  33. package/dist/core.cjs +2 -0
  34. package/dist/core.cjs.map +1 -0
  35. package/dist/core.d.cts +122 -0
  36. package/dist/core.d.ts +122 -0
  37. package/dist/core.js +2 -0
  38. package/dist/core.js.map +1 -0
  39. package/dist/devtools/bridge.cjs +1 -1
  40. package/dist/devtools/bridge.cjs.map +1 -1
  41. package/dist/devtools/bridge.d.cts +4 -1
  42. package/dist/devtools/bridge.d.ts +4 -1
  43. package/dist/devtools/bridge.js +1 -1
  44. package/dist/devtools/bridge.js.map +1 -1
  45. package/dist/devtools/index.cjs +18 -18
  46. package/dist/devtools/index.cjs.map +1 -1
  47. package/dist/devtools/index.d.cts +26 -2
  48. package/dist/devtools/index.d.ts +26 -2
  49. package/dist/devtools/index.js +18 -18
  50. package/dist/devtools/index.js.map +1 -1
  51. package/dist/devtools/protocol.cjs +2 -0
  52. package/dist/devtools/protocol.cjs.map +1 -0
  53. package/dist/devtools/protocol.d.cts +54 -0
  54. package/dist/devtools/protocol.d.ts +54 -0
  55. package/dist/devtools/protocol.js +2 -0
  56. package/dist/devtools/protocol.js.map +1 -0
  57. package/dist/field-binding-Bi1g-D8X.d.ts +25 -0
  58. package/dist/field-binding-X5TkvfUt.d.cts +25 -0
  59. package/dist/index.cjs +1 -1
  60. package/dist/index.cjs.map +1 -1
  61. package/dist/index.d.cts +64 -150
  62. package/dist/index.d.ts +64 -150
  63. package/dist/index.js +1 -1
  64. package/dist/mask.d.cts +2 -2
  65. package/dist/mask.d.ts +2 -2
  66. package/dist/react/index.cjs +1 -1
  67. package/dist/react/index.cjs.map +1 -1
  68. package/dist/react/index.d.cts +8 -7
  69. package/dist/react/index.d.ts +8 -7
  70. package/dist/react/index.js +1 -1
  71. package/dist/react/index.js.map +1 -1
  72. package/dist/react-native/index.cjs +1 -1
  73. package/dist/react-native/index.cjs.map +1 -1
  74. package/dist/react-native/index.d.cts +7 -6
  75. package/dist/react-native/index.d.ts +7 -6
  76. package/dist/react-native/index.js +1 -1
  77. package/dist/react-native/index.js.map +1 -1
  78. package/dist/resolvers/index.cjs +1 -1
  79. package/dist/resolvers/index.cjs.map +1 -1
  80. package/dist/resolvers/index.d.cts +2 -2
  81. package/dist/resolvers/index.d.ts +2 -2
  82. package/dist/resolvers/index.js +1 -1
  83. package/dist/resolvers/joi.d.cts +2 -2
  84. package/dist/resolvers/joi.d.ts +2 -2
  85. package/dist/resolvers/yup.d.cts +2 -2
  86. package/dist/resolvers/yup.d.ts +2 -2
  87. package/dist/resolvers/zod.d.cts +2 -2
  88. package/dist/resolvers/zod.d.ts +2 -2
  89. package/dist/store-api-types-9ipdute1.d.ts +187 -0
  90. package/dist/store-api-types-B6_bPoVI.d.cts +187 -0
  91. package/dist/{types-D8DgIUhJ.d.cts → types-CUXh7PqD.d.cts} +1 -1
  92. package/dist/{types-D8DgIUhJ.d.ts → types-CUXh7PqD.d.ts} +1 -1
  93. package/dist/{use-bit-persist-iPWLbD8l.d.ts → use-bit-persist-Bc06fmqZ.d.ts} +12 -14
  94. package/dist/{use-bit-persist-CIVN-oIi.d.cts → use-bit-persist-CIKFwtdM.d.cts} +12 -14
  95. package/dist/vue/index.cjs +1 -1
  96. package/dist/vue/index.cjs.map +1 -1
  97. package/dist/vue/index.d.cts +15 -18
  98. package/dist/vue/index.d.ts +15 -18
  99. package/dist/vue/index.js +1 -1
  100. package/dist/vue/index.js.map +1 -1
  101. package/package.json +20 -11
  102. package/dist/chunk-2FDEJYA5.js +0 -2
  103. package/dist/chunk-2FDEJYA5.js.map +0 -1
  104. package/dist/chunk-3CARTBEN.cjs +0 -2
  105. package/dist/chunk-3CARTBEN.cjs.map +0 -1
  106. package/dist/chunk-64KSP4TP.js +0 -2
  107. package/dist/chunk-64KSP4TP.js.map +0 -1
  108. package/dist/chunk-JIWR4KSZ.cjs +0 -2
  109. package/dist/chunk-JIWR4KSZ.cjs.map +0 -1
  110. package/dist/chunk-OZKLQRO6.cjs +0 -2
  111. package/dist/chunk-OZKLQRO6.cjs.map +0 -1
  112. package/dist/chunk-QWH2NBVB.js +0 -2
  113. package/dist/chunk-QWH2NBVB.js.map +0 -1
  114. package/dist/chunk-UMKOKAPD.js +0 -2
  115. package/dist/chunk-UMKOKAPD.js.map +0 -1
  116. package/dist/chunk-VQ7MK5VB.cjs +0 -2
  117. package/dist/chunk-VQ7MK5VB.cjs.map +0 -1
  118. package/dist/field-binding-BXw0Ku2c.d.cts +0 -12
  119. package/dist/field-binding-BXw0Ku2c.d.ts +0 -12
  120. package/dist/public-types-BQXaxmAE.d.cts +0 -94
  121. package/dist/public-types-CVgFf_qY.d.ts +0 -94
package/README.md CHANGED
@@ -46,7 +46,7 @@ Bit-Form is a powerful, framework-agnostic library designed to handle complex va
46
46
  ## ✨ Key Features
47
47
 
48
48
  - **Framework Agnostic Core:** Dedicated bindings for React, Vue, and Angular.
49
- - **First-Class Validation:** Built-in schema resolvers for Zod, Yup, and Joi. Includes native support for debounced asynchronous validation.
49
+ - **First-Class Validation:** Built-in schema resolvers for Zod, Yup, and Joi. Includes native asynchronous validation with configurable trigger (`blur` by default, `change` opt-in).
50
50
  - **Advanced Masking System:** Extensive list of presets including Currency (BRL, USD, EUR), Documents (CPF, CNPJ, SSN), Dates, and Credit Cards.
51
51
  - **Smart Dependencies:** Built-in dependency manager to conditionally hide or require fields using `showIf`, `requiredIf`, and `dependsOn`.
52
52
  - **Computed Fields:** Automatically calculate and update form values in real-time based on other field changes.
@@ -99,39 +99,72 @@ Bit-Form was built to solve the "heavy form" problem. While most libraries re-re
99
99
 
100
100
  ### Benchmark Results
101
101
 
102
- Tests performed with a form containing **100 inputs**, measuring the "Time to Interaction" (TTI) during a single keystroke on a mid-range device.
102
+ Below are **measured results** from the quality benchmarks currently in this repository. These numbers are not estimated or extrapolated.
103
103
 
104
- #### React Ecosystem
104
+ - Source tests:
105
+ - `quality/bench/rhf-compare.test.ts`
106
+ - `quality/bench/perf.test.ts`
107
+ - `quality/e2e/tests/benchmark-compare.spec.ts`
108
+ - Reproduce with:
109
+ - `npm run test:bench:compare`
110
+ - `npm run test:bench:compare:browser`
111
+ - `npm run test:bench:compare:browser:prod`
112
+ - `npm run test:bench`
105
113
 
106
- | Metric (lower is better) | **Bit-Form** | React Hook Form | Formik |
107
- | :------------------------ | :----------- | :-------------- | :----- |
108
- | **Keystroke Latency** | **1.2ms** | 1.8ms | 14.5ms |
109
- | **Validation Overhead** | **0.8ms** | 1.2ms | 5.4ms |
110
- | **Bundle Size (Gzipped)** | **~12kb** | ~9kb | ~15kb |
114
+ #### React benchmark methodology
111
115
 
112
- #### Vue Ecosystem
116
+ The comparison now uses a more realistic and stricter setup:
113
117
 
114
- | Metric (lower is better) | **Bit-Form** | VeeValidate | FormKit |
115
- | :------------------------ | :----------- | :---------- | :------ |
116
- | **Keystroke Latency** | **~1.2ms** | ~2.0ms | ~2.5ms |
117
- | **Validation Overhead** | **~0.8ms** | ~1.0ms | ~1.5ms |
118
- | **Bundle Size (Gzipped)** | **~12kb** | ~8kb | ~25kb |
118
+ - same validation semantics across Bit-Form, React Hook Form, Formik, and TanStack Form
119
+ - validation is triggered once at the end of each measured cycle
120
+ - React commit stabilization before and after each sample
121
+ - larger load (`600` fields for bulk, `240` iterations for async burst)
122
+ - browser confirmation with Playwright in both dev and production preview modes
119
123
 
120
- #### Angular Ecosystem
124
+ #### React benchmark (Bit-Form vs RHF/Formik/TanStack)
125
+
126
+ Latest local Node snapshot measured on **20/03/2026**:
127
+
128
+ | Scenario (lower is better) | Bit-Form | RHF | Formik | TanStack |
129
+ | :------------------------- | :--------- | :------- | :------- | :-------- |
130
+ | Bulk update (600 fields) | **5.83ms** | 556.11ms | 190.63ms | 1552.84ms |
131
+ | Async burst (240 updates) | **4.57ms** | 65.12ms | 22.12ms | 13.50ms |
132
+
133
+ Bit-Form ratio (`bit-form / competitor`) from the same snapshot:
134
+
135
+ - Bulk (median):
136
+ - vs RHF: **0.01**
137
+ - vs Formik: **0.03**
138
+ - vs TanStack: **0.00**
139
+ - Async burst (median):
140
+ - vs RHF: **0.07**
141
+ - vs Formik: **0.21**
142
+ - vs TanStack: **0.34**
143
+
144
+ In practice, this means:
121
145
 
122
- | Metric (lower is better) | **Bit-Form** | Angular Reactive Forms | ngx-formly |
123
- | :------------------------ | :----------- | :--------------------: | :--------- |
124
- | **Keystroke Latency** | **~1.2ms** | ~1.5ms | ~2.2ms |
125
- | **Validation Overhead** | **~0.8ms** | ~1.0ms | ~1.4ms |
126
- | **Bundle Size (Gzipped)** | **~12kb** | ~0kb (built-in) | ~15kb |
146
+ - Bit-Form remains substantially faster than RHF and Formik in bulk-update workloads.
147
+ - After the async-validation pipeline refactor, Bit-Form also moved ahead of TanStack in the async burst scenario on this measured environment.
148
+ - The benchmark is intentionally conservative, because it waits for React commit stabilization instead of stopping too early.
127
149
 
128
- > **Note:** Bit-Form's slightly larger bundle size (vs. minimal libraries) is due to the included agnostic core and built-in masking engine, which saves you from installing secondary libraries like `imask` or `cleave.js`. Vue and Angular benchmarks use the same methodology as React; actual numbers may vary by form complexity and device.
150
+ #### Internal performance baseline (Bit-Form)
151
+
152
+ Latest baseline from `quality/bench/perf.test.ts`:
153
+
154
+ - 300 field updates: ~20ms
155
+ - 1000 field updates in transaction + history: ~45ms
156
+ - 400 scoped subscribers: ~9ms
157
+ - Async validation burst: ~13ms
158
+ - Computed chain fanout (50): ~60ms
159
+ - Subscription notify fanout (200): ~15ms
160
+
161
+ > **Note:** benchmark values vary by machine, Node version, and CI load. Thresholds are calibrated from measured data with CI headroom and are validated in `quality/bench`.
129
162
 
130
163
  ### Why Bit-Form?
131
164
 
132
- 1. **Zero-Reflow Masking:** Unlike other libs where masking causes a double-render (one for the raw value, one for the mask), Bit-Form handles masks at the store level before the UI even knows about it.
133
- 2. **Logic Portability:** You can share the exact same `BitStore` instance (including validations and masks) between a React web app and an Angular admin dashboard.
134
- 3. **Predictable State:** With the History Manager, you can track exactly how the form state evolved, making it the best choice for complex, multi-step financial or insurance forms.
165
+ 1. **Store-Level Masking:** Bit-Form applies masks in the store layer, which helps keep UI updates localized and predictable in complex forms.
166
+ 2. **Logic Portability:** You can share the same `BitStore` logic (validation, masks, conditional rules, history) across React, Vue, Angular, and React Native bindings.
167
+ 3. **Predictable State:** With history, scoped subscriptions, and explicit lifecycle hooks, Bit-Form is a strong fit for multi-step and high-complexity forms where debuggability matters as much as raw speed.
135
168
 
136
169
  ## 📦 Installation
137
170
 
@@ -189,6 +222,29 @@ The complete documentation is available in the `/docs` folder. Explore the guide
189
222
  - **[API Reference](./docs/api-reference/bit-store.md)**: Full `BitStore` class documentation.
190
223
  - **[Type Definitions](./docs/api-reference/types.md)**: Core TypeScript interfaces and types.
191
224
 
225
+ ## ⚠️ Breaking Changes (dev branch)
226
+
227
+ This branch currently allows breaking changes while architecture/performance work is in progress.
228
+
229
+ - **New explicit `@lehnihon/bit-form/core` subpath** for store/runtime contracts. The package root is now curated for app usage and no longer mirrors every core helper/export.
230
+ - **History default limit changed** from `15` to `50` (`history.limit`).
231
+ - **Selector subscriptions no longer rely on deep value diff inference** when no `paths` are provided internally; updates are now path-driven for predictable performance.
232
+ - **New `subscribeTracked`** was added to auto-track selector dependencies and re-track when selector branches change.
233
+ - **`resolveBitStoreForHooks` now uses symbol branding** instead of duck-typing checks.
234
+ - **SSR/Edge support improved** with injectable bus instances (`createBitBus`, `config.bus`, `initDevTools({ bus })`).
235
+ - **Field `asyncValidate` now defaults to `blur` trigger**. To keep validation while typing, set `validation.asyncValidateOn: "change"` explicitly.
236
+ - **Framework bindings now share internal binding-core helpers** for form meta and field-array orchestration, reducing adapter drift across React, Vue and Angular.
237
+ - **New dedicated metadata subscriptions**: `subscribePersistMeta`, `subscribeHistoryMeta` and `subscribeScopeStatus` reduce adapter reliance on generic selectors/tracked subscriptions.
238
+ - **React Native is now treated as a thin derivative of the React binding layer**, keeping only native-specific field adaptation.
239
+
240
+ ### Migration quick notes
241
+
242
+ - If you relied on implicit broad selector notifications, prefer explicit `paths` or use `subscribeTracked`.
243
+ - If you built internal adapters over generic metadata selectors, migrate to `subscribePersistMeta`, `subscribeHistoryMeta` and `subscribeScopeStatus`.
244
+ - If you need old history density, set `history: { limit: 15 }` explicitly.
245
+ - In SSR/Edge runtimes, create one bus per request scope and inject it into the store and DevTools.
246
+ - If you relied on async validation firing while typing, add `asyncValidateOn: "change"` to the field config. `validate()` and submit still execute async validators.
247
+
192
248
  ## 🤝 Contributing
193
249
 
194
250
  Contributions are welcome! Feel free to open issues or submit pull requests.
@@ -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 _chunkVQ7MK5VBcjs = require('../chunk-VQ7MK5VB.cjs');var _chunkJIWR4KSZcjs = require('../chunk-JIWR4KSZ.cjs');var _chunkOZKLQRO6cjs = require('../chunk-OZKLQRO6.cjs');var _chunkPFPGASVZcjs = require('../chunk-PFPGASVZ.cjs');var _core = require('@angular/core');var B=new (0, _core.InjectionToken)("BIT_STORE");function et(t){return{provide:B,useValue:_chunkOZKLQRO6cjs.k.call(void 0, t)}}function y(){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 st(){let t=y(),e=_core.inject.call(void 0, _core.DestroyRef),o=_core.signal.call(void 0, {isValid:t.getState().isValid,isSubmitting:t.getState().isSubmitting,isDirty:t.getState().isDirty}),l=_core.signal.call(void 0, null),i=_core.signal.call(void 0, null),c=t.subscribeSelector(m=>({isValid:m.isValid,isSubmitting:m.isSubmitting,isDirty:m.isDirty}),m=>{o.set(m)},{paths:["isValid","isSubmitting","isDirty"]});e.onDestroy(()=>c());let u=_core.computed.call(void 0, ()=>o().isValid),S=_core.computed.call(void 0, ()=>o().isSubmitting),s=_core.computed.call(void 0, ()=>o().isDirty),r=_chunkJIWR4KSZcjs.b.call(void 0, t,{clearSubmissionState:()=>{l.set(null),i.set(null)},setSubmissionResult:m=>{i.set(m)},setSubmissionError:m=>{l.set(m)}},{stopPropagation:!0}),n=_chunkJIWR4KSZcjs.a.call(void 0, t);return{meta:{isValid:u,isDirty:s,isSubmitting:S,submitError:l.asReadonly(),lastResponse:i.asReadonly()},getValues:r.getValues,getErrors:r.getErrors,getTouched:r.getTouched,getDirtyValues:r.getDirtyValues,submit:r.submit,onSubmit:r.onSubmit,reset:r.reset,...n}}function A(t){let e=_core.inject.call(void 0, B),o=_core.signal.call(void 0, e.getFieldState(t)),l=_chunkJIWR4KSZcjs.c.call(void 0, e,t,d=>{o.set(d)});_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>{l(),e.unregisterField&&e.unregisterField(t)});let i=_core.computed.call(void 0, ()=>o().value),c=_core.computed.call(void 0, ()=>o().error),u=_core.computed.call(void 0, ()=>o().touched),S=_core.computed.call(void 0, ()=>u()?c():void 0),s=_core.computed.call(void 0, ()=>o().isDirty),r=_core.computed.call(void 0, ()=>o().isValidating),n=_core.computed.call(void 0, ()=>o().isHidden),a=_core.computed.call(void 0, ()=>o().isRequired),m=_core.computed.call(void 0, ()=>u()&&!!c()),I=e.resolveMask(t),F=_chunkJIWR4KSZcjs.d.call(void 0, e,t,I),v=_core.computed.call(void 0, ()=>F.displayValue(i())),h=d=>{F.setValue(d)},x=()=>F.setBlur(),D=_core.computed.call(void 0, ()=>!!c());return{value:i,displayValue:v,setValue:h,setBlur:x,update:d=>h(_chunkPFPGASVZcjs.a.call(void 0, d)?_nullishCoalesce(_optionalChain([d, 'access', _2 => _2.target, 'optionalAccess', _3 => _3.value]), () => (null)):d),meta:{error:S,touched:u,invalid:m,isDirty:s,isValidating:r,isHidden:n,isRequired:a,hasError:D}}}function ut(t){let e=_core.inject.call(void 0, B),o=_core.inject.call(void 0, _core.DestroyRef),l=s=>e.config.idFactory({scope:"array",path:t,index:s}),c=_core.signal.call(void 0, (()=>{let s=_chunkOZKLQRO6cjs.e.call(void 0, e.getState().values,t);return Array.isArray(s)?s:[]})()),u=_core.signal.call(void 0, c().map((s,r)=>l(r))),S=e.subscribePath(t,s=>{let r=Array.isArray(s)?s:[],n=_core.untracked.call(void 0, u);c.set(r),r.length!==n.length&&(r.length>n.length?u.set([...n,...Array.from({length:r.length-n.length},(a,m)=>l(n.length+m))]):u.set(n.slice(0,r.length)))});return o.onDestroy(()=>{S(),e.unregisterPrefix&&e.unregisterPrefix(`${t}.`)}),{fields:_core.computed.call(void 0, ()=>c().map((s,r)=>({key:u()[r]||`temp-${r}`,value:s,index:r}))),length:_core.computed.call(void 0, ()=>c().length),append:s=>{u.update(r=>[...r,l(r.length)]),e.pushItem(t,s)},prepend:s=>{u.update(r=>[l(0),...r]),e.prependItem(t,s)},remove:s=>{u.update(r=>r.filter((n,a)=>a!==s)),e.removeItem(t,s)},insert:(s,r)=>{u.update(n=>{let a=[...n];return a.splice(s,0,l(s)),a}),e.insertItem(t,s,r)},swap:(s,r)=>{u.update(n=>{let a=[...n];return[a[s],a[r]]=[a[r],a[s]],a}),e.swapItems(t,s,r)},move:(s,r)=>{u.update(n=>{let a=[...n],[m]=a.splice(s,1);return a.splice(r,0,m),a}),e.moveItem(t,s,r)},replace:s=>{u.set(s.map((r,n)=>l(n))),e.setField(t,s)},clear:()=>{u.set([]),e.setField(t,[])}}}function dt(){let t=y(),e=_core.inject.call(void 0, _core.DestroyRef),o=_core.signal.call(void 0, t.getHistoryMetadata()),l=t.subscribe(()=>{let i=t.getHistoryMetadata();_chunkVQ7MK5VBcjs.a.call(void 0, o(),i)||o.set(i)});return e.onDestroy(()=>l()),{canUndo:_core.computed.call(void 0, ()=>o().canUndo),canRedo:_core.computed.call(void 0, ()=>o().canRedo),historyIndex:_core.computed.call(void 0, ()=>o().historyIndex),historySize:_core.computed.call(void 0, ()=>o().historySize),undo:()=>t.undo(),redo:()=>t.redo()}}function Bt(t){let e=y(),o=e.getScopeFields(t),l=e.getStepStatus(t),i=_core.signal.call(void 0, l),c=e.subscribeSelector(a=>({errors:a.errors,isDirty:a.isDirty}),()=>{let a=e.getStepStatus(t),m=i();_chunkJIWR4KSZcjs.e.call(void 0, m,a)||i.set(a)},{paths:_chunkJIWR4KSZcjs.f.call(void 0, o)});try{_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>c())}catch (e2){}let u=async()=>{let a=await e.validate({scope:t}),m=e.getStepErrors(t);return{valid:a,errors:m}},S=()=>e.getStepErrors(t),s=_core.computed.call(void 0, ()=>!i().hasErrors),r=_core.computed.call(void 0, ()=>i().isDirty),n=_core.computed.call(void 0, ()=>i().errors);return{scopeName:t,status:i,errors:n,validate:u,getErrors:S,isValid:s,isDirty:r,unsubscribe:c}}function Ft(t){let e=y(),o=_core.signal.call(void 0, 0),l=_core.computed.call(void 0, ()=>_nullishCoalesce(t[o()], () => (""))),i=()=>_nullishCoalesce(t[o()], () => ("")),c=_core.signal.call(void 0, e.getStepStatus(i())),u=()=>{let p=i(),d=e.getStepStatus(p),P=c();_chunkJIWR4KSZcjs.e.call(void 0, P,d)||c.set(d)},S=e.subscribeSelector(p=>({errors:p.errors,isDirty:p.isDirty}),u,{paths:_chunkJIWR4KSZcjs.f.call(void 0, e.getScopeFields(i()))});try{_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>S())}catch (e3){}let s=async()=>{let p=i(),d=await e.validate({scope:p}),P=e.getStepErrors(p);return{valid:d,errors:P}},r=()=>e.getStepErrors(i()),n=async()=>{let p=i(),d=e.getScopeFields(p);if(e.hasValidationsInProgress(d))return!1;let P=await e.validate({scope:p});if(P){let b=Math.min(o()+1,t.length-1);o.set(b),c.set(e.getStepStatus(_nullishCoalesce(t[b], () => (""))))}else{let b=e.getStepErrors(p),M=Object.keys(b);M.length>0&&e.markFieldsTouched(M)}return P},a=()=>{let p=Math.max(o()-1,0);o.set(p),c.set(e.getStepStatus(_nullishCoalesce(t[p], () => (""))))},m=p=>{let d=Math.max(0,Math.min(p-1,t.length-1));o.set(d),c.set(e.getStepStatus(_nullishCoalesce(t[d], () => (""))))},I=_core.computed.call(void 0, ()=>o()+1),F=_core.computed.call(void 0, ()=>o()===0),v=_core.computed.call(void 0, ()=>o()>=t.length-1),h=_core.computed.call(void 0, ()=>!c().hasErrors),x=_core.computed.call(void 0, ()=>c().isDirty),D=_core.computed.call(void 0, ()=>c().errors);return{step:I,stepIndex:o,scope:l,next:n,prev:a,goTo:m,isFirst:F,isLast:v,status:c,errors:D,isValid:h,isDirty:x,validate:s,getErrors:r}}function jt(t){let e=y(),o=_core.inject.call(void 0, _core.DestroyRef),l=_core.signal.call(void 0, _chunkOZKLQRO6cjs.e.call(void 0, e.getState().values,t),{equal:_chunkOZKLQRO6cjs.d}),i=e.watch(t,c=>{l.set(c)});return o.onDestroy(i),l.asReadonly()}function It(t,e,o){let l=_core.inject.call(void 0, B),i=A(t),c=null,u=_core.signal.call(void 0, !1),S={setLoading:n=>u.set(n),setError:(n,a)=>l.setError(n,a),setValue:n=>i.setValue(n),getUploadKey:()=>c,setUploadKey:n=>{c=n}},s=_chunkVQ7MK5VBcjs.b.call(void 0, t,e,S),r=_chunkVQ7MK5VBcjs.c.call(void 0, t,o,S);return{value:_core.computed.call(void 0, ()=>i.value()),setValue:i.setValue,error:_core.computed.call(void 0, ()=>i.meta.error()),isValidating:_core.computed.call(void 0, ()=>!!i.meta.isValidating()||u()),upload:s,remove:r}}function Et(){let t=y(),e=_core.signal.call(void 0, t.getPersistMetadata()),o=t.subscribeSelector(u=>u.persist,u=>{e.set(u)},{paths:["persist"]});try{_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>o())}catch (e4){}return{restore:async()=>t.restorePersisted(),save:async()=>{await t.forceSave()},clear:async()=>{await t.clearPersisted()},meta:{isSaving:_core.computed.call(void 0, ()=>e().isSaving),isRestoring:_core.computed.call(void 0, ()=>e().isRestoring),error:_core.computed.call(void 0, ()=>e().error)}}}exports.injectBitArray = ut; exports.injectBitField = A; exports.injectBitForm = st; exports.injectBitHistory = dt; exports.injectBitPersist = Et; exports.injectBitScope = Bt; exports.injectBitSteps = Ft; exports.injectBitUpload = It; exports.injectBitWatch = jt; exports.provideBitStore = et; exports.useBitStore = y;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkIV32WXCFcjs = require('../chunk-IV32WXCF.cjs');var _chunkFUUQB4DVcjs = require('../chunk-FUUQB4DV.cjs');var _chunkPFPGASVZcjs = require('../chunk-PFPGASVZ.cjs');var _core = require('@angular/core');var g=new (0, _core.InjectionToken)("BIT_STORE");function at(t){return{provide:g,useValue:_chunkFUUQB4DVcjs.s.call(void 0, t)}}function u(){let t=_core.inject.call(void 0, g,{optional:!0});if(!t)throw new Error('BitForm: N\xE3o foi poss\xEDvel encontrar a BitStore. Certifique-se de que voc\xEA adicionou "provideBitStore(store)" nos providers do seu componente.');return t}function ut(){let t=u(),e=_core.inject.call(void 0, _core.DestroyRef),o=_core.signal.call(void 0, {isValid:!0,isDirty:!1,isSubmitting:!1}),r=_core.signal.call(void 0, null),s=_core.signal.call(void 0, null),i=_chunkFUUQB4DVcjs.y.call(void 0, t,S=>{o.set(S)});e.onDestroy(()=>i());let l=_core.computed.call(void 0, ()=>o().isValid),p=_core.computed.call(void 0, ()=>o().isSubmitting),m=_core.computed.call(void 0, ()=>o().isDirty),{controller:a,actions:n}=_chunkFUUQB4DVcjs.C.call(void 0, t,{clearSubmissionState:()=>{r.set(null),s.set(null)},setSubmissionResult:S=>{s.set(S)},setSubmissionError:S=>{r.set(S)}},{stopPropagation:!0});return{meta:{isValid:l,isDirty:m,isSubmitting:p,submitError:r.asReadonly(),lastResponse:s.asReadonly()},getValues:a.getValues,getErrors:a.getErrors,getTouched:a.getTouched,getDirtyValues:a.getDirtyValues,submit:a.submit,onSubmit:a.onSubmit,reset:a.reset,...n}}function E(t){let e=_core.inject.call(void 0, g),o=_core.signal.call(void 0, e.getFieldState(t)),r=_chunkFUUQB4DVcjs.D.call(void 0, e,t,y=>{o.set(y)});_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>{r(),_chunkFUUQB4DVcjs.G.call(void 0, e,t)});let s=_core.computed.call(void 0, ()=>o().value),i=_core.computed.call(void 0, ()=>_chunkFUUQB4DVcjs.I.call(void 0, o())),l=_core.computed.call(void 0, ()=>i().error),p=_core.computed.call(void 0, ()=>i().touched),m=_core.computed.call(void 0, ()=>i().invalid),a=_core.computed.call(void 0, ()=>i().isDirty),n=_core.computed.call(void 0, ()=>i().isValidating),f=_core.computed.call(void 0, ()=>i().isHidden),S=_core.computed.call(void 0, ()=>i().isRequired),{fieldController:F}=_chunkFUUQB4DVcjs.E.call(void 0, e,t),h=_core.computed.call(void 0, ()=>F.displayValue(s())),b=y=>{F.setValue(y)},T=()=>F.setBlur(),x=_core.computed.call(void 0, ()=>i().hasError);return{value:s,displayValue:h,setValue:b,setBlur:T,update:y=>b(_chunkPFPGASVZcjs.a.call(void 0, y)?_nullishCoalesce(_optionalChain([y, 'access', _2 => _2.target, 'optionalAccess', _3 => _3.value]), () => (null)):y),meta:{error:l,touched:p,invalid:m,isDirty:a,isValidating:n,isHidden:f,isRequired:S,hasError:x}}}function yt(t){let e=_core.inject.call(void 0, g),o=_core.inject.call(void 0, _core.DestroyRef),r=_chunkFUUQB4DVcjs.F.call(void 0, e,t),s=_core.signal.call(void 0, r.readItems()),i=e.subscribePath(t,()=>{s.set(r.readItems())});return o.onDestroy(()=>{i(),_chunkFUUQB4DVcjs.H.call(void 0, e,`${t}.`)}),{fields:_core.computed.call(void 0, ()=>r.getFields(s())),length:_core.computed.call(void 0, ()=>s().length),append:r.append,prepend:r.prepend,remove:r.remove,insert:r.insert,swap:r.swap,move:r.move,replace:r.replace,clear:r.clear}}function jt(){let t=u(),e=_core.inject.call(void 0, _core.DestroyRef),o=_core.signal.call(void 0, _chunkFUUQB4DVcjs.m.call(void 0, t)),r=_chunkFUUQB4DVcjs.n.call(void 0, t,s=>{o.set(s)});return e.onDestroy(()=>r()),{canUndo:_core.computed.call(void 0, ()=>o().canUndo),canRedo:_core.computed.call(void 0, ()=>o().canRedo),historyIndex:_core.computed.call(void 0, ()=>o().historyIndex),historySize:_core.computed.call(void 0, ()=>o().historySize),undo:()=>t.undo(),redo:()=>t.redo()}}function Pt(t){let e=u(),o=e.getStepStatus(t),r=_core.signal.call(void 0, o),s=_chunkFUUQB4DVcjs.r.call(void 0, e,t,n=>{r.set(n)});try{_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>s())}catch (e2){}let i=async()=>{let n=await e.validate({scope:t}),f=e.getStepErrors(t);return{valid:n,errors:f}},l=()=>e.getStepErrors(t),p=_core.computed.call(void 0, ()=>!r().hasErrors),m=_core.computed.call(void 0, ()=>r().isDirty),a=_core.computed.call(void 0, ()=>r().errors);return{scopeName:t,status:r,errors:a,validate:i,getErrors:l,isValid:p,isDirty:m,unsubscribe:s}}function Tt(t){let e=u(),o=_core.signal.call(void 0, 0),r=_core.computed.call(void 0, ()=>_nullishCoalesce(t[o()], () => (""))),s=()=>_nullishCoalesce(t[o()], () => ("")),i=_core.signal.call(void 0, e.getStepStatus(s())),l=()=>{let c=s(),B=e.getStepStatus(c),R=i();_chunkFUUQB4DVcjs.p.call(void 0, R,B)||i.set(B)},p=e.subscribeScopeStatus(s(),l),m=()=>{p(),p=e.subscribeScopeStatus(s(),l)};try{_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>p())}catch (e3){}let a=async()=>{let c=s(),B=await e.validate({scope:c}),R=e.getStepErrors(c);return{valid:B,errors:R}},n=()=>e.getStepErrors(s()),f=async()=>{let c=s(),B=e.getScopeFields(c);if(e.hasValidationsInProgress(B))return!1;let R=await e.validate({scope:c});if(R){let P=Math.min(o()+1,t.length-1);o.set(P),i.set(e.getStepStatus(_nullishCoalesce(t[P], () => ("")))),m()}else{let P=e.getStepErrors(c),A=Object.keys(P);A.length>0&&e.markFieldsTouched(A)}return R},S=()=>{let c=Math.max(o()-1,0);o.set(c),i.set(e.getStepStatus(_nullishCoalesce(t[c], () => ("")))),m()},F=c=>{let B=Math.max(0,Math.min(c-1,t.length-1));o.set(B),i.set(e.getStepStatus(_nullishCoalesce(t[B], () => ("")))),m()},h=_core.computed.call(void 0, ()=>o()+1),b=_core.computed.call(void 0, ()=>o()===0),T=_core.computed.call(void 0, ()=>o()>=t.length-1),x=_core.computed.call(void 0, ()=>!i().hasErrors),H=_core.computed.call(void 0, ()=>i().isDirty),y=_core.computed.call(void 0, ()=>i().errors);return{step:h,stepIndex:o,scope:r,next:f,prev:S,goTo:F,isFirst:b,isLast:T,status:i,errors:y,isValid:x,isDirty:H,validate:a,getErrors:n}}function Et(t){let e=u(),o=_core.inject.call(void 0, _core.DestroyRef),r=_core.signal.call(void 0, _chunkFUUQB4DVcjs.e.call(void 0, e.getState().values,t),{equal:_chunkFUUQB4DVcjs.c}),s=e.subscribePath(t,i=>{r.set(i)});return o.onDestroy(s),r.asReadonly()}function Ut(t,e,o){let r=_core.inject.call(void 0, g),s=E(t),i=null,l=_core.signal.call(void 0, !1),p={setLoading:n=>l.set(n),setError:(n,f)=>r.setError(n,f),setValue:n=>s.setValue(n),getUploadKey:()=>i,setUploadKey:n=>{i=n}},m=_chunkIV32WXCFcjs.a.call(void 0, t,e,p),a=_chunkIV32WXCFcjs.b.call(void 0, t,o,p);return{value:_core.computed.call(void 0, ()=>s.value()),setValue:s.setValue,error:_core.computed.call(void 0, ()=>s.meta.error()),isValidating:_core.computed.call(void 0, ()=>!!s.meta.isValidating()||l()),upload:m,remove:a}}function kt(){let t=u(),e=_core.signal.call(void 0, t.getPersistMetadata()),o=_chunkFUUQB4DVcjs.B.call(void 0, t,l=>{e.set(l)});try{_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>o())}catch (e4){}return{restore:async()=>t.restorePersisted(),save:async()=>{await t.forceSave()},clear:async()=>{await t.clearPersisted()},meta:{isSaving:_core.computed.call(void 0, ()=>e().isSaving),isRestoring:_core.computed.call(void 0, ()=>e().isRestoring),error:_core.computed.call(void 0, ()=>e().error)}}}exports.injectBitArray = yt; exports.injectBitField = E; exports.injectBitForm = ut; exports.injectBitHistory = jt; exports.injectBitPersist = kt; exports.injectBitScope = Pt; exports.injectBitSteps = Tt; exports.injectBitUpload = Ut; exports.injectBitWatch = Et; exports.provideBitStore = at; exports.useBitStore = u;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/angular/index.cjs","../../src/angular/provider.ts","../../src/angular/inject-bit-form.ts","../../src/angular/inject-bit-field.ts","../../src/angular/inject-bit-array.ts"],"names":["BIT_STORE_TOKEN","InjectionToken","provideBitStore","store","resolveBitStoreForHooks","useBitStore","inject","injectBitForm","destroyRef","stateSignal","signal","submitError","lastResponse","sub","state","nextState","isValid","computed","isSubmitting","isDirty","controller","createFormController","result","error","actions","createStoreFormActions","injectBitField","path","unsubscribe","subscribeFieldState","value","rawError","touched","isValidating","isHidden","isRequired","invalid","resolvedMask","fieldController","createMaskedFieldController","displayValue","setValue","val","setBlur","hasError","e","isBitFieldInputEventObject","injectBitArray","createId","index","valuesSig","getDeepValue","idsSig","_","unsub","next","ids","untracked","i"],"mappings":"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","file":"/home/runner/work/bit-form/bit-form/dist/angular/index.cjs","sourcesContent":[null,"import { inject, InjectionToken, Provider } from \"@angular/core\";\nimport type { BitStoreApi, BitStoreHooksApi } from \"../core\";\nimport { resolveBitStoreForHooks } from \"../core\";\n\nexport const BIT_STORE_TOKEN = new InjectionToken<BitStoreHooksApi<any>>(\n \"BIT_STORE\",\n);\n\nexport function provideBitStore<T extends object>(\n store: BitStoreApi<T>,\n): Provider {\n return { provide: BIT_STORE_TOKEN, useValue: resolveBitStoreForHooks(store) };\n}\n\nexport function useBitStore<T extends object>() {\n const store = inject(BIT_STORE_TOKEN, { optional: true });\n\n if (!store) {\n throw new Error(\n \"BitForm: Não foi possível encontrar a BitStore. \" +\n 'Certifique-se de que você adicionou \"provideBitStore(store)\" nos providers do seu componente.',\n );\n }\n\n return store as BitStoreHooksApi<T>;\n}\n","import { signal, computed, inject, DestroyRef } from \"@angular/core\";\nimport { useBitStore } from \"./provider\";\nimport {\n createFormController,\n createStoreFormActions,\n} from \"../core/form-controller\";\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: store.getState().isValid,\n isSubmitting: store.getState().isSubmitting,\n isDirty: store.getState().isDirty,\n });\n const submitError = signal<Error | null>(null);\n const lastResponse = signal<unknown>(null);\n\n const sub = store.subscribeSelector(\n (state) => ({\n isValid: state.isValid,\n isSubmitting: state.isSubmitting,\n isDirty: state.isDirty,\n }),\n (nextState) => {\n stateSignal.set(nextState);\n },\n { paths: [\"isValid\", \"isSubmitting\", \"isDirty\"] },\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 = createFormController(\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 const actions = createStoreFormActions(store);\n\n const meta = {\n isValid,\n isDirty,\n isSubmitting,\n submitError: submitError.asReadonly(),\n lastResponse: lastResponse.asReadonly(),\n };\n\n return {\n // Metadata (grouped)\n meta,\n // Getters\n getValues: controller.getValues,\n getErrors: controller.getErrors,\n getTouched: controller.getTouched,\n getDirtyValues: controller.getDirtyValues,\n // Main actions (frequent use - flat)\n submit: controller.submit,\n onSubmit: controller.onSubmit,\n reset: controller.reset,\n ...actions,\n };\n}\n","import { inject, DestroyRef, computed, signal } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport { BitPath, BitPathValue } from \"../core\";\nimport {\n createMaskedFieldController,\n subscribeFieldState,\n} from \"../core/field-controller\";\nimport { isBitFieldInputEventObject } from \"../core/mask/field-binding\";\nimport type {\n BitFieldInputEvent,\n InjectBitFieldMeta,\n InjectBitFieldResult,\n} from \"./types\";\n\nexport function injectBitField<\n TValue = any,\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P): InjectBitFieldResult<TForm, P> {\n const store = inject(BIT_STORE_TOKEN);\n\n const stateSignal = signal(store.getFieldState(path));\n\n const unsubscribe = subscribeFieldState(store, path, (nextState) => {\n stateSignal.set(nextState);\n });\n\n inject(DestroyRef).onDestroy(() => {\n unsubscribe();\n if (store.unregisterField) {\n store.unregisterField(path as string);\n }\n });\n\n const value = computed(() => stateSignal().value as BitPathValue<TForm, P>);\n const rawError = computed(() => stateSignal().error);\n const touched = computed(() => stateSignal().touched);\n const error = computed(() => (touched() ? rawError() : undefined));\n\n const isDirty = computed(() => stateSignal().isDirty);\n\n const isValidating = computed(() => stateSignal().isValidating);\n\n const isHidden = computed(() => stateSignal().isHidden);\n\n const isRequired = computed(() => stateSignal().isRequired);\n\n const invalid = computed(() => touched() && !!rawError());\n\n const resolvedMask = store.resolveMask(path as string);\n const fieldController = createMaskedFieldController(\n store,\n path,\n resolvedMask,\n );\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(() => !!rawError());\n\n const update = (e: BitFieldInputEvent) =>\n setValue(isBitFieldInputEventObject(e) ? (e.target?.value ?? null) : e);\n\n return {\n // Main handlers and values (flat)\n value,\n displayValue,\n setValue,\n setBlur,\n update,\n // Metadata (grouped)\n meta: {\n error,\n touched,\n invalid,\n isDirty,\n isValidating,\n isHidden,\n isRequired,\n hasError,\n },\n };\n}\n","import { DestroyRef, signal, computed, inject, untracked } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport {\n getDeepValue,\n BitArrayPath,\n BitPathValue,\n BitArrayItem,\n BitPath,\n} from \"../core\";\n\nexport function injectBitArray<\n TForm extends object = any,\n P extends BitArrayPath<TForm> = BitArrayPath<TForm>,\n>(path: P) {\n const store = inject(BIT_STORE_TOKEN);\n const destroyRef = inject(DestroyRef);\n\n const createId = (index?: number) =>\n store.config.idFactory({\n scope: \"array\",\n path: path as string,\n index,\n });\n\n const getRaw = () => {\n const val = getDeepValue(\n store.getState().values,\n path as string,\n ) as BitPathValue<TForm, P>;\n return Array.isArray(val)\n ? (val as BitArrayItem<BitPathValue<TForm, P>>[])\n : [];\n };\n\n const valuesSig = signal<BitArrayItem<BitPathValue<TForm, P>>[]>(getRaw());\n const idsSig = signal<string[]>(\n valuesSig().map((_, index) => createId(index)),\n );\n\n const unsub = store.subscribePath(path, (value) => {\n const next = Array.isArray(value)\n ? (value as BitArrayItem<BitPathValue<TForm, P>>[])\n : [];\n const ids = untracked(idsSig);\n valuesSig.set(next);\n\n if (next.length !== ids.length) {\n if (next.length > ids.length) {\n idsSig.set([\n ...ids,\n ...Array.from({ length: next.length - ids.length }, (_, i) =>\n createId(ids.length + i),\n ),\n ]);\n } else {\n idsSig.set(ids.slice(0, next.length));\n }\n }\n });\n\n destroyRef.onDestroy(() => {\n unsub();\n if (store.unregisterPrefix) store.unregisterPrefix(`${path as string}.`);\n });\n\n return {\n fields: computed(() =>\n valuesSig().map((v, i) => ({\n key: idsSig()[i] || `temp-${i}`,\n value: v,\n index: i,\n })),\n ),\n length: computed(() => valuesSig().length),\n append: (v: BitArrayItem<BitPathValue<TForm, P>>) => {\n idsSig.update((ids) => [...ids, createId(ids.length)]);\n store.pushItem(path, v);\n },\n prepend: (v: BitArrayItem<BitPathValue<TForm, P>>) => {\n idsSig.update((ids) => [createId(0), ...ids]);\n store.prependItem(path, v);\n },\n remove: (i: number) => {\n idsSig.update((ids) => ids.filter((_, idx) => idx !== i));\n store.removeItem(path, i);\n },\n insert: (index: number, v: BitArrayItem<BitPathValue<TForm, P>>) => {\n idsSig.update((ids) => {\n const c = [...ids];\n c.splice(index, 0, createId(index));\n return c;\n });\n store.insertItem(path, index, v);\n },\n swap: (a: number, b: number) => {\n idsSig.update((ids) => {\n const c = [...ids];\n [c[a], c[b]] = [c[b], c[a]];\n return c;\n });\n store.swapItems(path, a, b);\n },\n move: (f: number, t: number) => {\n idsSig.update((ids) => {\n const c = [...ids];\n const [it] = c.splice(f, 1);\n c.splice(t, 0, it);\n return c;\n });\n store.moveItem(path, f, t);\n },\n replace: (items: BitArrayItem<BitPathValue<TForm, P>>[]) => {\n idsSig.set(items.map((_, index) => createId(index)));\n store.setField(\n path as unknown as BitPath<TForm>,\n items as unknown as BitPathValue<TForm, BitPath<TForm>>,\n );\n },\n clear: () => {\n idsSig.set([]);\n store.setField(\n path as unknown as BitPath<TForm>,\n [] as unknown as BitPathValue<TForm, BitPath<TForm>>,\n );\n },\n };\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/angular/index.cjs","../../src/angular/provider.ts","../../src/angular/inject-bit-form.ts","../../src/angular/inject-bit-field.ts","../../src/angular/inject-bit-array.ts"],"names":["BIT_STORE_TOKEN","InjectionToken","provideBitStore","store","resolveBitStoreForHooks","useBitStore","inject","injectBitForm","destroyRef","stateSignal","signal","submitError","lastResponse","sub","observeFormMetaSnapshot","nextMeta","isValid","computed","isSubmitting","isDirty","controller","actions","createFrameworkFormBinding","result","error","injectBitField","path","unsubscribe","subscribeFieldState","nextState","cleanupRegisteredField","value","metaState","deriveFieldMeta","touched","invalid","isValidating","isHidden","isRequired","fieldController","createFrameworkMaskedFieldBinding","displayValue","setValue","val","setBlur","hasError","e","isBitFieldInputEventObject","injectBitArray","createArrayBindingController","valuesSig","unsub","cleanupRegisteredPrefix"],"mappings":"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","file":"/home/runner/work/bit-form/bit-form/dist/angular/index.cjs","sourcesContent":[null,"import { inject, InjectionToken, Provider } from \"@angular/core\";\nimport type { BitFormBindingApi, BitStoreHooksApi } from \"../core\";\nimport { resolveBitStoreForHooks } from \"../core\";\n\nexport const BIT_STORE_TOKEN = new InjectionToken<BitFormBindingApi<any>>(\n \"BIT_STORE\",\n);\n\nexport function provideBitStore<T extends object>(\n store: BitStoreHooksApi<T>,\n): Provider {\n return { provide: BIT_STORE_TOKEN, useValue: resolveBitStoreForHooks(store) };\n}\n\nexport function useBitStore<T extends object>() {\n const store = inject(BIT_STORE_TOKEN, { optional: true });\n\n if (!store) {\n throw new Error(\n \"BitForm: Não foi possível encontrar a BitStore. \" +\n 'Certifique-se de que você adicionou \"provideBitStore(store)\" nos providers do seu componente.',\n );\n }\n\n return store as BitFormBindingApi<T>;\n}\n","import { signal, computed, inject, DestroyRef } from \"@angular/core\";\nimport { useBitStore } from \"./provider\";\nimport { createFrameworkFormBinding, observeFormMetaSnapshot } from \"../core\";\nimport type { InjectBitFormResult } from \"./types\";\n\nexport function injectBitForm<T extends object>(): InjectBitFormResult<T> {\n const store = useBitStore<T>();\n const destroyRef = inject(DestroyRef);\n const stateSignal = signal({\n isValid: true,\n isDirty: false,\n isSubmitting: false,\n });\n const submitError = signal<Error | null>(null);\n const lastResponse = signal<unknown>(null);\n\n const sub = observeFormMetaSnapshot(store, (nextMeta) => {\n stateSignal.set(nextMeta);\n });\n\n destroyRef.onDestroy(() => sub());\n\n const isValid = computed(() => stateSignal().isValid);\n const isSubmitting = computed(() => stateSignal().isSubmitting);\n const isDirty = computed(() => stateSignal().isDirty);\n\n const { controller, actions } = createFrameworkFormBinding(\n store,\n {\n clearSubmissionState: () => {\n submitError.set(null);\n lastResponse.set(null);\n },\n setSubmissionResult: (result) => {\n lastResponse.set(result);\n },\n setSubmissionError: (error) => {\n submitError.set(error);\n },\n },\n { stopPropagation: true },\n );\n\n const meta = {\n isValid,\n isDirty,\n isSubmitting,\n submitError: submitError.asReadonly(),\n lastResponse: lastResponse.asReadonly(),\n };\n\n return {\n // Metadata (grouped)\n meta,\n // Getters\n getValues: controller.getValues,\n getErrors: controller.getErrors,\n getTouched: controller.getTouched,\n getDirtyValues: controller.getDirtyValues,\n // Main actions (frequent use - flat)\n submit: controller.submit,\n onSubmit: controller.onSubmit,\n reset: controller.reset,\n ...actions,\n };\n}\n","import { inject, DestroyRef, computed, signal } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport {\n BitPath,\n BitPathValue,\n cleanupRegisteredField,\n createFrameworkMaskedFieldBinding,\n deriveFieldMeta,\n isBitFieldInputEventObject,\n subscribeFieldState,\n} from \"../core\";\nimport type {\n BitFieldInputEvent,\n InjectBitFieldMeta,\n InjectBitFieldResult,\n} from \"./types\";\n\nexport function injectBitField<\n TValue = any,\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P): InjectBitFieldResult<TForm, P> {\n const store = inject(BIT_STORE_TOKEN);\n\n const stateSignal = signal(store.getFieldState(path));\n\n const unsubscribe = subscribeFieldState(store, path, (nextState) => {\n stateSignal.set(nextState);\n });\n\n inject(DestroyRef).onDestroy(() => {\n unsubscribe();\n cleanupRegisteredField(store, path as string);\n });\n\n const value = computed(() => stateSignal().value as BitPathValue<TForm, P>);\n const metaState = computed(() => deriveFieldMeta(stateSignal()));\n const error = computed(() => metaState().error);\n const touched = computed(() => metaState().touched);\n const invalid = computed(() => metaState().invalid);\n const isDirty = computed(() => metaState().isDirty);\n const isValidating = computed(() => metaState().isValidating);\n const isHidden = computed(() => metaState().isHidden);\n const isRequired = computed(() => metaState().isRequired);\n\n const { fieldController } = createFrameworkMaskedFieldBinding(store, path);\n\n const displayValue = computed(() => fieldController.displayValue(value()));\n\n const setValue = (\n val: BitPathValue<TForm, P> | string | number | null | undefined,\n ) => {\n fieldController.setValue(val);\n };\n\n const setBlur = () => fieldController.setBlur();\n\n const hasError = computed(() => metaState().hasError);\n\n const update = (e: BitFieldInputEvent) =>\n setValue(isBitFieldInputEventObject(e) ? (e.target?.value ?? null) : e);\n\n return {\n // Main handlers and values (flat)\n value,\n displayValue,\n setValue,\n setBlur,\n update,\n // Metadata (grouped)\n meta: {\n error,\n touched,\n invalid,\n isDirty,\n isValidating,\n isHidden,\n isRequired,\n hasError,\n },\n };\n}\n","import { DestroyRef, signal, computed, inject } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport {\n createArrayBindingController,\n BitArrayPath,\n BitPathValue,\n BitArrayItem,\n cleanupRegisteredPrefix,\n} from \"../core\";\n\nexport function injectBitArray<\n TForm extends object = any,\n P extends BitArrayPath<TForm> = BitArrayPath<TForm>,\n>(path: P) {\n const store = inject(BIT_STORE_TOKEN);\n const destroyRef = inject(DestroyRef);\n const controller = createArrayBindingController<TForm, P>(store, path);\n\n const valuesSig = signal<BitArrayItem<BitPathValue<TForm, P>>[]>(\n controller.readItems(),\n );\n\n const unsub = store.subscribePath(path, () => {\n valuesSig.set(controller.readItems());\n });\n\n destroyRef.onDestroy(() => {\n unsub();\n cleanupRegisteredPrefix(store, `${path as string}.`);\n });\n\n return {\n fields: computed(() => controller.getFields(valuesSig())),\n length: computed(() => valuesSig().length),\n append: controller.append,\n prepend: controller.prepend,\n remove: controller.remove,\n insert: controller.insert,\n swap: controller.swap,\n move: controller.move,\n replace: controller.replace,\n clear: controller.clear,\n };\n}\n"]}
@@ -1,13 +1,14 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { Provider, Signal } from '@angular/core';
3
- import { e as BitStoreApi, f as BitStoreHooksApi, d as BitValidationOptions } from '../public-types-BQXaxmAE.cjs';
4
- import { f as BitPath, g as BitPathValue, j as BitPersistMetadata, n as ValidateScopeResult, i as BitErrors, H as BitTouched, h as DeepPartial, k as BitArrayPath, l as BitArrayItem, S as ScopeStatus } from '../bus-BeAeZwWu.cjs';
5
- import { B as BitFieldInputEvent } from '../field-binding-BXw0Ku2c.cjs';
3
+ import { a as BitStoreHooksApi, b as BitFormBindingApi, d as BitValidationOptions } from '../store-api-types-B6_bPoVI.cjs';
4
+ import { e as BitPath, b as BitPathValue, i as BitPersistMetadata, V as ValidateScopeResult, c as BitErrors, r as BitTouched, D as DeepPartial, B as BitArrayPath, a as BitArrayItem, S as ScopeStatus } from '../bus-rcUiufS7.cjs';
5
+ import { B as BitFieldInputEvent } from '../field-binding-X5TkvfUt.cjs';
6
+ import { B as BitArrayBindingField } from '../array-controller-C1A5VKYd.cjs';
6
7
  import { B as BitUploadFn, a as BitDeleteUploadFn } from '../upload-EXnJLq8k.cjs';
7
- import '../types-D8DgIUhJ.cjs';
8
+ import '../types-CUXh7PqD.cjs';
8
9
 
9
- declare function provideBitStore<T extends object>(store: BitStoreApi<T>): Provider;
10
- declare function useBitStore<T extends object>(): BitStoreHooksApi<T>;
10
+ declare function provideBitStore<T extends object>(store: BitStoreHooksApi<T>): Provider;
11
+ declare function useBitStore<T extends object>(): BitFormBindingApi<T>;
11
12
 
12
13
  /**
13
14
  * Metadata describing the current state of a form field (Angular Signal).
@@ -104,9 +105,10 @@ interface InjectBitFormResult<T extends object = any> {
104
105
  onSubmit: (handler: (values: T, dirtyValues?: Partial<T>) => Promise<unknown>) => (event?: Event) => Promise<void>;
105
106
  reset: () => void;
106
107
  transaction: <TResult>(callback: () => TResult) => TResult;
107
- replaceValues: (values: T) => void;
108
- hydrate: (values: DeepPartial<T>) => void;
109
- rebase: (values: T) => void;
108
+ setValues: (values: T | DeepPartial<T>, options?: {
109
+ partial?: boolean;
110
+ rebase?: boolean;
111
+ }) => void;
110
112
  setError: (path: string, message: string | undefined) => void;
111
113
  setErrors: (errors: BitErrors<T>) => void;
112
114
  setServerErrors: (serverErrors: Record<string, string[] | string>) => void;
@@ -120,18 +122,14 @@ declare function injectBitForm<T extends object>(): InjectBitFormResult<T>;
120
122
  declare function injectBitField<TValue = any, TForm extends object = any, P extends BitPath<TForm> = BitPath<TForm>>(path: P): InjectBitFieldResult<TForm, P>;
121
123
 
122
124
  declare function injectBitArray<TForm extends object = any, P extends BitArrayPath<TForm> = BitArrayPath<TForm>>(path: P): {
123
- fields: _angular_core.Signal<{
124
- key: string;
125
- value: BitArrayItem<BitPathValue<TForm, P>>;
126
- index: number;
127
- }[]>;
125
+ fields: _angular_core.Signal<BitArrayBindingField<BitArrayItem<BitPathValue<TForm, P>>>[]>;
128
126
  length: _angular_core.Signal<number>;
129
- append: (v: BitArrayItem<BitPathValue<TForm, P>>) => void;
130
- prepend: (v: BitArrayItem<BitPathValue<TForm, P>>) => void;
131
- remove: (i: number) => void;
132
- insert: (index: number, v: BitArrayItem<BitPathValue<TForm, P>>) => void;
133
- swap: (a: number, b: number) => void;
134
- move: (f: number, t: number) => void;
127
+ append: (value: BitArrayItem<BitPathValue<TForm, P>>) => void;
128
+ prepend: (value: BitArrayItem<BitPathValue<TForm, P>>) => void;
129
+ remove: (index: number) => void;
130
+ insert: (index: number, value: BitArrayItem<BitPathValue<TForm, P>>) => void;
131
+ swap: (indexA: number, indexB: number) => void;
132
+ move: (from: number, to: number) => void;
135
133
  replace: (items: BitArrayItem<BitPathValue<TForm, P>>[]) => void;
136
134
  clear: () => void;
137
135
  };
@@ -1,13 +1,14 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { Provider, Signal } from '@angular/core';
3
- import { e as BitStoreApi, f as BitStoreHooksApi, d as BitValidationOptions } from '../public-types-CVgFf_qY.js';
4
- import { f as BitPath, g as BitPathValue, j as BitPersistMetadata, n as ValidateScopeResult, i as BitErrors, H as BitTouched, h as DeepPartial, k as BitArrayPath, l as BitArrayItem, S as ScopeStatus } from '../bus-B4zZmB9C.js';
5
- import { B as BitFieldInputEvent } from '../field-binding-BXw0Ku2c.js';
3
+ import { a as BitStoreHooksApi, b as BitFormBindingApi, d as BitValidationOptions } from '../store-api-types-9ipdute1.js';
4
+ import { e as BitPath, b as BitPathValue, i as BitPersistMetadata, V as ValidateScopeResult, c as BitErrors, r as BitTouched, D as DeepPartial, B as BitArrayPath, a as BitArrayItem, S as ScopeStatus } from '../bus-DgilLszS.js';
5
+ import { B as BitFieldInputEvent } from '../field-binding-Bi1g-D8X.js';
6
+ import { B as BitArrayBindingField } from '../array-controller-DtkmcnUr.js';
6
7
  import { B as BitUploadFn, a as BitDeleteUploadFn } from '../upload-EXnJLq8k.js';
7
- import '../types-D8DgIUhJ.js';
8
+ import '../types-CUXh7PqD.js';
8
9
 
9
- declare function provideBitStore<T extends object>(store: BitStoreApi<T>): Provider;
10
- declare function useBitStore<T extends object>(): BitStoreHooksApi<T>;
10
+ declare function provideBitStore<T extends object>(store: BitStoreHooksApi<T>): Provider;
11
+ declare function useBitStore<T extends object>(): BitFormBindingApi<T>;
11
12
 
12
13
  /**
13
14
  * Metadata describing the current state of a form field (Angular Signal).
@@ -104,9 +105,10 @@ interface InjectBitFormResult<T extends object = any> {
104
105
  onSubmit: (handler: (values: T, dirtyValues?: Partial<T>) => Promise<unknown>) => (event?: Event) => Promise<void>;
105
106
  reset: () => void;
106
107
  transaction: <TResult>(callback: () => TResult) => TResult;
107
- replaceValues: (values: T) => void;
108
- hydrate: (values: DeepPartial<T>) => void;
109
- rebase: (values: T) => void;
108
+ setValues: (values: T | DeepPartial<T>, options?: {
109
+ partial?: boolean;
110
+ rebase?: boolean;
111
+ }) => void;
110
112
  setError: (path: string, message: string | undefined) => void;
111
113
  setErrors: (errors: BitErrors<T>) => void;
112
114
  setServerErrors: (serverErrors: Record<string, string[] | string>) => void;
@@ -120,18 +122,14 @@ declare function injectBitForm<T extends object>(): InjectBitFormResult<T>;
120
122
  declare function injectBitField<TValue = any, TForm extends object = any, P extends BitPath<TForm> = BitPath<TForm>>(path: P): InjectBitFieldResult<TForm, P>;
121
123
 
122
124
  declare function injectBitArray<TForm extends object = any, P extends BitArrayPath<TForm> = BitArrayPath<TForm>>(path: P): {
123
- fields: _angular_core.Signal<{
124
- key: string;
125
- value: BitArrayItem<BitPathValue<TForm, P>>;
126
- index: number;
127
- }[]>;
125
+ fields: _angular_core.Signal<BitArrayBindingField<BitArrayItem<BitPathValue<TForm, P>>>[]>;
128
126
  length: _angular_core.Signal<number>;
129
- append: (v: BitArrayItem<BitPathValue<TForm, P>>) => void;
130
- prepend: (v: BitArrayItem<BitPathValue<TForm, P>>) => void;
131
- remove: (i: number) => void;
132
- insert: (index: number, v: BitArrayItem<BitPathValue<TForm, P>>) => void;
133
- swap: (a: number, b: number) => void;
134
- move: (f: number, t: number) => void;
127
+ append: (value: BitArrayItem<BitPathValue<TForm, P>>) => void;
128
+ prepend: (value: BitArrayItem<BitPathValue<TForm, P>>) => void;
129
+ remove: (index: number) => void;
130
+ insert: (index: number, value: BitArrayItem<BitPathValue<TForm, P>>) => void;
131
+ swap: (indexA: number, indexB: number) => void;
132
+ move: (from: number, to: number) => void;
135
133
  replace: (items: BitArrayItem<BitPathValue<TForm, P>>[]) => void;
136
134
  clear: () => void;
137
135
  };
@@ -1,2 +1,2 @@
1
- import{a as L,b as $,c as G}from"../chunk-QWH2NBVB.js";import{a as K,b as C,c as W,d as z,e as j,f as R}from"../chunk-2FDEJYA5.js";import{d as _,e as T,k as O}from"../chunk-64KSP4TP.js";import{a as q}from"../chunk-3NUJVIAM.js";import{inject as N,InjectionToken as tt}from"@angular/core";var B=new tt("BIT_STORE");function et(t){return{provide:B,useValue:O(t)}}function y(){let t=N(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 E,computed as w,inject as rt,DestroyRef as ot}from"@angular/core";function st(){let t=y(),e=rt(ot),o=E({isValid:t.getState().isValid,isSubmitting:t.getState().isSubmitting,isDirty:t.getState().isDirty}),l=E(null),i=E(null),c=t.subscribeSelector(m=>({isValid:m.isValid,isSubmitting:m.isSubmitting,isDirty:m.isDirty}),m=>{o.set(m)},{paths:["isValid","isSubmitting","isDirty"]});e.onDestroy(()=>c());let u=w(()=>o().isValid),S=w(()=>o().isSubmitting),s=w(()=>o().isDirty),r=C(t,{clearSubmissionState:()=>{l.set(null),i.set(null)},setSubmissionResult:m=>{i.set(m)},setSubmissionError:m=>{l.set(m)}},{stopPropagation:!0}),n=K(t);return{meta:{isValid:u,isDirty:s,isSubmitting:S,submitError:l.asReadonly(),lastResponse:i.asReadonly()},getValues:r.getValues,getErrors:r.getErrors,getTouched:r.getTouched,getDirtyValues:r.getDirtyValues,submit:r.submit,onSubmit:r.onSubmit,reset:r.reset,...n}}import{inject as J,DestroyRef as it,computed as g,signal as nt}from"@angular/core";function A(t){let e=J(B),o=nt(e.getFieldState(t)),l=W(e,t,d=>{o.set(d)});J(it).onDestroy(()=>{l(),e.unregisterField&&e.unregisterField(t)});let i=g(()=>o().value),c=g(()=>o().error),u=g(()=>o().touched),S=g(()=>u()?c():void 0),s=g(()=>o().isDirty),r=g(()=>o().isValidating),n=g(()=>o().isHidden),a=g(()=>o().isRequired),m=g(()=>u()&&!!c()),I=e.resolveMask(t),F=z(e,t,I),v=g(()=>F.displayValue(i())),h=d=>{F.setValue(d)},x=()=>F.setBlur(),D=g(()=>!!c());return{value:i,displayValue:v,setValue:h,setBlur:x,update:d=>h(q(d)?d.target?.value??null:d),meta:{error:S,touched:u,invalid:m,isDirty:s,isValidating:r,isHidden:n,isRequired:a,hasError:D}}}import{DestroyRef as at,signal as Q,computed as X,inject as Y,untracked as ct}from"@angular/core";function ut(t){let e=Y(B),o=Y(at),l=s=>e.config.idFactory({scope:"array",path:t,index:s}),c=Q((()=>{let s=T(e.getState().values,t);return Array.isArray(s)?s:[]})()),u=Q(c().map((s,r)=>l(r))),S=e.subscribePath(t,s=>{let r=Array.isArray(s)?s:[],n=ct(u);c.set(r),r.length!==n.length&&(r.length>n.length?u.set([...n,...Array.from({length:r.length-n.length},(a,m)=>l(n.length+m))]):u.set(n.slice(0,r.length)))});return o.onDestroy(()=>{S(),e.unregisterPrefix&&e.unregisterPrefix(`${t}.`)}),{fields:X(()=>c().map((s,r)=>({key:u()[r]||`temp-${r}`,value:s,index:r}))),length:X(()=>c().length),append:s=>{u.update(r=>[...r,l(r.length)]),e.pushItem(t,s)},prepend:s=>{u.update(r=>[l(0),...r]),e.prependItem(t,s)},remove:s=>{u.update(r=>r.filter((n,a)=>a!==s)),e.removeItem(t,s)},insert:(s,r)=>{u.update(n=>{let a=[...n];return a.splice(s,0,l(s)),a}),e.insertItem(t,s,r)},swap:(s,r)=>{u.update(n=>{let a=[...n];return[a[s],a[r]]=[a[r],a[s]],a}),e.swapItems(t,s,r)},move:(s,r)=>{u.update(n=>{let a=[...n],[m]=a.splice(s,1);return a.splice(r,0,m),a}),e.moveItem(t,s,r)},replace:s=>{u.set(s.map((r,n)=>l(n))),e.setField(t,s)},clear:()=>{u.set([]),e.setField(t,[])}}}import{computed as V,DestroyRef as lt,inject as mt,signal as pt}from"@angular/core";function dt(){let t=y(),e=mt(lt),o=pt(t.getHistoryMetadata()),l=t.subscribe(()=>{let i=t.getHistoryMetadata();L(o(),i)||o.set(i)});return e.onDestroy(()=>l()),{canUndo:V(()=>o().canUndo),canRedo:V(()=>o().canRedo),historyIndex:V(()=>o().historyIndex),historySize:V(()=>o().historySize),undo:()=>t.undo(),redo:()=>t.redo()}}import{signal as yt,computed as k,DestroyRef as St,inject as gt}from"@angular/core";function Bt(t){let e=y(),o=e.getScopeFields(t),l=e.getStepStatus(t),i=yt(l),c=e.subscribeSelector(a=>({errors:a.errors,isDirty:a.isDirty}),()=>{let a=e.getStepStatus(t),m=i();j(m,a)||i.set(a)},{paths:R(o)});try{gt(St).onDestroy(()=>c())}catch{}let u=async()=>{let a=await e.validate({scope:t}),m=e.getStepErrors(t);return{valid:a,errors:m}},S=()=>e.getStepErrors(t),s=k(()=>!i().hasErrors),r=k(()=>i().isDirty),n=k(()=>i().errors);return{scopeName:t,status:i,errors:n,validate:u,getErrors:S,isValid:s,isDirty:r,unsubscribe:c}}import{signal as Z,computed as f,DestroyRef as ft,inject as Pt}from"@angular/core";function Ft(t){let e=y(),o=Z(0),l=f(()=>t[o()]??""),i=()=>t[o()]??"",c=Z(e.getStepStatus(i())),u=()=>{let p=i(),d=e.getStepStatus(p),P=c();j(P,d)||c.set(d)},S=e.subscribeSelector(p=>({errors:p.errors,isDirty:p.isDirty}),u,{paths:R(e.getScopeFields(i()))});try{Pt(ft).onDestroy(()=>S())}catch{}let s=async()=>{let p=i(),d=await e.validate({scope:p}),P=e.getStepErrors(p);return{valid:d,errors:P}},r=()=>e.getStepErrors(i()),n=async()=>{let p=i(),d=e.getScopeFields(p);if(e.hasValidationsInProgress(d))return!1;let P=await e.validate({scope:p});if(P){let b=Math.min(o()+1,t.length-1);o.set(b),c.set(e.getStepStatus(t[b]??""))}else{let b=e.getStepErrors(p),M=Object.keys(b);M.length>0&&e.markFieldsTouched(M)}return P},a=()=>{let p=Math.max(o()-1,0);o.set(p),c.set(e.getStepStatus(t[p]??""))},m=p=>{let d=Math.max(0,Math.min(p-1,t.length-1));o.set(d),c.set(e.getStepStatus(t[d]??""))},I=f(()=>o()+1),F=f(()=>o()===0),v=f(()=>o()>=t.length-1),h=f(()=>!c().hasErrors),x=f(()=>c().isDirty),D=f(()=>c().errors);return{step:I,stepIndex:o,scope:l,next:n,prev:a,goTo:m,isFirst:F,isLast:v,status:c,errors:D,isValid:h,isDirty:x,validate:s,getErrors:r}}import{DestroyRef as ht,signal as bt,inject as Tt}from"@angular/core";function jt(t){let e=y(),o=Tt(ht),l=bt(T(e.getState().values,t),{equal:_}),i=e.watch(t,c=>{l.set(c)});return o.onDestroy(i),l.asReadonly()}import{computed as H,inject as Rt,signal as Vt}from"@angular/core";function It(t,e,o){let l=Rt(B),i=A(t),c=null,u=Vt(!1),S={setLoading:n=>u.set(n),setError:(n,a)=>l.setError(n,a),setValue:n=>i.setValue(n),getUploadKey:()=>c,setUploadKey:n=>{c=n}},s=$(t,e,S),r=G(t,o,S);return{value:H(()=>i.value()),setValue:i.setValue,error:H(()=>i.meta.error()),isValidating:H(()=>!!i.meta.isValidating()||u()),upload:s,remove:r}}import{computed as U,inject as vt,signal as xt,DestroyRef as Dt}from"@angular/core";function Et(){let t=y(),e=xt(t.getPersistMetadata()),o=t.subscribeSelector(u=>u.persist,u=>{e.set(u)},{paths:["persist"]});try{vt(Dt).onDestroy(()=>o())}catch{}return{restore:async()=>t.restorePersisted(),save:async()=>{await t.forceSave()},clear:async()=>{await t.clearPersisted()},meta:{isSaving:U(()=>e().isSaving),isRestoring:U(()=>e().isRestoring),error:U(()=>e().error)}}}export{ut as injectBitArray,A as injectBitField,st as injectBitForm,dt as injectBitHistory,Et as injectBitPersist,Bt as injectBitScope,Ft as injectBitSteps,It as injectBitUpload,jt as injectBitWatch,et as provideBitStore,y as useBitStore};
1
+ import{a as N,b as tt}from"../chunk-O5UPA33R.js";import{B as z,C as L,D as G,E as J,F as Q,G as X,H as Y,I as Z,c as M,e as k,m as O,n as _,p as q,r as K,s as C,y as W}from"../chunk-SA47B5OP.js";import{a as $}from"../chunk-3NUJVIAM.js";import{inject as it,InjectionToken as nt}from"@angular/core";var g=new nt("BIT_STORE");function at(t){return{provide:g,useValue:C(t)}}function u(){let t=it(g,{optional:!0});if(!t)throw new Error('BitForm: N\xE3o foi poss\xEDvel encontrar a BitStore. Certifique-se de que voc\xEA adicionou "provideBitStore(store)" nos providers do seu componente.');return t}import{signal as V,computed as I,inject as ct,DestroyRef as lt}from"@angular/core";function ut(){let t=u(),e=ct(lt),o=V({isValid:!0,isDirty:!1,isSubmitting:!1}),r=V(null),s=V(null),i=W(t,S=>{o.set(S)});e.onDestroy(()=>i());let l=I(()=>o().isValid),p=I(()=>o().isSubmitting),m=I(()=>o().isDirty),{controller:a,actions:n}=L(t,{clearSubmissionState:()=>{r.set(null),s.set(null)},setSubmissionResult:S=>{s.set(S)},setSubmissionError:S=>{r.set(S)}},{stopPropagation:!0});return{meta:{isValid:l,isDirty:m,isSubmitting:p,submitError:r.asReadonly(),lastResponse:s.asReadonly()},getValues:a.getValues,getErrors:a.getErrors,getTouched:a.getTouched,getDirtyValues:a.getDirtyValues,submit:a.submit,onSubmit:a.onSubmit,reset:a.reset,...n}}import{inject as et,DestroyRef as pt,computed as d,signal as mt}from"@angular/core";function E(t){let e=et(g),o=mt(e.getFieldState(t)),r=G(e,t,y=>{o.set(y)});et(pt).onDestroy(()=>{r(),X(e,t)});let s=d(()=>o().value),i=d(()=>Z(o())),l=d(()=>i().error),p=d(()=>i().touched),m=d(()=>i().invalid),a=d(()=>i().isDirty),n=d(()=>i().isValidating),f=d(()=>i().isHidden),S=d(()=>i().isRequired),{fieldController:F}=J(e,t),h=d(()=>F.displayValue(s())),b=y=>{F.setValue(y)},T=()=>F.setBlur(),x=d(()=>i().hasError);return{value:s,displayValue:h,setValue:b,setBlur:T,update:y=>b($(y)?y.target?.value??null:y),meta:{error:l,touched:p,invalid:m,isDirty:a,isValidating:n,isHidden:f,isRequired:S,hasError:x}}}import{DestroyRef as dt,signal as St,computed as ot,inject as rt}from"@angular/core";function yt(t){let e=rt(g),o=rt(dt),r=Q(e,t),s=St(r.readItems()),i=e.subscribePath(t,()=>{s.set(r.readItems())});return o.onDestroy(()=>{i(),Y(e,`${t}.`)}),{fields:ot(()=>r.getFields(s())),length:ot(()=>s().length),append:r.append,prepend:r.prepend,remove:r.remove,insert:r.insert,swap:r.swap,move:r.move,replace:r.replace,clear:r.clear}}import{computed as v,DestroyRef as Bt,inject as ft,signal as gt}from"@angular/core";function jt(){let t=u(),e=ft(Bt),o=gt(O(t)),r=_(t,s=>{o.set(s)});return e.onDestroy(()=>r()),{canUndo:v(()=>o().canUndo),canRedo:v(()=>o().canRedo),historyIndex:v(()=>o().historyIndex),historySize:v(()=>o().historySize),undo:()=>t.undo(),redo:()=>t.redo()}}import{signal as Rt,computed as D,DestroyRef as Ft,inject as bt}from"@angular/core";function Pt(t){let e=u(),o=e.getStepStatus(t),r=Rt(o),s=K(e,t,n=>{r.set(n)});try{bt(Ft).onDestroy(()=>s())}catch{}let i=async()=>{let n=await e.validate({scope:t}),f=e.getStepErrors(t);return{valid:n,errors:f}},l=()=>e.getStepErrors(t),p=D(()=>!r().hasErrors),m=D(()=>r().isDirty),a=D(()=>r().errors);return{scopeName:t,status:r,errors:a,validate:i,getErrors:l,isValid:p,isDirty:m,unsubscribe:s}}import{signal as st,computed as j,DestroyRef as vt,inject as ht}from"@angular/core";function Tt(t){let e=u(),o=st(0),r=j(()=>t[o()]??""),s=()=>t[o()]??"",i=st(e.getStepStatus(s())),l=()=>{let c=s(),B=e.getStepStatus(c),R=i();q(R,B)||i.set(B)},p=e.subscribeScopeStatus(s(),l),m=()=>{p(),p=e.subscribeScopeStatus(s(),l)};try{ht(vt).onDestroy(()=>p())}catch{}let a=async()=>{let c=s(),B=await e.validate({scope:c}),R=e.getStepErrors(c);return{valid:B,errors:R}},n=()=>e.getStepErrors(s()),f=async()=>{let c=s(),B=e.getScopeFields(c);if(e.hasValidationsInProgress(B))return!1;let R=await e.validate({scope:c});if(R){let P=Math.min(o()+1,t.length-1);o.set(P),i.set(e.getStepStatus(t[P]??"")),m()}else{let P=e.getStepErrors(c),A=Object.keys(P);A.length>0&&e.markFieldsTouched(A)}return R},S=()=>{let c=Math.max(o()-1,0);o.set(c),i.set(e.getStepStatus(t[c]??"")),m()},F=c=>{let B=Math.max(0,Math.min(c-1,t.length-1));o.set(B),i.set(e.getStepStatus(t[B]??"")),m()},h=j(()=>o()+1),b=j(()=>o()===0),T=j(()=>o()>=t.length-1),x=j(()=>!i().hasErrors),H=j(()=>i().isDirty),y=j(()=>i().errors);return{step:h,stepIndex:o,scope:r,next:f,prev:S,goTo:F,isFirst:b,isLast:T,status:i,errors:y,isValid:x,isDirty:H,validate:a,getErrors:n}}import{DestroyRef as xt,signal as Vt,inject as It}from"@angular/core";function Et(t){let e=u(),o=It(xt),r=Vt(k(e.getState().values,t),{equal:M}),s=e.subscribePath(t,i=>{r.set(i)});return o.onDestroy(s),r.asReadonly()}import{computed as w,inject as Dt,signal as wt}from"@angular/core";function Ut(t,e,o){let r=Dt(g),s=E(t),i=null,l=wt(!1),p={setLoading:n=>l.set(n),setError:(n,f)=>r.setError(n,f),setValue:n=>s.setValue(n),getUploadKey:()=>i,setUploadKey:n=>{i=n}},m=N(t,e,p),a=tt(t,o,p);return{value:w(()=>s.value()),setValue:s.setValue,error:w(()=>s.meta.error()),isValidating:w(()=>!!s.meta.isValidating()||l()),upload:m,remove:a}}import{computed as U,inject as Ht,signal as At,DestroyRef as Mt}from"@angular/core";function kt(){let t=u(),e=At(t.getPersistMetadata()),o=z(t,l=>{e.set(l)});try{Ht(Mt).onDestroy(()=>o())}catch{}return{restore:async()=>t.restorePersisted(),save:async()=>{await t.forceSave()},clear:async()=>{await t.clearPersisted()},meta:{isSaving:U(()=>e().isSaving),isRestoring:U(()=>e().isRestoring),error:U(()=>e().error)}}}export{yt as injectBitArray,E as injectBitField,ut as injectBitForm,jt as injectBitHistory,kt as injectBitPersist,Pt as injectBitScope,Tt as injectBitSteps,Ut as injectBitUpload,Et as injectBitWatch,at as provideBitStore,u as useBitStore};
2
2
  //# sourceMappingURL=index.js.map