@lehnihon/bit-form 2.2.6 → 2.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) 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 +20 -20
  5. package/dist/angular/index.d.ts +20 -20
  6. package/dist/angular/index.js +1 -1
  7. package/dist/angular/index.js.map +1 -1
  8. package/dist/array-controller-B5bfXV1W.d.cts +23 -0
  9. package/dist/array-controller-Cx-DMH7Y.d.ts +23 -0
  10. package/dist/bus-B2VEKrPI.d.ts +19 -0
  11. package/dist/bus-ZLQeq4Vr.d.cts +19 -0
  12. package/dist/chunk-5NA2TFPG.js +1 -0
  13. package/dist/chunk-5NA2TFPG.js.map +1 -0
  14. package/dist/chunk-63OJBMKK.js +2 -0
  15. package/dist/chunk-63OJBMKK.js.map +1 -0
  16. package/dist/chunk-BSGJ3T5S.cjs +2 -0
  17. package/dist/chunk-BSGJ3T5S.cjs.map +1 -0
  18. package/dist/chunk-CPP7ELA5.js +2 -0
  19. package/dist/chunk-CPP7ELA5.js.map +1 -0
  20. package/dist/chunk-D7JQWF6V.cjs +2 -0
  21. package/dist/chunk-D7JQWF6V.cjs.map +1 -0
  22. package/dist/chunk-E2NZR44P.js +2 -0
  23. package/dist/chunk-E2NZR44P.js.map +1 -0
  24. package/dist/chunk-EQ55DKX2.js +2 -0
  25. package/dist/chunk-EQ55DKX2.js.map +1 -0
  26. package/dist/chunk-IV32WXCF.cjs +2 -0
  27. package/dist/chunk-IV32WXCF.cjs.map +1 -0
  28. package/dist/chunk-JC4R5WCC.js +2 -0
  29. package/dist/chunk-JC4R5WCC.js.map +1 -0
  30. package/dist/chunk-K5X37E3U.js +2 -0
  31. package/dist/chunk-K5X37E3U.js.map +1 -0
  32. package/dist/chunk-M6WBNHIT.cjs +2 -0
  33. package/dist/chunk-M6WBNHIT.cjs.map +1 -0
  34. package/dist/chunk-MFSQATNZ.cjs +2 -0
  35. package/dist/chunk-MFSQATNZ.cjs.map +1 -0
  36. package/dist/chunk-MFTWAFMG.cjs +2 -0
  37. package/dist/chunk-MFTWAFMG.cjs.map +1 -0
  38. package/dist/chunk-O5UPA33R.js +2 -0
  39. package/dist/chunk-O5UPA33R.js.map +1 -0
  40. package/dist/chunk-P2YWYBWG.cjs +2 -0
  41. package/dist/chunk-P2YWYBWG.cjs.map +1 -0
  42. package/dist/chunk-QKGTVKBU.cjs +2 -0
  43. package/dist/chunk-QKGTVKBU.cjs.map +1 -0
  44. package/dist/chunk-RD73EBSN.js +2 -0
  45. package/dist/chunk-RD73EBSN.js.map +1 -0
  46. package/dist/chunk-T2JRSWQU.cjs +2 -0
  47. package/dist/chunk-T2JRSWQU.cjs.map +1 -0
  48. package/dist/chunk-UQ3DSUWC.js +2 -0
  49. package/dist/chunk-UQ3DSUWC.js.map +1 -0
  50. package/dist/chunk-VZHG372Q.cjs +2 -0
  51. package/dist/chunk-VZHG372Q.cjs.map +1 -0
  52. package/dist/chunk-W2E5UIXT.js +2 -0
  53. package/dist/chunk-W2E5UIXT.js.map +1 -0
  54. package/dist/chunk-W5CLDRRE.cjs +1 -0
  55. package/dist/chunk-W5CLDRRE.cjs.map +1 -0
  56. package/dist/cli/index.cjs +22 -22
  57. package/dist/core/bindings.cjs +2 -0
  58. package/dist/core/bindings.cjs.map +1 -0
  59. package/dist/core/bindings.d.cts +81 -0
  60. package/dist/core/bindings.d.ts +81 -0
  61. package/dist/core/bindings.js +2 -0
  62. package/dist/core/bindings.js.map +1 -0
  63. package/dist/core/status.cjs +2 -0
  64. package/dist/core/status.cjs.map +1 -0
  65. package/dist/core/status.d.cts +44 -0
  66. package/dist/core/status.d.ts +44 -0
  67. package/dist/core/status.js +2 -0
  68. package/dist/core/status.js.map +1 -0
  69. package/dist/core/store.cjs +2 -0
  70. package/dist/core/store.cjs.map +1 -0
  71. package/dist/core/store.d.cts +84 -0
  72. package/dist/core/store.d.ts +84 -0
  73. package/dist/core/store.js +2 -0
  74. package/dist/core/store.js.map +1 -0
  75. package/dist/core/utils.cjs +2 -0
  76. package/dist/core/utils.cjs.map +1 -0
  77. package/dist/core/utils.d.cts +81 -0
  78. package/dist/core/utils.d.ts +81 -0
  79. package/dist/core/utils.js +2 -0
  80. package/dist/core/utils.js.map +1 -0
  81. package/dist/core.cjs +2 -0
  82. package/dist/core.cjs.map +1 -0
  83. package/dist/core.d.cts +14 -0
  84. package/dist/core.d.ts +14 -0
  85. package/dist/core.js +2 -0
  86. package/dist/core.js.map +1 -0
  87. package/dist/devtools/bridge.cjs +1 -1
  88. package/dist/devtools/bridge.cjs.map +1 -1
  89. package/dist/devtools/bridge.d.cts +5 -1
  90. package/dist/devtools/bridge.d.ts +5 -1
  91. package/dist/devtools/bridge.js +1 -1
  92. package/dist/devtools/bridge.js.map +1 -1
  93. package/dist/devtools/index.cjs +18 -18
  94. package/dist/devtools/index.cjs.map +1 -1
  95. package/dist/devtools/index.d.cts +27 -2
  96. package/dist/devtools/index.d.ts +27 -2
  97. package/dist/devtools/index.js +18 -18
  98. package/dist/devtools/index.js.map +1 -1
  99. package/dist/devtools/protocol.cjs +2 -0
  100. package/dist/devtools/protocol.cjs.map +1 -0
  101. package/dist/devtools/protocol.d.cts +54 -0
  102. package/dist/devtools/protocol.d.ts +54 -0
  103. package/dist/devtools/protocol.js +2 -0
  104. package/dist/devtools/protocol.js.map +1 -0
  105. package/dist/field-binding-B_OX3bjp.d.cts +25 -0
  106. package/dist/field-binding-MX6jVQbT.d.ts +25 -0
  107. package/dist/index.cjs +1 -1
  108. package/dist/index.cjs.map +1 -1
  109. package/dist/index.d.cts +9 -193
  110. package/dist/index.d.ts +9 -193
  111. package/dist/index.js +1 -1
  112. package/dist/meta-types-Bzmm21TP.d.cts +18 -0
  113. package/dist/meta-types-Bzmm21TP.d.ts +18 -0
  114. package/dist/react/index.cjs +1 -1
  115. package/dist/react/index.cjs.map +1 -1
  116. package/dist/react/index.d.cts +10 -7
  117. package/dist/react/index.d.ts +10 -7
  118. package/dist/react/index.js +1 -1
  119. package/dist/react/index.js.map +1 -1
  120. package/dist/react-native/index.cjs +1 -1
  121. package/dist/react-native/index.cjs.map +1 -1
  122. package/dist/react-native/index.d.cts +8 -5
  123. package/dist/react-native/index.d.ts +8 -5
  124. package/dist/react-native/index.js +1 -1
  125. package/dist/react-native/index.js.map +1 -1
  126. package/dist/resolvers/index.cjs +1 -1
  127. package/dist/resolvers/index.cjs.map +1 -1
  128. package/dist/resolvers/index.d.cts +2 -1
  129. package/dist/resolvers/index.d.ts +2 -1
  130. package/dist/resolvers/index.js +1 -1
  131. package/dist/resolvers/joi.d.cts +2 -1
  132. package/dist/resolvers/joi.d.ts +2 -1
  133. package/dist/resolvers/yup.d.cts +2 -1
  134. package/dist/resolvers/yup.d.ts +2 -1
  135. package/dist/resolvers/zod.d.cts +2 -1
  136. package/dist/resolvers/zod.d.ts +2 -1
  137. package/dist/store-api-types-D-ZHxzRy.d.cts +161 -0
  138. package/dist/store-api-types-DPi30jQF.d.ts +161 -0
  139. package/dist/{bus-B4zZmB9C.d.ts → types-CG5nYeRk.d.ts} +140 -41
  140. package/dist/{bus-BeAeZwWu.d.cts → types-D6LhF5GC.d.cts} +140 -41
  141. package/dist/{upload-EXnJLq8k.d.cts → upload-C2mpfhp1.d.cts} +1 -1
  142. package/dist/{upload-EXnJLq8k.d.ts → upload-C2mpfhp1.d.ts} +1 -1
  143. package/dist/{use-bit-persist-Dk3fUrds.d.ts → use-bit-persist-BTwy8kvA.d.ts} +14 -14
  144. package/dist/{use-bit-persist-D_gimC9A.d.cts → use-bit-persist-C2LHNTVv.d.cts} +14 -14
  145. package/dist/utils.cjs +2 -0
  146. package/dist/utils.cjs.map +1 -0
  147. package/dist/utils.d.cts +6 -0
  148. package/dist/utils.d.ts +6 -0
  149. package/dist/utils.js +2 -0
  150. package/dist/utils.js.map +1 -0
  151. package/dist/vue/index.cjs +1 -1
  152. package/dist/vue/index.cjs.map +1 -1
  153. package/dist/vue/index.d.cts +17 -18
  154. package/dist/vue/index.d.ts +17 -18
  155. package/dist/vue/index.js +1 -1
  156. package/dist/vue/index.js.map +1 -1
  157. package/package.json +48 -17
  158. package/dist/chunk-2CVKNPWX.js +0 -2
  159. package/dist/chunk-2CVKNPWX.js.map +0 -1
  160. package/dist/chunk-3EDD3V43.cjs +0 -2
  161. package/dist/chunk-3EDD3V43.cjs.map +0 -1
  162. package/dist/chunk-PX6WKENM.js +0 -2
  163. package/dist/chunk-PX6WKENM.js.map +0 -1
  164. package/dist/chunk-QWH2NBVB.js +0 -2
  165. package/dist/chunk-QWH2NBVB.js.map +0 -1
  166. package/dist/chunk-T3FR7D5V.js +0 -2
  167. package/dist/chunk-T3FR7D5V.js.map +0 -1
  168. package/dist/chunk-VQ7MK5VB.cjs +0 -2
  169. package/dist/chunk-VQ7MK5VB.cjs.map +0 -1
  170. package/dist/chunk-Y2ONHDRE.cjs +0 -2
  171. package/dist/chunk-Y2ONHDRE.cjs.map +0 -1
  172. package/dist/chunk-YCSWULEN.cjs +0 -2
  173. package/dist/chunk-YCSWULEN.cjs.map +0 -1
  174. package/dist/field-binding-BXw0Ku2c.d.cts +0 -12
  175. package/dist/field-binding-BXw0Ku2c.d.ts +0 -12
  176. package/dist/public-types-Cd9ai20P.d.cts +0 -97
  177. package/dist/public-types-DdZxD6Op.d.ts +0 -97
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,68 @@ 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
+ - Reproduce with:
108
+ - `npm run test:bench:compare`
109
+ - `npm run test:bench`
105
110
 
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 |
111
+ #### React benchmark methodology
111
112
 
112
- #### Vue Ecosystem
113
+ The comparison now uses a more realistic and stricter setup:
113
114
 
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 |
115
+ - same validation semantics across Bit-Form, React Hook Form, Formik, and TanStack Form
116
+ - validation is triggered once at the end of each measured cycle
117
+ - React commit stabilization before and after each sample
118
+ - larger load (`600` fields for bulk, `240` iterations for async burst)
119
119
 
120
- #### Angular Ecosystem
120
+ #### React benchmark (Bit-Form vs RHF/Formik/TanStack)
121
+
122
+ Latest local Node snapshot measured on **20/03/2026**:
123
+
124
+ | Scenario (lower is better) | Bit-Form | RHF | Formik | TanStack |
125
+ | :------------------------- | :--------- | :------- | :------- | :-------- |
126
+ | Bulk update (600 fields) | **5.83ms** | 556.11ms | 190.63ms | 1552.84ms |
127
+ | Async burst (240 updates) | **4.57ms** | 65.12ms | 22.12ms | 13.50ms |
128
+
129
+ Bit-Form ratio (`bit-form / competitor`) from the same snapshot:
121
130
 
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 |
131
+ - Bulk (median):
132
+ - vs RHF: **0.01**
133
+ - vs Formik: **0.03**
134
+ - vs TanStack: **0.00**
135
+ - Async burst (median):
136
+ - vs RHF: **0.07**
137
+ - vs Formik: **0.21**
138
+ - vs TanStack: **0.34**
127
139
 
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.
140
+ In practice, this means:
141
+
142
+ - Bit-Form remains substantially faster than RHF and Formik in bulk-update workloads.
143
+ - After the async-validation pipeline refactor, Bit-Form also moved ahead of TanStack in the async burst scenario on this measured environment.
144
+ - The benchmark is intentionally conservative, because it waits for React commit stabilization instead of stopping too early.
145
+
146
+ #### Internal performance baseline (Bit-Form)
147
+
148
+ Latest baseline from `quality/bench/perf.test.ts`:
149
+
150
+ - 300 field updates: ~20ms
151
+ - 1000 field updates in transaction + history: ~45ms
152
+ - 400 scoped subscribers: ~9ms
153
+ - Async validation burst: ~13ms
154
+ - Computed chain fanout (50): ~60ms
155
+ - Subscription notify fanout (200): ~15ms
156
+
157
+ > **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
158
 
130
159
  ### Why Bit-Form?
131
160
 
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.
161
+ 1. **Store-Level Masking:** Bit-Form applies masks in the store layer, which helps keep UI updates localized and predictable in complex forms.
162
+ 2. **Logic Portability:** You can share the same `BitStore` logic (validation, masks, conditional rules, history) across React, Vue, Angular, and React Native bindings.
163
+ 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
164
 
136
165
  ## 📦 Installation
137
166
 
@@ -189,6 +218,33 @@ The complete documentation is available in the `/docs` folder. Explore the guide
189
218
  - **[API Reference](./docs/api-reference/bit-store.md)**: Full `BitStore` class documentation.
190
219
  - **[Type Definitions](./docs/api-reference/types.md)**: Core TypeScript interfaces and types.
191
220
 
221
+ ## ⚠️ Breaking Changes (dev branch)
222
+
223
+ This branch currently allows breaking changes while architecture/performance work is in progress.
224
+
225
+ - **New explicit `@lehnihon/bit-form/core` subpath** for store/runtime contracts. The package root is now curated for app usage and no longer mirrors every core helper/export.
226
+ - **History default limit changed** from `15` to `50` (`history.limit`).
227
+ - **Selector subscriptions no longer rely on deep value diff inference** when no `paths` are provided internally; updates are now path-driven for predictable performance.
228
+ - **`subscribeSelector` now supports explicit modes**: `mode: "scoped"` (default, path-driven) and `mode: "tracked"` (auto-track with re-track on branch changes).
229
+ - **`resolveBitStoreForHooks` now uses symbol branding** instead of duck-typing checks.
230
+ - **SSR/Edge support improved** with injectable bus instances (`createBitBus`, `config.bus`, `initDevTools({ bus })`).
231
+ - **Field `asyncValidate` now defaults to `blur` trigger**. To keep validation while typing, set `validation.asyncValidateOn: "change"` explicitly.
232
+ - **Framework bindings now share internal binding-core helpers** for form meta and field-array orchestration, reducing adapter drift across React, Vue and Angular.
233
+ - **New dedicated metadata subscriptions**: `subscribePersistMeta`, `subscribeHistoryMeta` and `subscribeScopeStatus` reduce adapter reliance on generic selectors/tracked subscriptions.
234
+ - **React Native is now treated as a thin derivative of the React binding layer**, keeping only native-specific field adaptation.
235
+ - **Store capabilities are now first-class namespaces**: `read`, `observe`, `write`, `feature` are the primary contract and `slices` was removed in this major.
236
+ - **`BitStoreApi` now represents the namespaced contract only** (`read/observe/write/feature`). During dev migration, flat methods remain available in `BitStoreHooksApi` returned by `createBitStore` for internal/framework compatibility.
237
+ - **Capability registry indirection removed from runtime composition**: ports are wired directly in store runtime creation.
238
+ - **Devtools bus now stores a typed store port** (state/history/actions) instead of arbitrary store instance references.
239
+
240
+ ### Migration quick notes
241
+
242
+ - If you relied on broad selector notifications, migrate to `subscribeSelector` with `mode: "scoped"` + `paths`, or `mode: "tracked"` when auto-tracking is needed.
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 _chunkY2ONHDREcjs = require('../chunk-Y2ONHDRE.cjs');var _chunkYCSWULENcjs = require('../chunk-YCSWULEN.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:_chunkYCSWULENcjs.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=_chunkY2ONHDREcjs.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=_chunkY2ONHDREcjs.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=_chunkY2ONHDREcjs.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=_chunkY2ONHDREcjs.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=_chunkYCSWULENcjs.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();_chunkY2ONHDREcjs.e.call(void 0, m,a)||i.set(a)},{paths:_chunkY2ONHDREcjs.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();_chunkY2ONHDREcjs.e.call(void 0, P,d)||c.set(d)},S=e.subscribeSelector(p=>({errors:p.errors,isDirty:p.isDirty}),u,{paths:_chunkY2ONHDREcjs.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, _chunkYCSWULENcjs.e.call(void 0, e.getState().values,t),{equal:_chunkYCSWULENcjs.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');require('../chunk-W5CLDRRE.cjs');var _chunkVZHG372Qcjs = require('../chunk-VZHG372Q.cjs');var _chunkMFTWAFMGcjs = require('../chunk-MFTWAFMG.cjs');var _chunkBSGJ3T5Scjs = require('../chunk-BSGJ3T5S.cjs');var _chunkD7JQWF6Vcjs = require('../chunk-D7JQWF6V.cjs');var _chunkM6WBNHITcjs = require('../chunk-M6WBNHIT.cjs');var _chunkT2JRSWQUcjs = require('../chunk-T2JRSWQU.cjs');var _chunkPFPGASVZcjs = require('../chunk-PFPGASVZ.cjs');var _core = require('@angular/core');var g=new (0, _core.InjectionToken)("BIT_STORE");function nt(t){return{provide:g,useValue:_chunkVZHG372Qcjs.d.call(void 0, t)}}function u(){let t=_core.inject.call(void 0, g,{optional:!0});if(!t)throw new Error('BitForm: N\xE3o foi poss\xEDvel encontrar a BitStore. Certifique-se de que voc\xEA adicionou "provideBitStore(store)" nos providers do seu componente.');return t}function lt(){let t=u(),e=_core.inject.call(void 0, _core.DestroyRef),r=_core.signal.call(void 0, {isValid:!0,isDirty:!1,isSubmitting:!1}),o=_core.signal.call(void 0, null),s=_core.signal.call(void 0, null),i=_chunkMFTWAFMGcjs.c.call(void 0, t,S=>{r.set(S)});e.onDestroy(()=>i());let l=_core.computed.call(void 0, ()=>r().isValid),p=_core.computed.call(void 0, ()=>r().isSubmitting),d=_core.computed.call(void 0, ()=>r().isDirty),{controller:a,actions:n}=_chunkMFTWAFMGcjs.g.call(void 0, t,{clearSubmissionState:()=>{o.set(null),s.set(null)},setSubmissionResult:S=>{s.set(S)},setSubmissionError:S=>{o.set(S)}},{stopPropagation:!0});return{meta:{isValid:l,isDirty:d,isSubmitting:p,submitError:o.asReadonly(),lastResponse:s.asReadonly()},getValues:a.getValues,getErrors:a.getErrors,getTouched:a.getTouched,getDirtyValues:a.getDirtyValues,submit:a.submit,onSubmit:a.onSubmit,reset:a.reset,...n}}function E(t){let e=_core.inject.call(void 0, g),r=_core.signal.call(void 0, e.read.getFieldState(t)),o=e.observe.subscribeFieldState(t,f=>{r.set(f)});_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>{o(),_chunkMFTWAFMGcjs.j.call(void 0, e,t)});let s=_core.computed.call(void 0, ()=>r().value),i=_core.computed.call(void 0, ()=>_chunkM6WBNHITcjs.c.call(void 0, r())),l=_core.computed.call(void 0, ()=>i().error),p=_core.computed.call(void 0, ()=>i().touched),d=_core.computed.call(void 0, ()=>i().invalid),a=_core.computed.call(void 0, ()=>i().isDirty),n=_core.computed.call(void 0, ()=>i().isValidating),B=_core.computed.call(void 0, ()=>i().isHidden),S=_core.computed.call(void 0, ()=>i().isRequired),{fieldController:j}=_chunkMFTWAFMGcjs.h.call(void 0, e,t),T=_core.computed.call(void 0, ()=>j.displayValue(s())),F=f=>{j.setValue(f)},h=()=>j.setBlur(),x=_core.computed.call(void 0, ()=>i().hasError);return{value:s,displayValue:T,setValue:F,setBlur:h,update:f=>F(_chunkPFPGASVZcjs.a.call(void 0, f)?_nullishCoalesce(_optionalChain([f, 'access', _2 => _2.target, 'optionalAccess', _3 => _3.value]), () => (null)):f),meta:{error:l,touched:p,invalid:d,isDirty:a,isValidating:n,isHidden:B,isRequired:S,hasError:x}}}function St(t){let e=_core.inject.call(void 0, g),r=_core.inject.call(void 0, _core.DestroyRef),o=_chunkMFTWAFMGcjs.i.call(void 0, e,t),s=_core.signal.call(void 0, o.readItems()),i=e.observe.subscribePath(t,()=>{s.set(o.readItems())});return r.onDestroy(()=>{i(),_chunkMFTWAFMGcjs.k.call(void 0, e,`${t}.`)}),{fields:_core.computed.call(void 0, ()=>o.getFields(s())),length:_core.computed.call(void 0, ()=>s().length),append:o.append,prepend:o.prepend,remove:o.remove,insert:o.insert,swap:o.swap,move:o.move,replace:o.replace,clear:o.clear}}function gt(){let t=u(),e=_core.inject.call(void 0, _core.DestroyRef),r=_core.signal.call(void 0, _chunkD7JQWF6Vcjs.f.call(void 0, t)),o=_chunkD7JQWF6Vcjs.g.call(void 0, t,s=>{r.set(s)});return e.onDestroy(()=>o()),{canUndo:_core.computed.call(void 0, ()=>r().canUndo),canRedo:_core.computed.call(void 0, ()=>r().canRedo),historyIndex:_core.computed.call(void 0, ()=>r().historyIndex),historySize:_core.computed.call(void 0, ()=>r().historySize),undo:()=>t.feature.undo(),redo:()=>t.feature.redo()}}function Ft(t){let e=u(),r=e.read.getScopeStatus(t),o=_core.signal.call(void 0, r),s=_chunkBSGJ3T5Scjs.a.call(void 0, e,t,n=>{o.set(n)});try{_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>s())}catch (e2){}let i=async()=>{let n=await e.write.validate({scope:t}),B=e.read.getScopeErrors(t);return{valid:n,errors:B}},l=()=>e.read.getScopeErrors(t),p=_core.computed.call(void 0, ()=>!o().hasErrors),d=_core.computed.call(void 0, ()=>o().isDirty),a=_core.computed.call(void 0, ()=>o().errors);return{scopeName:t,status:o,errors:a,validate:i,getErrors:l,isValid:p,isDirty:d,unsubscribe:s}}function Tt(t){let e=u(),r=_core.signal.call(void 0, 0),o=_core.computed.call(void 0, ()=>_nullishCoalesce(t[r()], () => (""))),s=()=>_nullishCoalesce(t[r()], () => ("")),i=_core.signal.call(void 0, e.read.getScopeStatus(s())),l=()=>{let c=s(),y=e.read.getScopeStatus(c),R=i();_chunkD7JQWF6Vcjs.b.call(void 0, R,y)||i.set(y)},p=e.observe.subscribeScopeStatus(s(),l),d=()=>{p(),p=e.observe.subscribeScopeStatus(s(),l)};try{_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>p())}catch (e3){}let a=async()=>{let c=s(),y=await e.write.validate({scope:c}),R=e.read.getScopeErrors(c);return{valid:y,errors:R}},n=()=>e.read.getScopeErrors(s()),B=async()=>{let c=s(),y=e.read.getScopeFields(c);if(e.feature.hasValidationsInProgress(y))return!1;let R=await e.write.validate({scope:c});if(R){let v=Math.min(r()+1,t.length-1);r.set(v),i.set(e.read.getScopeStatus(_nullishCoalesce(t[v], () => ("")))),d()}else{let v=e.read.getScopeErrors(c),k=Object.keys(v);k.length>0&&e.write.markFieldsTouched(k)}return R},S=()=>{let c=Math.max(r()-1,0);r.set(c),i.set(e.read.getScopeStatus(_nullishCoalesce(t[c], () => ("")))),d()},j=c=>{let y=Math.max(0,Math.min(c-1,t.length-1));r.set(y),i.set(e.read.getScopeStatus(_nullishCoalesce(t[y], () => ("")))),d()},T=_core.computed.call(void 0, ()=>r()+1),F=_core.computed.call(void 0, ()=>r()===0),h=_core.computed.call(void 0, ()=>r()>=t.length-1),x=_core.computed.call(void 0, ()=>!i().hasErrors),U=_core.computed.call(void 0, ()=>i().isDirty),f=_core.computed.call(void 0, ()=>i().errors);return{step:T,stepIndex:r,scope:o,next:B,prev:S,goTo:j,isFirst:F,isLast:h,status:i,errors:f,isValid:x,isDirty:U,validate:a,getErrors:n}}function It(t){let e=u(),r=_core.inject.call(void 0, _core.DestroyRef),o=_core.signal.call(void 0, _chunkT2JRSWQUcjs.f.call(void 0, e.read.getState().values,t),{equal:_chunkT2JRSWQUcjs.c}),s=e.observe.subscribePath(t,i=>{o.set(i)});return r.onDestroy(s),o.asReadonly()}function wt(t,e,r){let o=_core.inject.call(void 0, g),s=E(t),i=null,l=_core.signal.call(void 0, !1),p={setLoading:n=>l.set(n),setError:(n,B)=>o.write.setError(n,B),setValue:n=>s.setValue(n),getUploadKey:()=>i,setUploadKey:n=>{i=n}},d=_chunkIV32WXCFcjs.a.call(void 0, t,e,p),a=_chunkIV32WXCFcjs.b.call(void 0, t,r,p);return{value:_core.computed.call(void 0, ()=>s.value()),setValue:s.setValue,error:_core.computed.call(void 0, ()=>s.meta.error()),isValidating:_core.computed.call(void 0, ()=>!!s.meta.isValidating()||l()),upload:d,remove:a}}function Mt(){let t=u(),e=_core.signal.call(void 0, t.read.getPersistMetadata()),r=_chunkMFTWAFMGcjs.f.call(void 0, t,l=>{e.set(l)});try{_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>r())}catch (e4){}return{restore:async()=>t.feature.restorePersisted(),save:async()=>{await t.feature.forceSave()},clear:async()=>{await t.feature.clearPersisted()},meta:{isSaving:_core.computed.call(void 0, ()=>e().isSaving),isRestoring:_core.computed.call(void 0, ()=>e().isRestoring),error:_core.computed.call(void 0, ()=>e().error)}}}exports.injectBitArray = St; exports.injectBitField = E; exports.injectBitForm = lt; exports.injectBitHistory = gt; exports.injectBitPersist = Mt; exports.injectBitScope = Ft; exports.injectBitSteps = Tt; exports.injectBitUpload = wt; exports.injectBitWatch = It; exports.provideBitStore = nt; exports.useBitStore = u;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/angular/index.cjs","../../src/angular/provider.ts","../../src/angular/inject-bit-form.ts","../../src/angular/inject-bit-field.ts","../../src/angular/inject-bit-array.ts"],"names":["BIT_STORE_TOKEN","InjectionToken","provideBitStore","store","resolveBitStoreForHooks","useBitStore","inject","injectBitForm","destroyRef","stateSignal","signal","submitError","lastResponse","sub","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","createFrameworkStoreAdapter","useBitStore","inject","injectBitForm","destroyRef","stateSignal","signal","submitError","lastResponse","sub","observeFormMetaSnapshot","nextMeta","isValid","computed","isSubmitting","isDirty","controller","actions","createFrameworkFormBinding","result","error","injectBitField","path","unsubscribe","nextState","cleanupRegisteredField","value","metaState","deriveFieldMeta","touched","invalid","isValidating","isHidden","isRequired","fieldController","createFrameworkMaskedFieldBinding","displayValue","setValue","val","setBlur","hasError","e","isBitFieldInputEventObject","injectBitArray","createArrayBindingController","valuesSig","unsub","cleanupRegisteredPrefix"],"mappings":"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","file":"/home/runner/work/bit-form/bit-form/dist/angular/index.cjs","sourcesContent":[null,"import { inject, InjectionToken, Provider } from \"@angular/core\";\nimport type { BitFrameworkStoreApi, BitStoreApi } from \"../core\";\nimport { createFrameworkStoreAdapter } from \"../core\";\n\nexport const BIT_STORE_TOKEN = new InjectionToken<BitFrameworkStoreApi<any>>(\n \"BIT_STORE\",\n);\n\nexport function provideBitStore<T extends object>(\n store: BitFrameworkStoreApi<T> | BitStoreApi<T>,\n): Provider {\n return {\n provide: BIT_STORE_TOKEN,\n useValue: createFrameworkStoreAdapter<T>(store),\n };\n}\n\nexport function useBitStore<T extends object>() {\n const store = inject(BIT_STORE_TOKEN, { optional: true });\n\n if (!store) {\n throw new Error(\n \"BitForm: Não foi possível encontrar a BitStore. \" +\n 'Certifique-se de que você adicionou \"provideBitStore(store)\" nos providers do seu componente.',\n );\n }\n\n return store as BitFrameworkStoreApi<T>;\n}\n","import { signal, computed, inject, DestroyRef } from \"@angular/core\";\nimport { useBitStore } from \"./provider\";\nimport { createFrameworkFormBinding, observeFormMetaSnapshot } from \"../core\";\nimport type { InjectBitFormResult } from \"./types\";\n\nexport function injectBitForm<T extends object>(): InjectBitFormResult<T> {\n const store = useBitStore<T>();\n const destroyRef = inject(DestroyRef);\n const stateSignal = signal({\n isValid: true,\n isDirty: false,\n isSubmitting: false,\n });\n const submitError = signal<Error | null>(null);\n const lastResponse = signal<unknown>(null);\n\n const sub = observeFormMetaSnapshot(store, (nextMeta) => {\n stateSignal.set(nextMeta);\n });\n\n destroyRef.onDestroy(() => sub());\n\n const isValid = computed(() => stateSignal().isValid);\n const isSubmitting = computed(() => stateSignal().isSubmitting);\n const isDirty = computed(() => stateSignal().isDirty);\n\n const { controller, actions } = createFrameworkFormBinding(\n store,\n {\n clearSubmissionState: () => {\n submitError.set(null);\n lastResponse.set(null);\n },\n setSubmissionResult: (result) => {\n lastResponse.set(result);\n },\n setSubmissionError: (error) => {\n submitError.set(error);\n },\n },\n { stopPropagation: true },\n );\n\n const meta = {\n isValid,\n isDirty,\n isSubmitting,\n submitError: submitError.asReadonly(),\n lastResponse: lastResponse.asReadonly(),\n };\n\n return {\n // Metadata (grouped)\n meta,\n // Getters\n getValues: controller.getValues,\n getErrors: controller.getErrors,\n getTouched: controller.getTouched,\n getDirtyValues: controller.getDirtyValues,\n // Main actions (frequent use - flat)\n submit: controller.submit,\n onSubmit: controller.onSubmit,\n reset: controller.reset,\n ...actions,\n };\n}\n","import { inject, DestroyRef, computed, signal } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport {\n BitPath,\n BitPathValue,\n cleanupRegisteredField,\n createFrameworkMaskedFieldBinding,\n deriveFieldMeta,\n isBitFieldInputEventObject,\n} from \"../core\";\nimport type {\n BitFieldInputEvent,\n InjectBitFieldResult,\n} from \"./types\";\n\nexport function injectBitField<\n TValue = any,\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P): InjectBitFieldResult<TForm, P> {\n const store = inject(BIT_STORE_TOKEN);\n\n const stateSignal = signal(store.read.getFieldState(path));\n\n const unsubscribe = store.observe.subscribeFieldState(path, (nextState) => {\n stateSignal.set(nextState);\n });\n\n inject(DestroyRef).onDestroy(() => {\n unsubscribe();\n cleanupRegisteredField(store, path as string);\n });\n\n const value = computed(() => stateSignal().value as BitPathValue<TForm, P>);\n const metaState = computed(() => deriveFieldMeta(stateSignal()));\n const error = computed(() => metaState().error);\n const touched = computed(() => metaState().touched);\n const invalid = computed(() => metaState().invalid);\n const isDirty = computed(() => metaState().isDirty);\n const isValidating = computed(() => metaState().isValidating);\n const isHidden = computed(() => metaState().isHidden);\n const isRequired = computed(() => metaState().isRequired);\n\n const { fieldController } = createFrameworkMaskedFieldBinding(store, path);\n\n const displayValue = computed(() => fieldController.displayValue(value()));\n\n const setValue = (\n val: BitPathValue<TForm, P> | string | number | null | undefined,\n ) => {\n fieldController.setValue(val);\n };\n\n const setBlur = () => fieldController.setBlur();\n\n const hasError = computed(() => metaState().hasError);\n\n const update = (e: BitFieldInputEvent) =>\n setValue(isBitFieldInputEventObject(e) ? (e.target?.value ?? null) : e);\n\n return {\n // Main handlers and values (flat)\n value,\n displayValue,\n setValue,\n setBlur,\n update,\n // Metadata (grouped)\n meta: {\n error,\n touched,\n invalid,\n isDirty,\n isValidating,\n isHidden,\n isRequired,\n hasError,\n },\n };\n}\n","import { DestroyRef, signal, computed, inject } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport {\n createArrayBindingController,\n BitArrayPath,\n BitPathValue,\n BitArrayItem,\n cleanupRegisteredPrefix,\n} from \"../core\";\n\nexport function injectBitArray<\n TForm extends object = any,\n P extends BitArrayPath<TForm> = BitArrayPath<TForm>,\n>(path: P) {\n const store = inject(BIT_STORE_TOKEN);\n const destroyRef = inject(DestroyRef);\n const controller = createArrayBindingController<TForm, P>(store, path);\n\n const valuesSig = signal<BitArrayItem<BitPathValue<TForm, P>>[]>(\n controller.readItems(),\n );\n\n const unsub = store.observe.subscribePath(path, () => {\n valuesSig.set(controller.readItems());\n });\n\n destroyRef.onDestroy(() => {\n unsub();\n cleanupRegisteredPrefix(store, `${path as string}.`);\n });\n\n return {\n fields: computed(() => controller.getFields(valuesSig())),\n length: computed(() => valuesSig().length),\n append: controller.append,\n prepend: controller.prepend,\n remove: controller.remove,\n insert: controller.insert,\n swap: controller.swap,\n move: controller.move,\n replace: controller.replace,\n clear: controller.clear,\n };\n}\n"]}
@@ -1,13 +1,16 @@
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-Cd9ai20P.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';
6
- import { B as BitUploadFn, a as BitDeleteUploadFn } from '../upload-EXnJLq8k.cjs';
3
+ import { b as BitFrameworkStoreApi, e as BitStoreApi } from '../store-api-types-D-ZHxzRy.cjs';
4
+ import '../bus-ZLQeq4Vr.cjs';
5
+ import { u as BitPath, v as BitPathValue, x as BitPersistMetadata, V as ValidateScopeResult, k as BitErrors, I as BitTouched, L as DeepPartial, c as BitArrayPath, b as BitArrayItem, S as ScopeStatus } from '../types-D6LhF5GC.cjs';
6
+ import { b as BitValidationOptions } from '../meta-types-Bzmm21TP.cjs';
7
+ import { B as BitFieldInputEvent } from '../field-binding-B_OX3bjp.cjs';
8
+ import { a as BitArrayBindingField } from '../array-controller-B5bfXV1W.cjs';
9
+ import { a as BitUploadFn, B as BitDeleteUploadFn } from '../upload-C2mpfhp1.cjs';
7
10
  import '../types-D8DgIUhJ.cjs';
8
11
 
9
- declare function provideBitStore<T extends object>(store: BitStoreApi<T>): Provider;
10
- declare function useBitStore<T extends object>(): BitStoreHooksApi<T>;
12
+ declare function provideBitStore<T extends object>(store: BitFrameworkStoreApi<T> | BitStoreApi<T>): Provider;
13
+ declare function useBitStore<T extends object>(): BitFrameworkStoreApi<T>;
11
14
 
12
15
  /**
13
16
  * Metadata describing the current state of a form field (Angular Signal).
@@ -104,9 +107,10 @@ interface InjectBitFormResult<T extends object = any> {
104
107
  onSubmit: (handler: (values: T, dirtyValues?: Partial<T>) => Promise<unknown>) => (event?: Event) => Promise<void>;
105
108
  reset: () => void;
106
109
  transaction: <TResult>(callback: () => TResult) => TResult;
107
- replaceValues: (values: T) => void;
108
- hydrate: (values: DeepPartial<T>) => void;
109
- rebase: (values: T) => void;
110
+ setValues: (values: T | DeepPartial<T>, options?: {
111
+ partial?: boolean;
112
+ rebase?: boolean;
113
+ }) => void;
110
114
  setError: (path: string, message: string | undefined) => void;
111
115
  setErrors: (errors: BitErrors<T>) => void;
112
116
  setServerErrors: (serverErrors: Record<string, string[] | string>) => void;
@@ -120,18 +124,14 @@ declare function injectBitForm<T extends object>(): InjectBitFormResult<T>;
120
124
  declare function injectBitField<TValue = any, TForm extends object = any, P extends BitPath<TForm> = BitPath<TForm>>(path: P): InjectBitFieldResult<TForm, P>;
121
125
 
122
126
  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
- }[]>;
127
+ fields: _angular_core.Signal<BitArrayBindingField<BitArrayItem<BitPathValue<TForm, P>>>[]>;
128
128
  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;
129
+ append: (value: BitArrayItem<BitPathValue<TForm, P>>) => void;
130
+ prepend: (value: BitArrayItem<BitPathValue<TForm, P>>) => void;
131
+ remove: (index: number) => void;
132
+ insert: (index: number, value: BitArrayItem<BitPathValue<TForm, P>>) => void;
133
+ swap: (indexA: number, indexB: number) => void;
134
+ move: (from: number, to: number) => void;
135
135
  replace: (items: BitArrayItem<BitPathValue<TForm, P>>[]) => void;
136
136
  clear: () => void;
137
137
  };
@@ -1,13 +1,16 @@
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-DdZxD6Op.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';
6
- import { B as BitUploadFn, a as BitDeleteUploadFn } from '../upload-EXnJLq8k.js';
3
+ import { b as BitFrameworkStoreApi, e as BitStoreApi } from '../store-api-types-DPi30jQF.js';
4
+ import '../bus-B2VEKrPI.js';
5
+ import { u as BitPath, v as BitPathValue, x as BitPersistMetadata, V as ValidateScopeResult, k as BitErrors, I as BitTouched, L as DeepPartial, c as BitArrayPath, b as BitArrayItem, S as ScopeStatus } from '../types-CG5nYeRk.js';
6
+ import { b as BitValidationOptions } from '../meta-types-Bzmm21TP.js';
7
+ import { B as BitFieldInputEvent } from '../field-binding-MX6jVQbT.js';
8
+ import { a as BitArrayBindingField } from '../array-controller-Cx-DMH7Y.js';
9
+ import { a as BitUploadFn, B as BitDeleteUploadFn } from '../upload-C2mpfhp1.js';
7
10
  import '../types-D8DgIUhJ.js';
8
11
 
9
- declare function provideBitStore<T extends object>(store: BitStoreApi<T>): Provider;
10
- declare function useBitStore<T extends object>(): BitStoreHooksApi<T>;
12
+ declare function provideBitStore<T extends object>(store: BitFrameworkStoreApi<T> | BitStoreApi<T>): Provider;
13
+ declare function useBitStore<T extends object>(): BitFrameworkStoreApi<T>;
11
14
 
12
15
  /**
13
16
  * Metadata describing the current state of a form field (Angular Signal).
@@ -104,9 +107,10 @@ interface InjectBitFormResult<T extends object = any> {
104
107
  onSubmit: (handler: (values: T, dirtyValues?: Partial<T>) => Promise<unknown>) => (event?: Event) => Promise<void>;
105
108
  reset: () => void;
106
109
  transaction: <TResult>(callback: () => TResult) => TResult;
107
- replaceValues: (values: T) => void;
108
- hydrate: (values: DeepPartial<T>) => void;
109
- rebase: (values: T) => void;
110
+ setValues: (values: T | DeepPartial<T>, options?: {
111
+ partial?: boolean;
112
+ rebase?: boolean;
113
+ }) => void;
110
114
  setError: (path: string, message: string | undefined) => void;
111
115
  setErrors: (errors: BitErrors<T>) => void;
112
116
  setServerErrors: (serverErrors: Record<string, string[] | string>) => void;
@@ -120,18 +124,14 @@ declare function injectBitForm<T extends object>(): InjectBitFormResult<T>;
120
124
  declare function injectBitField<TValue = any, TForm extends object = any, P extends BitPath<TForm> = BitPath<TForm>>(path: P): InjectBitFieldResult<TForm, P>;
121
125
 
122
126
  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
- }[]>;
127
+ fields: _angular_core.Signal<BitArrayBindingField<BitArrayItem<BitPathValue<TForm, P>>>[]>;
128
128
  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;
129
+ append: (value: BitArrayItem<BitPathValue<TForm, P>>) => void;
130
+ prepend: (value: BitArrayItem<BitPathValue<TForm, P>>) => void;
131
+ remove: (index: number) => void;
132
+ insert: (index: number, value: BitArrayItem<BitPathValue<TForm, P>>) => void;
133
+ swap: (indexA: number, indexB: number) => void;
134
+ move: (from: number, to: number) => void;
135
135
  replace: (items: BitArrayItem<BitPathValue<TForm, P>>[]) => void;
136
136
  clear: () => void;
137
137
  };
@@ -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-2CVKNPWX.js";import{d as _,e as T,k as O}from"../chunk-PX6WKENM.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 Z,b as N}from"../chunk-O5UPA33R.js";import"../chunk-5NA2TFPG.js";import{d as K}from"../chunk-UQ3DSUWC.js";import{c as C,f as W,g as z,h as $,i as G,j as J,k as Q}from"../chunk-E2NZR44P.js";import{a as X}from"../chunk-W2E5UIXT.js";import{b as O,f as _,g as q}from"../chunk-EQ55DKX2.js";import{c as Y}from"../chunk-63OJBMKK.js";import{c as M,f as H}from"../chunk-RD73EBSN.js";import{a as L}from"../chunk-3NUJVIAM.js";import{inject as st,InjectionToken as it}from"@angular/core";var g=new it("BIT_STORE");function nt(t){return{provide:g,useValue:K(t)}}function u(){let t=st(g,{optional:!0});if(!t)throw new Error('BitForm: N\xE3o foi poss\xEDvel encontrar a BitStore. Certifique-se de que voc\xEA adicionou "provideBitStore(store)" nos providers do seu componente.');return t}import{signal as V,computed as I,inject as at,DestroyRef as ct}from"@angular/core";function lt(){let t=u(),e=at(ct),r=V({isValid:!0,isDirty:!1,isSubmitting:!1}),o=V(null),s=V(null),i=C(t,S=>{r.set(S)});e.onDestroy(()=>i());let l=I(()=>r().isValid),p=I(()=>r().isSubmitting),d=I(()=>r().isDirty),{controller:a,actions:n}=z(t,{clearSubmissionState:()=>{o.set(null),s.set(null)},setSubmissionResult:S=>{s.set(S)},setSubmissionError:S=>{o.set(S)}},{stopPropagation:!0});return{meta:{isValid:l,isDirty:d,isSubmitting:p,submitError:o.asReadonly(),lastResponse:s.asReadonly()},getValues:a.getValues,getErrors:a.getErrors,getTouched:a.getTouched,getDirtyValues:a.getDirtyValues,submit:a.submit,onSubmit:a.onSubmit,reset:a.reset,...n}}import{inject as tt,DestroyRef as ut,computed as m,signal as pt}from"@angular/core";function E(t){let e=tt(g),r=pt(e.read.getFieldState(t)),o=e.observe.subscribeFieldState(t,f=>{r.set(f)});tt(ut).onDestroy(()=>{o(),J(e,t)});let s=m(()=>r().value),i=m(()=>Y(r())),l=m(()=>i().error),p=m(()=>i().touched),d=m(()=>i().invalid),a=m(()=>i().isDirty),n=m(()=>i().isValidating),B=m(()=>i().isHidden),S=m(()=>i().isRequired),{fieldController:j}=$(e,t),T=m(()=>j.displayValue(s())),F=f=>{j.setValue(f)},h=()=>j.setBlur(),x=m(()=>i().hasError);return{value:s,displayValue:T,setValue:F,setBlur:h,update:f=>F(L(f)?f.target?.value??null:f),meta:{error:l,touched:p,invalid:d,isDirty:a,isValidating:n,isHidden:B,isRequired:S,hasError:x}}}import{DestroyRef as dt,signal as mt,computed as et,inject as rt}from"@angular/core";function St(t){let e=rt(g),r=rt(dt),o=G(e,t),s=mt(o.readItems()),i=e.observe.subscribePath(t,()=>{s.set(o.readItems())});return r.onDestroy(()=>{i(),Q(e,`${t}.`)}),{fields:et(()=>o.getFields(s())),length:et(()=>s().length),append:o.append,prepend:o.prepend,remove:o.remove,insert:o.insert,swap:o.swap,move:o.move,replace:o.replace,clear:o.clear}}import{computed as P,DestroyRef as ft,inject as yt,signal as Bt}from"@angular/core";function gt(){let t=u(),e=yt(ft),r=Bt(_(t)),o=q(t,s=>{r.set(s)});return e.onDestroy(()=>o()),{canUndo:P(()=>r().canUndo),canRedo:P(()=>r().canRedo),historyIndex:P(()=>r().historyIndex),historySize:P(()=>r().historySize),undo:()=>t.feature.undo(),redo:()=>t.feature.redo()}}import{signal as bt,computed as D,DestroyRef as Rt,inject as jt}from"@angular/core";function Ft(t){let e=u(),r=e.read.getScopeStatus(t),o=bt(r),s=X(e,t,n=>{o.set(n)});try{jt(Rt).onDestroy(()=>s())}catch{}let i=async()=>{let n=await e.write.validate({scope:t}),B=e.read.getScopeErrors(t);return{valid:n,errors:B}},l=()=>e.read.getScopeErrors(t),p=D(()=>!o().hasErrors),d=D(()=>o().isDirty),a=D(()=>o().errors);return{scopeName:t,status:o,errors:a,validate:i,getErrors:l,isValid:p,isDirty:d,unsubscribe:s}}import{signal as ot,computed as b,DestroyRef as vt,inject as Pt}from"@angular/core";function Tt(t){let e=u(),r=ot(0),o=b(()=>t[r()]??""),s=()=>t[r()]??"",i=ot(e.read.getScopeStatus(s())),l=()=>{let c=s(),y=e.read.getScopeStatus(c),R=i();O(R,y)||i.set(y)},p=e.observe.subscribeScopeStatus(s(),l),d=()=>{p(),p=e.observe.subscribeScopeStatus(s(),l)};try{Pt(vt).onDestroy(()=>p())}catch{}let a=async()=>{let c=s(),y=await e.write.validate({scope:c}),R=e.read.getScopeErrors(c);return{valid:y,errors:R}},n=()=>e.read.getScopeErrors(s()),B=async()=>{let c=s(),y=e.read.getScopeFields(c);if(e.feature.hasValidationsInProgress(y))return!1;let R=await e.write.validate({scope:c});if(R){let v=Math.min(r()+1,t.length-1);r.set(v),i.set(e.read.getScopeStatus(t[v]??"")),d()}else{let v=e.read.getScopeErrors(c),k=Object.keys(v);k.length>0&&e.write.markFieldsTouched(k)}return R},S=()=>{let c=Math.max(r()-1,0);r.set(c),i.set(e.read.getScopeStatus(t[c]??"")),d()},j=c=>{let y=Math.max(0,Math.min(c-1,t.length-1));r.set(y),i.set(e.read.getScopeStatus(t[y]??"")),d()},T=b(()=>r()+1),F=b(()=>r()===0),h=b(()=>r()>=t.length-1),x=b(()=>!i().hasErrors),U=b(()=>i().isDirty),f=b(()=>i().errors);return{step:T,stepIndex:r,scope:o,next:B,prev:S,goTo:j,isFirst:F,isLast:h,status:i,errors:f,isValid:x,isDirty:U,validate:a,getErrors:n}}import{DestroyRef as ht,signal as xt,inject as Vt}from"@angular/core";function It(t){let e=u(),r=Vt(ht),o=xt(H(e.read.getState().values,t),{equal:M}),s=e.observe.subscribePath(t,i=>{o.set(i)});return r.onDestroy(s),o.asReadonly()}import{computed as w,inject as Et,signal as Dt}from"@angular/core";function wt(t,e,r){let o=Et(g),s=E(t),i=null,l=Dt(!1),p={setLoading:n=>l.set(n),setError:(n,B)=>o.write.setError(n,B),setValue:n=>s.setValue(n),getUploadKey:()=>i,setUploadKey:n=>{i=n}},d=Z(t,e,p),a=N(t,r,p);return{value:w(()=>s.value()),setValue:s.setValue,error:w(()=>s.meta.error()),isValidating:w(()=>!!s.meta.isValidating()||l()),upload:d,remove:a}}import{computed as A,inject as At,signal as Ut,DestroyRef as kt}from"@angular/core";function Mt(){let t=u(),e=Ut(t.read.getPersistMetadata()),r=W(t,l=>{e.set(l)});try{At(kt).onDestroy(()=>r())}catch{}return{restore:async()=>t.feature.restorePersisted(),save:async()=>{await t.feature.forceSave()},clear:async()=>{await t.feature.clearPersisted()},meta:{isSaving:A(()=>e().isSaving),isRestoring:A(()=>e().isRestoring),error:A(()=>e().error)}}}export{St as injectBitArray,E as injectBitField,lt as injectBitForm,gt as injectBitHistory,Mt as injectBitPersist,Ft as injectBitScope,Tt as injectBitSteps,wt as injectBitUpload,It as injectBitWatch,nt as provideBitStore,u as useBitStore};
2
2
  //# sourceMappingURL=index.js.map