@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.
- package/README.md +80 -24
- package/dist/angular/index.cjs +1 -1
- package/dist/angular/index.cjs.map +1 -1
- package/dist/angular/index.d.cts +20 -20
- package/dist/angular/index.d.ts +20 -20
- package/dist/angular/index.js +1 -1
- package/dist/angular/index.js.map +1 -1
- package/dist/array-controller-B5bfXV1W.d.cts +23 -0
- package/dist/array-controller-Cx-DMH7Y.d.ts +23 -0
- package/dist/bus-B2VEKrPI.d.ts +19 -0
- package/dist/bus-ZLQeq4Vr.d.cts +19 -0
- package/dist/chunk-5NA2TFPG.js +1 -0
- package/dist/chunk-5NA2TFPG.js.map +1 -0
- package/dist/chunk-63OJBMKK.js +2 -0
- package/dist/chunk-63OJBMKK.js.map +1 -0
- package/dist/chunk-BSGJ3T5S.cjs +2 -0
- package/dist/chunk-BSGJ3T5S.cjs.map +1 -0
- package/dist/chunk-CPP7ELA5.js +2 -0
- package/dist/chunk-CPP7ELA5.js.map +1 -0
- package/dist/chunk-D7JQWF6V.cjs +2 -0
- package/dist/chunk-D7JQWF6V.cjs.map +1 -0
- package/dist/chunk-E2NZR44P.js +2 -0
- package/dist/chunk-E2NZR44P.js.map +1 -0
- package/dist/chunk-EQ55DKX2.js +2 -0
- package/dist/chunk-EQ55DKX2.js.map +1 -0
- package/dist/chunk-IV32WXCF.cjs +2 -0
- package/dist/chunk-IV32WXCF.cjs.map +1 -0
- package/dist/chunk-JC4R5WCC.js +2 -0
- package/dist/chunk-JC4R5WCC.js.map +1 -0
- package/dist/chunk-K5X37E3U.js +2 -0
- package/dist/chunk-K5X37E3U.js.map +1 -0
- package/dist/chunk-M6WBNHIT.cjs +2 -0
- package/dist/chunk-M6WBNHIT.cjs.map +1 -0
- package/dist/chunk-MFSQATNZ.cjs +2 -0
- package/dist/chunk-MFSQATNZ.cjs.map +1 -0
- package/dist/chunk-MFTWAFMG.cjs +2 -0
- package/dist/chunk-MFTWAFMG.cjs.map +1 -0
- package/dist/chunk-O5UPA33R.js +2 -0
- package/dist/chunk-O5UPA33R.js.map +1 -0
- package/dist/chunk-P2YWYBWG.cjs +2 -0
- package/dist/chunk-P2YWYBWG.cjs.map +1 -0
- package/dist/chunk-QKGTVKBU.cjs +2 -0
- package/dist/chunk-QKGTVKBU.cjs.map +1 -0
- package/dist/chunk-RD73EBSN.js +2 -0
- package/dist/chunk-RD73EBSN.js.map +1 -0
- package/dist/chunk-T2JRSWQU.cjs +2 -0
- package/dist/chunk-T2JRSWQU.cjs.map +1 -0
- package/dist/chunk-UQ3DSUWC.js +2 -0
- package/dist/chunk-UQ3DSUWC.js.map +1 -0
- package/dist/chunk-VZHG372Q.cjs +2 -0
- package/dist/chunk-VZHG372Q.cjs.map +1 -0
- package/dist/chunk-W2E5UIXT.js +2 -0
- package/dist/chunk-W2E5UIXT.js.map +1 -0
- package/dist/chunk-W5CLDRRE.cjs +1 -0
- package/dist/chunk-W5CLDRRE.cjs.map +1 -0
- package/dist/cli/index.cjs +22 -22
- package/dist/core/bindings.cjs +2 -0
- package/dist/core/bindings.cjs.map +1 -0
- package/dist/core/bindings.d.cts +81 -0
- package/dist/core/bindings.d.ts +81 -0
- package/dist/core/bindings.js +2 -0
- package/dist/core/bindings.js.map +1 -0
- package/dist/core/status.cjs +2 -0
- package/dist/core/status.cjs.map +1 -0
- package/dist/core/status.d.cts +44 -0
- package/dist/core/status.d.ts +44 -0
- package/dist/core/status.js +2 -0
- package/dist/core/status.js.map +1 -0
- package/dist/core/store.cjs +2 -0
- package/dist/core/store.cjs.map +1 -0
- package/dist/core/store.d.cts +84 -0
- package/dist/core/store.d.ts +84 -0
- package/dist/core/store.js +2 -0
- package/dist/core/store.js.map +1 -0
- package/dist/core/utils.cjs +2 -0
- package/dist/core/utils.cjs.map +1 -0
- package/dist/core/utils.d.cts +81 -0
- package/dist/core/utils.d.ts +81 -0
- package/dist/core/utils.js +2 -0
- package/dist/core/utils.js.map +1 -0
- package/dist/core.cjs +2 -0
- package/dist/core.cjs.map +1 -0
- package/dist/core.d.cts +14 -0
- package/dist/core.d.ts +14 -0
- package/dist/core.js +2 -0
- package/dist/core.js.map +1 -0
- package/dist/devtools/bridge.cjs +1 -1
- package/dist/devtools/bridge.cjs.map +1 -1
- package/dist/devtools/bridge.d.cts +5 -1
- package/dist/devtools/bridge.d.ts +5 -1
- package/dist/devtools/bridge.js +1 -1
- package/dist/devtools/bridge.js.map +1 -1
- package/dist/devtools/index.cjs +18 -18
- package/dist/devtools/index.cjs.map +1 -1
- package/dist/devtools/index.d.cts +27 -2
- package/dist/devtools/index.d.ts +27 -2
- package/dist/devtools/index.js +18 -18
- package/dist/devtools/index.js.map +1 -1
- package/dist/devtools/protocol.cjs +2 -0
- package/dist/devtools/protocol.cjs.map +1 -0
- package/dist/devtools/protocol.d.cts +54 -0
- package/dist/devtools/protocol.d.ts +54 -0
- package/dist/devtools/protocol.js +2 -0
- package/dist/devtools/protocol.js.map +1 -0
- package/dist/field-binding-B_OX3bjp.d.cts +25 -0
- package/dist/field-binding-MX6jVQbT.d.ts +25 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -193
- package/dist/index.d.ts +9 -193
- package/dist/index.js +1 -1
- package/dist/meta-types-Bzmm21TP.d.cts +18 -0
- package/dist/meta-types-Bzmm21TP.d.ts +18 -0
- package/dist/react/index.cjs +1 -1
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +10 -7
- package/dist/react/index.d.ts +10 -7
- package/dist/react/index.js +1 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react-native/index.cjs +1 -1
- package/dist/react-native/index.cjs.map +1 -1
- package/dist/react-native/index.d.cts +8 -5
- package/dist/react-native/index.d.ts +8 -5
- package/dist/react-native/index.js +1 -1
- package/dist/react-native/index.js.map +1 -1
- package/dist/resolvers/index.cjs +1 -1
- package/dist/resolvers/index.cjs.map +1 -1
- package/dist/resolvers/index.d.cts +2 -1
- package/dist/resolvers/index.d.ts +2 -1
- package/dist/resolvers/index.js +1 -1
- package/dist/resolvers/joi.d.cts +2 -1
- package/dist/resolvers/joi.d.ts +2 -1
- package/dist/resolvers/yup.d.cts +2 -1
- package/dist/resolvers/yup.d.ts +2 -1
- package/dist/resolvers/zod.d.cts +2 -1
- package/dist/resolvers/zod.d.ts +2 -1
- package/dist/store-api-types-D-ZHxzRy.d.cts +161 -0
- package/dist/store-api-types-DPi30jQF.d.ts +161 -0
- package/dist/{bus-B4zZmB9C.d.ts → types-CG5nYeRk.d.ts} +140 -41
- package/dist/{bus-BeAeZwWu.d.cts → types-D6LhF5GC.d.cts} +140 -41
- package/dist/{upload-EXnJLq8k.d.cts → upload-C2mpfhp1.d.cts} +1 -1
- package/dist/{upload-EXnJLq8k.d.ts → upload-C2mpfhp1.d.ts} +1 -1
- package/dist/{use-bit-persist-Dk3fUrds.d.ts → use-bit-persist-BTwy8kvA.d.ts} +14 -14
- package/dist/{use-bit-persist-D_gimC9A.d.cts → use-bit-persist-C2LHNTVv.d.cts} +14 -14
- package/dist/utils.cjs +2 -0
- package/dist/utils.cjs.map +1 -0
- package/dist/utils.d.cts +6 -0
- package/dist/utils.d.ts +6 -0
- package/dist/utils.js +2 -0
- package/dist/utils.js.map +1 -0
- package/dist/vue/index.cjs +1 -1
- package/dist/vue/index.cjs.map +1 -1
- package/dist/vue/index.d.cts +17 -18
- package/dist/vue/index.d.ts +17 -18
- package/dist/vue/index.js +1 -1
- package/dist/vue/index.js.map +1 -1
- package/package.json +48 -17
- package/dist/chunk-2CVKNPWX.js +0 -2
- package/dist/chunk-2CVKNPWX.js.map +0 -1
- package/dist/chunk-3EDD3V43.cjs +0 -2
- package/dist/chunk-3EDD3V43.cjs.map +0 -1
- package/dist/chunk-PX6WKENM.js +0 -2
- package/dist/chunk-PX6WKENM.js.map +0 -1
- package/dist/chunk-QWH2NBVB.js +0 -2
- package/dist/chunk-QWH2NBVB.js.map +0 -1
- package/dist/chunk-T3FR7D5V.js +0 -2
- package/dist/chunk-T3FR7D5V.js.map +0 -1
- package/dist/chunk-VQ7MK5VB.cjs +0 -2
- package/dist/chunk-VQ7MK5VB.cjs.map +0 -1
- package/dist/chunk-Y2ONHDRE.cjs +0 -2
- package/dist/chunk-Y2ONHDRE.cjs.map +0 -1
- package/dist/chunk-YCSWULEN.cjs +0 -2
- package/dist/chunk-YCSWULEN.cjs.map +0 -1
- package/dist/field-binding-BXw0Ku2c.d.cts +0 -12
- package/dist/field-binding-BXw0Ku2c.d.ts +0 -12
- package/dist/public-types-Cd9ai20P.d.cts +0 -97
- 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
|
|
9
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
54
|
-
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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 {
|
|
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 {
|
|
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 {
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
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>() =>
|
|
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
|
-
|
|
122
|
-
|
|
123
|
-
|
|
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 {
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
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>() =>
|
|
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
|
-
|
|
122
|
-
|
|
123
|
-
|
|
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"}
|
package/dist/utils.d.cts
ADDED
|
@@ -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.d.ts
ADDED
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/vue/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var
|
|
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
|
package/dist/vue/index.cjs.map
CHANGED
|
@@ -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"]}
|