@lehnihon/bit-form 2.2.6 → 2.2.8

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 (177) hide show
  1. package/README.md +80 -24
  2. package/dist/angular/index.cjs +1 -1
  3. package/dist/angular/index.cjs.map +1 -1
  4. package/dist/angular/index.d.cts +20 -20
  5. package/dist/angular/index.d.ts +20 -20
  6. package/dist/angular/index.js +1 -1
  7. package/dist/angular/index.js.map +1 -1
  8. package/dist/array-controller-B5bfXV1W.d.cts +23 -0
  9. package/dist/array-controller-Cx-DMH7Y.d.ts +23 -0
  10. package/dist/bus-B2VEKrPI.d.ts +19 -0
  11. package/dist/bus-ZLQeq4Vr.d.cts +19 -0
  12. package/dist/chunk-5NA2TFPG.js +1 -0
  13. package/dist/chunk-5NA2TFPG.js.map +1 -0
  14. package/dist/chunk-63OJBMKK.js +2 -0
  15. package/dist/chunk-63OJBMKK.js.map +1 -0
  16. package/dist/chunk-BSGJ3T5S.cjs +2 -0
  17. package/dist/chunk-BSGJ3T5S.cjs.map +1 -0
  18. package/dist/chunk-CPP7ELA5.js +2 -0
  19. package/dist/chunk-CPP7ELA5.js.map +1 -0
  20. package/dist/chunk-D7JQWF6V.cjs +2 -0
  21. package/dist/chunk-D7JQWF6V.cjs.map +1 -0
  22. package/dist/chunk-E2NZR44P.js +2 -0
  23. package/dist/chunk-E2NZR44P.js.map +1 -0
  24. package/dist/chunk-EQ55DKX2.js +2 -0
  25. package/dist/chunk-EQ55DKX2.js.map +1 -0
  26. package/dist/chunk-IV32WXCF.cjs +2 -0
  27. package/dist/chunk-IV32WXCF.cjs.map +1 -0
  28. package/dist/chunk-JC4R5WCC.js +2 -0
  29. package/dist/chunk-JC4R5WCC.js.map +1 -0
  30. package/dist/chunk-K5X37E3U.js +2 -0
  31. package/dist/chunk-K5X37E3U.js.map +1 -0
  32. package/dist/chunk-M6WBNHIT.cjs +2 -0
  33. package/dist/chunk-M6WBNHIT.cjs.map +1 -0
  34. package/dist/chunk-MFSQATNZ.cjs +2 -0
  35. package/dist/chunk-MFSQATNZ.cjs.map +1 -0
  36. package/dist/chunk-MFTWAFMG.cjs +2 -0
  37. package/dist/chunk-MFTWAFMG.cjs.map +1 -0
  38. package/dist/chunk-O5UPA33R.js +2 -0
  39. package/dist/chunk-O5UPA33R.js.map +1 -0
  40. package/dist/chunk-P2YWYBWG.cjs +2 -0
  41. package/dist/chunk-P2YWYBWG.cjs.map +1 -0
  42. package/dist/chunk-QKGTVKBU.cjs +2 -0
  43. package/dist/chunk-QKGTVKBU.cjs.map +1 -0
  44. package/dist/chunk-RD73EBSN.js +2 -0
  45. package/dist/chunk-RD73EBSN.js.map +1 -0
  46. package/dist/chunk-T2JRSWQU.cjs +2 -0
  47. package/dist/chunk-T2JRSWQU.cjs.map +1 -0
  48. package/dist/chunk-UQ3DSUWC.js +2 -0
  49. package/dist/chunk-UQ3DSUWC.js.map +1 -0
  50. package/dist/chunk-VZHG372Q.cjs +2 -0
  51. package/dist/chunk-VZHG372Q.cjs.map +1 -0
  52. package/dist/chunk-W2E5UIXT.js +2 -0
  53. package/dist/chunk-W2E5UIXT.js.map +1 -0
  54. package/dist/chunk-W5CLDRRE.cjs +1 -0
  55. package/dist/chunk-W5CLDRRE.cjs.map +1 -0
  56. package/dist/cli/index.cjs +22 -22
  57. package/dist/core/bindings.cjs +2 -0
  58. package/dist/core/bindings.cjs.map +1 -0
  59. package/dist/core/bindings.d.cts +81 -0
  60. package/dist/core/bindings.d.ts +81 -0
  61. package/dist/core/bindings.js +2 -0
  62. package/dist/core/bindings.js.map +1 -0
  63. package/dist/core/status.cjs +2 -0
  64. package/dist/core/status.cjs.map +1 -0
  65. package/dist/core/status.d.cts +44 -0
  66. package/dist/core/status.d.ts +44 -0
  67. package/dist/core/status.js +2 -0
  68. package/dist/core/status.js.map +1 -0
  69. package/dist/core/store.cjs +2 -0
  70. package/dist/core/store.cjs.map +1 -0
  71. package/dist/core/store.d.cts +84 -0
  72. package/dist/core/store.d.ts +84 -0
  73. package/dist/core/store.js +2 -0
  74. package/dist/core/store.js.map +1 -0
  75. package/dist/core/utils.cjs +2 -0
  76. package/dist/core/utils.cjs.map +1 -0
  77. package/dist/core/utils.d.cts +81 -0
  78. package/dist/core/utils.d.ts +81 -0
  79. package/dist/core/utils.js +2 -0
  80. package/dist/core/utils.js.map +1 -0
  81. package/dist/core.cjs +2 -0
  82. package/dist/core.cjs.map +1 -0
  83. package/dist/core.d.cts +14 -0
  84. package/dist/core.d.ts +14 -0
  85. package/dist/core.js +2 -0
  86. package/dist/core.js.map +1 -0
  87. package/dist/devtools/bridge.cjs +1 -1
  88. package/dist/devtools/bridge.cjs.map +1 -1
  89. package/dist/devtools/bridge.d.cts +5 -1
  90. package/dist/devtools/bridge.d.ts +5 -1
  91. package/dist/devtools/bridge.js +1 -1
  92. package/dist/devtools/bridge.js.map +1 -1
  93. package/dist/devtools/index.cjs +18 -18
  94. package/dist/devtools/index.cjs.map +1 -1
  95. package/dist/devtools/index.d.cts +27 -2
  96. package/dist/devtools/index.d.ts +27 -2
  97. package/dist/devtools/index.js +18 -18
  98. package/dist/devtools/index.js.map +1 -1
  99. package/dist/devtools/protocol.cjs +2 -0
  100. package/dist/devtools/protocol.cjs.map +1 -0
  101. package/dist/devtools/protocol.d.cts +54 -0
  102. package/dist/devtools/protocol.d.ts +54 -0
  103. package/dist/devtools/protocol.js +2 -0
  104. package/dist/devtools/protocol.js.map +1 -0
  105. package/dist/field-binding-B_OX3bjp.d.cts +25 -0
  106. package/dist/field-binding-MX6jVQbT.d.ts +25 -0
  107. package/dist/index.cjs +1 -1
  108. package/dist/index.cjs.map +1 -1
  109. package/dist/index.d.cts +9 -193
  110. package/dist/index.d.ts +9 -193
  111. package/dist/index.js +1 -1
  112. package/dist/meta-types-Bzmm21TP.d.cts +18 -0
  113. package/dist/meta-types-Bzmm21TP.d.ts +18 -0
  114. package/dist/react/index.cjs +1 -1
  115. package/dist/react/index.cjs.map +1 -1
  116. package/dist/react/index.d.cts +10 -7
  117. package/dist/react/index.d.ts +10 -7
  118. package/dist/react/index.js +1 -1
  119. package/dist/react/index.js.map +1 -1
  120. package/dist/react-native/index.cjs +1 -1
  121. package/dist/react-native/index.cjs.map +1 -1
  122. package/dist/react-native/index.d.cts +8 -5
  123. package/dist/react-native/index.d.ts +8 -5
  124. package/dist/react-native/index.js +1 -1
  125. package/dist/react-native/index.js.map +1 -1
  126. package/dist/resolvers/index.cjs +1 -1
  127. package/dist/resolvers/index.cjs.map +1 -1
  128. package/dist/resolvers/index.d.cts +2 -1
  129. package/dist/resolvers/index.d.ts +2 -1
  130. package/dist/resolvers/index.js +1 -1
  131. package/dist/resolvers/joi.d.cts +2 -1
  132. package/dist/resolvers/joi.d.ts +2 -1
  133. package/dist/resolvers/yup.d.cts +2 -1
  134. package/dist/resolvers/yup.d.ts +2 -1
  135. package/dist/resolvers/zod.d.cts +2 -1
  136. package/dist/resolvers/zod.d.ts +2 -1
  137. package/dist/store-api-types-D-ZHxzRy.d.cts +161 -0
  138. package/dist/store-api-types-DPi30jQF.d.ts +161 -0
  139. package/dist/{bus-B4zZmB9C.d.ts → types-CG5nYeRk.d.ts} +140 -41
  140. package/dist/{bus-BeAeZwWu.d.cts → types-D6LhF5GC.d.cts} +140 -41
  141. package/dist/{upload-EXnJLq8k.d.cts → upload-C2mpfhp1.d.cts} +1 -1
  142. package/dist/{upload-EXnJLq8k.d.ts → upload-C2mpfhp1.d.ts} +1 -1
  143. package/dist/{use-bit-persist-Dk3fUrds.d.ts → use-bit-persist-BTwy8kvA.d.ts} +14 -14
  144. package/dist/{use-bit-persist-D_gimC9A.d.cts → use-bit-persist-C2LHNTVv.d.cts} +14 -14
  145. package/dist/utils.cjs +2 -0
  146. package/dist/utils.cjs.map +1 -0
  147. package/dist/utils.d.cts +6 -0
  148. package/dist/utils.d.ts +6 -0
  149. package/dist/utils.js +2 -0
  150. package/dist/utils.js.map +1 -0
  151. package/dist/vue/index.cjs +1 -1
  152. package/dist/vue/index.cjs.map +1 -1
  153. package/dist/vue/index.d.cts +17 -18
  154. package/dist/vue/index.d.ts +17 -18
  155. package/dist/vue/index.js +1 -1
  156. package/dist/vue/index.js.map +1 -1
  157. package/package.json +48 -17
  158. package/dist/chunk-2CVKNPWX.js +0 -2
  159. package/dist/chunk-2CVKNPWX.js.map +0 -1
  160. package/dist/chunk-3EDD3V43.cjs +0 -2
  161. package/dist/chunk-3EDD3V43.cjs.map +0 -1
  162. package/dist/chunk-PX6WKENM.js +0 -2
  163. package/dist/chunk-PX6WKENM.js.map +0 -1
  164. package/dist/chunk-QWH2NBVB.js +0 -2
  165. package/dist/chunk-QWH2NBVB.js.map +0 -1
  166. package/dist/chunk-T3FR7D5V.js +0 -2
  167. package/dist/chunk-T3FR7D5V.js.map +0 -1
  168. package/dist/chunk-VQ7MK5VB.cjs +0 -2
  169. package/dist/chunk-VQ7MK5VB.cjs.map +0 -1
  170. package/dist/chunk-Y2ONHDRE.cjs +0 -2
  171. package/dist/chunk-Y2ONHDRE.cjs.map +0 -1
  172. package/dist/chunk-YCSWULEN.cjs +0 -2
  173. package/dist/chunk-YCSWULEN.cjs.map +0 -1
  174. package/dist/field-binding-BXw0Ku2c.d.cts +0 -12
  175. package/dist/field-binding-BXw0Ku2c.d.ts +0 -12
  176. package/dist/public-types-Cd9ai20P.d.cts +0 -97
  177. package/dist/public-types-DdZxD6Op.d.ts +0 -97
@@ -1,12 +1,65 @@
1
1
  import { B as BitMask, a as BitMaskName } from './types-D8DgIUhJ.cjs';
2
2
 
3
+ interface BitBusStorePort<T extends object = object> {
4
+ getState: () => Readonly<BitState<T>>;
5
+ getHistoryMetadata: () => {
6
+ canUndo: boolean;
7
+ canRedo: boolean;
8
+ historySize: number;
9
+ historyIndex: number;
10
+ };
11
+ undo: () => void;
12
+ redo: () => void;
13
+ reset: () => void;
14
+ }
15
+ type BitBusListener<T extends object = object> = (storeId: string, newState: BitState<T>) => void;
16
+ interface BitFormGlobal {
17
+ stores: Record<string, BitBusStorePort<object>>;
18
+ listeners: Set<BitBusListener>;
19
+ dispatch: (storeId: string, state: BitState<object>) => void;
20
+ subscribe: (fn: BitBusListener) => () => void;
21
+ }
22
+ /** Alias for {@link BitFormGlobal}. Prefer this name in user-facing APIs. */
23
+ type BitBus = BitFormGlobal;
24
+
25
+ /**
26
+ * Pluggable scheduler used for validation debounce.
27
+ * Replace the default (setTimeout-based) with a framework-aware scheduler
28
+ * to integrate with React's concurrent mode, Vue's nextTick, etc.
29
+ *
30
+ * @example
31
+ * // React concurrent mode integration:
32
+ * const scheduler: BitScheduler = {
33
+ * schedule: (fn, delay) => {
34
+ * const id = setTimeout(() => startTransition(fn), delay);
35
+ * return () => clearTimeout(id);
36
+ * },
37
+ * };
38
+ */
39
+ interface BitScheduler {
40
+ /**
41
+ * Schedule `fn` to run after `delayMs` milliseconds.
42
+ * Must return a cleanup function that cancels the scheduled call.
43
+ */
44
+ schedule(fn: () => void, delayMs: number): () => void;
45
+ }
3
46
  type DeepPartial<T> = T extends object ? {
4
47
  [P in keyof T]?: DeepPartial<T[P]>;
5
48
  } : T;
6
49
  type BitErrors<T extends object> = Partial<Record<BitPath<T>, string | undefined>>;
7
50
  type BitTouched<T extends object> = Partial<Record<BitPath<T>, boolean | undefined>>;
8
- type BitComputedFn<T> = (values: T) => any;
9
- type BitTransformFn<T> = (value: any, allValues: T) => any;
51
+ type BitBivariantFn<TArgs extends unknown[], TResult> = {
52
+ bivarianceHack(...args: TArgs): TResult;
53
+ }["bivarianceHack"];
54
+ type BitComputedFn<T> = (values: T) => unknown;
55
+ type BitNormalizeFn<T> = BitBivariantFn<[
56
+ value: unknown,
57
+ allValues: T
58
+ ], unknown>;
59
+ type BitTransformFn<T> = BitBivariantFn<[
60
+ value: unknown,
61
+ allValues: T
62
+ ], unknown>;
10
63
  interface BitPersistMetadata {
11
64
  isSaving: boolean;
12
65
  isRestoring: boolean;
@@ -29,7 +82,7 @@ interface BitState<T extends object> {
29
82
  isSubmitting: boolean;
30
83
  isDirty: boolean;
31
84
  }
32
- interface BitFieldState<T extends object = any, TValue = unknown> {
85
+ interface BitFieldState<T extends object = Record<string, unknown>, TValue = unknown> {
33
86
  value: TValue;
34
87
  error: string | undefined;
35
88
  touched: boolean;
@@ -42,7 +95,7 @@ type ValidatorFn<T extends object> = (values: T, options?: {
42
95
  scopeFields?: string[];
43
96
  }) => Promise<BitErrors<T>> | BitErrors<T>;
44
97
  /** Conditional logic: visibility and dynamic required. */
45
- interface BitFieldConditional<T extends object = any> {
98
+ interface BitFieldConditional<T extends object = Record<string, unknown>> {
46
99
  dependsOn?: string[];
47
100
  showIf?: (values: T) => boolean;
48
101
  requiredIf?: (values: T) => boolean;
@@ -50,23 +103,42 @@ interface BitFieldConditional<T extends object = any> {
50
103
  requiredMessage?: string;
51
104
  }
52
105
  /** Field-level validation: async validation only. */
53
- interface BitFieldValidation<T extends object = any> {
54
- asyncValidate?: (value: any, values: T) => Promise<string | null | undefined>;
106
+ interface BitFieldValidation<T extends object = Record<string, unknown>> {
107
+ /**
108
+ * Breaking change: async validation now defaults to `blur` instead of eager `change`.
109
+ * `validate()`/submit still execute async validators for the targeted fields.
110
+ */
111
+ asyncValidateOn?: "change" | "blur";
112
+ asyncValidate?: BitBivariantFn<[
113
+ value: unknown,
114
+ values: T
115
+ ], Promise<string | null | undefined>>;
55
116
  asyncValidateDelay?: number;
56
117
  }
57
- /** Full field definition: conditional, validation, transform, computed, mask, scope. */
58
- interface BitFieldDefinition<T extends object = any> {
118
+ interface BitFieldDefinitionBase<T extends object = Record<string, unknown>> {
59
119
  conditional?: BitFieldConditional<T>;
60
120
  validation?: BitFieldValidation<T>;
121
+ normalize?: BitNormalizeFn<T>;
122
+ /**
123
+ * Optional explicit dependencies for normalize re-evaluation.
124
+ * Defaults to the field own path when omitted.
125
+ */
126
+ normalizeDependsOn?: string[];
61
127
  transform?: BitTransformFn<T>;
62
- computed?: BitComputedFn<T>;
63
- /** Explicit dependencies for computed optimization. Falls back to conditional.dependsOn when omitted. */
64
- computedDependsOn?: string[];
65
128
  /** Mask name (built-in or custom registry key) or BitMask instance. */
66
129
  mask?: BitMask | BitMaskName;
67
130
  /** Scope name (e.g. wizard step). */
68
131
  scope?: string;
69
132
  }
133
+ /** Full field definition: conditional, validation, transform, computed, mask, scope. */
134
+ type BitFieldDefinition<T extends object = Record<string, unknown>> = (BitFieldDefinitionBase<T> & {
135
+ computed?: undefined;
136
+ computedDependsOn?: never;
137
+ }) | (BitFieldDefinitionBase<T> & {
138
+ computed: BitComputedFn<T>;
139
+ /** Explicit dependencies are mandatory in v4 for deterministic computed scheduling. */
140
+ computedDependsOn: string[];
141
+ });
70
142
  interface DevToolsOptions {
71
143
  enabled?: boolean;
72
144
  mode?: "local" | "remote";
@@ -74,7 +146,7 @@ interface DevToolsOptions {
74
146
  }
75
147
  type BitPluginHookSource = "beforeValidate" | "afterValidate" | "beforeSubmit" | "afterSubmit" | "onFieldChange" | "setup" | "teardown" | "submit";
76
148
  type BitFieldChangeOrigin = "setField" | "rebase" | "replaceValues" | "hydrate" | "array";
77
- type BitArrayOperation = "push" | "prepend" | "insert" | "remove" | "move" | "swap";
149
+ type BitArrayOperation = "push" | "prepend" | "insert" | "remove" | "move" | "swap" | "replace" | "clear";
78
150
  interface BitFieldChangeMeta {
79
151
  origin: BitFieldChangeOrigin;
80
152
  operation?: BitArrayOperation;
@@ -82,7 +154,7 @@ interface BitFieldChangeMeta {
82
154
  from?: number;
83
155
  to?: number;
84
156
  }
85
- interface BitFieldChangeEvent<T extends object = any> {
157
+ interface BitFieldChangeEvent<T extends object = Record<string, unknown>> {
86
158
  path: string;
87
159
  previousValue: unknown;
88
160
  nextValue: unknown;
@@ -90,13 +162,13 @@ interface BitFieldChangeEvent<T extends object = any> {
90
162
  state: Readonly<BitState<T>>;
91
163
  meta: BitFieldChangeMeta;
92
164
  }
93
- interface BitBeforeValidateEvent<T extends object = any> {
165
+ interface BitBeforeValidateEvent<T extends object = Record<string, unknown>> {
94
166
  values: Readonly<T>;
95
167
  state: Readonly<BitState<T>>;
96
168
  scope?: string;
97
169
  scopeFields?: string[];
98
170
  }
99
- interface BitAfterValidateEvent<T extends object = any> {
171
+ interface BitAfterValidateEvent<T extends object = Record<string, unknown>> {
100
172
  values: Readonly<T>;
101
173
  state: Readonly<BitState<T>>;
102
174
  scope?: string;
@@ -105,12 +177,12 @@ interface BitAfterValidateEvent<T extends object = any> {
105
177
  result: boolean;
106
178
  aborted?: boolean;
107
179
  }
108
- interface BitBeforeSubmitEvent<T extends object = any> {
180
+ interface BitBeforeSubmitEvent<T extends object = Record<string, unknown>> {
109
181
  values: Readonly<T>;
110
182
  dirtyValues: Readonly<Partial<T>>;
111
183
  state: Readonly<BitState<T>>;
112
184
  }
113
- interface BitAfterSubmitEvent<T extends object = any> {
185
+ interface BitAfterSubmitEvent<T extends object = Record<string, unknown>> {
114
186
  values: Readonly<T>;
115
187
  dirtyValues: Readonly<Partial<T>>;
116
188
  state: Readonly<BitState<T>>;
@@ -118,7 +190,7 @@ interface BitAfterSubmitEvent<T extends object = any> {
118
190
  error?: unknown;
119
191
  invalid?: boolean;
120
192
  }
121
- interface BitPluginErrorEvent<T extends object = any> {
193
+ interface BitPluginErrorEvent<T extends object = Record<string, unknown>> {
122
194
  source: BitPluginHookSource;
123
195
  pluginName?: string;
124
196
  error: unknown;
@@ -126,12 +198,12 @@ interface BitPluginErrorEvent<T extends object = any> {
126
198
  values: Readonly<T>;
127
199
  state: Readonly<BitState<T>>;
128
200
  }
129
- interface BitPluginContext<T extends object = any> {
201
+ interface BitPluginContext<T extends object = Record<string, unknown>> {
130
202
  storeId: string;
131
203
  getState: () => Readonly<BitState<T>>;
132
204
  getConfig: () => Readonly<BitConfig<T>>;
133
205
  }
134
- interface BitPluginHooks<T extends object = any> {
206
+ interface BitPluginHooks<T extends object = Record<string, unknown>> {
135
207
  beforeValidate?: (event: BitBeforeValidateEvent<T>, context: BitPluginContext<T>) => BitMaybePromise<void>;
136
208
  afterValidate?: (event: BitAfterValidateEvent<T>, context: BitPluginContext<T>) => BitMaybePromise<void>;
137
209
  beforeSubmit?: (event: BitBeforeSubmitEvent<T>, context: BitPluginContext<T>) => BitMaybePromise<void>;
@@ -139,7 +211,7 @@ interface BitPluginHooks<T extends object = any> {
139
211
  onFieldChange?: (event: BitFieldChangeEvent<T>, context: BitPluginContext<T>) => BitMaybePromise<void>;
140
212
  onError?: (event: BitPluginErrorEvent<T>, context: BitPluginContext<T>) => BitMaybePromise<void>;
141
213
  }
142
- interface BitPlugin<T extends object = any> {
214
+ interface BitPlugin<T extends object = Record<string, unknown>> {
143
215
  name: string;
144
216
  setup?: (context: BitPluginContext<T>) => void | (() => void);
145
217
  hooks?: BitPluginHooks<T>;
@@ -151,7 +223,7 @@ interface BitPersistStorageAdapter {
151
223
  removeItem(key: string): BitMaybePromise<void>;
152
224
  }
153
225
  type BitPersistMode = "values" | "dirtyValues";
154
- interface BitPersistConfig<T extends object = any> {
226
+ interface BitPersistConfig<T extends object = Record<string, unknown>> {
155
227
  enabled?: boolean;
156
228
  key?: string;
157
229
  storage?: BitPersistStorageAdapter;
@@ -162,7 +234,7 @@ interface BitPersistConfig<T extends object = any> {
162
234
  deserialize?: (raw: string) => Partial<T>;
163
235
  onError?: (error: unknown) => void;
164
236
  }
165
- interface BitPersistResolvedConfig<T extends object = any> {
237
+ interface BitPersistResolvedConfig<T extends object = Record<string, unknown>> {
166
238
  enabled: boolean;
167
239
  key: string;
168
240
  storage?: BitPersistStorageAdapter;
@@ -181,13 +253,17 @@ interface BitValidationConfig<T extends object> {
181
253
  /** History config. */
182
254
  interface BitHistoryConfig {
183
255
  enabled?: boolean;
256
+ /**
257
+ * Maximum number of undo/redo steps to retain.
258
+ * @default 50
259
+ */
184
260
  limit?: number;
185
261
  }
186
262
  /**
187
263
  * BitConfig - store configuration.
188
264
  * @see CHANGELOG for migration from features to fields in 2.0.
189
265
  */
190
- interface BitConfig<T extends object = any> {
266
+ interface BitConfig<T extends object = Record<string, unknown>> {
191
267
  /** Core */
192
268
  name?: string;
193
269
  storeId?: string;
@@ -206,14 +282,50 @@ interface BitConfig<T extends object = any> {
206
282
  persist?: BitPersistConfig<T>;
207
283
  /** Plugins de lifecycle (observabilidade) */
208
284
  plugins?: BitPlugin<T>[];
285
+ /**
286
+ * Maximum number of entries for internal subscription path caches.
287
+ * Lower = less memory; higher = fewer cache evictions in large dynamic forms.
288
+ * @default 500
289
+ */
290
+ subscriptionCacheSize?: number;
291
+ /**
292
+ * Pluggable scheduler for validation debounce.
293
+ * Defaults to a `setTimeout`-based scheduler.
294
+ * Inject a framework-aware scheduler (e.g. React `startTransition`) for
295
+ * better integration with concurrent rendering.
296
+ */
297
+ scheduler?: BitScheduler;
298
+ /**
299
+ * Custom bus instance for DevTools/observability. When omitted, the
300
+ * shared browser-global bus (`bitBus`) is used — suitable for most apps.
301
+ * Pass a `createBitBus()` instance when running in SSR/Edge environments
302
+ * where a global singleton is unsafe (e.g. Next.js Edge Runtime).
303
+ */
304
+ bus?: BitFormGlobal;
305
+ /**
306
+ * Handler opcional para erros operacionais não tratados internamente.
307
+ * Se não informado, o runtime usa fallback para `console.error`.
308
+ */
309
+ onUnhandledError?: (error: unknown, source: "submit" | "validation" | "persist") => void;
209
310
  }
210
- /** Return type of BitStore.getStepStatus, used by useBitScope/injectBitScope. */
311
+ type BitSubmitResult = {
312
+ status: "submitted";
313
+ } | {
314
+ status: "invalid";
315
+ } | {
316
+ status: "failed";
317
+ error: unknown;
318
+ } | {
319
+ status: "blocked";
320
+ reason: "isSubmitting" | "validating";
321
+ };
322
+ /** Return type of BitStore.getScopeStatus, used by useBitScope/injectBitScope. */
211
323
  interface ScopeStatus {
212
324
  hasErrors: boolean;
213
325
  isDirty: boolean;
214
326
  errors: Record<string, string>;
215
327
  }
216
- /** Return type of validateStep, used by useBitScope/injectBitScope. */
328
+ /** Return type of scope validation helpers, used by useBitScope/injectBitScope. */
217
329
  interface ValidateScopeResult {
218
330
  valid: boolean;
219
331
  errors: Record<string, string>;
@@ -228,20 +340,7 @@ type BitPath<T, Prefix extends string = ""> = T extends Primitive ? never : T ex
228
340
  [K in keyof T & (string | number)]: T[K] extends Primitive ? Prefix extends "" ? `${K & (string | number)}` : `${Prefix}.${K & (string | number)}` : Prefix extends "" ? `${K & (string | number)}` | `${K & (string | number)}.${BitPath<T[K]>}` : `${Prefix}.${K & (string | number)}` | `${Prefix}.${K & (string | number)}.${BitPath<T[K]>}`;
229
341
  }[keyof T & (string | number)];
230
342
  type BitPathValue<T, P extends string> = P extends `${infer K}.${infer Rest}` ? K extends `${number}` ? T extends readonly (infer U)[] ? BitPathValue<U, Rest> : never : K extends keyof T ? BitPathValue<T[K], Rest> : never : P extends `${number}` ? T extends readonly (infer U)[] ? U : never : P extends keyof T ? T[P] : never;
231
- type BitArrayPath<T> = BitPath<T> extends infer P ? P extends string ? BitPathValue<T, P> extends readonly any[] ? P : never : never : never;
343
+ type BitArrayPath<T> = BitPath<T> extends infer P ? P extends string ? BitPathValue<T, P> extends readonly unknown[] ? P : never : never : never;
232
344
  type BitArrayItem<A> = A extends readonly (infer U)[] ? U : A extends (infer U)[] ? U : never;
233
345
 
234
- type BitBusListener<T extends object = any> = (storeId: string, newState: BitState<T>) => void;
235
- interface BitFormGlobal {
236
- stores: Record<string, unknown>;
237
- listeners: Set<BitBusListener>;
238
- dispatch: (storeId: string, state: BitState<any>) => void;
239
- subscribe: (fn: BitBusListener) => () => void;
240
- }
241
-
242
- declare global {
243
- var __BIT_FORM__: BitFormGlobal | undefined;
244
- }
245
- declare const bitBus: BitFormGlobal;
246
-
247
- export { type BitPersistMode as A, type BitConfig as B, type BitPersistStorageAdapter as C, type DevToolsOptions as D, type BitPluginContext as E, type BitPluginErrorEvent as F, type BitPluginHooks as G, type BitTouched as H, type BitValidationConfig as I, bitBus as J, type ScopeStatus as S, type ValidatorFn as V, type BitFieldDefinition as a, type BitPersistResolvedConfig as b, type BitIdFactory as c, type BitPlugin as d, type BitState as e, type BitPath as f, type BitPathValue as g, type DeepPartial as h, type BitErrors as i, type BitPersistMetadata as j, type BitArrayPath as k, type BitArrayItem as l, type BitFieldState as m, type ValidateScopeResult as n, type BitComputedFn as o, type BitTransformFn as p, type BitFieldChangeMeta as q, type BitBeforeValidateEvent as r, type BitAfterValidateEvent as s, type BitBeforeSubmitEvent as t, type BitAfterSubmitEvent as u, type BitFieldChangeEvent as v, type BitFieldConditional as w, type BitFieldValidation as x, type BitHistoryConfig as y, type BitPersistConfig as z };
346
+ export type { BitPlugin as A, BitAfterSubmitEvent as B, BitPluginContext as C, BitPluginErrorEvent as D, BitPluginHooks as E, BitScheduler as F, BitState as G, BitSubmitResult as H, BitTouched as I, BitTransformFn as J, BitValidationConfig as K, DeepPartial as L, DevToolsOptions as M, ValidatorFn as N, BitPersistResolvedConfig as O, BitIdFactory as P, ScopeStatus as S, ValidateScopeResult as V, BitAfterValidateEvent as a, BitArrayItem as b, BitArrayPath as c, BitBeforeSubmitEvent as d, BitBeforeValidateEvent as e, BitBus as f, BitBusListener as g, BitBusStorePort as h, BitComputedFn as i, BitConfig as j, BitErrors as k, BitFieldChangeEvent as l, BitFieldChangeMeta as m, BitFieldConditional as n, BitFieldDefinition as o, BitFieldState as p, BitFieldValidation as q, BitFormGlobal as r, BitHistoryConfig as s, BitNormalizeFn as t, BitPath as u, BitPathValue as v, BitPersistConfig as w, BitPersistMetadata as x, BitPersistMode as y, BitPersistStorageAdapter as z };
@@ -14,4 +14,4 @@ type BitUploadFn = (file: File) => Promise<BitUploadResult>;
14
14
  /** Optional delete function contract. */
15
15
  type BitDeleteUploadFn = (key: string) => Promise<void>;
16
16
 
17
- export type { BitUploadFn as B, BitDeleteUploadFn as a, BitUploadResult as b };
17
+ export type { BitDeleteUploadFn as B, BitUploadFn as a, BitUploadResult as b };
@@ -14,4 +14,4 @@ type BitUploadFn = (file: File) => Promise<BitUploadResult>;
14
14
  /** Optional delete function contract. */
15
15
  type BitDeleteUploadFn = (key: string) => Promise<void>;
16
16
 
17
- export type { BitUploadFn as B, BitDeleteUploadFn as a, BitUploadResult as b };
17
+ export type { BitDeleteUploadFn as B, BitUploadFn as a, BitUploadResult as b };
@@ -1,14 +1,17 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import React from 'react';
3
- import { e as BitStoreApi, f as BitStoreHooksApi, c as BitHistoryMetadata, d as BitValidationOptions } from './public-types-DdZxD6Op.js';
4
- import { f as BitPath, g as BitPathValue, j as BitPersistMetadata, S as ScopeStatus, n as ValidateScopeResult, i as BitErrors, H as BitTouched, h as DeepPartial, k as BitArrayPath, l as BitArrayItem } from './bus-B4zZmB9C.js';
5
- import { B as BitFieldInputEvent } from './field-binding-BXw0Ku2c.js';
3
+ import { b as BitFrameworkStoreApi, e as BitStoreApi } from './store-api-types-DPi30jQF.js';
4
+ import './bus-B2VEKrPI.js';
5
+ import { u as BitPath, v as BitPathValue, x as BitPersistMetadata, S as ScopeStatus, V as ValidateScopeResult, k as BitErrors, I as BitTouched, L as DeepPartial, c as BitArrayPath, b as BitArrayItem } from './types-CG5nYeRk.js';
6
+ import { a as BitArrayBindingField } from './array-controller-Cx-DMH7Y.js';
7
+ import { a as BitHistoryMetadata, b as BitValidationOptions } from './meta-types-Bzmm21TP.js';
8
+ import { B as BitFieldInputEvent } from './field-binding-MX6jVQbT.js';
6
9
 
7
10
  declare const BitFormProvider: ({ store, children, }: {
8
- store: BitStoreApi<any>;
11
+ store: BitFrameworkStoreApi<any> | BitStoreApi<any>;
9
12
  children: React.ReactNode;
10
13
  }) => react_jsx_runtime.JSX.Element;
11
- declare const useBitStore: <T extends object>() => BitStoreHooksApi<T>;
14
+ declare const useBitStore: <T extends object>() => BitFrameworkStoreApi<T>;
12
15
 
13
16
  /**
14
17
  * Metadata describing the current state of a form field.
@@ -118,9 +121,10 @@ interface UseBitFormResult<T extends object = any> {
118
121
  transaction: <TResult>(callback: () => TResult) => TResult;
119
122
  setField: <P extends BitPath<T>>(path: P, value: BitPathValue<T, P>) => void;
120
123
  blurField: <P extends BitPath<T>>(path: P) => void;
121
- replaceValues: (values: T) => void;
122
- hydrate: (values: DeepPartial<T>) => void;
123
- rebase: (values: T) => void;
124
+ setValues: (values: T | DeepPartial<T>, options?: {
125
+ partial?: boolean;
126
+ rebase?: boolean;
127
+ }) => void;
124
128
  setError: (path: string, message: string | undefined) => void;
125
129
  setErrors: (errors: BitErrors<T>) => void;
126
130
  setServerErrors: (serverErrors: Record<string, string[] | string>) => void;
@@ -130,6 +134,8 @@ interface UseBitFormResult<T extends object = any> {
130
134
  declare function useBitForm<T extends object>(): UseBitFormResult<T>;
131
135
 
132
136
  declare function useBitArray<TForm extends object = any, P extends BitArrayPath<TForm> = BitArrayPath<TForm>>(path: P): {
137
+ fields: BitArrayBindingField<BitArrayItem<BitPathValue<TForm, P>>>[];
138
+ length: number;
133
139
  append: (value: BitArrayItem<BitPathValue<TForm, P>>) => void;
134
140
  prepend: (value: BitArrayItem<BitPathValue<TForm, P>>) => void;
135
141
  insert: (index: number, value: BitArrayItem<BitPathValue<TForm, P>>) => void;
@@ -138,12 +144,6 @@ declare function useBitArray<TForm extends object = any, P extends BitArrayPath<
138
144
  swap: (indexA: number, indexB: number) => void;
139
145
  replace: (items: BitArrayItem<BitPathValue<TForm, P>>[]) => void;
140
146
  clear: () => void;
141
- fields: {
142
- key: string;
143
- value: BitArrayItem<BitPathValue<TForm, P>>;
144
- index: number;
145
- }[];
146
- length: number;
147
147
  };
148
148
 
149
149
  declare function useBitScope(scopeName: string): {
@@ -1,14 +1,17 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import React from 'react';
3
- import { e as BitStoreApi, f as BitStoreHooksApi, c as BitHistoryMetadata, d as BitValidationOptions } from './public-types-Cd9ai20P.cjs';
4
- import { f as BitPath, g as BitPathValue, j as BitPersistMetadata, S as ScopeStatus, n as ValidateScopeResult, i as BitErrors, H as BitTouched, h as DeepPartial, k as BitArrayPath, l as BitArrayItem } from './bus-BeAeZwWu.cjs';
5
- import { B as BitFieldInputEvent } from './field-binding-BXw0Ku2c.cjs';
3
+ import { b as BitFrameworkStoreApi, e as BitStoreApi } from './store-api-types-D-ZHxzRy.cjs';
4
+ import './bus-ZLQeq4Vr.cjs';
5
+ import { u as BitPath, v as BitPathValue, x as BitPersistMetadata, S as ScopeStatus, V as ValidateScopeResult, k as BitErrors, I as BitTouched, L as DeepPartial, c as BitArrayPath, b as BitArrayItem } from './types-D6LhF5GC.cjs';
6
+ import { a as BitArrayBindingField } from './array-controller-B5bfXV1W.cjs';
7
+ import { a as BitHistoryMetadata, b as BitValidationOptions } from './meta-types-Bzmm21TP.cjs';
8
+ import { B as BitFieldInputEvent } from './field-binding-B_OX3bjp.cjs';
6
9
 
7
10
  declare const BitFormProvider: ({ store, children, }: {
8
- store: BitStoreApi<any>;
11
+ store: BitFrameworkStoreApi<any> | BitStoreApi<any>;
9
12
  children: React.ReactNode;
10
13
  }) => react_jsx_runtime.JSX.Element;
11
- declare const useBitStore: <T extends object>() => BitStoreHooksApi<T>;
14
+ declare const useBitStore: <T extends object>() => BitFrameworkStoreApi<T>;
12
15
 
13
16
  /**
14
17
  * Metadata describing the current state of a form field.
@@ -118,9 +121,10 @@ interface UseBitFormResult<T extends object = any> {
118
121
  transaction: <TResult>(callback: () => TResult) => TResult;
119
122
  setField: <P extends BitPath<T>>(path: P, value: BitPathValue<T, P>) => void;
120
123
  blurField: <P extends BitPath<T>>(path: P) => void;
121
- replaceValues: (values: T) => void;
122
- hydrate: (values: DeepPartial<T>) => void;
123
- rebase: (values: T) => void;
124
+ setValues: (values: T | DeepPartial<T>, options?: {
125
+ partial?: boolean;
126
+ rebase?: boolean;
127
+ }) => void;
124
128
  setError: (path: string, message: string | undefined) => void;
125
129
  setErrors: (errors: BitErrors<T>) => void;
126
130
  setServerErrors: (serverErrors: Record<string, string[] | string>) => void;
@@ -130,6 +134,8 @@ interface UseBitFormResult<T extends object = any> {
130
134
  declare function useBitForm<T extends object>(): UseBitFormResult<T>;
131
135
 
132
136
  declare function useBitArray<TForm extends object = any, P extends BitArrayPath<TForm> = BitArrayPath<TForm>>(path: P): {
137
+ fields: BitArrayBindingField<BitArrayItem<BitPathValue<TForm, P>>>[];
138
+ length: number;
133
139
  append: (value: BitArrayItem<BitPathValue<TForm, P>>) => void;
134
140
  prepend: (value: BitArrayItem<BitPathValue<TForm, P>>) => void;
135
141
  insert: (index: number, value: BitArrayItem<BitPathValue<TForm, P>>) => void;
@@ -138,12 +144,6 @@ declare function useBitArray<TForm extends object = any, P extends BitArrayPath<
138
144
  swap: (indexA: number, indexB: number) => void;
139
145
  replace: (items: BitArrayItem<BitPathValue<TForm, P>>[]) => void;
140
146
  clear: () => void;
141
- fields: {
142
- key: string;
143
- value: BitArrayItem<BitPathValue<TForm, P>>;
144
- index: number;
145
- }[];
146
- length: number;
147
147
  };
148
148
 
149
149
  declare function useBitScope(scopeName: string): {
package/dist/utils.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkT2JRSWQUcjs = require('./chunk-T2JRSWQU.cjs');exports.cleanPrefixedKeys = _chunkT2JRSWQUcjs.j; exports.extractServerErrors = _chunkT2JRSWQUcjs.m; exports.isValidationErrorShape = _chunkT2JRSWQUcjs.l;
2
+ //# sourceMappingURL=utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/utils.cjs"],"names":[],"mappings":"AAAA,iIAAsD,yJAAoF","file":"/home/runner/work/bit-form/bit-form/dist/utils.cjs"}
@@ -0,0 +1,6 @@
1
+ declare function cleanPrefixedKeys(obj: Record<string, any>, prefix: string): Record<string, any>;
2
+
3
+ declare function isValidationErrorShape(x: unknown): x is Record<string, string | string[]>;
4
+ declare function extractServerErrors(x: unknown): Record<string, string | string[]>;
5
+
6
+ export { cleanPrefixedKeys, extractServerErrors, isValidationErrorShape };
@@ -0,0 +1,6 @@
1
+ declare function cleanPrefixedKeys(obj: Record<string, any>, prefix: string): Record<string, any>;
2
+
3
+ declare function isValidationErrorShape(x: unknown): x is Record<string, string | string[]>;
4
+ declare function extractServerErrors(x: unknown): Record<string, string | string[]>;
5
+
6
+ export { cleanPrefixedKeys, extractServerErrors, isValidationErrorShape };
package/dist/utils.js ADDED
@@ -0,0 +1,2 @@
1
+ import{j as r,l as e,m as a}from"./chunk-RD73EBSN.js";export{r as cleanPrefixedKeys,a as extractServerErrors,e as isValidationErrorShape};
2
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkVQ7MK5VBcjs = require('../chunk-VQ7MK5VB.cjs');var _chunkY2ONHDREcjs = require('../chunk-Y2ONHDRE.cjs');var _chunkYCSWULENcjs = require('../chunk-YCSWULEN.cjs');require('../chunk-PFPGASVZ.cjs');var _vue = require('vue');var W=Symbol("BIT_STORE");function X(t){_vue.provide.call(void 0, W,_chunkYCSWULENcjs.k.call(void 0, t))}function c(){let t=_vue.inject.call(void 0, W);if(!t)throw new Error("BitForm Vue hooks devem ser usados sob um provideBitStore");return t}function ee(){let t=c(),e=_vue.shallowRef.call(void 0, {isValid:t.getState().isValid,isSubmitting:t.getState().isSubmitting,isDirty:t.getState().isDirty}),i=_vue.ref.call(void 0, null),s=_vue.ref.call(void 0, null),o=t.subscribeSelector(p=>({isValid:p.isValid,isSubmitting:p.isSubmitting,isDirty:p.isDirty}),p=>{e.value=p},{paths:["isValid","isSubmitting","isDirty"]});_vue.onUnmounted.call(void 0, o);let u=_chunkY2ONHDREcjs.b.call(void 0, t,{clearSubmissionState:()=>{i.value=null,s.value=null},setSubmissionResult:p=>{s.value=p},setSubmissionError:p=>{i.value=p}}),n=_chunkY2ONHDREcjs.a.call(void 0, t),d=_vue.computed.call(void 0, ()=>e.value.isValid),S=_vue.computed.call(void 0, ()=>e.value.isSubmitting),f=_vue.computed.call(void 0, ()=>e.value.isDirty),r=u.onSubmit,a=u.reset;return{meta:{isValid:d,isDirty:f,isSubmitting:S,submitError:i,lastResponse:s},getValues:u.getValues,getErrors:u.getErrors,getTouched:u.getTouched,getDirtyValues:u.getDirtyValues,submit:u.submit,onSubmit:r,reset:a,...n}}function E(t){let e=c(),i=e.resolveMask(t),s=_chunkY2ONHDREcjs.d.call(void 0, e,t,i),o=_vue.shallowRef.call(void 0, e.getFieldState(t)),u=_chunkY2ONHDREcjs.c.call(void 0, e,t,B=>{o.value=B});_vue.onUnmounted.call(void 0, ()=>{u(),e.unregisterField&&e.unregisterField(t)});let n=_vue.computed.call(void 0, ()=>o.value.value),d=_vue.computed.call(void 0, ()=>s.displayValue(n.value)),S=_vue.computed.call(void 0, {get:()=>d.value,set:B=>{s.setValue(B)}}),f=_vue.computed.call(void 0, ()=>o.value.error),r=_vue.computed.call(void 0, ()=>o.value.touched?o.value.error:void 0),a=_vue.computed.call(void 0, ()=>o.value.touched),l=_vue.computed.call(void 0, ()=>!!(a.value&&r.value)),p=_vue.computed.call(void 0, ()=>o.value.isValidating),b=_vue.computed.call(void 0, ()=>o.value.isDirty),P=_vue.computed.call(void 0, ()=>o.value.isHidden),h=_vue.computed.call(void 0, ()=>o.value.isRequired),R=_vue.computed.call(void 0, ()=>!!f.value),m=B=>{s.setValue(B)},g=()=>s.setBlur();return{value:n,displayValue:d,modelValue:S,setValue:m,setBlur:g,onInput:B=>{m(B)},onBlur:()=>{g()},meta:{error:r,touched:a,invalid:l,isValidating:p,isDirty:b,isHidden:P,isRequired:h,hasError:R}}}function se(t){let e=c(),i=r=>e.config.idFactory({scope:"array",path:t,index:r}),o=(()=>{let r=_chunkYCSWULENcjs.e.call(void 0, e.getState().values,t);return Array.isArray(r)?r:[]})(),u=_vue.ref.call(void 0, o),n=_vue.ref.call(void 0, o.map((r,a)=>i(a))),d=e.subscribePath(t,r=>{let a=Array.isArray(r)?r:[];if(u.value=[...a],a.length!==n.value.length){let l=[...n.value];if(a.length>l.length){let p=a.length-l.length,b=Array.from({length:p},(P,h)=>i(l.length+h));n.value=[...l,...b]}else n.value=l.slice(0,a.length)}});_vue.onUnmounted.call(void 0, ()=>{d(),e.unregisterPrefix&&e.unregisterPrefix(`${t}.`)});let S=_vue.computed.call(void 0, ()=>u.value.map((r,a)=>({key:n.value[a]||`temp-${a}`,value:r,index:a}))),f=_vue.computed.call(void 0, ()=>u.value.length);return{fields:S,length:f,append:r=>{n.value.push(i(n.value.length)),e.pushItem(t,r)},prepend:r=>{n.value.unshift(i(0)),e.prependItem(t,r)},insert:(r,a)=>{n.value.splice(r,0,i(r)),e.insertItem(t,r,a)},remove:r=>{n.value.splice(r,1),e.removeItem(t,r)},move:(r,a)=>{let l=[...n.value],[p]=l.splice(r,1);l.splice(a,0,p),n.value=l,e.moveItem(t,r,a)},swap:(r,a)=>{let l=[...n.value];[l[r],l[a]]=[l[a],l[r]],n.value=l,e.swapItems(t,r,a)},replace:r=>{n.value=r.map((a,l)=>i(l)),e.setField(t,r)},clear:()=>{n.value=[],e.setField(t,[])}}}function ae(){let t=c(),e=_vue.shallowRef.call(void 0, t.getHistoryMetadata()),i=t.subscribe(()=>{let u=t.getHistoryMetadata();_chunkVQ7MK5VBcjs.a.call(void 0, e.value,u)||(e.value=u)});_vue.onUnmounted.call(void 0, i);let s=()=>t.undo(),o=()=>t.redo();return{canUndo:_vue.computed.call(void 0, ()=>e.value.canUndo),canRedo:_vue.computed.call(void 0, ()=>e.value.canRedo),historyIndex:_vue.computed.call(void 0, ()=>e.value.historyIndex),historySize:_vue.computed.call(void 0, ()=>e.value.historySize),undo:s,redo:o}}function me(t){let e=c(),i=e.getScopeFields(t),s=_vue.ref.call(void 0, e.getStepStatus(t)),o;_vue.onMounted.call(void 0, ()=>{o=e.subscribeSelector(r=>({errors:r.errors,isDirty:r.isDirty}),()=>{let r=e.getStepStatus(t);_chunkY2ONHDREcjs.e.call(void 0, s.value,r)||(s.value=r)},{paths:_chunkY2ONHDREcjs.f.call(void 0, i)})}),_vue.onUnmounted.call(void 0, ()=>{_optionalChain([o, 'optionalCall', _2 => _2()])});let u=async()=>{let r=await e.validate({scope:t}),a=e.getStepErrors(t);return{valid:r,errors:a}},n=()=>e.getStepErrors(t),d=_vue.computed.call(void 0, ()=>!s.value.hasErrors),S=_vue.computed.call(void 0, ()=>s.value.isDirty),f=_vue.computed.call(void 0, ()=>s.value.errors);return{scopeName:t,status:s,errors:f,validate:u,getErrors:n,isValid:d,isDirty:S}}function Se(t){let e=c(),i=_vue.ref.call(void 0, 0),s=_vue.computed.call(void 0, ()=>_nullishCoalesce(t[i.value], () => (""))),o=_vue.ref.call(void 0, e.getStepStatus(s.value)),u;_vue.watch.call(void 0, s,m=>{o.value=e.getStepStatus(m)});let n=()=>{let m=s.value,g=e.getStepStatus(m);_chunkY2ONHDREcjs.e.call(void 0, o.value,g)||(o.value=g)};_vue.onMounted.call(void 0, ()=>{u=e.subscribeSelector(m=>({errors:m.errors,isDirty:m.isDirty}),n,{paths:_chunkY2ONHDREcjs.f.call(void 0, e.getScopeFields(s.value))})}),_vue.onUnmounted.call(void 0, ()=>{_optionalChain([u, 'optionalCall', _3 => _3()])});let d=async()=>{let m=s.value,g=await e.validate({scope:m}),F=e.getStepErrors(m);return{valid:g,errors:F}},S=()=>e.getStepErrors(s.value),f=async()=>{let m=s.value,g=e.getScopeFields(m);if(e.hasValidationsInProgress(g))return!1;let F=await e.validate({scope:m});if(F)i.value=Math.min(i.value+1,t.length-1);else{let k=e.getStepErrors(m),B=Object.keys(k);B.length>0&&e.markFieldsTouched(B)}return F},r=()=>{i.value=Math.max(i.value-1,0)},a=m=>{i.value=Math.max(0,Math.min(m-1,t.length-1))},l=_vue.computed.call(void 0, ()=>i.value+1),p=_vue.computed.call(void 0, ()=>i.value===0),b=_vue.computed.call(void 0, ()=>i.value>=t.length-1),P=_vue.computed.call(void 0, ()=>!o.value.hasErrors),h=_vue.computed.call(void 0, ()=>o.value.isDirty),R=_vue.computed.call(void 0, ()=>o.value.errors);return{step:l,stepIndex:i,scope:s,next:f,prev:r,goTo:a,isFirst:p,isLast:b,status:o,errors:R,isValid:P,isDirty:h,validate:d,getErrors:S}}function ye(t){let e=c(),i=_chunkYCSWULENcjs.e.call(void 0, e.getState().values,t),s=_vue.ref.call(void 0, i),o=e.watch(t,u=>{_chunkYCSWULENcjs.d.call(void 0, s.value,u)||(s.value=u)});return _vue.onUnmounted.call(void 0, o),_vue.readonly.call(void 0, s)}function he(t,e,i){let s=c(),o=E(t),u=null,n=_vue.ref.call(void 0, !1),d={setLoading:r=>{n.value=r},setError:(r,a)=>s.setError(r,a),setValue:r=>o.setValue(r),getUploadKey:()=>u,setUploadKey:r=>{u=r}},S=_chunkVQ7MK5VBcjs.b.call(void 0, t,e,d),f=_chunkVQ7MK5VBcjs.c.call(void 0, t,i,d);return{value:o.value,setValue:o.setValue,error:_vue.computed.call(void 0, ()=>o.meta.error.value),isValidating:_vue.computed.call(void 0, ()=>!!o.meta.isValidating.value||n.value),upload:S,remove:f}}function Ve(){let t=c(),e=_vue.ref.call(void 0, t.getPersistMetadata()),i=t.subscribeSelector(n=>n.persist,n=>{e.value=n},{paths:["persist"]});return _vue.onUnmounted.call(void 0, ()=>i()),{restore:async()=>t.restorePersisted(),save:async()=>{await t.forceSave()},clear:async()=>{await t.clearPersisted()},meta:{isSaving:_vue.computed.call(void 0, ()=>e.value.isSaving),isRestoring:_vue.computed.call(void 0, ()=>e.value.isRestoring),error:_vue.computed.call(void 0, ()=>e.value.error)}}}exports.provideBitStore = X; exports.useBitArray = se; exports.useBitField = E; exports.useBitForm = ee; exports.useBitHistory = ae; exports.useBitPersist = Ve; exports.useBitScope = me; exports.useBitSteps = Se; exports.useBitStore = c; exports.useBitUpload = he; exports.useBitWatch = ye;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkIV32WXCFcjs = require('../chunk-IV32WXCF.cjs');require('../chunk-W5CLDRRE.cjs');var _chunkVZHG372Qcjs = require('../chunk-VZHG372Q.cjs');var _chunkMFTWAFMGcjs = require('../chunk-MFTWAFMG.cjs');var _chunkBSGJ3T5Scjs = require('../chunk-BSGJ3T5S.cjs');var _chunkD7JQWF6Vcjs = require('../chunk-D7JQWF6V.cjs');var _chunkM6WBNHITcjs = require('../chunk-M6WBNHIT.cjs');var _chunkT2JRSWQUcjs = require('../chunk-T2JRSWQU.cjs');require('../chunk-PFPGASVZ.cjs');var _vue = require('vue');var G=Symbol("BIT_STORE");function te(t){_vue.provide.call(void 0, G,_chunkVZHG372Qcjs.d.call(void 0, t))}function a(){let t=_vue.inject.call(void 0, G);if(!t)throw new Error("BitForm Vue hooks devem ser usados sob um provideBitStore");return t}function se(){let t=a(),e=_vue.shallowRef.call(void 0, {isValid:!0,isDirty:!1,isSubmitting:!1}),o=_vue.ref.call(void 0, null),r=_vue.ref.call(void 0, null),i=_chunkMFTWAFMGcjs.c.call(void 0, t,v=>{e.value=v});_vue.onUnmounted.call(void 0, i);let{controller:s,actions:n}=_chunkMFTWAFMGcjs.g.call(void 0, t,{clearSubmissionState:()=>{o.value=null,r.value=null},setSubmissionResult:v=>{r.value=v},setSubmissionError:v=>{o.value=v}}),d=_vue.computed.call(void 0, ()=>e.value.isValid),u=_vue.computed.call(void 0, ()=>e.value.isSubmitting),p=_vue.computed.call(void 0, ()=>e.value.isDirty),c=s.onSubmit,S=s.reset;return{meta:{isValid:d,isDirty:p,isSubmitting:u,submitError:o,lastResponse:r},getValues:s.getValues,getErrors:s.getErrors,getTouched:s.getTouched,getDirtyValues:s.getDirtyValues,submit:s.submit,onSubmit:c,reset:S,...n}}function T(t){let e=a(),{fieldController:o}=_chunkMFTWAFMGcjs.h.call(void 0, e,t),r=_vue.shallowRef.call(void 0, e.read.getFieldState(t)),i=e.observe.subscribeFieldState(t,f=>{r.value=f});_vue.onUnmounted.call(void 0, ()=>{i(),_chunkMFTWAFMGcjs.j.call(void 0, e,t)});let s=_vue.computed.call(void 0, ()=>r.value.value),n=_vue.computed.call(void 0, ()=>o.displayValue(s.value)),d=_vue.computed.call(void 0, {get:()=>n.value,set:f=>{o.setValue(f)}}),u=_vue.computed.call(void 0, ()=>_chunkM6WBNHITcjs.c.call(void 0, r.value)),p=_vue.computed.call(void 0, ()=>u.value.error),c=_vue.computed.call(void 0, ()=>u.value.touched),S=_vue.computed.call(void 0, ()=>u.value.invalid),b=_vue.computed.call(void 0, ()=>u.value.isValidating),v=_vue.computed.call(void 0, ()=>u.value.isDirty),P=_vue.computed.call(void 0, ()=>u.value.isHidden),V=_vue.computed.call(void 0, ()=>u.value.isRequired),x=_vue.computed.call(void 0, ()=>u.value.hasError),F=f=>{o.setValue(f)},l=()=>o.setBlur();return{value:s,displayValue:n,modelValue:d,setValue:F,setBlur:l,onInput:f=>{F(f)},onBlur:()=>{l()},meta:{error:p,touched:c,invalid:S,isValidating:b,isDirty:v,isHidden:P,isRequired:V,hasError:x}}}function le(t){let e=a(),o=_chunkMFTWAFMGcjs.i.call(void 0, e,t),r=_vue.shallowRef.call(void 0, o.readItems()),i=e.observe.subscribePath(t,()=>{r.value=o.readItems()});_vue.onUnmounted.call(void 0, ()=>{i(),_chunkMFTWAFMGcjs.k.call(void 0, e,`${t}.`)});let s=_vue.computed.call(void 0, ()=>o.getFields(r.value)),n=_vue.computed.call(void 0, ()=>r.value.length);return{fields:s,length:n,append:o.append,prepend:o.prepend,insert:o.insert,remove:o.remove,move:o.move,swap:o.swap,replace:o.replace,clear:o.clear}}function pe(){let t=a(),e=_vue.shallowRef.call(void 0, _chunkD7JQWF6Vcjs.f.call(void 0, t)),o=_chunkD7JQWF6Vcjs.g.call(void 0, t,s=>{e.value=s});_vue.onUnmounted.call(void 0, o);let r=()=>t.feature.undo(),i=()=>t.feature.redo();return{canUndo:_vue.computed.call(void 0, ()=>e.value.canUndo),canRedo:_vue.computed.call(void 0, ()=>e.value.canRedo),historyIndex:_vue.computed.call(void 0, ()=>e.value.historyIndex),historySize:_vue.computed.call(void 0, ()=>e.value.historySize),undo:r,redo:i}}function Se(t){let e=a(),o=_vue.ref.call(void 0, e.read.getScopeStatus(t)),r;_vue.onMounted.call(void 0, ()=>{r=_chunkBSGJ3T5Scjs.a.call(void 0, e,t,p=>{o.value=p})}),_vue.onUnmounted.call(void 0, ()=>{_optionalChain([r, 'optionalCall', _2 => _2()])});let i=async()=>{let p=await e.write.validate({scope:t}),c=e.read.getScopeErrors(t);return{valid:p,errors:c}},s=()=>e.read.getScopeErrors(t),n=_vue.computed.call(void 0, ()=>!o.value.hasErrors),d=_vue.computed.call(void 0, ()=>o.value.isDirty),u=_vue.computed.call(void 0, ()=>o.value.errors);return{scopeName:t,status:o,errors:u,validate:i,getErrors:s,isValid:n,isDirty:d}}function be(t){let e=a(),o=_vue.ref.call(void 0, 0),r=_vue.computed.call(void 0, ()=>_nullishCoalesce(t[o.value], () => (""))),i=_vue.ref.call(void 0, e.read.getScopeStatus(r.value)),s;_vue.watch.call(void 0, r,l=>{i.value=e.read.getScopeStatus(l),_optionalChain([s, 'optionalCall', _3 => _3()]),s=e.observe.subscribeScopeStatus(l,n)});let n=()=>{let l=r.value,B=e.read.getScopeStatus(l);_chunkD7JQWF6Vcjs.b.call(void 0, i.value,B)||(i.value=B)};_vue.onMounted.call(void 0, ()=>{s=e.observe.subscribeScopeStatus(r.value,n)}),_vue.onUnmounted.call(void 0, ()=>{_optionalChain([s, 'optionalCall', _4 => _4()])});let d=async()=>{let l=r.value,B=await e.write.validate({scope:l}),g=e.read.getScopeErrors(l);return{valid:B,errors:g}},u=()=>e.read.getScopeErrors(r.value),p=async()=>{let l=r.value,B=e.read.getScopeFields(l);if(e.feature.hasValidationsInProgress(B))return!1;let g=await e.write.validate({scope:l});if(g)o.value=Math.min(o.value+1,t.length-1);else{let f=e.read.getScopeErrors(l),E=Object.keys(f);E.length>0&&e.write.markFieldsTouched(E)}return g},c=()=>{o.value=Math.max(o.value-1,0)},S=l=>{o.value=Math.max(0,Math.min(l-1,t.length-1))},b=_vue.computed.call(void 0, ()=>o.value+1),v=_vue.computed.call(void 0, ()=>o.value===0),P=_vue.computed.call(void 0, ()=>o.value>=t.length-1),V=_vue.computed.call(void 0, ()=>!i.value.hasErrors),x=_vue.computed.call(void 0, ()=>i.value.isDirty),F=_vue.computed.call(void 0, ()=>i.value.errors);return{step:b,stepIndex:o,scope:r,next:p,prev:c,goTo:S,isFirst:v,isLast:P,status:i,errors:F,isValid:V,isDirty:x,validate:d,getErrors:u}}function Ve(t){let e=a(),o=_chunkT2JRSWQUcjs.f.call(void 0, e.read.getState().values,t),r=_vue.ref.call(void 0, o),i=e.observe.subscribePath(t,s=>{_chunkT2JRSWQUcjs.c.call(void 0, r.value,s)||(r.value=s)});return _vue.onUnmounted.call(void 0, i),_vue.readonly.call(void 0, r)}function Re(t,e,o){let r=a(),i=T(t),s=null,n=_vue.ref.call(void 0, !1),d={setLoading:c=>{n.value=c},setError:(c,S)=>r.write.setError(c,S),setValue:c=>i.setValue(c),getUploadKey:()=>s,setUploadKey:c=>{s=c}},u=_chunkIV32WXCFcjs.a.call(void 0, t,e,d),p=_chunkIV32WXCFcjs.b.call(void 0, t,o,d);return{value:i.value,setValue:i.setValue,error:_vue.computed.call(void 0, ()=>i.meta.error.value),isValidating:_vue.computed.call(void 0, ()=>!!i.meta.isValidating.value||n.value),upload:u,remove:p}}function we(){let t=a(),e=_vue.ref.call(void 0, t.read.getPersistMetadata()),o=_chunkMFTWAFMGcjs.f.call(void 0, t,n=>{e.value=n});return _vue.onUnmounted.call(void 0, ()=>o()),{restore:async()=>t.feature.restorePersisted(),save:async()=>{await t.feature.forceSave()},clear:async()=>{await t.feature.clearPersisted()},meta:{isSaving:_vue.computed.call(void 0, ()=>e.value.isSaving),isRestoring:_vue.computed.call(void 0, ()=>e.value.isRestoring),error:_vue.computed.call(void 0, ()=>e.value.error)}}}exports.provideBitStore = te; exports.useBitArray = le; exports.useBitField = T; exports.useBitForm = se; exports.useBitHistory = pe; exports.useBitPersist = we; exports.useBitScope = Se; exports.useBitSteps = be; exports.useBitStore = a; exports.useBitUpload = Re; exports.useBitWatch = Ve;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/vue/index.cjs","../../src/vue/context.ts","../../src/vue/use-bit-form.ts","../../src/vue/use-bit-field.ts","../../src/vue/use-bit-array.ts"],"names":["BIT_STORE_KEY","provideBitStore","store","provide","resolveBitStoreForHooks","useBitStore","inject","useBitForm","state","shallowRef","submitError","ref","lastResponse","unsubscribe","snapshot","nextState","onUnmounted","controller","createFormController","result","error","actions","createStoreFormActions","isValid","computed","isSubmitting","isDirty","onSubmit","reset","useBitField","path","resolvedMask","fieldController","createMaskedFieldController","subscribeFieldState","rawValue","displayValue","modelValue","val","rawError","touched","invalid","isValidating","isHidden","isRequired","hasError","setValue","setBlur","useBitArray","createId","index","initialValues","getDeepValue","values","ids","_","newValues","nextValues","currentIds","diff","newIds","i"],"mappings":"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","file":"/home/runner/work/bit-form/bit-form/dist/vue/index.cjs","sourcesContent":[null,"import { inject, provide, InjectionKey } from \"vue\";\nimport type { BitStoreApi, BitStoreHooksApi } from \"../core\";\nimport { resolveBitStoreForHooks } from \"../core\";\n\n// Chave única para evitar colisões\nexport const BIT_STORE_KEY: InjectionKey<BitStoreHooksApi<any>> =\n Symbol(\"BIT_STORE\");\n\nexport function provideBitStore<T extends object>(store: BitStoreApi<T>) {\n provide(BIT_STORE_KEY, resolveBitStoreForHooks(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 BitStoreHooksApi<T>;\n}\n","import { computed, onUnmounted, shallowRef, ref } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport {\n createFormController,\n createStoreFormActions,\n} from \"../core/form-controller\";\nimport type { UseBitFormResult } from \"./types\";\n\nexport function useBitForm<T extends object>(): UseBitFormResult<T> {\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 { paths: [\"isValid\", \"isSubmitting\", \"isDirty\"] },\n );\n\n onUnmounted(unsubscribe);\n\n const controller = createFormController(store, {\n clearSubmissionState: () => {\n submitError.value = null;\n lastResponse.value = null;\n },\n setSubmissionResult: (result) => {\n lastResponse.value = result;\n },\n setSubmissionError: (error) => {\n submitError.value = error;\n },\n });\n const actions = createStoreFormActions(store);\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 = controller.onSubmit;\n const reset = controller.reset;\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: controller.getValues,\n getErrors: controller.getErrors,\n getTouched: controller.getTouched,\n getDirtyValues: controller.getDirtyValues,\n // Main actions (frequent use - flat)\n submit: controller.submit,\n onSubmit,\n reset,\n ...actions,\n };\n}\n","import { computed, onUnmounted, shallowRef } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport type { UseBitFieldVueResult } from \"./types\";\nimport type { BitPath, BitPathValue } from \"../core\";\nimport {\n createMaskedFieldController,\n subscribeFieldState,\n} from \"../core/field-controller\";\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 const fieldController = createMaskedFieldController(\n store,\n path,\n resolvedMask,\n );\n\n const state = shallowRef(store.getFieldState(path));\n\n const unsubscribe = subscribeFieldState(store, path, (nextState) => {\n state.value = nextState;\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 fieldController.displayValue(rawValue.value),\n );\n\n const modelValue = computed({\n get: () => displayValue.value,\n set: (val: string) => {\n fieldController.setValue(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 fieldController.setValue(val);\n };\n\n const setBlur = () => fieldController.setBlur();\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\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 const createId = (index?: number) =>\n store.config.idFactory({\n scope: \"array\",\n path: path as string,\n index,\n });\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((_, index) => createId(index)));\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 }, (_, i) =>\n createId(currentIds.length + i),\n );\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(createId(ids.value.length));\n store.pushItem(path, val);\n },\n prepend: (val: Item) => {\n ids.value.unshift(createId(0));\n store.prependItem(path, val);\n },\n insert: (index: number, val: Item) => {\n ids.value.splice(index, 0, createId(index));\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((_, index) => createId(index));\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"]}
1
+ {"version":3,"sources":["/home/runner/work/bit-form/bit-form/dist/vue/index.cjs","../../src/vue/context.ts","../../src/vue/use-bit-form.ts","../../src/vue/use-bit-field.ts","../../src/vue/use-bit-array.ts"],"names":["BIT_STORE_KEY","provideBitStore","store","provide","createFrameworkStoreAdapter","useBitStore","inject","useBitForm","state","shallowRef","submitError","ref","lastResponse","unsubscribe","observeFormMetaSnapshot","nextMeta","onUnmounted","controller","actions","createFrameworkFormBinding","result","error","isValid","computed","isSubmitting","isDirty","onSubmit","reset","useBitField","path","fieldController","createFrameworkMaskedFieldBinding","nextState","cleanupRegisteredField","rawValue","displayValue","modelValue","val","metaState","deriveFieldMeta","touched","invalid","isValidating","isHidden","isRequired","hasError","setValue","setBlur","useBitArray","createArrayBindingController","values","cleanupRegisteredPrefix"],"mappings":"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","file":"/home/runner/work/bit-form/bit-form/dist/vue/index.cjs","sourcesContent":[null,"import { inject, provide, InjectionKey } from \"vue\";\nimport type { BitFrameworkStoreApi, BitStoreApi } from \"../core\";\nimport { createFrameworkStoreAdapter } from \"../core\";\n\n// Chave única para evitar colisões\nexport const BIT_STORE_KEY: InjectionKey<BitFrameworkStoreApi<any>> =\n Symbol(\"BIT_STORE\");\n\nexport function provideBitStore<T extends object>(\n store: BitFrameworkStoreApi<T> | BitStoreApi<T>,\n) {\n provide(BIT_STORE_KEY, createFrameworkStoreAdapter<T>(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 BitFrameworkStoreApi<T>;\n}\n","import { computed, onUnmounted, shallowRef, ref } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport { createFrameworkFormBinding, observeFormMetaSnapshot } from \"../core\";\nimport type { UseBitFormResult } from \"./types\";\n\nexport function useBitForm<T extends object>(): UseBitFormResult<T> {\n const store = useBitStore<T>();\n const state = shallowRef({\n isValid: true,\n isDirty: false,\n isSubmitting: false,\n });\n const submitError = ref<Error | null>(null);\n const lastResponse = ref<unknown>(null);\n\n const unsubscribe = observeFormMetaSnapshot(store, (nextMeta) => {\n state.value = nextMeta;\n });\n\n onUnmounted(unsubscribe);\n\n const { controller, actions } = createFrameworkFormBinding(store, {\n clearSubmissionState: () => {\n submitError.value = null;\n lastResponse.value = null;\n },\n setSubmissionResult: (result) => {\n lastResponse.value = result;\n },\n setSubmissionError: (error) => {\n submitError.value = error;\n },\n });\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 = controller.onSubmit;\n const reset = controller.reset;\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: controller.getValues,\n getErrors: controller.getErrors,\n getTouched: controller.getTouched,\n getDirtyValues: controller.getDirtyValues,\n // Main actions (frequent use - flat)\n submit: controller.submit,\n onSubmit,\n reset,\n ...actions,\n };\n}\n","import { computed, onUnmounted, shallowRef } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport type { UseBitFieldVueResult } from \"./types\";\nimport type { BitPath, BitPathValue } from \"../core\";\nimport {\n cleanupRegisteredField,\n createFrameworkMaskedFieldBinding,\n deriveFieldMeta,\n} 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 { fieldController } = createFrameworkMaskedFieldBinding(store, path);\n\n const state = shallowRef(store.read.getFieldState(path));\n\n const unsubscribe = store.observe.subscribeFieldState(path, (nextState) => {\n state.value = nextState;\n });\n\n onUnmounted(() => {\n unsubscribe();\n cleanupRegisteredField(store, path as string);\n });\n\n const rawValue = computed(() => state.value.value as BitPathValue<TForm, P>);\n\n const displayValue = computed(() =>\n fieldController.displayValue(rawValue.value),\n );\n\n const modelValue = computed({\n get: () => displayValue.value,\n set: (val: string) => {\n fieldController.setValue(val);\n },\n });\n\n const metaState = computed(() => deriveFieldMeta(state.value));\n const error = computed(() => metaState.value.error);\n const touched = computed(() => metaState.value.touched);\n const invalid = computed(() => metaState.value.invalid);\n const isValidating = computed(() => metaState.value.isValidating);\n const isDirty = computed(() => metaState.value.isDirty);\n const isHidden = computed(() => metaState.value.isHidden);\n const isRequired = computed(() => metaState.value.isRequired);\n const hasError = computed(() => metaState.value.hasError);\n\n const setValue = (\n val: BitPathValue<TForm, P> | string | number | null | undefined,\n ) => {\n fieldController.setValue(val);\n };\n\n const setBlur = () => fieldController.setBlur();\n\n const 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 { shallowRef, computed, onUnmounted } from \"vue\";\nimport { useBitStore } from \"./context\";\nimport { createArrayBindingController, BitArrayPath } from \"../core\";\nimport { cleanupRegisteredPrefix } from \"../core\";\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 const controller = createArrayBindingController<TForm, P>(store, path);\n const values = shallowRef(controller.readItems());\n\n const unsubscribe = store.observe.subscribePath(path, () => {\n values.value = controller.readItems();\n });\n\n onUnmounted(() => {\n unsubscribe();\n cleanupRegisteredPrefix(store, `${path as string}.`);\n });\n\n const fields = computed(() => controller.getFields(values.value));\n\n const length = computed(() => values.value.length);\n\n return {\n fields,\n length,\n append: controller.append,\n prepend: controller.prepend,\n insert: controller.insert,\n remove: controller.remove,\n move: controller.move,\n swap: controller.swap,\n replace: controller.replace,\n clear: controller.clear,\n };\n}\n"]}