@lehnihon/bit-form 2.2.9 → 2.2.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -0
- package/dist/angular/index.cjs +1 -1
- package/dist/angular/index.d.cts +19 -52
- package/dist/angular/index.d.ts +19 -52
- package/dist/angular/index.js +1 -1
- package/dist/angular/index.js.map +1 -1
- package/dist/bus-BFOBGmd9.d.ts +41 -0
- package/dist/bus-DzTqgkZ4.d.cts +41 -0
- package/dist/chunk-23IYGRVG.js +2 -0
- package/dist/chunk-23IYGRVG.js.map +1 -0
- package/dist/chunk-ACEJG5FJ.cjs +2 -0
- package/dist/chunk-ACEJG5FJ.cjs.map +1 -0
- package/dist/chunk-DRLFDQ5Z.js +2 -0
- package/dist/chunk-DRLFDQ5Z.js.map +1 -0
- package/dist/{chunk-N4HCGMMM.js → chunk-HDZV334O.js} +2 -2
- package/dist/{chunk-GGZPA7AO.cjs → chunk-IQVY4MNY.cjs} +2 -2
- package/dist/{chunk-GGZPA7AO.cjs.map → chunk-IQVY4MNY.cjs.map} +1 -1
- package/dist/chunk-KYX4G4YS.cjs +2 -0
- package/dist/chunk-KYX4G4YS.cjs.map +1 -0
- package/dist/chunk-NYKX3QED.js +2 -0
- package/dist/chunk-NYKX3QED.js.map +1 -0
- package/dist/chunk-PA43XYOW.cjs +2 -0
- package/dist/{chunk-IV32WXCF.cjs.map → chunk-PA43XYOW.cjs.map} +1 -1
- package/dist/chunk-PG7ZH32Z.js +2 -0
- package/dist/chunk-PG7ZH32Z.js.map +1 -0
- package/dist/{chunk-2QLQPMCZ.js → chunk-RMD37PXW.js} +2 -2
- package/dist/{chunk-OLQVH24Z.cjs → chunk-UFJJOXVB.cjs} +2 -2
- package/dist/{chunk-OLQVH24Z.cjs.map → chunk-UFJJOXVB.cjs.map} +1 -1
- package/dist/chunk-VAP2C5QV.cjs +2 -0
- package/dist/{chunk-J5ALITQW.cjs.map → chunk-VAP2C5QV.cjs.map} +1 -1
- package/dist/chunk-W56UISAF.cjs +2 -0
- package/dist/chunk-W56UISAF.cjs.map +1 -0
- package/dist/chunk-YWBRZGEI.js +2 -0
- package/dist/chunk-YWBRZGEI.js.map +1 -0
- package/dist/cli/index.cjs +5 -5
- package/dist/{types-SOg9xEce.d.cts → config-types-5eR82k2V.d.cts} +40 -169
- package/dist/{types-CRCP4Pgq.d.ts → config-types-D9n-rQLk.d.ts} +40 -169
- package/dist/core/bindings.cjs +1 -1
- package/dist/core/bindings.d.cts +15 -11
- package/dist/core/bindings.d.ts +15 -11
- package/dist/core/bindings.js +1 -1
- package/dist/core/status.d.cts +3 -4
- package/dist/core/status.d.ts +3 -4
- package/dist/core/store.cjs +1 -1
- package/dist/core/store.d.cts +8 -6
- package/dist/core/store.d.ts +8 -6
- package/dist/core/store.js +1 -1
- package/dist/core/utils.cjs +1 -1
- package/dist/core/utils.d.cts +2 -3
- package/dist/core/utils.d.ts +2 -3
- package/dist/core/utils.js +1 -1
- package/dist/core.cjs +1 -1
- package/dist/core.d.cts +10 -9
- package/dist/core.d.ts +10 -9
- package/dist/core.js +1 -1
- package/dist/devtools/bridge.cjs +1 -1
- package/dist/devtools/bridge.d.cts +2 -3
- package/dist/devtools/bridge.d.ts +2 -3
- package/dist/devtools/bridge.js +1 -1
- package/dist/devtools/index.cjs +2 -2
- package/dist/devtools/index.d.cts +5 -3
- package/dist/devtools/index.d.ts +5 -3
- package/dist/devtools/index.js +1 -1
- package/dist/{field-binding-MX6jVQbT.d.ts → field-binding-Bi1g-D8X.d.ts} +1 -1
- package/dist/{field-binding-B_OX3bjp.d.cts → field-binding-X5TkvfUt.d.cts} +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +7 -5
- package/dist/index.d.ts +7 -5
- package/dist/index.js +1 -1
- package/dist/mask.d.cts +2 -2
- package/dist/mask.d.ts +2 -2
- package/dist/meta-types-BC1VLABk.d.cts +28 -0
- package/dist/meta-types-BC1VLABk.d.ts +28 -0
- package/dist/react/index.cjs +1 -1
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +12 -12
- package/dist/react/index.d.ts +12 -12
- 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.d.cts +10 -9
- package/dist/react-native/index.d.ts +10 -9
- package/dist/react-native/index.js +1 -1
- package/dist/resolvers/index.d.cts +2 -3
- package/dist/resolvers/index.d.ts +2 -3
- package/dist/resolvers/joi.d.cts +2 -3
- package/dist/resolvers/joi.d.ts +2 -3
- package/dist/resolvers/yup.d.cts +2 -3
- package/dist/resolvers/yup.d.ts +2 -3
- package/dist/resolvers/zod.d.cts +2 -3
- package/dist/resolvers/zod.d.ts +2 -3
- package/dist/runtime-types-D1SRZr-n.d.cts +43 -0
- package/dist/runtime-types-D1SRZr-n.d.ts +43 -0
- package/dist/state-types-8bUndWfg.d.cts +42 -0
- package/dist/state-types-8bUndWfg.d.ts +42 -0
- package/dist/{store-api-types-Bm3EAqR_.d.cts → store-api-types-Bozwlwyb.d.ts} +9 -5
- package/dist/{store-api-types-DfTFy2h4.d.ts → store-api-types-DSgYwMS3.d.cts} +9 -5
- 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/upload-C4JqIaU2.d.cts +89 -0
- package/dist/upload-ao6skK9K.d.ts +89 -0
- package/dist/{use-bit-persist-BDMZmxBh.d.ts → use-bit-persist-Bd1H2fge.d.ts} +12 -45
- package/dist/{use-bit-persist-CBTZIMc5.d.cts → use-bit-persist-DDxV21AN.d.cts} +12 -45
- package/dist/utils.cjs +1 -1
- package/dist/utils.js +1 -1
- package/dist/vue/index.cjs +1 -1
- package/dist/vue/index.d.cts +18 -51
- package/dist/vue/index.d.ts +18 -51
- package/dist/vue/index.js +1 -1
- package/dist/vue/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/array-controller-C61ByyG6.d.ts +0 -23
- package/dist/array-controller-CtlqjA0e.d.cts +0 -23
- package/dist/bus-BKuMV3E7.d.ts +0 -19
- package/dist/bus-WOHGxuVy.d.cts +0 -19
- package/dist/chunk-6LNXTSZ6.cjs +0 -2
- package/dist/chunk-6LNXTSZ6.cjs.map +0 -1
- package/dist/chunk-IV32WXCF.cjs +0 -2
- package/dist/chunk-J5ALITQW.cjs +0 -2
- package/dist/chunk-J5GQLEVA.js +0 -2
- package/dist/chunk-J5GQLEVA.js.map +0 -1
- package/dist/chunk-KDHPLXZF.cjs +0 -2
- package/dist/chunk-KDHPLXZF.cjs.map +0 -1
- package/dist/chunk-O5UPA33R.js +0 -2
- package/dist/chunk-O5UPA33R.js.map +0 -1
- package/dist/chunk-QX2IVNMK.js +0 -2
- package/dist/chunk-QX2IVNMK.js.map +0 -1
- package/dist/chunk-UARLAXZX.js +0 -2
- package/dist/chunk-UARLAXZX.js.map +0 -1
- package/dist/chunk-X5UCRGYJ.cjs +0 -2
- package/dist/chunk-X5UCRGYJ.cjs.map +0 -1
- package/dist/chunk-Y3XVQGCU.js +0 -2
- package/dist/chunk-Y3XVQGCU.js.map +0 -1
- package/dist/meta-types-Bzmm21TP.d.cts +0 -18
- package/dist/meta-types-Bzmm21TP.d.ts +0 -18
- package/dist/upload-C2mpfhp1.d.cts +0 -17
- package/dist/upload-C2mpfhp1.d.ts +0 -17
- /package/dist/{chunk-N4HCGMMM.js.map → chunk-HDZV334O.js.map} +0 -0
- /package/dist/{chunk-2QLQPMCZ.js.map → chunk-RMD37PXW.js.map} +0 -0
package/README.md
CHANGED
|
@@ -172,6 +172,8 @@ npm install @lehnihon/bit-form
|
|
|
172
172
|
|
|
173
173
|
The complete documentation is available in the `/docs` folder. Explore the guides below to get started:
|
|
174
174
|
|
|
175
|
+
- **[Documentation Hub](./docs/README.md)**: Start here to navigate by goal (onboarding, troubleshooting, API).
|
|
176
|
+
|
|
175
177
|
### 🚀 Getting Started
|
|
176
178
|
|
|
177
179
|
- **[Introduction & Installation](./docs/01-getting-started.md)**: Overview and basic setup.
|
|
@@ -202,8 +204,22 @@ The complete documentation is available in the `/docs` folder. Explore the guide
|
|
|
202
204
|
### 📖 Guides & Examples
|
|
203
205
|
|
|
204
206
|
- **[When to Use What](./docs/guides/when-to-use-what.md)**: Quick reference for resolver vs asyncValidate vs setServerErrors, computed vs transform, and conditional fields.
|
|
207
|
+
- **[Troubleshooting](./docs/guides/troubleshooting.md)**: Debug common form setup, validation, and devtools issues.
|
|
208
|
+
- **[Migration Guide](./docs/guides/migration.md)**: Plan upgrades and breaking-change checks safely.
|
|
209
|
+
- **[Testing Guide](./docs/guides/testing.md)**: Unit, integration, and e2e testing strategies.
|
|
210
|
+
- **[Performance Guide](./docs/guides/performance.md)**: Optimize large forms and subscription patterns.
|
|
211
|
+
- **[Accessibility Guide](./docs/guides/accessibility.md)**: Build accessible form experiences across frameworks.
|
|
212
|
+
- **[Compatibility Matrix](./docs/guides/compatibility-matrix.md)**: Runtime and framework target baseline.
|
|
213
|
+
- **[Release Gates](./docs/guides/release-gates.md)**: Pre-release quality and docs synchronization checks.
|
|
214
|
+
- **[FAQ](./docs/guides/faq.md)**: Quick answers for common implementation questions.
|
|
215
|
+
- **[Example Template](./docs/guides/example-template.md)**: Editorial template for consistent, copy-paste-ready examples.
|
|
205
216
|
- **[Complete Form Example](./docs/examples/complete-form-example.md)**: End-to-end example with masks, asyncValidate, conditional logic, scopes, history, and DevTools.
|
|
217
|
+
- **[Conditional + Server Validation Example](./docs/examples/conditional-server-validation-example.md)**: Dynamic fields with 422/server mapping workflow.
|
|
218
|
+
- **[Multi-Step + Draft Example](./docs/examples/multi-step-draft-example.md)**: Scope-based wizard with persistence controls.
|
|
219
|
+
- **[Array Reorder Example](./docs/examples/array-reorder-example.md)**: Stable keys and automatic error reallocation during reorder/remove.
|
|
220
|
+
- **[Plugin + DevTools Example](./docs/examples/plugin-devtools-lifecycle-example.md)**: Lifecycle audit logs with local timeline inspection.
|
|
206
221
|
- **[Upload Integration Example](./docs/examples/upload-integration-example.md)**: Backend-first upload example using `useBitUpload`/`injectBitUpload`.
|
|
222
|
+
- **[E-commerce Checkout Example](./docs/examples/ecommerce-checkout-example.md)**: Advanced nested + arrays + computed + async shipping quote flow.
|
|
207
223
|
- **[Server Errors](./docs/examples/server-errors.md)**: Client validation (resolver/asyncValidate) vs API 422 handling (setServerErrors, onSubmit).
|
|
208
224
|
|
|
209
225
|
### 🔍 DevTools & CLI
|
|
@@ -217,6 +233,7 @@ The complete documentation is available in the `/docs` folder. Explore the guide
|
|
|
217
233
|
|
|
218
234
|
- **[API Reference](./docs/api-reference/bit-store.md)**: Full `BitStore` class documentation.
|
|
219
235
|
- **[Type Definitions](./docs/api-reference/types.md)**: Core TypeScript interfaces and types.
|
|
236
|
+
- **[Advanced Core API](./docs/api-reference/advanced-core.md)**: Public advanced exports for custom adapters and tooling.
|
|
220
237
|
|
|
221
238
|
## ⚠️ Breaking Changes (dev branch)
|
|
222
239
|
|
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 _chunkPA43XYOWcjs = require('../chunk-PA43XYOW.cjs');require('../chunk-W5CLDRRE.cjs');var _chunkVAP2C5QVcjs = require('../chunk-VAP2C5QV.cjs');var _chunkACEJG5FJcjs = require('../chunk-ACEJG5FJ.cjs');var _chunkBSGJ3T5Scjs = require('../chunk-BSGJ3T5S.cjs');var _chunkRHMJPKNVcjs = require('../chunk-RHMJPKNV.cjs');var _chunk3KI3GEU3cjs = require('../chunk-3KI3GEU3.cjs');require('../chunk-UFJJOXVB.cjs');var _chunkKYX4G4YScjs = require('../chunk-KYX4G4YS.cjs');var _chunkPFPGASVZcjs = require('../chunk-PFPGASVZ.cjs');var _core = require('@angular/core');var B=new (0, _core.InjectionToken)("BIT_STORE");function at(t){return{provide:B,useValue:_chunkVAP2C5QVcjs.d.call(void 0, t)}}function l(){let t=_core.inject.call(void 0, B,{optional:!0});if(!t)throw new Error('BitForm: N\xE3o foi poss\xEDvel encontrar a BitStore. Certifique-se de que voc\xEA adicionou "provideBitStore(store)" nos providers do seu componente.');return t}function lt(){let t=l(),e=_core.inject.call(void 0, _core.DestroyRef),r=_core.signal.call(void 0, {isValid:!0,isDirty:!1,isSubmitting:!1}),o=_core.signal.call(void 0, null),s=_core.signal.call(void 0, null),i=_chunkACEJG5FJcjs.c.call(void 0, t,m=>{r.set(m)});e.onDestroy(()=>i());let p=_core.computed.call(void 0, ()=>r().isValid),a=_core.computed.call(void 0, ()=>r().isSubmitting),d=_core.computed.call(void 0, ()=>r().isDirty),{controller:c,actions:n}=_chunkACEJG5FJcjs.i.call(void 0, t,{clearSubmissionState:()=>{o.set(null),s.set(null)},setSubmissionResult:m=>{s.set(m)},setSubmissionError:m=>{o.set(m)}},{stopPropagation:!0});return{meta:{isValid:p,isDirty:d,isSubmitting:a,submitError:o.asReadonly(),lastResponse:s.asReadonly()},getValues:c.getValues,getErrors:c.getErrors,getTouched:c.getTouched,getDirtyValues:c.getDirtyValues,submit:c.submit,onSubmit:c.onSubmit,reset:c.reset,...n}}function E(t){let e=_core.inject.call(void 0, B),r=_core.signal.call(void 0, e.read.getFieldState(t)),o=e.observe.subscribeFieldState(t,y=>{r.set(y)});_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>{o(),_chunkACEJG5FJcjs.j.call(void 0, e,t)});let s=_core.computed.call(void 0, ()=>r().value),i=_core.computed.call(void 0, ()=>_chunk3KI3GEU3cjs.a.call(void 0, r())),p=_core.computed.call(void 0, ()=>i().error),a=_core.computed.call(void 0, ()=>i().touched),d=_core.computed.call(void 0, ()=>i().invalid),c=_core.computed.call(void 0, ()=>i().isDirty),n=_core.computed.call(void 0, ()=>i().isValidating),f=_core.computed.call(void 0, ()=>i().isHidden),m=_core.computed.call(void 0, ()=>i().isRequired),{fieldController:j}=_chunkACEJG5FJcjs.h.call(void 0, e,t),T=_core.computed.call(void 0, ()=>j.displayValue(s())),v=y=>{j.setValue(y)},h=()=>j.setBlur(),x=_core.computed.call(void 0, ()=>i().hasError);return{value:s,displayValue:T,setValue:v,setBlur:h,update:y=>v(_chunkPFPGASVZcjs.a.call(void 0, y)?_nullishCoalesce(_optionalChain([y, 'access', _2 => _2.target, 'optionalAccess', _3 => _3.value]), () => (null)):y),meta:{error:p,touched:a,invalid:d,isDirty:c,isValidating:n,isHidden:f,isRequired:m,hasError:x}}}function ft(t){let e=_core.inject.call(void 0, B),r=_core.inject.call(void 0, _core.DestroyRef),o=_chunkACEJG5FJcjs.g.call(void 0, e,t),s=_core.signal.call(void 0, o.readItems()),i=e.observe.subscribePath(t,()=>{s.set(o.readItems())});return r.onDestroy(()=>{i(),_chunkACEJG5FJcjs.k.call(void 0, e,`${t}.`)}),{fields:_core.computed.call(void 0, ()=>o.getFields(s())),length:_core.computed.call(void 0, ()=>s().length),append:o.append,prepend:o.prepend,remove:o.remove,insert:o.insert,swap:o.swap,move:o.move,replace:o.replace,clear:o.clear}}function Rt(){let t=l(),e=_core.inject.call(void 0, _core.DestroyRef),r=_core.signal.call(void 0, _chunkRHMJPKNVcjs.f.call(void 0, t)),o=_chunkRHMJPKNVcjs.g.call(void 0, t,s=>{r.set(s)});return e.onDestroy(()=>o()),{canUndo:_core.computed.call(void 0, ()=>r().canUndo),canRedo:_core.computed.call(void 0, ()=>r().canRedo),historyIndex:_core.computed.call(void 0, ()=>r().historyIndex),historySize:_core.computed.call(void 0, ()=>r().historySize),undo:()=>t.feature.undo(),redo:()=>t.feature.redo()}}function Ft(t){let e=l(),r=e.read.getScopeStatus(t),o=_core.signal.call(void 0, r),s=_chunkBSGJ3T5Scjs.a.call(void 0, e,t,f=>{o.set(f)});_optionalChain([_core.inject.call(void 0, _core.DestroyRef,{optional:!0}), 'optionalAccess', _4 => _4.onDestroy, 'call', _5 => _5(()=>s())]);let p=async()=>{let f=await e.feature.validate({scope:t}),m=e.read.getScopeErrors(t);return{valid:f,errors:m}},a=()=>e.read.getScopeErrors(t),d=_core.computed.call(void 0, ()=>!o().hasErrors),c=_core.computed.call(void 0, ()=>o().isDirty),n=_core.computed.call(void 0, ()=>o().errors);return{scopeName:t,status:o,errors:n,validate:p,getErrors:a,isValid:d,isDirty:c,unsubscribe:s}}function ht(t){let e=l(),r=_core.signal.call(void 0, 0),o=_core.computed.call(void 0, ()=>_nullishCoalesce(t[r()], () => (""))),s=()=>_nullishCoalesce(t[r()], () => ("")),i=_core.signal.call(void 0, e.read.getScopeStatus(s())),p=()=>{let u=s(),g=e.read.getScopeStatus(u),b=i();_chunkRHMJPKNVcjs.b.call(void 0, b,g)||i.set(g)},a=e.observe.subscribeScopeStatus(s(),p),d=()=>{a(),a=e.observe.subscribeScopeStatus(s(),p)};_optionalChain([_core.inject.call(void 0, _core.DestroyRef,{optional:!0}), 'optionalAccess', _6 => _6.onDestroy, 'call', _7 => _7(()=>a())]);let n=async()=>{let u=s(),g=await e.feature.validate({scope:u}),b=e.read.getScopeErrors(u);return{valid:g,errors:b}},f=()=>e.read.getScopeErrors(s()),m=async()=>{let u=s(),g=e.read.getScopeFields(u);if(e.feature.hasValidationsInProgress(g))return!1;let b=await e.feature.validate({scope:u});if(b){let F=Math.min(r()+1,t.length-1);r.set(F),i.set(e.read.getScopeStatus(_nullishCoalesce(t[F], () => ("")))),d()}else{let F=e.read.getScopeErrors(u),U=Object.keys(F);U.length>0&&e.write.markFieldsTouched(U)}return b},j=()=>{let u=Math.max(r()-1,0);r.set(u),i.set(e.read.getScopeStatus(_nullishCoalesce(t[u], () => ("")))),d()},T=u=>{let g=Math.max(0,Math.min(u-1,t.length-1));r.set(g),i.set(e.read.getScopeStatus(_nullishCoalesce(t[g], () => ("")))),d()},v=_core.computed.call(void 0, ()=>r()+1),h=_core.computed.call(void 0, ()=>r()===0),x=_core.computed.call(void 0, ()=>r()>=t.length-1),A=_core.computed.call(void 0, ()=>!i().hasErrors),y=_core.computed.call(void 0, ()=>i().isDirty),st=_core.computed.call(void 0, ()=>i().errors);return{step:v,stepIndex:r,scope:o,next:m,prev:j,goTo:T,isFirst:h,isLast:x,status:i,errors:st,isValid:A,isDirty:y,validate:n,getErrors:f}}function Et(t){let e=l(),r=_core.inject.call(void 0, _core.DestroyRef),o=_core.signal.call(void 0, _chunkKYX4G4YScjs.f.call(void 0, e.read.getState().values,t),{equal:_chunkKYX4G4YScjs.c}),s=e.observe.subscribePath(t,i=>{o.set(i)});return r.onDestroy(s),o.asReadonly()}function kt(t,e,r){let o=_core.inject.call(void 0, B),s=E(t),i=null,p=_core.signal.call(void 0, !1),a={setLoading:n=>p.set(n),setError:(n,f)=>o.write.setError(n,f),setValue:n=>s.setValue(n),getUploadKey:()=>i,setUploadKey:n=>{i=n}},d=_chunkPA43XYOWcjs.a.call(void 0, t,e,a),c=_chunkPA43XYOWcjs.b.call(void 0, t,r,a);return{value:_core.computed.call(void 0, ()=>s.value()),setValue:s.setValue,error:_core.computed.call(void 0, ()=>s.meta.error()),isValidating:_core.computed.call(void 0, ()=>!!s.meta.isValidating()||p()),upload:d,remove:c}}function Ht(){let t=l(),e=_core.signal.call(void 0, t.read.getPersistMetadata()),r=_chunkACEJG5FJcjs.f.call(void 0, t,a=>{e.set(a)});return _optionalChain([_core.inject.call(void 0, _core.DestroyRef,{optional:!0}), 'optionalAccess', _8 => _8.onDestroy, 'call', _9 => _9(()=>r())]),{restore:async()=>t.feature.restorePersisted(),save:async()=>{await t.feature.forceSave()},clear:async()=>{await t.feature.clearPersisted()},meta:{isSaving:_core.computed.call(void 0, ()=>e().isSaving),isRestoring:_core.computed.call(void 0, ()=>e().isRestoring),error:_core.computed.call(void 0, ()=>e().error)}}}exports.injectBitArray = ft; exports.injectBitField = E; exports.injectBitForm = lt; exports.injectBitHistory = Rt; exports.injectBitPersist = Ht; exports.injectBitScope = Ft; exports.injectBitSteps = ht; exports.injectBitUpload = kt; exports.injectBitWatch = Et; exports.provideBitStore = at; exports.useBitStore = l;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
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 { b as BitFrameworkStoreApi, e as BitStoreApi } from '../store-api-types-
|
|
4
|
-
import '../bus-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { a as BitUploadFn,
|
|
10
|
-
import '../types-
|
|
3
|
+
import { b as BitFrameworkStoreApi, e as BitStoreApi } from '../store-api-types-DSgYwMS3.cjs';
|
|
4
|
+
import '../bus-DzTqgkZ4.cjs';
|
|
5
|
+
import { d as BitPath, e as BitPathValue, f as BitPersistMetadata, b as BitErrors, h as BitTouched, D as DeepPartial, a as BitArrayPath, B as BitArrayItem } from '../state-types-8bUndWfg.cjs';
|
|
6
|
+
import { V as ValidateScopeResult, S as ScopeStatus } from '../runtime-types-D1SRZr-n.cjs';
|
|
7
|
+
import { b as BitValidationOptions } from '../meta-types-BC1VLABk.cjs';
|
|
8
|
+
import { B as BitFieldInputEvent } from '../field-binding-X5TkvfUt.cjs';
|
|
9
|
+
import { c as BitHistoryAdapterResult, d as BitPersistAdapterResult, e as BitStepsAdapterResult, f as BitUploadAdapterResult, a as BitArrayBindingField, g as BitUploadFn, b as BitDeleteUploadFn } from '../upload-C4JqIaU2.cjs';
|
|
10
|
+
import '../types-CUXh7PqD.cjs';
|
|
11
|
+
import '../config-types-5eR82k2V.cjs';
|
|
11
12
|
|
|
12
13
|
declare function provideBitStore<T extends object>(store: BitFrameworkStoreApi<T> | BitStoreApi<T>): Provider;
|
|
13
14
|
declare function useBitStore<T extends object>(): BitFrameworkStoreApi<T>;
|
|
@@ -41,56 +42,22 @@ interface InjectBitFieldResult<TForm extends object = any, P extends BitPath<TFo
|
|
|
41
42
|
* Result from injectBitSteps in Angular.
|
|
42
43
|
* Provides multi-step form navigation and validation using Angular Signals.
|
|
43
44
|
*/
|
|
44
|
-
|
|
45
|
-
step: ReturnType<typeof _angular_core.computed<number>>;
|
|
46
|
-
stepIndex: ReturnType<typeof _angular_core.signal<number>>;
|
|
47
|
-
scope: ReturnType<typeof _angular_core.computed<string>>;
|
|
48
|
-
next: () => Promise<boolean>;
|
|
49
|
-
prev: () => void;
|
|
50
|
-
goTo: (step: number) => void;
|
|
51
|
-
isFirst: ReturnType<typeof _angular_core.computed<boolean>>;
|
|
52
|
-
isLast: ReturnType<typeof _angular_core.computed<boolean>>;
|
|
53
|
-
status: ReturnType<typeof _angular_core.signal<ScopeStatus>>;
|
|
54
|
-
errors: ReturnType<typeof _angular_core.computed<Record<string, string>>>;
|
|
55
|
-
isValid: ReturnType<typeof _angular_core.computed<boolean>>;
|
|
56
|
-
isDirty: ReturnType<typeof _angular_core.computed<boolean>>;
|
|
57
|
-
validate: () => Promise<ValidateScopeResult>;
|
|
58
|
-
getErrors: () => Record<string, string>;
|
|
59
|
-
}
|
|
45
|
+
type InjectBitStepsResult = BitStepsAdapterResult<ReturnType<typeof _angular_core.computed<number>>, ReturnType<typeof _angular_core.signal<number>>, ReturnType<typeof _angular_core.computed<string>>, ReturnType<typeof _angular_core.computed<boolean>>, ReturnType<typeof _angular_core.signal<ScopeStatus>>, ReturnType<typeof _angular_core.computed<Record<string, string>>>, ValidateScopeResult>;
|
|
60
46
|
/**
|
|
61
47
|
* Result from injectBitUpload in Angular.
|
|
62
48
|
* Provides file upload functionality with integrated validation (Angular Signal).
|
|
63
49
|
*/
|
|
64
|
-
|
|
65
|
-
value: Signal<string | File | null>;
|
|
66
|
-
setValue: (value: string | File | null) => void;
|
|
67
|
-
error: Signal<string | undefined>;
|
|
68
|
-
isValidating: Signal<boolean>;
|
|
69
|
-
upload: (file: File | null | undefined) => Promise<void>;
|
|
70
|
-
remove: () => Promise<void>;
|
|
71
|
-
}
|
|
50
|
+
type InjectBitUploadResult = BitUploadAdapterResult<Signal<string | File | null>, Signal<string | undefined>, Signal<boolean>>;
|
|
72
51
|
/**
|
|
73
52
|
* Result from injectBitHistory in Angular.
|
|
74
53
|
* Provides form history undo/redo capabilities (Angular Signals).
|
|
75
54
|
*/
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
redo: () => void;
|
|
83
|
-
}
|
|
84
|
-
interface InjectBitPersistResult {
|
|
85
|
-
restore: () => Promise<boolean>;
|
|
86
|
-
save: () => Promise<void>;
|
|
87
|
-
clear: () => Promise<void>;
|
|
88
|
-
meta: {
|
|
89
|
-
isSaving: Signal<BitPersistMetadata["isSaving"]>;
|
|
90
|
-
isRestoring: Signal<BitPersistMetadata["isRestoring"]>;
|
|
91
|
-
error: Signal<BitPersistMetadata["error"]>;
|
|
92
|
-
};
|
|
93
|
-
}
|
|
55
|
+
type InjectBitHistoryResult = BitHistoryAdapterResult<ReturnType<typeof _angular_core.computed<boolean>>, ReturnType<typeof _angular_core.computed<boolean>>, ReturnType<typeof _angular_core.computed<BitHistoryMetadata["historyIndex"]>>, ReturnType<typeof _angular_core.computed<BitHistoryMetadata["historySize"]>>>;
|
|
56
|
+
type InjectBitPersistResult = BitPersistAdapterResult<{
|
|
57
|
+
isSaving: Signal<BitPersistMetadata["isSaving"]>;
|
|
58
|
+
isRestoring: Signal<BitPersistMetadata["isRestoring"]>;
|
|
59
|
+
error: Signal<BitPersistMetadata["error"]>;
|
|
60
|
+
}>;
|
|
94
61
|
interface InjectBitFormResult<T extends object = any> {
|
|
95
62
|
meta: {
|
|
96
63
|
isValid: ReturnType<typeof _angular_core.computed<boolean>>;
|
|
@@ -103,7 +70,7 @@ interface InjectBitFormResult<T extends object = any> {
|
|
|
103
70
|
getErrors: () => BitErrors<T>;
|
|
104
71
|
getTouched: () => BitTouched<T>;
|
|
105
72
|
getDirtyValues: () => Partial<T>;
|
|
106
|
-
submit: (onSuccess: (values: T, dirtyValues?: Partial<T>) =>
|
|
73
|
+
submit: (onSuccess: (values: T, dirtyValues?: Partial<T>) => unknown | Promise<unknown>) => (event?: Event) => Promise<void>;
|
|
107
74
|
onSubmit: (handler: (values: T, dirtyValues?: Partial<T>) => Promise<unknown>) => (event?: Event) => Promise<void>;
|
|
108
75
|
reset: () => void;
|
|
109
76
|
transaction: <TResult>(callback: () => TResult) => TResult;
|
|
@@ -160,7 +127,7 @@ declare function injectBitWatch<TForm extends object = any, P extends BitPath<TF
|
|
|
160
127
|
* Minimal upload API integrated with global field validation lifecycle.
|
|
161
128
|
*/
|
|
162
129
|
|
|
163
|
-
declare function injectBitUpload(fieldPath: string, uploadFn: BitUploadFn
|
|
130
|
+
declare function injectBitUpload<TMetadata extends Record<string, unknown> = Record<string, unknown>>(fieldPath: string, uploadFn: BitUploadFn<TMetadata>, deleteFile?: BitDeleteUploadFn): InjectBitUploadResult;
|
|
164
131
|
|
|
165
132
|
declare function injectBitPersist<T extends object = any>(): InjectBitPersistResult;
|
|
166
133
|
|
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 { b as BitFrameworkStoreApi, e as BitStoreApi } from '../store-api-types-
|
|
4
|
-
import '../bus-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { a as BitUploadFn,
|
|
10
|
-
import '../types-
|
|
3
|
+
import { b as BitFrameworkStoreApi, e as BitStoreApi } from '../store-api-types-Bozwlwyb.js';
|
|
4
|
+
import '../bus-BFOBGmd9.js';
|
|
5
|
+
import { d as BitPath, e as BitPathValue, f as BitPersistMetadata, b as BitErrors, h as BitTouched, D as DeepPartial, a as BitArrayPath, B as BitArrayItem } from '../state-types-8bUndWfg.js';
|
|
6
|
+
import { V as ValidateScopeResult, S as ScopeStatus } from '../runtime-types-D1SRZr-n.js';
|
|
7
|
+
import { b as BitValidationOptions } from '../meta-types-BC1VLABk.js';
|
|
8
|
+
import { B as BitFieldInputEvent } from '../field-binding-Bi1g-D8X.js';
|
|
9
|
+
import { c as BitHistoryAdapterResult, d as BitPersistAdapterResult, e as BitStepsAdapterResult, f as BitUploadAdapterResult, a as BitArrayBindingField, g as BitUploadFn, b as BitDeleteUploadFn } from '../upload-ao6skK9K.js';
|
|
10
|
+
import '../types-CUXh7PqD.js';
|
|
11
|
+
import '../config-types-D9n-rQLk.js';
|
|
11
12
|
|
|
12
13
|
declare function provideBitStore<T extends object>(store: BitFrameworkStoreApi<T> | BitStoreApi<T>): Provider;
|
|
13
14
|
declare function useBitStore<T extends object>(): BitFrameworkStoreApi<T>;
|
|
@@ -41,56 +42,22 @@ interface InjectBitFieldResult<TForm extends object = any, P extends BitPath<TFo
|
|
|
41
42
|
* Result from injectBitSteps in Angular.
|
|
42
43
|
* Provides multi-step form navigation and validation using Angular Signals.
|
|
43
44
|
*/
|
|
44
|
-
|
|
45
|
-
step: ReturnType<typeof _angular_core.computed<number>>;
|
|
46
|
-
stepIndex: ReturnType<typeof _angular_core.signal<number>>;
|
|
47
|
-
scope: ReturnType<typeof _angular_core.computed<string>>;
|
|
48
|
-
next: () => Promise<boolean>;
|
|
49
|
-
prev: () => void;
|
|
50
|
-
goTo: (step: number) => void;
|
|
51
|
-
isFirst: ReturnType<typeof _angular_core.computed<boolean>>;
|
|
52
|
-
isLast: ReturnType<typeof _angular_core.computed<boolean>>;
|
|
53
|
-
status: ReturnType<typeof _angular_core.signal<ScopeStatus>>;
|
|
54
|
-
errors: ReturnType<typeof _angular_core.computed<Record<string, string>>>;
|
|
55
|
-
isValid: ReturnType<typeof _angular_core.computed<boolean>>;
|
|
56
|
-
isDirty: ReturnType<typeof _angular_core.computed<boolean>>;
|
|
57
|
-
validate: () => Promise<ValidateScopeResult>;
|
|
58
|
-
getErrors: () => Record<string, string>;
|
|
59
|
-
}
|
|
45
|
+
type InjectBitStepsResult = BitStepsAdapterResult<ReturnType<typeof _angular_core.computed<number>>, ReturnType<typeof _angular_core.signal<number>>, ReturnType<typeof _angular_core.computed<string>>, ReturnType<typeof _angular_core.computed<boolean>>, ReturnType<typeof _angular_core.signal<ScopeStatus>>, ReturnType<typeof _angular_core.computed<Record<string, string>>>, ValidateScopeResult>;
|
|
60
46
|
/**
|
|
61
47
|
* Result from injectBitUpload in Angular.
|
|
62
48
|
* Provides file upload functionality with integrated validation (Angular Signal).
|
|
63
49
|
*/
|
|
64
|
-
|
|
65
|
-
value: Signal<string | File | null>;
|
|
66
|
-
setValue: (value: string | File | null) => void;
|
|
67
|
-
error: Signal<string | undefined>;
|
|
68
|
-
isValidating: Signal<boolean>;
|
|
69
|
-
upload: (file: File | null | undefined) => Promise<void>;
|
|
70
|
-
remove: () => Promise<void>;
|
|
71
|
-
}
|
|
50
|
+
type InjectBitUploadResult = BitUploadAdapterResult<Signal<string | File | null>, Signal<string | undefined>, Signal<boolean>>;
|
|
72
51
|
/**
|
|
73
52
|
* Result from injectBitHistory in Angular.
|
|
74
53
|
* Provides form history undo/redo capabilities (Angular Signals).
|
|
75
54
|
*/
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
redo: () => void;
|
|
83
|
-
}
|
|
84
|
-
interface InjectBitPersistResult {
|
|
85
|
-
restore: () => Promise<boolean>;
|
|
86
|
-
save: () => Promise<void>;
|
|
87
|
-
clear: () => Promise<void>;
|
|
88
|
-
meta: {
|
|
89
|
-
isSaving: Signal<BitPersistMetadata["isSaving"]>;
|
|
90
|
-
isRestoring: Signal<BitPersistMetadata["isRestoring"]>;
|
|
91
|
-
error: Signal<BitPersistMetadata["error"]>;
|
|
92
|
-
};
|
|
93
|
-
}
|
|
55
|
+
type InjectBitHistoryResult = BitHistoryAdapterResult<ReturnType<typeof _angular_core.computed<boolean>>, ReturnType<typeof _angular_core.computed<boolean>>, ReturnType<typeof _angular_core.computed<BitHistoryMetadata["historyIndex"]>>, ReturnType<typeof _angular_core.computed<BitHistoryMetadata["historySize"]>>>;
|
|
56
|
+
type InjectBitPersistResult = BitPersistAdapterResult<{
|
|
57
|
+
isSaving: Signal<BitPersistMetadata["isSaving"]>;
|
|
58
|
+
isRestoring: Signal<BitPersistMetadata["isRestoring"]>;
|
|
59
|
+
error: Signal<BitPersistMetadata["error"]>;
|
|
60
|
+
}>;
|
|
94
61
|
interface InjectBitFormResult<T extends object = any> {
|
|
95
62
|
meta: {
|
|
96
63
|
isValid: ReturnType<typeof _angular_core.computed<boolean>>;
|
|
@@ -103,7 +70,7 @@ interface InjectBitFormResult<T extends object = any> {
|
|
|
103
70
|
getErrors: () => BitErrors<T>;
|
|
104
71
|
getTouched: () => BitTouched<T>;
|
|
105
72
|
getDirtyValues: () => Partial<T>;
|
|
106
|
-
submit: (onSuccess: (values: T, dirtyValues?: Partial<T>) =>
|
|
73
|
+
submit: (onSuccess: (values: T, dirtyValues?: Partial<T>) => unknown | Promise<unknown>) => (event?: Event) => Promise<void>;
|
|
107
74
|
onSubmit: (handler: (values: T, dirtyValues?: Partial<T>) => Promise<unknown>) => (event?: Event) => Promise<void>;
|
|
108
75
|
reset: () => void;
|
|
109
76
|
transaction: <TResult>(callback: () => TResult) => TResult;
|
|
@@ -160,7 +127,7 @@ declare function injectBitWatch<TForm extends object = any, P extends BitPath<TF
|
|
|
160
127
|
* Minimal upload API integrated with global field validation lifecycle.
|
|
161
128
|
*/
|
|
162
129
|
|
|
163
|
-
declare function injectBitUpload(fieldPath: string, uploadFn: BitUploadFn
|
|
130
|
+
declare function injectBitUpload<TMetadata extends Record<string, unknown> = Record<string, unknown>>(fieldPath: string, uploadFn: BitUploadFn<TMetadata>, deleteFile?: BitDeleteUploadFn): InjectBitUploadResult;
|
|
164
131
|
|
|
165
132
|
declare function injectBitPersist<T extends object = any>(): InjectBitPersistResult;
|
|
166
133
|
|
package/dist/angular/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as Z,b as N}from"../chunk-
|
|
1
|
+
import{a as Z,b as N}from"../chunk-PG7ZH32Z.js";import"../chunk-5NA2TFPG.js";import{d as K}from"../chunk-23IYGRVG.js";import{c as C,f as W,g as z,h as $,i as G,j as J,k as Q}from"../chunk-YWBRZGEI.js";import{a as X}from"../chunk-W2E5UIXT.js";import{b as O,f as _,g as q}from"../chunk-UIKO6GGW.js";import{a as Y}from"../chunk-ICYXODTQ.js";import"../chunk-RMD37PXW.js";import{c as M,f as H}from"../chunk-DRLFDQ5Z.js";import{a as L}from"../chunk-3NUJVIAM.js";import{inject as it,InjectionToken as nt}from"@angular/core";var B=new nt("BIT_STORE");function at(t){return{provide:B,useValue:K(t)}}function l(){let t=it(B,{optional:!0});if(!t)throw new Error('BitForm: N\xE3o foi poss\xEDvel encontrar a BitStore. Certifique-se de que voc\xEA adicionou "provideBitStore(store)" nos providers do seu componente.');return t}import{signal as V,computed as I,inject as ct,DestroyRef as ut}from"@angular/core";function lt(){let t=l(),e=ct(ut),r=V({isValid:!0,isDirty:!1,isSubmitting:!1}),o=V(null),s=V(null),i=C(t,m=>{r.set(m)});e.onDestroy(()=>i());let p=I(()=>r().isValid),a=I(()=>r().isSubmitting),d=I(()=>r().isDirty),{controller:c,actions:n}=G(t,{clearSubmissionState:()=>{o.set(null),s.set(null)},setSubmissionResult:m=>{s.set(m)},setSubmissionError:m=>{o.set(m)}},{stopPropagation:!0});return{meta:{isValid:p,isDirty:d,isSubmitting:a,submitError:o.asReadonly(),lastResponse:s.asReadonly()},getValues:c.getValues,getErrors:c.getErrors,getTouched:c.getTouched,getDirtyValues:c.getDirtyValues,submit:c.submit,onSubmit:c.onSubmit,reset:c.reset,...n}}import{DestroyRef as pt,computed as S,inject as tt,signal as dt}from"@angular/core";function E(t){let e=tt(B),r=dt(e.read.getFieldState(t)),o=e.observe.subscribeFieldState(t,y=>{r.set(y)});tt(pt).onDestroy(()=>{o(),J(e,t)});let s=S(()=>r().value),i=S(()=>Y(r())),p=S(()=>i().error),a=S(()=>i().touched),d=S(()=>i().invalid),c=S(()=>i().isDirty),n=S(()=>i().isValidating),f=S(()=>i().isHidden),m=S(()=>i().isRequired),{fieldController:j}=$(e,t),T=S(()=>j.displayValue(s())),v=y=>{j.setValue(y)},h=()=>j.setBlur(),x=S(()=>i().hasError);return{value:s,displayValue:T,setValue:v,setBlur:h,update:y=>v(L(y)?y.target?.value??null:y),meta:{error:p,touched:a,invalid:d,isDirty:c,isValidating:n,isHidden:f,isRequired:m,hasError:x}}}import{computed as et,DestroyRef as mt,inject as rt,signal as St}from"@angular/core";function ft(t){let e=rt(B),r=rt(mt),o=z(e,t),s=St(o.readItems()),i=e.observe.subscribePath(t,()=>{s.set(o.readItems())});return r.onDestroy(()=>{i(),Q(e,`${t}.`)}),{fields:et(()=>o.getFields(s())),length:et(()=>s().length),append:o.append,prepend:o.prepend,remove:o.remove,insert:o.insert,swap:o.swap,move:o.move,replace:o.replace,clear:o.clear}}import{computed as P,DestroyRef as yt,inject as gt,signal as Bt}from"@angular/core";function Rt(){let t=l(),e=gt(yt),r=Bt(_(t)),o=q(t,s=>{r.set(s)});return e.onDestroy(()=>o()),{canUndo:P(()=>r().canUndo),canRedo:P(()=>r().canRedo),historyIndex:P(()=>r().historyIndex),historySize:P(()=>r().historySize),undo:()=>t.feature.undo(),redo:()=>t.feature.redo()}}import{computed as D,DestroyRef as bt,inject as jt,signal as vt}from"@angular/core";function Ft(t){let e=l(),r=e.read.getScopeStatus(t),o=vt(r),s=X(e,t,f=>{o.set(f)});jt(bt,{optional:!0})?.onDestroy(()=>s());let p=async()=>{let f=await e.feature.validate({scope:t}),m=e.read.getScopeErrors(t);return{valid:f,errors:m}},a=()=>e.read.getScopeErrors(t),d=D(()=>!o().hasErrors),c=D(()=>o().isDirty),n=D(()=>o().errors);return{scopeName:t,status:o,errors:n,validate:p,getErrors:a,isValid:d,isDirty:c,unsubscribe:s}}import{computed as R,DestroyRef as Pt,inject as Tt,signal as ot}from"@angular/core";function ht(t){let e=l(),r=ot(0),o=R(()=>t[r()]??""),s=()=>t[r()]??"",i=ot(e.read.getScopeStatus(s())),p=()=>{let u=s(),g=e.read.getScopeStatus(u),b=i();O(b,g)||i.set(g)},a=e.observe.subscribeScopeStatus(s(),p),d=()=>{a(),a=e.observe.subscribeScopeStatus(s(),p)};Tt(Pt,{optional:!0})?.onDestroy(()=>a());let n=async()=>{let u=s(),g=await e.feature.validate({scope:u}),b=e.read.getScopeErrors(u);return{valid:g,errors:b}},f=()=>e.read.getScopeErrors(s()),m=async()=>{let u=s(),g=e.read.getScopeFields(u);if(e.feature.hasValidationsInProgress(g))return!1;let b=await e.feature.validate({scope:u});if(b){let F=Math.min(r()+1,t.length-1);r.set(F),i.set(e.read.getScopeStatus(t[F]??"")),d()}else{let F=e.read.getScopeErrors(u),U=Object.keys(F);U.length>0&&e.write.markFieldsTouched(U)}return b},j=()=>{let u=Math.max(r()-1,0);r.set(u),i.set(e.read.getScopeStatus(t[u]??"")),d()},T=u=>{let g=Math.max(0,Math.min(u-1,t.length-1));r.set(g),i.set(e.read.getScopeStatus(t[g]??"")),d()},v=R(()=>r()+1),h=R(()=>r()===0),x=R(()=>r()>=t.length-1),A=R(()=>!i().hasErrors),y=R(()=>i().isDirty),st=R(()=>i().errors);return{step:v,stepIndex:r,scope:o,next:m,prev:j,goTo:T,isFirst:h,isLast:x,status:i,errors:st,isValid:A,isDirty:y,validate:n,getErrors:f}}import{DestroyRef as xt,signal as Vt,inject as It}from"@angular/core";function Et(t){let e=l(),r=It(xt),o=Vt(H(e.read.getState().values,t),{equal:M}),s=e.observe.subscribePath(t,i=>{o.set(i)});return r.onDestroy(s),o.asReadonly()}import{computed as w,inject as Dt,signal as wt}from"@angular/core";function kt(t,e,r){let o=Dt(B),s=E(t),i=null,p=wt(!1),a={setLoading:n=>p.set(n),setError:(n,f)=>o.write.setError(n,f),setValue:n=>s.setValue(n),getUploadKey:()=>i,setUploadKey:n=>{i=n}},d=Z(t,e,a),c=N(t,r,a);return{value:w(()=>s.value()),setValue:s.setValue,error:w(()=>s.meta.error()),isValidating:w(()=>!!s.meta.isValidating()||p()),upload:d,remove:c}}import{computed as k,DestroyRef as At,inject as Ut,signal as Mt}from"@angular/core";function Ht(){let t=l(),e=Mt(t.read.getPersistMetadata()),r=W(t,a=>{e.set(a)});return Ut(At,{optional:!0})?.onDestroy(()=>r()),{restore:async()=>t.feature.restorePersisted(),save:async()=>{await t.feature.forceSave()},clear:async()=>{await t.feature.clearPersisted()},meta:{isSaving:k(()=>e().isSaving),isRestoring:k(()=>e().isRestoring),error:k(()=>e().error)}}}export{ft as injectBitArray,E as injectBitField,lt as injectBitForm,Rt as injectBitHistory,Ht as injectBitPersist,Ft as injectBitScope,ht as injectBitSteps,kt as injectBitUpload,Et as injectBitWatch,at as provideBitStore,l as useBitStore};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/angular/provider.ts","../../src/angular/inject-bit-form.ts","../../src/angular/inject-bit-field.ts","../../src/angular/inject-bit-array.ts","../../src/angular/inject-bit-history.ts","../../src/angular/inject-bit-scope.ts","../../src/angular/inject-bit-steps.ts","../../src/angular/inject-bit-watch.ts","../../src/angular/inject-bit-upload.ts","../../src/angular/inject-bit-persist.ts"],"sourcesContent":["import { inject, InjectionToken, Provider } from \"@angular/core\";\nimport type { BitFrameworkStoreApi, BitStoreApi } from \"../core\";\nimport { createFrameworkStoreAdapter } from \"../core\";\n\nexport const BIT_STORE_TOKEN = new InjectionToken<BitFrameworkStoreApi<any>>(\n \"BIT_STORE\",\n);\n\nexport function provideBitStore<T extends object>(\n store: BitFrameworkStoreApi<T> | BitStoreApi<T>,\n): Provider {\n return {\n provide: BIT_STORE_TOKEN,\n useValue: createFrameworkStoreAdapter<T>(store),\n };\n}\n\nexport function useBitStore<T extends object>() {\n const store = inject(BIT_STORE_TOKEN, { optional: true });\n\n if (!store) {\n throw new Error(\n \"BitForm: Não foi possível encontrar a BitStore. \" +\n 'Certifique-se de que você adicionou \"provideBitStore(store)\" nos providers do seu componente.',\n );\n }\n\n return store as BitFrameworkStoreApi<T>;\n}\n","import { signal, computed, inject, DestroyRef } from \"@angular/core\";\nimport { useBitStore } from \"./provider\";\nimport { createFrameworkFormBinding, observeFormMetaSnapshot } from \"../core\";\nimport type { InjectBitFormResult } from \"./types\";\n\nexport function injectBitForm<T extends object>(): InjectBitFormResult<T> {\n const store = useBitStore<T>();\n const destroyRef = inject(DestroyRef);\n const stateSignal = signal({\n isValid: true,\n isDirty: false,\n isSubmitting: false,\n });\n const submitError = signal<Error | null>(null);\n const lastResponse = signal<unknown>(null);\n\n const sub = observeFormMetaSnapshot(store, (nextMeta) => {\n stateSignal.set(nextMeta);\n });\n\n destroyRef.onDestroy(() => sub());\n\n const isValid = computed(() => stateSignal().isValid);\n const isSubmitting = computed(() => stateSignal().isSubmitting);\n const isDirty = computed(() => stateSignal().isDirty);\n\n const { controller, actions } = createFrameworkFormBinding(\n store,\n {\n clearSubmissionState: () => {\n submitError.set(null);\n lastResponse.set(null);\n },\n setSubmissionResult: (result) => {\n lastResponse.set(result);\n },\n setSubmissionError: (error) => {\n submitError.set(error);\n },\n },\n { stopPropagation: true },\n );\n\n const meta = {\n isValid,\n isDirty,\n isSubmitting,\n submitError: submitError.asReadonly(),\n lastResponse: lastResponse.asReadonly(),\n };\n\n return {\n // Metadata (grouped)\n meta,\n // Getters\n getValues: controller.getValues,\n getErrors: controller.getErrors,\n getTouched: controller.getTouched,\n getDirtyValues: controller.getDirtyValues,\n // Main actions (frequent use - flat)\n submit: controller.submit,\n onSubmit: controller.onSubmit,\n reset: controller.reset,\n ...actions,\n };\n}\n","import { DestroyRef, computed, inject, signal } from \"@angular/core\";\nimport {\n BitPath,\n BitPathValue,\n cleanupRegisteredField,\n createFrameworkMaskedFieldBinding,\n deriveFieldMeta,\n isBitFieldInputEventObject,\n} from \"../core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport type { BitFieldInputEvent, InjectBitFieldResult } from \"./types\";\n\nexport function injectBitField<\n _TValue = any,\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P): InjectBitFieldResult<TForm, P> {\n const store = inject(BIT_STORE_TOKEN);\n\n const stateSignal = signal(store.read.getFieldState(path));\n\n const unsubscribe = store.observe.subscribeFieldState(path, (nextState) => {\n stateSignal.set(nextState);\n });\n\n inject(DestroyRef).onDestroy(() => {\n unsubscribe();\n cleanupRegisteredField(store, path as string);\n });\n\n const value = computed(() => stateSignal().value as BitPathValue<TForm, P>);\n const metaState = computed(() => deriveFieldMeta(stateSignal()));\n const error = computed(() => metaState().error);\n const touched = computed(() => metaState().touched);\n const invalid = computed(() => metaState().invalid);\n const isDirty = computed(() => metaState().isDirty);\n const isValidating = computed(() => metaState().isValidating);\n const isHidden = computed(() => metaState().isHidden);\n const isRequired = computed(() => metaState().isRequired);\n\n const { fieldController } = createFrameworkMaskedFieldBinding(store, path);\n\n const displayValue = computed(() => fieldController.displayValue(value()));\n\n const setValue = (\n val: BitPathValue<TForm, P> | string | number | null | undefined,\n ) => {\n fieldController.setValue(val);\n };\n\n const setBlur = () => fieldController.setBlur();\n\n const hasError = computed(() => metaState().hasError);\n\n const update = (e: BitFieldInputEvent) =>\n setValue(isBitFieldInputEventObject(e) ? (e.target?.value ?? null) : e);\n\n return {\n // Main handlers and values (flat)\n value,\n displayValue,\n setValue,\n setBlur,\n update,\n // Metadata (grouped)\n meta: {\n error,\n touched,\n invalid,\n isDirty,\n isValidating,\n isHidden,\n isRequired,\n hasError,\n },\n };\n}\n","import { computed, DestroyRef, inject, signal } from \"@angular/core\";\nimport {\n BitArrayItem,\n BitArrayPath,\n BitPathValue,\n cleanupRegisteredPrefix,\n createArrayBinding,\n} from \"../core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\n\nexport function injectBitArray<\n TForm extends object = any,\n P extends BitArrayPath<TForm> = BitArrayPath<TForm>,\n>(path: P) {\n const store = inject(BIT_STORE_TOKEN);\n const destroyRef = inject(DestroyRef);\n const controller = createArrayBinding<TForm, P>(store, path);\n\n const valuesSig = signal<BitArrayItem<BitPathValue<TForm, P>>[]>(\n controller.readItems(),\n );\n\n const unsub = store.observe.subscribePath(path, () => {\n valuesSig.set(controller.readItems());\n });\n\n destroyRef.onDestroy(() => {\n unsub();\n cleanupRegisteredPrefix(store, `${path as string}.`);\n });\n\n return {\n fields: computed(() => controller.getFields(valuesSig())),\n length: computed(() => valuesSig().length),\n append: controller.append,\n prepend: controller.prepend,\n remove: controller.remove,\n insert: controller.insert,\n swap: controller.swap,\n move: controller.move,\n replace: controller.replace,\n clear: controller.clear,\n };\n}\n","import { computed, DestroyRef, inject, signal } from \"@angular/core\";\nimport { observeHistoryMetaSnapshot, readHistoryMetaSnapshot } from \"../core\";\nimport { useBitStore } from \"./provider\";\nimport type { InjectBitHistoryResult } from \"./types\";\n\nexport function injectBitHistory<\n T extends object = any,\n>(): InjectBitHistoryResult {\n const store = useBitStore<T>();\n const destroyRef = inject(DestroyRef);\n\n const meta = signal(readHistoryMetaSnapshot(store));\n\n const sub = observeHistoryMetaSnapshot(store, (nextMeta) => {\n meta.set(nextMeta);\n });\n\n destroyRef.onDestroy(() => sub());\n\n return {\n canUndo: computed(() => meta().canUndo),\n canRedo: computed(() => meta().canRedo),\n historyIndex: computed(() => meta().historyIndex),\n historySize: computed(() => meta().historySize),\n undo: () => store.feature.undo(),\n redo: () => store.feature.redo(),\n };\n}\n","import type { Signal } from \"@angular/core\";\nimport { computed, DestroyRef, inject, signal } from \"@angular/core\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { observeScopeStatusSnapshot } from \"../core\";\nimport { useBitStore } from \"./provider\";\n\nexport type { ScopeStatus, ValidateScopeResult };\n\ninterface InjectBitScopeResult {\n scopeName: string;\n status: Signal<ScopeStatus>;\n errors: Signal<Record<string, string>>;\n validate: () => Promise<ValidateScopeResult>;\n getErrors: () => Record<string, string>;\n isValid: Signal<boolean>;\n isDirty: Signal<boolean>;\n unsubscribe: () => void;\n}\n\nexport function injectBitScope(scopeName: string): InjectBitScopeResult {\n const store = useBitStore();\n const initialStatus = store.read.getScopeStatus(scopeName);\n\n const status = signal<ScopeStatus>(initialStatus);\n\n const unsubscribe = observeScopeStatusSnapshot(\n store,\n scopeName,\n (nextStatus) => {\n status.set(nextStatus);\n },\n );\n\n const destroyRef = inject(DestroyRef, { optional: true });\n destroyRef?.onDestroy(() => unsubscribe());\n\n const validate = async (): Promise<ValidateScopeResult> => {\n const valid = await store.feature.validate({ scope: scopeName });\n const errors = store.read.getScopeErrors(scopeName);\n return { valid, errors };\n };\n\n const getErrors = () => store.read.getScopeErrors(scopeName);\n\n const isValid = computed(() => !status().hasErrors);\n const isDirty = computed(() => status().isDirty);\n const errors = computed(() => status().errors);\n\n return {\n scopeName,\n status,\n errors,\n validate,\n getErrors,\n isValid,\n isDirty,\n unsubscribe,\n };\n}\n","import { computed, DestroyRef, inject, signal } from \"@angular/core\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { isScopeStatusEqual } from \"../core\";\nimport { useBitStore } from \"./provider\";\nimport type { InjectBitStepsResult } from \"./types\";\n\nexport function injectBitSteps(scopeNames: string[]): InjectBitStepsResult {\n const store = useBitStore();\n const stepIndex = signal(0);\n\n const scope = computed(() => scopeNames[stepIndex()] ?? \"\");\n\n const getCurrentScope = () => scopeNames[stepIndex()] ?? \"\";\n const status = signal<ScopeStatus>(\n store.read.getScopeStatus(getCurrentScope()),\n );\n\n const updateStatus = () => {\n const scopeName = getCurrentScope();\n const newStatus = store.read.getScopeStatus(scopeName);\n const current = status();\n if (!isScopeStatusEqual(current, newStatus)) {\n status.set(newStatus);\n }\n };\n\n let unsubscribe = store.observe.subscribeScopeStatus(\n getCurrentScope(),\n updateStatus,\n );\n\n const rebindScopeSubscription = () => {\n unsubscribe();\n unsubscribe = store.observe.subscribeScopeStatus(\n getCurrentScope(),\n updateStatus,\n );\n };\n\n const destroyRef = inject(DestroyRef, { optional: true });\n destroyRef?.onDestroy(() => unsubscribe());\n\n const validate = async (): Promise<ValidateScopeResult> => {\n const scopeName = getCurrentScope();\n const valid = await store.feature.validate({ scope: scopeName });\n const errors = store.read.getScopeErrors(scopeName);\n return { valid, errors };\n };\n\n const getErrors = () => store.read.getScopeErrors(getCurrentScope());\n\n const next = async (): Promise<boolean> => {\n const scopeName = getCurrentScope();\n\n const scopeFields = store.read.getScopeFields(scopeName);\n if (store.feature.hasValidationsInProgress(scopeFields)) {\n return false;\n }\n\n const valid = await store.feature.validate({ scope: scopeName });\n if (valid) {\n const newIndex = Math.min(stepIndex() + 1, scopeNames.length - 1);\n stepIndex.set(newIndex);\n status.set(store.read.getScopeStatus(scopeNames[newIndex] ?? \"\"));\n rebindScopeSubscription();\n } else {\n const errors = store.read.getScopeErrors(scopeName);\n const pathsWithErrors = Object.keys(errors);\n if (pathsWithErrors.length > 0) {\n store.write.markFieldsTouched(pathsWithErrors);\n }\n }\n return valid;\n };\n\n const prev = () => {\n const newIndex = Math.max(stepIndex() - 1, 0);\n stepIndex.set(newIndex);\n status.set(store.read.getScopeStatus(scopeNames[newIndex] ?? \"\"));\n rebindScopeSubscription();\n };\n\n const goTo = (targetStep: number) => {\n const newIndex = Math.max(\n 0,\n Math.min(targetStep - 1, scopeNames.length - 1),\n );\n stepIndex.set(newIndex);\n status.set(store.read.getScopeStatus(scopeNames[newIndex] ?? \"\"));\n rebindScopeSubscription();\n };\n\n const step = computed(() => stepIndex() + 1);\n const isFirst = computed(() => stepIndex() === 0);\n const isLast = computed(() => stepIndex() >= scopeNames.length - 1);\n const isValid = computed(() => !status().hasErrors);\n const isDirty = computed(() => status().isDirty);\n const errors = computed(() => status().errors);\n\n return {\n step,\n stepIndex,\n scope,\n next,\n prev,\n goTo,\n isFirst,\n isLast,\n status,\n errors,\n isValid,\n isDirty,\n validate,\n getErrors,\n };\n}\n","import { DestroyRef, signal, Signal, inject } from \"@angular/core\";\nimport { useBitStore } from \"./provider\";\nimport { getDeepValue, valueEqual, BitPath, BitPathValue } from \"../core\";\n\nexport function injectBitWatch<\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P): Signal<BitPathValue<TForm, P>> {\n const store = useBitStore<TForm>();\n const destroyRef = inject(DestroyRef);\n const valueSig = signal<BitPathValue<TForm, P>>(\n getDeepValue(store.read.getState().values, path as string) as BitPathValue<\n TForm,\n P\n >,\n { equal: valueEqual },\n );\n\n const unsub = store.observe.subscribePath(path, (v) => {\n valueSig.set(v as BitPathValue<TForm, P>);\n });\n\n destroyRef.onDestroy(unsub);\n\n return valueSig.asReadonly();\n}\n","/**\n * Angular Dependency Injection for File Upload\n *\n * Minimal upload API integrated with global field validation lifecycle.\n */\n\nimport { computed, inject, signal } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport { injectBitField } from \"./inject-bit-field\";\nimport { BitUploadFn, BitDeleteUploadFn } from \"../core\";\nimport { createUploadHandler, createRemoveHandler } from \"../core/adapters\";\nimport type { InjectBitUploadResult } from \"./types\";\n\nexport function injectBitUpload(\n fieldPath: string,\n uploadFn: BitUploadFn,\n deleteFile?: BitDeleteUploadFn,\n): InjectBitUploadResult {\n const store = inject(BIT_STORE_TOKEN);\n const field = injectBitField(fieldPath);\n let uploadKey: string | null = null;\n const isUploading = signal(false);\n\n const kernelCallbacks = {\n setLoading: (val: boolean) => isUploading.set(val),\n setError: (path: string, msg: string | undefined) =>\n store.write.setError(path, msg),\n setValue: (val: string | null) => field.setValue(val),\n getUploadKey: () => uploadKey,\n setUploadKey: (key: string | null) => {\n uploadKey = key;\n },\n };\n\n const upload = createUploadHandler(fieldPath, uploadFn, kernelCallbacks);\n const remove = createRemoveHandler(fieldPath, deleteFile, kernelCallbacks);\n\n return {\n value: computed(() => field.value()),\n setValue: field.setValue,\n error: computed(() => field.meta.error()),\n isValidating: computed(() => !!field.meta.isValidating() || isUploading()),\n upload,\n remove,\n };\n}\n","import { computed, DestroyRef, inject, signal } from \"@angular/core\";\nimport { observePersistMetaSnapshot } from \"../core\";\nimport { useBitStore } from \"./provider\";\nimport type { InjectBitPersistResult } from \"./types\";\n\nexport function injectBitPersist<\n T extends object = any,\n>(): InjectBitPersistResult {\n const store = useBitStore<T>();\n const persist = signal(store.read.getPersistMetadata());\n\n const unsubscribe = observePersistMetaSnapshot(store, (nextPersist) => {\n persist.set(nextPersist);\n });\n\n const destroyRef = inject(DestroyRef, { optional: true });\n destroyRef?.onDestroy(() => unsubscribe());\n\n const restore = async (): Promise<boolean> => {\n return store.feature.restorePersisted();\n };\n\n const save = async (): Promise<void> => {\n await store.feature.forceSave();\n };\n\n const clear = async (): Promise<void> => {\n await store.feature.clearPersisted();\n };\n\n return {\n restore,\n save,\n clear,\n meta: {\n isSaving: computed(() => persist().isSaving),\n isRestoring: computed(() => persist().isRestoring),\n error: computed(() => persist().error),\n },\n };\n}\n"],"mappings":"wcAAA,OAAS,UAAAA,GAAQ,kBAAAC,OAAgC,gBAI1C,IAAMC,EAAkB,IAAIC,GACjC,WACF,EAEO,SAASC,GACdC,EACU,CACV,MAAO,CACL,QAASH,EACT,SAAUI,EAA+BD,CAAK,CAChD,CACF,CAEO,SAASE,GAAgC,CAC9C,IAAMF,EAAQG,GAAON,EAAiB,CAAE,SAAU,EAAK,CAAC,EAExD,GAAI,CAACG,EACH,MAAM,IAAI,MACR,wJAEF,EAGF,OAAOA,CACT,CC5BA,OAAS,UAAAI,EAAQ,YAAAC,EAAU,UAAAC,GAAQ,cAAAC,OAAkB,gBAK9C,SAASC,IAA0D,CACxE,IAAMC,EAAQC,EAAe,EACvBC,EAAaC,GAAOC,EAAU,EAC9BC,EAAcC,EAAO,CACzB,QAAS,GACT,QAAS,GACT,aAAc,EAChB,CAAC,EACKC,EAAcD,EAAqB,IAAI,EACvCE,EAAeF,EAAgB,IAAI,EAEnCG,EAAMC,EAAwBV,EAAQW,GAAa,CACvDN,EAAY,IAAIM,CAAQ,CAC1B,CAAC,EAEDT,EAAW,UAAU,IAAMO,EAAI,CAAC,EAEhC,IAAMG,EAAUC,EAAS,IAAMR,EAAY,EAAE,OAAO,EAC9CS,EAAeD,EAAS,IAAMR,EAAY,EAAE,YAAY,EACxDU,EAAUF,EAAS,IAAMR,EAAY,EAAE,OAAO,EAE9C,CAAE,WAAAW,EAAY,QAAAC,CAAQ,EAAIC,EAC9BlB,EACA,CACE,qBAAsB,IAAM,CAC1BO,EAAY,IAAI,IAAI,EACpBC,EAAa,IAAI,IAAI,CACvB,EACA,oBAAsBW,GAAW,CAC/BX,EAAa,IAAIW,CAAM,CACzB,EACA,mBAAqBC,GAAU,CAC7Bb,EAAY,IAAIa,CAAK,CACvB,CACF,EACA,CAAE,gBAAiB,EAAK,CAC1B,EAUA,MAAO,CAEL,KAVW,CACX,QAAAR,EACA,QAAAG,EACA,aAAAD,EACA,YAAaP,EAAY,WAAW,EACpC,aAAcC,EAAa,WAAW,CACxC,EAME,UAAWQ,EAAW,UACtB,UAAWA,EAAW,UACtB,WAAYA,EAAW,WACvB,eAAgBA,EAAW,eAE3B,OAAQA,EAAW,OACnB,SAAUA,EAAW,SACrB,MAAOA,EAAW,MAClB,GAAGC,CACL,CACF,CCjEA,OAAS,cAAAI,GAAY,YAAAC,EAAU,UAAAC,GAAQ,UAAAC,OAAc,gBAY9C,SAASC,EAIdC,EAAyC,CACzC,IAAMC,EAAQC,GAAOC,CAAe,EAE9BC,EAAcC,GAAOJ,EAAM,KAAK,cAAcD,CAAI,CAAC,EAEnDM,EAAcL,EAAM,QAAQ,oBAAoBD,EAAOO,GAAc,CACzEH,EAAY,IAAIG,CAAS,CAC3B,CAAC,EAEDL,GAAOM,EAAU,EAAE,UAAU,IAAM,CACjCF,EAAY,EACZG,EAAuBR,EAAOD,CAAc,CAC9C,CAAC,EAED,IAAMU,EAAQC,EAAS,IAAMP,EAAY,EAAE,KAA+B,EACpEQ,EAAYD,EAAS,IAAME,EAAgBT,EAAY,CAAC,CAAC,EACzDU,EAAQH,EAAS,IAAMC,EAAU,EAAE,KAAK,EACxCG,EAAUJ,EAAS,IAAMC,EAAU,EAAE,OAAO,EAC5CI,EAAUL,EAAS,IAAMC,EAAU,EAAE,OAAO,EAC5CK,EAAUN,EAAS,IAAMC,EAAU,EAAE,OAAO,EAC5CM,EAAeP,EAAS,IAAMC,EAAU,EAAE,YAAY,EACtDO,EAAWR,EAAS,IAAMC,EAAU,EAAE,QAAQ,EAC9CQ,EAAaT,EAAS,IAAMC,EAAU,EAAE,UAAU,EAElD,CAAE,gBAAAS,CAAgB,EAAIC,EAAkCrB,EAAOD,CAAI,EAEnEuB,EAAeZ,EAAS,IAAMU,EAAgB,aAAaX,EAAM,CAAC,CAAC,EAEnEc,EACJC,GACG,CACHJ,EAAgB,SAASI,CAAG,CAC9B,EAEMC,EAAU,IAAML,EAAgB,QAAQ,EAExCM,EAAWhB,EAAS,IAAMC,EAAU,EAAE,QAAQ,EAKpD,MAAO,CAEL,MAAAF,EACA,aAAAa,EACA,SAAAC,EACA,QAAAE,EACA,OATcE,GACdJ,EAASK,EAA2BD,CAAC,EAAKA,EAAE,QAAQ,OAAS,KAAQA,CAAC,EAUtE,KAAM,CACJ,MAAAd,EACA,QAAAC,EACA,QAAAC,EACA,QAAAC,EACA,aAAAC,EACA,SAAAC,EACA,WAAAC,EACA,SAAAO,CACF,CACF,CACF,CC5EA,OAAS,YAAAG,GAAU,cAAAC,GAAY,UAAAC,GAAQ,UAAAC,OAAc,gBAU9C,SAASC,GAGdC,EAAS,CACT,IAAMC,EAAQC,GAAOC,CAAe,EAC9BC,EAAaF,GAAOG,EAAU,EAC9BC,EAAaC,EAA6BN,EAAOD,CAAI,EAErDQ,EAAYC,GAChBH,EAAW,UAAU,CACvB,EAEMI,EAAQT,EAAM,QAAQ,cAAcD,EAAM,IAAM,CACpDQ,EAAU,IAAIF,EAAW,UAAU,CAAC,CACtC,CAAC,EAED,OAAAF,EAAW,UAAU,IAAM,CACzBM,EAAM,EACNC,EAAwBV,EAAO,GAAGD,CAAc,GAAG,CACrD,CAAC,EAEM,CACL,OAAQY,GAAS,IAAMN,EAAW,UAAUE,EAAU,CAAC,CAAC,EACxD,OAAQI,GAAS,IAAMJ,EAAU,EAAE,MAAM,EACzC,OAAQF,EAAW,OACnB,QAASA,EAAW,QACpB,OAAQA,EAAW,OACnB,OAAQA,EAAW,OACnB,KAAMA,EAAW,KACjB,KAAMA,EAAW,KACjB,QAASA,EAAW,QACpB,MAAOA,EAAW,KACpB,CACF,CC3CA,OAAS,YAAAO,EAAU,cAAAC,GAAY,UAAAC,GAAQ,UAAAC,OAAc,gBAK9C,SAASC,IAEY,CAC1B,IAAMC,EAAQC,EAAe,EACvBC,EAAaC,GAAOC,EAAU,EAE9BC,EAAOC,GAAOC,EAAwBP,CAAK,CAAC,EAE5CQ,EAAMC,EAA2BT,EAAQU,GAAa,CAC1DL,EAAK,IAAIK,CAAQ,CACnB,CAAC,EAED,OAAAR,EAAW,UAAU,IAAMM,EAAI,CAAC,EAEzB,CACL,QAASG,EAAS,IAAMN,EAAK,EAAE,OAAO,EACtC,QAASM,EAAS,IAAMN,EAAK,EAAE,OAAO,EACtC,aAAcM,EAAS,IAAMN,EAAK,EAAE,YAAY,EAChD,YAAaM,EAAS,IAAMN,EAAK,EAAE,WAAW,EAC9C,KAAM,IAAML,EAAM,QAAQ,KAAK,EAC/B,KAAM,IAAMA,EAAM,QAAQ,KAAK,CACjC,CACF,CC1BA,OAAS,YAAAY,EAAU,cAAAC,GAAY,UAAAC,GAAQ,UAAAC,OAAc,gBAkB9C,SAASC,GAAeC,EAAyC,CACtE,IAAMC,EAAQC,EAAY,EACpBC,EAAgBF,EAAM,KAAK,eAAeD,CAAS,EAEnDI,EAASC,GAAoBF,CAAa,EAE1CG,EAAcC,EAClBN,EACAD,EACCQ,GAAe,CACdJ,EAAO,IAAII,CAAU,CACvB,CACF,EAEmBC,GAAOC,GAAY,CAAE,SAAU,EAAK,CAAC,GAC5C,UAAU,IAAMJ,EAAY,CAAC,EAEzC,IAAMK,EAAW,SAA0C,CACzD,IAAMC,EAAQ,MAAMX,EAAM,QAAQ,SAAS,CAAE,MAAOD,CAAU,CAAC,EACzDa,EAASZ,EAAM,KAAK,eAAeD,CAAS,EAClD,MAAO,CAAE,MAAAY,EAAO,OAAAC,CAAO,CACzB,EAEMC,EAAY,IAAMb,EAAM,KAAK,eAAeD,CAAS,EAErDe,EAAUC,EAAS,IAAM,CAACZ,EAAO,EAAE,SAAS,EAC5Ca,EAAUD,EAAS,IAAMZ,EAAO,EAAE,OAAO,EACzCS,EAASG,EAAS,IAAMZ,EAAO,EAAE,MAAM,EAE7C,MAAO,CACL,UAAAJ,EACA,OAAAI,EACA,OAAAS,EACA,SAAAF,EACA,UAAAG,EACA,QAAAC,EACA,QAAAE,EACA,YAAAX,CACF,CACF,CC1DA,OAAS,YAAAY,EAAU,cAAAC,GAAY,UAAAC,GAAQ,UAAAC,OAAc,gBAM9C,SAASC,GAAeC,EAA4C,CACzE,IAAMC,EAAQC,EAAY,EACpBC,EAAYC,GAAO,CAAC,EAEpBC,EAAQC,EAAS,IAAMN,EAAWG,EAAU,CAAC,GAAK,EAAE,EAEpDI,EAAkB,IAAMP,EAAWG,EAAU,CAAC,GAAK,GACnDK,EAASJ,GACbH,EAAM,KAAK,eAAeM,EAAgB,CAAC,CAC7C,EAEME,EAAe,IAAM,CACzB,IAAMC,EAAYH,EAAgB,EAC5BI,EAAYV,EAAM,KAAK,eAAeS,CAAS,EAC/CE,EAAUJ,EAAO,EAClBK,EAAmBD,EAASD,CAAS,GACxCH,EAAO,IAAIG,CAAS,CAExB,EAEIG,EAAcb,EAAM,QAAQ,qBAC9BM,EAAgB,EAChBE,CACF,EAEMM,EAA0B,IAAM,CACpCD,EAAY,EACZA,EAAcb,EAAM,QAAQ,qBAC1BM,EAAgB,EAChBE,CACF,CACF,EAEmBO,GAAOC,GAAY,CAAE,SAAU,EAAK,CAAC,GAC5C,UAAU,IAAMH,EAAY,CAAC,EAEzC,IAAMI,EAAW,SAA0C,CACzD,IAAMR,EAAYH,EAAgB,EAC5BY,EAAQ,MAAMlB,EAAM,QAAQ,SAAS,CAAE,MAAOS,CAAU,CAAC,EACzDU,EAASnB,EAAM,KAAK,eAAeS,CAAS,EAClD,MAAO,CAAE,MAAAS,EAAO,OAAAC,CAAO,CACzB,EAEMC,EAAY,IAAMpB,EAAM,KAAK,eAAeM,EAAgB,CAAC,EAE7De,EAAO,SAA8B,CACzC,IAAMZ,EAAYH,EAAgB,EAE5BgB,EAActB,EAAM,KAAK,eAAeS,CAAS,EACvD,GAAIT,EAAM,QAAQ,yBAAyBsB,CAAW,EACpD,MAAO,GAGT,IAAMJ,EAAQ,MAAMlB,EAAM,QAAQ,SAAS,CAAE,MAAOS,CAAU,CAAC,EAC/D,GAAIS,EAAO,CACT,IAAMK,EAAW,KAAK,IAAIrB,EAAU,EAAI,EAAGH,EAAW,OAAS,CAAC,EAChEG,EAAU,IAAIqB,CAAQ,EACtBhB,EAAO,IAAIP,EAAM,KAAK,eAAeD,EAAWwB,CAAQ,GAAK,EAAE,CAAC,EAChET,EAAwB,CAC1B,KAAO,CACL,IAAMK,EAASnB,EAAM,KAAK,eAAeS,CAAS,EAC5Ce,EAAkB,OAAO,KAAKL,CAAM,EACtCK,EAAgB,OAAS,GAC3BxB,EAAM,MAAM,kBAAkBwB,CAAe,CAEjD,CACA,OAAON,CACT,EAEMO,EAAO,IAAM,CACjB,IAAMF,EAAW,KAAK,IAAIrB,EAAU,EAAI,EAAG,CAAC,EAC5CA,EAAU,IAAIqB,CAAQ,EACtBhB,EAAO,IAAIP,EAAM,KAAK,eAAeD,EAAWwB,CAAQ,GAAK,EAAE,CAAC,EAChET,EAAwB,CAC1B,EAEMY,EAAQC,GAAuB,CACnC,IAAMJ,EAAW,KAAK,IACpB,EACA,KAAK,IAAII,EAAa,EAAG5B,EAAW,OAAS,CAAC,CAChD,EACAG,EAAU,IAAIqB,CAAQ,EACtBhB,EAAO,IAAIP,EAAM,KAAK,eAAeD,EAAWwB,CAAQ,GAAK,EAAE,CAAC,EAChET,EAAwB,CAC1B,EAEMc,EAAOvB,EAAS,IAAMH,EAAU,EAAI,CAAC,EACrC2B,EAAUxB,EAAS,IAAMH,EAAU,IAAM,CAAC,EAC1C4B,EAASzB,EAAS,IAAMH,EAAU,GAAKH,EAAW,OAAS,CAAC,EAC5DgC,EAAU1B,EAAS,IAAM,CAACE,EAAO,EAAE,SAAS,EAC5CyB,EAAU3B,EAAS,IAAME,EAAO,EAAE,OAAO,EACzCY,GAASd,EAAS,IAAME,EAAO,EAAE,MAAM,EAE7C,MAAO,CACL,KAAAqB,EACA,UAAA1B,EACA,MAAAE,EACA,KAAAiB,EACA,KAAAI,EACA,KAAAC,EACA,QAAAG,EACA,OAAAC,EACA,OAAAvB,EACA,OAAAY,GACA,QAAAY,EACA,QAAAC,EACA,SAAAf,EACA,UAAAG,CACF,CACF,CCnHA,OAAS,cAAAa,GAAY,UAAAC,GAAgB,UAAAC,OAAc,gBAI5C,SAASC,GAGdC,EAAyC,CACzC,IAAMC,EAAQC,EAAmB,EAC3BC,EAAaC,GAAOC,EAAU,EAC9BC,EAAWC,GACfC,EAAaP,EAAM,KAAK,SAAS,EAAE,OAAQD,CAAc,EAIzD,CAAE,MAAOS,CAAW,CACtB,EAEMC,EAAQT,EAAM,QAAQ,cAAcD,EAAOW,GAAM,CACrDL,EAAS,IAAIK,CAA2B,CAC1C,CAAC,EAED,OAAAR,EAAW,UAAUO,CAAK,EAEnBJ,EAAS,WAAW,CAC7B,CCnBA,OAAS,YAAAM,EAAU,UAAAC,GAAQ,UAAAC,OAAc,gBAOlC,SAASC,GACdC,EACAC,EACAC,EACuB,CACvB,IAAMC,EAAQC,GAAOC,CAAe,EAC9BC,EAAQC,EAAeP,CAAS,EAClCQ,EAA2B,KACzBC,EAAcC,GAAO,EAAK,EAE1BC,EAAkB,CACtB,WAAaC,GAAiBH,EAAY,IAAIG,CAAG,EACjD,SAAU,CAACC,EAAcC,IACvBX,EAAM,MAAM,SAASU,EAAMC,CAAG,EAChC,SAAWF,GAAuBN,EAAM,SAASM,CAAG,EACpD,aAAc,IAAMJ,EACpB,aAAeO,GAAuB,CACpCP,EAAYO,CACd,CACF,EAEMC,EAASC,EAAoBjB,EAAWC,EAAUU,CAAe,EACjEO,EAASC,EAAoBnB,EAAWE,EAAYS,CAAe,EAEzE,MAAO,CACL,MAAOS,EAAS,IAAMd,EAAM,MAAM,CAAC,EACnC,SAAUA,EAAM,SAChB,MAAOc,EAAS,IAAMd,EAAM,KAAK,MAAM,CAAC,EACxC,aAAcc,EAAS,IAAM,CAAC,CAACd,EAAM,KAAK,aAAa,GAAKG,EAAY,CAAC,EACzE,OAAAO,EACA,OAAAE,CACF,CACF,CC7CA,OAAS,YAAAG,EAAU,cAAAC,GAAY,UAAAC,GAAQ,UAAAC,OAAc,gBAK9C,SAASC,IAEY,CAC1B,IAAMC,EAAQC,EAAe,EACvBC,EAAUC,GAAOH,EAAM,KAAK,mBAAmB,CAAC,EAEhDI,EAAcC,EAA2BL,EAAQM,GAAgB,CACrEJ,EAAQ,IAAII,CAAW,CACzB,CAAC,EAGD,OADmBC,GAAOC,GAAY,CAAE,SAAU,EAAK,CAAC,GAC5C,UAAU,IAAMJ,EAAY,CAAC,EAclC,CACL,QAbc,SACPJ,EAAM,QAAQ,iBAAiB,EAatC,KAVW,SAA2B,CACtC,MAAMA,EAAM,QAAQ,UAAU,CAChC,EASE,MAPY,SAA2B,CACvC,MAAMA,EAAM,QAAQ,eAAe,CACrC,EAME,KAAM,CACJ,SAAUS,EAAS,IAAMP,EAAQ,EAAE,QAAQ,EAC3C,YAAaO,EAAS,IAAMP,EAAQ,EAAE,WAAW,EACjD,MAAOO,EAAS,IAAMP,EAAQ,EAAE,KAAK,CACvC,CACF,CACF","names":["inject","InjectionToken","BIT_STORE_TOKEN","InjectionToken","provideBitStore","store","createFrameworkStoreAdapter","useBitStore","inject","signal","computed","inject","DestroyRef","injectBitForm","store","useBitStore","destroyRef","inject","DestroyRef","stateSignal","signal","submitError","lastResponse","sub","observeFormMetaSnapshot","nextMeta","isValid","computed","isSubmitting","isDirty","controller","actions","createFrameworkFormBinding","result","error","DestroyRef","computed","inject","signal","injectBitField","path","store","inject","BIT_STORE_TOKEN","stateSignal","signal","unsubscribe","nextState","DestroyRef","cleanupRegisteredField","value","computed","metaState","deriveFieldMeta","error","touched","invalid","isDirty","isValidating","isHidden","isRequired","fieldController","createFrameworkMaskedFieldBinding","displayValue","setValue","val","setBlur","hasError","e","isBitFieldInputEventObject","computed","DestroyRef","inject","signal","injectBitArray","path","store","inject","BIT_STORE_TOKEN","destroyRef","DestroyRef","controller","createArrayBinding","valuesSig","signal","unsub","cleanupRegisteredPrefix","computed","computed","DestroyRef","inject","signal","injectBitHistory","store","useBitStore","destroyRef","inject","DestroyRef","meta","signal","readHistoryMetaSnapshot","sub","observeHistoryMetaSnapshot","nextMeta","computed","computed","DestroyRef","inject","signal","injectBitScope","scopeName","store","useBitStore","initialStatus","status","signal","unsubscribe","observeScopeStatusSnapshot","nextStatus","inject","DestroyRef","validate","valid","errors","getErrors","isValid","computed","isDirty","computed","DestroyRef","inject","signal","injectBitSteps","scopeNames","store","useBitStore","stepIndex","signal","scope","computed","getCurrentScope","status","updateStatus","scopeName","newStatus","current","isScopeStatusEqual","unsubscribe","rebindScopeSubscription","inject","DestroyRef","validate","valid","errors","getErrors","next","scopeFields","newIndex","pathsWithErrors","prev","goTo","targetStep","step","isFirst","isLast","isValid","isDirty","DestroyRef","signal","inject","injectBitWatch","path","store","useBitStore","destroyRef","inject","DestroyRef","valueSig","signal","getDeepValue","valueEqual","unsub","v","computed","inject","signal","injectBitUpload","fieldPath","uploadFn","deleteFile","store","inject","BIT_STORE_TOKEN","field","injectBitField","uploadKey","isUploading","signal","kernelCallbacks","val","path","msg","key","upload","createUploadHandler","remove","createRemoveHandler","computed","computed","DestroyRef","inject","signal","injectBitPersist","store","useBitStore","persist","signal","unsubscribe","observePersistMetaSnapshot","nextPersist","inject","DestroyRef","computed"]}
|
|
1
|
+
{"version":3,"sources":["../../src/angular/provider.ts","../../src/angular/inject-bit-form.ts","../../src/angular/inject-bit-field.ts","../../src/angular/inject-bit-array.ts","../../src/angular/inject-bit-history.ts","../../src/angular/inject-bit-scope.ts","../../src/angular/inject-bit-steps.ts","../../src/angular/inject-bit-watch.ts","../../src/angular/inject-bit-upload.ts","../../src/angular/inject-bit-persist.ts"],"sourcesContent":["import { inject, InjectionToken, Provider } from \"@angular/core\";\nimport type { BitFrameworkStoreApi, BitStoreApi } from \"../core\";\nimport { createFrameworkStoreAdapter } from \"../core\";\n\nexport const BIT_STORE_TOKEN = new InjectionToken<BitFrameworkStoreApi<any>>(\n \"BIT_STORE\",\n);\n\nexport function provideBitStore<T extends object>(\n store: BitFrameworkStoreApi<T> | BitStoreApi<T>,\n): Provider {\n return {\n provide: BIT_STORE_TOKEN,\n useValue: createFrameworkStoreAdapter<T>(store),\n };\n}\n\nexport function useBitStore<T extends object>() {\n const store = inject(BIT_STORE_TOKEN, { optional: true });\n\n if (!store) {\n throw new Error(\n \"BitForm: Não foi possível encontrar a BitStore. \" +\n 'Certifique-se de que você adicionou \"provideBitStore(store)\" nos providers do seu componente.',\n );\n }\n\n return store as BitFrameworkStoreApi<T>;\n}\n","import { signal, computed, inject, DestroyRef } from \"@angular/core\";\nimport { useBitStore } from \"./provider\";\nimport { createFrameworkFormBinding, observeFormMetaSnapshot } from \"../core\";\nimport type { InjectBitFormResult } from \"./types\";\n\nexport function injectBitForm<T extends object>(): InjectBitFormResult<T> {\n const store = useBitStore<T>();\n const destroyRef = inject(DestroyRef);\n const stateSignal = signal({\n isValid: true,\n isDirty: false,\n isSubmitting: false,\n });\n const submitError = signal<Error | null>(null);\n const lastResponse = signal<unknown>(null);\n\n const sub = observeFormMetaSnapshot(store, (nextMeta) => {\n stateSignal.set(nextMeta);\n });\n\n destroyRef.onDestroy(() => sub());\n\n const isValid = computed(() => stateSignal().isValid);\n const isSubmitting = computed(() => stateSignal().isSubmitting);\n const isDirty = computed(() => stateSignal().isDirty);\n\n const { controller, actions } = createFrameworkFormBinding(\n store,\n {\n clearSubmissionState: () => {\n submitError.set(null);\n lastResponse.set(null);\n },\n setSubmissionResult: (result) => {\n lastResponse.set(result);\n },\n setSubmissionError: (error) => {\n submitError.set(error);\n },\n },\n { stopPropagation: true },\n );\n\n const meta = {\n isValid,\n isDirty,\n isSubmitting,\n submitError: submitError.asReadonly(),\n lastResponse: lastResponse.asReadonly(),\n };\n\n return {\n // Metadata (grouped)\n meta,\n // Getters\n getValues: controller.getValues,\n getErrors: controller.getErrors,\n getTouched: controller.getTouched,\n getDirtyValues: controller.getDirtyValues,\n // Main actions (frequent use - flat)\n submit: controller.submit,\n onSubmit: controller.onSubmit,\n reset: controller.reset,\n ...actions,\n };\n}\n","import { DestroyRef, computed, inject, signal } from \"@angular/core\";\nimport {\n BitPath,\n BitPathValue,\n cleanupRegisteredField,\n createFrameworkMaskedFieldBinding,\n deriveFieldMeta,\n isBitFieldInputEventObject,\n} from \"../core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport type { BitFieldInputEvent, InjectBitFieldResult } from \"./types\";\n\nexport function injectBitField<\n _TValue = any,\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P): InjectBitFieldResult<TForm, P> {\n const store = inject(BIT_STORE_TOKEN);\n\n const stateSignal = signal(store.read.getFieldState(path));\n\n const unsubscribe = store.observe.subscribeFieldState(path, (nextState) => {\n stateSignal.set(nextState);\n });\n\n inject(DestroyRef).onDestroy(() => {\n unsubscribe();\n cleanupRegisteredField(store, path as string);\n });\n\n const value = computed(() => stateSignal().value as BitPathValue<TForm, P>);\n const metaState = computed(() => deriveFieldMeta(stateSignal()));\n const error = computed(() => metaState().error);\n const touched = computed(() => metaState().touched);\n const invalid = computed(() => metaState().invalid);\n const isDirty = computed(() => metaState().isDirty);\n const isValidating = computed(() => metaState().isValidating);\n const isHidden = computed(() => metaState().isHidden);\n const isRequired = computed(() => metaState().isRequired);\n\n const { fieldController } = createFrameworkMaskedFieldBinding(store, path);\n\n const displayValue = computed(() => fieldController.displayValue(value()));\n\n const setValue = (\n val: BitPathValue<TForm, P> | string | number | null | undefined,\n ) => {\n fieldController.setValue(val);\n };\n\n const setBlur = () => fieldController.setBlur();\n\n const hasError = computed(() => metaState().hasError);\n\n const update = (e: BitFieldInputEvent) =>\n setValue(isBitFieldInputEventObject(e) ? (e.target?.value ?? null) : e);\n\n return {\n // Main handlers and values (flat)\n value,\n displayValue,\n setValue,\n setBlur,\n update,\n // Metadata (grouped)\n meta: {\n error,\n touched,\n invalid,\n isDirty,\n isValidating,\n isHidden,\n isRequired,\n hasError,\n },\n };\n}\n","import { computed, DestroyRef, inject, signal } from \"@angular/core\";\nimport {\n BitArrayItem,\n BitArrayPath,\n BitPathValue,\n cleanupRegisteredPrefix,\n createArrayBinding,\n} from \"../core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\n\nexport function injectBitArray<\n TForm extends object = any,\n P extends BitArrayPath<TForm> = BitArrayPath<TForm>,\n>(path: P) {\n const store = inject(BIT_STORE_TOKEN);\n const destroyRef = inject(DestroyRef);\n const controller = createArrayBinding<TForm, P>(store, path);\n\n const valuesSig = signal<BitArrayItem<BitPathValue<TForm, P>>[]>(\n controller.readItems(),\n );\n\n const unsub = store.observe.subscribePath(path, () => {\n valuesSig.set(controller.readItems());\n });\n\n destroyRef.onDestroy(() => {\n unsub();\n cleanupRegisteredPrefix(store, `${path as string}.`);\n });\n\n return {\n fields: computed(() => controller.getFields(valuesSig())),\n length: computed(() => valuesSig().length),\n append: controller.append,\n prepend: controller.prepend,\n remove: controller.remove,\n insert: controller.insert,\n swap: controller.swap,\n move: controller.move,\n replace: controller.replace,\n clear: controller.clear,\n };\n}\n","import { computed, DestroyRef, inject, signal } from \"@angular/core\";\nimport { observeHistoryMetaSnapshot, readHistoryMetaSnapshot } from \"../core\";\nimport { useBitStore } from \"./provider\";\nimport type { InjectBitHistoryResult } from \"./types\";\n\nexport function injectBitHistory<\n T extends object = any,\n>(): InjectBitHistoryResult {\n const store = useBitStore<T>();\n const destroyRef = inject(DestroyRef);\n\n const meta = signal(readHistoryMetaSnapshot(store));\n\n const sub = observeHistoryMetaSnapshot(store, (nextMeta) => {\n meta.set(nextMeta);\n });\n\n destroyRef.onDestroy(() => sub());\n\n return {\n canUndo: computed(() => meta().canUndo),\n canRedo: computed(() => meta().canRedo),\n historyIndex: computed(() => meta().historyIndex),\n historySize: computed(() => meta().historySize),\n undo: () => store.feature.undo(),\n redo: () => store.feature.redo(),\n };\n}\n","import type { Signal } from \"@angular/core\";\nimport { computed, DestroyRef, inject, signal } from \"@angular/core\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { observeScopeStatusSnapshot } from \"../core\";\nimport { useBitStore } from \"./provider\";\n\nexport type { ScopeStatus, ValidateScopeResult };\n\ninterface InjectBitScopeResult {\n scopeName: string;\n status: Signal<ScopeStatus>;\n errors: Signal<Record<string, string>>;\n validate: () => Promise<ValidateScopeResult>;\n getErrors: () => Record<string, string>;\n isValid: Signal<boolean>;\n isDirty: Signal<boolean>;\n unsubscribe: () => void;\n}\n\nexport function injectBitScope(scopeName: string): InjectBitScopeResult {\n const store = useBitStore();\n const initialStatus = store.read.getScopeStatus(scopeName);\n\n const status = signal<ScopeStatus>(initialStatus);\n\n const unsubscribe = observeScopeStatusSnapshot(\n store,\n scopeName,\n (nextStatus) => {\n status.set(nextStatus);\n },\n );\n\n const destroyRef = inject(DestroyRef, { optional: true });\n destroyRef?.onDestroy(() => unsubscribe());\n\n const validate = async (): Promise<ValidateScopeResult> => {\n const valid = await store.feature.validate({ scope: scopeName });\n const errors = store.read.getScopeErrors(scopeName);\n return { valid, errors };\n };\n\n const getErrors = () => store.read.getScopeErrors(scopeName);\n\n const isValid = computed(() => !status().hasErrors);\n const isDirty = computed(() => status().isDirty);\n const errors = computed(() => status().errors);\n\n return {\n scopeName,\n status,\n errors,\n validate,\n getErrors,\n isValid,\n isDirty,\n unsubscribe,\n };\n}\n","import { computed, DestroyRef, inject, signal } from \"@angular/core\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { isScopeStatusEqual } from \"../core\";\nimport { useBitStore } from \"./provider\";\nimport type { InjectBitStepsResult } from \"./types\";\n\nexport function injectBitSteps(scopeNames: string[]): InjectBitStepsResult {\n const store = useBitStore();\n const stepIndex = signal(0);\n\n const scope = computed(() => scopeNames[stepIndex()] ?? \"\");\n\n const getCurrentScope = () => scopeNames[stepIndex()] ?? \"\";\n const status = signal<ScopeStatus>(\n store.read.getScopeStatus(getCurrentScope()),\n );\n\n const updateStatus = () => {\n const scopeName = getCurrentScope();\n const newStatus = store.read.getScopeStatus(scopeName);\n const current = status();\n if (!isScopeStatusEqual(current, newStatus)) {\n status.set(newStatus);\n }\n };\n\n let unsubscribe = store.observe.subscribeScopeStatus(\n getCurrentScope(),\n updateStatus,\n );\n\n const rebindScopeSubscription = () => {\n unsubscribe();\n unsubscribe = store.observe.subscribeScopeStatus(\n getCurrentScope(),\n updateStatus,\n );\n };\n\n const destroyRef = inject(DestroyRef, { optional: true });\n destroyRef?.onDestroy(() => unsubscribe());\n\n const validate = async (): Promise<ValidateScopeResult> => {\n const scopeName = getCurrentScope();\n const valid = await store.feature.validate({ scope: scopeName });\n const errors = store.read.getScopeErrors(scopeName);\n return { valid, errors };\n };\n\n const getErrors = () => store.read.getScopeErrors(getCurrentScope());\n\n const next = async (): Promise<boolean> => {\n const scopeName = getCurrentScope();\n\n const scopeFields = store.read.getScopeFields(scopeName);\n if (store.feature.hasValidationsInProgress(scopeFields)) {\n return false;\n }\n\n const valid = await store.feature.validate({ scope: scopeName });\n if (valid) {\n const newIndex = Math.min(stepIndex() + 1, scopeNames.length - 1);\n stepIndex.set(newIndex);\n status.set(store.read.getScopeStatus(scopeNames[newIndex] ?? \"\"));\n rebindScopeSubscription();\n } else {\n const errors = store.read.getScopeErrors(scopeName);\n const pathsWithErrors = Object.keys(errors);\n if (pathsWithErrors.length > 0) {\n store.write.markFieldsTouched(pathsWithErrors);\n }\n }\n return valid;\n };\n\n const prev = () => {\n const newIndex = Math.max(stepIndex() - 1, 0);\n stepIndex.set(newIndex);\n status.set(store.read.getScopeStatus(scopeNames[newIndex] ?? \"\"));\n rebindScopeSubscription();\n };\n\n const goTo = (targetStep: number) => {\n const newIndex = Math.max(\n 0,\n Math.min(targetStep - 1, scopeNames.length - 1),\n );\n stepIndex.set(newIndex);\n status.set(store.read.getScopeStatus(scopeNames[newIndex] ?? \"\"));\n rebindScopeSubscription();\n };\n\n const step = computed(() => stepIndex() + 1);\n const isFirst = computed(() => stepIndex() === 0);\n const isLast = computed(() => stepIndex() >= scopeNames.length - 1);\n const isValid = computed(() => !status().hasErrors);\n const isDirty = computed(() => status().isDirty);\n const errors = computed(() => status().errors);\n\n return {\n step,\n stepIndex,\n scope,\n next,\n prev,\n goTo,\n isFirst,\n isLast,\n status,\n errors,\n isValid,\n isDirty,\n validate,\n getErrors,\n };\n}\n","import { DestroyRef, signal, Signal, inject } from \"@angular/core\";\nimport { useBitStore } from \"./provider\";\nimport { getDeepValue, valueEqual, BitPath, BitPathValue } from \"../core\";\n\nexport function injectBitWatch<\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P): Signal<BitPathValue<TForm, P>> {\n const store = useBitStore<TForm>();\n const destroyRef = inject(DestroyRef);\n const valueSig = signal<BitPathValue<TForm, P>>(\n getDeepValue(store.read.getState().values, path as string) as BitPathValue<\n TForm,\n P\n >,\n { equal: valueEqual },\n );\n\n const unsub = store.observe.subscribePath(path, (v) => {\n valueSig.set(v as BitPathValue<TForm, P>);\n });\n\n destroyRef.onDestroy(unsub);\n\n return valueSig.asReadonly();\n}\n","/**\n * Angular Dependency Injection for File Upload\n *\n * Minimal upload API integrated with global field validation lifecycle.\n */\n\nimport { computed, inject, signal } from \"@angular/core\";\nimport type { BitDeleteUploadFn, BitUploadFn } from \"../core\";\nimport { createRemoveHandler, createUploadHandler } from \"../core/adapters\";\nimport { injectBitField } from \"./inject-bit-field\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport type { InjectBitUploadResult } from \"./types\";\n\nexport function injectBitUpload<\n TMetadata extends Record<string, unknown> = Record<string, unknown>,\n>(\n fieldPath: string,\n uploadFn: BitUploadFn<TMetadata>,\n deleteFile?: BitDeleteUploadFn,\n): InjectBitUploadResult {\n const store = inject(BIT_STORE_TOKEN);\n const field = injectBitField(fieldPath);\n let uploadKey: string | null = null;\n const isUploading = signal(false);\n\n const kernelCallbacks = {\n setLoading: (val: boolean) => isUploading.set(val),\n setError: (path: string, msg: string | undefined) =>\n store.write.setError(path, msg),\n setValue: (val: string | null) => field.setValue(val),\n getUploadKey: () => uploadKey,\n setUploadKey: (key: string | null) => {\n uploadKey = key;\n },\n };\n\n const upload = createUploadHandler(fieldPath, uploadFn, kernelCallbacks);\n const remove = createRemoveHandler(fieldPath, deleteFile, kernelCallbacks);\n\n return {\n value: computed(() => field.value()),\n setValue: field.setValue,\n error: computed(() => field.meta.error()),\n isValidating: computed(() => !!field.meta.isValidating() || isUploading()),\n upload,\n remove,\n };\n}\n","import { computed, DestroyRef, inject, signal } from \"@angular/core\";\nimport { observePersistMetaSnapshot } from \"../core\";\nimport { useBitStore } from \"./provider\";\nimport type { InjectBitPersistResult } from \"./types\";\n\nexport function injectBitPersist<\n T extends object = any,\n>(): InjectBitPersistResult {\n const store = useBitStore<T>();\n const persist = signal(store.read.getPersistMetadata());\n\n const unsubscribe = observePersistMetaSnapshot(store, (nextPersist) => {\n persist.set(nextPersist);\n });\n\n const destroyRef = inject(DestroyRef, { optional: true });\n destroyRef?.onDestroy(() => unsubscribe());\n\n const restore = async (): Promise<boolean> => {\n return store.feature.restorePersisted();\n };\n\n const save = async (): Promise<void> => {\n await store.feature.forceSave();\n };\n\n const clear = async (): Promise<void> => {\n await store.feature.clearPersisted();\n };\n\n return {\n restore,\n save,\n clear,\n meta: {\n isSaving: computed(() => persist().isSaving),\n isRestoring: computed(() => persist().isRestoring),\n error: computed(() => persist().error),\n },\n };\n}\n"],"mappings":"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","names":["inject","InjectionToken","BIT_STORE_TOKEN","InjectionToken","provideBitStore","store","createFrameworkStoreAdapter","useBitStore","inject","signal","computed","inject","DestroyRef","injectBitForm","store","useBitStore","destroyRef","inject","DestroyRef","stateSignal","signal","submitError","lastResponse","sub","observeFormMetaSnapshot","nextMeta","isValid","computed","isSubmitting","isDirty","controller","actions","createFrameworkFormBinding","result","error","DestroyRef","computed","inject","signal","injectBitField","path","store","inject","BIT_STORE_TOKEN","stateSignal","signal","unsubscribe","nextState","DestroyRef","cleanupRegisteredField","value","computed","metaState","deriveFieldMeta","error","touched","invalid","isDirty","isValidating","isHidden","isRequired","fieldController","createFrameworkMaskedFieldBinding","displayValue","setValue","val","setBlur","hasError","e","isBitFieldInputEventObject","computed","DestroyRef","inject","signal","injectBitArray","path","store","inject","BIT_STORE_TOKEN","destroyRef","DestroyRef","controller","createArrayBinding","valuesSig","signal","unsub","cleanupRegisteredPrefix","computed","computed","DestroyRef","inject","signal","injectBitHistory","store","useBitStore","destroyRef","inject","DestroyRef","meta","signal","readHistoryMetaSnapshot","sub","observeHistoryMetaSnapshot","nextMeta","computed","computed","DestroyRef","inject","signal","injectBitScope","scopeName","store","useBitStore","initialStatus","status","signal","unsubscribe","observeScopeStatusSnapshot","nextStatus","inject","DestroyRef","validate","valid","errors","getErrors","isValid","computed","isDirty","computed","DestroyRef","inject","signal","injectBitSteps","scopeNames","store","useBitStore","stepIndex","signal","scope","computed","getCurrentScope","status","updateStatus","scopeName","newStatus","current","isScopeStatusEqual","unsubscribe","rebindScopeSubscription","inject","DestroyRef","validate","valid","errors","getErrors","next","scopeFields","newIndex","pathsWithErrors","prev","goTo","targetStep","step","isFirst","isLast","isValid","isDirty","DestroyRef","signal","inject","injectBitWatch","path","store","useBitStore","destroyRef","inject","DestroyRef","valueSig","signal","getDeepValue","valueEqual","unsub","v","computed","inject","signal","injectBitUpload","fieldPath","uploadFn","deleteFile","store","inject","BIT_STORE_TOKEN","field","injectBitField","uploadKey","isUploading","signal","kernelCallbacks","val","path","msg","key","upload","createUploadHandler","remove","createRemoveHandler","computed","computed","DestroyRef","inject","signal","injectBitPersist","store","useBitStore","persist","signal","unsubscribe","observePersistMetaSnapshot","nextPersist","inject","DestroyRef","computed"]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { g as BitState } from './state-types-8bUndWfg.js';
|
|
2
|
+
|
|
3
|
+
interface BitBusStorePort<T extends object = object> {
|
|
4
|
+
getState: () => Readonly<BitState<T>>;
|
|
5
|
+
getHistoryMetadata: () => {
|
|
6
|
+
canUndo: boolean;
|
|
7
|
+
canRedo: boolean;
|
|
8
|
+
historySize: number;
|
|
9
|
+
historyIndex: number;
|
|
10
|
+
};
|
|
11
|
+
undo: () => void;
|
|
12
|
+
redo: () => void;
|
|
13
|
+
reset: () => void;
|
|
14
|
+
}
|
|
15
|
+
type BitBusListener<T extends object = object> = (storeId: string, newState: BitState<T>) => void;
|
|
16
|
+
interface BitFormGlobal {
|
|
17
|
+
stores: Record<string, BitBusStorePort<object>>;
|
|
18
|
+
listeners: Set<BitBusListener>;
|
|
19
|
+
dispatch: (storeId: string, state: BitState<object>) => void;
|
|
20
|
+
subscribe: (fn: BitBusListener) => () => void;
|
|
21
|
+
}
|
|
22
|
+
/** Alias for {@link BitFormGlobal}. Prefer this name in user-facing APIs. */
|
|
23
|
+
type BitBus = BitFormGlobal;
|
|
24
|
+
|
|
25
|
+
declare global {
|
|
26
|
+
var __BIT_FORM__: BitFormGlobal | undefined;
|
|
27
|
+
}
|
|
28
|
+
declare const bitBus: BitFormGlobal;
|
|
29
|
+
/**
|
|
30
|
+
* Creates an isolated bus instance — not connected to the browser global.
|
|
31
|
+
* Use this in SSR / Edge Runtime environments (e.g. Next.js Edge) where a
|
|
32
|
+
* shared `globalThis` singleton is unsafe across request contexts.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* // _app.tsx (SSR-safe)
|
|
36
|
+
* const bus = createBitBus();
|
|
37
|
+
* const store = createBitStore({ bus, initialValues: { ... } });
|
|
38
|
+
*/
|
|
39
|
+
declare function createBitBus(): BitFormGlobal;
|
|
40
|
+
|
|
41
|
+
export { type BitBus as B, type BitBusListener as a, type BitBusStorePort as b, type BitFormGlobal as c, bitBus as d, createBitBus as e };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { g as BitState } from './state-types-8bUndWfg.cjs';
|
|
2
|
+
|
|
3
|
+
interface BitBusStorePort<T extends object = object> {
|
|
4
|
+
getState: () => Readonly<BitState<T>>;
|
|
5
|
+
getHistoryMetadata: () => {
|
|
6
|
+
canUndo: boolean;
|
|
7
|
+
canRedo: boolean;
|
|
8
|
+
historySize: number;
|
|
9
|
+
historyIndex: number;
|
|
10
|
+
};
|
|
11
|
+
undo: () => void;
|
|
12
|
+
redo: () => void;
|
|
13
|
+
reset: () => void;
|
|
14
|
+
}
|
|
15
|
+
type BitBusListener<T extends object = object> = (storeId: string, newState: BitState<T>) => void;
|
|
16
|
+
interface BitFormGlobal {
|
|
17
|
+
stores: Record<string, BitBusStorePort<object>>;
|
|
18
|
+
listeners: Set<BitBusListener>;
|
|
19
|
+
dispatch: (storeId: string, state: BitState<object>) => void;
|
|
20
|
+
subscribe: (fn: BitBusListener) => () => void;
|
|
21
|
+
}
|
|
22
|
+
/** Alias for {@link BitFormGlobal}. Prefer this name in user-facing APIs. */
|
|
23
|
+
type BitBus = BitFormGlobal;
|
|
24
|
+
|
|
25
|
+
declare global {
|
|
26
|
+
var __BIT_FORM__: BitFormGlobal | undefined;
|
|
27
|
+
}
|
|
28
|
+
declare const bitBus: BitFormGlobal;
|
|
29
|
+
/**
|
|
30
|
+
* Creates an isolated bus instance — not connected to the browser global.
|
|
31
|
+
* Use this in SSR / Edge Runtime environments (e.g. Next.js Edge) where a
|
|
32
|
+
* shared `globalThis` singleton is unsafe across request contexts.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* // _app.tsx (SSR-safe)
|
|
36
|
+
* const bus = createBitBus();
|
|
37
|
+
* const store = createBitStore({ bus, initialValues: { ... } });
|
|
38
|
+
*/
|
|
39
|
+
declare function createBitBus(): BitFormGlobal;
|
|
40
|
+
|
|
41
|
+
export { type BitBus as B, type BitBusListener as a, type BitBusStorePort as b, type BitFormGlobal as c, bitBus as d, createBitBus as e };
|