@lehnihon/bit-form 1.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 (78) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +150 -0
  3. package/dist/angular/index.cjs +2 -0
  4. package/dist/angular/index.cjs.map +1 -0
  5. package/dist/angular/index.d.cts +115 -0
  6. package/dist/angular/index.d.ts +115 -0
  7. package/dist/angular/index.js +2 -0
  8. package/dist/angular/index.js.map +1 -0
  9. package/dist/bus-DAwKIiMY.d.cts +233 -0
  10. package/dist/bus-DAwKIiMY.d.ts +233 -0
  11. package/dist/chunk-32ZEDTLP.js +2 -0
  12. package/dist/chunk-32ZEDTLP.js.map +1 -0
  13. package/dist/chunk-FOPOA6NB.cjs +133 -0
  14. package/dist/chunk-FOPOA6NB.cjs.map +1 -0
  15. package/dist/chunk-XIDR3J47.cjs +2 -0
  16. package/dist/chunk-XIDR3J47.cjs.map +1 -0
  17. package/dist/chunk-ZI3XHI4I.js +133 -0
  18. package/dist/chunk-ZI3XHI4I.js.map +1 -0
  19. package/dist/cli/index.cjs +105 -0
  20. package/dist/devtools/bridge.cjs +2 -0
  21. package/dist/devtools/bridge.cjs.map +1 -0
  22. package/dist/devtools/bridge.d.cts +3 -0
  23. package/dist/devtools/bridge.d.ts +3 -0
  24. package/dist/devtools/bridge.js +2 -0
  25. package/dist/devtools/bridge.js.map +1 -0
  26. package/dist/devtools/index.cjs +2 -0
  27. package/dist/devtools/index.cjs.map +1 -0
  28. package/dist/devtools/index.d.cts +14 -0
  29. package/dist/devtools/index.d.ts +14 -0
  30. package/dist/devtools/index.js +2 -0
  31. package/dist/devtools/index.js.map +1 -0
  32. package/dist/index-CmwQH2V1.d.cts +108 -0
  33. package/dist/index-DRvn8318.d.ts +108 -0
  34. package/dist/index.cjs +2 -0
  35. package/dist/index.cjs.map +1 -0
  36. package/dist/index.d.cts +119 -0
  37. package/dist/index.d.ts +119 -0
  38. package/dist/index.js +2 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/react/index.cjs +2 -0
  41. package/dist/react/index.cjs.map +1 -0
  42. package/dist/react/index.d.cts +34 -0
  43. package/dist/react/index.d.ts +34 -0
  44. package/dist/react/index.js +2 -0
  45. package/dist/react/index.js.map +1 -0
  46. package/dist/react-native/index.cjs +2 -0
  47. package/dist/react-native/index.cjs.map +1 -0
  48. package/dist/react-native/index.d.cts +27 -0
  49. package/dist/react-native/index.d.ts +27 -0
  50. package/dist/react-native/index.js +2 -0
  51. package/dist/react-native/index.js.map +1 -0
  52. package/dist/resolvers/joi.cjs +2 -0
  53. package/dist/resolvers/joi.cjs.map +1 -0
  54. package/dist/resolvers/joi.d.cts +8 -0
  55. package/dist/resolvers/joi.d.ts +8 -0
  56. package/dist/resolvers/joi.js +2 -0
  57. package/dist/resolvers/joi.js.map +1 -0
  58. package/dist/resolvers/yup.cjs +2 -0
  59. package/dist/resolvers/yup.cjs.map +1 -0
  60. package/dist/resolvers/yup.d.cts +8 -0
  61. package/dist/resolvers/yup.d.ts +8 -0
  62. package/dist/resolvers/yup.js +2 -0
  63. package/dist/resolvers/yup.js.map +1 -0
  64. package/dist/resolvers/zod.cjs +2 -0
  65. package/dist/resolvers/zod.cjs.map +1 -0
  66. package/dist/resolvers/zod.d.cts +8 -0
  67. package/dist/resolvers/zod.d.ts +8 -0
  68. package/dist/resolvers/zod.js +2 -0
  69. package/dist/resolvers/zod.js.map +1 -0
  70. package/dist/use-bit-watch-BMCwKIYx.d.cts +99 -0
  71. package/dist/use-bit-watch-BujTdIMc.d.ts +99 -0
  72. package/dist/vue/index.cjs +2 -0
  73. package/dist/vue/index.cjs.map +1 -0
  74. package/dist/vue/index.d.cts +122 -0
  75. package/dist/vue/index.d.ts +122 -0
  76. package/dist/vue/index.js +2 -0
  77. package/dist/vue/index.js.map +1 -0
  78. package/package.json +160 -0
@@ -0,0 +1,122 @@
1
+ import { B as BitStore } from '../index-DRvn8318.js';
2
+ 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-DAwKIiMY.js';
3
+ import * as vue from 'vue';
4
+ import * as _vue_reactivity from '@vue/reactivity';
5
+ import * as _vue_shared from '@vue/shared';
6
+
7
+ declare function provideBitStore(store: BitStore<any>): void;
8
+ declare function useBitStore<T extends object>(): BitStore<T>;
9
+
10
+ declare function useBitForm<T extends object>(): {
11
+ store: BitStore<T>;
12
+ isValid: vue.ComputedRef<boolean>;
13
+ isSubmitting: vue.ComputedRef<boolean>;
14
+ isDirty: vue.ComputedRef<boolean>;
15
+ canUndo: vue.ComputedRef<boolean>;
16
+ canRedo: vue.ComputedRef<boolean>;
17
+ getValues: () => T;
18
+ getErrors: () => BitErrors<T>;
19
+ getTouched: () => BitTouched<T>;
20
+ submit: (onSuccess: (values: T) => void | Promise<void>) => (e?: Event) => Promise<void>;
21
+ onSubmit: (handler: (values: T) => Promise<unknown>) => (e?: Event) => Promise<void>;
22
+ submitError: vue.Ref<Error | null, Error | null>;
23
+ lastResponse: vue.Ref<unknown, unknown>;
24
+ reset: () => void;
25
+ validate: (options?: {
26
+ scope?: string;
27
+ scopeFields?: string[];
28
+ }) => Promise<boolean>;
29
+ setValues: (newValues: T) => void;
30
+ setError: (path: string, message: string | undefined) => void;
31
+ setErrors: (errors: BitErrors<T>) => void;
32
+ setServerErrors: (serverErrors: Record<string, string[] | string>) => void;
33
+ setField: <P extends BitPath<T, "">>(path: P, value: BitPathValue<T, P>) => void;
34
+ blurField: <P extends BitPath<T, "">>(path: P) => void;
35
+ registerMask: (name: string, mask: BitMask) => void;
36
+ pushItem: <P extends BitArrayPath<T>>(path: P, value: BitArrayItem<BitPathValue<T, P>>) => void;
37
+ prependItem: <P extends BitArrayPath<T>>(path: P, value: BitArrayItem<BitPathValue<T, P>>) => void;
38
+ removeItem: <P extends BitArrayPath<T>>(path: P, index: number) => void;
39
+ insertItem: <P extends BitArrayPath<T>>(path: P, index: number, value: BitArrayItem<BitPathValue<T, P>>) => void;
40
+ moveItem: <P extends BitArrayPath<T>>(path: P, from: number, to: number) => void;
41
+ swapItems: <P extends BitArrayPath<T>>(path: P, indexA: number, indexB: number) => void;
42
+ undo: () => void;
43
+ redo: () => void;
44
+ };
45
+
46
+ declare function useBitField<TValue = any>(path: string, config?: BitFieldDefinition<any>, options?: BitFieldOptions): {
47
+ value: vue.WritableComputedRef<string, any>;
48
+ displayValue: vue.ComputedRef<string>;
49
+ error: vue.ComputedRef<string | undefined>;
50
+ touched: vue.ComputedRef<boolean>;
51
+ invalid: vue.ComputedRef<boolean>;
52
+ isValidating: vue.ComputedRef<boolean>;
53
+ isDirty: vue.ComputedRef<boolean>;
54
+ isHidden: vue.ComputedRef<boolean>;
55
+ isRequired: vue.ComputedRef<boolean>;
56
+ fieldMeta: vue.ComputedRef<{
57
+ isDirty: boolean;
58
+ isValidating: boolean;
59
+ isHidden: boolean;
60
+ isRequired: boolean;
61
+ hasError: boolean;
62
+ }>;
63
+ setBlur: () => void;
64
+ setValue: (val: any) => any;
65
+ };
66
+
67
+ declare function useBitArray<TForm extends object = any, P extends BitArrayPath<TForm> = BitArrayPath<TForm>>(path: P): {
68
+ fields: vue.ComputedRef<{
69
+ key: string;
70
+ value: _vue_reactivity.UnwrapRefSimple<BitArrayItem<BitPathValue<TForm, P>>>;
71
+ index: number;
72
+ }[]>;
73
+ length: vue.ComputedRef<number>;
74
+ append: (val: BitArrayItem<BitPathValue<TForm, P>>) => void;
75
+ prepend: (val: BitArrayItem<BitPathValue<TForm, P>>) => void;
76
+ insert: (index: number, val: BitArrayItem<BitPathValue<TForm, P>>) => void;
77
+ remove: (index: number) => void;
78
+ move: (from: number, to: number) => void;
79
+ swap: (a: number, b: number) => void;
80
+ replace: (items: BitArrayItem<BitPathValue<TForm, P>>[]) => void;
81
+ clear: () => void;
82
+ };
83
+
84
+ declare function useBitScope(scopeName: string): {
85
+ scopeName: string;
86
+ status: vue.Ref<{
87
+ hasErrors: boolean;
88
+ isDirty: boolean;
89
+ errors: Record<string, string>;
90
+ }, ScopeStatus | {
91
+ hasErrors: boolean;
92
+ isDirty: boolean;
93
+ errors: Record<string, string>;
94
+ }>;
95
+ errors: vue.ComputedRef<Record<string, string>>;
96
+ validate: () => Promise<ValidateScopeResult>;
97
+ getErrors: () => Record<string, string>;
98
+ isValid: vue.ComputedRef<boolean>;
99
+ isDirty: vue.ComputedRef<boolean>;
100
+ };
101
+
102
+ interface UseBitStepsResult {
103
+ step: vue.ComputedRef<number>;
104
+ stepIndex: vue.Ref<number>;
105
+ scope: vue.ComputedRef<string>;
106
+ next: () => Promise<boolean>;
107
+ prev: () => void;
108
+ goTo: (step: number) => void;
109
+ isFirst: vue.ComputedRef<boolean>;
110
+ isLast: vue.ComputedRef<boolean>;
111
+ status: vue.Ref<ScopeStatus>;
112
+ errors: vue.ComputedRef<Record<string, string>>;
113
+ isValid: vue.ComputedRef<boolean>;
114
+ isDirty: vue.ComputedRef<boolean>;
115
+ validate: () => Promise<ValidateScopeResult>;
116
+ getErrors: () => Record<string, string>;
117
+ }
118
+ declare function useBitSteps(scopeNames: string[]): UseBitStepsResult;
119
+
120
+ declare function useBitWatch<TForm extends object = any, P extends BitPath<TForm> = BitPath<TForm>>(path: P): vue.DeepReadonly<vue.UnwrapNestedRefs<[BitPathValue<TForm, P>] extends [vue.Ref<any, any>] ? _vue_shared.IfAny<vue.Ref<any, any> & BitPathValue<TForm, P>, vue.Ref<vue.Ref<any, any> & BitPathValue<TForm, P>, vue.Ref<any, any> & BitPathValue<TForm, P>>, vue.Ref<any, any> & BitPathValue<TForm, P>> : vue.Ref<vue.UnwrapRef<BitPathValue<TForm, P>>, BitPathValue<TForm, P> | vue.UnwrapRef<BitPathValue<TForm, P>>>>>;
121
+
122
+ export { ScopeStatus, ValidateScopeResult, provideBitStore, useBitArray, useBitField, useBitForm, useBitScope, useBitSteps, useBitStore, useBitWatch };
@@ -0,0 +1,2 @@
1
+ import{d as R,e as h,h as x,i as T}from"../chunk-ZI3XHI4I.js";import{inject as U,provide as O}from"vue";var w=Symbol("BIT_STORE");function C(e){O(w,e)}function d(){let e=U(w);if(!e)throw new Error("BitForm Vue hooks devem ser usados sob um provideBitStore");return e}import{computed as E,onUnmounted as q,shallowRef as H,ref as D}from"vue";function K(){let e=d(),t=H(e.getState()),o=D(null),s=D(null),n=e.subscribe(()=>{t.value={...e.getState()}});q(n);let i=()=>t.value.values,m=()=>t.value.errors,f=()=>t.value.touched,g=E(()=>t.value.isValid),r=E(()=>t.value.isSubmitting),u=E(()=>t.value.isDirty),c=E(()=>(t.value,e.canUndo)),p=E(()=>(t.value,e.canRedo));return{store:e,isValid:g,isSubmitting:r,isDirty:u,canUndo:c,canRedo:p,getValues:i,getErrors:m,getTouched:f,submit:S=>b=>(b?.preventDefault?.(),e.submit(S)),onSubmit:S=>b=>(b?.preventDefault?.(),o.value=null,e.submit(async B=>{try{let a=await S(B);s.value=a,o.value=null}catch(a){x(a)?e.setServerErrors(T(a)):o.value=a instanceof Error?a:new Error(String(a))}})),submitError:o,lastResponse:s,reset:()=>{e.reset(),o.value=null,s.value=null},validate:e.validate.bind(e),setValues:e.setValues.bind(e),setError:e.setError.bind(e),setErrors:e.setErrors.bind(e),setServerErrors:e.setServerErrors.bind(e),setField:e.setField.bind(e),blurField:e.blurField.bind(e),registerMask:e.registerMask.bind(e),pushItem:e.pushItem.bind(e),prependItem:e.prependItem.bind(e),removeItem:e.removeItem.bind(e),insertItem:e.insertItem.bind(e),moveItem:e.moveItem.bind(e),swapItems:e.swapItems.bind(e),undo:e.undo.bind(e),redo:e.redo.bind(e)}}import{computed as v,onUnmounted as _,shallowRef as L}from"vue";function W(e,t,o){let s=d();t&&s.registerField(e,t);let n=o?.mask??s.config.fields?.[e]?.mask,i=n?typeof n=="string"?s.config.masks?.[n]:n:void 0,m=L(s.getState()),f=s.subscribe(()=>{m.value=s.getState()});_(()=>{f(),s.unregisterField&&s.unregisterField(e)});let g=v(()=>h(m.value.values,e)),r=v(()=>{let l=g.value;return l==null||l===""?"":i?i.format(l):String(l)}),u=v({get:()=>r.value,set:l=>{if(!i){s.setField(e,l);return}s.setField(e,i.parse(String(l??"")))}}),c=v(()=>m.value.touched[e]?m.value.errors[e]:void 0),p=v(()=>!!m.value.touched[e]),V=v(()=>!!(p.value&&c.value)),I=v(()=>(m.value,s.isFieldValidating(e))),S=v(()=>(m.value,s.isFieldDirty(e))),b=v(()=>(m.value,s.isHidden(e))),B=v(()=>(m.value,s.isRequired(e))),a=v(()=>({isDirty:S.value,isValidating:I.value,isHidden:b.value,isRequired:B.value,hasError:!!c.value}));return{value:u,displayValue:r,error:c,touched:p,invalid:V,isValidating:I,isDirty:S,isHidden:b,isRequired:B,fieldMeta:a,setBlur:()=>s.blurField(e),setValue:l=>u.value=l}}import{ref as k,computed as A,onUnmounted as $}from"vue";var F=()=>Math.random().toString(36).substring(2,9);function Y(e){let t=d(),o=()=>{let r=h(t.getState().values,e);return Array.isArray(r)?r:[]},s=o(),n=k(s),i=k(s.map(F)),m=t.subscribe(()=>{let r=o();if(n.value=[...r],r.length!==i.value.length){let u=[...i.value];if(r.length>u.length){let c=r.length-u.length,p=Array.from({length:c},F);i.value=[...u,...p]}else i.value=u.slice(0,r.length)}});$(()=>{m(),t.unregisterPrefix&&t.unregisterPrefix(`${e}.`)});let f=A(()=>n.value.map((r,u)=>({key:i.value[u]||`temp-${u}`,value:r,index:u}))),g=A(()=>n.value.length);return{fields:f,length:g,append:r=>{i.value.push(F()),t.pushItem(e,r)},prepend:r=>{i.value.unshift(F()),t.prependItem(e,r)},insert:(r,u)=>{i.value.splice(r,0,F()),t.insertItem(e,r,u)},remove:r=>{i.value.splice(r,1),t.removeItem(e,r)},move:(r,u)=>{let c=[...i.value],[p]=c.splice(r,1);c.splice(u,0,p),i.value=c,t.moveItem(e,r,u)},swap:(r,u)=>{let c=[...i.value];[c[r],c[u]]=[c[u],c[r]],i.value=c,t.swapItems(e,r,u)},replace:r=>{i.value=r.map(F),t.setField(e,r)},clear:()=>{i.value=[],t.setField(e,[])}}}import{ref as z,computed as P,onMounted as G,onUnmounted as J}from"vue";function Q(e,t){let o=Object.keys(e),s=Object.keys(t);return o.length!==s.length?!1:o.every(n=>e[n]===t[n])}function X(e){let t=d(),o=z(t.getStepStatus(e)),s;G(()=>{s=t.subscribe(()=>{let r=t.getStepStatus(e);(r.hasErrors!==o.value.hasErrors||r.isDirty!==o.value.isDirty||!Q(r.errors,o.value.errors))&&(o.value=r)})}),J(()=>{s?.()});let n=async()=>{let r=await t.validate({scope:e}),u=t.getStepErrors(e);return{valid:r,errors:u}},i=()=>t.getStepErrors(e),m=P(()=>!o.value.hasErrors),f=P(()=>o.value.isDirty),g=P(()=>o.value.errors);return{scopeName:e,status:o,errors:g,validate:n,getErrors:i,isValid:m,isDirty:f}}import{ref as j,computed as y,watch as Z,onMounted as N,onUnmounted as ee}from"vue";function te(e,t){let o=Object.keys(e),s=Object.keys(t);return o.length!==s.length?!1:o.every(n=>e[n]===t[n])}function re(e){let t=d(),o=j(0),s=y(()=>e[o.value]??""),n=j(t.getStepStatus(s.value)),i;Z(s,a=>{n.value=t.getStepStatus(a)});let m=()=>{let a=s.value,l=t.getStepStatus(a);(l.hasErrors!==n.value.hasErrors||l.isDirty!==n.value.isDirty||!te(l.errors,n.value.errors))&&(n.value=l)};N(()=>{i=t.subscribe(m)}),ee(()=>{i?.()});let f=async()=>{let a=s.value,l=await t.validate({scope:a}),M=t.getStepErrors(a);return{valid:l,errors:M}},g=()=>t.getStepErrors(s.value),r=async()=>{let a=s.value,l=await t.validate({scope:a});return l&&(o.value=Math.min(o.value+1,e.length-1)),l},u=()=>{o.value=Math.max(o.value-1,0)},c=a=>{o.value=Math.max(0,Math.min(a-1,e.length-1))},p=y(()=>o.value+1),V=y(()=>o.value===0),I=y(()=>o.value>=e.length-1),S=y(()=>!n.value.hasErrors),b=y(()=>n.value.isDirty),B=y(()=>n.value.errors);return{step:p,stepIndex:o,scope:s,next:r,prev:u,goTo:c,isFirst:V,isLast:I,status:n,errors:B,isValid:S,isDirty:b,validate:f,getErrors:g}}import{ref as se,onUnmounted as oe,readonly as ne}from"vue";function ie(e){let t=d(),o=h(t.getState().values,e),s=se(o),n=t.watch(e,i=>{R(s.value,i)||(s.value=i)});return oe(n),ne(s)}export{C as provideBitStore,Y as useBitArray,W as useBitField,K as useBitForm,X as useBitScope,re as useBitSteps,d as useBitStore,ie as useBitWatch};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/vue/context.ts","../../src/vue/use-bit-form.ts","../../src/vue/use-bit-field.ts","../../src/vue/use-bit-array.ts","../../src/vue/use-bit-scope.ts","../../src/vue/use-bit-steps.ts","../../src/vue/use-bit-watch.ts"],"sourcesContent":["import { inject, provide, InjectionKey } from \"vue\";\nimport { BitStore } from \"../core\";\n\n// Chave única para evitar colisões\nexport const BIT_STORE_KEY: InjectionKey<BitStore<any>> = Symbol(\"BIT_STORE\");\n\nexport function provideBitStore(store: BitStore<any>) {\n provide(BIT_STORE_KEY, store);\n}\n\nexport function useBitStore<T extends object>() {\n const store = inject(BIT_STORE_KEY);\n if (!store)\n throw new Error(\n \"BitForm Vue hooks devem ser usados sob um provideBitStore\",\n );\n return store as BitStore<T>;\n}\n","import { computed, onUnmounted, shallowRef, ref } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport { isValidationErrorShape, extractServerErrors } from \"../core/utils\";\n\nexport function useBitForm<T extends object>() {\n const store = useBitStore<T>();\n const state = shallowRef(store.getState());\n const submitError = ref<Error | null>(null);\n const lastResponse = ref<unknown>(null);\n\n const unsubscribe = store.subscribe(() => {\n state.value = { ...store.getState() };\n });\n\n onUnmounted(unsubscribe);\n\n const getValues = () => state.value.values;\n const getErrors = () => state.value.errors;\n const getTouched = () => state.value.touched;\n\n const isValid = computed(() => state.value.isValid);\n const isSubmitting = computed(() => state.value.isSubmitting);\n const isDirty = computed(() => state.value.isDirty);\n\n const canUndo = computed(() => {\n state.value;\n return store.canUndo;\n });\n\n const canRedo = computed(() => {\n state.value;\n return store.canRedo;\n });\n\n const onSubmit = (handler: (values: T) => Promise<unknown>) => {\n return (e?: Event) => {\n e?.preventDefault?.();\n submitError.value = null;\n return store.submit(async (values) => {\n try {\n const result = await handler(values);\n lastResponse.value = result;\n submitError.value = null;\n } catch (err) {\n if (isValidationErrorShape(err)) {\n store.setServerErrors(extractServerErrors(err));\n } else {\n submitError.value =\n err instanceof Error ? err : new Error(String(err));\n }\n }\n });\n };\n };\n\n const reset = () => {\n store.reset();\n submitError.value = null;\n lastResponse.value = 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: (onSuccess: (values: T) => void | Promise<void>) => {\n return (e?: Event) => {\n e?.preventDefault?.();\n return store.submit(onSuccess);\n };\n },\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 { computed, onUnmounted, shallowRef } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport { BitFieldOptions, BitFieldDefinition, getDeepValue } from \"../core\";\n\nexport function useBitField<TValue = any>(\n path: string,\n config?: BitFieldDefinition<any>,\n options?: BitFieldOptions,\n) {\n const store = useBitStore<any>();\n\n if (config) {\n store.registerField(path as string, config as any);\n }\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 state = shallowRef(store.getState());\n\n const unsubscribe = store.subscribe(() => {\n state.value = store.getState();\n });\n\n onUnmounted(() => {\n unsubscribe();\n if (store.unregisterField) {\n store.unregisterField(path as string);\n }\n });\n\n const rawValue = computed(\n () => getDeepValue(state.value.values, path as string) as TValue,\n );\n\n const displayValue = computed(() => {\n const val = rawValue.value;\n if (val === undefined || val === null || val === \"\") return \"\";\n\n return resolvedMask ? resolvedMask.format(val as any) : String(val);\n });\n\n const value = computed({\n get: () => displayValue.value,\n set: (val: any) => {\n if (!resolvedMask) {\n store.setField(path, val);\n return;\n }\n\n store.setField(path, resolvedMask.parse(String(val ?? \"\")));\n },\n });\n\n const error = computed(() =>\n state.value.touched[path] ? state.value.errors[path] : undefined,\n );\n const touched = computed(() => !!state.value.touched[path]);\n const invalid = computed(() => !!(touched.value && error.value));\n\n const isValidating = computed(() => {\n state.value;\n return store.isFieldValidating(path);\n });\n\n const isDirty = computed(() => {\n state.value;\n return store.isFieldDirty(path);\n });\n\n const isHidden = computed(() => {\n state.value;\n return store.isHidden(path);\n });\n\n const isRequired = computed(() => {\n state.value;\n return store.isRequired(path);\n });\n\n const fieldMeta = computed(() => ({\n isDirty: isDirty.value,\n isValidating: isValidating.value,\n isHidden: isHidden.value,\n isRequired: isRequired.value,\n hasError: !!error.value,\n }));\n\n return {\n value,\n displayValue,\n error,\n touched,\n invalid,\n isValidating,\n isDirty,\n isHidden,\n isRequired,\n fieldMeta,\n setBlur: () => store.blurField(path),\n setValue: (val: any) => (value.value = val),\n };\n}\n","import { ref, computed, onUnmounted } from \"vue\";\nimport { useBitStore } from \"./context\";\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 useBitArray<\n TForm extends object = any,\n P extends BitArrayPath<TForm> = BitArrayPath<TForm>,\n>(path: P) {\n const store = useBitStore<TForm>();\n\n type Item = BitArrayItem<BitPathValue<TForm, P>>;\n\n const getSnapshot = (): Item[] => {\n const val = getDeepValue(\n store.getState().values,\n path as string,\n ) as BitPathValue<TForm, P> | undefined;\n return Array.isArray(val) ? (val as Item[]) : [];\n };\n\n const initialValues = getSnapshot();\n const values = ref<Item[]>(initialValues);\n const ids = ref<string[]>(initialValues.map(generateId));\n\n const unsubscribe = store.subscribe(() => {\n const newValues = getSnapshot();\n values.value = [...newValues];\n\n if (newValues.length !== ids.value.length) {\n const currentIds = [...ids.value];\n if (newValues.length > currentIds.length) {\n const diff = newValues.length - currentIds.length;\n const newIds = Array.from({ length: diff }, generateId);\n ids.value = [...currentIds, ...newIds];\n } else {\n ids.value = currentIds.slice(0, newValues.length);\n }\n }\n });\n\n onUnmounted(() => {\n unsubscribe();\n if (store.unregisterPrefix) {\n store.unregisterPrefix(`${path as string}.`);\n }\n });\n\n const fields = computed(() =>\n values.value.map((v, i) => ({\n key: ids.value[i] || `temp-${i}`,\n value: v,\n index: i,\n })),\n );\n\n const length = computed(() => values.value.length);\n\n return {\n fields,\n length,\n append: (val: Item) => {\n ids.value.push(generateId());\n store.pushItem(path, val);\n },\n prepend: (val: Item) => {\n ids.value.unshift(generateId());\n store.prependItem(path, val);\n },\n insert: (index: number, val: Item) => {\n ids.value.splice(index, 0, generateId());\n store.insertItem(path, index, val);\n },\n remove: (index: number) => {\n ids.value.splice(index, 1);\n store.removeItem(path, index);\n },\n move: (from: number, to: number) => {\n const currentIds = [...ids.value];\n const [id] = currentIds.splice(from, 1);\n currentIds.splice(to, 0, id);\n ids.value = currentIds;\n store.moveItem(path, from, to);\n },\n swap: (a: number, b: number) => {\n const currentIds = [...ids.value];\n [currentIds[a], currentIds[b]] = [currentIds[b], currentIds[a]];\n ids.value = currentIds;\n store.swapItems(path, a, b);\n },\n replace: (items: Item[]) => {\n ids.value = items.map(generateId);\n store.setField(path as unknown as BitPath<TForm>, items as any);\n },\n clear: () => {\n ids.value = [];\n store.setField(path as unknown as BitPath<TForm>, [] as any);\n },\n };\n}\n","import { ref, computed, onMounted, onUnmounted } from \"vue\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { useBitStore } from \"./context\";\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 useBitScope(scopeName: string) {\n const store = useBitStore();\n const status = ref<ScopeStatus>(store.getStepStatus(scopeName));\n let unsubscribe: () => void;\n\n onMounted(() => {\n unsubscribe = store.subscribe(() => {\n const newStatus = store.getStepStatus(scopeName);\n if (\n newStatus.hasErrors !== status.value.hasErrors ||\n newStatus.isDirty !== status.value.isDirty ||\n !errorsEqual(newStatus.errors, status.value.errors)\n ) {\n status.value = newStatus;\n }\n });\n });\n\n onUnmounted(() => {\n unsubscribe?.();\n });\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.value.hasErrors);\n const isDirty = computed(() => status.value.isDirty);\n const errors = computed(() => status.value.errors);\n\n return {\n scopeName,\n status,\n errors,\n validate,\n getErrors,\n isValid,\n isDirty,\n };\n}\n","import { ref, computed, watch, onMounted, onUnmounted } from \"vue\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { useBitStore } from \"./context\";\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 interface UseBitStepsResult {\n step: import(\"vue\").ComputedRef<number>;\n stepIndex: import(\"vue\").Ref<number>;\n scope: import(\"vue\").ComputedRef<string>;\n next: () => Promise<boolean>;\n prev: () => void;\n goTo: (step: number) => void;\n isFirst: import(\"vue\").ComputedRef<boolean>;\n isLast: import(\"vue\").ComputedRef<boolean>;\n status: import(\"vue\").Ref<ScopeStatus>;\n errors: import(\"vue\").ComputedRef<Record<string, string>>;\n isValid: import(\"vue\").ComputedRef<boolean>;\n isDirty: import(\"vue\").ComputedRef<boolean>;\n validate: () => Promise<ValidateScopeResult>;\n getErrors: () => Record<string, string>;\n}\n\nexport function useBitSteps(scopeNames: string[]): UseBitStepsResult {\n const store = useBitStore();\n const stepIndex = ref(0);\n\n const scope = computed(() => scopeNames[stepIndex.value] ?? \"\");\n const status = ref<ScopeStatus>(store.getStepStatus(scope.value));\n let unsubscribe: () => void;\n\n watch(scope, (newScope) => {\n status.value = store.getStepStatus(newScope);\n });\n\n const updateStatus = () => {\n const scopeName = scope.value;\n const newStatus = store.getStepStatus(scopeName);\n if (\n newStatus.hasErrors !== status.value.hasErrors ||\n newStatus.isDirty !== status.value.isDirty ||\n !errorsEqual(newStatus.errors, status.value.errors)\n ) {\n status.value = newStatus;\n }\n };\n\n onMounted(() => {\n unsubscribe = store.subscribe(updateStatus);\n });\n\n onUnmounted(() => {\n unsubscribe?.();\n });\n\n const validate = async (): Promise<ValidateScopeResult> => {\n const scopeName = scope.value;\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(scope.value);\n\n const next = async (): Promise<boolean> => {\n const scopeName = scope.value;\n const valid = await store.validate({ scope: scopeName });\n if (valid) {\n stepIndex.value = Math.min(stepIndex.value + 1, scopeNames.length - 1);\n }\n return valid;\n };\n\n const prev = () => {\n stepIndex.value = Math.max(stepIndex.value - 1, 0);\n };\n\n const goTo = (targetStep: number) => {\n stepIndex.value = Math.max(\n 0,\n Math.min(targetStep - 1, scopeNames.length - 1),\n );\n };\n\n const step = computed(() => stepIndex.value + 1);\n const isFirst = computed(() => stepIndex.value === 0);\n const isLast = computed(() => stepIndex.value >= scopeNames.length - 1);\n const isValid = computed(() => !status.value.hasErrors);\n const isDirty = computed(() => status.value.isDirty);\n const errors = computed(() => status.value.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 { ref, onUnmounted, readonly } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport {\n getDeepValue,\n deepEqual,\n BitPath,\n BitPathValue,\n} from \"../core\";\n\nexport function useBitWatch<\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P) {\n const store = useBitStore<TForm>();\n const initialValue = getDeepValue(\n store.getState().values,\n path as string,\n ) as BitPathValue<TForm, P>;\n const value = ref<BitPathValue<TForm, P>>(initialValue);\n\n const unsubscribe = store.watch(path, (newValue) => {\n if (!deepEqual(value.value, newValue)) {\n value.value = newValue as BitPathValue<TForm, P>;\n }\n });\n\n onUnmounted(unsubscribe);\n\n return readonly(value);\n}\n"],"mappings":"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","names":["inject","provide","BIT_STORE_KEY","provideBitStore","store","useBitStore","computed","onUnmounted","shallowRef","ref","useBitForm","store","useBitStore","state","shallowRef","submitError","ref","lastResponse","unsubscribe","onUnmounted","getValues","getErrors","getTouched","isValid","computed","isSubmitting","isDirty","canUndo","canRedo","onSuccess","e","handler","values","result","err","isValidationErrorShape","extractServerErrors","computed","onUnmounted","shallowRef","useBitField","path","config","options","store","useBitStore","maskOption","resolvedMask","state","shallowRef","unsubscribe","onUnmounted","rawValue","computed","getDeepValue","displayValue","val","value","error","touched","invalid","isValidating","isDirty","isHidden","isRequired","fieldMeta","ref","computed","onUnmounted","generateId","useBitArray","path","store","useBitStore","getSnapshot","val","getDeepValue","initialValues","values","ref","ids","unsubscribe","newValues","currentIds","diff","newIds","onUnmounted","fields","computed","v","i","length","index","from","to","id","a","b","items","ref","computed","onMounted","onUnmounted","errorsEqual","a","b","keysA","keysB","k","useBitScope","scopeName","store","useBitStore","status","ref","unsubscribe","onMounted","newStatus","onUnmounted","validate","valid","errors","getErrors","isValid","computed","isDirty","ref","computed","watch","onMounted","onUnmounted","errorsEqual","a","b","keysA","keysB","k","useBitSteps","scopeNames","store","useBitStore","stepIndex","ref","scope","computed","status","unsubscribe","watch","newScope","updateStatus","scopeName","newStatus","onMounted","onUnmounted","validate","valid","errors","getErrors","next","prev","goTo","targetStep","step","isFirst","isLast","isValid","isDirty","ref","onUnmounted","readonly","useBitWatch","path","store","useBitStore","initialValue","getDeepValue","value","ref","unsubscribe","newValue","deepEqual","onUnmounted","readonly"]}
package/package.json ADDED
@@ -0,0 +1,160 @@
1
+ {
2
+ "name": "@lehnihon/bit-form",
3
+ "version": "1.0.0",
4
+ "description": "Gerenciamento de estado de formulários agnóstico e performático",
5
+ "publishConfig": {
6
+ "access": "public"
7
+ },
8
+ "license": "MIT",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "https://github.com/lehnihon/bit-form.git"
12
+ },
13
+ "homepage": "https://github.com/lehnihon/bit-form#readme",
14
+ "bugs": {
15
+ "url": "https://github.com/lehnihon/bit-form/issues"
16
+ },
17
+ "keywords": [
18
+ "form",
19
+ "validation",
20
+ "react",
21
+ "vue",
22
+ "angular",
23
+ "react-native",
24
+ "form-state",
25
+ "form-validation",
26
+ "mask",
27
+ "framework-agnostic"
28
+ ],
29
+ "type": "module",
30
+ "main": "./dist/index.cjs",
31
+ "module": "./dist/index.js",
32
+ "types": "./dist/index.d.ts",
33
+ "bin": {
34
+ "bit-form": "./dist/cli/index.cjs"
35
+ },
36
+ "exports": {
37
+ ".": {
38
+ "types": "./dist/index.d.ts",
39
+ "import": "./dist/index.js",
40
+ "require": "./dist/index.cjs"
41
+ },
42
+ "./react": {
43
+ "types": "./dist/react/index.d.ts",
44
+ "import": "./dist/react/index.js",
45
+ "require": "./dist/react/index.cjs"
46
+ },
47
+ "./react-native": {
48
+ "types": "./dist/react-native/index.d.ts",
49
+ "import": "./dist/react-native/index.js",
50
+ "require": "./dist/react-native/index.cjs"
51
+ },
52
+ "./vue": {
53
+ "types": "./dist/vue/index.d.ts",
54
+ "import": "./dist/vue/index.js",
55
+ "require": "./dist/vue/index.cjs"
56
+ },
57
+ "./angular": {
58
+ "types": "./dist/angular/index.d.ts",
59
+ "import": "./dist/angular/index.js",
60
+ "require": "./dist/angular/index.cjs"
61
+ },
62
+ "./resolvers/*": {
63
+ "types": "./dist/resolvers/*.d.ts",
64
+ "import": "./dist/resolvers/*.js",
65
+ "require": "./dist/resolvers/*.cjs"
66
+ },
67
+ "./devtools": {
68
+ "types": "./dist/devtools/index.d.ts",
69
+ "import": "./dist/devtools/index.js",
70
+ "require": "./dist/devtools/index.cjs"
71
+ },
72
+ "./devtools/bridge": {
73
+ "types": "./dist/devtools/bridge.d.ts",
74
+ "import": "./dist/devtools/bridge.js",
75
+ "require": "./dist/devtools/bridge.cjs"
76
+ }
77
+ },
78
+ "files": [
79
+ "dist",
80
+ "README.md",
81
+ "LICENSE"
82
+ ],
83
+ "scripts": {
84
+ "sync": "npm run build && yalc push",
85
+ "dev": "tsup --watch",
86
+ "build": "tsup",
87
+ "test": "vitest run",
88
+ "test:watch": "vitest",
89
+ "test:coverage": "vitest run --coverage",
90
+ "clean": "rm -rf dist && rm -f *.tsbuildinfo",
91
+ "lint": "npm run clean && tsc --build && tsc -p tsconfig.test.json",
92
+ "prepublishOnly": "npm run build && npm run test",
93
+ "release": "npm publish",
94
+ "dry-run": "npm publish --dry-run",
95
+ "bundle-ctx": "repomix"
96
+ },
97
+ "peerDependencies": {
98
+ "@angular/core": ">=16.0.0",
99
+ "joi": "^17.0.0",
100
+ "react": ">=16.8.0",
101
+ "rxjs": "^7.0.0",
102
+ "vue": ">=3.0.0",
103
+ "yup": "^1.0.0",
104
+ "zod": "^3.0.0"
105
+ },
106
+ "peerDependenciesMeta": {
107
+ "@angular/core": {
108
+ "optional": true
109
+ },
110
+ "react": {
111
+ "optional": true
112
+ },
113
+ "vue": {
114
+ "optional": true
115
+ },
116
+ "zod": {
117
+ "optional": true
118
+ },
119
+ "yup": {
120
+ "optional": true
121
+ },
122
+ "joi": {
123
+ "optional": true
124
+ },
125
+ "rxjs": {
126
+ "optional": true
127
+ }
128
+ },
129
+ "devDependencies": {
130
+ "@angular/common": "^21.1.3",
131
+ "@angular/compiler": "^21.1.3",
132
+ "@angular/core": "^21.1.3",
133
+ "@angular/platform-browser": "^21.1.3",
134
+ "@angular/platform-browser-dynamic": "^21.1.3",
135
+ "@testing-library/jest-dom": "^6.6.3",
136
+ "@testing-library/react": "^16.2.0",
137
+ "@types/node": "^22.19.11",
138
+ "@types/react": "^19.0.8",
139
+ "@types/react-dom": "^19.0.3",
140
+ "@types/react-native": "^0.72.8",
141
+ "@types/ws": "^8.18.1",
142
+ "@vitejs/plugin-react": "^4.3.4",
143
+ "@vitejs/plugin-vue": "^5.2.1",
144
+ "@vitest/coverage-v8": "^3.0.5",
145
+ "@vue/test-utils": "^2.4.6",
146
+ "joi": "^17.13.3",
147
+ "jsdom": "^26.0.0",
148
+ "react": "^19.0.0",
149
+ "react-dom": "^19.0.0",
150
+ "repomix": "^1.11.1",
151
+ "rxjs": "^7.8.1",
152
+ "tsup": "^8.3.6",
153
+ "typescript": "^5.7.3",
154
+ "vitest": "^3.0.5",
155
+ "vue": "^3.5.13",
156
+ "yup": "^1.7.1",
157
+ "zod": "^3.25.7",
158
+ "zone.js": "^0.16.0"
159
+ }
160
+ }