@lehnihon/bit-form 2.2.0 → 2.2.1

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 (60) hide show
  1. package/dist/angular/index.cjs +1 -1
  2. package/dist/angular/index.cjs.map +1 -1
  3. package/dist/angular/index.d.cts +19 -19
  4. package/dist/angular/index.d.ts +19 -19
  5. package/dist/angular/index.js +1 -1
  6. package/dist/angular/index.js.map +1 -1
  7. package/dist/{bus-70e4jnBj.d.cts → bus-B3pGaiFZ.d.cts} +14 -5
  8. package/dist/{bus-70e4jnBj.d.ts → bus-B3pGaiFZ.d.ts} +14 -5
  9. package/dist/chunk-442A4FTZ.cjs +2 -0
  10. package/dist/chunk-442A4FTZ.cjs.map +1 -0
  11. package/dist/chunk-6FJEE6O3.js +133 -0
  12. package/dist/chunk-6FJEE6O3.js.map +1 -0
  13. package/dist/chunk-FOV24ACZ.js +2 -0
  14. package/dist/chunk-FOV24ACZ.js.map +1 -0
  15. package/dist/chunk-YWXX6XRV.cjs +133 -0
  16. package/dist/chunk-YWXX6XRV.cjs.map +1 -0
  17. package/dist/devtools/bridge.cjs +1 -1
  18. package/dist/devtools/bridge.js +1 -1
  19. package/dist/devtools/index.cjs +1 -1
  20. package/dist/devtools/index.js +1 -1
  21. package/dist/index.cjs +1 -1
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.d.cts +7 -6
  24. package/dist/index.d.ts +7 -6
  25. package/dist/index.js +1 -1
  26. package/dist/public-types-CtYuIAMP.d.cts +99 -0
  27. package/dist/public-types-Lq3eLstW.d.ts +99 -0
  28. package/dist/react/index.cjs +1 -1
  29. package/dist/react/index.d.cts +5 -5
  30. package/dist/react/index.d.ts +5 -5
  31. package/dist/react/index.js +1 -1
  32. package/dist/react-native/index.cjs +1 -1
  33. package/dist/react-native/index.d.cts +4 -4
  34. package/dist/react-native/index.d.ts +4 -4
  35. package/dist/react-native/index.js +1 -1
  36. package/dist/resolvers/joi.d.cts +1 -1
  37. package/dist/resolvers/joi.d.ts +1 -1
  38. package/dist/resolvers/yup.d.cts +1 -1
  39. package/dist/resolvers/yup.d.ts +1 -1
  40. package/dist/resolvers/zod.d.cts +1 -1
  41. package/dist/resolvers/zod.d.ts +1 -1
  42. package/dist/{use-bit-persist-JshPvwwy.d.cts → use-bit-persist-CWzGfovL.d.cts} +19 -23
  43. package/dist/{use-bit-persist-COdNw_fv.d.ts → use-bit-persist-hxJaKG2S.d.ts} +19 -23
  44. package/dist/vue/index.cjs +1 -1
  45. package/dist/vue/index.cjs.map +1 -1
  46. package/dist/vue/index.d.cts +36 -36
  47. package/dist/vue/index.d.ts +36 -36
  48. package/dist/vue/index.js +1 -1
  49. package/dist/vue/index.js.map +1 -1
  50. package/package.json +1 -1
  51. package/dist/chunk-25Q2XJBV.cjs +0 -133
  52. package/dist/chunk-25Q2XJBV.cjs.map +0 -1
  53. package/dist/chunk-2HAQ3QEQ.js +0 -133
  54. package/dist/chunk-2HAQ3QEQ.js.map +0 -1
  55. package/dist/chunk-HTB6QIUQ.js +0 -2
  56. package/dist/chunk-HTB6QIUQ.js.map +0 -1
  57. package/dist/chunk-W22D7QVJ.cjs +0 -2
  58. package/dist/chunk-W22D7QVJ.cjs.map +0 -1
  59. package/dist/public-types-BVZ16kgZ.d.ts +0 -74
  60. package/dist/public-types-r2aP68Gg.d.cts +0 -74
@@ -1,13 +1,13 @@
1
- import { b as BitFrameworkStore } from '../public-types-r2aP68Gg.cjs';
2
- import { i as BitErrors, z as BitTouched, p as BitPath, q as BitPathValue, S as ScopeStatus, V as ValidateScopeResult, e as BitArrayPath, d as BitArrayItem } from '../bus-70e4jnBj.cjs';
1
+ import { B as BitStoreApi, i as BitValidationOptions, d as BitHistoryMetadata, e as BitPersistMetadata } from '../public-types-CtYuIAMP.cjs';
2
+ import { i as BitErrors, A as BitTouched, G as DeepPartial, q as BitPath, r as BitPathValue, e as BitArrayPath, d as BitArrayItem, S as ScopeStatus, V as ValidateScopeResult } from '../bus-B3pGaiFZ.cjs';
3
3
  import * as vue from 'vue';
4
- import { Ref, ComputedRef } from 'vue';
4
+ import { ComputedRef, Ref } from 'vue';
5
5
  import * as _vue_reactivity from '@vue/reactivity';
6
6
  import * as _vue_shared from '@vue/shared';
7
7
  import { a as BitUploadFn, B as BitDeleteUploadFn } from '../types-C2mpfhp1.cjs';
8
8
 
9
- declare function provideBitStore<T extends object>(store: BitFrameworkStore<T>): void;
10
- declare function useBitStore<T extends object>(): BitFrameworkStore<T>;
9
+ declare function provideBitStore<T extends object>(store: BitStoreApi<T>): void;
10
+ declare function useBitStore<T extends object>(): BitStoreApi<T>;
11
11
 
12
12
  declare function useBitForm<T extends object>(): {
13
13
  meta: {
@@ -24,23 +24,23 @@ declare function useBitForm<T extends object>(): {
24
24
  submit: (onSuccess: (values: T, dirtyValues?: Partial<T>) => void | Promise<void>) => (e?: Event) => Promise<void>;
25
25
  onSubmit: (handler: (values: T, dirtyValues?: Partial<T>) => Promise<unknown>) => (e?: Event) => Promise<void>;
26
26
  reset: () => void;
27
+ replaceValues: (values: T) => void;
28
+ hydrate: (values: DeepPartial<T>) => void;
29
+ rebase: (values: T) => void;
27
30
  setValues: (values: T) => void;
28
31
  setError: (path: string, message: string | undefined) => void;
29
32
  setErrors: (errors: BitErrors<T>) => void;
30
33
  setServerErrors: (serverErrors: Record<string, string[] | string>) => void;
31
34
  setField: <P extends BitPath<T, "">>(path: P, value: BitPathValue<T, P>) => void;
32
35
  blurField: <P extends BitPath<T, "">>(path: P) => void;
33
- validate: (options?: {
34
- scope?: string;
35
- scopeFields?: string[];
36
- }) => Promise<boolean>;
36
+ validate: (options?: BitValidationOptions) => Promise<boolean>;
37
37
  mutations: {
38
- pushItem: (path: any, value: any) => void;
39
- prependItem: (path: any, value: any) => void;
40
- removeItem: (path: any, index: number) => void;
41
- insertItem: (path: any, index: number, value: any) => void;
42
- moveItem: (path: any, from: number, to: number) => void;
43
- swapItems: (path: any, indexA: number, indexB: number) => void;
38
+ pushItem: <P extends BitArrayPath<T>>(path: P, value: BitArrayItem<BitPathValue<T, P>>) => void;
39
+ prependItem: <P extends BitArrayPath<T>>(path: P, value: BitArrayItem<BitPathValue<T, P>>) => void;
40
+ removeItem: <P extends BitArrayPath<T>>(path: P, index: number) => void;
41
+ insertItem: <P extends BitArrayPath<T>>(path: P, index: number, value: BitArrayItem<BitPathValue<T, P>>) => void;
42
+ moveItem: <P extends BitArrayPath<T>>(path: P, from: number, to: number) => void;
43
+ swapItems: <P extends BitArrayPath<T>>(path: P, indexA: number, indexB: number) => void;
44
44
  };
45
45
  };
46
46
 
@@ -48,26 +48,26 @@ declare function useBitForm<T extends object>(): {
48
48
  * Metadata describing the current state of a form field (Vue reactive).
49
49
  */
50
50
  interface UseBitFieldVueMeta {
51
- error: Readonly<any>;
52
- touched: Readonly<any>;
53
- invalid: Readonly<any>;
54
- isValidating: Readonly<any>;
55
- isDirty: Readonly<any>;
56
- isHidden: Readonly<any>;
57
- isRequired: Readonly<any>;
58
- hasError: Readonly<any>;
51
+ error: ComputedRef<string | undefined>;
52
+ touched: ComputedRef<boolean>;
53
+ invalid: ComputedRef<boolean>;
54
+ isValidating: ComputedRef<boolean>;
55
+ isDirty: ComputedRef<boolean>;
56
+ isHidden: ComputedRef<boolean>;
57
+ isRequired: ComputedRef<boolean>;
58
+ hasError: ComputedRef<boolean>;
59
59
  }
60
60
  /**
61
61
  * Result from useBitField hook in Vue.
62
62
  * Provides field state, value, handlers, and metadata with Vue reactivity.
63
63
  */
64
64
  interface UseBitFieldVueResult<TValue = any> {
65
- value: Readonly<any>;
66
- displayValue: Readonly<any>;
67
- modelValue: any;
68
- setValue: (val: any) => void;
65
+ value: ComputedRef<TValue>;
66
+ displayValue: ComputedRef<string>;
67
+ modelValue: ComputedRef<string>;
68
+ setValue: (val: TValue | string | number | null | undefined) => void;
69
69
  setBlur: () => void;
70
- onInput: (val: any) => void;
70
+ onInput: (val: TValue | string | number | null | undefined) => void;
71
71
  onBlur: () => void;
72
72
  meta: UseBitFieldVueMeta;
73
73
  }
@@ -108,10 +108,10 @@ interface UseBitUploadResult {
108
108
  * Provides form history undo/redo capabilities (Vue reactive).
109
109
  */
110
110
  interface UseBitHistoryResult {
111
- canUndo: Readonly<any>;
112
- canRedo: Readonly<any>;
113
- historyIndex: Readonly<any>;
114
- historySize: Readonly<any>;
111
+ canUndo: ComputedRef<BitHistoryMetadata["canUndo"]>;
112
+ canRedo: ComputedRef<BitHistoryMetadata["canRedo"]>;
113
+ historyIndex: ComputedRef<BitHistoryMetadata["historyIndex"]>;
114
+ historySize: ComputedRef<BitHistoryMetadata["historySize"]>;
115
115
  undo: () => void;
116
116
  redo: () => void;
117
117
  }
@@ -120,13 +120,13 @@ interface UseBitPersistResult {
120
120
  save: () => Promise<void>;
121
121
  clear: () => Promise<void>;
122
122
  meta: {
123
- isSaving: Ref<boolean>;
124
- isRestoring: Ref<boolean>;
125
- error: Ref<Error | null>;
123
+ isSaving: Ref<BitPersistMetadata["isSaving"]>;
124
+ isRestoring: Ref<BitPersistMetadata["isRestoring"]>;
125
+ error: Ref<BitPersistMetadata["error"]>;
126
126
  };
127
127
  }
128
128
 
129
- declare function useBitField<TValue = any>(path: string): UseBitFieldVueResult<TValue>;
129
+ declare function useBitField<TForm extends object = any, P extends BitPath<TForm> = BitPath<TForm>>(path: P): UseBitFieldVueResult<BitPathValue<TForm, P>>;
130
130
 
131
131
  declare function useBitArray<TForm extends object = any, P extends BitArrayPath<TForm> = BitArrayPath<TForm>>(path: P): {
132
132
  fields: vue.ComputedRef<{
@@ -1,13 +1,13 @@
1
- import { b as BitFrameworkStore } from '../public-types-BVZ16kgZ.js';
2
- import { i as BitErrors, z as BitTouched, p as BitPath, q as BitPathValue, S as ScopeStatus, V as ValidateScopeResult, e as BitArrayPath, d as BitArrayItem } from '../bus-70e4jnBj.js';
1
+ import { B as BitStoreApi, i as BitValidationOptions, d as BitHistoryMetadata, e as BitPersistMetadata } from '../public-types-Lq3eLstW.js';
2
+ import { i as BitErrors, A as BitTouched, G as DeepPartial, q as BitPath, r as BitPathValue, e as BitArrayPath, d as BitArrayItem, S as ScopeStatus, V as ValidateScopeResult } from '../bus-B3pGaiFZ.js';
3
3
  import * as vue from 'vue';
4
- import { Ref, ComputedRef } from 'vue';
4
+ import { ComputedRef, Ref } from 'vue';
5
5
  import * as _vue_reactivity from '@vue/reactivity';
6
6
  import * as _vue_shared from '@vue/shared';
7
7
  import { a as BitUploadFn, B as BitDeleteUploadFn } from '../types-C2mpfhp1.js';
8
8
 
9
- declare function provideBitStore<T extends object>(store: BitFrameworkStore<T>): void;
10
- declare function useBitStore<T extends object>(): BitFrameworkStore<T>;
9
+ declare function provideBitStore<T extends object>(store: BitStoreApi<T>): void;
10
+ declare function useBitStore<T extends object>(): BitStoreApi<T>;
11
11
 
12
12
  declare function useBitForm<T extends object>(): {
13
13
  meta: {
@@ -24,23 +24,23 @@ declare function useBitForm<T extends object>(): {
24
24
  submit: (onSuccess: (values: T, dirtyValues?: Partial<T>) => void | Promise<void>) => (e?: Event) => Promise<void>;
25
25
  onSubmit: (handler: (values: T, dirtyValues?: Partial<T>) => Promise<unknown>) => (e?: Event) => Promise<void>;
26
26
  reset: () => void;
27
+ replaceValues: (values: T) => void;
28
+ hydrate: (values: DeepPartial<T>) => void;
29
+ rebase: (values: T) => void;
27
30
  setValues: (values: T) => void;
28
31
  setError: (path: string, message: string | undefined) => void;
29
32
  setErrors: (errors: BitErrors<T>) => void;
30
33
  setServerErrors: (serverErrors: Record<string, string[] | string>) => void;
31
34
  setField: <P extends BitPath<T, "">>(path: P, value: BitPathValue<T, P>) => void;
32
35
  blurField: <P extends BitPath<T, "">>(path: P) => void;
33
- validate: (options?: {
34
- scope?: string;
35
- scopeFields?: string[];
36
- }) => Promise<boolean>;
36
+ validate: (options?: BitValidationOptions) => Promise<boolean>;
37
37
  mutations: {
38
- pushItem: (path: any, value: any) => void;
39
- prependItem: (path: any, value: any) => void;
40
- removeItem: (path: any, index: number) => void;
41
- insertItem: (path: any, index: number, value: any) => void;
42
- moveItem: (path: any, from: number, to: number) => void;
43
- swapItems: (path: any, indexA: number, indexB: number) => void;
38
+ pushItem: <P extends BitArrayPath<T>>(path: P, value: BitArrayItem<BitPathValue<T, P>>) => void;
39
+ prependItem: <P extends BitArrayPath<T>>(path: P, value: BitArrayItem<BitPathValue<T, P>>) => void;
40
+ removeItem: <P extends BitArrayPath<T>>(path: P, index: number) => void;
41
+ insertItem: <P extends BitArrayPath<T>>(path: P, index: number, value: BitArrayItem<BitPathValue<T, P>>) => void;
42
+ moveItem: <P extends BitArrayPath<T>>(path: P, from: number, to: number) => void;
43
+ swapItems: <P extends BitArrayPath<T>>(path: P, indexA: number, indexB: number) => void;
44
44
  };
45
45
  };
46
46
 
@@ -48,26 +48,26 @@ declare function useBitForm<T extends object>(): {
48
48
  * Metadata describing the current state of a form field (Vue reactive).
49
49
  */
50
50
  interface UseBitFieldVueMeta {
51
- error: Readonly<any>;
52
- touched: Readonly<any>;
53
- invalid: Readonly<any>;
54
- isValidating: Readonly<any>;
55
- isDirty: Readonly<any>;
56
- isHidden: Readonly<any>;
57
- isRequired: Readonly<any>;
58
- hasError: Readonly<any>;
51
+ error: ComputedRef<string | undefined>;
52
+ touched: ComputedRef<boolean>;
53
+ invalid: ComputedRef<boolean>;
54
+ isValidating: ComputedRef<boolean>;
55
+ isDirty: ComputedRef<boolean>;
56
+ isHidden: ComputedRef<boolean>;
57
+ isRequired: ComputedRef<boolean>;
58
+ hasError: ComputedRef<boolean>;
59
59
  }
60
60
  /**
61
61
  * Result from useBitField hook in Vue.
62
62
  * Provides field state, value, handlers, and metadata with Vue reactivity.
63
63
  */
64
64
  interface UseBitFieldVueResult<TValue = any> {
65
- value: Readonly<any>;
66
- displayValue: Readonly<any>;
67
- modelValue: any;
68
- setValue: (val: any) => void;
65
+ value: ComputedRef<TValue>;
66
+ displayValue: ComputedRef<string>;
67
+ modelValue: ComputedRef<string>;
68
+ setValue: (val: TValue | string | number | null | undefined) => void;
69
69
  setBlur: () => void;
70
- onInput: (val: any) => void;
70
+ onInput: (val: TValue | string | number | null | undefined) => void;
71
71
  onBlur: () => void;
72
72
  meta: UseBitFieldVueMeta;
73
73
  }
@@ -108,10 +108,10 @@ interface UseBitUploadResult {
108
108
  * Provides form history undo/redo capabilities (Vue reactive).
109
109
  */
110
110
  interface UseBitHistoryResult {
111
- canUndo: Readonly<any>;
112
- canRedo: Readonly<any>;
113
- historyIndex: Readonly<any>;
114
- historySize: Readonly<any>;
111
+ canUndo: ComputedRef<BitHistoryMetadata["canUndo"]>;
112
+ canRedo: ComputedRef<BitHistoryMetadata["canRedo"]>;
113
+ historyIndex: ComputedRef<BitHistoryMetadata["historyIndex"]>;
114
+ historySize: ComputedRef<BitHistoryMetadata["historySize"]>;
115
115
  undo: () => void;
116
116
  redo: () => void;
117
117
  }
@@ -120,13 +120,13 @@ interface UseBitPersistResult {
120
120
  save: () => Promise<void>;
121
121
  clear: () => Promise<void>;
122
122
  meta: {
123
- isSaving: Ref<boolean>;
124
- isRestoring: Ref<boolean>;
125
- error: Ref<Error | null>;
123
+ isSaving: Ref<BitPersistMetadata["isSaving"]>;
124
+ isRestoring: Ref<BitPersistMetadata["isRestoring"]>;
125
+ error: Ref<BitPersistMetadata["error"]>;
126
126
  };
127
127
  }
128
128
 
129
- declare function useBitField<TValue = any>(path: string): UseBitFieldVueResult<TValue>;
129
+ declare function useBitField<TForm extends object = any, P extends BitPath<TForm> = BitPath<TForm>>(path: P): UseBitFieldVueResult<BitPathValue<TForm, P>>;
130
130
 
131
131
  declare function useBitArray<TForm extends object = any, P extends BitArrayPath<TForm> = BitArrayPath<TForm>>(path: P): {
132
132
  fields: vue.ComputedRef<{
package/dist/vue/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{d as A,e as V,h as j,i as M}from"../chunk-2HAQ3QEQ.js";import{inject as z,provide as C}from"vue";var H=Symbol("BIT_STORE");function $(e){C(H,e)}function l(){let e=z(H);if(!e)throw new Error("BitForm Vue hooks devem ser usados sob um provideBitStore");return e}import{computed as R,onUnmounted as L,shallowRef as Y,ref as O}from"vue";function G(){let e=l(),t=Y(e.getState()),o=O(null),r=O(null),n=e.subscribe(()=>{t.value={...e.getState()}});L(n);let i=()=>t.value.values,f=()=>t.value.errors,u=()=>t.value.touched,v=()=>e.getDirtyValues(),s=R(()=>t.value.isValid),a=R(()=>t.value.isSubmitting),c=R(()=>t.value.isDirty);return{meta:{isValid:s,isDirty:c,isSubmitting:a,submitError:o,lastResponse:r},getValues:i,getErrors:f,getTouched:u,getDirtyValues:v,submit:S=>B=>(B?.preventDefault?.(),e.submit(S)),onSubmit:S=>B=>(B?.preventDefault?.(),o.value=null,e.submit(async(F,m)=>{try{let d=await S(F,m);r.value=d,o.value=null}catch(d){j(d)?e.setServerErrors(M(d)):o.value=d instanceof Error?d:new Error(String(d))}})),reset:()=>{e.reset(),o.value=null,r.value=null},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),validate:e.validate.bind(e),mutations:{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)}}}import{computed as y,onUnmounted as J,shallowRef as Q}from"vue";function T(e){let t=l(),o=t.resolveMask(e),r=Q(t.getState()),n=t.subscribe(()=>{r.value=t.getState()});J(()=>{n(),t.unregisterField&&t.unregisterField(e)});let i=y(()=>V(r.value.values,e)),f=y(()=>{let p=i.value;return p==null||p===""?"":o?o.format(p):String(p)}),u=y({get:()=>f.value,set:p=>{if(!o){t.setField(e,p);return}t.setField(e,o.parse(String(p??"")))}}),v=y(()=>r.value.errors[e]),s=y(()=>r.value.touched[e]?r.value.errors[e]:void 0),a=y(()=>!!r.value.touched[e]),c=y(()=>!!(a.value&&s.value)),g=y(()=>(r.value,t.isFieldValidating(e))),I=y(()=>(r.value,t.isFieldDirty(e))),w=y(()=>(r.value,t.isHidden(e))),S=y(()=>(r.value,t.isRequired(e))),B=y(()=>!!v.value),F=p=>{u.value=p},m=()=>t.blurField(e);return{value:i,displayValue:f,modelValue:u,setValue:F,setBlur:m,onInput:p=>{F(p)},onBlur:()=>{m()},meta:{error:s,touched:a,invalid:c,isValidating:g,isDirty:I,isHidden:w,isRequired:S,hasError:B}}}import{ref as q,computed as K,onUnmounted as X}from"vue";var E=()=>Math.random().toString(36).substring(2,9);function Z(e){let t=l(),o=()=>{let s=V(t.getState().values,e);return Array.isArray(s)?s:[]},r=o(),n=q(r),i=q(r.map(E)),f=t.subscribe(()=>{let s=o();if(n.value=[...s],s.length!==i.value.length){let a=[...i.value];if(s.length>a.length){let c=s.length-a.length,g=Array.from({length:c},E);i.value=[...a,...g]}else i.value=a.slice(0,s.length)}});X(()=>{f(),t.unregisterPrefix&&t.unregisterPrefix(`${e}.`)});let u=K(()=>n.value.map((s,a)=>({key:i.value[a]||`temp-${a}`,value:s,index:a}))),v=K(()=>n.value.length);return{fields:u,length:v,append:s=>{i.value.push(E()),t.pushItem(e,s)},prepend:s=>{i.value.unshift(E()),t.prependItem(e,s)},insert:(s,a)=>{i.value.splice(s,0,E()),t.insertItem(e,s,a)},remove:s=>{i.value.splice(s,1),t.removeItem(e,s)},move:(s,a)=>{let c=[...i.value],[g]=c.splice(s,1);c.splice(a,0,g),i.value=c,t.moveItem(e,s,a)},swap:(s,a)=>{let c=[...i.value];[c[s],c[a]]=[c[a],c[s]],i.value=c,t.swapItems(e,s,a)},replace:s=>{i.value=s.map(E),t.setField(e,s)},clear:()=>{i.value=[],t.setField(e,[])}}}import{computed as x,onUnmounted as N,shallowRef as ee}from"vue";function te(){let e=l(),t=ee(e.getHistoryMetadata()),o=e.subscribe(()=>{t.value=e.getHistoryMetadata()});N(o);let r=()=>e.undo(),n=()=>e.redo();return{canUndo:x(()=>t.value.canUndo),canRedo:x(()=>t.value.canRedo),historyIndex:x(()=>t.value.historyIndex),historySize:x(()=>t.value.historySize),undo:r,redo:n}}import{ref as re,computed as P,onMounted as se,onUnmounted as oe}from"vue";function ne(e,t){let o=Object.keys(e),r=Object.keys(t);return o.length!==r.length?!1:o.every(n=>e[n]===t[n])}function ie(e){let t=l(),o=re(t.getStepStatus(e)),r;se(()=>{r=t.subscribe(()=>{let s=t.getStepStatus(e);(s.hasErrors!==o.value.hasErrors||s.isDirty!==o.value.isDirty||!ne(s.errors,o.value.errors))&&(o.value=s)})}),oe(()=>{r?.()});let n=async()=>{let s=await t.validate({scope:e}),a=t.getStepErrors(e);return{valid:s,errors:a}},i=()=>t.getStepErrors(e),f=P(()=>!o.value.hasErrors),u=P(()=>o.value.isDirty),v=P(()=>o.value.errors);return{scopeName:e,status:o,errors:v,validate:n,getErrors:i,isValid:f,isDirty:u}}import{ref as W,computed as b,watch as ae,onMounted as ue,onUnmounted as le}from"vue";function ce(e,t){let o=Object.keys(e),r=Object.keys(t);return o.length!==r.length?!1:o.every(n=>e[n]===t[n])}function me(e){let t=l(),o=W(0),r=b(()=>e[o.value]??""),n=W(t.getStepStatus(r.value)),i;ae(r,m=>{n.value=t.getStepStatus(m)});let f=()=>{let m=r.value,d=t.getStepStatus(m);(d.hasErrors!==n.value.hasErrors||d.isDirty!==n.value.isDirty||!ce(d.errors,n.value.errors))&&(n.value=d)};ue(()=>{i=t.subscribe(f)}),le(()=>{i?.()});let u=async()=>{let m=r.value,d=await t.validate({scope:m}),h=t.getStepErrors(m);return{valid:d,errors:h}},v=()=>t.getStepErrors(r.value),s=async()=>{let m=r.value,d=t.getScopeFields(m);if(t.hasValidationsInProgress(d))return!1;let h=await t.validate({scope:m});if(h)o.value=Math.min(o.value+1,e.length-1);else{let p=t.getStepErrors(m),k=Object.keys(p);k.length>0&&t.markFieldsTouched(k)}return h},a=()=>{o.value=Math.max(o.value-1,0)},c=m=>{o.value=Math.max(0,Math.min(m-1,e.length-1))},g=b(()=>o.value+1),I=b(()=>o.value===0),w=b(()=>o.value>=e.length-1),S=b(()=>!n.value.hasErrors),B=b(()=>n.value.isDirty),F=b(()=>n.value.errors);return{step:g,stepIndex:o,scope:r,next:s,prev:a,goTo:c,isFirst:I,isLast:w,status:n,errors:F,isValid:S,isDirty:B,validate:u,getErrors:v}}import{ref as de,onUnmounted as ve,readonly as pe}from"vue";function fe(e){let t=l(),o=V(t.getState().values,e),r=de(o),n=t.watch(e,i=>{A(r.value,i)||(r.value=i)});return ve(n),pe(r)}import{computed as _}from"vue";function ye(e,t,o){let r=l(),n=T(e),i=null,f=async v=>{if(v){r.beginFieldValidation(e),await r.clearFieldAsyncError(e);try{let s=await t(v);n.setValue(s.url),i=s.key,await r.clearFieldAsyncError(e)}catch(s){let a=s instanceof Error?s.message:"Upload failed";await r.setFieldAsyncError(e,a)}finally{r.endFieldValidation(e)}}},u=async()=>{if(i&&o)try{await o(i)}catch(v){let s=v instanceof Error?v.message:"Delete failed";await r.setFieldAsyncError(e,s);return}n.setValue(null),i=null,await r.clearFieldAsyncError(e)};return{value:n.value,setValue:n.setValue,error:_(()=>n.meta.error.value),isValidating:_(()=>n.meta.isValidating.value||!1),upload:f,remove:u}}import{ref as U,readonly as D}from"vue";function ge(){let e=l(),t=U(!1),o=U(!1),r=U(null);return{restore:async()=>{o.value=!0,r.value=null;try{return await e.restorePersisted()}catch(u){return r.value=u instanceof Error?u:new Error(String(u)),!1}finally{o.value=!1}},save:async()=>{t.value=!0,r.value=null;try{await e.forceSave()}catch(u){r.value=u instanceof Error?u:new Error(String(u))}finally{t.value=!1}},clear:async()=>{r.value=null;try{await e.clearPersisted()}catch(u){r.value=u instanceof Error?u:new Error(String(u))}},meta:{isSaving:D(t),isRestoring:D(o),error:D(r)}}}export{$ as provideBitStore,Z as useBitArray,T as useBitField,G as useBitForm,te as useBitHistory,ge as useBitPersist,ie as useBitScope,me as useBitSteps,l as useBitStore,ye as useBitUpload,fe as useBitWatch};
1
+ import{e as k,f as T,i as j,j as M}from"../chunk-6FJEE6O3.js";import{inject as z,provide as C}from"vue";var H=Symbol("BIT_STORE");function $(e){C(H,e)}function c(){let e=z(H);if(!e)throw new Error("BitForm Vue hooks devem ser usados sob um provideBitStore");return e}import{computed as I,onUnmounted as L,shallowRef as Y,ref as O}from"vue";function G(){let e=c(),t=Y({isValid:e.getState().isValid,isSubmitting:e.getState().isSubmitting,isDirty:e.getState().isDirty}),s=O(null),r=O(null),i=e.subscribeSelector(y=>({isValid:y.isValid,isSubmitting:y.isSubmitting,isDirty:y.isDirty}),y=>{t.value=y});L(i);let n=()=>e.getState().values,f=()=>e.getState().errors,u=()=>e.getState().touched,v=()=>e.getDirtyValues(),o=I(()=>t.value.isValid),a=I(()=>t.value.isSubmitting),l=I(()=>t.value.isDirty);return{meta:{isValid:o,isDirty:l,isSubmitting:a,submitError:s,lastResponse:r},getValues:n,getErrors:f,getTouched:u,getDirtyValues:v,submit:y=>B=>(B?.preventDefault?.(),e.submit(y)),onSubmit:y=>B=>(B?.preventDefault?.(),s.value=null,e.submit(async(F,m)=>{try{let d=await y(F,m);r.value=d,s.value=null}catch(d){j(d)?e.setServerErrors(M(d)):s.value=d instanceof Error?d:new Error(String(d))}})),reset:()=>{e.reset(),s.value=null,r.value=null},replaceValues:e.replaceValues.bind(e),hydrate:e.hydrate.bind(e),rebase:e.rebase.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),validate:e.validate.bind(e),mutations:{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)}}}import{computed as g,onUnmounted as J,shallowRef as Q}from"vue";function R(e){let t=c(),s=t.resolveMask(e),r=Q(t.getFieldState(e)),i=t.subscribeSelector(()=>t.getFieldState(e),p=>{r.value=p});J(()=>{i(),t.unregisterField&&t.unregisterField(e)});let n=g(()=>r.value.value),f=g(()=>{let p=n.value;return p==null||p===""?"":s?s.format(p):String(p)}),u=g({get:()=>f.value,set:p=>{if(!s){t.setField(e,p);return}t.setField(e,s.parse(String(p??"")))}}),v=g(()=>r.value.error),o=g(()=>r.value.touched?r.value.error:void 0),a=g(()=>r.value.touched),l=g(()=>!!(a.value&&o.value)),S=g(()=>r.value.isValidating),h=g(()=>r.value.isDirty),E=g(()=>r.value.isHidden),y=g(()=>r.value.isRequired),B=g(()=>!!v.value),F=p=>{if(!s){t.setField(e,p);return}u.value=String(p??"")},m=()=>t.blurField(e);return{value:n,displayValue:f,modelValue:u,setValue:F,setBlur:m,onInput:p=>{F(p)},onBlur:()=>{m()},meta:{error:o,touched:a,invalid:l,isValidating:S,isDirty:h,isHidden:E,isRequired:y,hasError:B}}}import{ref as q,computed as K,onUnmounted as X}from"vue";var V=()=>Math.random().toString(36).substring(2,9);function Z(e){let t=c(),r=(()=>{let o=T(t.getState().values,e);return Array.isArray(o)?o:[]})(),i=q(r),n=q(r.map(V)),f=t.subscribePath(e,o=>{let a=Array.isArray(o)?o:[];if(i.value=[...a],a.length!==n.value.length){let l=[...n.value];if(a.length>l.length){let S=a.length-l.length,h=Array.from({length:S},V);n.value=[...l,...h]}else n.value=l.slice(0,a.length)}});X(()=>{f(),t.unregisterPrefix&&t.unregisterPrefix(`${e}.`)});let u=K(()=>i.value.map((o,a)=>({key:n.value[a]||`temp-${a}`,value:o,index:a}))),v=K(()=>i.value.length);return{fields:u,length:v,append:o=>{n.value.push(V()),t.pushItem(e,o)},prepend:o=>{n.value.unshift(V()),t.prependItem(e,o)},insert:(o,a)=>{n.value.splice(o,0,V()),t.insertItem(e,o,a)},remove:o=>{n.value.splice(o,1),t.removeItem(e,o)},move:(o,a)=>{let l=[...n.value],[S]=l.splice(o,1);l.splice(a,0,S),n.value=l,t.moveItem(e,o,a)},swap:(o,a)=>{let l=[...n.value];[l[o],l[a]]=[l[a],l[o]],n.value=l,t.swapItems(e,o,a)},replace:o=>{n.value=o.map(V),t.setField(e,o)},clear:()=>{n.value=[],t.setField(e,[])}}}import{computed as x,onUnmounted as N,shallowRef as ee}from"vue";function te(){let e=c(),t=ee(e.getHistoryMetadata()),s=e.subscribe(()=>{t.value=e.getHistoryMetadata()});N(s);let r=()=>e.undo(),i=()=>e.redo();return{canUndo:x(()=>t.value.canUndo),canRedo:x(()=>t.value.canRedo),historyIndex:x(()=>t.value.historyIndex),historySize:x(()=>t.value.historySize),undo:r,redo:i}}import{ref as re,computed as w,onMounted as se,onUnmounted as oe}from"vue";function ie(e,t){let s=Object.keys(e),r=Object.keys(t);return s.length!==r.length?!1:s.every(i=>e[i]===t[i])}function ne(e){let t=c(),s=re(t.getStepStatus(e)),r;se(()=>{r=t.subscribe(()=>{let o=t.getStepStatus(e);(o.hasErrors!==s.value.hasErrors||o.isDirty!==s.value.isDirty||!ie(o.errors,s.value.errors))&&(s.value=o)})}),oe(()=>{r?.()});let i=async()=>{let o=await t.validate({scope:e}),a=t.getStepErrors(e);return{valid:o,errors:a}},n=()=>t.getStepErrors(e),f=w(()=>!s.value.hasErrors),u=w(()=>s.value.isDirty),v=w(()=>s.value.errors);return{scopeName:e,status:s,errors:v,validate:i,getErrors:n,isValid:f,isDirty:u}}import{ref as W,computed as b,watch as ae,onMounted as ue,onUnmounted as le}from"vue";function ce(e,t){let s=Object.keys(e),r=Object.keys(t);return s.length!==r.length?!1:s.every(i=>e[i]===t[i])}function me(e){let t=c(),s=W(0),r=b(()=>e[s.value]??""),i=W(t.getStepStatus(r.value)),n;ae(r,m=>{i.value=t.getStepStatus(m)});let f=()=>{let m=r.value,d=t.getStepStatus(m);(d.hasErrors!==i.value.hasErrors||d.isDirty!==i.value.isDirty||!ce(d.errors,i.value.errors))&&(i.value=d)};ue(()=>{n=t.subscribe(f)}),le(()=>{n?.()});let u=async()=>{let m=r.value,d=await t.validate({scope:m}),P=t.getStepErrors(m);return{valid:d,errors:P}},v=()=>t.getStepErrors(r.value),o=async()=>{let m=r.value,d=t.getScopeFields(m);if(t.hasValidationsInProgress(d))return!1;let P=await t.validate({scope:m});if(P)s.value=Math.min(s.value+1,e.length-1);else{let p=t.getStepErrors(m),A=Object.keys(p);A.length>0&&t.markFieldsTouched(A)}return P},a=()=>{s.value=Math.max(s.value-1,0)},l=m=>{s.value=Math.max(0,Math.min(m-1,e.length-1))},S=b(()=>s.value+1),h=b(()=>s.value===0),E=b(()=>s.value>=e.length-1),y=b(()=>!i.value.hasErrors),B=b(()=>i.value.isDirty),F=b(()=>i.value.errors);return{step:S,stepIndex:s,scope:r,next:o,prev:a,goTo:l,isFirst:h,isLast:E,status:i,errors:F,isValid:y,isDirty:B,validate:u,getErrors:v}}import{ref as de,onUnmounted as pe,readonly as ve}from"vue";function fe(e){let t=c(),s=T(t.getState().values,e),r=de(s),i=t.watch(e,n=>{k(r.value,n)||(r.value=n)});return pe(i),ve(r)}import{computed as _}from"vue";function ye(e,t,s){let r=c(),i=R(e),n=null,f=async v=>{if(v){r.beginFieldValidation(e),await r.clearFieldAsyncError(e);try{let o=await t(v);i.setValue(o.url),n=o.key,await r.clearFieldAsyncError(e)}catch(o){let a=o instanceof Error?o.message:"Upload failed";await r.setFieldAsyncError(e,a)}finally{r.endFieldValidation(e)}}},u=async()=>{if(n&&s)try{await s(n)}catch(v){let o=v instanceof Error?v.message:"Delete failed";await r.setFieldAsyncError(e,o);return}i.setValue(null),n=null,await r.clearFieldAsyncError(e)};return{value:i.value,setValue:i.setValue,error:_(()=>i.meta.error.value),isValidating:_(()=>i.meta.isValidating.value||!1),upload:f,remove:u}}import{ref as U,readonly as D}from"vue";function ge(){let e=c(),t=U(!1),s=U(!1),r=U(null);return{restore:async()=>{s.value=!0,r.value=null;try{return await e.restorePersisted()}catch(u){return r.value=u instanceof Error?u:new Error(String(u)),!1}finally{s.value=!1}},save:async()=>{t.value=!0,r.value=null;try{await e.forceSave()}catch(u){r.value=u instanceof Error?u:new Error(String(u))}finally{t.value=!1}},clear:async()=>{r.value=null;try{await e.clearPersisted()}catch(u){r.value=u instanceof Error?u:new Error(String(u))}},meta:{isSaving:D(t),isRestoring:D(s),error:D(r)}}}export{$ as provideBitStore,Z as useBitArray,R as useBitField,G as useBitForm,te as useBitHistory,ge as useBitPersist,ne as useBitScope,me as useBitSteps,c as useBitStore,ye as useBitUpload,fe as useBitWatch};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +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-history.ts","../../src/vue/use-bit-scope.ts","../../src/vue/use-bit-steps.ts","../../src/vue/use-bit-watch.ts","../../src/vue/use-bit-upload.ts","../../src/vue/use-bit-persist.ts"],"sourcesContent":["import { inject, provide, InjectionKey } from \"vue\";\nimport type { BitFrameworkStore } from \"../core\";\n\n// Chave única para evitar colisões\nexport const BIT_STORE_KEY: InjectionKey<BitFrameworkStore<any>> =\n Symbol(\"BIT_STORE\");\n\nexport function provideBitStore<T extends object>(store: BitFrameworkStore<T>) {\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 BitFrameworkStore<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 const getDirtyValues = () => store.getDirtyValues();\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 onSubmit = (\n handler: (values: T, dirtyValues?: Partial<T>) => Promise<unknown>,\n ) => {\n return (e?: Event) => {\n e?.preventDefault?.();\n submitError.value = null;\n return store.submit(async (values, dirtyValues) => {\n try {\n const result = await handler(values, dirtyValues);\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 const meta = {\n isValid,\n isDirty,\n isSubmitting,\n submitError,\n lastResponse,\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 onSuccess: (values: T, dirtyValues?: Partial<T>) => void | Promise<void>,\n ) => {\n return (e?: Event) => {\n e?.preventDefault?.();\n return store.submit(onSuccess);\n };\n },\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 { computed, onUnmounted, shallowRef } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport { getDeepValue } from \"../core\";\nimport type { UseBitFieldVueMeta, UseBitFieldVueResult } from \"./types\";\n\nexport function useBitField<TValue = any>(\n path: string,\n): UseBitFieldVueResult<TValue> {\n const store = useBitStore<any>();\n\n const resolvedMask = store.resolveMask(path as string);\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 modelValue = 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 rawError = computed(() => state.value.errors[path]);\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 hasError = computed(() => !!rawError.value);\n\n const setValue = (val: any) => {\n modelValue.value = val;\n };\n\n const setBlur = () => store.blurField(path);\n\n const onInput = (val: any) => {\n setValue(val);\n };\n\n const onBlur = () => {\n setBlur();\n };\n\n return {\n // Main handlers and values (flat)\n value: rawValue,\n displayValue,\n modelValue,\n setValue,\n setBlur,\n onInput,\n onBlur,\n // Metadata (grouped)\n meta: {\n error,\n touched,\n invalid,\n isValidating,\n isDirty,\n isHidden,\n isRequired,\n hasError,\n },\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 { computed, onUnmounted, shallowRef } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport type { UseBitHistoryResult } from \"./types\";\n\nexport function useBitHistory<T extends object = any>(): UseBitHistoryResult {\n const store = useBitStore<T>();\n\n const meta = shallowRef(store.getHistoryMetadata());\n\n const unsubscribe = store.subscribe(() => {\n meta.value = store.getHistoryMetadata();\n });\n\n onUnmounted(unsubscribe);\n\n const undo = () => store.undo();\n const redo = () => store.redo();\n\n return {\n canUndo: computed(() => meta.value.canUndo),\n canRedo: computed(() => meta.value.canRedo),\n historyIndex: computed(() => meta.value.historyIndex),\n historySize: computed(() => meta.value.historySize),\n undo,\n redo,\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\";\nimport type { UseBitStepsResult } from \"./types\";\n\nfunction errorsEqual(\n a: Record<string, string>,\n b: Record<string, string>,\n): boolean {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n return keysA.every((k) => a[k] === b[k]);\n}\n\nexport function 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\n const scopeFields = store.getScopeFields(scopeName);\n if (store.hasValidationsInProgress(scopeFields)) {\n return false;\n }\n\n const valid = await store.validate({ scope: scopeName });\n if (valid) {\n stepIndex.value = Math.min(stepIndex.value + 1, scopeNames.length - 1);\n } else {\n const errors = store.getStepErrors(scopeName);\n const pathsWithErrors = Object.keys(errors);\n if (pathsWithErrors.length > 0) {\n store.markFieldsTouched(pathsWithErrors);\n }\n }\n return valid;\n };\n\n const prev = () => {\n 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","/**\n * Vue Composition API for File Upload\n *\n * Minimal upload API integrated with global field validation lifecycle.\n */\n\nimport { computed, ComputedRef } from \"vue\";\nimport { useBitField } from \"./use-bit-field\";\nimport { useBitStore } from \"./context\";\nimport { BitUploadFn, BitDeleteUploadFn } from \"../core\";\nimport type { UseBitUploadResult } from \"./types\";\n\nexport function useBitUpload(\n fieldPath: string,\n uploadFn: BitUploadFn,\n deleteFile?: BitDeleteUploadFn,\n): UseBitUploadResult {\n const store = useBitStore<any>();\n const field = useBitField(fieldPath);\n let uploadKey: string | null = null;\n\n const upload = async (file: File | null | undefined) => {\n if (!file) return;\n\n store.beginFieldValidation(fieldPath);\n await store.clearFieldAsyncError(fieldPath);\n\n try {\n const result = await uploadFn(file);\n\n field.setValue(result.url);\n uploadKey = result.key;\n await store.clearFieldAsyncError(fieldPath);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Upload failed\";\n await store.setFieldAsyncError(fieldPath, message);\n } finally {\n store.endFieldValidation(fieldPath);\n }\n };\n\n const remove = async () => {\n if (uploadKey && deleteFile) {\n try {\n await deleteFile(uploadKey);\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Delete failed\";\n await store.setFieldAsyncError(fieldPath, message);\n return;\n }\n }\n\n field.setValue(null);\n uploadKey = null;\n await store.clearFieldAsyncError(fieldPath);\n };\n\n return {\n value: field.value as ComputedRef<string | File | null>,\n setValue: field.setValue,\n error: computed(() => field.meta.error.value),\n isValidating: computed(() => field.meta.isValidating.value || false),\n upload,\n remove,\n };\n}\n","import { ref, readonly } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport type { UseBitPersistResult } from \"./types\";\n\nexport function useBitPersist<T extends object = any>(): UseBitPersistResult {\n const store = useBitStore<T>();\n const isSaving = ref(false);\n const isRestoring = ref(false);\n const error = ref<Error | null>(null);\n\n const restore = async (): Promise<boolean> => {\n isRestoring.value = true;\n error.value = null;\n\n try {\n return await store.restorePersisted();\n } catch (err) {\n error.value = err instanceof Error ? err : new Error(String(err));\n return false;\n } finally {\n isRestoring.value = false;\n }\n };\n\n const save = async (): Promise<void> => {\n isSaving.value = true;\n error.value = null;\n\n try {\n await store.forceSave();\n } catch (err) {\n error.value = err instanceof Error ? err : new Error(String(err));\n } finally {\n isSaving.value = false;\n }\n };\n\n const clear = async (): Promise<void> => {\n error.value = null;\n\n try {\n await store.clearPersisted();\n } catch (err) {\n error.value = err instanceof Error ? err : new Error(String(err));\n }\n };\n\n return {\n restore,\n save,\n clear,\n meta: {\n isSaving: readonly(isSaving),\n isRestoring: readonly(isRestoring),\n error: readonly(error),\n },\n };\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","getDirtyValues","isValid","computed","isSubmitting","isDirty","onSuccess","e","handler","values","dirtyValues","result","err","isValidationErrorShape","extractServerErrors","computed","onUnmounted","shallowRef","useBitField","path","store","useBitStore","resolvedMask","state","shallowRef","unsubscribe","onUnmounted","rawValue","computed","getDeepValue","displayValue","val","modelValue","rawError","error","touched","invalid","isValidating","isDirty","isHidden","isRequired","hasError","setValue","setBlur","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","computed","onUnmounted","shallowRef","useBitHistory","store","useBitStore","meta","shallowRef","unsubscribe","onUnmounted","undo","redo","computed","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","scopeFields","pathsWithErrors","prev","goTo","targetStep","step","isFirst","isLast","isValid","isDirty","ref","onUnmounted","readonly","useBitWatch","path","store","useBitStore","initialValue","getDeepValue","value","ref","unsubscribe","newValue","deepEqual","onUnmounted","readonly","computed","useBitUpload","fieldPath","uploadFn","deleteFile","store","useBitStore","field","useBitField","uploadKey","upload","file","result","error","message","remove","computed","ref","readonly","useBitPersist","store","useBitStore","isSaving","ref","isRestoring","error","err","readonly"]}
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-history.ts","../../src/vue/use-bit-scope.ts","../../src/vue/use-bit-steps.ts","../../src/vue/use-bit-watch.ts","../../src/vue/use-bit-upload.ts","../../src/vue/use-bit-persist.ts"],"sourcesContent":["import { inject, provide, InjectionKey } from \"vue\";\nimport type { BitStoreApi } from \"../core\";\n\n// Chave única para evitar colisões\nexport const BIT_STORE_KEY: InjectionKey<BitStoreApi<any>> =\n Symbol(\"BIT_STORE\");\n\nexport function provideBitStore<T extends object>(store: BitStoreApi<T>) {\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 BitStoreApi<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({\n isValid: store.getState().isValid,\n isSubmitting: store.getState().isSubmitting,\n isDirty: store.getState().isDirty,\n });\n const submitError = ref<Error | null>(null);\n const lastResponse = ref<unknown>(null);\n\n const unsubscribe = store.subscribeSelector(\n (snapshot) => ({\n isValid: snapshot.isValid,\n isSubmitting: snapshot.isSubmitting,\n isDirty: snapshot.isDirty,\n }),\n (nextState) => {\n state.value = nextState;\n },\n );\n\n onUnmounted(unsubscribe);\n\n const getValues = () => store.getState().values;\n const getErrors = () => store.getState().errors;\n const getTouched = () => store.getState().touched;\n const getDirtyValues = () => store.getDirtyValues();\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 onSubmit = (\n handler: (values: T, dirtyValues?: Partial<T>) => Promise<unknown>,\n ) => {\n return (e?: Event) => {\n e?.preventDefault?.();\n submitError.value = null;\n return store.submit(async (values, dirtyValues) => {\n try {\n const result = await handler(values, dirtyValues);\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 const meta = {\n isValid,\n isDirty,\n isSubmitting,\n submitError,\n lastResponse,\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 onSuccess: (values: T, dirtyValues?: Partial<T>) => void | Promise<void>,\n ) => {\n return (e?: Event) => {\n e?.preventDefault?.();\n return store.submit(onSuccess);\n };\n },\n onSubmit,\n reset,\n replaceValues: store.replaceValues.bind(store),\n hydrate: store.hydrate.bind(store),\n rebase: store.rebase.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 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 { computed, onUnmounted, shallowRef } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport type { UseBitFieldVueResult } from \"./types\";\nimport type { BitPath, BitPathValue } from \"../core\";\n\nexport function useBitField<\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P): UseBitFieldVueResult<BitPathValue<TForm, P>> {\n const store = useBitStore<TForm>();\n\n const resolvedMask = store.resolveMask(path);\n\n const state = shallowRef(store.getFieldState(path));\n\n const unsubscribe = store.subscribeSelector(\n () => store.getFieldState(path),\n (nextState) => {\n state.value = nextState;\n },\n );\n\n onUnmounted(() => {\n unsubscribe();\n if (store.unregisterField) {\n store.unregisterField(path);\n }\n });\n\n const rawValue = computed(() => state.value.value as BitPathValue<TForm, P>);\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) : String(val);\n });\n\n const modelValue = computed({\n get: () => displayValue.value,\n set: (val: string) => {\n if (!resolvedMask) {\n store.setField(path, val as BitPathValue<TForm, P>);\n return;\n }\n\n store.setField(path, resolvedMask.parse(String(val ?? \"\")));\n },\n });\n\n const rawError = computed(() => state.value.error);\n const error = computed(() =>\n state.value.touched ? state.value.error : undefined,\n );\n const touched = computed(() => state.value.touched);\n const invalid = computed(() => !!(touched.value && error.value));\n\n const isValidating = computed(() => state.value.isValidating);\n\n const isDirty = computed(() => state.value.isDirty);\n\n const isHidden = computed(() => state.value.isHidden);\n\n const isRequired = computed(() => state.value.isRequired);\n\n const hasError = computed(() => !!rawError.value);\n\n const setValue = (\n val: BitPathValue<TForm, P> | string | number | null | undefined,\n ) => {\n if (!resolvedMask) {\n store.setField(path, val as BitPathValue<TForm, P>);\n return;\n }\n\n modelValue.value = String(val ?? \"\");\n };\n\n const setBlur = () => store.blurField(path);\n\n const onInput = (\n val: BitPathValue<TForm, P> | string | number | null | undefined,\n ) => {\n setValue(val);\n };\n\n const onBlur = () => {\n setBlur();\n };\n\n return {\n // Main handlers and values (flat)\n value: rawValue,\n displayValue,\n modelValue,\n setValue,\n setBlur,\n onInput,\n onBlur,\n // Metadata (grouped)\n meta: {\n error,\n touched,\n invalid,\n isValidating,\n isDirty,\n isHidden,\n isRequired,\n hasError,\n },\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(store.getState().values, path as string) as\n | BitPathValue<TForm, P>\n | 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.subscribePath(path, (newValues) => {\n const nextValues = (Array.isArray(newValues) ? newValues : []) as Item[];\n\n values.value = [...nextValues];\n\n if (nextValues.length !== ids.value.length) {\n const currentIds = [...ids.value];\n if (nextValues.length > currentIds.length) {\n const diff = nextValues.length - currentIds.length;\n const newIds = Array.from({ length: diff }, generateId);\n ids.value = [...currentIds, ...newIds];\n } else {\n ids.value = currentIds.slice(0, nextValues.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(\n path as unknown as BitPath<TForm>,\n items as unknown as BitPathValue<TForm, BitPath<TForm>>,\n );\n },\n clear: () => {\n ids.value = [];\n store.setField(\n path as unknown as BitPath<TForm>,\n [] as unknown as BitPathValue<TForm, BitPath<TForm>>,\n );\n },\n };\n}\n","import { computed, onUnmounted, shallowRef } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport type { UseBitHistoryResult } from \"./types\";\n\nexport function useBitHistory<T extends object = any>(): UseBitHistoryResult {\n const store = useBitStore<T>();\n\n const meta = shallowRef(store.getHistoryMetadata());\n\n const unsubscribe = store.subscribe(() => {\n meta.value = store.getHistoryMetadata();\n });\n\n onUnmounted(unsubscribe);\n\n const undo = () => store.undo();\n const redo = () => store.redo();\n\n return {\n canUndo: computed(() => meta.value.canUndo),\n canRedo: computed(() => meta.value.canRedo),\n historyIndex: computed(() => meta.value.historyIndex),\n historySize: computed(() => meta.value.historySize),\n undo,\n redo,\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\";\nimport type { UseBitStepsResult } from \"./types\";\n\nfunction errorsEqual(\n a: Record<string, string>,\n b: Record<string, string>,\n): boolean {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n return keysA.every((k) => a[k] === b[k]);\n}\n\nexport function 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\n const scopeFields = store.getScopeFields(scopeName);\n if (store.hasValidationsInProgress(scopeFields)) {\n return false;\n }\n\n const valid = await store.validate({ scope: scopeName });\n if (valid) {\n stepIndex.value = Math.min(stepIndex.value + 1, scopeNames.length - 1);\n } else {\n const errors = store.getStepErrors(scopeName);\n const pathsWithErrors = Object.keys(errors);\n if (pathsWithErrors.length > 0) {\n store.markFieldsTouched(pathsWithErrors);\n }\n }\n return valid;\n };\n\n const prev = () => {\n 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","/**\n * Vue Composition API for File Upload\n *\n * Minimal upload API integrated with global field validation lifecycle.\n */\n\nimport { computed, ComputedRef } from \"vue\";\nimport { useBitField } from \"./use-bit-field\";\nimport { useBitStore } from \"./context\";\nimport { BitUploadFn, BitDeleteUploadFn } from \"../core\";\nimport type { UseBitUploadResult } from \"./types\";\n\nexport function useBitUpload(\n fieldPath: string,\n uploadFn: BitUploadFn,\n deleteFile?: BitDeleteUploadFn,\n): UseBitUploadResult {\n const store = useBitStore<any>();\n const field = useBitField(fieldPath);\n let uploadKey: string | null = null;\n\n const upload = async (file: File | null | undefined) => {\n if (!file) return;\n\n store.beginFieldValidation(fieldPath);\n await store.clearFieldAsyncError(fieldPath);\n\n try {\n const result = await uploadFn(file);\n\n field.setValue(result.url);\n uploadKey = result.key;\n await store.clearFieldAsyncError(fieldPath);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Upload failed\";\n await store.setFieldAsyncError(fieldPath, message);\n } finally {\n store.endFieldValidation(fieldPath);\n }\n };\n\n const remove = async () => {\n if (uploadKey && deleteFile) {\n try {\n await deleteFile(uploadKey);\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Delete failed\";\n await store.setFieldAsyncError(fieldPath, message);\n return;\n }\n }\n\n field.setValue(null);\n uploadKey = null;\n await store.clearFieldAsyncError(fieldPath);\n };\n\n return {\n value: field.value as ComputedRef<string | File | null>,\n setValue: field.setValue,\n error: computed(() => field.meta.error.value),\n isValidating: computed(() => field.meta.isValidating.value || false),\n upload,\n remove,\n };\n}\n","import { ref, readonly } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport type { UseBitPersistResult } from \"./types\";\n\nexport function useBitPersist<T extends object = any>(): UseBitPersistResult {\n const store = useBitStore<T>();\n const isSaving = ref(false);\n const isRestoring = ref(false);\n const error = ref<Error | null>(null);\n\n const restore = async (): Promise<boolean> => {\n isRestoring.value = true;\n error.value = null;\n\n try {\n return await store.restorePersisted();\n } catch (err) {\n error.value = err instanceof Error ? err : new Error(String(err));\n return false;\n } finally {\n isRestoring.value = false;\n }\n };\n\n const save = async (): Promise<void> => {\n isSaving.value = true;\n error.value = null;\n\n try {\n await store.forceSave();\n } catch (err) {\n error.value = err instanceof Error ? err : new Error(String(err));\n } finally {\n isSaving.value = false;\n }\n };\n\n const clear = async (): Promise<void> => {\n error.value = null;\n\n try {\n await store.clearPersisted();\n } catch (err) {\n error.value = err instanceof Error ? err : new Error(String(err));\n }\n };\n\n return {\n restore,\n save,\n clear,\n meta: {\n isSaving: readonly(isSaving),\n isRestoring: readonly(isRestoring),\n error: readonly(error),\n },\n };\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","snapshot","nextState","onUnmounted","getValues","getErrors","getTouched","getDirtyValues","isValid","computed","isSubmitting","isDirty","onSuccess","e","handler","values","dirtyValues","result","err","isValidationErrorShape","extractServerErrors","computed","onUnmounted","shallowRef","useBitField","path","store","useBitStore","resolvedMask","state","shallowRef","unsubscribe","nextState","onUnmounted","rawValue","computed","displayValue","val","modelValue","rawError","error","touched","invalid","isValidating","isDirty","isHidden","isRequired","hasError","setValue","setBlur","ref","computed","onUnmounted","generateId","useBitArray","path","store","useBitStore","initialValues","val","getDeepValue","values","ref","ids","unsubscribe","newValues","nextValues","currentIds","diff","newIds","onUnmounted","fields","computed","v","i","length","index","from","to","id","a","b","items","computed","onUnmounted","shallowRef","useBitHistory","store","useBitStore","meta","shallowRef","unsubscribe","onUnmounted","undo","redo","computed","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","scopeFields","pathsWithErrors","prev","goTo","targetStep","step","isFirst","isLast","isValid","isDirty","ref","onUnmounted","readonly","useBitWatch","path","store","useBitStore","initialValue","getDeepValue","value","ref","unsubscribe","newValue","deepEqual","onUnmounted","readonly","computed","useBitUpload","fieldPath","uploadFn","deleteFile","store","useBitStore","field","useBitField","uploadKey","upload","file","result","error","message","remove","computed","ref","readonly","useBitPersist","store","useBitStore","isSaving","ref","isRestoring","error","err","readonly"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lehnihon/bit-form",
3
- "version": "2.2.0",
3
+ "version": "2.2.1",
4
4
  "description": "Gerenciamento de estado de formulários agnóstico e performático",
5
5
  "publishConfig": {
6
6
  "access": "public"