@lehnihon/bit-form 1.0.7 → 2.0.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.
Files changed (66) hide show
  1. package/README.md +3 -1
  2. package/dist/angular/index.cjs +1 -1
  3. package/dist/angular/index.cjs.map +1 -1
  4. package/dist/angular/index.d.cts +51 -44
  5. package/dist/angular/index.d.ts +51 -44
  6. package/dist/angular/index.js +1 -1
  7. package/dist/angular/index.js.map +1 -1
  8. package/dist/{bus-DkMkzOXE.d.cts → bus-CnqfsZpc.d.cts} +56 -1
  9. package/dist/{bus-DkMkzOXE.d.ts → bus-CnqfsZpc.d.ts} +56 -1
  10. package/dist/chunk-4KRTZKIQ.js +133 -0
  11. package/dist/chunk-4KRTZKIQ.js.map +1 -0
  12. package/dist/chunk-JEVGTLOM.js +2 -0
  13. package/dist/chunk-JEVGTLOM.js.map +1 -0
  14. package/dist/chunk-K3DCDRWB.cjs +133 -0
  15. package/dist/chunk-K3DCDRWB.cjs.map +1 -0
  16. package/dist/chunk-P3XTUPHK.cjs +2 -0
  17. package/dist/chunk-P3XTUPHK.cjs.map +1 -0
  18. package/dist/cli/index.cjs +404 -4
  19. package/dist/devtools/bridge.cjs +1 -1
  20. package/dist/devtools/bridge.js +1 -1
  21. package/dist/devtools/index.cjs +1 -1
  22. package/dist/devtools/index.js +1 -1
  23. package/dist/index-BAOM6INR.d.ts +206 -0
  24. package/dist/index-BdLuC0wS.d.cts +206 -0
  25. package/dist/index.cjs +1 -1
  26. package/dist/index.cjs.map +1 -1
  27. package/dist/index.d.cts +28 -4
  28. package/dist/index.d.ts +28 -4
  29. package/dist/index.js +1 -1
  30. package/dist/react/index.cjs +1 -1
  31. package/dist/react/index.cjs.map +1 -1
  32. package/dist/react/index.d.cts +33 -22
  33. package/dist/react/index.d.ts +33 -22
  34. package/dist/react/index.js +1 -1
  35. package/dist/react/index.js.map +1 -1
  36. package/dist/react-native/index.cjs +1 -1
  37. package/dist/react-native/index.cjs.map +1 -1
  38. package/dist/react-native/index.d.cts +24 -14
  39. package/dist/react-native/index.d.ts +24 -14
  40. package/dist/react-native/index.js +1 -1
  41. package/dist/react-native/index.js.map +1 -1
  42. package/dist/resolvers/joi.d.cts +1 -1
  43. package/dist/resolvers/joi.d.ts +1 -1
  44. package/dist/resolvers/yup.d.cts +1 -1
  45. package/dist/resolvers/yup.d.ts +1 -1
  46. package/dist/resolvers/zod.d.cts +1 -1
  47. package/dist/resolvers/zod.d.ts +1 -1
  48. package/dist/{use-bit-watch-DEYCmgNf.d.ts → use-bit-watch-B_ket_j5.d.ts} +27 -28
  49. package/dist/{use-bit-watch-wjK9PF7w.d.cts → use-bit-watch-CtdglHvd.d.cts} +27 -28
  50. package/dist/vue/index.cjs +1 -1
  51. package/dist/vue/index.cjs.map +1 -1
  52. package/dist/vue/index.d.cts +55 -45
  53. package/dist/vue/index.d.ts +55 -45
  54. package/dist/vue/index.js +1 -1
  55. package/dist/vue/index.js.map +1 -1
  56. package/package.json +1 -1
  57. package/dist/chunk-6ISGLRK2.cjs +0 -2
  58. package/dist/chunk-6ISGLRK2.cjs.map +0 -1
  59. package/dist/chunk-J3EGU5ZH.cjs +0 -133
  60. package/dist/chunk-J3EGU5ZH.cjs.map +0 -1
  61. package/dist/chunk-OA4FCEV2.js +0 -2
  62. package/dist/chunk-OA4FCEV2.js.map +0 -1
  63. package/dist/chunk-QU365SAC.js +0 -133
  64. package/dist/chunk-QU365SAC.js.map +0 -1
  65. package/dist/index-BXaNeJBk.d.ts +0 -111
  66. package/dist/index-mzR_3Kbx.d.cts +0 -111
package/README.md CHANGED
@@ -149,6 +149,7 @@ The complete documentation is available in the `/docs` folder. Explore the guide
149
149
  ### 🖼 Framework Guides
150
150
 
151
151
  - **[React](./docs/frameworks/react.md)**: Using hooks and Context Provider.
152
+ - **[React + shadcn/ui](./docs/frameworks/react-shadcn.md)**: Generate form wrappers with `bit-form add shadcn` (Input, Textarea, Select, Checkbox, Switch, RadioGroup).
152
153
  - **[React Native](./docs/frameworks/react-native.md)**: Mobile specifics and `onChangeText` mapping.
153
154
  - **[Vue](./docs/frameworks/vue.md)**: Using composables and InjectionKeys.
154
155
  - **[Angular](./docs/frameworks/angular.md)**: Reactive forms via Signals.
@@ -169,11 +170,12 @@ The complete documentation is available in the `/docs` folder. Explore the guide
169
170
  - **[Complete Form Example](./docs/examples/complete-form-example.md)**: End-to-end example with masks, asyncValidate, conditional logic, scopes, history, and DevTools.
170
171
  - **[Server Errors](./docs/examples/server-errors.md)**: Client validation (resolver/asyncValidate) vs API 422 handling (setServerErrors, onSubmit).
171
172
 
172
- ### 🔍 DevTools
173
+ ### 🔍 DevTools & CLI
173
174
 
174
175
  - **[DevTools Overview](./docs/devtools/index.md)**: Configuration (`devTools: true` or `{ mode: "remote" }`).
175
176
  - **[Floating Panel](./docs/devtools/floating-panel.md)**: In-app inspector (local mode).
176
177
  - **[CLI & Remote Dashboard](./docs/devtools/cli-remote-dashboard.md)**: `bit-form devtools` + WebSocket for React Native / remote debugging.
178
+ - **CLI `add`**: Generate Bit-Form + shadcn/ui wrappers with `bit-form add shadcn [input|textarea|select|checkbox|switch|radio-group]` — see [React + shadcn](./docs/frameworks/react-shadcn.md).
177
179
 
178
180
  ### 📑 Reference
179
181
 
@@ -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 _chunkJ3EGU5ZHcjs = require('../chunk-J3EGU5ZH.cjs');var _core = require('@angular/core');var h=new (0, _core.InjectionToken)("BIT_STORE");function C(t){return{provide:h,useValue:t}}function S(){let t=_core.inject.call(void 0, h,{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 $(){let t=S(),e=_core.inject.call(void 0, _core.DestroyRef),o=_core.signal.call(void 0, t.getState()),r=_core.signal.call(void 0, null),n=_core.signal.call(void 0, null),c=t.subscribe(()=>{o.set(t.getState())});e.onDestroy(()=>c());let g=_core.computed.call(void 0, ()=>o().isValid),s=_core.computed.call(void 0, ()=>o().isSubmitting),i=_core.computed.call(void 0, ()=>o().isDirty),d=_core.computed.call(void 0, ()=>(o(),t.canUndo)),u=_core.computed.call(void 0, ()=>(o(),t.canRedo));return{store:t,isValid:g,isSubmitting:s,isDirty:i,canUndo:d,canRedo:u,getValues:()=>o().values,getErrors:()=>o().errors,getTouched:()=>o().touched,submit:B=>f=>(_optionalChain([f, 'optionalAccess', _2 => _2.preventDefault, 'call', _3 => _3()]),_optionalChain([f, 'optionalAccess', _4 => _4.stopPropagation, 'call', _5 => _5()]),t.submit(B)),onSubmit:B=>f=>(_optionalChain([f, 'optionalAccess', _6 => _6.preventDefault, 'call', _7 => _7()]),_optionalChain([f, 'optionalAccess', _8 => _8.stopPropagation, 'call', _9 => _9()]),r.set(null),t.submit(async l=>{try{let a=await B(l);n.set(a),r.set(null)}catch(a){_chunkJ3EGU5ZHcjs.h.call(void 0, a)?t.setServerErrors(_chunkJ3EGU5ZHcjs.i.call(void 0, a)):r.set(a instanceof Error?a:new Error(String(a)))}})),submitError:r,lastResponse:n,reset:()=>{t.reset(),r.set(null),n.set(null)},validate:t.validate.bind(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),registerMask:t.registerMask.bind(t),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),undo:t.undo.bind(t),redo:t.redo.bind(t)}}function J(t,e,o){let r=_core.inject.call(void 0, h),n=_core.signal.call(void 0, r.getState()),c=r.subscribe(()=>{n.set(r.getState())});_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>{c(),r.unregisterField&&r.unregisterField(t)}),e&&r.registerField(t,e);let g=_core.computed.call(void 0, ()=>_chunkJ3EGU5ZHcjs.e.call(void 0, n().values,t)),s=_core.computed.call(void 0, ()=>n().errors[t]),i=_core.computed.call(void 0, ()=>!!n().touched[t]),d=_core.computed.call(void 0, ()=>(n(),r.isFieldDirty(t))),u=_core.computed.call(void 0, ()=>(n(),r.isFieldValidating(t))),m=_core.computed.call(void 0, ()=>(n(),r.isHidden(t))),R=_core.computed.call(void 0, ()=>(n(),r.isRequired(t))),V=_core.computed.call(void 0, ()=>i()&&!!s()),b=_nullishCoalesce(_optionalChain([o, 'optionalAccess', _10 => _10.mask]), () => (_optionalChain([r, 'access', _11 => _11.config, 'access', _12 => _12.fields, 'optionalAccess', _13 => _13[t], 'optionalAccess', _14 => _14.mask]))),P=b?typeof b=="string"?r.config.masks[b]:b:void 0,x=_core.computed.call(void 0, ()=>{let a=g();return a==null||a===""?"":P?P.format(a):String(a)}),B=a=>{if(!P){r.setField(t,a);return}let p=String(_nullishCoalesce(a, () => ("")));r.setField(t,P.parse(p))},f=()=>r.blurField(t),l=_core.computed.call(void 0, ()=>({isDirty:d(),isValidating:u(),isHidden:m(),isRequired:R(),hasError:!!s()}));return{value:g,displayValue:x,error:s,touched:i,invalid:V,isDirty:d,isValidating:u,isHidden:m,isRequired:R,fieldMeta:l,setValue:B,setBlur:f,update:a=>B(_nullishCoalesce(_optionalChain([a, 'optionalAccess', _15 => _15.target, 'optionalAccess', _16 => _16.value]), () => (a)))}}var F=()=>Math.random().toString(36).substring(2,9);function Y(t){let e=_core.inject.call(void 0, h),o=_core.inject.call(void 0, _core.DestroyRef),r=()=>{let s=_chunkJ3EGU5ZHcjs.e.call(void 0, e.getState().values,t);return Array.isArray(s)?s:[]},n=_core.signal.call(void 0, r()),c=_core.signal.call(void 0, n().map(F)),g=e.subscribe(()=>{let s=r(),i=_core.untracked.call(void 0, c);n.set(s),s.length!==i.length&&(s.length>i.length?c.set([...i,...Array.from({length:s.length-i.length},F)]):c.set(i.slice(0,s.length)))});return o.onDestroy(()=>{g(),e.unregisterPrefix&&e.unregisterPrefix(`${t}.`)}),{fields:_core.computed.call(void 0, ()=>n().map((s,i)=>({key:c()[i]||`temp-${i}`,value:s,index:i}))),length:_core.computed.call(void 0, ()=>n().length),append:s=>{c.update(i=>[...i,F()]),e.pushItem(t,s)},prepend:s=>{c.update(i=>[F(),...i]),e.prependItem(t,s)},remove:s=>{c.update(i=>i.filter((d,u)=>u!==s)),e.removeItem(t,s)},insert:(s,i)=>{c.update(d=>{let u=[...d];return u.splice(s,0,F()),u}),e.insertItem(t,s,i)},swap:(s,i)=>{c.update(d=>{let u=[...d];return[u[s],u[i]]=[u[i],u[s]],u}),e.swapItems(t,s,i)},move:(s,i)=>{c.update(d=>{let u=[...d],[m]=u.splice(s,1);return u.splice(i,0,m),u}),e.moveItem(t,s,i)},replace:s=>{c.set(s.map(()=>F())),e.setField(t,s)},clear:()=>{c.set([]),e.setField(t,[])}}}function et(t,e){let o=Object.keys(t),r=Object.keys(e);return o.length!==r.length?!1:o.every(n=>t[n]===e[n])}function rt(t){let e=S(),o=e.getStepStatus(t),r=_core.signal.call(void 0, o),n=e.subscribe(()=>{let u=e.getStepStatus(t),m=r();(u.hasErrors!==m.hasErrors||u.isDirty!==m.isDirty||!et(u.errors,m.errors))&&r.set(u)});try{_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>n())}catch (e2){}let c=async()=>{let u=await e.validate({scope:t}),m=e.getStepErrors(t);return{valid:u,errors:m}},g=()=>e.getStepErrors(t),s=_core.computed.call(void 0, ()=>!r().hasErrors),i=_core.computed.call(void 0, ()=>r().isDirty),d=_core.computed.call(void 0, ()=>r().errors);return{scopeName:t,status:r,errors:d,validate:c,getErrors:g,isValid:s,isDirty:i,unsubscribe:n}}function nt(t,e){let o=Object.keys(t),r=Object.keys(e);return o.length!==r.length?!1:o.every(n=>t[n]===e[n])}function it(t){let e=S(),o=_core.signal.call(void 0, 0),r=_core.computed.call(void 0, ()=>_nullishCoalesce(t[o()], () => (""))),n=()=>_nullishCoalesce(t[o()], () => ("")),c=_core.signal.call(void 0, e.getStepStatus(n())),g=()=>{let l=n(),a=e.getStepStatus(l),p=c();(a.hasErrors!==p.hasErrors||a.isDirty!==p.isDirty||!nt(a.errors,p.errors))&&c.set(a)},s=e.subscribe(g);try{_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>s())}catch (e3){}let i=async()=>{let l=n(),a=await e.validate({scope:l}),p=e.getStepErrors(l);return{valid:a,errors:p}},d=()=>e.getStepErrors(n()),u=async()=>{let l=n(),a=await e.validate({scope:l});if(a){let p=Math.min(o()+1,t.length-1);o.set(p),c.set(e.getStepStatus(_nullishCoalesce(t[p], () => (""))))}else{let p=e.getStepErrors(l),j=Object.keys(p);j.length>0&&e.markFieldsTouched(j)}return a},m=()=>{let l=Math.max(o()-1,0);o.set(l),c.set(e.getStepStatus(_nullishCoalesce(t[l], () => (""))))},R=l=>{let a=Math.max(0,Math.min(l-1,t.length-1));o.set(a),c.set(e.getStepStatus(_nullishCoalesce(t[a], () => (""))))},V=_core.computed.call(void 0, ()=>o()+1),b=_core.computed.call(void 0, ()=>o()===0),P=_core.computed.call(void 0, ()=>o()>=t.length-1),x=_core.computed.call(void 0, ()=>!c().hasErrors),B=_core.computed.call(void 0, ()=>c().isDirty),f=_core.computed.call(void 0, ()=>c().errors);return{step:V,stepIndex:o,scope:r,next:u,prev:m,goTo:R,isFirst:b,isLast:P,status:c,errors:f,isValid:x,isDirty:B,validate:i,getErrors:d}}function lt(t){let e=S(),o=_core.inject.call(void 0, _core.DestroyRef),r=_core.signal.call(void 0, _chunkJ3EGU5ZHcjs.e.call(void 0, e.getState().values,t),{equal:_chunkJ3EGU5ZHcjs.d}),n=e.watch(t,c=>{r.set(c)});return o.onDestroy(n),r.asReadonly()}exports.injectBitArray = Y; exports.injectBitField = J; exports.injectBitForm = $; exports.injectBitScope = rt; exports.injectBitSteps = it; exports.injectBitWatch = lt; exports.provideBitStore = C; exports.useBitStore = S;
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 _chunkK3DCDRWBcjs = require('../chunk-K3DCDRWB.cjs');var _core = require('@angular/core');var v=new (0, _core.InjectionToken)("BIT_STORE");function C(t){return{provide:v,useValue:t}}function g(){let t=_core.inject.call(void 0, v,{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 G(){let t=g(),e=_core.inject.call(void 0, _core.DestroyRef),s=_core.signal.call(void 0, t.getState()),r=_core.signal.call(void 0, null),n=_core.signal.call(void 0, null),a=t.subscribe(()=>{s.set(t.getState())});e.onDestroy(()=>a());let S=_core.computed.call(void 0, ()=>s().isValid),o=_core.computed.call(void 0, ()=>s().isSubmitting),i=_core.computed.call(void 0, ()=>s().isDirty),m=()=>s().values,c=()=>s().errors,y=()=>s().touched,x=()=>t.getDirtyValues(),I=P=>B=>(_optionalChain([B, 'optionalAccess', _2 => _2.preventDefault, 'call', _3 => _3()]),_optionalChain([B, 'optionalAccess', _4 => _4.stopPropagation, 'call', _5 => _5()]),t.submit(P)),V=P=>B=>(_optionalChain([B, 'optionalAccess', _6 => _6.preventDefault, 'call', _7 => _7()]),_optionalChain([B, 'optionalAccess', _8 => _8.stopPropagation, 'call', _9 => _9()]),r.set(null),t.submit(async(l,d)=>{try{let u=await P(l,d);n.set(u),r.set(null)}catch(u){_chunkK3DCDRWBcjs.h.call(void 0, u)?t.setServerErrors(_chunkK3DCDRWBcjs.i.call(void 0, u)):r.set(u instanceof Error?u:new Error(String(u)))}})),b=()=>{t.reset(),r.set(null),n.set(null)};return{meta:{isValid:S,isDirty:i,isSubmitting:o,submitError:r.asReadonly(),lastResponse:n.asReadonly()},getValues:m,getErrors:c,getTouched:y,getDirtyValues:x,submit:I,onSubmit:V,reset:b,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 X(t,e,s){let r=_core.inject.call(void 0, v),n=_core.signal.call(void 0, r.getState()),a=r.subscribe(()=>{n.set(r.getState())});_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>{a(),r.unregisterField&&r.unregisterField(t)}),e&&r.registerField(t,e);let S=_core.computed.call(void 0, ()=>_chunkK3DCDRWBcjs.e.call(void 0, n().values,t)),o=_core.computed.call(void 0, ()=>n().errors[t]),i=_core.computed.call(void 0, ()=>!!n().touched[t]),m=_core.computed.call(void 0, ()=>i()?o():void 0),c=_core.computed.call(void 0, ()=>(n(),r.isFieldDirty(t))),y=_core.computed.call(void 0, ()=>(n(),r.isFieldValidating(t))),x=_core.computed.call(void 0, ()=>(n(),r.isHidden(t))),I=_core.computed.call(void 0, ()=>(n(),r.isRequired(t))),V=_core.computed.call(void 0, ()=>i()&&!!o()),b=_nullishCoalesce(_optionalChain([s, 'optionalAccess', _10 => _10.mask]), () => (_optionalChain([r, 'access', _11 => _11.config, 'access', _12 => _12.fields, 'optionalAccess', _13 => _13[t], 'optionalAccess', _14 => _14.mask]))),T=b?typeof b=="string"?r.config.masks[b]:b:void 0,P=_core.computed.call(void 0, ()=>{let p=S();return p==null||p===""?"":T?T.format(p):String(p)}),B=p=>{if(!T){r.setField(t,p);return}let K=String(_nullishCoalesce(p, () => ("")));r.setField(t,T.parse(K))},l=()=>r.blurField(t),d=_core.computed.call(void 0, ()=>!!o());return{value:S,displayValue:P,setValue:B,setBlur:l,update:p=>B(_nullishCoalesce(_optionalChain([p, 'optionalAccess', _15 => _15.target, 'optionalAccess', _16 => _16.value]), () => (p))),meta:{error:m,touched:i,invalid:V,isDirty:c,isValidating:y,isHidden:x,isRequired:I,hasError:d}}}var F=()=>Math.random().toString(36).substring(2,9);function N(t){let e=_core.inject.call(void 0, v),s=_core.inject.call(void 0, _core.DestroyRef),r=()=>{let o=_chunkK3DCDRWBcjs.e.call(void 0, e.getState().values,t);return Array.isArray(o)?o:[]},n=_core.signal.call(void 0, r()),a=_core.signal.call(void 0, n().map(F)),S=e.subscribe(()=>{let o=r(),i=_core.untracked.call(void 0, a);n.set(o),o.length!==i.length&&(o.length>i.length?a.set([...i,...Array.from({length:o.length-i.length},F)]):a.set(i.slice(0,o.length)))});return s.onDestroy(()=>{S(),e.unregisterPrefix&&e.unregisterPrefix(`${t}.`)}),{fields:_core.computed.call(void 0, ()=>n().map((o,i)=>({key:a()[i]||`temp-${i}`,value:o,index:i}))),length:_core.computed.call(void 0, ()=>n().length),append:o=>{a.update(i=>[...i,F()]),e.pushItem(t,o)},prepend:o=>{a.update(i=>[F(),...i]),e.prependItem(t,o)},remove:o=>{a.update(i=>i.filter((m,c)=>c!==o)),e.removeItem(t,o)},insert:(o,i)=>{a.update(m=>{let c=[...m];return c.splice(o,0,F()),c}),e.insertItem(t,o,i)},swap:(o,i)=>{a.update(m=>{let c=[...m];return[c[o],c[i]]=[c[i],c[o]],c}),e.swapItems(t,o,i)},move:(o,i)=>{a.update(m=>{let c=[...m],[y]=c.splice(o,1);return c.splice(i,0,y),c}),e.moveItem(t,o,i)},replace:o=>{a.set(o.map(()=>F())),e.setField(t,o)},clear:()=>{a.set([]),e.setField(t,[])}}}function ot(){let t=g(),e=_core.inject.call(void 0, _core.DestroyRef),s=_core.signal.call(void 0, t.getHistoryMetadata()),r=t.subscribe(()=>{s.set(t.getHistoryMetadata())});return e.onDestroy(()=>r()),{canUndo:_core.computed.call(void 0, ()=>s().canUndo),canRedo:_core.computed.call(void 0, ()=>s().canRedo),historyIndex:_core.computed.call(void 0, ()=>s().historyIndex),historySize:_core.computed.call(void 0, ()=>s().historySize),undo:()=>t.undo(),redo:()=>t.redo()}}function at(t,e){let s=Object.keys(t),r=Object.keys(e);return s.length!==r.length?!1:s.every(n=>t[n]===e[n])}function ct(t){let e=g(),s=e.getStepStatus(t),r=_core.signal.call(void 0, s),n=e.subscribe(()=>{let c=e.getStepStatus(t),y=r();(c.hasErrors!==y.hasErrors||c.isDirty!==y.isDirty||!at(c.errors,y.errors))&&r.set(c)});try{_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>n())}catch (e2){}let a=async()=>{let c=await e.validate({scope:t}),y=e.getStepErrors(t);return{valid:c,errors:y}},S=()=>e.getStepErrors(t),o=_core.computed.call(void 0, ()=>!r().hasErrors),i=_core.computed.call(void 0, ()=>r().isDirty),m=_core.computed.call(void 0, ()=>r().errors);return{scopeName:t,status:r,errors:m,validate:a,getErrors:S,isValid:o,isDirty:i,unsubscribe:n}}function dt(t,e){let s=Object.keys(t),r=Object.keys(e);return s.length!==r.length?!1:s.every(n=>t[n]===e[n])}function mt(t){let e=g(),s=_core.signal.call(void 0, 0),r=_core.computed.call(void 0, ()=>_nullishCoalesce(t[s()], () => (""))),n=()=>_nullishCoalesce(t[s()], () => ("")),a=_core.signal.call(void 0, e.getStepStatus(n())),S=()=>{let l=n(),d=e.getStepStatus(l),u=a();(d.hasErrors!==u.hasErrors||d.isDirty!==u.isDirty||!dt(d.errors,u.errors))&&a.set(d)},o=e.subscribe(S);try{_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>o())}catch (e3){}let i=async()=>{let l=n(),d=await e.validate({scope:l}),u=e.getStepErrors(l);return{valid:d,errors:u}},m=()=>e.getStepErrors(n()),c=async()=>{let l=n(),d=await e.validate({scope:l});if(d){let u=Math.min(s()+1,t.length-1);s.set(u),a.set(e.getStepStatus(_nullishCoalesce(t[u], () => (""))))}else{let u=e.getStepErrors(l),p=Object.keys(u);p.length>0&&e.markFieldsTouched(p)}return d},y=()=>{let l=Math.max(s()-1,0);s.set(l),a.set(e.getStepStatus(_nullishCoalesce(t[l], () => (""))))},x=l=>{let d=Math.max(0,Math.min(l-1,t.length-1));s.set(d),a.set(e.getStepStatus(_nullishCoalesce(t[d], () => (""))))},I=_core.computed.call(void 0, ()=>s()+1),V=_core.computed.call(void 0, ()=>s()===0),b=_core.computed.call(void 0, ()=>s()>=t.length-1),T=_core.computed.call(void 0, ()=>!a().hasErrors),P=_core.computed.call(void 0, ()=>a().isDirty),B=_core.computed.call(void 0, ()=>a().errors);return{step:I,stepIndex:s,scope:r,next:c,prev:y,goTo:x,isFirst:V,isLast:b,status:a,errors:B,isValid:T,isDirty:P,validate:i,getErrors:m}}function ft(t){let e=g(),s=_core.inject.call(void 0, _core.DestroyRef),r=_core.signal.call(void 0, _chunkK3DCDRWBcjs.e.call(void 0, e.getState().values,t),{equal:_chunkK3DCDRWBcjs.d}),n=e.watch(t,a=>{r.set(a)});return s.onDestroy(n),r.asReadonly()}exports.injectBitArray = N; exports.injectBitField = X; exports.injectBitForm = G; exports.injectBitHistory = ot; exports.injectBitScope = ct; exports.injectBitSteps = mt; exports.injectBitWatch = ft; exports.provideBitStore = C; exports.useBitStore = g;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/angular/index.cjs","../../src/angular/provider.ts","../../src/angular/inject-bit-form.ts","../../src/angular/inject-bit-field.ts","../../src/angular/inject-bit-array.ts"],"names":["BIT_STORE_TOKEN","InjectionToken","provideBitStore","store","useBitStore","inject","injectBitForm","destroyRef","stateSignal","signal","submitError","lastResponse","sub","isValid","computed","isSubmitting","isDirty","canUndo","canRedo","onSuccess","event","handler","values","result","err","isValidationErrorShape","extractServerErrors","injectBitField","path","config","options","unsubscribe","value","getDeepValue","error","touched","isValidating","isHidden","isRequired","invalid","maskOption","resolvedMask","displayValue","val","setValue","stringVal","setBlur","fieldMeta","e","generateId","injectBitArray","getRaw","valuesSig","idsSig","unsub","next","ids","untracked"],"mappings":"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","file":"/home/runner/work/bit-form/bit-form/dist/angular/index.cjs","sourcesContent":[null,"import { inject, InjectionToken, Provider } from \"@angular/core\"; // IMPORTANTE: Adicione o 'inject' aqui\nimport { BitStore } from \"../core\";\n\nexport const BIT_STORE_TOKEN = new InjectionToken<BitStore<any>>(\"BIT_STORE\");\n\nexport function provideBitStore(store: BitStore<any>): 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 BitStore<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 canUndo = computed(() => {\n stateSignal();\n return store.canUndo;\n });\n\n const canRedo = computed(() => {\n stateSignal();\n return store.canRedo;\n });\n\n const getValues = () => stateSignal().values;\n const getErrors = () => stateSignal().errors;\n const getTouched = () => stateSignal().touched;\n\n const submit = (onSuccess: (values: T) => void | Promise<void>) => {\n return (event?: Event) => {\n event?.preventDefault();\n event?.stopPropagation();\n return store.submit(onSuccess);\n };\n };\n\n const onSubmit = (handler: (values: T) => Promise<unknown>) => {\n return (event?: Event) => {\n event?.preventDefault();\n event?.stopPropagation();\n submitError.set(null);\n return store.submit(async (values) => {\n try {\n const result = await handler(values);\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 return {\n store,\n isValid,\n isSubmitting,\n isDirty,\n canUndo,\n canRedo,\n getValues,\n getErrors,\n getTouched,\n submit,\n onSubmit,\n submitError,\n lastResponse,\n reset,\n validate: store.validate.bind(store),\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 registerMask: store.registerMask.bind(store),\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 undo: store.undo.bind(store),\n redo: store.redo.bind(store),\n };\n}\n","import { inject, DestroyRef, computed, signal } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport {\n BitFieldDefinition,\n BitFieldOptions,\n getDeepValue,\n BitPath,\n BitPathValue,\n} from \"../core\";\n\nexport function injectBitField<\n TValue = any,\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P, config?: BitFieldDefinition<TForm>, options?: BitFieldOptions) {\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 if (config) {\n store.registerField(path as string, config as any);\n }\n\n const value = computed(\n () =>\n getDeepValue(\n stateSignal().values,\n path as string,\n ) as BitPathValue<TForm, P>,\n );\n const error = computed(\n () => (stateSignal().errors as Record<string, any>)[path],\n );\n const touched = computed(\n () => !!(stateSignal().touched as Record<string, any>)[path],\n );\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() && !!error());\n\n const maskOption =\n options?.mask ?? store.config.fields?.[path as string]?.mask;\n const resolvedMask = maskOption\n ? typeof maskOption === \"string\"\n ? store.config.masks![maskOption]\n : maskOption\n : undefined;\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 fieldMeta = computed(() => ({\n isDirty: isDirty(),\n isValidating: isValidating(),\n isHidden: isHidden(),\n isRequired: isRequired(),\n hasError: !!error(),\n }));\n\n return {\n value,\n displayValue,\n error,\n touched,\n invalid,\n isDirty,\n isValidating,\n isHidden,\n isRequired,\n fieldMeta,\n setValue,\n setBlur,\n update: (e: any) => setValue(e?.target?.value ?? e),\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"]}
1
+ {"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/angular/index.cjs","../../src/angular/provider.ts","../../src/angular/inject-bit-form.ts","../../src/angular/inject-bit-field.ts","../../src/angular/inject-bit-array.ts"],"names":["BIT_STORE_TOKEN","InjectionToken","provideBitStore","store","useBitStore","inject","injectBitForm","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","injectBitField","path","config","options","unsubscribe","value","getDeepValue","rawError","touched","error","isValidating","isHidden","isRequired","invalid","maskOption","resolvedMask","displayValue","val","setValue","stringVal","setBlur","hasError","e","generateId","injectBitArray","getRaw","valuesSig","idsSig","unsub","next","ids","untracked"],"mappings":"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","file":"/home/runner/work/bit-form/bit-form/dist/angular/index.cjs","sourcesContent":[null,"import { inject, InjectionToken, Provider } from \"@angular/core\"; // IMPORTANTE: Adicione o 'inject' aqui\nimport { BitStore } from \"../core/store\";\n\nexport const BIT_STORE_TOKEN = new InjectionToken<BitStore<any>>(\"BIT_STORE\");\n\nexport function provideBitStore(store: BitStore<any>): 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 BitStore<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 {\n BitFieldDefinition,\n BitFieldOptions,\n getDeepValue,\n BitPath,\n BitPathValue,\n} from \"../core\";\n\nexport interface InjectBitFieldMeta {\n error: () => string | undefined;\n touched: () => boolean;\n invalid: () => boolean;\n isDirty: () => boolean;\n isValidating: () => boolean;\n isHidden: () => boolean;\n isRequired: () => boolean;\n hasError: () => boolean;\n}\n\nexport interface InjectBitFieldResult<\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n> {\n // Main handlers and values (flat)\n value: () => BitPathValue<TForm, P>;\n displayValue: () => string;\n setValue: (val: any) => void;\n setBlur: () => void;\n update: (e: any) => void;\n // Metadata (grouped)\n meta: InjectBitFieldMeta;\n}\n\nexport function injectBitField<\n TValue = any,\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(\n path: P,\n config?: BitFieldDefinition<TForm>,\n options?: BitFieldOptions,\n): 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 if (config) {\n store.registerField(path as string, config as any);\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 maskOption =\n options?.mask ?? store.config.fields?.[path as string]?.mask;\n const resolvedMask = maskOption\n ? typeof maskOption === \"string\"\n ? store.config.masks![maskOption]\n : maskOption\n : undefined;\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"]}
@@ -1,68 +1,65 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { Provider, computed, signal, Signal } from '@angular/core';
3
- import { B as BitStore } from '../index-mzR_3Kbx.cjs';
4
- import { e as BitErrors, n as BitTouched, k as BitPath, l as BitPathValue, B as BitMask, b as BitArrayPath, a as BitArrayItem, g as BitFieldDefinition, h as BitFieldOptions, S as ScopeStatus, V as ValidateScopeResult } from '../bus-DkMkzOXE.cjs';
3
+ import { B as BitStore } from '../index-BdLuC0wS.cjs';
4
+ import { d as BitErrors, o as BitTouched, b as BitPath, c as BitPathValue, h as BitArrayPath, g as BitArrayItem, k as BitFieldDefinition, l as BitFieldOptions, S as ScopeStatus, V as ValidateScopeResult } from '../bus-CnqfsZpc.cjs';
5
5
 
6
6
  declare function provideBitStore(store: BitStore<any>): Provider;
7
7
  declare function useBitStore<T extends object>(): BitStore<T>;
8
8
 
9
9
  declare function injectBitForm<T extends object>(): {
10
- store: BitStore<T>;
11
- isValid: _angular_core.Signal<boolean>;
12
- isSubmitting: _angular_core.Signal<boolean>;
13
- isDirty: _angular_core.Signal<boolean>;
14
- canUndo: _angular_core.Signal<boolean>;
15
- canRedo: _angular_core.Signal<boolean>;
10
+ meta: {
11
+ isValid: _angular_core.Signal<boolean>;
12
+ isDirty: _angular_core.Signal<boolean>;
13
+ isSubmitting: _angular_core.Signal<boolean>;
14
+ submitError: _angular_core.Signal<Error | null>;
15
+ lastResponse: _angular_core.Signal<unknown>;
16
+ };
16
17
  getValues: () => T;
17
18
  getErrors: () => BitErrors<T>;
18
19
  getTouched: () => BitTouched<T>;
19
- submit: (onSuccess: (values: T) => void | Promise<void>) => (event?: Event) => Promise<void>;
20
- onSubmit: (handler: (values: T) => Promise<unknown>) => (event?: Event) => Promise<void>;
21
- submitError: _angular_core.WritableSignal<Error | null>;
22
- lastResponse: _angular_core.WritableSignal<unknown>;
20
+ getDirtyValues: () => Partial<T>;
21
+ submit: (onSuccess: (values: T, dirtyValues?: Partial<T>) => void | Promise<void>) => (event?: Event) => Promise<void>;
22
+ onSubmit: (handler: (values: T, dirtyValues?: Partial<T>) => Promise<unknown>) => (event?: Event) => Promise<void>;
23
23
  reset: () => void;
24
- validate: (options?: {
25
- scope?: string;
26
- scopeFields?: string[];
27
- }) => Promise<boolean>;
28
24
  setValues: (newValues: T) => void;
29
25
  setError: (path: string, message: string | undefined) => void;
30
26
  setErrors: (errors: BitErrors<T>) => void;
31
27
  setServerErrors: (serverErrors: Record<string, string[] | string>) => void;
32
28
  setField: <P extends BitPath<T, "">>(path: P, value: BitPathValue<T, P>) => void;
33
29
  blurField: <P extends BitPath<T, "">>(path: P) => void;
34
- registerMask: (name: string, mask: BitMask) => void;
35
- pushItem: <P extends BitArrayPath<T>>(path: P, value: BitArrayItem<BitPathValue<T, P>>) => void;
36
- prependItem: <P extends BitArrayPath<T>>(path: P, value: BitArrayItem<BitPathValue<T, P>>) => void;
37
- removeItem: <P extends BitArrayPath<T>>(path: P, index: number) => void;
38
- insertItem: <P extends BitArrayPath<T>>(path: P, index: number, value: BitArrayItem<BitPathValue<T, P>>) => void;
39
- moveItem: <P extends BitArrayPath<T>>(path: P, from: number, to: number) => void;
40
- swapItems: <P extends BitArrayPath<T>>(path: P, indexA: number, indexB: number) => void;
41
- undo: () => void;
42
- redo: () => void;
30
+ validate: (options?: {
31
+ scope?: string;
32
+ scopeFields?: string[];
33
+ }) => Promise<boolean>;
34
+ mutations: {
35
+ pushItem: <P extends BitArrayPath<T>>(path: P, value: BitArrayItem<BitPathValue<T, P>>) => void;
36
+ prependItem: <P extends BitArrayPath<T>>(path: P, value: BitArrayItem<BitPathValue<T, P>>) => void;
37
+ removeItem: <P extends BitArrayPath<T>>(path: P, index: number) => void;
38
+ insertItem: <P extends BitArrayPath<T>>(path: P, index: number, value: BitArrayItem<BitPathValue<T, P>>) => void;
39
+ moveItem: <P extends BitArrayPath<T>>(path: P, from: number, to: number) => void;
40
+ swapItems: <P extends BitArrayPath<T>>(path: P, indexA: number, indexB: number) => void;
41
+ };
43
42
  };
44
43
 
45
- declare function injectBitField<TValue = any, TForm extends object = any, P extends BitPath<TForm> = BitPath<TForm>>(path: P, config?: BitFieldDefinition<TForm>, options?: BitFieldOptions): {
46
- value: _angular_core.Signal<BitPathValue<TForm, P>>;
47
- displayValue: _angular_core.Signal<string>;
48
- error: _angular_core.Signal<any>;
49
- touched: _angular_core.Signal<boolean>;
50
- invalid: _angular_core.Signal<boolean>;
51
- isDirty: _angular_core.Signal<boolean>;
52
- isValidating: _angular_core.Signal<boolean>;
53
- isHidden: _angular_core.Signal<boolean>;
54
- isRequired: _angular_core.Signal<boolean>;
55
- fieldMeta: _angular_core.Signal<{
56
- isDirty: boolean;
57
- isValidating: boolean;
58
- isHidden: boolean;
59
- isRequired: boolean;
60
- hasError: boolean;
61
- }>;
44
+ interface InjectBitFieldMeta {
45
+ error: () => string | undefined;
46
+ touched: () => boolean;
47
+ invalid: () => boolean;
48
+ isDirty: () => boolean;
49
+ isValidating: () => boolean;
50
+ isHidden: () => boolean;
51
+ isRequired: () => boolean;
52
+ hasError: () => boolean;
53
+ }
54
+ interface InjectBitFieldResult<TForm extends object = any, P extends BitPath<TForm> = BitPath<TForm>> {
55
+ value: () => BitPathValue<TForm, P>;
56
+ displayValue: () => string;
62
57
  setValue: (val: any) => void;
63
58
  setBlur: () => void;
64
59
  update: (e: any) => void;
65
- };
60
+ meta: InjectBitFieldMeta;
61
+ }
62
+ declare function injectBitField<TValue = any, TForm extends object = any, P extends BitPath<TForm> = BitPath<TForm>>(path: P, config?: BitFieldDefinition<TForm>, options?: BitFieldOptions): InjectBitFieldResult<TForm, P>;
66
63
 
67
64
  declare function injectBitArray<TForm extends object = any, P extends BitArrayPath<TForm> = BitArrayPath<TForm>>(path: P): {
68
65
  fields: _angular_core.Signal<{
@@ -81,6 +78,16 @@ declare function injectBitArray<TForm extends object = any, P extends BitArrayPa
81
78
  clear: () => void;
82
79
  };
83
80
 
81
+ interface InjectBitHistoryResult {
82
+ canUndo: ReturnType<typeof computed<boolean>>;
83
+ canRedo: ReturnType<typeof computed<boolean>>;
84
+ historyIndex: ReturnType<typeof computed<number>>;
85
+ historySize: ReturnType<typeof computed<number>>;
86
+ undo: () => void;
87
+ redo: () => void;
88
+ }
89
+ declare function injectBitHistory<T extends object = any>(): InjectBitHistoryResult;
90
+
84
91
  declare function injectBitScope(scopeName: string): {
85
92
  scopeName: string;
86
93
  status: _angular_core.WritableSignal<ScopeStatus>;
@@ -112,4 +119,4 @@ declare function injectBitSteps(scopeNames: string[]): InjectBitStepsResult;
112
119
 
113
120
  declare function injectBitWatch<TForm extends object = any, P extends BitPath<TForm> = BitPath<TForm>>(path: P): Signal<BitPathValue<TForm, P>>;
114
121
 
115
- export { ScopeStatus, ValidateScopeResult, injectBitArray, injectBitField, injectBitForm, injectBitScope, injectBitSteps, injectBitWatch, provideBitStore, useBitStore };
122
+ export { type InjectBitFieldMeta, type InjectBitFieldResult, ScopeStatus, ValidateScopeResult, injectBitArray, injectBitField, injectBitForm, injectBitHistory, injectBitScope, injectBitSteps, injectBitWatch, provideBitStore, useBitStore };
@@ -1,68 +1,65 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { Provider, computed, signal, Signal } from '@angular/core';
3
- import { B as BitStore } from '../index-BXaNeJBk.js';
4
- import { e as BitErrors, n as BitTouched, k as BitPath, l as BitPathValue, B as BitMask, b as BitArrayPath, a as BitArrayItem, g as BitFieldDefinition, h as BitFieldOptions, S as ScopeStatus, V as ValidateScopeResult } from '../bus-DkMkzOXE.js';
3
+ import { B as BitStore } from '../index-BAOM6INR.js';
4
+ import { d as BitErrors, o as BitTouched, b as BitPath, c as BitPathValue, h as BitArrayPath, g as BitArrayItem, k as BitFieldDefinition, l as BitFieldOptions, S as ScopeStatus, V as ValidateScopeResult } from '../bus-CnqfsZpc.js';
5
5
 
6
6
  declare function provideBitStore(store: BitStore<any>): Provider;
7
7
  declare function useBitStore<T extends object>(): BitStore<T>;
8
8
 
9
9
  declare function injectBitForm<T extends object>(): {
10
- store: BitStore<T>;
11
- isValid: _angular_core.Signal<boolean>;
12
- isSubmitting: _angular_core.Signal<boolean>;
13
- isDirty: _angular_core.Signal<boolean>;
14
- canUndo: _angular_core.Signal<boolean>;
15
- canRedo: _angular_core.Signal<boolean>;
10
+ meta: {
11
+ isValid: _angular_core.Signal<boolean>;
12
+ isDirty: _angular_core.Signal<boolean>;
13
+ isSubmitting: _angular_core.Signal<boolean>;
14
+ submitError: _angular_core.Signal<Error | null>;
15
+ lastResponse: _angular_core.Signal<unknown>;
16
+ };
16
17
  getValues: () => T;
17
18
  getErrors: () => BitErrors<T>;
18
19
  getTouched: () => BitTouched<T>;
19
- submit: (onSuccess: (values: T) => void | Promise<void>) => (event?: Event) => Promise<void>;
20
- onSubmit: (handler: (values: T) => Promise<unknown>) => (event?: Event) => Promise<void>;
21
- submitError: _angular_core.WritableSignal<Error | null>;
22
- lastResponse: _angular_core.WritableSignal<unknown>;
20
+ getDirtyValues: () => Partial<T>;
21
+ submit: (onSuccess: (values: T, dirtyValues?: Partial<T>) => void | Promise<void>) => (event?: Event) => Promise<void>;
22
+ onSubmit: (handler: (values: T, dirtyValues?: Partial<T>) => Promise<unknown>) => (event?: Event) => Promise<void>;
23
23
  reset: () => void;
24
- validate: (options?: {
25
- scope?: string;
26
- scopeFields?: string[];
27
- }) => Promise<boolean>;
28
24
  setValues: (newValues: T) => void;
29
25
  setError: (path: string, message: string | undefined) => void;
30
26
  setErrors: (errors: BitErrors<T>) => void;
31
27
  setServerErrors: (serverErrors: Record<string, string[] | string>) => void;
32
28
  setField: <P extends BitPath<T, "">>(path: P, value: BitPathValue<T, P>) => void;
33
29
  blurField: <P extends BitPath<T, "">>(path: P) => void;
34
- registerMask: (name: string, mask: BitMask) => void;
35
- pushItem: <P extends BitArrayPath<T>>(path: P, value: BitArrayItem<BitPathValue<T, P>>) => void;
36
- prependItem: <P extends BitArrayPath<T>>(path: P, value: BitArrayItem<BitPathValue<T, P>>) => void;
37
- removeItem: <P extends BitArrayPath<T>>(path: P, index: number) => void;
38
- insertItem: <P extends BitArrayPath<T>>(path: P, index: number, value: BitArrayItem<BitPathValue<T, P>>) => void;
39
- moveItem: <P extends BitArrayPath<T>>(path: P, from: number, to: number) => void;
40
- swapItems: <P extends BitArrayPath<T>>(path: P, indexA: number, indexB: number) => void;
41
- undo: () => void;
42
- redo: () => void;
30
+ validate: (options?: {
31
+ scope?: string;
32
+ scopeFields?: string[];
33
+ }) => Promise<boolean>;
34
+ mutations: {
35
+ pushItem: <P extends BitArrayPath<T>>(path: P, value: BitArrayItem<BitPathValue<T, P>>) => void;
36
+ prependItem: <P extends BitArrayPath<T>>(path: P, value: BitArrayItem<BitPathValue<T, P>>) => void;
37
+ removeItem: <P extends BitArrayPath<T>>(path: P, index: number) => void;
38
+ insertItem: <P extends BitArrayPath<T>>(path: P, index: number, value: BitArrayItem<BitPathValue<T, P>>) => void;
39
+ moveItem: <P extends BitArrayPath<T>>(path: P, from: number, to: number) => void;
40
+ swapItems: <P extends BitArrayPath<T>>(path: P, indexA: number, indexB: number) => void;
41
+ };
43
42
  };
44
43
 
45
- declare function injectBitField<TValue = any, TForm extends object = any, P extends BitPath<TForm> = BitPath<TForm>>(path: P, config?: BitFieldDefinition<TForm>, options?: BitFieldOptions): {
46
- value: _angular_core.Signal<BitPathValue<TForm, P>>;
47
- displayValue: _angular_core.Signal<string>;
48
- error: _angular_core.Signal<any>;
49
- touched: _angular_core.Signal<boolean>;
50
- invalid: _angular_core.Signal<boolean>;
51
- isDirty: _angular_core.Signal<boolean>;
52
- isValidating: _angular_core.Signal<boolean>;
53
- isHidden: _angular_core.Signal<boolean>;
54
- isRequired: _angular_core.Signal<boolean>;
55
- fieldMeta: _angular_core.Signal<{
56
- isDirty: boolean;
57
- isValidating: boolean;
58
- isHidden: boolean;
59
- isRequired: boolean;
60
- hasError: boolean;
61
- }>;
44
+ interface InjectBitFieldMeta {
45
+ error: () => string | undefined;
46
+ touched: () => boolean;
47
+ invalid: () => boolean;
48
+ isDirty: () => boolean;
49
+ isValidating: () => boolean;
50
+ isHidden: () => boolean;
51
+ isRequired: () => boolean;
52
+ hasError: () => boolean;
53
+ }
54
+ interface InjectBitFieldResult<TForm extends object = any, P extends BitPath<TForm> = BitPath<TForm>> {
55
+ value: () => BitPathValue<TForm, P>;
56
+ displayValue: () => string;
62
57
  setValue: (val: any) => void;
63
58
  setBlur: () => void;
64
59
  update: (e: any) => void;
65
- };
60
+ meta: InjectBitFieldMeta;
61
+ }
62
+ declare function injectBitField<TValue = any, TForm extends object = any, P extends BitPath<TForm> = BitPath<TForm>>(path: P, config?: BitFieldDefinition<TForm>, options?: BitFieldOptions): InjectBitFieldResult<TForm, P>;
66
63
 
67
64
  declare function injectBitArray<TForm extends object = any, P extends BitArrayPath<TForm> = BitArrayPath<TForm>>(path: P): {
68
65
  fields: _angular_core.Signal<{
@@ -81,6 +78,16 @@ declare function injectBitArray<TForm extends object = any, P extends BitArrayPa
81
78
  clear: () => void;
82
79
  };
83
80
 
81
+ interface InjectBitHistoryResult {
82
+ canUndo: ReturnType<typeof computed<boolean>>;
83
+ canRedo: ReturnType<typeof computed<boolean>>;
84
+ historyIndex: ReturnType<typeof computed<number>>;
85
+ historySize: ReturnType<typeof computed<number>>;
86
+ undo: () => void;
87
+ redo: () => void;
88
+ }
89
+ declare function injectBitHistory<T extends object = any>(): InjectBitHistoryResult;
90
+
84
91
  declare function injectBitScope(scopeName: string): {
85
92
  scopeName: string;
86
93
  status: _angular_core.WritableSignal<ScopeStatus>;
@@ -112,4 +119,4 @@ declare function injectBitSteps(scopeNames: string[]): InjectBitStepsResult;
112
119
 
113
120
  declare function injectBitWatch<TForm extends object = any, P extends BitPath<TForm> = BitPath<TForm>>(path: P): Signal<BitPathValue<TForm, P>>;
114
121
 
115
- export { ScopeStatus, ValidateScopeResult, injectBitArray, injectBitField, injectBitForm, injectBitScope, injectBitSteps, injectBitWatch, provideBitStore, useBitStore };
122
+ export { type InjectBitFieldMeta, type InjectBitFieldResult, ScopeStatus, ValidateScopeResult, injectBitArray, injectBitField, injectBitForm, injectBitHistory, injectBitScope, injectBitSteps, injectBitWatch, provideBitStore, useBitStore };
@@ -1,2 +1,2 @@
1
- import{d as w,e as v,h as k,i as A}from"../chunk-QU365SAC.js";import{inject as K,InjectionToken as W}from"@angular/core";var h=new W("BIT_STORE");function C(t){return{provide:h,useValue:t}}function S(){let t=K(h,{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 I,computed as E,inject as L,DestroyRef as U}from"@angular/core";function $(){let t=S(),e=L(U),o=I(t.getState()),r=I(null),n=I(null),c=t.subscribe(()=>{o.set(t.getState())});e.onDestroy(()=>c());let g=E(()=>o().isValid),s=E(()=>o().isSubmitting),i=E(()=>o().isDirty),d=E(()=>(o(),t.canUndo)),u=E(()=>(o(),t.canRedo));return{store:t,isValid:g,isSubmitting:s,isDirty:i,canUndo:d,canRedo:u,getValues:()=>o().values,getErrors:()=>o().errors,getTouched:()=>o().touched,submit:B=>f=>(f?.preventDefault(),f?.stopPropagation(),t.submit(B)),onSubmit:B=>f=>(f?.preventDefault(),f?.stopPropagation(),r.set(null),t.submit(async l=>{try{let a=await B(l);n.set(a),r.set(null)}catch(a){k(a)?t.setServerErrors(A(a)):r.set(a instanceof Error?a:new Error(String(a)))}})),submitError:r,lastResponse:n,reset:()=>{t.reset(),r.set(null),n.set(null)},validate:t.validate.bind(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),registerMask:t.registerMask.bind(t),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),undo:t.undo.bind(t),redo:t.redo.bind(t)}}import{inject as O,DestroyRef as z,computed as y,signal as G}from"@angular/core";function J(t,e,o){let r=O(h),n=G(r.getState()),c=r.subscribe(()=>{n.set(r.getState())});O(z).onDestroy(()=>{c(),r.unregisterField&&r.unregisterField(t)}),e&&r.registerField(t,e);let g=y(()=>v(n().values,t)),s=y(()=>n().errors[t]),i=y(()=>!!n().touched[t]),d=y(()=>(n(),r.isFieldDirty(t))),u=y(()=>(n(),r.isFieldValidating(t))),m=y(()=>(n(),r.isHidden(t))),R=y(()=>(n(),r.isRequired(t))),V=y(()=>i()&&!!s()),b=o?.mask??r.config.fields?.[t]?.mask,P=b?typeof b=="string"?r.config.masks[b]:b:void 0,x=y(()=>{let a=g();return a==null||a===""?"":P?P.format(a):String(a)}),B=a=>{if(!P){r.setField(t,a);return}let p=String(a??"");r.setField(t,P.parse(p))},f=()=>r.blurField(t),l=y(()=>({isDirty:d(),isValidating:u(),isHidden:m(),isRequired:R(),hasError:!!s()}));return{value:g,displayValue:x,error:s,touched:i,invalid:V,isDirty:d,isValidating:u,isHidden:m,isRequired:R,fieldMeta:l,setValue:B,setBlur:f,update:a=>B(a?.target?.value??a)}}import{DestroyRef as Q,signal as q,computed as M,inject as _,untracked as X}from"@angular/core";var F=()=>Math.random().toString(36).substring(2,9);function Y(t){let e=_(h),o=_(Q),r=()=>{let s=v(e.getState().values,t);return Array.isArray(s)?s:[]},n=q(r()),c=q(n().map(F)),g=e.subscribe(()=>{let s=r(),i=X(c);n.set(s),s.length!==i.length&&(s.length>i.length?c.set([...i,...Array.from({length:s.length-i.length},F)]):c.set(i.slice(0,s.length)))});return o.onDestroy(()=>{g(),e.unregisterPrefix&&e.unregisterPrefix(`${t}.`)}),{fields:M(()=>n().map((s,i)=>({key:c()[i]||`temp-${i}`,value:s,index:i}))),length:M(()=>n().length),append:s=>{c.update(i=>[...i,F()]),e.pushItem(t,s)},prepend:s=>{c.update(i=>[F(),...i]),e.prependItem(t,s)},remove:s=>{c.update(i=>i.filter((d,u)=>u!==s)),e.removeItem(t,s)},insert:(s,i)=>{c.update(d=>{let u=[...d];return u.splice(s,0,F()),u}),e.insertItem(t,s,i)},swap:(s,i)=>{c.update(d=>{let u=[...d];return[u[s],u[i]]=[u[i],u[s]],u}),e.swapItems(t,s,i)},move:(s,i)=>{c.update(d=>{let u=[...d],[m]=u.splice(s,1);return u.splice(i,0,m),u}),e.moveItem(t,s,i)},replace:s=>{c.set(s.map(()=>F())),e.setField(t,s)},clear:()=>{c.set([]),e.setField(t,[])}}}import{signal as Z,computed as D,DestroyRef as N,inject as tt}from"@angular/core";function et(t,e){let o=Object.keys(t),r=Object.keys(e);return o.length!==r.length?!1:o.every(n=>t[n]===e[n])}function rt(t){let e=S(),o=e.getStepStatus(t),r=Z(o),n=e.subscribe(()=>{let u=e.getStepStatus(t),m=r();(u.hasErrors!==m.hasErrors||u.isDirty!==m.isDirty||!et(u.errors,m.errors))&&r.set(u)});try{tt(N).onDestroy(()=>n())}catch{}let c=async()=>{let u=await e.validate({scope:t}),m=e.getStepErrors(t);return{valid:u,errors:m}},g=()=>e.getStepErrors(t),s=D(()=>!r().hasErrors),i=D(()=>r().isDirty),d=D(()=>r().errors);return{scopeName:t,status:r,errors:d,validate:c,getErrors:g,isValid:s,isDirty:i,unsubscribe:n}}import{signal as H,computed as T,DestroyRef as st,inject as ot}from"@angular/core";function nt(t,e){let o=Object.keys(t),r=Object.keys(e);return o.length!==r.length?!1:o.every(n=>t[n]===e[n])}function it(t){let e=S(),o=H(0),r=T(()=>t[o()]??""),n=()=>t[o()]??"",c=H(e.getStepStatus(n())),g=()=>{let l=n(),a=e.getStepStatus(l),p=c();(a.hasErrors!==p.hasErrors||a.isDirty!==p.isDirty||!nt(a.errors,p.errors))&&c.set(a)},s=e.subscribe(g);try{ot(st).onDestroy(()=>s())}catch{}let i=async()=>{let l=n(),a=await e.validate({scope:l}),p=e.getStepErrors(l);return{valid:a,errors:p}},d=()=>e.getStepErrors(n()),u=async()=>{let l=n(),a=await e.validate({scope:l});if(a){let p=Math.min(o()+1,t.length-1);o.set(p),c.set(e.getStepStatus(t[p]??""))}else{let p=e.getStepErrors(l),j=Object.keys(p);j.length>0&&e.markFieldsTouched(j)}return a},m=()=>{let l=Math.max(o()-1,0);o.set(l),c.set(e.getStepStatus(t[l]??""))},R=l=>{let a=Math.max(0,Math.min(l-1,t.length-1));o.set(a),c.set(e.getStepStatus(t[a]??""))},V=T(()=>o()+1),b=T(()=>o()===0),P=T(()=>o()>=t.length-1),x=T(()=>!c().hasErrors),B=T(()=>c().isDirty),f=T(()=>c().errors);return{step:V,stepIndex:o,scope:r,next:u,prev:m,goTo:R,isFirst:b,isLast:P,status:c,errors:f,isValid:x,isDirty:B,validate:i,getErrors:d}}import{DestroyRef as at,signal as ct,inject as ut}from"@angular/core";function lt(t){let e=S(),o=ut(at),r=ct(v(e.getState().values,t),{equal:w}),n=e.watch(t,c=>{r.set(c)});return o.onDestroy(n),r.asReadonly()}export{Y as injectBitArray,J as injectBitField,$ as injectBitForm,rt as injectBitScope,it as injectBitSteps,lt as injectBitWatch,C as provideBitStore,S as useBitStore};
1
+ import{d as k,e as h,h as A,i as O}from"../chunk-4KRTZKIQ.js";import{inject as U,InjectionToken as W}from"@angular/core";var v=new W("BIT_STORE");function C(t){return{provide:v,useValue:t}}function g(){let t=U(v,{optional:!0});if(!t)throw new Error('BitForm: N\xE3o foi poss\xEDvel encontrar a BitStore. Certifique-se de que voc\xEA adicionou "provideBitStore(store)" nos providers do seu componente.');return t}import{signal as E,computed as D,inject as L,DestroyRef as $}from"@angular/core";function G(){let t=g(),e=L($),s=E(t.getState()),r=E(null),n=E(null),a=t.subscribe(()=>{s.set(t.getState())});e.onDestroy(()=>a());let S=D(()=>s().isValid),o=D(()=>s().isSubmitting),i=D(()=>s().isDirty),m=()=>s().values,c=()=>s().errors,y=()=>s().touched,x=()=>t.getDirtyValues(),I=P=>B=>(B?.preventDefault(),B?.stopPropagation(),t.submit(P)),V=P=>B=>(B?.preventDefault(),B?.stopPropagation(),r.set(null),t.submit(async(l,d)=>{try{let u=await P(l,d);n.set(u),r.set(null)}catch(u){A(u)?t.setServerErrors(O(u)):r.set(u instanceof Error?u:new Error(String(u)))}})),b=()=>{t.reset(),r.set(null),n.set(null)};return{meta:{isValid:S,isDirty:i,isSubmitting:o,submitError:r.asReadonly(),lastResponse:n.asReadonly()},getValues:m,getErrors:c,getTouched:y,getDirtyValues:x,submit:I,onSubmit:V,reset:b,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 M,DestroyRef as J,computed as f,signal as Q}from"@angular/core";function X(t,e,s){let r=M(v),n=Q(r.getState()),a=r.subscribe(()=>{n.set(r.getState())});M(J).onDestroy(()=>{a(),r.unregisterField&&r.unregisterField(t)}),e&&r.registerField(t,e);let S=f(()=>h(n().values,t)),o=f(()=>n().errors[t]),i=f(()=>!!n().touched[t]),m=f(()=>i()?o():void 0),c=f(()=>(n(),r.isFieldDirty(t))),y=f(()=>(n(),r.isFieldValidating(t))),x=f(()=>(n(),r.isHidden(t))),I=f(()=>(n(),r.isRequired(t))),V=f(()=>i()&&!!o()),b=s?.mask??r.config.fields?.[t]?.mask,T=b?typeof b=="string"?r.config.masks[b]:b:void 0,P=f(()=>{let p=S();return p==null||p===""?"":T?T.format(p):String(p)}),B=p=>{if(!T){r.setField(t,p);return}let K=String(p??"");r.setField(t,T.parse(K))},l=()=>r.blurField(t),d=f(()=>!!o());return{value:S,displayValue:P,setValue:B,setBlur:l,update:p=>B(p?.target?.value??p),meta:{error:m,touched:i,invalid:V,isDirty:c,isValidating:y,isHidden:x,isRequired:I,hasError:d}}}import{DestroyRef as Y,signal as q,computed as H,inject as _,untracked as Z}from"@angular/core";var F=()=>Math.random().toString(36).substring(2,9);function N(t){let e=_(v),s=_(Y),r=()=>{let o=h(e.getState().values,t);return Array.isArray(o)?o:[]},n=q(r()),a=q(n().map(F)),S=e.subscribe(()=>{let o=r(),i=Z(a);n.set(o),o.length!==i.length&&(o.length>i.length?a.set([...i,...Array.from({length:o.length-i.length},F)]):a.set(i.slice(0,o.length)))});return s.onDestroy(()=>{S(),e.unregisterPrefix&&e.unregisterPrefix(`${t}.`)}),{fields:H(()=>n().map((o,i)=>({key:a()[i]||`temp-${i}`,value:o,index:i}))),length:H(()=>n().length),append:o=>{a.update(i=>[...i,F()]),e.pushItem(t,o)},prepend:o=>{a.update(i=>[F(),...i]),e.prependItem(t,o)},remove:o=>{a.update(i=>i.filter((m,c)=>c!==o)),e.removeItem(t,o)},insert:(o,i)=>{a.update(m=>{let c=[...m];return c.splice(o,0,F()),c}),e.insertItem(t,o,i)},swap:(o,i)=>{a.update(m=>{let c=[...m];return[c[o],c[i]]=[c[i],c[o]],c}),e.swapItems(t,o,i)},move:(o,i)=>{a.update(m=>{let c=[...m],[y]=c.splice(o,1);return c.splice(i,0,y),c}),e.moveItem(t,o,i)},replace:o=>{a.set(o.map(()=>F())),e.setField(t,o)},clear:()=>{a.set([]),e.setField(t,[])}}}import{computed as j,DestroyRef as tt,inject as et,signal as rt}from"@angular/core";function ot(){let t=g(),e=et(tt),s=rt(t.getHistoryMetadata()),r=t.subscribe(()=>{s.set(t.getHistoryMetadata())});return e.onDestroy(()=>r()),{canUndo:j(()=>s().canUndo),canRedo:j(()=>s().canRedo),historyIndex:j(()=>s().historyIndex),historySize:j(()=>s().historySize),undo:()=>t.undo(),redo:()=>t.redo()}}import{signal as st,computed as w,DestroyRef as nt,inject as it}from"@angular/core";function at(t,e){let s=Object.keys(t),r=Object.keys(e);return s.length!==r.length?!1:s.every(n=>t[n]===e[n])}function ct(t){let e=g(),s=e.getStepStatus(t),r=st(s),n=e.subscribe(()=>{let c=e.getStepStatus(t),y=r();(c.hasErrors!==y.hasErrors||c.isDirty!==y.isDirty||!at(c.errors,y.errors))&&r.set(c)});try{it(nt).onDestroy(()=>n())}catch{}let a=async()=>{let c=await e.validate({scope:t}),y=e.getStepErrors(t);return{valid:c,errors:y}},S=()=>e.getStepErrors(t),o=w(()=>!r().hasErrors),i=w(()=>r().isDirty),m=w(()=>r().errors);return{scopeName:t,status:r,errors:m,validate:a,getErrors:S,isValid:o,isDirty:i,unsubscribe:n}}import{signal as z,computed as R,DestroyRef as ut,inject as lt}from"@angular/core";function dt(t,e){let s=Object.keys(t),r=Object.keys(e);return s.length!==r.length?!1:s.every(n=>t[n]===e[n])}function mt(t){let e=g(),s=z(0),r=R(()=>t[s()]??""),n=()=>t[s()]??"",a=z(e.getStepStatus(n())),S=()=>{let l=n(),d=e.getStepStatus(l),u=a();(d.hasErrors!==u.hasErrors||d.isDirty!==u.isDirty||!dt(d.errors,u.errors))&&a.set(d)},o=e.subscribe(S);try{lt(ut).onDestroy(()=>o())}catch{}let i=async()=>{let l=n(),d=await e.validate({scope:l}),u=e.getStepErrors(l);return{valid:d,errors:u}},m=()=>e.getStepErrors(n()),c=async()=>{let l=n(),d=await e.validate({scope:l});if(d){let u=Math.min(s()+1,t.length-1);s.set(u),a.set(e.getStepStatus(t[u]??""))}else{let u=e.getStepErrors(l),p=Object.keys(u);p.length>0&&e.markFieldsTouched(p)}return d},y=()=>{let l=Math.max(s()-1,0);s.set(l),a.set(e.getStepStatus(t[l]??""))},x=l=>{let d=Math.max(0,Math.min(l-1,t.length-1));s.set(d),a.set(e.getStepStatus(t[d]??""))},I=R(()=>s()+1),V=R(()=>s()===0),b=R(()=>s()>=t.length-1),T=R(()=>!a().hasErrors),P=R(()=>a().isDirty),B=R(()=>a().errors);return{step:I,stepIndex:s,scope:r,next:c,prev:y,goTo:x,isFirst:V,isLast:b,status:a,errors:B,isValid:T,isDirty:P,validate:i,getErrors:m}}import{DestroyRef as pt,signal as yt,inject as gt}from"@angular/core";function ft(t){let e=g(),s=gt(pt),r=yt(h(e.getState().values,t),{equal:k}),n=e.watch(t,a=>{r.set(a)});return s.onDestroy(n),r.asReadonly()}export{N as injectBitArray,X as injectBitField,G as injectBitForm,ot as injectBitHistory,ct as injectBitScope,mt as injectBitSteps,ft as injectBitWatch,C as provideBitStore,g as useBitStore};
2
2
  //# sourceMappingURL=index.js.map