@lehnihon/bit-form 2.1.2 → 2.2.0
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 +6 -0
- package/dist/angular/index.cjs +1 -1
- package/dist/angular/index.d.cts +15 -3
- package/dist/angular/index.d.ts +15 -3
- package/dist/angular/index.js +1 -1
- package/dist/angular/index.js.map +1 -1
- package/dist/{bus-vCbulIYH.d.cts → bus-70e4jnBj.d.cts} +106 -1
- package/dist/{bus-vCbulIYH.d.ts → bus-70e4jnBj.d.ts} +106 -1
- package/dist/chunk-25Q2XJBV.cjs +133 -0
- package/dist/{chunk-2QNUW6ZN.cjs.map → chunk-25Q2XJBV.cjs.map} +1 -1
- package/dist/chunk-2HAQ3QEQ.js +133 -0
- package/dist/chunk-2HAQ3QEQ.js.map +1 -0
- package/dist/chunk-HTB6QIUQ.js +2 -0
- package/dist/chunk-HTB6QIUQ.js.map +1 -0
- package/dist/chunk-W22D7QVJ.cjs +2 -0
- package/dist/chunk-W22D7QVJ.cjs.map +1 -0
- package/dist/devtools/bridge.cjs +1 -1
- package/dist/devtools/bridge.js +1 -1
- package/dist/devtools/index.cjs +1 -1
- package/dist/devtools/index.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +1 -1
- package/dist/{public-types-ChP5j3xc.d.ts → public-types-BVZ16kgZ.d.ts} +6 -1
- package/dist/{public-types-Nv__uZTR.d.cts → public-types-r2aP68Gg.d.cts} +6 -1
- package/dist/react/index.cjs +1 -1
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +5 -5
- package/dist/react/index.d.ts +5 -5
- 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 +10 -12
- package/dist/react-native/index.d.ts +10 -12
- package/dist/react-native/index.js +1 -1
- package/dist/react-native/index.js.map +1 -1
- package/dist/resolvers/joi.d.cts +1 -1
- package/dist/resolvers/joi.d.ts +1 -1
- package/dist/resolvers/yup.d.cts +1 -1
- package/dist/resolvers/yup.d.ts +1 -1
- package/dist/resolvers/zod.d.cts +1 -1
- package/dist/resolvers/zod.d.ts +1 -1
- package/dist/{use-bit-watch-hA0AqCkC.d.ts → use-bit-persist-COdNw_fv.d.ts} +15 -3
- package/dist/{use-bit-watch-BRekIj2W.d.cts → use-bit-persist-JshPvwwy.d.cts} +15 -3
- package/dist/vue/index.cjs +1 -1
- package/dist/vue/index.d.cts +16 -4
- package/dist/vue/index.d.ts +16 -4
- package/dist/vue/index.js +1 -1
- package/dist/vue/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-2QNUW6ZN.cjs +0 -133
- package/dist/chunk-F6LJWWEW.js +0 -2
- package/dist/chunk-F6LJWWEW.js.map +0 -1
- package/dist/chunk-LPRLSFPT.cjs +0 -2
- package/dist/chunk-LPRLSFPT.cjs.map +0 -1
- package/dist/chunk-N6IA7HQL.js +0 -133
- package/dist/chunk-N6IA7HQL.js.map +0 -1
package/README.md
CHANGED
|
@@ -51,6 +51,8 @@ Bit-Form is a powerful, framework-agnostic library designed to handle complex va
|
|
|
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.
|
|
53
53
|
- **Field Arrays:** First-class support for dynamic lists with native methods to append, prepend, move, and swap items.
|
|
54
|
+
- **Draft Persistence:** Optional draft persistence with autosave, manual restore, manual clear, and custom storage adapters (Web `localStorage`, React Native `AsyncStorage`, or your own adapter).
|
|
55
|
+
- **Lifecycle Plugins:** Plugin system for lifecycle observability (`beforeValidate`, `afterValidate`, `beforeSubmit`, `afterSubmit`, `onFieldChange`, `onError`).
|
|
54
56
|
- **Time-Travel DevTools:** Full history support with Undo/Redo capabilities and a Remote Inspector CLI via WebSocket.
|
|
55
57
|
|
|
56
58
|
## 🏎 Performance & Comparison
|
|
@@ -149,6 +151,7 @@ The complete documentation is available in the `/docs` folder. Explore the guide
|
|
|
149
151
|
### 🖼 Framework Guides
|
|
150
152
|
|
|
151
153
|
- **[React](./docs/frameworks/react.md)**: Using hooks and Context Provider.
|
|
154
|
+
- **[Next.js](./docs/frameworks/next.md)**: Using Bit-Form in App Router/Pages Router with client boundaries (`"use client"`).
|
|
152
155
|
- **[React + shadcn/ui](./docs/frameworks/react-shadcn.md)**: Generate form wrappers with `bit-form add shadcn` (Input, Textarea, Select, Checkbox, Switch, RadioGroup).
|
|
153
156
|
- **[React Native](./docs/frameworks/react-native.md)**: Mobile specifics and `onChangeText` mapping.
|
|
154
157
|
- **[Vue](./docs/frameworks/vue.md)**: Using composables and InjectionKeys.
|
|
@@ -161,6 +164,8 @@ The complete documentation is available in the `/docs` folder. Explore the guide
|
|
|
161
164
|
- **[Conditional Logic](./docs/features/conditional-logic.md)**: Managing field dependencies.
|
|
162
165
|
- **[Computed Fields](./docs/features/computed-fields.md)**: Handling derived form values.
|
|
163
166
|
- **[Field Arrays](./docs/features/field-arrays.md)**: Managing dynamic lists of fields.
|
|
167
|
+
- **[Draft Persistence](./docs/features/persistence.md)**: Save, restore, and clear local drafts with `useBitPersist`/`injectBitPersist` and store-level `persist` config.
|
|
168
|
+
- **[Lifecycle Plugins](./docs/features/plugins.md)**: Add plugins to observe validation/submit/field-change events with fail-open behavior.
|
|
164
169
|
- **[File Uploads](./docs/features/file-uploads.md)**: Backend-first upload integration with `useBitUpload` and `injectBitUpload`.
|
|
165
170
|
- **[Scopes](./docs/features/scopes.md)**: Per-step validation and status for wizard forms (`useBitScope`, `injectBitScope`).
|
|
166
171
|
- **[History & Time Travel](./docs/features/history-and-time-travel.md)**: Using Undo/Redo features.
|
|
@@ -169,6 +174,7 @@ The complete documentation is available in the `/docs` folder. Explore the guide
|
|
|
169
174
|
|
|
170
175
|
- **[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.
|
|
171
176
|
- **[Complete Form Example](./docs/examples/complete-form-example.md)**: End-to-end example with masks, asyncValidate, conditional logic, scopes, history, and DevTools.
|
|
177
|
+
- **[Upload Integration Example](./docs/examples/upload-integration-example.md)**: Backend-first upload example using `useBitUpload`/`injectBitUpload`.
|
|
172
178
|
- **[Server Errors](./docs/examples/server-errors.md)**: Client validation (resolver/asyncValidate) vs API 422 handling (setServerErrors, onSubmit).
|
|
173
179
|
|
|
174
180
|
### 🔍 DevTools & CLI
|
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 _chunk2QNUW6ZNcjs = require('../chunk-2QNUW6ZN.cjs');var _core = require('@angular/core');var F=new (0, _core.InjectionToken)("BIT_STORE");function L(t){return{provide:F,useValue:t}}function g(){let t=_core.inject.call(void 0, F,{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 Q(){let t=g(),e=_core.inject.call(void 0, _core.DestroyRef),r=_core.signal.call(void 0, t.getState()),i=_core.signal.call(void 0, null),a=_core.signal.call(void 0, null),n=t.subscribe(()=>{r.set(t.getState())});e.onDestroy(()=>n());let p=_core.computed.call(void 0, ()=>r().isValid),s=_core.computed.call(void 0, ()=>r().isSubmitting),o=_core.computed.call(void 0, ()=>r().isDirty),l=()=>r().values,c=()=>r().errors,y=()=>r().touched,j=()=>t.getDirtyValues(),S=b=>B=>(_optionalChain([B, 'optionalAccess', _2 => _2.preventDefault, 'call', _3 => _3()]),_optionalChain([B, 'optionalAccess', _4 => _4.stopPropagation, 'call', _5 => _5()]),t.submit(b)),E=b=>B=>(_optionalChain([B, 'optionalAccess', _6 => _6.preventDefault, 'call', _7 => _7()]),_optionalChain([B, 'optionalAccess', _8 => _8.stopPropagation, 'call', _9 => _9()]),i.set(null),t.submit(async(u,m)=>{try{let d=await b(u,m);a.set(d),i.set(null)}catch(d){_chunk2QNUW6ZNcjs.h.call(void 0, d)?t.setServerErrors(_chunk2QNUW6ZNcjs.i.call(void 0, d)):i.set(d instanceof Error?d:new Error(String(d)))}})),T=()=>{t.reset(),i.set(null),a.set(null)};return{meta:{isValid:p,isDirty:o,isSubmitting:s,submitError:i.asReadonly(),lastResponse:a.asReadonly()},getValues:l,getErrors:c,getTouched:y,getDirtyValues:j,submit:S,onSubmit:E,reset:T,setValues:t.setValues.bind(t),setError:t.setError.bind(t),setErrors:t.setErrors.bind(t),setServerErrors:t.setServerErrors.bind(t),setField:t.setField.bind(t),blurField:t.blurField.bind(t),validate:t.validate.bind(t),mutations:{pushItem:t.pushItem.bind(t),prependItem:t.prependItem.bind(t),removeItem:t.removeItem.bind(t),insertItem:t.insertItem.bind(t),moveItem:t.moveItem.bind(t),swapItems:t.swapItems.bind(t)}}}function w(t){let e=_core.inject.call(void 0, F),r=_core.signal.call(void 0, e.getState()),i=e.subscribe(()=>{r.set(e.getState())});_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>{i(),e.unregisterField&&e.unregisterField(t)});let a=_core.computed.call(void 0, ()=>_chunk2QNUW6ZNcjs.e.call(void 0, r().values,t)),n=_core.computed.call(void 0, ()=>r().errors[t]),p=_core.computed.call(void 0, ()=>!!r().touched[t]),s=_core.computed.call(void 0, ()=>p()?n():void 0),o=_core.computed.call(void 0, ()=>(r(),e.isFieldDirty(t))),l=_core.computed.call(void 0, ()=>(r(),e.isFieldValidating(t))),c=_core.computed.call(void 0, ()=>(r(),e.isHidden(t))),y=_core.computed.call(void 0, ()=>(r(),e.isRequired(t))),j=_core.computed.call(void 0, ()=>p()&&!!n()),S=e.resolveMask(t),E=_core.computed.call(void 0, ()=>{let u=a();return u==null||u===""?"":S?S.format(u):String(u)}),T=u=>{if(!S){e.setField(t,u);return}let m=String(_nullishCoalesce(u, () => ("")));e.setField(t,S.parse(m))},I=()=>e.blurField(t),b=_core.computed.call(void 0, ()=>!!n());return{value:a,displayValue:E,setValue:T,setBlur:I,update:u=>T(_nullishCoalesce(_optionalChain([u, 'optionalAccess', _10 => _10.target, 'optionalAccess', _11 => _11.value]), () => (u))),meta:{error:s,touched:p,invalid:j,isDirty:o,isValidating:l,isHidden:c,isRequired:y,hasError:b}}}var R=()=>Math.random().toString(36).substring(2,9);function tt(t){let e=_core.inject.call(void 0, F),r=_core.inject.call(void 0, _core.DestroyRef),i=()=>{let s=_chunk2QNUW6ZNcjs.e.call(void 0, e.getState().values,t);return Array.isArray(s)?s:[]},a=_core.signal.call(void 0, i()),n=_core.signal.call(void 0, a().map(R)),p=e.subscribe(()=>{let s=i(),o=_core.untracked.call(void 0, n);a.set(s),s.length!==o.length&&(s.length>o.length?n.set([...o,...Array.from({length:s.length-o.length},R)]):n.set(o.slice(0,s.length)))});return r.onDestroy(()=>{p(),e.unregisterPrefix&&e.unregisterPrefix(`${t}.`)}),{fields:_core.computed.call(void 0, ()=>a().map((s,o)=>({key:n()[o]||`temp-${o}`,value:s,index:o}))),length:_core.computed.call(void 0, ()=>a().length),append:s=>{n.update(o=>[...o,R()]),e.pushItem(t,s)},prepend:s=>{n.update(o=>[R(),...o]),e.prependItem(t,s)},remove:s=>{n.update(o=>o.filter((l,c)=>c!==s)),e.removeItem(t,s)},insert:(s,o)=>{n.update(l=>{let c=[...l];return c.splice(s,0,R()),c}),e.insertItem(t,s,o)},swap:(s,o)=>{n.update(l=>{let c=[...l];return[c[s],c[o]]=[c[o],c[s]],c}),e.swapItems(t,s,o)},move:(s,o)=>{n.update(l=>{let c=[...l],[y]=c.splice(s,1);return c.splice(o,0,y),c}),e.moveItem(t,s,o)},replace:s=>{n.set(s.map(()=>R())),e.setField(t,s)},clear:()=>{n.set([]),e.setField(t,[])}}}function ot(){let t=g(),e=_core.inject.call(void 0, _core.DestroyRef),r=_core.signal.call(void 0, t.getHistoryMetadata()),i=t.subscribe(()=>{r.set(t.getHistoryMetadata())});return e.onDestroy(()=>i()),{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.undo(),redo:()=>t.redo()}}function ct(t,e){let r=Object.keys(t),i=Object.keys(e);return r.length!==i.length?!1:r.every(a=>t[a]===e[a])}function ut(t){let e=g(),r=e.getStepStatus(t),i=_core.signal.call(void 0, r),a=e.subscribe(()=>{let c=e.getStepStatus(t),y=i();(c.hasErrors!==y.hasErrors||c.isDirty!==y.isDirty||!ct(c.errors,y.errors))&&i.set(c)});try{_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>a())}catch (e2){}let n=async()=>{let c=await e.validate({scope:t}),y=e.getStepErrors(t);return{valid:c,errors:y}},p=()=>e.getStepErrors(t),s=_core.computed.call(void 0, ()=>!i().hasErrors),o=_core.computed.call(void 0, ()=>i().isDirty),l=_core.computed.call(void 0, ()=>i().errors);return{scopeName:t,status:i,errors:l,validate:n,getErrors:p,isValid:s,isDirty:o,unsubscribe:a}}function mt(t,e){let r=Object.keys(t),i=Object.keys(e);return r.length!==i.length?!1:r.every(a=>t[a]===e[a])}function pt(t){let e=g(),r=_core.signal.call(void 0, 0),i=_core.computed.call(void 0, ()=>_nullishCoalesce(t[r()], () => (""))),a=()=>_nullishCoalesce(t[r()], () => ("")),n=_core.signal.call(void 0, e.getStepStatus(a())),p=()=>{let u=a(),m=e.getStepStatus(u),d=n();(m.hasErrors!==d.hasErrors||m.isDirty!==d.isDirty||!mt(m.errors,d.errors))&&n.set(m)},s=e.subscribe(p);try{_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>s())}catch (e3){}let o=async()=>{let u=a(),m=await e.validate({scope:u}),d=e.getStepErrors(u);return{valid:m,errors:d}},l=()=>e.getStepErrors(a()),c=async()=>{let u=a(),m=e.getScopeFields(u);if(e.hasValidationsInProgress(m))return!1;let d=await e.validate({scope:u});if(d){let P=Math.min(r()+1,t.length-1);r.set(P),n.set(e.getStepStatus(_nullishCoalesce(t[P], () => (""))))}else{let P=e.getStepErrors(u),O=Object.keys(P);O.length>0&&e.markFieldsTouched(O)}return d},y=()=>{let u=Math.max(r()-1,0);r.set(u),n.set(e.getStepStatus(_nullishCoalesce(t[u], () => (""))))},j=u=>{let m=Math.max(0,Math.min(u-1,t.length-1));r.set(m),n.set(e.getStepStatus(_nullishCoalesce(t[m], () => (""))))},S=_core.computed.call(void 0, ()=>r()+1),E=_core.computed.call(void 0, ()=>r()===0),T=_core.computed.call(void 0, ()=>r()>=t.length-1),I=_core.computed.call(void 0, ()=>!n().hasErrors),b=_core.computed.call(void 0, ()=>n().isDirty),B=_core.computed.call(void 0, ()=>n().errors);return{step:S,stepIndex:r,scope:i,next:c,prev:y,goTo:j,isFirst:E,isLast:T,status:n,errors:B,isValid:I,isDirty:b,validate:o,getErrors:l}}function St(t){let e=g(),r=_core.inject.call(void 0, _core.DestroyRef),i=_core.signal.call(void 0, _chunk2QNUW6ZNcjs.e.call(void 0, e.getState().values,t),{equal:_chunk2QNUW6ZNcjs.d}),a=e.watch(t,n=>{i.set(n)});return r.onDestroy(a),i.asReadonly()}function Ft(t,e,r){let i=_core.inject.call(void 0, F),a=w(t),n=null,p=async o=>{if(o){i.beginFieldValidation(t),await i.clearFieldAsyncError(t);try{let l=await e(o);a.setValue(l.url),n=l.key,await i.clearFieldAsyncError(t)}catch(l){let c=l instanceof Error?l.message:"Upload failed";await i.setFieldAsyncError(t,c)}finally{i.endFieldValidation(t)}}},s=async()=>{if(n&&r)try{await r(n)}catch(o){let l=o instanceof Error?o.message:"Delete failed";await i.setFieldAsyncError(t,l);return}a.setValue(null),n=null,await i.clearFieldAsyncError(t)};return{value:_core.computed.call(void 0, ()=>a.value()),setValue:a.setValue,error:_core.computed.call(void 0, ()=>a.meta.error()),isValidating:_core.computed.call(void 0, ()=>a.meta.isValidating()||!1),upload:p,remove:s}}exports.injectBitArray = tt; exports.injectBitField = w; exports.injectBitForm = Q; exports.injectBitHistory = ot; exports.injectBitScope = ut; exports.injectBitSteps = pt; exports.injectBitUpload = Ft; exports.injectBitWatch = St; exports.provideBitStore = L; exports.useBitStore = g;
|
|
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 _chunk25Q2XJBVcjs = require('../chunk-25Q2XJBV.cjs');var _core = require('@angular/core');var b=new (0, _core.InjectionToken)("BIT_STORE");function G(t){return{provide:b,useValue:t}}function g(){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 X(){let t=g(),e=_core.inject.call(void 0, _core.DestroyRef),r=_core.signal.call(void 0, t.getState()),o=_core.signal.call(void 0, null),a=_core.signal.call(void 0, null),n=t.subscribe(()=>{r.set(t.getState())});e.onDestroy(()=>n());let p=_core.computed.call(void 0, ()=>r().isValid),s=_core.computed.call(void 0, ()=>r().isSubmitting),i=_core.computed.call(void 0, ()=>r().isDirty),u=()=>r().values,c=()=>r().errors,y=()=>r().touched,j=()=>t.getDirtyValues(),S=F=>B=>(_optionalChain([B, 'optionalAccess', _2 => _2.preventDefault, 'call', _3 => _3()]),_optionalChain([B, 'optionalAccess', _4 => _4.stopPropagation, 'call', _5 => _5()]),t.submit(F)),T=F=>B=>(_optionalChain([B, 'optionalAccess', _6 => _6.preventDefault, 'call', _7 => _7()]),_optionalChain([B, 'optionalAccess', _8 => _8.stopPropagation, 'call', _9 => _9()]),o.set(null),t.submit(async(l,m)=>{try{let d=await F(l,m);a.set(d),o.set(null)}catch(d){_chunk25Q2XJBVcjs.h.call(void 0, d)?t.setServerErrors(_chunk25Q2XJBVcjs.i.call(void 0, d)):o.set(d instanceof Error?d:new Error(String(d)))}})),P=()=>{t.reset(),o.set(null),a.set(null)};return{meta:{isValid:p,isDirty:i,isSubmitting:s,submitError:o.asReadonly(),lastResponse:a.asReadonly()},getValues:u,getErrors:c,getTouched:y,getDirtyValues:j,submit:S,onSubmit:T,reset:P,setValues:t.setValues.bind(t),setError:t.setError.bind(t),setErrors:t.setErrors.bind(t),setServerErrors:t.setServerErrors.bind(t),setField:t.setField.bind(t),blurField:t.blurField.bind(t),validate:t.validate.bind(t),mutations:{pushItem:t.pushItem.bind(t),prependItem:t.prependItem.bind(t),removeItem:t.removeItem.bind(t),insertItem:t.insertItem.bind(t),moveItem:t.moveItem.bind(t),swapItems:t.swapItems.bind(t)}}}function D(t){let e=_core.inject.call(void 0, b),r=_core.signal.call(void 0, e.getState()),o=e.subscribe(()=>{r.set(e.getState())});_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>{o(),e.unregisterField&&e.unregisterField(t)});let a=_core.computed.call(void 0, ()=>_chunk25Q2XJBVcjs.e.call(void 0, r().values,t)),n=_core.computed.call(void 0, ()=>r().errors[t]),p=_core.computed.call(void 0, ()=>!!r().touched[t]),s=_core.computed.call(void 0, ()=>p()?n():void 0),i=_core.computed.call(void 0, ()=>(r(),e.isFieldDirty(t))),u=_core.computed.call(void 0, ()=>(r(),e.isFieldValidating(t))),c=_core.computed.call(void 0, ()=>(r(),e.isHidden(t))),y=_core.computed.call(void 0, ()=>(r(),e.isRequired(t))),j=_core.computed.call(void 0, ()=>p()&&!!n()),S=e.resolveMask(t),T=_core.computed.call(void 0, ()=>{let l=a();return l==null||l===""?"":S?S.format(l):String(l)}),P=l=>{if(!S){e.setField(t,l);return}let m=String(_nullishCoalesce(l, () => ("")));e.setField(t,S.parse(m))},h=()=>e.blurField(t),F=_core.computed.call(void 0, ()=>!!n());return{value:a,displayValue:T,setValue:P,setBlur:h,update:l=>P(_nullishCoalesce(_optionalChain([l, 'optionalAccess', _10 => _10.target, 'optionalAccess', _11 => _11.value]), () => (l))),meta:{error:s,touched:p,invalid:j,isDirty:i,isValidating:u,isHidden:c,isRequired:y,hasError:F}}}var E=()=>Math.random().toString(36).substring(2,9);function et(t){let e=_core.inject.call(void 0, b),r=_core.inject.call(void 0, _core.DestroyRef),o=()=>{let s=_chunk25Q2XJBVcjs.e.call(void 0, e.getState().values,t);return Array.isArray(s)?s:[]},a=_core.signal.call(void 0, o()),n=_core.signal.call(void 0, a().map(E)),p=e.subscribe(()=>{let s=o(),i=_core.untracked.call(void 0, n);a.set(s),s.length!==i.length&&(s.length>i.length?n.set([...i,...Array.from({length:s.length-i.length},E)]):n.set(i.slice(0,s.length)))});return r.onDestroy(()=>{p(),e.unregisterPrefix&&e.unregisterPrefix(`${t}.`)}),{fields:_core.computed.call(void 0, ()=>a().map((s,i)=>({key:n()[i]||`temp-${i}`,value:s,index:i}))),length:_core.computed.call(void 0, ()=>a().length),append:s=>{n.update(i=>[...i,E()]),e.pushItem(t,s)},prepend:s=>{n.update(i=>[E(),...i]),e.prependItem(t,s)},remove:s=>{n.update(i=>i.filter((u,c)=>c!==s)),e.removeItem(t,s)},insert:(s,i)=>{n.update(u=>{let c=[...u];return c.splice(s,0,E()),c}),e.insertItem(t,s,i)},swap:(s,i)=>{n.update(u=>{let c=[...u];return[c[s],c[i]]=[c[i],c[s]],c}),e.swapItems(t,s,i)},move:(s,i)=>{n.update(u=>{let c=[...u],[y]=c.splice(s,1);return c.splice(i,0,y),c}),e.moveItem(t,s,i)},replace:s=>{n.set(s.map(()=>E())),e.setField(t,s)},clear:()=>{n.set([]),e.setField(t,[])}}}function nt(){let t=g(),e=_core.inject.call(void 0, _core.DestroyRef),r=_core.signal.call(void 0, t.getHistoryMetadata()),o=t.subscribe(()=>{r.set(t.getHistoryMetadata())});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.undo(),redo:()=>t.redo()}}function lt(t,e){let r=Object.keys(t),o=Object.keys(e);return r.length!==o.length?!1:r.every(a=>t[a]===e[a])}function ut(t){let e=g(),r=e.getStepStatus(t),o=_core.signal.call(void 0, r),a=e.subscribe(()=>{let c=e.getStepStatus(t),y=o();(c.hasErrors!==y.hasErrors||c.isDirty!==y.isDirty||!lt(c.errors,y.errors))&&o.set(c)});try{_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>a())}catch (e2){}let n=async()=>{let c=await e.validate({scope:t}),y=e.getStepErrors(t);return{valid:c,errors:y}},p=()=>e.getStepErrors(t),s=_core.computed.call(void 0, ()=>!o().hasErrors),i=_core.computed.call(void 0, ()=>o().isDirty),u=_core.computed.call(void 0, ()=>o().errors);return{scopeName:t,status:o,errors:u,validate:n,getErrors:p,isValid:s,isDirty:i,unsubscribe:a}}function pt(t,e){let r=Object.keys(t),o=Object.keys(e);return r.length!==o.length?!1:r.every(a=>t[a]===e[a])}function yt(t){let e=g(),r=_core.signal.call(void 0, 0),o=_core.computed.call(void 0, ()=>_nullishCoalesce(t[r()], () => (""))),a=()=>_nullishCoalesce(t[r()], () => ("")),n=_core.signal.call(void 0, e.getStepStatus(a())),p=()=>{let l=a(),m=e.getStepStatus(l),d=n();(m.hasErrors!==d.hasErrors||m.isDirty!==d.isDirty||!pt(m.errors,d.errors))&&n.set(m)},s=e.subscribe(p);try{_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>s())}catch (e3){}let i=async()=>{let l=a(),m=await e.validate({scope:l}),d=e.getStepErrors(l);return{valid:m,errors:d}},u=()=>e.getStepErrors(a()),c=async()=>{let l=a(),m=e.getScopeFields(l);if(e.hasValidationsInProgress(m))return!1;let d=await e.validate({scope:l});if(d){let I=Math.min(r()+1,t.length-1);r.set(I),n.set(e.getStepStatus(_nullishCoalesce(t[I], () => (""))))}else{let I=e.getStepErrors(l),U=Object.keys(I);U.length>0&&e.markFieldsTouched(U)}return d},y=()=>{let l=Math.max(r()-1,0);r.set(l),n.set(e.getStepStatus(_nullishCoalesce(t[l], () => (""))))},j=l=>{let m=Math.max(0,Math.min(l-1,t.length-1));r.set(m),n.set(e.getStepStatus(_nullishCoalesce(t[m], () => (""))))},S=_core.computed.call(void 0, ()=>r()+1),T=_core.computed.call(void 0, ()=>r()===0),P=_core.computed.call(void 0, ()=>r()>=t.length-1),h=_core.computed.call(void 0, ()=>!n().hasErrors),F=_core.computed.call(void 0, ()=>n().isDirty),B=_core.computed.call(void 0, ()=>n().errors);return{step:S,stepIndex:r,scope:o,next:c,prev:y,goTo:j,isFirst:T,isLast:P,status:n,errors:B,isValid:h,isDirty:F,validate:i,getErrors:u}}function Bt(t){let e=g(),r=_core.inject.call(void 0, _core.DestroyRef),o=_core.signal.call(void 0, _chunk25Q2XJBVcjs.e.call(void 0, e.getState().values,t),{equal:_chunk25Q2XJBVcjs.d}),a=e.watch(t,n=>{o.set(n)});return r.onDestroy(a),o.asReadonly()}function Ft(t,e,r){let o=_core.inject.call(void 0, b),a=D(t),n=null,p=async i=>{if(i){o.beginFieldValidation(t),await o.clearFieldAsyncError(t);try{let u=await e(i);a.setValue(u.url),n=u.key,await o.clearFieldAsyncError(t)}catch(u){let c=u instanceof Error?u.message:"Upload failed";await o.setFieldAsyncError(t,c)}finally{o.endFieldValidation(t)}}},s=async()=>{if(n&&r)try{await r(n)}catch(i){let u=i instanceof Error?i.message:"Delete failed";await o.setFieldAsyncError(t,u);return}a.setValue(null),n=null,await o.clearFieldAsyncError(t)};return{value:_core.computed.call(void 0, ()=>a.value()),setValue:a.setValue,error:_core.computed.call(void 0, ()=>a.meta.error()),isValidating:_core.computed.call(void 0, ()=>a.meta.isValidating()||!1),upload:p,remove:s}}function vt(){let t=g(),e=_core.signal.call(void 0, !1),r=_core.signal.call(void 0, !1),o=_core.signal.call(void 0, null);return{restore:async()=>{r.set(!0),o.set(null);try{return await t.restorePersisted()}catch(s){return o.set(s instanceof Error?s:new Error(String(s))),!1}finally{r.set(!1)}},save:async()=>{e.set(!0),o.set(null);try{await t.forceSave()}catch(s){o.set(s instanceof Error?s:new Error(String(s)))}finally{e.set(!1)}},clear:async()=>{o.set(null);try{await t.clearPersisted()}catch(s){o.set(s instanceof Error?s:new Error(String(s)))}},meta:{isSaving:e.asReadonly(),isRestoring:r.asReadonly(),error:o.asReadonly()}}}exports.injectBitArray = et; exports.injectBitField = D; exports.injectBitForm = X; exports.injectBitHistory = nt; exports.injectBitPersist = vt; exports.injectBitScope = ut; exports.injectBitSteps = yt; exports.injectBitUpload = Ft; exports.injectBitWatch = Bt; exports.provideBitStore = G; exports.useBitStore = g;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/angular/index.d.cts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
2
|
import { Provider, Signal } from '@angular/core';
|
|
3
|
-
import { b as BitFrameworkStore } from '../public-types-
|
|
4
|
-
import {
|
|
3
|
+
import { b as BitFrameworkStore } from '../public-types-r2aP68Gg.cjs';
|
|
4
|
+
import { i as BitErrors, z as BitTouched, p as BitPath, q as BitPathValue, V as ValidateScopeResult, e as BitArrayPath, d as BitArrayItem, S as ScopeStatus } from '../bus-70e4jnBj.cjs';
|
|
5
5
|
import { a as BitUploadFn, B as BitDeleteUploadFn } from '../types-C2mpfhp1.cjs';
|
|
6
6
|
|
|
7
7
|
declare function provideBitStore<T extends object>(store: BitFrameworkStore<T>): Provider;
|
|
@@ -111,6 +111,16 @@ interface InjectBitHistoryResult {
|
|
|
111
111
|
undo: () => void;
|
|
112
112
|
redo: () => void;
|
|
113
113
|
}
|
|
114
|
+
interface InjectBitPersistResult {
|
|
115
|
+
restore: () => Promise<boolean>;
|
|
116
|
+
save: () => Promise<void>;
|
|
117
|
+
clear: () => Promise<void>;
|
|
118
|
+
meta: {
|
|
119
|
+
isSaving: Signal<boolean>;
|
|
120
|
+
isRestoring: Signal<boolean>;
|
|
121
|
+
error: Signal<Error | null>;
|
|
122
|
+
};
|
|
123
|
+
}
|
|
114
124
|
|
|
115
125
|
declare function injectBitField<TValue = any, TForm extends object = any, P extends BitPath<TForm> = BitPath<TForm>>(path: P): InjectBitFieldResult<TForm, P>;
|
|
116
126
|
|
|
@@ -156,4 +166,6 @@ declare function injectBitWatch<TForm extends object = any, P extends BitPath<TF
|
|
|
156
166
|
|
|
157
167
|
declare function injectBitUpload(fieldPath: string, uploadFn: BitUploadFn, deleteFile?: BitDeleteUploadFn): InjectBitUploadResult;
|
|
158
168
|
|
|
159
|
-
|
|
169
|
+
declare function injectBitPersist<T extends object = any>(): InjectBitPersistResult;
|
|
170
|
+
|
|
171
|
+
export { type InjectBitFieldMeta, type InjectBitFieldResult, type InjectBitHistoryResult, type InjectBitPersistResult, type InjectBitStepsResult, type InjectBitUploadResult, ScopeStatus, ValidateScopeResult, injectBitArray, injectBitField, injectBitForm, injectBitHistory, injectBitPersist, injectBitScope, injectBitSteps, injectBitUpload, injectBitWatch, provideBitStore, useBitStore };
|
package/dist/angular/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
2
|
import { Provider, Signal } from '@angular/core';
|
|
3
|
-
import { b as BitFrameworkStore } from '../public-types-
|
|
4
|
-
import {
|
|
3
|
+
import { b as BitFrameworkStore } from '../public-types-BVZ16kgZ.js';
|
|
4
|
+
import { i as BitErrors, z as BitTouched, p as BitPath, q as BitPathValue, V as ValidateScopeResult, e as BitArrayPath, d as BitArrayItem, S as ScopeStatus } from '../bus-70e4jnBj.js';
|
|
5
5
|
import { a as BitUploadFn, B as BitDeleteUploadFn } from '../types-C2mpfhp1.js';
|
|
6
6
|
|
|
7
7
|
declare function provideBitStore<T extends object>(store: BitFrameworkStore<T>): Provider;
|
|
@@ -111,6 +111,16 @@ interface InjectBitHistoryResult {
|
|
|
111
111
|
undo: () => void;
|
|
112
112
|
redo: () => void;
|
|
113
113
|
}
|
|
114
|
+
interface InjectBitPersistResult {
|
|
115
|
+
restore: () => Promise<boolean>;
|
|
116
|
+
save: () => Promise<void>;
|
|
117
|
+
clear: () => Promise<void>;
|
|
118
|
+
meta: {
|
|
119
|
+
isSaving: Signal<boolean>;
|
|
120
|
+
isRestoring: Signal<boolean>;
|
|
121
|
+
error: Signal<Error | null>;
|
|
122
|
+
};
|
|
123
|
+
}
|
|
114
124
|
|
|
115
125
|
declare function injectBitField<TValue = any, TForm extends object = any, P extends BitPath<TForm> = BitPath<TForm>>(path: P): InjectBitFieldResult<TForm, P>;
|
|
116
126
|
|
|
@@ -156,4 +166,6 @@ declare function injectBitWatch<TForm extends object = any, P extends BitPath<TF
|
|
|
156
166
|
|
|
157
167
|
declare function injectBitUpload(fieldPath: string, uploadFn: BitUploadFn, deleteFile?: BitDeleteUploadFn): InjectBitUploadResult;
|
|
158
168
|
|
|
159
|
-
|
|
169
|
+
declare function injectBitPersist<T extends object = any>(): InjectBitPersistResult;
|
|
170
|
+
|
|
171
|
+
export { type InjectBitFieldMeta, type InjectBitFieldResult, type InjectBitHistoryResult, type InjectBitPersistResult, type InjectBitStepsResult, type InjectBitUploadResult, ScopeStatus, ValidateScopeResult, injectBitArray, injectBitField, injectBitForm, injectBitHistory, injectBitPersist, injectBitScope, injectBitSteps, injectBitUpload, injectBitWatch, provideBitStore, useBitStore };
|
package/dist/angular/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{d as
|
|
1
|
+
import{d as M,e as R,h as _,i as H}from"../chunk-2HAQ3QEQ.js";import{inject as $,InjectionToken as L}from"@angular/core";var b=new L("BIT_STORE");function G(t){return{provide:b,useValue:t}}function g(){let t=$(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 x,computed as w,inject as J,DestroyRef as Q}from"@angular/core";function X(){let t=g(),e=J(Q),r=x(t.getState()),o=x(null),a=x(null),n=t.subscribe(()=>{r.set(t.getState())});e.onDestroy(()=>n());let p=w(()=>r().isValid),s=w(()=>r().isSubmitting),i=w(()=>r().isDirty),u=()=>r().values,c=()=>r().errors,y=()=>r().touched,j=()=>t.getDirtyValues(),S=F=>B=>(B?.preventDefault(),B?.stopPropagation(),t.submit(F)),T=F=>B=>(B?.preventDefault(),B?.stopPropagation(),o.set(null),t.submit(async(l,m)=>{try{let d=await F(l,m);a.set(d),o.set(null)}catch(d){_(d)?t.setServerErrors(H(d)):o.set(d instanceof Error?d:new Error(String(d)))}})),P=()=>{t.reset(),o.set(null),a.set(null)};return{meta:{isValid:p,isDirty:i,isSubmitting:s,submitError:o.asReadonly(),lastResponse:a.asReadonly()},getValues:u,getErrors:c,getTouched:y,getDirtyValues:j,submit:S,onSubmit:T,reset:P,setValues:t.setValues.bind(t),setError:t.setError.bind(t),setErrors:t.setErrors.bind(t),setServerErrors:t.setServerErrors.bind(t),setField:t.setField.bind(t),blurField:t.blurField.bind(t),validate:t.validate.bind(t),mutations:{pushItem:t.pushItem.bind(t),prependItem:t.prependItem.bind(t),removeItem:t.removeItem.bind(t),insertItem:t.insertItem.bind(t),moveItem:t.moveItem.bind(t),swapItems:t.swapItems.bind(t)}}}import{inject as q,DestroyRef as Y,computed as f,signal as Z}from"@angular/core";function D(t){let e=q(b),r=Z(e.getState()),o=e.subscribe(()=>{r.set(e.getState())});q(Y).onDestroy(()=>{o(),e.unregisterField&&e.unregisterField(t)});let a=f(()=>R(r().values,t)),n=f(()=>r().errors[t]),p=f(()=>!!r().touched[t]),s=f(()=>p()?n():void 0),i=f(()=>(r(),e.isFieldDirty(t))),u=f(()=>(r(),e.isFieldValidating(t))),c=f(()=>(r(),e.isHidden(t))),y=f(()=>(r(),e.isRequired(t))),j=f(()=>p()&&!!n()),S=e.resolveMask(t),T=f(()=>{let l=a();return l==null||l===""?"":S?S.format(l):String(l)}),P=l=>{if(!S){e.setField(t,l);return}let m=String(l??"");e.setField(t,S.parse(m))},h=()=>e.blurField(t),F=f(()=>!!n());return{value:a,displayValue:T,setValue:P,setBlur:h,update:l=>P(l?.target?.value??l),meta:{error:s,touched:p,invalid:j,isDirty:i,isValidating:u,isHidden:c,isRequired:y,hasError:F}}}import{DestroyRef as N,signal as K,computed as W,inject as z,untracked as tt}from"@angular/core";var E=()=>Math.random().toString(36).substring(2,9);function et(t){let e=z(b),r=z(N),o=()=>{let s=R(e.getState().values,t);return Array.isArray(s)?s:[]},a=K(o()),n=K(a().map(E)),p=e.subscribe(()=>{let s=o(),i=tt(n);a.set(s),s.length!==i.length&&(s.length>i.length?n.set([...i,...Array.from({length:s.length-i.length},E)]):n.set(i.slice(0,s.length)))});return r.onDestroy(()=>{p(),e.unregisterPrefix&&e.unregisterPrefix(`${t}.`)}),{fields:W(()=>a().map((s,i)=>({key:n()[i]||`temp-${i}`,value:s,index:i}))),length:W(()=>a().length),append:s=>{n.update(i=>[...i,E()]),e.pushItem(t,s)},prepend:s=>{n.update(i=>[E(),...i]),e.prependItem(t,s)},remove:s=>{n.update(i=>i.filter((u,c)=>c!==s)),e.removeItem(t,s)},insert:(s,i)=>{n.update(u=>{let c=[...u];return c.splice(s,0,E()),c}),e.insertItem(t,s,i)},swap:(s,i)=>{n.update(u=>{let c=[...u];return[c[s],c[i]]=[c[i],c[s]],c}),e.swapItems(t,s,i)},move:(s,i)=>{n.update(u=>{let c=[...u],[y]=c.splice(s,1);return c.splice(i,0,y),c}),e.moveItem(t,s,i)},replace:s=>{n.set(s.map(()=>E())),e.setField(t,s)},clear:()=>{n.set([]),e.setField(t,[])}}}import{computed as V,DestroyRef as rt,inject as st,signal as ot}from"@angular/core";function nt(){let t=g(),e=st(rt),r=ot(t.getHistoryMetadata()),o=t.subscribe(()=>{r.set(t.getHistoryMetadata())});return e.onDestroy(()=>o()),{canUndo:V(()=>r().canUndo),canRedo:V(()=>r().canRedo),historyIndex:V(()=>r().historyIndex),historySize:V(()=>r().historySize),undo:()=>t.undo(),redo:()=>t.redo()}}import{signal as it,computed as k,DestroyRef as at,inject as ct}from"@angular/core";function lt(t,e){let r=Object.keys(t),o=Object.keys(e);return r.length!==o.length?!1:r.every(a=>t[a]===e[a])}function ut(t){let e=g(),r=e.getStepStatus(t),o=it(r),a=e.subscribe(()=>{let c=e.getStepStatus(t),y=o();(c.hasErrors!==y.hasErrors||c.isDirty!==y.isDirty||!lt(c.errors,y.errors))&&o.set(c)});try{ct(at).onDestroy(()=>a())}catch{}let n=async()=>{let c=await e.validate({scope:t}),y=e.getStepErrors(t);return{valid:c,errors:y}},p=()=>e.getStepErrors(t),s=k(()=>!o().hasErrors),i=k(()=>o().isDirty),u=k(()=>o().errors);return{scopeName:t,status:o,errors:u,validate:n,getErrors:p,isValid:s,isDirty:i,unsubscribe:a}}import{signal as C,computed as v,DestroyRef as dt,inject as mt}from"@angular/core";function pt(t,e){let r=Object.keys(t),o=Object.keys(e);return r.length!==o.length?!1:r.every(a=>t[a]===e[a])}function yt(t){let e=g(),r=C(0),o=v(()=>t[r()]??""),a=()=>t[r()]??"",n=C(e.getStepStatus(a())),p=()=>{let l=a(),m=e.getStepStatus(l),d=n();(m.hasErrors!==d.hasErrors||m.isDirty!==d.isDirty||!pt(m.errors,d.errors))&&n.set(m)},s=e.subscribe(p);try{mt(dt).onDestroy(()=>s())}catch{}let i=async()=>{let l=a(),m=await e.validate({scope:l}),d=e.getStepErrors(l);return{valid:m,errors:d}},u=()=>e.getStepErrors(a()),c=async()=>{let l=a(),m=e.getScopeFields(l);if(e.hasValidationsInProgress(m))return!1;let d=await e.validate({scope:l});if(d){let I=Math.min(r()+1,t.length-1);r.set(I),n.set(e.getStepStatus(t[I]??""))}else{let I=e.getStepErrors(l),U=Object.keys(I);U.length>0&&e.markFieldsTouched(U)}return d},y=()=>{let l=Math.max(r()-1,0);r.set(l),n.set(e.getStepStatus(t[l]??""))},j=l=>{let m=Math.max(0,Math.min(l-1,t.length-1));r.set(m),n.set(e.getStepStatus(t[m]??""))},S=v(()=>r()+1),T=v(()=>r()===0),P=v(()=>r()>=t.length-1),h=v(()=>!n().hasErrors),F=v(()=>n().isDirty),B=v(()=>n().errors);return{step:S,stepIndex:r,scope:o,next:c,prev:y,goTo:j,isFirst:T,isLast:P,status:n,errors:B,isValid:h,isDirty:F,validate:i,getErrors:u}}import{DestroyRef as gt,signal as ft,inject as St}from"@angular/core";function Bt(t){let e=g(),r=St(gt),o=ft(R(e.getState().values,t),{equal:M}),a=e.watch(t,n=>{o.set(n)});return r.onDestroy(a),o.asReadonly()}import{computed as A,inject as bt}from"@angular/core";function Ft(t,e,r){let o=bt(b),a=D(t),n=null,p=async i=>{if(i){o.beginFieldValidation(t),await o.clearFieldAsyncError(t);try{let u=await e(i);a.setValue(u.url),n=u.key,await o.clearFieldAsyncError(t)}catch(u){let c=u instanceof Error?u.message:"Upload failed";await o.setFieldAsyncError(t,c)}finally{o.endFieldValidation(t)}}},s=async()=>{if(n&&r)try{await r(n)}catch(i){let u=i instanceof Error?i.message:"Delete failed";await o.setFieldAsyncError(t,u);return}a.setValue(null),n=null,await o.clearFieldAsyncError(t)};return{value:A(()=>a.value()),setValue:a.setValue,error:A(()=>a.meta.error()),isValidating:A(()=>a.meta.isValidating()||!1),upload:p,remove:s}}import{signal as O}from"@angular/core";function vt(){let t=g(),e=O(!1),r=O(!1),o=O(null);return{restore:async()=>{r.set(!0),o.set(null);try{return await t.restorePersisted()}catch(s){return o.set(s instanceof Error?s:new Error(String(s))),!1}finally{r.set(!1)}},save:async()=>{e.set(!0),o.set(null);try{await t.forceSave()}catch(s){o.set(s instanceof Error?s:new Error(String(s)))}finally{e.set(!1)}},clear:async()=>{o.set(null);try{await t.clearPersisted()}catch(s){o.set(s instanceof Error?s:new Error(String(s)))}},meta:{isSaving:e.asReadonly(),isRestoring:r.asReadonly(),error:o.asReadonly()}}}export{et as injectBitArray,D as injectBitField,X as injectBitForm,nt as injectBitHistory,vt as injectBitPersist,ut as injectBitScope,yt as injectBitSteps,Ft as injectBitUpload,Bt as injectBitWatch,G as provideBitStore,g 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"],"sourcesContent":["import { inject, InjectionToken, Provider } from \"@angular/core\";\nimport type { BitFrameworkStore } from \"../core\";\n\nexport const BIT_STORE_TOKEN = new InjectionToken<BitFrameworkStore<any>>(\n \"BIT_STORE\",\n);\n\nexport function provideBitStore<T extends object>(\n store: BitFrameworkStore<T>,\n): Provider {\n return { provide: BIT_STORE_TOKEN, useValue: 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 BitFrameworkStore<T>;\n}\n","import { signal, computed, inject, DestroyRef } from \"@angular/core\";\nimport { useBitStore } from \"./provider\";\nimport { isValidationErrorShape, extractServerErrors } from \"../core/utils\";\n\nexport function injectBitForm<T extends object>() {\n const store = useBitStore<T>();\n const destroyRef = inject(DestroyRef);\n const stateSignal = signal(store.getState());\n const submitError = signal<Error | null>(null);\n const lastResponse = signal<unknown>(null);\n\n const sub = store.subscribe(() => {\n stateSignal.set(store.getState());\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 getValues = () => stateSignal().values;\n const getErrors = () => stateSignal().errors;\n const getTouched = () => stateSignal().touched;\n const getDirtyValues = () => store.getDirtyValues();\n\n const submit = (\n onSuccess: (values: T, dirtyValues?: Partial<T>) => void | Promise<void>,\n ) => {\n return (event?: Event) => {\n event?.preventDefault();\n event?.stopPropagation();\n return store.submit(onSuccess);\n };\n };\n\n const onSubmit = (\n handler: (values: T, dirtyValues?: Partial<T>) => Promise<unknown>,\n ) => {\n return (event?: Event) => {\n event?.preventDefault();\n event?.stopPropagation();\n submitError.set(null);\n return store.submit(async (values, dirtyValues) => {\n try {\n const result = await handler(values, dirtyValues);\n lastResponse.set(result);\n submitError.set(null);\n } catch (err) {\n if (isValidationErrorShape(err)) {\n store.setServerErrors(extractServerErrors(err));\n } else {\n submitError.set(\n err instanceof Error ? err : new Error(String(err)),\n );\n }\n }\n });\n };\n };\n\n const reset = () => {\n store.reset();\n submitError.set(null);\n lastResponse.set(null);\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,\n getErrors,\n getTouched,\n getDirtyValues,\n // Main actions (frequent use - flat)\n submit,\n onSubmit,\n reset,\n setValues: store.setValues.bind(store),\n setError: store.setError.bind(store),\n setErrors: store.setErrors.bind(store),\n setServerErrors: store.setServerErrors.bind(store),\n setField: store.setField.bind(store),\n blurField: store.blurField.bind(store),\n validate: store.validate.bind(store),\n // Array mutations (grouped)\n mutations: {\n pushItem: store.pushItem.bind(store),\n prependItem: store.prependItem.bind(store),\n removeItem: store.removeItem.bind(store),\n insertItem: store.insertItem.bind(store),\n moveItem: store.moveItem.bind(store),\n swapItems: store.swapItems.bind(store),\n },\n };\n}\n","import { inject, DestroyRef, computed, signal } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport { getDeepValue, BitPath, BitPathValue } from \"../core\";\nimport type { InjectBitFieldMeta, 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.getState());\n\n const unsubscribe = store.subscribe(() => {\n stateSignal.set(store.getState());\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(\n () =>\n getDeepValue(stateSignal().values, path as string) as BitPathValue<\n TForm,\n P\n >,\n );\n const rawError = computed(\n () =>\n (stateSignal().errors as Record<string, any>)[path] as string | undefined,\n );\n const touched = computed(\n () => !!(stateSignal().touched as Record<string, any>)[path],\n );\n const error = computed(() => (touched() ? rawError() : undefined));\n\n const isDirty = computed(() => {\n stateSignal();\n return store.isFieldDirty(path);\n });\n\n const isValidating = computed(() => {\n stateSignal();\n return store.isFieldValidating(path);\n });\n\n const isHidden = computed(() => {\n stateSignal();\n return store.isHidden(path);\n });\n\n const isRequired = computed(() => {\n stateSignal();\n return store.isRequired(path);\n });\n\n const invalid = computed(() => touched() && !!rawError());\n\n const resolvedMask = store.resolveMask(path as string);\n\n const displayValue = computed(() => {\n const val = value();\n if (val === undefined || val === null || val === \"\") return \"\";\n\n return resolvedMask ? resolvedMask.format(val) : String(val);\n });\n\n const setValue = (val: any) => {\n if (!resolvedMask) {\n store.setField(path, val);\n return;\n }\n\n const stringVal = String(val ?? \"\");\n store.setField(path, resolvedMask.parse(stringVal) as any);\n };\n\n const setBlur = () => store.blurField(path);\n\n const hasError = computed(() => !!rawError());\n\n const update = (e: any) => setValue(e?.target?.value ?? 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\nconst generateId = () => Math.random().toString(36).substring(2, 9);\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 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[]>(valuesSig().map(generateId));\n\n const unsub = store.subscribe(() => {\n const next = getRaw();\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 }, generateId),\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, generateId()]);\n store.pushItem(path, v);\n },\n prepend: (v: BitArrayItem<BitPathValue<TForm, P>>) => {\n idsSig.update((ids) => [generateId(), ...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, generateId());\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(() => generateId()));\n store.setField(path as unknown as BitPath<TForm>, items as any);\n },\n clear: () => {\n idsSig.set([]);\n store.setField(path as unknown as BitPath<TForm>, [] as any);\n },\n };\n}\n","import { computed, DestroyRef, inject, signal } from \"@angular/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(store.getHistoryMetadata());\n\n const sub = store.subscribe(() => {\n meta.set(store.getHistoryMetadata());\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.undo(),\n redo: () => store.redo(),\n };\n}\n","import { signal, computed, DestroyRef, inject } from \"@angular/core\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { useBitStore } from \"./provider\";\n\nexport type { ScopeStatus, ValidateScopeResult };\n\nfunction errorsEqual(\n a: Record<string, string>,\n b: Record<string, string>,\n): boolean {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n return keysA.every((k) => a[k] === b[k]);\n}\n\nexport function injectBitScope(scopeName: string) {\n const store = useBitStore();\n const initialStatus = store.getStepStatus(scopeName);\n\n const status = signal<ScopeStatus>(initialStatus);\n\n const unsubscribe = store.subscribe(() => {\n const newStatus = store.getStepStatus(scopeName);\n const current = status();\n if (\n newStatus.hasErrors !== current.hasErrors ||\n newStatus.isDirty !== current.isDirty ||\n !errorsEqual(newStatus.errors, current.errors)\n ) {\n status.set(newStatus);\n }\n });\n\n try {\n const destroyRef = inject(DestroyRef);\n destroyRef.onDestroy(() => unsubscribe());\n } catch {}\n\n const validate = async (): Promise<ValidateScopeResult> => {\n const valid = await store.validate({ scope: scopeName });\n const errors = store.getStepErrors(scopeName);\n return { valid, errors };\n };\n\n const getErrors = () => store.getStepErrors(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 { signal, computed, DestroyRef, inject } from \"@angular/core\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { useBitStore } from \"./provider\";\nimport type { InjectBitStepsResult } from \"./types\";\n\nfunction errorsEqual(\n a: Record<string, string>,\n b: Record<string, string>,\n): boolean {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n return keysA.every((k) => a[k] === b[k]);\n}\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>(store.getStepStatus(getCurrentScope()));\n\n const updateStatus = () => {\n const scopeName = getCurrentScope();\n const newStatus = store.getStepStatus(scopeName);\n const current = status();\n if (\n newStatus.hasErrors !== current.hasErrors ||\n newStatus.isDirty !== current.isDirty ||\n !errorsEqual(newStatus.errors, current.errors)\n ) {\n status.set(newStatus);\n }\n };\n\n const unsubscribe = store.subscribe(updateStatus);\n\n try {\n const destroyRef = inject(DestroyRef);\n destroyRef.onDestroy(() => unsubscribe());\n } catch {}\n\n const validate = async (): Promise<ValidateScopeResult> => {\n const scopeName = getCurrentScope();\n const valid = await store.validate({ scope: scopeName });\n const errors = store.getStepErrors(scopeName);\n return { valid, errors };\n };\n\n const getErrors = () => store.getStepErrors(getCurrentScope());\n\n const next = async (): Promise<boolean> => {\n const scopeName = getCurrentScope();\n\n const scopeFields = store.getScopeFields(scopeName);\n if (store.hasValidationsInProgress(scopeFields)) {\n return false;\n }\n\n const valid = await store.validate({ scope: scopeName });\n if (valid) {\n const newIndex = Math.min(stepIndex() + 1, scopeNames.length - 1);\n stepIndex.set(newIndex);\n status.set(store.getStepStatus(scopeNames[newIndex] ?? \"\"));\n } else {\n const errors = store.getStepErrors(scopeName);\n const pathsWithErrors = Object.keys(errors);\n if (pathsWithErrors.length > 0) {\n store.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.getStepStatus(scopeNames[newIndex] ?? \"\"));\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.getStepStatus(scopeNames[newIndex] ?? \"\"));\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 {\n getDeepValue,\n deepEqual,\n BitPath,\n BitPathValue,\n} 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.getState().values, path as string) as BitPathValue<\n TForm,\n P\n >,\n { equal: deepEqual },\n );\n\n const unsub = store.watch(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 } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport { injectBitField } from \"./inject-bit-field\";\nimport { BitUploadFn, BitDeleteUploadFn } from \"../core\";\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\n const upload = async (file: File | null | undefined) => {\n if (!file) return;\n\n store.beginFieldValidation(fieldPath);\n await store.clearFieldAsyncError(fieldPath);\n\n try {\n const result = await uploadFn(file);\n\n field.setValue(result.url);\n uploadKey = result.key;\n await store.clearFieldAsyncError(fieldPath);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Upload failed\";\n await store.setFieldAsyncError(fieldPath, message);\n } finally {\n store.endFieldValidation(fieldPath);\n }\n };\n\n const remove = async () => {\n if (uploadKey && deleteFile) {\n try {\n await deleteFile(uploadKey);\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Delete failed\";\n await store.setFieldAsyncError(fieldPath, message);\n return;\n }\n }\n\n field.setValue(null);\n uploadKey = null;\n await store.clearFieldAsyncError(fieldPath);\n };\n\n return {\n value: computed(() => field.value()),\n setValue: field.setValue,\n error: computed(() => field.meta.error()),\n isValidating: computed(() => field.meta.isValidating() || false),\n upload,\n remove,\n };\n}\n"],"mappings":"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","names":["inject","InjectionToken","BIT_STORE_TOKEN","provideBitStore","store","useBitStore","signal","computed","inject","DestroyRef","injectBitForm","store","useBitStore","destroyRef","inject","DestroyRef","stateSignal","signal","submitError","lastResponse","sub","isValid","computed","isSubmitting","isDirty","getValues","getErrors","getTouched","getDirtyValues","submit","onSuccess","event","onSubmit","handler","values","dirtyValues","result","err","isValidationErrorShape","extractServerErrors","reset","inject","DestroyRef","computed","signal","injectBitField","path","store","inject","BIT_STORE_TOKEN","stateSignal","signal","unsubscribe","DestroyRef","value","computed","getDeepValue","rawError","touched","error","isDirty","isValidating","isHidden","isRequired","invalid","resolvedMask","displayValue","val","setValue","stringVal","setBlur","hasError","e","DestroyRef","signal","computed","inject","untracked","generateId","injectBitArray","path","store","inject","BIT_STORE_TOKEN","destroyRef","DestroyRef","getRaw","val","getDeepValue","valuesSig","signal","idsSig","unsub","next","ids","untracked","computed","v","i","_","idx","index","a","b","f","t","it","items","computed","DestroyRef","inject","signal","injectBitHistory","store","useBitStore","destroyRef","inject","DestroyRef","meta","signal","sub","computed","signal","computed","DestroyRef","inject","errorsEqual","a","b","keysA","keysB","k","injectBitScope","scopeName","store","useBitStore","initialStatus","status","signal","unsubscribe","newStatus","current","inject","DestroyRef","validate","valid","errors","getErrors","isValid","computed","isDirty","signal","computed","DestroyRef","inject","errorsEqual","a","b","keysA","keysB","k","injectBitSteps","scopeNames","store","useBitStore","stepIndex","signal","scope","computed","getCurrentScope","status","updateStatus","scopeName","newStatus","current","unsubscribe","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","deepEqual","unsub","v","computed","inject","injectBitUpload","fieldPath","uploadFn","deleteFile","store","inject","BIT_STORE_TOKEN","field","injectBitField","uploadKey","upload","file","result","error","message","remove","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 { BitFrameworkStore } from \"../core\";\n\nexport const BIT_STORE_TOKEN = new InjectionToken<BitFrameworkStore<any>>(\n \"BIT_STORE\",\n);\n\nexport function provideBitStore<T extends object>(\n store: BitFrameworkStore<T>,\n): Provider {\n return { provide: BIT_STORE_TOKEN, useValue: 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 BitFrameworkStore<T>;\n}\n","import { signal, computed, inject, DestroyRef } from \"@angular/core\";\nimport { useBitStore } from \"./provider\";\nimport { isValidationErrorShape, extractServerErrors } from \"../core/utils\";\n\nexport function injectBitForm<T extends object>() {\n const store = useBitStore<T>();\n const destroyRef = inject(DestroyRef);\n const stateSignal = signal(store.getState());\n const submitError = signal<Error | null>(null);\n const lastResponse = signal<unknown>(null);\n\n const sub = store.subscribe(() => {\n stateSignal.set(store.getState());\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 getValues = () => stateSignal().values;\n const getErrors = () => stateSignal().errors;\n const getTouched = () => stateSignal().touched;\n const getDirtyValues = () => store.getDirtyValues();\n\n const submit = (\n onSuccess: (values: T, dirtyValues?: Partial<T>) => void | Promise<void>,\n ) => {\n return (event?: Event) => {\n event?.preventDefault();\n event?.stopPropagation();\n return store.submit(onSuccess);\n };\n };\n\n const onSubmit = (\n handler: (values: T, dirtyValues?: Partial<T>) => Promise<unknown>,\n ) => {\n return (event?: Event) => {\n event?.preventDefault();\n event?.stopPropagation();\n submitError.set(null);\n return store.submit(async (values, dirtyValues) => {\n try {\n const result = await handler(values, dirtyValues);\n lastResponse.set(result);\n submitError.set(null);\n } catch (err) {\n if (isValidationErrorShape(err)) {\n store.setServerErrors(extractServerErrors(err));\n } else {\n submitError.set(\n err instanceof Error ? err : new Error(String(err)),\n );\n }\n }\n });\n };\n };\n\n const reset = () => {\n store.reset();\n submitError.set(null);\n lastResponse.set(null);\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,\n getErrors,\n getTouched,\n getDirtyValues,\n // Main actions (frequent use - flat)\n submit,\n onSubmit,\n reset,\n setValues: store.setValues.bind(store),\n setError: store.setError.bind(store),\n setErrors: store.setErrors.bind(store),\n setServerErrors: store.setServerErrors.bind(store),\n setField: store.setField.bind(store),\n blurField: store.blurField.bind(store),\n validate: store.validate.bind(store),\n // Array mutations (grouped)\n mutations: {\n pushItem: store.pushItem.bind(store),\n prependItem: store.prependItem.bind(store),\n removeItem: store.removeItem.bind(store),\n insertItem: store.insertItem.bind(store),\n moveItem: store.moveItem.bind(store),\n swapItems: store.swapItems.bind(store),\n },\n };\n}\n","import { inject, DestroyRef, computed, signal } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport { getDeepValue, BitPath, BitPathValue } from \"../core\";\nimport type { InjectBitFieldMeta, 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.getState());\n\n const unsubscribe = store.subscribe(() => {\n stateSignal.set(store.getState());\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(\n () =>\n getDeepValue(stateSignal().values, path as string) as BitPathValue<\n TForm,\n P\n >,\n );\n const rawError = computed(\n () =>\n (stateSignal().errors as Record<string, any>)[path] as string | undefined,\n );\n const touched = computed(\n () => !!(stateSignal().touched as Record<string, any>)[path],\n );\n const error = computed(() => (touched() ? rawError() : undefined));\n\n const isDirty = computed(() => {\n stateSignal();\n return store.isFieldDirty(path);\n });\n\n const isValidating = computed(() => {\n stateSignal();\n return store.isFieldValidating(path);\n });\n\n const isHidden = computed(() => {\n stateSignal();\n return store.isHidden(path);\n });\n\n const isRequired = computed(() => {\n stateSignal();\n return store.isRequired(path);\n });\n\n const invalid = computed(() => touched() && !!rawError());\n\n const resolvedMask = store.resolveMask(path as string);\n\n const displayValue = computed(() => {\n const val = value();\n if (val === undefined || val === null || val === \"\") return \"\";\n\n return resolvedMask ? resolvedMask.format(val) : String(val);\n });\n\n const setValue = (val: any) => {\n if (!resolvedMask) {\n store.setField(path, val);\n return;\n }\n\n const stringVal = String(val ?? \"\");\n store.setField(path, resolvedMask.parse(stringVal) as any);\n };\n\n const setBlur = () => store.blurField(path);\n\n const hasError = computed(() => !!rawError());\n\n const update = (e: any) => setValue(e?.target?.value ?? 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\nconst generateId = () => Math.random().toString(36).substring(2, 9);\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 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[]>(valuesSig().map(generateId));\n\n const unsub = store.subscribe(() => {\n const next = getRaw();\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 }, generateId),\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, generateId()]);\n store.pushItem(path, v);\n },\n prepend: (v: BitArrayItem<BitPathValue<TForm, P>>) => {\n idsSig.update((ids) => [generateId(), ...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, generateId());\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(() => generateId()));\n store.setField(path as unknown as BitPath<TForm>, items as any);\n },\n clear: () => {\n idsSig.set([]);\n store.setField(path as unknown as BitPath<TForm>, [] as any);\n },\n };\n}\n","import { computed, DestroyRef, inject, signal } from \"@angular/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(store.getHistoryMetadata());\n\n const sub = store.subscribe(() => {\n meta.set(store.getHistoryMetadata());\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.undo(),\n redo: () => store.redo(),\n };\n}\n","import { signal, computed, DestroyRef, inject } from \"@angular/core\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { useBitStore } from \"./provider\";\n\nexport type { ScopeStatus, ValidateScopeResult };\n\nfunction errorsEqual(\n a: Record<string, string>,\n b: Record<string, string>,\n): boolean {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n return keysA.every((k) => a[k] === b[k]);\n}\n\nexport function injectBitScope(scopeName: string) {\n const store = useBitStore();\n const initialStatus = store.getStepStatus(scopeName);\n\n const status = signal<ScopeStatus>(initialStatus);\n\n const unsubscribe = store.subscribe(() => {\n const newStatus = store.getStepStatus(scopeName);\n const current = status();\n if (\n newStatus.hasErrors !== current.hasErrors ||\n newStatus.isDirty !== current.isDirty ||\n !errorsEqual(newStatus.errors, current.errors)\n ) {\n status.set(newStatus);\n }\n });\n\n try {\n const destroyRef = inject(DestroyRef);\n destroyRef.onDestroy(() => unsubscribe());\n } catch {}\n\n const validate = async (): Promise<ValidateScopeResult> => {\n const valid = await store.validate({ scope: scopeName });\n const errors = store.getStepErrors(scopeName);\n return { valid, errors };\n };\n\n const getErrors = () => store.getStepErrors(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 { signal, computed, DestroyRef, inject } from \"@angular/core\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { useBitStore } from \"./provider\";\nimport type { InjectBitStepsResult } from \"./types\";\n\nfunction errorsEqual(\n a: Record<string, string>,\n b: Record<string, string>,\n): boolean {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n return keysA.every((k) => a[k] === b[k]);\n}\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>(store.getStepStatus(getCurrentScope()));\n\n const updateStatus = () => {\n const scopeName = getCurrentScope();\n const newStatus = store.getStepStatus(scopeName);\n const current = status();\n if (\n newStatus.hasErrors !== current.hasErrors ||\n newStatus.isDirty !== current.isDirty ||\n !errorsEqual(newStatus.errors, current.errors)\n ) {\n status.set(newStatus);\n }\n };\n\n const unsubscribe = store.subscribe(updateStatus);\n\n try {\n const destroyRef = inject(DestroyRef);\n destroyRef.onDestroy(() => unsubscribe());\n } catch {}\n\n const validate = async (): Promise<ValidateScopeResult> => {\n const scopeName = getCurrentScope();\n const valid = await store.validate({ scope: scopeName });\n const errors = store.getStepErrors(scopeName);\n return { valid, errors };\n };\n\n const getErrors = () => store.getStepErrors(getCurrentScope());\n\n const next = async (): Promise<boolean> => {\n const scopeName = getCurrentScope();\n\n const scopeFields = store.getScopeFields(scopeName);\n if (store.hasValidationsInProgress(scopeFields)) {\n return false;\n }\n\n const valid = await store.validate({ scope: scopeName });\n if (valid) {\n const newIndex = Math.min(stepIndex() + 1, scopeNames.length - 1);\n stepIndex.set(newIndex);\n status.set(store.getStepStatus(scopeNames[newIndex] ?? \"\"));\n } else {\n const errors = store.getStepErrors(scopeName);\n const pathsWithErrors = Object.keys(errors);\n if (pathsWithErrors.length > 0) {\n store.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.getStepStatus(scopeNames[newIndex] ?? \"\"));\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.getStepStatus(scopeNames[newIndex] ?? \"\"));\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 {\n getDeepValue,\n deepEqual,\n BitPath,\n BitPathValue,\n} 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.getState().values, path as string) as BitPathValue<\n TForm,\n P\n >,\n { equal: deepEqual },\n );\n\n const unsub = store.watch(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 } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport { injectBitField } from \"./inject-bit-field\";\nimport { BitUploadFn, BitDeleteUploadFn } from \"../core\";\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\n const upload = async (file: File | null | undefined) => {\n if (!file) return;\n\n store.beginFieldValidation(fieldPath);\n await store.clearFieldAsyncError(fieldPath);\n\n try {\n const result = await uploadFn(file);\n\n field.setValue(result.url);\n uploadKey = result.key;\n await store.clearFieldAsyncError(fieldPath);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Upload failed\";\n await store.setFieldAsyncError(fieldPath, message);\n } finally {\n store.endFieldValidation(fieldPath);\n }\n };\n\n const remove = async () => {\n if (uploadKey && deleteFile) {\n try {\n await deleteFile(uploadKey);\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Delete failed\";\n await store.setFieldAsyncError(fieldPath, message);\n return;\n }\n }\n\n field.setValue(null);\n uploadKey = null;\n await store.clearFieldAsyncError(fieldPath);\n };\n\n return {\n value: computed(() => field.value()),\n setValue: field.setValue,\n error: computed(() => field.meta.error()),\n isValidating: computed(() => field.meta.isValidating() || false),\n upload,\n remove,\n };\n}\n","import { signal } from \"@angular/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 isSaving = signal(false);\n const isRestoring = signal(false);\n const error = signal<Error | null>(null);\n\n const restore = async (): Promise<boolean> => {\n isRestoring.set(true);\n error.set(null);\n\n try {\n return await store.restorePersisted();\n } catch (err) {\n error.set(err instanceof Error ? err : new Error(String(err)));\n return false;\n } finally {\n isRestoring.set(false);\n }\n };\n\n const save = async (): Promise<void> => {\n isSaving.set(true);\n error.set(null);\n\n try {\n await store.forceSave();\n } catch (err) {\n error.set(err instanceof Error ? err : new Error(String(err)));\n } finally {\n isSaving.set(false);\n }\n };\n\n const clear = async (): Promise<void> => {\n error.set(null);\n\n try {\n await store.clearPersisted();\n } catch (err) {\n error.set(err instanceof Error ? err : new Error(String(err)));\n }\n };\n\n return {\n restore,\n save,\n clear,\n meta: {\n isSaving: isSaving.asReadonly(),\n isRestoring: isRestoring.asReadonly(),\n error: error.asReadonly(),\n },\n };\n}\n"],"mappings":"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","names":["inject","InjectionToken","BIT_STORE_TOKEN","provideBitStore","store","useBitStore","signal","computed","inject","DestroyRef","injectBitForm","store","useBitStore","destroyRef","inject","DestroyRef","stateSignal","signal","submitError","lastResponse","sub","isValid","computed","isSubmitting","isDirty","getValues","getErrors","getTouched","getDirtyValues","submit","onSuccess","event","onSubmit","handler","values","dirtyValues","result","err","isValidationErrorShape","extractServerErrors","reset","inject","DestroyRef","computed","signal","injectBitField","path","store","inject","BIT_STORE_TOKEN","stateSignal","signal","unsubscribe","DestroyRef","value","computed","getDeepValue","rawError","touched","error","isDirty","isValidating","isHidden","isRequired","invalid","resolvedMask","displayValue","val","setValue","stringVal","setBlur","hasError","e","DestroyRef","signal","computed","inject","untracked","generateId","injectBitArray","path","store","inject","BIT_STORE_TOKEN","destroyRef","DestroyRef","getRaw","val","getDeepValue","valuesSig","signal","idsSig","unsub","next","ids","untracked","computed","v","i","_","idx","index","a","b","f","t","it","items","computed","DestroyRef","inject","signal","injectBitHistory","store","useBitStore","destroyRef","inject","DestroyRef","meta","signal","sub","computed","signal","computed","DestroyRef","inject","errorsEqual","a","b","keysA","keysB","k","injectBitScope","scopeName","store","useBitStore","initialStatus","status","signal","unsubscribe","newStatus","current","inject","DestroyRef","validate","valid","errors","getErrors","isValid","computed","isDirty","signal","computed","DestroyRef","inject","errorsEqual","a","b","keysA","keysB","k","injectBitSteps","scopeNames","store","useBitStore","stepIndex","signal","scope","computed","getCurrentScope","status","updateStatus","scopeName","newStatus","current","unsubscribe","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","deepEqual","unsub","v","computed","inject","injectBitUpload","fieldPath","uploadFn","deleteFile","store","inject","BIT_STORE_TOKEN","field","injectBitField","uploadKey","upload","file","result","error","message","remove","computed","signal","injectBitPersist","store","useBitStore","isSaving","signal","isRestoring","error","err"]}
|
|
@@ -74,6 +74,107 @@ interface DevToolsOptions {
|
|
|
74
74
|
mode?: "local" | "remote";
|
|
75
75
|
url?: string;
|
|
76
76
|
}
|
|
77
|
+
type BitPluginHookSource = "beforeValidate" | "afterValidate" | "beforeSubmit" | "afterSubmit" | "onFieldChange" | "setup" | "teardown" | "submit";
|
|
78
|
+
type BitFieldChangeOrigin = "setField" | "setValues" | "array";
|
|
79
|
+
type BitArrayOperation = "push" | "prepend" | "insert" | "remove" | "move" | "swap";
|
|
80
|
+
interface BitFieldChangeMeta {
|
|
81
|
+
origin: BitFieldChangeOrigin;
|
|
82
|
+
operation?: BitArrayOperation;
|
|
83
|
+
index?: number;
|
|
84
|
+
from?: number;
|
|
85
|
+
to?: number;
|
|
86
|
+
}
|
|
87
|
+
interface BitFieldChangeEvent<T extends object = any> {
|
|
88
|
+
path: string;
|
|
89
|
+
previousValue: unknown;
|
|
90
|
+
nextValue: unknown;
|
|
91
|
+
values: Readonly<T>;
|
|
92
|
+
state: Readonly<BitState<T>>;
|
|
93
|
+
meta: BitFieldChangeMeta;
|
|
94
|
+
}
|
|
95
|
+
interface BitBeforeValidateEvent<T extends object = any> {
|
|
96
|
+
values: Readonly<T>;
|
|
97
|
+
state: Readonly<BitState<T>>;
|
|
98
|
+
scope?: string;
|
|
99
|
+
scopeFields?: string[];
|
|
100
|
+
}
|
|
101
|
+
interface BitAfterValidateEvent<T extends object = any> {
|
|
102
|
+
values: Readonly<T>;
|
|
103
|
+
state: Readonly<BitState<T>>;
|
|
104
|
+
scope?: string;
|
|
105
|
+
scopeFields?: string[];
|
|
106
|
+
errors: BitErrors<T>;
|
|
107
|
+
result: boolean;
|
|
108
|
+
aborted?: boolean;
|
|
109
|
+
}
|
|
110
|
+
interface BitBeforeSubmitEvent<T extends object = any> {
|
|
111
|
+
values: Readonly<T>;
|
|
112
|
+
dirtyValues: Readonly<Partial<T>>;
|
|
113
|
+
state: Readonly<BitState<T>>;
|
|
114
|
+
}
|
|
115
|
+
interface BitAfterSubmitEvent<T extends object = any> {
|
|
116
|
+
values: Readonly<T>;
|
|
117
|
+
dirtyValues: Readonly<Partial<T>>;
|
|
118
|
+
state: Readonly<BitState<T>>;
|
|
119
|
+
success: boolean;
|
|
120
|
+
error?: unknown;
|
|
121
|
+
invalid?: boolean;
|
|
122
|
+
}
|
|
123
|
+
interface BitPluginErrorEvent<T extends object = any> {
|
|
124
|
+
source: BitPluginHookSource;
|
|
125
|
+
pluginName?: string;
|
|
126
|
+
error: unknown;
|
|
127
|
+
event?: unknown;
|
|
128
|
+
values: Readonly<T>;
|
|
129
|
+
state: Readonly<BitState<T>>;
|
|
130
|
+
}
|
|
131
|
+
interface BitPluginContext<T extends object = any> {
|
|
132
|
+
storeId: string;
|
|
133
|
+
getState: () => Readonly<BitState<T>>;
|
|
134
|
+
getConfig: () => Readonly<BitConfig<T>>;
|
|
135
|
+
}
|
|
136
|
+
interface BitPluginHooks<T extends object = any> {
|
|
137
|
+
beforeValidate?: (event: BitBeforeValidateEvent<T>, context: BitPluginContext<T>) => BitMaybePromise<void>;
|
|
138
|
+
afterValidate?: (event: BitAfterValidateEvent<T>, context: BitPluginContext<T>) => BitMaybePromise<void>;
|
|
139
|
+
beforeSubmit?: (event: BitBeforeSubmitEvent<T>, context: BitPluginContext<T>) => BitMaybePromise<void>;
|
|
140
|
+
afterSubmit?: (event: BitAfterSubmitEvent<T>, context: BitPluginContext<T>) => BitMaybePromise<void>;
|
|
141
|
+
onFieldChange?: (event: BitFieldChangeEvent<T>, context: BitPluginContext<T>) => BitMaybePromise<void>;
|
|
142
|
+
onError?: (event: BitPluginErrorEvent<T>, context: BitPluginContext<T>) => BitMaybePromise<void>;
|
|
143
|
+
}
|
|
144
|
+
interface BitPlugin<T extends object = any> {
|
|
145
|
+
name: string;
|
|
146
|
+
setup?: (context: BitPluginContext<T>) => void | (() => void);
|
|
147
|
+
hooks?: BitPluginHooks<T>;
|
|
148
|
+
}
|
|
149
|
+
type BitMaybePromise<T> = T | Promise<T>;
|
|
150
|
+
interface BitPersistStorageAdapter {
|
|
151
|
+
getItem(key: string): BitMaybePromise<string | null>;
|
|
152
|
+
setItem(key: string, value: string): BitMaybePromise<void>;
|
|
153
|
+
removeItem(key: string): BitMaybePromise<void>;
|
|
154
|
+
}
|
|
155
|
+
type BitPersistMode = "values" | "dirtyValues";
|
|
156
|
+
interface BitPersistConfig<T extends object = any> {
|
|
157
|
+
enabled?: boolean;
|
|
158
|
+
key?: string;
|
|
159
|
+
storage?: BitPersistStorageAdapter;
|
|
160
|
+
autoSave?: boolean;
|
|
161
|
+
debounceMs?: number;
|
|
162
|
+
mode?: BitPersistMode;
|
|
163
|
+
serialize?: (payload: unknown) => string;
|
|
164
|
+
deserialize?: (raw: string) => Partial<T>;
|
|
165
|
+
onError?: (error: unknown) => void;
|
|
166
|
+
}
|
|
167
|
+
interface BitPersistResolvedConfig<T extends object = any> {
|
|
168
|
+
enabled: boolean;
|
|
169
|
+
key: string;
|
|
170
|
+
storage?: BitPersistStorageAdapter;
|
|
171
|
+
autoSave: boolean;
|
|
172
|
+
debounceMs: number;
|
|
173
|
+
mode: BitPersistMode;
|
|
174
|
+
serialize: (payload: unknown) => string;
|
|
175
|
+
deserialize: (raw: string) => Partial<T>;
|
|
176
|
+
onError?: (error: unknown) => void;
|
|
177
|
+
}
|
|
77
178
|
/** Validation config. */
|
|
78
179
|
interface BitValidationConfig<T> {
|
|
79
180
|
resolver?: ValidatorFn<T>;
|
|
@@ -100,6 +201,10 @@ interface BitConfig<T extends object = any> {
|
|
|
100
201
|
history?: BitHistoryConfig;
|
|
101
202
|
/** DevTools */
|
|
102
203
|
devTools?: boolean | DevToolsOptions;
|
|
204
|
+
/** Persistência local de rascunho */
|
|
205
|
+
persist?: BitPersistConfig<T>;
|
|
206
|
+
/** Plugins de lifecycle (observabilidade) */
|
|
207
|
+
plugins?: BitPlugin<T>[];
|
|
103
208
|
}
|
|
104
209
|
/** Return type of BitStore.getStepStatus, used by useBitScope/injectBitScope. */
|
|
105
210
|
interface ScopeStatus {
|
|
@@ -138,4 +243,4 @@ declare global {
|
|
|
138
243
|
}
|
|
139
244
|
declare const bitBus: BitFormGlobal;
|
|
140
245
|
|
|
141
|
-
export { type BitConfig as B, type CurrencyMaskConfig as C, type DateMaskConfig as D, type PatternMaskOptions as P, type ScopeStatus as S, type ValidateScopeResult as V, type BitMask as a, type
|
|
246
|
+
export { type BitTransformFn as A, type BitConfig as B, type CurrencyMaskConfig as C, type DateMaskConfig as D, type BitValidationConfig as E, type DeepPartial as F, type ValidatorFn as G, bitBus as H, type DevToolsOptions as I, type BitPersistResolvedConfig as J, type PatternMaskOptions as P, type ScopeStatus as S, type ValidateScopeResult as V, type BitMask as a, type BitAfterSubmitEvent as b, type BitAfterValidateEvent as c, type BitArrayItem as d, type BitArrayPath as e, type BitBeforeSubmitEvent as f, type BitBeforeValidateEvent as g, type BitComputedFn as h, type BitErrors as i, type BitFieldChangeEvent as j, type BitFieldChangeMeta as k, type BitFieldConditional as l, type BitFieldDefinition as m, type BitFieldValidation as n, type BitHistoryConfig as o, type BitPath as p, type BitPathValue as q, type BitPersistConfig as r, type BitPersistMode as s, type BitPersistStorageAdapter as t, type BitPlugin as u, type BitPluginContext as v, type BitPluginErrorEvent as w, type BitPluginHooks as x, type BitState as y, type BitTouched as z };
|