@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.
- package/README.md +80 -24
- package/dist/angular/index.cjs +1 -1
- package/dist/angular/index.cjs.map +1 -1
- package/dist/angular/index.d.cts +18 -20
- package/dist/angular/index.d.ts +18 -20
- package/dist/angular/index.js +1 -1
- package/dist/angular/index.js.map +1 -1
- package/dist/array-controller-C1A5VKYd.d.cts +23 -0
- package/dist/array-controller-DtkmcnUr.d.ts +23 -0
- package/dist/{bus-B4zZmB9C.d.ts → bus-DgilLszS.d.ts} +83 -15
- package/dist/{bus-BeAeZwWu.d.cts → bus-rcUiufS7.d.cts} +83 -15
- package/dist/chunk-DIEE6LUO.js +2 -0
- package/dist/chunk-DIEE6LUO.js.map +1 -0
- package/dist/chunk-FUUQB4DV.cjs +2 -0
- package/dist/chunk-FUUQB4DV.cjs.map +1 -0
- package/dist/chunk-IV32WXCF.cjs +2 -0
- package/dist/chunk-IV32WXCF.cjs.map +1 -0
- package/dist/chunk-K5X37E3U.js +2 -0
- package/dist/chunk-K5X37E3U.js.map +1 -0
- package/dist/chunk-KWLLYQOL.cjs +2 -0
- package/dist/chunk-KWLLYQOL.cjs.map +1 -0
- package/dist/chunk-LIYZPSWM.js +2 -0
- package/dist/chunk-LIYZPSWM.js.map +1 -0
- package/dist/chunk-O5UPA33R.js +2 -0
- package/dist/chunk-O5UPA33R.js.map +1 -0
- package/dist/chunk-QAL6J5GQ.cjs +2 -0
- package/dist/chunk-QAL6J5GQ.cjs.map +1 -0
- package/dist/chunk-QKGTVKBU.cjs +2 -0
- package/dist/chunk-QKGTVKBU.cjs.map +1 -0
- package/dist/chunk-SA47B5OP.js +2 -0
- package/dist/chunk-SA47B5OP.js.map +1 -0
- package/dist/cli/index.cjs +22 -22
- package/dist/core.cjs +2 -0
- package/dist/core.cjs.map +1 -0
- package/dist/core.d.cts +122 -0
- package/dist/core.d.ts +122 -0
- package/dist/core.js +2 -0
- package/dist/core.js.map +1 -0
- package/dist/devtools/bridge.cjs +1 -1
- package/dist/devtools/bridge.cjs.map +1 -1
- package/dist/devtools/bridge.d.cts +4 -1
- package/dist/devtools/bridge.d.ts +4 -1
- package/dist/devtools/bridge.js +1 -1
- package/dist/devtools/bridge.js.map +1 -1
- package/dist/devtools/index.cjs +18 -18
- package/dist/devtools/index.cjs.map +1 -1
- package/dist/devtools/index.d.cts +26 -2
- package/dist/devtools/index.d.ts +26 -2
- package/dist/devtools/index.js +18 -18
- package/dist/devtools/index.js.map +1 -1
- package/dist/devtools/protocol.cjs +2 -0
- package/dist/devtools/protocol.cjs.map +1 -0
- package/dist/devtools/protocol.d.cts +54 -0
- package/dist/devtools/protocol.d.ts +54 -0
- package/dist/devtools/protocol.js +2 -0
- package/dist/devtools/protocol.js.map +1 -0
- package/dist/field-binding-Bi1g-D8X.d.ts +25 -0
- package/dist/field-binding-X5TkvfUt.d.cts +25 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +64 -150
- package/dist/index.d.ts +64 -150
- package/dist/index.js +1 -1
- package/dist/mask.d.cts +2 -2
- package/dist/mask.d.ts +2 -2
- package/dist/react/index.cjs +1 -1
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +8 -7
- package/dist/react/index.d.ts +8 -7
- package/dist/react/index.js +1 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react-native/index.cjs +1 -1
- package/dist/react-native/index.cjs.map +1 -1
- package/dist/react-native/index.d.cts +7 -6
- package/dist/react-native/index.d.ts +7 -6
- package/dist/react-native/index.js +1 -1
- package/dist/react-native/index.js.map +1 -1
- package/dist/resolvers/index.cjs +1 -1
- package/dist/resolvers/index.cjs.map +1 -1
- package/dist/resolvers/index.d.cts +2 -2
- package/dist/resolvers/index.d.ts +2 -2
- package/dist/resolvers/index.js +1 -1
- package/dist/resolvers/joi.d.cts +2 -2
- package/dist/resolvers/joi.d.ts +2 -2
- package/dist/resolvers/yup.d.cts +2 -2
- package/dist/resolvers/yup.d.ts +2 -2
- package/dist/resolvers/zod.d.cts +2 -2
- package/dist/resolvers/zod.d.ts +2 -2
- package/dist/store-api-types-9ipdute1.d.ts +187 -0
- package/dist/store-api-types-B6_bPoVI.d.cts +187 -0
- package/dist/{types-D8DgIUhJ.d.cts → types-CUXh7PqD.d.cts} +1 -1
- package/dist/{types-D8DgIUhJ.d.ts → types-CUXh7PqD.d.ts} +1 -1
- package/dist/{use-bit-persist-iPWLbD8l.d.ts → use-bit-persist-Bc06fmqZ.d.ts} +12 -14
- package/dist/{use-bit-persist-CIVN-oIi.d.cts → use-bit-persist-CIKFwtdM.d.cts} +12 -14
- package/dist/vue/index.cjs +1 -1
- package/dist/vue/index.cjs.map +1 -1
- package/dist/vue/index.d.cts +15 -18
- package/dist/vue/index.d.ts +15 -18
- package/dist/vue/index.js +1 -1
- package/dist/vue/index.js.map +1 -1
- package/package.json +20 -11
- package/dist/chunk-2FDEJYA5.js +0 -2
- package/dist/chunk-2FDEJYA5.js.map +0 -1
- package/dist/chunk-3CARTBEN.cjs +0 -2
- package/dist/chunk-3CARTBEN.cjs.map +0 -1
- package/dist/chunk-64KSP4TP.js +0 -2
- package/dist/chunk-64KSP4TP.js.map +0 -1
- package/dist/chunk-JIWR4KSZ.cjs +0 -2
- package/dist/chunk-JIWR4KSZ.cjs.map +0 -1
- package/dist/chunk-OZKLQRO6.cjs +0 -2
- package/dist/chunk-OZKLQRO6.cjs.map +0 -1
- package/dist/chunk-QWH2NBVB.js +0 -2
- package/dist/chunk-QWH2NBVB.js.map +0 -1
- package/dist/chunk-UMKOKAPD.js +0 -2
- package/dist/chunk-UMKOKAPD.js.map +0 -1
- package/dist/chunk-VQ7MK5VB.cjs +0 -2
- package/dist/chunk-VQ7MK5VB.cjs.map +0 -1
- package/dist/field-binding-BXw0Ku2c.d.cts +0 -12
- package/dist/field-binding-BXw0Ku2c.d.ts +0 -12
- package/dist/public-types-BQXaxmAE.d.cts +0 -94
- 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
|
|
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
|
-
|
|
102
|
+
Below are **measured results** from the quality benchmarks currently in this repository. These numbers are not estimated or extrapolated.
|
|
103
103
|
|
|
104
|
-
|
|
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
|
-
|
|
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
|
-
|
|
116
|
+
The comparison now uses a more realistic and stricter setup:
|
|
113
117
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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
|
-
####
|
|
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
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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
|
-
|
|
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. **
|
|
133
|
-
2. **Logic Portability:** You can share the
|
|
134
|
-
3. **Predictable State:** With
|
|
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.
|
package/dist/angular/index.cjs
CHANGED
|
@@ -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
|
|
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":"AAAA,0uBAAuD,yDAA6E,yDAAwD,yDAA0C,qCCArL,IAIpCA,CAAAA,CAAkB,IAAIC,yBAAAA,CACjC,WACF,CAAA,CAEO,SAASC,EAAAA,CACdC,CAAAA,CACU,CACV,MAAO,CAAE,OAAA,CAASH,CAAAA,CAAiB,QAAA,CAAUI,iCAAAA,CAA6B,CAAE,CAC9E,CAEO,SAASC,CAAAA,CAAAA,CAAgC,CAC9C,IAAMF,CAAAA,CAAQG,0BAAAA,CAAON,CAAiB,CAAE,QAAA,CAAU,CAAA,CAAK,CAAC,CAAA,CAExD,EAAA,CAAI,CAACG,CAAAA,CACH,MAAM,IAAI,KAAA,CACR,wJAEF,CAAA,CAGF,OAAOA,CACT,CCzBA,SAQgBI,EAAAA,CAAAA,CAA0D,CACxE,IAAMJ,CAAAA,CAAQE,CAAAA,CAAe,CAAA,CACvBG,CAAAA,CAAaF,0BAAAA,gBAAiB,CAAA,CAC9BG,CAAAA,CAAcC,0BAAAA,CAClB,OAAA,CAASP,CAAAA,CAAM,QAAA,CAAS,CAAA,CAAE,OAAA,CAC1B,YAAA,CAAcA,CAAAA,CAAM,QAAA,CAAS,CAAA,CAAE,YAAA,CAC/B,OAAA,CAASA,CAAAA,CAAM,QAAA,CAAS,CAAA,CAAE,OAC5B,CAAC,CAAA,CACKQ,CAAAA,CAAcD,0BAAAA,IAAyB,CAAA,CACvCE,CAAAA,CAAeF,0BAAAA,IAAoB,CAAA,CAEnCG,CAAAA,CAAMV,CAAAA,CAAM,iBAAA,CACfW,CAAAA,EAAAA,CAAW,CACV,OAAA,CAASA,CAAAA,CAAM,OAAA,CACf,YAAA,CAAcA,CAAAA,CAAM,YAAA,CACpB,OAAA,CAASA,CAAAA,CAAM,OACjB,CAAA,CAAA,CACCC,CAAAA,EAAc,CACbN,CAAAA,CAAY,GAAA,CAAIM,CAAS,CAC3B,CAAA,CACA,CAAE,KAAA,CAAO,CAAC,SAAA,CAAW,cAAA,CAAgB,SAAS,CAAE,CAClD,CAAA,CAEAP,CAAAA,CAAW,SAAA,CAAU,CAAA,CAAA,EAAMK,CAAAA,CAAI,CAAC,CAAA,CAEhC,IAAMG,CAAAA,CAAUC,4BAAAA,CAAS,CAAA,EAAMR,CAAAA,CAAY,CAAA,CAAE,OAAO,CAAA,CAC9CS,CAAAA,CAAeD,4BAAAA,CAAS,CAAA,EAAMR,CAAAA,CAAY,CAAA,CAAE,YAAY,CAAA,CACxDU,CAAAA,CAAUF,4BAAAA,CAAS,CAAA,EAAMR,CAAAA,CAAY,CAAA,CAAE,OAAO,CAAA,CAE9CW,CAAAA,CAAaC,iCAAAA,CACjBlB,CACA,CACE,oBAAA,CAAsB,CAAA,CAAA,EAAM,CAC1BQ,CAAAA,CAAY,GAAA,CAAI,IAAI,CAAA,CACpBC,CAAAA,CAAa,GAAA,CAAI,IAAI,CACvB,CAAA,CACA,mBAAA,CAAsBU,CAAAA,EAAW,CAC/BV,CAAAA,CAAa,GAAA,CAAIU,CAAM,CACzB,CAAA,CACA,kBAAA,CAAqBC,CAAAA,EAAU,CAC7BZ,CAAAA,CAAY,GAAA,CAAIY,CAAK,CACvB,CACF,CAAA,CACA,CAAE,eAAA,CAAiB,CAAA,CAAK,CAC1B,CAAA,CACMC,CAAAA,CAAUC,iCAAAA,CAA4B,CAAA,CAU5C,MAAO,CAEL,IAAA,CAVW,CACX,OAAA,CAAAT,CAAAA,CACA,OAAA,CAAAG,CAAAA,CACA,YAAA,CAAAD,CAAAA,CACA,WAAA,CAAaP,CAAAA,CAAY,UAAA,CAAW,CAAA,CACpC,YAAA,CAAcC,CAAAA,CAAa,UAAA,CAAW,CACxC,CAAA,CAME,SAAA,CAAWQ,CAAAA,CAAW,SAAA,CACtB,SAAA,CAAWA,CAAAA,CAAW,SAAA,CACtB,UAAA,CAAYA,CAAAA,CAAW,UAAA,CACvB,cAAA,CAAgBA,CAAAA,CAAW,cAAA,CAE3B,MAAA,CAAQA,CAAAA,CAAW,MAAA,CACnB,QAAA,CAAUA,CAAAA,CAAW,QAAA,CACrB,KAAA,CAAOA,CAAAA,CAAW,KAAA,CAClB,GAAGI,CACL,CACF,CC7EA,SAcgBE,CAAAA,CAIdC,CAAAA,CAAyC,CACzC,IAAMxB,CAAAA,CAAQG,0BAAAA,CAAsB,CAAA,CAE9BG,CAAAA,CAAcC,0BAAAA,CAAOP,CAAM,aAAA,CAAcwB,CAAI,CAAC,CAAA,CAE9CC,CAAAA,CAAcC,iCAAAA,CAAoB1B,CAAOwB,CAAAA,CAAOZ,CAAAA,EAAc,CAClEN,CAAAA,CAAY,GAAA,CAAIM,CAAS,CAC3B,CAAC,CAAA,CAEDT,0BAAAA,gBAAiB,CAAA,CAAE,SAAA,CAAU,CAAA,CAAA,EAAM,CACjCsB,CAAAA,CAAY,CAAA,CACRzB,CAAAA,CAAM,eAAA,EACRA,CAAAA,CAAM,eAAA,CAAgBwB,CAAc,CAExC,CAAC,CAAA,CAED,IAAMG,CAAAA,CAAQb,4BAAAA,CAAS,CAAA,EAAMR,CAAAA,CAAY,CAAA,CAAE,KAA+B,CAAA,CACpEsB,CAAAA,CAAWd,4BAAAA,CAAS,CAAA,EAAMR,CAAAA,CAAY,CAAA,CAAE,KAAK,CAAA,CAC7CuB,CAAAA,CAAUf,4BAAAA,CAAS,CAAA,EAAMR,CAAAA,CAAY,CAAA,CAAE,OAAO,CAAA,CAC9Cc,CAAAA,CAAQN,4BAAAA,CAAS,CAAA,EAAOe,CAAAA,CAAQ,CAAA,CAAID,CAAAA,CAAS,CAAA,CAAI,KAAA,CAAU,CAAA,CAE3DZ,CAAAA,CAAUF,4BAAAA,CAAS,CAAA,EAAMR,CAAAA,CAAY,CAAA,CAAE,OAAO,CAAA,CAE9CwB,CAAAA,CAAehB,4BAAAA,CAAS,CAAA,EAAMR,CAAAA,CAAY,CAAA,CAAE,YAAY,CAAA,CAExDyB,CAAAA,CAAWjB,4BAAAA,CAAS,CAAA,EAAMR,CAAAA,CAAY,CAAA,CAAE,QAAQ,CAAA,CAEhD0B,CAAAA,CAAalB,4BAAAA,CAAS,CAAA,EAAMR,CAAAA,CAAY,CAAA,CAAE,UAAU,CAAA,CAEpD2B,CAAAA,CAAUnB,4BAAAA,CAAS,CAAA,EAAMe,CAAAA,CAAQ,CAAA,EAAK,CAAC,CAACD,CAAAA,CAAS,CAAC,CAAA,CAElDM,CAAAA,CAAelC,CAAAA,CAAM,WAAA,CAAYwB,CAAc,CAAA,CAC/CW,CAAAA,CAAkBC,iCAAAA,CACtBpC,CACAwB,CAAAA,CACAU,CACF,CAAA,CAEMG,CAAAA,CAAevB,4BAAAA,CAAS,CAAA,EAAMqB,CAAAA,CAAgB,YAAA,CAAaR,CAAAA,CAAM,CAAC,CAAC,CAAA,CAEnEW,CAAAA,CACJC,CAAAA,EACG,CACHJ,CAAAA,CAAgB,QAAA,CAASI,CAAG,CAC9B,CAAA,CAEMC,CAAAA,CAAU,CAAA,CAAA,EAAML,CAAAA,CAAgB,OAAA,CAAQ,CAAA,CAExCM,CAAAA,CAAW3B,4BAAAA,CAAS,CAAA,EAAM,CAAC,CAACc,CAAAA,CAAS,CAAC,CAAA,CAK5C,MAAO,CAEL,KAAA,CAAAD,CAAAA,CACA,YAAA,CAAAU,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,OAAA,CAAAE,CAAAA,CACA,MAAA,CATcE,CAAAA,EACdJ,CAAAA,CAASK,iCAAAA,CAA4B,CAAA,kCAAKD,CAAAA,qBAAE,MAAA,6BAAQ,OAAA,SAAS,MAAA,CAAQA,CAAC,CAAA,CAUtE,IAAA,CAAM,CACJ,KAAA,CAAAtB,CAAAA,CACA,OAAA,CAAAS,CAAAA,CACA,OAAA,CAAAI,CAAAA,CACA,OAAA,CAAAjB,CAAAA,CACA,YAAA,CAAAc,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,QAAA,CAAAS,CACF,CACF,CACF,CC1FA,SAUgBG,EAAAA,CAGdpB,CAAAA,CAAS,CACT,IAAMxB,CAAAA,CAAQG,0BAAAA,CAAsB,CAAA,CAC9BE,CAAAA,CAAaF,0BAAAA,gBAAiB,CAAA,CAE9B0C,CAAAA,CAAYC,CAAAA,EAChB9C,CAAAA,CAAM,MAAA,CAAO,SAAA,CAAU,CACrB,KAAA,CAAO,OAAA,CACP,IAAA,CAAMwB,CAAAA,CACN,KAAA,CAAAsB,CACF,CAAC,CAAA,CAYGC,CAAAA,CAAYxC,0BAAAA,CAVH,CAAA,CAAA,EAAM,CACnB,IAAMgC,CAAAA,CAAMS,iCAAAA,CACVhD,CAAM,QAAA,CAAS,CAAA,CAAE,MAAA,CACjBwB,CACF,CAAA,CACA,OAAO,KAAA,CAAM,OAAA,CAAQe,CAAG,CAAA,CACnBA,CAAAA,CACD,CAAC,CACP,CAAA,CAAA,CAEwE,CAAC,CAAA,CACnEU,CAAAA,CAAS1C,0BAAAA,CACbwC,CAAU,CAAA,CAAE,GAAA,CAAI,CAACG,CAAAA,CAAGJ,CAAAA,CAAAA,EAAUD,CAAAA,CAASC,CAAK,CAAC,CAC/C,CAAA,CAEMK,CAAAA,CAAQnD,CAAAA,CAAM,aAAA,CAAcwB,CAAAA,CAAOG,CAAAA,EAAU,CACjD,IAAMyB,CAAAA,CAAO,KAAA,CAAM,OAAA,CAAQzB,CAAK,CAAA,CAC3BA,CAAAA,CACD,CAAC,CAAA,CACC0B,CAAAA,CAAMC,6BAAAA,CAAgB,CAAA,CAC5BP,CAAAA,CAAU,GAAA,CAAIK,CAAI,CAAA,CAEdA,CAAAA,CAAK,MAAA,GAAWC,CAAAA,CAAI,MAAA,EAAA,CAClBD,CAAAA,CAAK,MAAA,CAASC,CAAAA,CAAI,MAAA,CACpBJ,CAAAA,CAAO,GAAA,CAAI,CACT,GAAGI,CAAAA,CACH,GAAG,KAAA,CAAM,IAAA,CAAK,CAAE,MAAA,CAAQD,CAAAA,CAAK,MAAA,CAASC,CAAAA,CAAI,MAAO,CAAA,CAAG,CAACH,CAAAA,CAAGK,CAAAA,CAAAA,EACtDV,CAAAA,CAASQ,CAAAA,CAAI,MAAA,CAASE,CAAC,CACzB,CACF,CAAC,CAAA,CAEDN,CAAAA,CAAO,GAAA,CAAII,CAAAA,CAAI,KAAA,CAAM,CAAA,CAAGD,CAAAA,CAAK,MAAM,CAAC,CAAA,CAG1C,CAAC,CAAA,CAED,OAAA/C,CAAAA,CAAW,SAAA,CAAU,CAAA,CAAA,EAAM,CACzB8C,CAAAA,CAAM,CAAA,CACFnD,CAAAA,CAAM,gBAAA,EAAkBA,CAAAA,CAAM,gBAAA,CAAiB,CAAA,EAAA","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"]}
|
package/dist/angular/index.d.cts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
2
|
import { Provider, Signal } from '@angular/core';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { B as BitFieldInputEvent } from '../field-binding-
|
|
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-
|
|
8
|
+
import '../types-CUXh7PqD.cjs';
|
|
8
9
|
|
|
9
|
-
declare function provideBitStore<T extends object>(store:
|
|
10
|
-
declare function useBitStore<T extends object>():
|
|
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
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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: (
|
|
130
|
-
prepend: (
|
|
131
|
-
remove: (
|
|
132
|
-
insert: (index: number,
|
|
133
|
-
swap: (
|
|
134
|
-
move: (
|
|
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
|
};
|
package/dist/angular/index.d.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
2
|
import { Provider, Signal } from '@angular/core';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { B as BitFieldInputEvent } from '../field-binding-
|
|
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-
|
|
8
|
+
import '../types-CUXh7PqD.js';
|
|
8
9
|
|
|
9
|
-
declare function provideBitStore<T extends object>(store:
|
|
10
|
-
declare function useBitStore<T extends object>():
|
|
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
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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: (
|
|
130
|
-
prepend: (
|
|
131
|
-
remove: (
|
|
132
|
-
insert: (index: number,
|
|
133
|
-
swap: (
|
|
134
|
-
move: (
|
|
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
|
};
|
package/dist/angular/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as
|
|
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
|