react-f0rm 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +152 -32
- package/dist/devtools/index.cjs.js +1 -1
- package/dist/devtools/index.cjs.js.map +1 -1
- package/dist/devtools/index.d.ts +2 -2
- package/dist/devtools/index.mjs +1 -1
- package/dist/devtools/index.mjs.map +1 -1
- package/dist/errors-CxSjrWJO.cjs.js +2 -0
- package/dist/errors-CxSjrWJO.cjs.js.map +1 -0
- package/dist/errors-CzWtwjO0.mjs +2 -0
- package/dist/errors-CzWtwjO0.mjs.map +1 -0
- package/dist/form-CvmWHUrd.d.ts +423 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +786 -102
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/index.umd.js +801 -354
- package/dist/index.umd.js.map +1 -1
- package/dist/index.umd.min.js +2 -2
- package/dist/index.umd.min.js.map +1 -1
- package/dist/persist.cjs.js +2 -0
- package/dist/persist.cjs.js.map +1 -0
- package/dist/persist.d.ts +49 -0
- package/dist/persist.mjs +2 -0
- package/dist/persist.mjs.map +1 -0
- package/dist/resolvers/standard-schema.cjs.js +1 -1
- package/dist/resolvers/standard-schema.cjs.js.map +1 -1
- package/dist/resolvers/standard-schema.d.ts +7 -5
- package/dist/resolvers/standard-schema.mjs +1 -1
- package/dist/resolvers/standard-schema.mjs.map +1 -1
- package/dist/resolvers/yup.cjs.js +1 -1
- package/dist/resolvers/yup.cjs.js.map +1 -1
- package/dist/resolvers/yup.d.ts +1 -1
- package/dist/resolvers/yup.mjs +1 -1
- package/dist/resolvers/yup.mjs.map +1 -1
- package/dist/resolvers/zod.cjs.js +1 -1
- package/dist/resolvers/zod.cjs.js.map +1 -1
- package/dist/resolvers/zod.d.ts +1 -1
- package/dist/resolvers/zod.mjs +1 -1
- package/dist/resolvers/zod.mjs.map +1 -1
- package/dist/server/index.cjs.js +2 -0
- package/dist/server/index.cjs.js.map +1 -0
- package/dist/server/index.d.ts +77 -0
- package/dist/server/index.mjs +2 -0
- package/dist/server/index.mjs.map +1 -0
- package/dist/validate-B1Gdjeaq.mjs +2 -0
- package/dist/validate-B1Gdjeaq.mjs.map +1 -0
- package/dist/validate-CUmNZqg6.d.ts +238 -0
- package/dist/validate-DAfz8Nbb.cjs.js +2 -0
- package/dist/validate-DAfz8Nbb.cjs.js.map +1 -0
- package/dist/values-B1IV-6V4.mjs +2 -0
- package/dist/values-B1IV-6V4.mjs.map +1 -0
- package/dist/values-CDNAYEOB.cjs.js +2 -0
- package/dist/values-CDNAYEOB.cjs.js.map +1 -0
- package/package.json +71 -24
- package/dist/form-BGWPwts2.mjs +0 -2
- package/dist/form-BGWPwts2.mjs.map +0 -1
- package/dist/form-BiDaJLjD.d.ts +0 -826
- package/dist/form-DwuY91QB.cjs.js +0 -2
- package/dist/form-DwuY91QB.cjs.js.map +0 -1
- package/dist/validate-2XUilILy.d.ts +0 -22
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
import { EventEmitter } from '@for-fun/event-emitter';
|
|
2
|
+
|
|
3
|
+
type PathSegments = (string | number)[];
|
|
4
|
+
type Name = string | PathSegments;
|
|
5
|
+
type Path = {
|
|
6
|
+
value: PathSegments;
|
|
7
|
+
key: string;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Compile-time field path utilities: `FieldPath<T>` enumerates the valid
|
|
12
|
+
* path strings for a values shape `T` ('a', 'a.b', 'a[0]', 'a[b]', ...),
|
|
13
|
+
* and `PathValue<T, P>` resolves the leaf type a path points at.
|
|
14
|
+
* The grammar mirrors the paths accepted at runtime by `normalizePath`:
|
|
15
|
+
* numeric segments are bracket-only ('a[0]', never 'a.0' — dotted
|
|
16
|
+
* numerics throw a TypeError at runtime).
|
|
17
|
+
*/
|
|
18
|
+
/** `true` only for the `any` type (`0 extends 1 & any`). */
|
|
19
|
+
type IsAny<T> = 0 extends 1 & T ? true : false;
|
|
20
|
+
type Primitive = null | undefined | string | number | boolean | symbol | bigint;
|
|
21
|
+
/** Depth countdown: Prev[9] = 8 ... Prev[1] = 0, Prev[0] = never stops recursion. */
|
|
22
|
+
type Prev = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
|
|
23
|
+
/** Paths are capped at 10 segments to keep instantiation depth bounded. */
|
|
24
|
+
type MaxDepth = 9;
|
|
25
|
+
/**
|
|
26
|
+
* Valid path continuations after a segment: `.k` / `[k]` / `[0]`,
|
|
27
|
+
* optionally followed by deeper continuations into the child node.
|
|
28
|
+
* Numeric segments are bracket-only (`.0` throws at runtime); object
|
|
29
|
+
* keys that are themselves numeric strings likewise enumerate just the
|
|
30
|
+
* bracket subscript.
|
|
31
|
+
*/
|
|
32
|
+
type Continue<T, D extends number> = [D] extends [never] ? never : IsAny<T> extends true ? string : T extends Primitive | Function ? never : T extends readonly (infer U)[] ? `[${number}]` | `[${number}]${Continue<U, Prev[D]>}` : {
|
|
33
|
+
[K in Extract<keyof T, string>]: (K extends `${number}` ? never : `.${K}`) | `[${K}]` | (K extends `${number}` ? never : `.${K}${Continue<T[K], Prev[D]>}`) | `[${K}]${Continue<T[K], Prev[D]>}`;
|
|
34
|
+
}[Extract<keyof T, string>];
|
|
35
|
+
/**
|
|
36
|
+
* Every valid field path string for a values shape `T`.
|
|
37
|
+
* @example FieldPath<{a: {b: string}}> // 'a' | 'a.b' | 'a[b]'
|
|
38
|
+
*/
|
|
39
|
+
type FieldPath<T> = IsAny<T> extends true ? string : T extends Primitive | Function ? never : T extends readonly (infer U)[] ? `[${number}]` | `[${number}]${Continue<U, MaxDepth>}` : {
|
|
40
|
+
[K in Extract<keyof T, string>]: K extends `${number}` ? never : K | `${K}${Continue<T[K], MaxDepth>}`;
|
|
41
|
+
}[Extract<keyof T, string>];
|
|
42
|
+
/** Resolve `T[K]` for one bare segment: array index -> element, object key -> value. */
|
|
43
|
+
type Lookup<T, K extends string> = K extends `${number}` ? T extends readonly (infer U)[] ? U : never : K extends keyof T ? T[K] : never;
|
|
44
|
+
/** One dot-separated chunk: a bare segment plus any `[k]` / `[0]` suffixes. */
|
|
45
|
+
type ChunkValue<T, C extends string> = C extends `${infer Key}[${infer Tail}` ? ChunkSuffix<Lookup<T, Key>, `[${Tail}`> : Lookup<T, C>;
|
|
46
|
+
type ChunkSuffix<T, S extends string> = S extends `[${infer Key}]${infer Rest}` ? Rest extends '' ? Lookup<T, Key> : PathOf<Lookup<T, Key>, Rest> : never;
|
|
47
|
+
/** Resolve the value type the path string `P` points at inside `T`. */
|
|
48
|
+
type PathOf<T, P extends string> = P extends '' ? never : P extends `[${infer Key}]${infer Rest}` ? Rest extends '' ? Lookup<T, Key> : PathOf<Lookup<T, Key>, Rest> : P extends `.${infer Rest}` ? PathOf<T, Rest> : P extends `${infer Chunk}.${infer Rest}` ? PathOf<ChunkValue<T, Chunk>, Rest> : ChunkValue<T, P>;
|
|
49
|
+
/**
|
|
50
|
+
* The value type at path `P` of a values shape `T`.
|
|
51
|
+
* @example PathValue<{a: {b: string}}, 'a.b'> // string
|
|
52
|
+
*/
|
|
53
|
+
type PathValue<T, P extends FieldPath<T>> = PathOf<T, P & string>;
|
|
54
|
+
/**
|
|
55
|
+
* The value type at path `P` of `T`, or `any` when `P` is not a known
|
|
56
|
+
* field path (plain `string` / segment-array calls keep their old behavior).
|
|
57
|
+
*/
|
|
58
|
+
type PathValueOf<T, P> = P extends FieldPath<T> ? PathValue<T, Extract<P, FieldPath<T>>> : any;
|
|
59
|
+
|
|
60
|
+
/** Options accepted by {@link setFocus}. All flags default to `false`. */
|
|
61
|
+
type SetFocusOptions = {
|
|
62
|
+
/** Select the field's text after focusing it. Bound fields call
|
|
63
|
+
* `select()` on their element; elements without one (custom `as`
|
|
64
|
+
* components) just focus. */
|
|
65
|
+
shouldSelect?: boolean;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Programmatically focus a bound field's element (e.g. the <Field>'s
|
|
69
|
+
* input).
|
|
70
|
+
*
|
|
71
|
+
* Rides the same 'focusError' event channel a failed handleSubmit uses to
|
|
72
|
+
* focus the first errored field: the payload is the target's path key,
|
|
73
|
+
* with the focus options as a second, backward-compatible argument (older
|
|
74
|
+
* subscribers declared with a single `key` parameter simply ignore it).
|
|
75
|
+
* Being event-driven, it is a silent no-op when the field is unmounted or
|
|
76
|
+
* nothing subscribes — unknown names never throw.
|
|
77
|
+
*
|
|
78
|
+
* @param form form instance
|
|
79
|
+
* @param name field name (dot path or segments path)
|
|
80
|
+
* @param options focus options
|
|
81
|
+
*/
|
|
82
|
+
declare function setFocus(form: Form, name: Name, options?: SetFocusOptions): void;
|
|
83
|
+
|
|
84
|
+
/** Reserved top-level path segment for form-level errors. The Standard
|
|
85
|
+
* Schema form-level adapter lands path-less issues under this key; the
|
|
86
|
+
* exported constant replaces the magic string, and readers consume it via
|
|
87
|
+
* getError(form, FORM_ERROR) / getFieldErrors(form, FORM_ERROR). */
|
|
88
|
+
declare const FORM_ERROR = "_form";
|
|
89
|
+
/** When a field is validated:
|
|
90
|
+
* - `'onSubmit'` (default): only on submit
|
|
91
|
+
* - `'onBlur'`: when the field loses focus
|
|
92
|
+
* - `'onChange'`: on every change
|
|
93
|
+
* - `'onTouched'`: on first blur, then on every change
|
|
94
|
+
* - `'all'`: on both change and blur
|
|
95
|
+
*/
|
|
96
|
+
/** Brand marking a form-level validate result as a structured
|
|
97
|
+
* {@link ValidationOutcome} (parsed values and/or errors) rather than a
|
|
98
|
+
* plain nested error record. Symbols cannot collide with user error
|
|
99
|
+
* records, so detection is an exact `VALIDATION_OUTCOME in result`. */
|
|
100
|
+
declare const VALIDATION_OUTCOME: unique symbol;
|
|
101
|
+
/** Structured form-level validate result: `errors` uses the same nested
|
|
102
|
+
* shape a plain error record uses, `values` is the schema's parsed output
|
|
103
|
+
* (coerce/transform results included). Either side may be omitted. */
|
|
104
|
+
/**
|
|
105
|
+
* Get field error
|
|
106
|
+
* @param form
|
|
107
|
+
* @param name
|
|
108
|
+
* @return FieldError object or undefined
|
|
109
|
+
*/
|
|
110
|
+
declare function getError<T extends Record<string, any> = any, P extends FieldPath<T> | PathSegments = FieldPath<T> | PathSegments>(form: Form<T>, name: P): FieldError | undefined;
|
|
111
|
+
/**
|
|
112
|
+
* Get field error by path
|
|
113
|
+
* @param form
|
|
114
|
+
* @param path
|
|
115
|
+
* @return first FieldError of the field, or undefined
|
|
116
|
+
*/
|
|
117
|
+
declare function getErrorByPath({ errors }: Form, path: Path): FieldError | undefined;
|
|
118
|
+
/**
|
|
119
|
+
* Get all errors of a field
|
|
120
|
+
* @param form
|
|
121
|
+
* @param name
|
|
122
|
+
* @return every error registered for the field (insertion order); an empty
|
|
123
|
+
* array when the field has none
|
|
124
|
+
*/
|
|
125
|
+
declare function getFieldErrors<T extends Record<string, any> = any, P extends FieldPath<T> | PathSegments = FieldPath<T> | PathSegments>(form: Form<T>, name: P): FieldError[];
|
|
126
|
+
/**
|
|
127
|
+
* Get all errors of a field by path
|
|
128
|
+
* @param form
|
|
129
|
+
* @param path
|
|
130
|
+
* @return every error registered for the field (insertion order); an empty
|
|
131
|
+
* array when the field has none
|
|
132
|
+
*/
|
|
133
|
+
declare function getFieldErrorsByPath({ errors }: Form, path: Path): FieldError[];
|
|
134
|
+
/**
|
|
135
|
+
* Get all errors
|
|
136
|
+
* @param form
|
|
137
|
+
* @return array of {path, type, message} entries, in insertion order; path
|
|
138
|
+
* is the user-facing dotted field path ('a.b', 'list.0'), and a
|
|
139
|
+
* field holding several errors contributes one entry per error
|
|
140
|
+
*/
|
|
141
|
+
declare function getErrors({ errors }: Form): FieldErrorEntry[];
|
|
142
|
+
/**
|
|
143
|
+
* Get first error message
|
|
144
|
+
* @param form
|
|
145
|
+
* @return first error's message string, or undefined when there are no errors
|
|
146
|
+
*/
|
|
147
|
+
declare function getFirstError({ errors }: Form): string | undefined;
|
|
148
|
+
/** Snapshot of one field's aggregated state, as {@link getFieldState}
|
|
149
|
+
* returns it. `errors` is the stored array shared with the form — treat it
|
|
150
|
+
* as read-only, like every {@link getFieldErrors} result. */
|
|
151
|
+
/**
|
|
152
|
+
* Set field error
|
|
153
|
+
* @param form
|
|
154
|
+
* @param name
|
|
155
|
+
* @param error string is normalized to {type: 'custom', message}; a
|
|
156
|
+
* FieldError object is stored as-is; an array holds several errors
|
|
157
|
+
* (falsy items dropped, strings normalized); undefined clears
|
|
158
|
+
*/
|
|
159
|
+
declare function setError<T extends Record<string, any> = any, P extends FieldPath<T> | PathSegments = FieldPath<T> | PathSegments>(form: Form<T>, name: P, error: string | FieldError | (string | FieldError)[] | undefined): void;
|
|
160
|
+
/**
|
|
161
|
+
* Set field error
|
|
162
|
+
* @param form
|
|
163
|
+
* @param path
|
|
164
|
+
* @param error string is normalized to {type: 'custom', message}; a
|
|
165
|
+
* FieldError object is stored as-is; an array holds several errors
|
|
166
|
+
* (falsy items dropped, strings normalized); undefined clears
|
|
167
|
+
*/
|
|
168
|
+
declare function setErrorByPath({ emitter, errors }: Form, path: Path, error: string | FieldError | (string | FieldError)[] | undefined): void;
|
|
169
|
+
/**
|
|
170
|
+
* Clear errors
|
|
171
|
+
* @param form
|
|
172
|
+
* @param name a single path or a list of paths; omit to clear every error
|
|
173
|
+
*/
|
|
174
|
+
declare function clearErrors(form: Form, name?: Name | Name[]): void;
|
|
175
|
+
/** Options accepted by {@link setServerErrors}. */
|
|
176
|
+
type SetServerErrorsOptions = {
|
|
177
|
+
/** Keep existing field errors instead of clearing them first. Defaults
|
|
178
|
+
* to `false`: a fresh server response replaces the prior error state. */
|
|
179
|
+
keepExisting?: boolean;
|
|
180
|
+
};
|
|
181
|
+
/**
|
|
182
|
+
* Land a server-side error response on the form: each entry becomes the
|
|
183
|
+
* named field's error(s) with `type: 'server'`, ready for the same
|
|
184
|
+
* renderError/`useError` channel client-side validation uses. Takes the
|
|
185
|
+
* flat `Record<string, string | string[]>` shape REST APIs commonly
|
|
186
|
+
* return (RealWorld: `422 {errors: {email: ['has already been taken']}}`)
|
|
187
|
+
* without a hand-rolled `Object.entries` + `setError` loop.
|
|
188
|
+
*
|
|
189
|
+
* A string value lands as one error, a string array as several (first one
|
|
190
|
+
* is what `getError`/`error` expose); an empty array clears that field's
|
|
191
|
+
* errors. By default every existing error is cleared first — a fresh
|
|
192
|
+
* response describes the current state, not a patch onto stale client
|
|
193
|
+
* errors; pass `keepExisting: true` to layer instead.
|
|
194
|
+
* @param form
|
|
195
|
+
* @param errors field errors keyed by name
|
|
196
|
+
* @param options
|
|
197
|
+
*/
|
|
198
|
+
declare function setServerErrors(form: Form, errors: Record<string, string | string[]>, options?: SetServerErrorsOptions): void;
|
|
199
|
+
/**
|
|
200
|
+
* Set field touched state
|
|
201
|
+
* @param form
|
|
202
|
+
* @param name
|
|
203
|
+
*/
|
|
204
|
+
/**
|
|
205
|
+
* @param form
|
|
206
|
+
*/
|
|
207
|
+
declare function hasErrors({ errors }: Form): boolean;
|
|
208
|
+
|
|
209
|
+
/** A field error: `type` identifies the error kind ('custom' for plain
|
|
210
|
+
* string errors), `message` is the display text. */
|
|
211
|
+
type FieldError = {
|
|
212
|
+
type: string;
|
|
213
|
+
message: string;
|
|
214
|
+
};
|
|
215
|
+
/** A flattened entry from {@link getErrors}. */
|
|
216
|
+
type FieldErrorEntry = {
|
|
217
|
+
path: string;
|
|
218
|
+
type: string;
|
|
219
|
+
message: string;
|
|
220
|
+
};
|
|
221
|
+
/** When a field is validated:
|
|
222
|
+
* - `'onSubmit'` (default): only on submit
|
|
223
|
+
* - `'onBlur'`: when the field loses focus
|
|
224
|
+
* - `'onChange'`: on every change
|
|
225
|
+
* - `'onTouched'`: on first blur, then on every change
|
|
226
|
+
* - `'all'`: on both change and blur
|
|
227
|
+
*/
|
|
228
|
+
type ValidationMode = 'onSubmit' | 'onBlur' | 'onChange' | 'onTouched' | 'all';
|
|
229
|
+
/** When a field is re-validated after it already has an error:
|
|
230
|
+
* - `'onChange'` (default): on every change
|
|
231
|
+
* - `'onBlur'`: when the field loses focus
|
|
232
|
+
* - `'onSubmit'`: only on submit (no live re-validation)
|
|
233
|
+
*/
|
|
234
|
+
type ReValidateMode = 'onChange' | 'onBlur' | 'onSubmit';
|
|
235
|
+
/** Structured form-level validate result: `errors` uses the same nested
|
|
236
|
+
* shape a plain error record uses, `values` is the schema's parsed output
|
|
237
|
+
* (coerce/transform results included). Either side may be omitted.
|
|
238
|
+
*
|
|
239
|
+
* The brand constant itself lives in the errors module (the leaf module of
|
|
240
|
+
* the core dependency graph — every consumer imports it from there) and is
|
|
241
|
+
* re-exported below with `export *`. */
|
|
242
|
+
type ValidationOutcome<T> = {
|
|
243
|
+
[VALIDATION_OUTCOME]: true;
|
|
244
|
+
errors?: Record<string, any>;
|
|
245
|
+
values?: T;
|
|
246
|
+
};
|
|
247
|
+
/** What a form-level validate function may return: a plain nested error
|
|
248
|
+
* record (flattened into field errors — the long-standing shape), or a
|
|
249
|
+
* branded {@link ValidationOutcome} whose `values` become the form's
|
|
250
|
+
* parsedValues baseline. */
|
|
251
|
+
type ValidateResult<T> = Record<string, any> | ValidationOutcome<T> | Promise<Record<string, any> | ValidationOutcome<T>>;
|
|
252
|
+
/** Context passed to a form-level `validate` function's second argument.
|
|
253
|
+
* `signal` aborts as soon as the round is superseded — a newer round
|
|
254
|
+
* started (which only happens under a positive `validateDebounce`, where
|
|
255
|
+
* kicks merge into windows) — so async validators can cancel their
|
|
256
|
+
* underlying work instead of racing a stale result home. Stale results
|
|
257
|
+
* are dropped independently by the round gate, so validators that ignore
|
|
258
|
+
* the signal stay correct too; the same contract field-level validators
|
|
259
|
+
* get through their own `meta`. */
|
|
260
|
+
type FormValidateMeta<T extends Record<string, any> = any> = {
|
|
261
|
+
form: Form<T>;
|
|
262
|
+
signal: AbortSignal;
|
|
263
|
+
};
|
|
264
|
+
/** Form-level validator: receives all values (plus {@link
|
|
265
|
+
* FormValidateMeta} as an optional second argument) and returns a
|
|
266
|
+
* {@link ValidateResult} — sync or async — or `undefined`/nothing when
|
|
267
|
+
* valid (the runtime skips falsy results, so implicit-return callbacks
|
|
268
|
+
* type-check). */
|
|
269
|
+
type FormValidateFn<T extends Record<string, any> = any> = (values: T, meta: FormValidateMeta<T>) => ValidateResult<T> | undefined;
|
|
270
|
+
/**
|
|
271
|
+
* The emitter event table for {@link Form.emitter}: each event's payload
|
|
272
|
+
* tuple. Path-carrying events declare an optional single `Path` payload —
|
|
273
|
+
* emit sites send it for single-field mutations and omit it for bulk
|
|
274
|
+
* payload-less broadcasts (reset, setInitialValues, clear-all), both of
|
|
275
|
+
* which subscribers handle. `focusError` carries the target's path key
|
|
276
|
+
* plus optional {@link SetFocusOptions}.
|
|
277
|
+
*/
|
|
278
|
+
type FormEvents = ['change', [path?: Path]] | ['errors', [path?: Path]] | ['touched', [path?: Path]] | ['validating', [path?: Path]] | ['submitting', []] | ['submitCount', []] | ['submitSuccessful', []] | ['reset', []] | ['disabled', []] | ['loading', []] | ['focusError', [key: string, options?: SetFocusOptions]];
|
|
279
|
+
type Form<T extends Record<string, any> = any> = {
|
|
280
|
+
emitter: EventEmitter<FormEvents>;
|
|
281
|
+
mode: ValidationMode;
|
|
282
|
+
reValidateMode: ReValidateMode;
|
|
283
|
+
initialValues: T;
|
|
284
|
+
values: Map<string, any>;
|
|
285
|
+
/** Tombstones of unregistered field paths (JSON path keys): reading or
|
|
286
|
+
* merging values must not fall back to initialValues for these paths. */
|
|
287
|
+
deleted: Set<string>;
|
|
288
|
+
/** Every error registered for a field, as a non-empty array (the
|
|
289
|
+
* write-side {@link setErrorByPath} normalizes to this invariant, so
|
|
290
|
+
* readers never need to guard against an empty list). Readers wanting
|
|
291
|
+
* the display error take the first entry ({@link getError}); readers
|
|
292
|
+
* wanting all of them use {@link getFieldErrors}. */
|
|
293
|
+
errors: Map<string, FieldError[]>;
|
|
294
|
+
touched: Set<string>;
|
|
295
|
+
/** Per-field validation kicks, registered by {@link
|
|
296
|
+
* registerValidatorByPath} (`useValidate` is the React-side
|
|
297
|
+
* registration): each is the field's debounce/lock-aware kick —
|
|
298
|
+
* invoking it validates the field's current value. `trigger` /
|
|
299
|
+
* `ensureValidate` run every entry; the user-change gate ({@link
|
|
300
|
+
* userChangeByPath}) runs the entry at the changed path. */
|
|
301
|
+
validators: Map<string, () => void>;
|
|
302
|
+
validating: Set<string>;
|
|
303
|
+
/** Parsed values from the last successful schema validation: the
|
|
304
|
+
* schema's complete output tree (coerced/transformed values included).
|
|
305
|
+
* Sits between initialValues and the values Map in {@link getValues}
|
|
306
|
+
* until `reset`/`setInitialValues` clears it. Never affects dirty
|
|
307
|
+
* state — that compares live edits against initialValues only. */
|
|
308
|
+
parsedValues: T | undefined;
|
|
309
|
+
/** Form-level validator, seeded from {@link Options.validate}. May
|
|
310
|
+
* receive a second {@link FormValidateMeta} argument. */
|
|
311
|
+
validate?: FormValidateFn<T>;
|
|
312
|
+
/** Delay in milliseconds before the form-level `validate` runs; seeded
|
|
313
|
+
* from {@link Options.validateDebounce} and fixed at create time. */
|
|
314
|
+
validateDebounce?: number;
|
|
315
|
+
/** Path keys (JSON-stringified segments) of the fields whose user
|
|
316
|
+
* changes re-run the form-level `validate`; normalized from {@link
|
|
317
|
+
* Options.validateDeps} at create time and fixed thereafter. */
|
|
318
|
+
validateDeps?: ReadonlySet<string>;
|
|
319
|
+
isSubmitting: boolean;
|
|
320
|
+
submitCount: number;
|
|
321
|
+
isSubmitSuccessful: boolean | undefined;
|
|
322
|
+
/** True while an async {@link Options.initialValues} source (a Promise,
|
|
323
|
+
* or a thunk returning one) is still pending — the form starts empty
|
|
324
|
+
* and the resolved values become the baseline via setInitialValues when
|
|
325
|
+
* it lands. Flips through the payload-less 'loading' event
|
|
326
|
+
* (`useIsLoading` / `useFormState().isLoading`). */
|
|
327
|
+
isLoading: boolean;
|
|
328
|
+
/** Form-level default for a bound field's unmount behavior, seeded from
|
|
329
|
+
* {@link Options.shouldUnregister}: `true` (the default) tombstones an
|
|
330
|
+
* unmounted field, `false` keeps its value (react-hook-form's
|
|
331
|
+
* `shouldUnregister` semantics). A field's own `shouldUnregister` option
|
|
332
|
+
* overrides this. */
|
|
333
|
+
shouldUnregister?: boolean;
|
|
334
|
+
/** Form-level disabled flag, OR-ed into every bound field's `disabled`
|
|
335
|
+
* (form flag || the field's own option). Seeded from
|
|
336
|
+
* {@link Options}.disabled at create time and toggled at runtime with
|
|
337
|
+
* {@link setDisabled}, which emits a payload-less 'disabled' event so
|
|
338
|
+
* subscribed fields re-render. */
|
|
339
|
+
disabled: boolean;
|
|
340
|
+
};
|
|
341
|
+
type Options<T extends Record<string, any> = any> = {
|
|
342
|
+
/**
|
|
343
|
+
* The values baseline. Sync objects seed immediately (SSR renders
|
|
344
|
+
* them). Async sources — a Promise, or a thunk returning a value or
|
|
345
|
+
* Promise (react-hook-form's async `defaultValues` shape) — start the
|
|
346
|
+
* form empty with `isLoading: true` and land the resolved values as
|
|
347
|
+
* the baseline via setInitialValues once they resolve: value
|
|
348
|
+
* subscribers re-sync, dirty/touched state starts clean, and a later
|
|
349
|
+
* `reset()` returns to the resolved baseline. A rejected source flips
|
|
350
|
+
* isLoading back to false, keeps the form empty, and logs the error in
|
|
351
|
+
* DEV — attach a `.catch` on the source itself to handle it. The thunk
|
|
352
|
+
* runs at create time: keep its identity stable (module scope or
|
|
353
|
+
* useMemo) when passing it inline, and note StrictMode double-invokes
|
|
354
|
+
* it in development, like every render-phase call.
|
|
355
|
+
*/
|
|
356
|
+
initialValues?: T | Promise<T> | (() => T | Promise<T>);
|
|
357
|
+
/** When fields are validated. Defaults to `'onSubmit'`. See
|
|
358
|
+
* {@link ValidationMode}. */
|
|
359
|
+
mode?: ValidationMode;
|
|
360
|
+
/** When a field is re-validated after it already has an error — it only
|
|
361
|
+
* takes effect once the field has an error. Defaults to `'onChange'`. See
|
|
362
|
+
* {@link ReValidateMode}. */
|
|
363
|
+
reValidateMode?: ReValidateMode;
|
|
364
|
+
/**
|
|
365
|
+
* Form-level validator. Returns a record of errors keyed by field path;
|
|
366
|
+
* nested objects are flattened ('a.b' style) and array values contribute
|
|
367
|
+
* every non-empty string they hold as separate errors (zod `flatten()`
|
|
368
|
+
* formErrors style). Schema adapters instead return a branded
|
|
369
|
+
* {@link ValidationOutcome}: `errors` flattens the same way, `values`
|
|
370
|
+
* (the schema's parsed output) becomes the form's parsedValues baseline
|
|
371
|
+
* that {@link getValues} layers over initialValues.
|
|
372
|
+
*/
|
|
373
|
+
validate?: FormValidateFn<T>;
|
|
374
|
+
/**
|
|
375
|
+
* Milliseconds to debounce the form-level `validate`: kicks from
|
|
376
|
+
* `trigger`/`ensureValidate`/submit inside the window merge into one
|
|
377
|
+
* run, and while the timer is pending the form counts as validating,
|
|
378
|
+
* so `trigger` and submit wait the window out — the same contract the
|
|
379
|
+
* per-field `validateDebounce` gives field validators. The merged run
|
|
380
|
+
* reads the values current when its timer fires. Defaults to `0`
|
|
381
|
+
* (validate runs immediately, exactly as before this option existed).
|
|
382
|
+
*/
|
|
383
|
+
validateDebounce?: number;
|
|
384
|
+
/** Fields whose user changes re-run the form-level `validate` — the
|
|
385
|
+
* cross-field dependency list (password-confirm mismatch and friends).
|
|
386
|
+
* Each entry is a field path ('password', 'user.email', 'items.0.qty');
|
|
387
|
+
* a user change to a listed field re-runs the form-level `validate`
|
|
388
|
+
* under the same mode/`reValidateMode` gating the field's own
|
|
389
|
+
* validator gets. Omit it and the form-level `validate` only runs on
|
|
390
|
+
* `trigger`/submit, exactly as before this option existed.
|
|
391
|
+
*
|
|
392
|
+
* Opting in also changes what a re-run may clear: each round first
|
|
393
|
+
* drops the errors the previous round wrote (paths it flattened onto),
|
|
394
|
+
* so a dep change that fixes the cross-field error makes it disappear.
|
|
395
|
+
* Errors the round never wrote — field validators', `setServerErrors`,
|
|
396
|
+
* manual `setError` — are never touched. TanStack Form's counterpart is
|
|
397
|
+
* `onChangeListenTo` (v1) / validator `triggers` (v2 alpha). */
|
|
398
|
+
validateDeps?: FieldPath<T>[];
|
|
399
|
+
/**
|
|
400
|
+
* Form-level default for a bound field's unmount behavior. `true` (the
|
|
401
|
+
* default) tombstones an unmounted field — it drops out of
|
|
402
|
+
* `getValues()` instead of reviving its initial value (this library's
|
|
403
|
+
* historical default); `false` keeps the value, matching
|
|
404
|
+
* react-hook-form's `shouldUnregister`. A field's own
|
|
405
|
+
* `useField({shouldUnregister})` option overrides the form-level flag
|
|
406
|
+
* in either direction.
|
|
407
|
+
*/
|
|
408
|
+
shouldUnregister?: boolean;
|
|
409
|
+
/** Start the form with every bound field disabled — the flag bound
|
|
410
|
+
* fields OR with their own `disabled` option (a field cannot opt out
|
|
411
|
+
* of a disabled form). Toggle later with {@link setDisabled}.
|
|
412
|
+
* Defaults to `false`. */
|
|
413
|
+
disabled?: boolean;
|
|
414
|
+
};
|
|
415
|
+
/**
|
|
416
|
+
* Create form instance
|
|
417
|
+
* @param options
|
|
418
|
+
* @return form instance
|
|
419
|
+
*/
|
|
420
|
+
declare function create<T extends Record<string, any> = any>(options?: Options<T>): Form<T>;
|
|
421
|
+
|
|
422
|
+
export { setServerErrors as A, FORM_ERROR as g, VALIDATION_OUTCOME as l, clearErrors as o, create as p, getError as q, getErrorByPath as r, getErrors as s, getFieldErrors as t, getFieldErrorsByPath as u, getFirstError as v, hasErrors as w, setError as x, setErrorByPath as y, setFocus as z };
|
|
423
|
+
export type { Form as F, Name as N, Options as O, Path as P, ReValidateMode as R, SetFocusOptions as S, ValidationMode as V, FieldError as a, FieldPath as b, PathSegments as c, PathValueOf as d, FieldErrorEntry as e, FormEvents as f, FormValidateFn as h, FormValidateMeta as i, PathValue as j, SetServerErrorsOptions as k, ValidateResult as m, ValidationOutcome as n };
|
package/dist/index.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("react");function t(e){var t=Object.create(null);return e&&Object.keys(e).forEach(function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}}),t.default=e,Object.freeze(t)}var r=t(e);function n(e,t){for(var r=arguments.length,n=new Array(r>2?r-2:0),o=2;o<r;o++)n[o-2]=arguments[o];(e.get(t)||[]).forEach(function(e){return e.apply(void 0,n)})}function o(e,t,r){var n=function(e,t){var r=e.get(t);if(r)return r;var n=new Set;return e.set(t,n),n}(e,t);return n.add(r),function(){return n.delete(r)}}const s=new Map;function i(e){if(Array.isArray(e))return e;const t=s.get(e);if(t)return t;const r=function(e){const t=[];let r="";const n=()=>{if(u(r)){const n=[...t.map(String),r].join("."),o=t.reduce((e,t)=>e+("number"==typeof t?`[${t}]`:`${e?".":""}${t}`),"");throw new TypeError(`Numeric path segment must use bracket notation: "${n}" → "${o}[${r}]" (path: ${e})`)}t.push(r),r=""};for(let o=0;o<e.length;o++){const s=e[o];if("."===s)""!==r&&n();else if("["===s){""!==r&&n();const s=e[o+1];if('"'===s||"'"===s){const r=e.indexOf(s,o+2);if(-1===r)throw new TypeError(`Unterminated quote in path: ${e}`);if("]"!==e[r+1])throw new TypeError(`Expected "]" after quoted segment in path: ${e}`);t.push(e.slice(o+2,r)),o=r+1}else{const r=e.indexOf("]",o+1);if(-1===r)throw new TypeError(`Unterminated bracket in path: ${e}`);const n=e.slice(o+1,r);t.push(u(n)?Number(n):n),o=r}}else r+=s}""===r&&0!==t.length||n();return t}(e);return s.set(e,r),r}const u=e=>/^-?\d+$/.test(e);function a(e,t){return t.reduce((e,t)=>{if(null!=e)return e[t]},e)}function c(e,t){if(!t.length||null==e)return e;const[r,...n]=t;if(n.length){const t=c(e[r],n);return t===e[r]?e:l(e,[r],t)}if(Array.isArray(e)){if(!(r in e))return e;const t=e.slice();return delete t[r],t}if("object"!=typeof e||!(r in e))return e;const o={...e};return delete o[r],o}function l(e,t,r){if(!t.length)return r;const[n,...o]=t,s="number"==typeof n?n:Array.isArray(e)&&"string"==typeof n&&u(n)?Number(n):void 0;if(void 0!==s){const t=Array.isArray(e)?e.slice():[];return t[s]=l(t[s],o,r),t}return{...e,[n]:l(e&&e[n],o,r)}}function f(e,t,r,n){if(!t.length)return r;let o=e,s=null,i="";for(let a=0;a<t.length;a++){const c=t[a];if(!n.has(o)){let t;t="number"==typeof c||Array.isArray(o)&&"string"==typeof c&&u(c)?Array.isArray(o)?o.slice():[]:{...o},n.add(t),0===a?e=t:s[i]=t,o=t}a===t.length-1?o[c]=r:(s=o,i=c,o=o[c])}return e}function d(e){return e&&"function"==typeof e.then}function p(e,t){if(Object.is(e,t))return!0;if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(!e||!t||"object"!=typeof e||"object"!=typeof t)return!1;const r=Array.isArray(e);if(r!==Array.isArray(t))return!1;if(r){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(!p(e[r],t[r]))return!1;return!0}const n=Object.getPrototypeOf(e);if(n!==Object.prototype&&null!==n)return!1;if(Object.getPrototypeOf(t)!==n)return!1;const o=Object.keys(e),s=Object.keys(t);if(o.length!==s.length)return!1;for(const r of o)if(!p(e[r],t[r]))return!1;return!0}function m(e,t,r,n){return new Promise((s,i)=>{if(n())return void i();if(r())return void s();const u=o(e,t,()=>{if(n())return u(),void i();r()&&(u(),s())})})}function h(e){const t=i(e);return{value:t,key:JSON.stringify(t)}}const y=Symbol("validation-outcome");function g(e){return{emitter:new Map,...e,mode:e?.mode??"onSubmit",reValidateMode:e?.reValidateMode??"onChange",disabled:e?.disabled??!1,validateDeps:e?.validateDeps?new Set(e.validateDeps.map(e=>h(e).key)):void 0,initialValues:e?.initialValues??{},values:new Map,deleted:new Set,errors:new Map,touched:new Set,validators:new Map,changeHandlers:new Map,validating:new Set,parsedValues:void 0,isSubmitting:!1,submitCount:0,isSubmitSuccessful:void 0}}const v=new WeakMap;function b(e){const t=v.get(e);t&&t.version++}function x(e){let t=v.get(e);return t?t.version>0&&(t.result=k(e),t.version=0):(t={version:0,result:k(e)},v.set(e,t)),t.result}function k(e){const{initialValues:t,parsedValues:r,values:n,deleted:o}=e,s=new Set;let i=r??t;for(const[e,t]of n)i=f(i,JSON.parse(e),t,s);for(const e of o)i=c(i,JSON.parse(e));return i}function E({initialValues:e,parsedValues:t,values:r,deleted:n},o){const{key:s,value:i}=o;if(r.has(s))return r.get(s);if(!n.has(s)){for(let e=i.length-1;e>0;e--){const t=JSON.stringify(i.slice(0,e));if(r.has(t))return a(r.get(t),i.slice(e))}return a(t??e,i)}}function S(e,t,r,o){const{emitter:s,values:i,deleted:u}=e;i.set(t.key,r),X(i,t),Z(u,t),H(e,t),!1===o?.shouldDirty&&q(e,t,r),G(e),b(e),o?.shouldTouch&&L(e,t),o?.shouldValidate&&e.validators.get(t.key)?.(),n(s,"change",t)}function V(e,t,r){const{values:n,deleted:o}=e;n.set(t.key,r),X(n,t),Z(o,t),H(e,t),G(e),b(e)}function w({emitter:e},t){n(e,"change",t)}function C(e,t,r,n){!1===n?.shouldDirty&&q(e,t,r);const o=e.changeHandlers.get(t.key);o?o(r):S(e,t,r,n)}function O({errors:e},t){return e.get(t.key)?.[0]}const A=[];function T({errors:e},t){return e.get(t.key)??A}function _({errors:e}){const t=[];for(const[r,n]of e){const e=JSON.parse(r).join(".");for(const{type:r,message:o}of n)t.push({path:e,type:r,message:o})}return t}function D({errors:e}){return e.values().next().value?.[0]?.message}function j({emitter:e,validating:t},r){t.delete(r.key),n(e,"validating",r)}function F({emitter:e,validating:t},r){t.add(r.key),n(e,"validating",r)}function P(e,t,r){M(e,h(t),r)}function M({emitter:e,errors:t},r,o){const s=function(e){if("string"==typeof e)return e?[{type:"custom",message:e}]:void 0;if(ne(e))return[e];if(!e)return;const t=[];return e.forEach(e=>{"string"==typeof e&&e?t.push({type:"custom",message:e}):ne(e)&&t.push(e)}),t.length?t:void 0}(o);s?t.set(r.key,s):t.delete(r.key),n(e,"errors",r)}function B(e,t){const{emitter:r,errors:o}=e;if(void 0===t)return o.clear(),void n(r,"errors");const s="string"==typeof t||re(t)?[h(t)]:t.map(e=>h(e));for(const{key:e}of s)o.delete(e);for(const e of s)n(r,"errors",e)}function L({emitter:e,touched:t},r){t.has(r.key)||(t.add(r.key),n(e,"touched",r))}function N({touched:e},t){return e.has(t.key)}function R(e){let t=!1;return $(e,()=>{t=!0}),t}function $(e,t){for(const[r,n]of e.values){const o=JSON.parse(r);W(e,r,o)!==n&&t(o.join("."))}}const I=new WeakMap;function W(e,t,r){const n=I.get(e);return n?.has(t)?n.get(t):a(e.initialValues,r)}function q(e,{key:t},r){let n=I.get(e);n||(n=new Map,I.set(e,n)),n.set(t,r)}function H(e,{key:t}){const r=I.get(e);if(!r?.size)return;const n=`${t.slice(0,-1)},`;for(const e of r.keys())e.startsWith(n)&&r.delete(e)}function J(e,t){const r=I.get(e);r&&(void 0===t?r.clear():r.delete(t))}const U=new WeakMap;function G(e){const t=U.get(e);t&&t.version++}function z(e){const t={};return $(e,e=>{t[e]=!0}),t}function K(e){let t=U.get(e);if(t){if(t.version>0){const r=z(e);(function(e,t){const r=Object.keys(e);return r.length===Object.keys(t).length&&r.every(e=>!0===t[e])})(t.result,r)||(t.result=r),t.version=0}}else t={version:0,result:z(e)},U.set(e,t);return t.result}function Y({touched:e}){return Array.from(e,e=>JSON.parse(e).join("."))}function Q(e,t){const{key:r,value:o}=t,{emitter:s,values:i,touched:u,errors:a,validating:c,deleted:l}=e;i.delete(r),u.delete(r),a.delete(r),c.delete(r),J(e,r),function(e,t){for(let r=1;r<t.length;r++)if(e.has(JSON.stringify(t.slice(0,r))))return!0;const r=`${JSON.stringify(t).slice(0,-1)},`;for(const t of e.keys())if(t.startsWith(r))return!0;return!1}(i,o)||l.add(r),G(e),b(e),n(s,"change",t),n(s,"touched",t),n(s,"errors",t),n(s,"validating",t)}function X(e,{key:t}){if(!e.size)return;const r=`${t.slice(0,-1)},`;for(const t of e.keys())t.startsWith(r)&&e.delete(t)}function Z(e,{key:t}){if(e.size)for(const r of e)(r===t||r.startsWith(`${t.slice(0,-1)},`)||t.startsWith(`${r.slice(0,-1)},`))&&e.delete(r)}function ee(e,t){e.initialValues===t||p(e.initialValues,t)||(e.initialValues=t,e.parsedValues=void 0,e.values.clear(),e.deleted.clear(),J(e),G(e),b(e),n(e.emitter,"change"))}function te({errors:e}){return e.size>0}function re(e){return e.some(e=>"number"==typeof e)}function ne(e){return!!e&&"object"==typeof e&&"string"==typeof e.type&&"string"==typeof e.message}function oe(e,t,r=[],n){Object.entries(t).forEach(([t,o])=>{const s=[...r,...u(t)?[t]:i(t)];"string"==typeof o?o&&(P(e,s,o),se(e,s,n)):Array.isArray(o)||ne(o)?(P(e,s,o),se(e,s,n)):o&&"object"==typeof o&&oe(e,o,s,n)})}function se(e,t,r){if(!r)return;const n=h(t),o=e.errors.get(n.key);o&&r.set(n.key,o)}function ie(e,t){const r=e.validateDeps?function(e){let t=ue.get(e);t||(t=new Map,ue.set(e,t));return t}(e):void 0;if(r&&(!function(e,t){for(const[r,o]of t){e.errors.get(r)===o&&(e.errors.delete(r),n(e.emitter,"errors",h(JSON.parse(r))))}}(e,r),r.clear()),t){if("object"==typeof t&&y in t){const o=t;return o.errors&&oe(e,o.errors,[],r),void function(e,t){void 0!==t&&t!==e.parsedValues&&(e.parsedValues=t,b(e),n(e.emitter,"change"))}(e,o.values)}oe(e,t,[],r)}}const ue=new WeakMap;const ae="__form_validate__";function ce(e){for(const t of e.validating)if(t!==ae)return!1;return!0}const le=Symbol("form-validate-settled"),fe=new WeakMap;function de(e){const t=e.validate;if(!t)return Promise.resolve();const r=e.validateDebounce??0;if(r<=0){const r=new AbortController;return Promise.resolve(t(x(e),{form:e,signal:r.signal})).then(t=>{ie(e,t)})}const o=function(e){let t=fe.get(e);return t||(t={timer:null,controller:null,round:null,marked:!1,waiters:[]},fe.set(e,t)),t}(e);return null!==o.timer?clearTimeout(o.timer):(o.marked=!0,e.validating.add(ae),n(e.emitter,"validating")),o.timer=setTimeout(()=>{o.timer=null;const t=o.round={};(function(e,t,r){const n=e.validate;if(!n)return Promise.resolve();t.controller?.abort();const o=t.controller=new AbortController;let s;try{s=Promise.resolve(n(x(e),{form:e,signal:o.signal}))}catch(e){s=Promise.reject(e)}return s.then(n=>{t.round===r&&ie(e,n)},e=>{if(t.round===r)throw e})})(e,o,t).then(()=>pe(e,o,t,le),r=>pe(e,o,t,r))},r),new Promise((e,t)=>{o.waiters.push({resolve:e,reject:t})})}function pe(e,t,r,o){if(t.round!==r)return;if(t.round=null,null!==t.timer)return;t.marked&&(t.marked=!1,e.validating.delete(ae),n(e.emitter,"validating"));const s=t.waiters;t.waiters=[];for(const e of s)o===le?e.resolve():e.reject(o)}function me(e,t,r){e.validateDeps?.has(t.key)&&e.validate&&("onChange"===r||"all"===r||"onTouched"===r&&N(e,t)||"onChange"===e.reValidateMode&&function(e){const t=ue.get(e);if(!t)return!1;for(const[r,n]of t)if(e.errors.get(r)===n)return!0;return!1}(e))&&de(e).catch(()=>{})}const he=new WeakMap;function ye(e,t,r){let n=he.get(e);n||(n=new Map,he.set(e,n));for(const e of r){let r=n.get(e);r||(r=new Set,n.set(e,r)),r.add(t)}}function ge(e,t,r){const n=he.get(e);if(n)for(const e of r){const r=n.get(e);r?.delete(t)&&(r.size||n.delete(e))}}function ve(e,t,r){const n=he.get(e)?.get(t.key);if(n?.size)for(const o of n)o!==t.key&&("onChange"===r||"all"===r||"onTouched"===r&&N(e,t)||"onChange"===e.reValidateMode&&e.errors.has(o))&&e.validators.get(o)?.()}function be(e){const t=new Error(D(e));return t.errors=_(e),t}async function xe(e){if(e.validators.forEach(e=>e()),await m(e.emitter,"validating",()=>ce(e),()=>te(e)).catch(()=>{throw be(e)}),e.validate&&(await de(e),te(e)))throw be(e)}async function ke(e){return xe(e).catch(e=>e.message)}function Ee(e,t){e.isSubmitting=t,n(e.emitter,"submitting")}function Se(e){e.submitCount++,n(e.emitter,"submitCount")}function Ve(e,t){e.isSubmitSuccessful=t,n(e.emitter,"submitSuccessful")}function we(e){if(e.startsWith("["))try{const t=JSON.parse(e);if(Array.isArray(t))return t.join(".")}catch{}return e}function Ce(e,t){const{onSubmit:r,onValidSubmit:o,onInvalidSubmit:s,shouldFocusError:i=!0}=t??{};return async t=>{t&&"function"==typeof t.preventDefault&&t.preventDefault();const u=t?.currentTarget;Ee(e,!0),Se(e);const a=x(e);if(u&&"function"==typeof u.checkValidity&&!1===u.checkValidity()){if(u.reportValidity(),i&&"function"==typeof u.querySelector){const e=u.querySelector(":invalid");e&&"function"==typeof e.focus&&e.focus()}return Ee(e,!1),Ve(e,!1),void(s&&s(function(e){const t=[],{elements:r}=e;for(let e=0;e<r.length;e++){const n=r[e];n.name&&"function"==typeof n.checkValidity&&!n.checkValidity()&&t.push({path:we(n.name),type:"native",message:n.validationMessage})}return t}(u),a))}if(await ke(e)){if(Ee(e,!1),Ve(e,!1),i){const t=e.errors.keys().next().value;void 0!==t&&n(e.emitter,"focusError",t)}s&&s(_(e),a)}else try{const n=x(e);r&&await r(n,t),o&&await o(n,t),Ve(e,!0)}catch{Ve(e,!1)}finally{Ee(e,!1)}}}function Oe(e,t){switch(e){case"required":return"This field is required";case"min":return`Must be at least ${t}`;case"max":return`Must be at most ${t}`;case"minLength":return`Must be at least ${t} characters`;case"maxLength":return`Must be at most ${t} characters`;case"pattern":return"Invalid format";default:return"Invalid value"}}var Ae,Te={exports:{}},_e={};var De,je,Fe={};var Pe=(je||(je=1,"production"===process.env.NODE_ENV?Te.exports=function(){if(Ae)return _e;Ae=1;var t=e,r="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},n=t.useState,o=t.useEffect,s=t.useLayoutEffect,i=t.useDebugValue;function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!r(e,n)}catch(e){return!0}}var a="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var r=t(),a=n({inst:{value:r,getSnapshot:t}}),c=a[0].inst,l=a[1];return s(function(){c.value=r,c.getSnapshot=t,u(c)&&l({inst:c})},[e,r,t]),o(function(){return u(c)&&l({inst:c}),e(function(){u(c)&&l({inst:c})})},[e]),i(r),r};return _e.useSyncExternalStore=void 0!==t.useSyncExternalStore?t.useSyncExternalStore:a,_e}():Te.exports=(De||(De=1,"production"!==process.env.NODE_ENV&&function(){function t(e){var t=e.getSnapshot;e=e.value;try{var r=t();return!n(e,r)}catch(e){return!0}}"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());var r=e,n="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},o=r.useState,s=r.useEffect,i=r.useLayoutEffect,u=r.useDebugValue,a=!1,c=!1,l="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,l){a||void 0===r.startTransition||(a=!0,console.error("You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release."));var f=l();if(!c){var d=l();n(f,d)||(console.error("The result of getSnapshot should be cached to avoid an infinite loop"),c=!0)}var p=(d=o({inst:{value:f,getSnapshot:l}}))[0].inst,m=d[1];return i(function(){p.value=f,p.getSnapshot=l,t(p)&&m({inst:p})},[e,f,l]),s(function(){return t(p)&&m({inst:p}),e(function(){t(p)&&m({inst:p})})},[e]),u(f),f};Fe.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:l,"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error())}()),Fe)),Te.exports);function Me(e,t){return e.startsWith(`${t.slice(0,-1)},`)}function Be(e,t,r,n,s){const{key:i}=r;return o(e,t,e=>{(void 0===e||e.key===i||Me(i,e.key)||"branch"===n&&Me(e.key,i))&&s()})}function Le(e,t,r,n){return o(e,t,e=>{void 0!==e&&e.key!==r||n()})}function Ne(t){const[r]=e.useState(()=>{const e=g(t);return t&&void 0!==t.values&&ee(e,t.values),e}),n=t&&t.initialValues,o=t&&t.values,s=e.useRef(null);null===s.current&&(s.current={done:!1,source:void 0}),e.useEffect(()=>{if(void 0===n)return;const e=s.current;e.done&&(e.source===n||p(e.source,n))||(e.done=!0,e.source=n,ee(r,n))},[r,n]);const i=e.useRef(null);return null===i.current&&(i.current={done:!1,source:void 0}),e.useEffect(()=>{if(void 0===o)return;const e=i.current;e.done&&(e.source===o||p(e.source,o))||(e.done=!0,e.source=o,ee(r,o))},[r,o]),r}function Re(t,r){const n=e.useRef(null);null===n.current&&(n.current={hasValue:!1});const o=n.current,s=e.useRef(r);s.current=r;const i=e.useCallback(()=>(o.hasValue||(o.value=s.current(),o.hasValue=!0),o.value),[o]),u=e.useCallback(e=>{o.hasValue=!1;return t(()=>{o.hasValue=!1,e()})},[t,o]);return Pe.useSyncExternalStore(u,i,i)}function $e(t,r,n){return Re(e.useCallback(e=>o(t,r,e),[t,r]),n)}function Ie(t,r){const{emitter:n}=t,{key:o}=r;return Re(e.useCallback(e=>Be(n,"change",r,"leaf",e),[n,o]),E.bind(null,t,r))}function We(t,r){const{emitter:n}=t,{key:o}=r;return Re(e.useCallback(e=>Le(n,"touched",o,e),[n,o]),N.bind(null,t,r))}function qe(t,r){const{emitter:n}=t,{key:o}=r;return Re(e.useCallback(e=>Le(n,"errors",o,e),[n,o]),O.bind(null,t,r))}function He(t,r){const{emitter:n}=t,{key:o}=r;return Re(e.useCallback(e=>Le(n,"errors",o,e),[n,o]),T.bind(null,t,r))}function Je(t){const r=e.useMemo(()=>h(i(t)),[t]);return e.useMemo(()=>r,[r.key])}function Ue(t){const r=e.useRef(t);return r.current=t,r}function Ge(t){const r=Ue(t);return e.useCallback((...e)=>r.current(...e),[r])}function ze(e,t){if(!e)return t;const r=function(e){return t=>{if(e.required&&(""===t||null==t))return[{type:"required",message:"string"==typeof e.required?e.required:Oe("required")}];const r=[],n=(t,r)=>e.messages?.[t]??Oe(t,r);if(void 0!==e.min){const o=Number(t);!Number.isNaN(o)&&o<e.min&&r.push({type:"min",message:n("min",e.min)})}if(void 0!==e.max){const o=Number(t);!Number.isNaN(o)&&o>e.max&&r.push({type:"max",message:n("max",e.max)})}return void 0!==e.minLength&&"string"==typeof t&&t.length<e.minLength&&r.push({type:"minLength",message:n("minLength",e.minLength)}),void 0!==e.maxLength&&"string"==typeof t&&t.length>e.maxLength&&r.push({type:"maxLength",message:n("maxLength",e.maxLength)}),e.pattern&&!e.pattern.value.test(t)&&r.push({type:"pattern",message:e.messages?.pattern??e.pattern.message??Oe("pattern")}),r.length?r:void 0}}(e);return t?(e,n)=>{const o=r(e,n),s=e=>{const t=[...o??[]];return Array.isArray(e)?t.push(...e):e&&t.push(e),t.length?t:void 0},i=t(e,n);return d(i)?i.then(s):s(i)}:r}function Ke({form:t,name:r,initialValue:n,shouldUnregister:o,validate:s,rules:i,validateDebounce:u,validateDeps:a,delayError:c,disabled:l,mode:f},p){const m=e.useContext(p),y=t||m;if(!y)throw new Error("no form provided");const g=Je(r),v=e.useRef(!1);void 0!==n&&void 0===E(y,g)&&(V(y,g,n),v.current=!0),e.useEffect(()=>{v.current&&(v.current=!1,w(y,g))});const b=function(t,r,n,o){const s=e.useContext(ot),i=n||s;if(!i)throw new Error("no form provided");const u=e.useRef(null),a=e.useRef(t);a.current=t;const c=e.useRef(o?.debounce??0);return c.current=o?.debounce??0,e.useEffect(()=>{let e=null,t=null,n=!1;const o=()=>{n||(n=!0,F(i,r))},s=()=>{n&&(n=!1,j(i,r))},l=()=>{e=null;const n=a.current;if(!n)return void s();t?.abort(),t=new AbortController;const c=u.current={};let l;try{l=n(E(i,r),{form:i,path:r,signal:t.signal})}catch(e){throw s(),e}if(!d(l))return M(i,r,l),void s();o(),l.then(e=>{c===u.current&&M(i,r,e)}).catch(()=>{}).finally(()=>{c===u.current&&(s(),u.current=null)})};return i.validators.set(r.key,()=>{const t=c.current;if(t>0)return null!==e?clearTimeout(e):o(),void(e=setTimeout(l,t));l()}),()=>{i.validators.delete(r.key),null!==e&&(clearTimeout(e),e=null),s(),t?.abort()}},[i,r.key]),Ge(()=>i.validators.get(r.key)?.())}(ze(i,s),g,y,{debounce:u}),x=He(y,g),k=function(t,r){const[n,o]=e.useState(t);return e.useEffect(()=>{if(void 0===r)return;if(0===t.length)return void o(t);if(n.length>0)return void o(t);const e=setTimeout(()=>o(t),r);return()=>clearTimeout(e)},[t,r,n]),void 0===r?t:n}(x,c),C=k[0],O=C?.message,A=Ie(y,g),T=$e(y.emitter,"disabled",()=>y.disabled),_=f??y.mode,D=Ge(e=>{S(y,g,e),("onChange"===_||"all"===_||"onTouched"===_&&N(y,g)||x.length>0&&"onChange"===y.reValidateMode)&&b(),me(y,g,_),ve(y,g,_)});e.useEffect(()=>(y.changeHandlers.set(g.key,D),()=>{y.changeHandlers.get(g.key)===D&&y.changeHandlers.delete(g.key)}),[y,g.key,D]);const P=a?.length?a.join("\n"):void 0;e.useEffect(()=>{if(!P)return;const e=a.map(e=>h(e).key);return ye(y,g.key,e),()=>ge(y,g.key,e)},[y,g.key,P]);const B=Ge(()=>{L(y,g),("onBlur"===_||"onTouched"===_||"all"===_||x.length>0&&"onBlur"===y.reValidateMode)&&b()});return e.useEffect(()=>()=>{!1!==o&&Q(y,g)},[g,y,o]),{form:y,value:A,error:O,errorObject:C,errors:k,onChange:D,onBlur:B,name:g.key,disabled:T||!!l}}function Ye(e){return Ke(e,ot)}const Qe=new WeakMap;function Xe(e){const t=(Qe.get(e)??0)+1;return Qe.set(e,t),`_${t}`}const Ze=new WeakMap;function et(e,t,r){let n=Ze.get(e);n||(n=new Map,Ze.set(e,n)),n.set(t,r)}function tt(e){return e+1}function rt(t,r){const n=e.useContext(r),o=t.form||n;if(!o)throw new Error("no form provided");const s=Je(t.name),i=e.useRef([]),u=e.useCallback(()=>E(o,s)||[],[o,s]),a=e.useCallback(e=>{S(o,s,e)},[o,s]),c=e.useCallback(()=>{const e=u();for(;i.current.length<e.length;)i.current.push(Xe(o));for(;i.current.length>e.length;)i.current.pop();return i.current.map((e,t)=>({id:e,index:t}))},[u,o]),[l,f]=e.useReducer(c,void 0,c);e.useEffect(()=>Be(o.emitter,"change",s,"branch",f),[o.emitter,s]),et(o,s.key,i.current),e.useEffect(()=>(et(o,s.key,i.current),()=>{const e=Ze.get(o);e?.get(s.key)===i.current&&e.delete(s.key)}),[o,s.key]);return{fields:l,append:Ge(e=>{const t=u();i.current.push(Xe(o)),a([...t,e])}),prepend:Ge(e=>{const t=u();i.current.unshift(Xe(o)),a([e,...t])}),insert:Ge((e,t)=>{const r=u();i.current.splice(e,0,Xe(o));const n=[...r.slice(0,e),t,...r.slice(e)];a(n)}),remove:Ge(e=>{const t=u();i.current.splice(e,1);const r=t.filter((t,r)=>r!==e);a(r)}),swap:Ge((e,t)=>{const r=u();[i.current[e],i.current[t]]=[i.current[t],i.current[e]];const n=[...r];[n[e],n[t]]=[n[t],n[e]],a(n)}),move:Ge((e,t)=>{const r=u(),[n]=i.current.splice(e,1);i.current.splice(t,0,n);const o=[...r],[s]=o.splice(e,1);o.splice(t,0,s),a(o)}),replace:Ge(e=>{i.current=e.map(()=>Xe(o)),a([...e])}),update:Ge((e,t)=>{const r=u();if(e<0||e>=r.length)return;const n=[...r];n[e]=t,a(n)})}}function nt(t,r){const n=e.useContext(r),o=t.form||n;if(!o)throw new Error("no form provided");const{id:s}=t,i=Je(t.name),u=e.useCallback(()=>function(e,t){return Ze.get(e)?.get(t)}(o,i.key)?.indexOf(s)??-1,[o,i.key,s]),a=e.useCallback(e=>{const t=E(o,i);return Array.isArray(t)?t[e]:void 0},[o,i]),c=u(),l=a(c),f=e.useRef({index:c,value:l});f.current={index:c,value:l};const d=Ue({computeIndex:u,computeValue:a}),[,p]=e.useReducer(tt,0);e.useEffect(()=>Be(o.emitter,"change",i,"leaf",()=>{const{computeIndex:e,computeValue:t}=d.current,r=e();r===f.current.index&&Object.is(t(r),f.current.value)||p()}),[o.emitter,i,d]);const m=Je([...i.value,c]),h=He(o,m);return{value:l,setValue:Ge(e=>{if(c<0)return;const t=[...E(o,i)??[]];c>=t.length||(t[c]=e,S(o,i,t))}),errors:h,error:h[0]?.message,name:m.key,index:c,form:o}}const ot=e.createContext(null),st=ot.Provider;const it=e.createContext(null),ut=it.Provider;function at(e){return e.replace(/["'[\],\s]+/g,"-").replace(/^-+|-+$/g,"")||"field"}function ct(e,t,r){return{"aria-invalid":!!e||r["aria-invalid"],"aria-describedby":e?[r["aria-describedby"],at(t)].filter(Boolean).join(" "):r["aria-describedby"]}}const lt=r.forwardRef(({validate:e,eventToValue:t,initialValue:n,name:s,asProps:i,renderError:u,as:a,valueToProps:c,form:l,shouldUnregister:f,rules:d,validateDebounce:p,disabled:m,delayError:h,mode:y,...g},v)=>{const b=r.useRef(null),[x,k]=r.useState(0),E=r.useCallback(e=>{b.current=e,function(e,t){"function"==typeof e?e(t):e&&(e.current=t)}(v,e)},[v]),{value:S,onChange:V,onBlur:w,error:C,form:O,name:A,disabled:T}=Ye({name:s,form:l,initialValue:n,shouldUnregister:f,rules:d,validateDebounce:p,delayError:h,disabled:m,mode:y,validate:(...t)=>{const r=b.current;if(!r||"function"!=typeof r.checkValidity||(r.setCustomValidity(""),!1!==r.checkValidity()))return e?e(...t):void 0;k(e=>e+1)}}),_=a||"input";r.useEffect(()=>{const e=b.current;e&&"function"==typeof e.setCustomValidity&&("string"==typeof C?(e.setCustomValidity(C),e.reportValidity()):e.setCustomValidity(""))},[C]),r.useEffect(()=>{x>0&&b.current?.reportValidity()},[x]),r.useEffect(()=>o(O.emitter,"focusError",(e,t)=>{if(e!==A)return;const r=b.current;r&&"function"==typeof r.focus&&(r.focus(),t?.shouldSelect&&"function"==typeof r.select&&r.select())}),[O,A]);const D=t??(e=>e.target.value),j=at(A);return r.createElement(r.Fragment,null,r.createElement(_,{...g,name:A,onBlur:w,...i,...c?c(S):{value:S},...ct(C,A,g),disabled:T,onChange:e=>V(D(e)),ref:E}),C&&u?r.createElement("span",{id:j,role:"alert"},u(C,j)):null)}),ft=r.forwardRef(({name:e,form:t,initialValue:n,shouldUnregister:o,validate:s,rules:i,validateDebounce:u,disabled:a,delayError:c,mode:l,...f},d)=>{const{value:p,onChange:m,onBlur:h,error:y,name:g,disabled:v}=Ye({name:e,form:t,initialValue:n,shouldUnregister:o,validate:s,rules:i,validateDebounce:u,delayError:c,disabled:a,mode:l});return r.createElement("input",{...f,name:g,onBlur:h,type:"checkbox",checked:!!p,...ct(y,g,f),disabled:v,onChange:e=>m(e.target.checked),ref:d})});function dt(e,t){return e?Array.isArray(t)?t:[]:t??""}const pt=r.forwardRef(({name:e,multiple:t,children:n,form:o,initialValue:s,shouldUnregister:i,validate:u,rules:a,validateDebounce:c,disabled:l,delayError:f,mode:d,...p},m)=>{const{value:h,onChange:y,onBlur:g,error:v,name:b,disabled:x}=Ye({name:e,form:o,initialValue:s,shouldUnregister:i,validate:u,rules:a,validateDebounce:c,delayError:f,disabled:l,mode:d});return r.createElement("select",{...p,name:b,onBlur:g,multiple:t,value:dt(t,h),...ct(v,b,p),disabled:x,onChange:e=>y(t?Array.from(e.target.selectedOptions,e=>e.value):e.target.value),ref:m},n)});exports.Checkbox=ft,exports.CheckboxGroupContext=it,exports.CheckboxGroupProvider=ut,exports.Field=lt,exports.Form=function({form:e,context:t,initialValues:n,values:o,onSubmit:s,onValidSubmit:i,onInvalidSubmit:u,shouldFocusError:a,...c}){const l=Ne({initialValues:n,values:o}),f=e||l,d=Ce(f,{onSubmit:s,onValidSubmit:i,onInvalidSubmit:u,shouldFocusError:a}),{Provider:p}=t??ot;return r.createElement(p,{value:f},r.createElement("form",{...c,noValidate:!0,onSubmit:d}))},exports.FormContext=ot,exports.FormProvider=st,exports.Select=pt,exports.VALIDATION_OUTCOME=y,exports.changeValue=function(e,t,r,n){C(e,h(t),r,n)},exports.changeValueByPath=C,exports.clearErrors=B,exports.createForm=g,exports.createFormContext=function(){const t=e.createContext(null);return{context:t,FormProvider:function({form:r,children:n}){return e.createElement(t.Provider,{value:r},n)},useFormContext:function(){const r=e.useContext(t);if(!r)throw new Error("no form provided");return r},useField:function(e){return Ke(e,t)},useFieldArray:function(e){return rt(e,t)},useFieldArrayItem:function(e){return nt(e,t)}}},exports.emitChangeByPath=w,exports.ensureValidate=xe,exports.fieldErrorId=function(e){return at(h(e).key)},exports.getDirtyFields=K,exports.getError=function(e,t){return O(e,h(t))},exports.getErrorByPath=O,exports.getErrors=_,exports.getFieldErrors=function(e,t){return T(e,h(t))},exports.getFieldErrorsByPath=T,exports.getFieldState=function(e,t){const r=h(t),{values:n,touched:o,validating:s}=e,i=n.get(r.key);return{value:E(e,r),error:O(e,r),errors:T(e,r),isDirty:n.has(r.key)&&W(e,r.key,r.value)!==i,isTouched:o.has(r.key),isValidating:s.has(r.key)}},exports.getFirstError=D,exports.getTouchedFields=Y,exports.getValue=function(e,t){return E(e,h(t))},exports.getValueByPath=E,exports.getValues=x,exports.handleSubmit=Ce,exports.hasErrors=te,exports.hasTouched=function(e,t){return N(e,h(t))},exports.hasTouchedByPath=N,exports.incrementSubmitCount=Se,exports.isDirty=R,exports.isTouched=function({touched:e}){return e.size>0},exports.registerFieldValidateDeps=ye,exports.removeField=function(e,t){Q(e,h(t))},exports.removeFieldByPath=Q,exports.reset=function(e,t,r){const o=[];if(r?.keepDirtyValues)for(const[t,r]of e.values){const n=JSON.parse(t);W(e,t,n)!==r&&o.push({segments:n,value:r})}e.initialValues=t,e.parsedValues=void 0,r?.keepErrors||B(e);const{emitter:s,touched:i,values:u,deleted:a,validating:c}=e;u.clear(),a.clear(),J(e),r?.keepTouched||i.clear(),c.clear(),r?.keepIsSubmitting||(e.isSubmitting=!1),r?.keepSubmitCount||(e.submitCount=0),r?.keepIsSubmitted||(e.isSubmitSuccessful=void 0),G(e),b(e);for(const{segments:t,value:r}of o)S(e,h(t),r);n(s,"change"),n(s,"touched"),n(s,"validating"),n(s,"submitting"),n(s,"submitCount"),n(s,"submitSuccessful"),n(s,"reset")},exports.resetField=function(e,t,r){const o=h(t),{emitter:s,values:i,touched:u,errors:l,deleted:f}=e;if(i.delete(o.key),J(e,o.key),void 0!==e.parsedValues){e.parsedValues=c(e.parsedValues,o.value);const t=a(e.initialValues,o.value);void 0!==t&&i.set(o.key,t)}r&&"value"in r&&i.set(o.key,r.value),Z(f,o),n(s,"change"),!r?.keepTouched&&u.delete(o.key)&&n(s,"touched",o),!r?.keepErrors&&l.delete(o.key)&&n(s,"errors",o),G(e),b(e)},exports.revalidateDependentsOnChange=ve,exports.revalidateFormOnChange=me,exports.seedValueByPath=V,exports.setDisabled=function(e,t){e.disabled=t,n(e.emitter,"disabled")},exports.setError=P,exports.setErrorByPath=M,exports.setFocus=function(e,t,r){const{key:o}=h(t);r?n(e.emitter,"focusError",o,r):n(e.emitter,"focusError",o)},exports.setInitialValues=ee,exports.setIsSubmitting=Ee,exports.setServerErrors=function(e,t,r){r?.keepExisting||B(e);for(const[r,n]of Object.entries(t))P(e,r,(Array.isArray(n)?n:[n]).map(e=>({type:"server",message:e})))},exports.setSubmitSuccessful=Ve,exports.setTouched=function(e,t){L(e,h(t))},exports.setTouchedByPath=L,exports.setValidatingByPath=F,exports.setValue=function(e,t,r,n){S(e,h(t),r,n)},exports.setValueByPath=S,exports.subscribe=function(e,t){const{name:r,event:n="change",scope:s="branch",callback:i}=t;if(void 0===r)return o(e.emitter,n,i);const u=(function(e){return Array.isArray(e)&&e.every(e=>"number"!=typeof e)}(r)?r:[r]).map(t=>{const r=h(t);return"errors"===n||"touched"===n?Le(e.emitter,n,r.key,i):Be(e.emitter,n,r,s,i)});return 1===u.length?u[0]:()=>u.forEach(e=>e())},exports.trigger=async function(e,t){const r=t=>m(e.emitter,"validating",()=>void 0===t?ce(e):t.every(t=>!e.validating.has(t)),()=>!1);if(void 0===t)return e.validators.forEach(e=>e()),await r(),e.validate&&await de(e),!te(e);const n="string"==typeof t||re(t)?[h(t).key]:t.map(e=>h(e).key);return n.forEach(t=>e.validators.get(t)?.()),await r(n),n.every(t=>!e.errors.has(t))},exports.unregisterFieldValidateDeps=ge,exports.unsetValidatingByPath=j,exports.useCanSubmit=function(t){const{emitter:r}=t;return Re(e.useCallback(e=>{const t=o(r,"errors",e),n=o(r,"submitting",e);return()=>{t(),n()}},[r]),()=>!t.isSubmitting&&!te(t))},exports.useCheckboxGroupContext=function(){const t=e.useContext(it);if(!t)throw new Error("no group provided");return t},exports.useDirtyFields=function(e){return $e(e.emitter,"change",K.bind(null,e))},exports.useError=function(e,t){return qe(e,h(t))?.message},exports.useErrorByPath=qe,exports.useField=Ye,exports.useFieldArray=function(e){return rt(e,ot)},exports.useFieldArrayItem=function(e){return nt(e,ot)},exports.useFieldErrors=function(e,t){return He(e,h(t))},exports.useFieldErrorsByPath=He,exports.useForm=Ne,exports.useFormContext=function(){const t=e.useContext(ot);if(!t)throw new Error("no form provided");return t},exports.useHasErrors=function(e){return $e(e.emitter,"errors",te.bind(null,e))},exports.useIsDirty=function(e){return $e(e.emitter,"change",R.bind(null,e))},exports.useIsSubmitting=function(e){return $e(e.emitter,"submitting",()=>e.isSubmitting)},exports.useSubmitCount=function(e){return $e(e.emitter,"submitCount",()=>e.submitCount)},exports.useTouched=function(e,t){return We(e,h(t))},exports.useTouchedByPath=We,exports.useTouchedFields=function(e){return $e(e.emitter,"touched",Y.bind(null,e))},exports.useValue=function(e,t){return Ie(e,h(t))},exports.useValueByPath=Ie,exports.useWatch=$e,exports.validate=ke;
|
|
1
|
+
"use strict";var e=require("@for-fun/event-emitter"),t=require("react");function r(e){var t=Object.create(null);return e&&Object.keys(e).forEach(function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}}),t.default=e,Object.freeze(t)}var n=r(t);const o=new Map;function i(e){if(Array.isArray(e))return e;const t=o.get(e);if(t)return t;const r=function(e){const t=[];let r="";const n=()=>{if(s(r)){const n=[...t.map(String),r].join("."),o=t.reduce((e,t)=>e+("number"==typeof t?`[${t}]`:`${e?".":""}${t}`),"");throw new TypeError(`Numeric path segment must use bracket notation: "${n}" → "${o}[${r}]" (path: ${e})`)}t.push(r),r=""};for(let o=0;o<e.length;o++){const i=e[o];if("."===i)""!==r&&n();else if("["===i){""!==r&&n();const i=e[o+1];if('"'===i||"'"===i){const r=e.indexOf(i,o+2);if(-1===r)throw new TypeError(`Unterminated quote in path: ${e}`);if("]"!==e[r+1])throw new TypeError(`Expected "]" after quoted segment in path: ${e}`);t.push(e.slice(o+2,r)),o=r+1}else{const r=e.indexOf("]",o+1);if(-1===r)throw new TypeError(`Unterminated bracket in path: ${e}`);const n=e.slice(o+1,r);t.push(s(n)?Number(n):n),o=r}}else r+=i}""===r&&0!==t.length||n();return t}(e);if(o.size>=1e4){const e=o.keys().next();e.done||o.delete(e.value)}return o.set(e,r),r}const s=e=>/^-?\d+$/.test(e);function u(e,t){return t.reduce((e,t)=>{if(null!=e)return e[t]},e)}function a(e,t){if(!t.length||null==e)return e;const[r,...n]=t;if(n.length){const t=a(e[r],n);return t===e[r]?e:c(e,[r],t)}if(Array.isArray(e)){if(!(r in e))return e;const t=e.slice();return delete t[r],t}if("object"!=typeof e||!(r in e))return e;const o={...e};return delete o[r],o}function c(e,t,r){if(!t.length)return r;const[n,...o]=t,i="number"==typeof n?n:Array.isArray(e)&&"string"==typeof n&&s(n)?Number(n):void 0;if(void 0!==i){const t=Array.isArray(e)?e.slice():[];return t[i]=c(t[i],o,r),t}return{...e,[n]:c(e&&e[n],o,r)}}function l(e,t,r,n){if(!t.length)return r;let o=e,i=null,u="";for(let a=0;a<t.length;a++){const c=t[a];if(!n.has(o)){let t;t="number"==typeof c||Array.isArray(o)&&"string"==typeof c&&s(c)?Array.isArray(o)?o.slice():[]:{...o},n.add(t),0===a?e=t:i[u]=t,o=t}a===t.length-1?o[c]=r:(i=o,u=c,o=o[c])}return e}function d(e){return e&&"function"==typeof e.then}function f(e,t){if(Object.is(e,t))return!0;if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(!e||!t||"object"!=typeof e||"object"!=typeof t)return!1;const r=Array.isArray(e);if(r!==Array.isArray(t))return!1;if(r){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(!f(e[r],t[r]))return!1;return!0}const n=Object.getPrototypeOf(e);if(n!==Object.prototype&&null!==n)return!1;if(Object.getPrototypeOf(t)!==n)return!1;const o=Object.keys(e),i=Object.keys(t);if(o.length!==i.length)return!1;for(const r of o)if(!f(e[r],t[r]))return!1;return!0}function m(t,r,n,o){return new Promise((i,s)=>{if(o())return void s();if(n())return void i();const u=e.on(t,r,()=>{if(o())return u(),void s();n()&&(u(),i())})})}function p(e){const t=i(e);return{value:t,key:JSON.stringify(t)}}const h=new WeakMap;function g(e){const t=h.get(e);t&&t.version++}const y=new WeakMap;function v(e,t,r){const n=y.get(e);return n?.has(t)?n.get(t):u(e.initialValues,r)}function b(e,{key:t},r){let n=y.get(e);n||(n=new Map,y.set(e,n)),n.set(t,r)}function x(e,{key:t}){const r=y.get(e);if(!r?.size)return;const n=`${t.slice(0,-1)},`;for(const e of r.keys())e.startsWith(n)&&r.delete(e)}function k(e,t){const r=y.get(e);r&&(void 0===t?r.clear():r.delete(t))}const S=new WeakMap;function E(e){const t=S.get(e);t&&t.version++}function V(e){return e.some(e=>"number"==typeof e)}function w(e){return!!e&&"object"==typeof e&&"string"==typeof e.type&&"string"==typeof e.message}const C="_form",O=Symbol("validation-outcome");function A({errors:e},t){return e.get(t.key)?.[0]}const F=[];function T({errors:e},t){return e.get(t.key)??F}function _({errors:e}){const t=[];for(const[r,n]of e){const e=JSON.parse(r).join(".");for(const{type:r,message:o}of n)t.push({path:e,type:r,message:o})}return t}function D({errors:e}){return e.values().next().value?.[0]?.message}function L(e,t,r){j(e,p(t),r)}function j({emitter:t,errors:r},n,o){const i=function(e){if("string"==typeof e)return e?[{type:"custom",message:e}]:void 0;if(w(e))return[e];if(!e)return;const t=[];return e.forEach(e=>{"string"==typeof e&&e?t.push({type:"custom",message:e}):w(e)&&t.push(e)}),t.length?t:void 0}(o);i?r.set(n.key,i):r.delete(n.key),e.emit(t,"errors",n)}function M(t,r){const{emitter:n,errors:o}=t;if(void 0===r)return o.clear(),void e.emit(n,"errors");const i="string"==typeof r||V(r)?[p(r)]:r.map(e=>p(e));for(const{key:e}of i)o.delete(e);for(const t of i)e.emit(n,"errors",t)}function P({errors:e}){return e.size>0}function B({emitter:t,touched:r},n){r.has(n.key)||(r.add(n.key),e.emit(t,"touched",n))}function R({touched:e},t){return e.has(t.key)}function N({touched:e}){return Array.from(e,e=>JSON.parse(e).join("."))}function I(e){let t=h.get(e);return t?t.version>0&&(t.result=$(e),t.version=0):(t={version:0,result:$(e)},h.set(e,t)),t.result}function $(e){const{initialValues:t,parsedValues:r,values:n,deleted:o}=e,i=new Set;let s=r??t;for(const[e,t]of n)s=l(s,JSON.parse(e),t,i);for(const e of o)s=a(s,JSON.parse(e));return s}function q({initialValues:e,parsedValues:t,values:r,deleted:n},o){const{key:i,value:s}=o;if(r.has(i))return r.get(i);if(!n.has(i)){for(let e=s.length-1;e>0;e--){const t=JSON.stringify(s.slice(0,e));if(r.has(t))return u(r.get(t),s.slice(e))}return u(t??e,s)}}function W(t,r,n,o){const{emitter:i,values:s,deleted:u}=t;s.set(r.key,n),G(s,r),H(u,r),x(t,r),!1===o?.shouldDirty&&b(t,r,n),E(t),g(t),o?.shouldTouch&&B(t,r),o?.shouldValidate&&t.validators.get(r.key)?.(),e.emit(i,"change",r)}function J(e,t,r){const{values:n,deleted:o}=e;n.set(t.key,r),G(n,t),H(o,t),x(e,t),E(e),g(e)}function U({emitter:t},r){e.emit(t,"change",r)}function z(t,r,n){const{key:o,value:i}=r,{emitter:s,values:u,touched:a,errors:c,validating:l,deleted:d}=t;n?.keepValue||n?.keepDirty||(u.delete(o),k(t,o),function(e,t){for(let r=1;r<t.length;r++)if(e.has(JSON.stringify(t.slice(0,r))))return!0;const r=`${JSON.stringify(t).slice(0,-1)},`;for(const t of e.keys())if(t.startsWith(r))return!0;return!1}(u,i)||d.add(o)),n?.keepTouched||a.delete(o),n?.keepError||c.delete(o),l.delete(o),E(t),g(t),e.emit(s,"change",r),e.emit(s,"touched",r),e.emit(s,"errors",r),e.emit(s,"validating",r)}function G(e,{key:t}){if(!e.size)return;const r=`${t.slice(0,-1)},`;for(const t of e.keys())t.startsWith(r)&&e.delete(t)}function H(e,{key:t}){if(e.size)for(const r of e)(r===t||r.startsWith(`${t.slice(0,-1)},`)||t.startsWith(`${r.slice(0,-1)},`))&&e.delete(r)}function K(t,r){t.initialValues===r||f(t.initialValues,r)||(t.initialValues=r,t.parsedValues=void 0,t.values.clear(),t.deleted.clear(),k(t),E(t),g(t),e.emit(t.emitter,"change"))}function Y(e,t,r){if(null!==e&&"object"==typeof e){if(Array.isArray(e)){for(let n=0;n<e.length;n++)Y(e[n],[...t,n],r);return}const n=Object.keys(e);if(n.length>0){for(const o of n)Y(e[o],[...t,o],r);return}}r.push({segments:t,value:e})}function Q(e){let t=!1;return X(e,()=>{t=!0}),t}function X(e,t){for(const[r,n]of e.values){const o=JSON.parse(r);v(e,r,o)!==n&&t(o.join("."))}}function Z(e){const t={};return X(e,e=>{t[e]=!0}),t}function ee(e){let t=S.get(e);if(t){if(t.version>0){const r=Z(e);(function(e,t){const r=Object.keys(e);return r.length===Object.keys(t).length&&r.every(e=>!0===t[e])})(t.result,r)||(t.result=r),t.version=0}}else t={version:0,result:Z(e)},S.set(e,t);return t.result}function te({emitter:t,validating:r},n){r.delete(n.key),e.emit(t,"validating",n)}function re({emitter:t,validating:r},n){r.add(n.key),e.emit(t,"validating",n)}function ne(e,t,r){let n=null,o=null,i=!1,s=null,u=null;const a=e=>void 0!==e&&!(Array.isArray(e)&&0===e.length),c=()=>{i||(i=!0,re(e,t))},l=()=>{i&&(i=!1,te(e,t))},f=()=>{const n=r.sync();if(!n)return!1;const o=n(q(e,t),{form:e,path:t});return a(o)?(j(e,t,o),u="sync",!0):(r.validate()&&"sync"!==u||(j(e,t,void 0),u=null),!1)},m=()=>{null!==n&&(clearTimeout(n),n=null),o?.abort(),s={}},p=()=>{const n=r.validate();if(!n)return void l();o?.abort(),o=new AbortController;const i=s={};let f;try{f=n(q(e,t),{form:e,path:t,signal:o.signal})}catch(e){throw l(),e}if(!d(f))return j(e,t,f),u=a(f)?"validator":null,void l();c(),f.then(r=>{s===i&&(j(e,t,r),u=a(r)?"validator":null)}).catch(()=>{}).finally(()=>{s===i&&(l(),s=null)})},h=()=>{if(n=null,f())return m(),void l();p()};return e.validators.set(t.key,()=>{if(f())return m(),void l();if(!r.validate())return;const e=r.debounce();if(e>0)return null!==n?clearTimeout(n):c(),void(n=setTimeout(h,e));p()}),()=>{e.validators.delete(t.key),null!==n&&(clearTimeout(n),n=null),l(),o?.abort()}}function oe(e,t){t.forEach(t=>B(e,p(JSON.parse(t))))}function ie(e,t,r=[],n){Object.entries(t).forEach(([t,o])=>{const u=[...r,...s(t)?[t]:i(t)];"string"==typeof o?o&&(L(e,u,o),se(e,u,n)):Array.isArray(o)||w(o)?(L(e,u,o),se(e,u,n)):o&&"object"==typeof o&&ie(e,o,u,n)})}function se(e,t,r){if(!r)return;const n=p(t),o=e.errors.get(n.key);o&&r.set(n.key,o)}function ue(t,r){const n=t.validateDeps?function(e){let t=ae.get(e);t||(t=new Map,ae.set(e,t));return t}(t):void 0;if(n&&(!function(t,r){for(const[n,o]of r){t.errors.get(n)===o&&(t.errors.delete(n),e.emit(t.emitter,"errors",p(JSON.parse(n))))}}(t,n),n.clear()),r){if("object"==typeof r&&O in r){const o=r;return o.errors&&ie(t,o.errors,[],n),void function(t,r){void 0!==r&&r!==t.parsedValues&&(t.parsedValues=r,g(t),e.emit(t.emitter,"change"))}(t,o.values)}ie(t,r,[],n)}}const ae=new WeakMap;const ce="__form_validate__";function le(e){for(const t of e.validating)if(t!==ce)return!1;return!0}const de=Symbol("form-validate-settled"),fe=new WeakMap;function me(t){const r=t.validate;if(!r)return Promise.resolve();const n=t.validateDebounce??0;if(n<=0){const e=new AbortController;return Promise.resolve(r(I(t),{form:t,signal:e.signal})).then(e=>{ue(t,e)})}const o=function(e){let t=fe.get(e);return t||(t={timer:null,controller:null,round:null,marked:!1,waiters:[]},fe.set(e,t)),t}(t);return null!==o.timer?clearTimeout(o.timer):(o.marked=!0,t.validating.add(ce),e.emit(t.emitter,"validating")),o.timer=setTimeout(()=>{o.timer=null;const e=o.round={};(function(e,t,r){const n=e.validate;if(!n)return Promise.resolve();t.controller?.abort();const o=t.controller=new AbortController;let i;try{i=Promise.resolve(n(I(e),{form:e,signal:o.signal}))}catch(e){i=Promise.reject(e)}return i.then(n=>{t.round===r&&ue(e,n)},e=>{if(t.round===r)throw e})})(t,o,e).then(()=>pe(t,o,e,de),r=>pe(t,o,e,r))},n),new Promise((e,t)=>{o.waiters.push({resolve:e,reject:t})})}function pe(t,r,n,o){if(r.round!==n)return;if(r.round=null,null!==r.timer)return;r.marked&&(r.marked=!1,t.validating.delete(ce),e.emit(t.emitter,"validating"));const i=r.waiters;r.waiters=[];for(const e of i)o===de?e.resolve():e.reject(o)}function he(e,t,r){e.validateDeps?.has(t.key)&&e.validate&&("onChange"===r||"all"===r||"onTouched"===r&&R(e,t)||"onChange"===e.reValidateMode&&function(e){const t=ae.get(e);if(!t)return!1;for(const[r,n]of t)if(e.errors.get(r)===n)return!0;return!1}(e))&&me(e).catch(()=>{})}const ge=new WeakMap;function ye(e,t,r){let n=ge.get(e);n||(n=new Map,ge.set(e,n));for(const e of r){let r=n.get(e);r||(r=new Set,n.set(e,r)),r.add(t)}}function ve(e,t,r){const n=ge.get(e);if(n)for(const e of r){const r=n.get(e);r?.delete(t)&&(r.size||n.delete(e))}}function be(e,t,r){const n=ge.get(e)?.get(t.key);if(n?.size)for(const o of n)o!==t.key&&("onChange"===r||"all"===r||"onTouched"===r&&R(e,t)||"onChange"===e.reValidateMode&&e.errors.has(o))&&e.validators.get(o)?.()}function xe(e){const t=new Error(D(e));return t.errors=_(e),t}async function ke(e){if(e.validators.forEach(e=>e()),await m(e.emitter,"validating",()=>le(e),()=>P(e)).catch(()=>{throw xe(e)}),e.validate&&(await me(e),P(e)))throw xe(e)}async function Se(e){return ke(e).catch(e=>e.message)}const Ee=new WeakMap;function Ve(e,t,r,n){!1===n?.shouldDirty&&b(e,t,r),Ee.get(e)?.get(t.key)?Oe(e,t,r):W(e,t,r,n)}function we(e,t,r){let n=Ee.get(e);n||(n=new Map,Ee.set(e,n));const o=n.has(t.key),i={};return n.set(t.key,{mode:r,token:i}),{token:i,displaced:o}}function Ce(e,t,r){const n=Ee.get(e),o=n?.get(t.key);n&&o&&o.token===r&&n.delete(t.key)}function Oe(e,t,r){W(e,t,r);const n=Ee.get(e)?.get(t.key);n&&function(e,t,r){("onChange"===r||"all"===r||"onTouched"===r&&R(e,t)||T(e,t).length>0&&"onChange"===e.reValidateMode)&&e.validators.get(t.key)?.(),he(e,t,r),be(e,t,r)}(e,t,n.mode??e.mode)}function Ae(e,t){B(e,t);const r=Ee.get(e)?.get(t.key);if(!r)return;const n=r.mode??e.mode;("onBlur"===n||"onTouched"===n||"all"===n||T(e,t).length>0&&"onBlur"===e.reValidateMode)&&e.validators.get(t.key)?.()}function Fe(t,r){t.isSubmitting=r,e.emit(t.emitter,"submitting")}function Te(t){t.submitCount++,e.emit(t.emitter,"submitCount")}function _e(t,r){t.isSubmitSuccessful=r,e.emit(t.emitter,"submitSuccessful")}function De(e){if(e.startsWith("["))try{const t=JSON.parse(e);if(Array.isArray(t))return t.join(".")}catch{}return e}function Le(t,r){const{onSubmit:n,onValidSubmit:o,onInvalidSubmit:i,onAction:s,shouldFocusError:u=!0}=r??{};return async r=>{r&&"function"==typeof r.preventDefault&&r.preventDefault();const a=r?.currentTarget;Fe(t,!0),Te(t);const c=I(t);if(a&&"function"==typeof a.checkValidity&&!1===a.checkValidity()){if(a.reportValidity(),u&&"function"==typeof a.querySelector){const e=a.querySelector(":invalid");e&&"function"==typeof e.focus&&e.focus()}return Fe(t,!1),_e(t,!1),void(i&&i(function(e){const t=[],{elements:r}=e;for(let e=0;e<r.length;e++){const n=r[e];n.name&&"function"==typeof n.checkValidity&&!n.checkValidity()&&t.push({path:De(n.name),type:"native",message:n.validationMessage})}return t}(a),c))}if(await Se(t)){if(Fe(t,!1),_e(t,!1),u){const r=t.errors.keys().next().value;void 0!==r&&e.emit(t.emitter,"focusError",r)}i&&i(_(t),c)}else try{const e=I(t);n&&await n(e,r),o&&await o(e,r),s&&await s(e,r),_e(t,!0)}catch{_e(t,!1)}finally{Fe(t,!1)}}}function je(t){const r=e.create();e.setMaxListeners(r,0);let n=t?.initialValues??{};"function"==typeof n&&(n=n());const o={emitter:r,...t,mode:t?.mode??"onSubmit",reValidateMode:t?.reValidateMode??"onChange",disabled:t?.disabled??!1,validateDeps:t?.validateDeps?new Set(t.validateDeps.map(e=>p(e).key)):void 0,initialValues:{},values:new Map,deleted:new Set,errors:new Map,touched:new Set,validators:new Map,validating:new Set,parsedValues:void 0,isSubmitting:!1,submitCount:0,isSubmitSuccessful:void 0,isLoading:!1};return d(n)?(o.isLoading=!0,e.emit(r,"loading"),Promise.resolve(n).then(t=>{o.isLoading=!1,e.emit(r,"loading"),K(o,t??{})},t=>{o.isLoading=!1,e.emit(r,"loading")})):o.initialValues=n,o}function Me(e,t){switch(e){case"required":return"This field is required";case"min":return`Must be at least ${t}`;case"max":return`Must be at most ${t}`;case"minLength":return`Must be at least ${t} characters`;case"maxLength":return`Must be at most ${t} characters`;case"pattern":return"Invalid format";default:return"Invalid value"}}function Pe(e){return t=>{if(e.required&&(""===t||null==t))return[{type:"required",message:"string"==typeof e.required?e.required:Me("required")}];const r=[],n=(t,r)=>e.messages?.[t]??Me(t,r);if(void 0!==e.min){const o=Number(t);!Number.isNaN(o)&&o<e.min&&r.push({type:"min",message:n("min",e.min)})}if(void 0!==e.max){const o=Number(t);!Number.isNaN(o)&&o>e.max&&r.push({type:"max",message:n("max",e.max)})}return void 0!==e.minLength&&"string"==typeof t&&t.length<e.minLength&&r.push({type:"minLength",message:n("minLength",e.minLength)}),void 0!==e.maxLength&&"string"==typeof t&&t.length>e.maxLength&&r.push({type:"maxLength",message:n("maxLength",e.maxLength)}),e.pattern&&!e.pattern.value.test(t)&&r.push({type:"pattern",message:e.messages?.pattern??e.pattern.message??Me("pattern")}),r.length?r:void 0}}var Be,Re={exports:{}},Ne={};var Ie,$e,qe={};var We=($e||($e=1,"production"===process.env.NODE_ENV?Re.exports=function(){if(Be)return Ne;Be=1;var e=t,r="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},n=e.useState,o=e.useEffect,i=e.useLayoutEffect,s=e.useDebugValue;function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!r(e,n)}catch(e){return!0}}var a="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var r=t(),a=n({inst:{value:r,getSnapshot:t}}),c=a[0].inst,l=a[1];return i(function(){c.value=r,c.getSnapshot=t,u(c)&&l({inst:c})},[e,r,t]),o(function(){return u(c)&&l({inst:c}),e(function(){u(c)&&l({inst:c})})},[e]),s(r),r};return Ne.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:a,Ne}():Re.exports=(Ie||(Ie=1,"production"!==process.env.NODE_ENV&&function(){function e(e){var t=e.getSnapshot;e=e.value;try{var r=t();return!n(e,r)}catch(e){return!0}}"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());var r=t,n="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},o=r.useState,i=r.useEffect,s=r.useLayoutEffect,u=r.useDebugValue,a=!1,c=!1,l="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(t,l){a||void 0===r.startTransition||(a=!0,console.error("You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release."));var d=l();if(!c){var f=l();n(d,f)||(console.error("The result of getSnapshot should be cached to avoid an infinite loop"),c=!0)}var m=(f=o({inst:{value:d,getSnapshot:l}}))[0].inst,p=f[1];return s(function(){m.value=d,m.getSnapshot=l,e(m)&&p({inst:m})},[t,d,l]),i(function(){return e(m)&&p({inst:m}),t(function(){e(m)&&p({inst:m})})},[t]),u(d),d};qe.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:l,"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error())}()),qe)),Re.exports);function Je(e,t){return e.startsWith(`${t.slice(0,-1)},`)}function Ue(t,r,n,o,i){const{key:s}=n;return e.on(t,r,e=>{(void 0===e||e.key===s||Je(s,e.key)||"branch"===o&&Je(e.key,s))&&i()})}function ze(t,r,n,o){return e.on(t,r,e=>{void 0!==e&&e.key!==n||o()})}function Ge(e){const[r]=t.useState(()=>{const t=je(e);return e&&void 0!==e.values&&K(t,e.values),t}),n=e&&e.initialValues,o=e&&e.values,i=t.useRef(null);null===i.current&&(i.current={done:!1,source:void 0}),t.useEffect(()=>{if(void 0===n)return;if("function"==typeof n||d(n))return;const e=i.current;e.done&&(e.source===n||f(e.source,n))||(e.done=!0,e.source=n,K(r,n))},[r,n]);const s=t.useRef(null);return null===s.current&&(s.current={done:!1,source:void 0}),t.useEffect(()=>{if(void 0===o)return;const e=s.current;e.done&&(e.source===o||f(e.source,o))||(e.done=!0,e.source=o,K(r,o))},[r,o]),r}function He(e,r,n){const o=t.useRef(null);null===o.current&&(o.current={hasValue:!1});const i=o.current,s=t.useRef(r);s.current=r;const u=t.useRef(n);u.current=n;const a=t.useCallback(()=>(i.hasValue||(i.value=s.current(),i.hasValue=!0),i.value),[i]),c=t.useCallback(t=>{i.hasValue=!1;return e(()=>{const e=u.current;if(e&&i.hasValue){const r=s.current();if(e(i.value,r))return;return i.value=r,void t()}i.hasValue=!1,t()})},[e,i]);return We.useSyncExternalStore(c,a,a)}function Ke(r,n,o,i){const s="emitter"in r?r.emitter:r;return He(t.useCallback(t=>e.on(s,n,t),[s,n]),o,i)}function Ye(e,r){const{emitter:n}=e,{key:o}=r;return He(t.useCallback(e=>Ue(n,"change",r,"leaf",e),[n,o]),q.bind(null,e,r))}function Qe(e,r){const{emitter:n}=e,{key:o}=r;return He(t.useCallback(e=>ze(n,"touched",o,e),[n,o]),R.bind(null,e,r))}function Xe(e,r){const{emitter:n}=e,{key:o}=r;return He(t.useCallback(e=>ze(n,"errors",o,e),[n,o]),A.bind(null,e,r))}function Ze(e,r){const{emitter:n}=e,{key:o}=r;return He(t.useCallback(e=>ze(n,"errors",o,e),[n,o]),T.bind(null,e,r))}const et=["change","errors","touched","validating","submitting","submitCount","submitSuccessful","disabled","loading"];function tt(e,t){const r=e.touchedFields.length===t.touchedFields.length&&e.touchedFields.every((e,r)=>e===t.touchedFields[r]);return e.isDirty===t.isDirty&&e.dirtyFields===t.dirtyFields&&e.isTouched===t.isTouched&&r&&e.hasErrors===t.hasErrors&&e.isValid===t.isValid&&e.isSubmitting===t.isSubmitting&&e.isValidating===t.isValidating&&e.isSubmitSuccessful===t.isSubmitSuccessful&&e.submitCount===t.submitCount&&e.isLoading===t.isLoading&&e.disabled===t.disabled}function rt(e){const r=t.useMemo(()=>p(i(e)),[e]);return t.useMemo(()=>r,[r.key])}function nt(e){const r=t.useRef(e);return r.current=e,r}function ot(e){const r=nt(e);return t.useCallback((...e)=>r.current(...e),[r])}function it({form:r,name:n,initialValue:o,shouldUnregister:i,validate:s,rules:u,validateDebounce:a,validateDeps:c,delayError:l,disabled:f,uncontrolled:m,mode:h},g){const y=t.useContext(g),v=r||y;if(!v)throw new Error("no form provided");const b=rt(n),x=t.useRef(!1);void 0!==o&&void 0===q(v,b)&&(J(v,b,o),x.current=!0),t.useEffect(()=>{x.current&&(x.current=!1,U(v,b))});!function(e,r,n,o){const i=t.useContext(pt),s=n||i;if(!s)throw new Error("no form provided");const u=t.useRef(e);u.current=e;const a=t.useRef(o?.debounce??0);a.current=o?.debounce??0;const c=t.useRef(o?.sync);c.current=o?.sync,t.useEffect(()=>ne(s,r,{validate:()=>u.current,debounce:()=>a.current,sync:()=>c.current}),[s,r.key]),ot(()=>s.validators.get(r.key)?.())}(function(e,t){if(!e||!function(e){return void 0!==e.required||void 0!==e.min||void 0!==e.max||void 0!==e.minLength||void 0!==e.maxLength||void 0!==e.pattern}(e))return t;const r=Pe(e);return t?(e,n)=>{const o=r(e,n),i=e=>{const t=[...o??[]];return Array.isArray(e)?t.push(...e):e&&t.push(e),t.length?t:void 0},s=t(e,n);return d(s)?s.then(i):i(s)}:r}(u?{...u,required:void 0}:void 0,s),b,v,{debounce:a,sync:u&&void 0!==u.required?Pe({required:u.required}):void 0});const k=function(e,r){const[n,o]=t.useState(e);return t.useEffect(()=>{if(void 0===r)return;if(0===e.length)return void o(e);if(n.length>0)return void o(e);const t=setTimeout(()=>o(e),r);return()=>clearTimeout(t)},[e,r,n]),void 0===r?e:n}(Ze(v,b),l),S=k[0],E=S?.message,V=function(e,r,n){const o=t.useRef({has:!1,value:void 0}),i=t.useCallback(()=>n?(o.current.has||(o.current={has:!0,value:q(e,r)}),o.current.value):q(e,r),[n,e,r]);return He(t.useCallback(t=>n?()=>{}:Ue(e.emitter,"change",r,"leaf",t),[n,e.emitter,r]),i)}(v,b,!!m),w=Ke(v,"disabled",()=>v.disabled),C=ot(e=>Oe(v,b,e)),O=ot(()=>Ae(v,b));t.useEffect(()=>{const{token:e,displaced:t}=we(v,b,h);return()=>Ce(v,b,e)},[v,b.key,h]);const A=c?.length?c.join("\n"):void 0;t.useEffect(()=>{if(!A)return;const e=c.map(e=>p(e).key);return ye(v,b.key,e),()=>ve(v,b.key,e)},[v,b.key,A]);const F=t.useRef(null),T=t.useCallback(e=>{F.current=e},[]);return t.useEffect(()=>e.on(v.emitter,"focusError",(e,t)=>{if(e!==b.key)return;const r=F.current;r&&"function"==typeof r.focus&&(r.focus(),t?.shouldSelect&&"function"==typeof r.select&&r.select())}),[v,b.key]),t.useEffect(()=>()=>{!1!==(i??v.shouldUnregister)&&z(v,b)},[b,v,i]),{form:v,value:V,error:E,errorObject:S,errors:k,onChange:C,onBlur:O,name:b.key,disabled:w||!!f,focusRef:T}}function st(e){return it(e,pt)}const ut=new WeakMap;function at(e){const t=(ut.get(e)??0)+1;return ut.set(e,t),`_${t}`}const ct=new WeakMap;function lt(e,t,r){let n=ct.get(e);n||(n=new Map,ct.set(e,n)),n.set(t,r)}function dt(e){return e+1}function ft(e,r){const n=t.useContext(r),o=e.form||n;if(!o)throw new Error("no form provided");const i=rt(e.name),s=t.useRef([]),u=t.useCallback(()=>q(o,i)||[],[o,i]),a=t.useCallback(e=>{W(o,i,e)},[o,i]),c=t.useCallback(()=>{const e=u();for(;s.current.length<e.length;)s.current.push(at(o));for(;s.current.length>e.length;)s.current.pop();return s.current.map((e,t)=>({id:e,index:t}))},[u,o]),[l,d]=t.useReducer(c,void 0,c);t.useEffect(()=>Ue(o.emitter,"change",i,"branch",d),[o.emitter,i]),lt(o,i.key,s.current),t.useEffect(()=>(lt(o,i.key,s.current),()=>{const e=ct.get(o);e?.get(i.key)===s.current&&e.delete(i.key)}),[o,i.key]);return{fields:l,append:ot(e=>{const t=u();s.current.push(at(o)),a([...t,e])}),prepend:ot(e=>{const t=u();s.current.unshift(at(o)),a([e,...t])}),insert:ot((e,t)=>{const r=u();s.current.splice(e,0,at(o));const n=[...r.slice(0,e),t,...r.slice(e)];a(n)}),remove:ot(e=>{const t=u();s.current.splice(e,1);const r=t.filter((t,r)=>r!==e);a(r)}),swap:ot((e,t)=>{const r=u();[s.current[e],s.current[t]]=[s.current[t],s.current[e]];const n=[...r];[n[e],n[t]]=[n[t],n[e]],a(n)}),move:ot((e,t)=>{const r=u(),[n]=s.current.splice(e,1);s.current.splice(t,0,n);const o=[...r],[i]=o.splice(e,1);o.splice(t,0,i),a(o)}),replace:ot(e=>{s.current=e.map(()=>at(o)),a([...e])}),update:ot((e,t)=>{const r=u();if(e<0||e>=r.length)return;const n=[...r];n[e]=t,a(n)})}}function mt(e,r){const n=t.useContext(r),o=e.form||n;if(!o)throw new Error("no form provided");const{id:i}=e,s=rt(e.name),u=t.useCallback(()=>function(e,t){return ct.get(e)?.get(t)}(o,s.key)?.indexOf(i)??-1,[o,s.key,i]),a=t.useCallback(e=>{const t=q(o,s);return Array.isArray(t)?t[e]:void 0},[o,s]),c=u(),l=a(c),d=t.useRef({index:c,value:l});d.current={index:c,value:l};const f=nt({computeIndex:u,computeValue:a}),[,m]=t.useReducer(dt,0);t.useEffect(()=>Ue(o.emitter,"change",s,"leaf",()=>{const{computeIndex:e,computeValue:t}=f.current,r=e();r===d.current.index&&Object.is(t(r),d.current.value)||m()}),[o.emitter,s,f]);const p=rt([...s.value,c]),h=Ze(o,p);return{value:l,setValue:ot(e=>{if(c<0)return;const t=[...q(o,s)??[]];c>=t.length||(t[c]=e,W(o,s,t))}),errors:h,error:h[0]?.message,name:p.key,index:c,form:o}}const pt=t.createContext(null),ht=pt.Provider;const gt=t.createContext(null),yt=gt.Provider;function vt(e,t,r){if(null!=r)if(Array.isArray(r))for(const n of r)vt(e,t,n);else if("undefined"!=typeof FileList&&r instanceof FileList)for(let n=0;n<r.length;n++)e.append(t,r.item(n));else"undefined"!=typeof File&&r instanceof File?e.append(t,r,r.name):"undefined"!=typeof Blob&&r instanceof Blob?e.append(t,r):r instanceof Date?e.append(t,r.toISOString()):e.append(t,"object"==typeof r?JSON.stringify(r):String(r))}function bt(e){return e.replace(/["'[\],\s]+/g,"-").replace(/^-+|-+$/g,"")||"field"}function xt(e,t,r){return{"aria-invalid":!!e||r["aria-invalid"],"aria-describedby":e?[r["aria-describedby"],bt(t)].filter(Boolean).join(" "):r["aria-describedby"]}}const kt=n.forwardRef(({validate:e,eventToValue:t,initialValue:r,name:o,asProps:i,renderError:s,as:u,valueToProps:a,form:c,shouldUnregister:l,rules:d,validateDebounce:f,disabled:m,delayError:p,mode:h,uncontrolled:g,...y},v)=>{const b=n.useRef(null),[x,k]=n.useState(0),{value:S,onChange:E,onBlur:V,error:w,name:C,disabled:O,focusRef:A}=st({name:o,form:c,initialValue:r,shouldUnregister:l,rules:d,validateDebounce:f,delayError:p,disabled:m,mode:h,uncontrolled:g||"file"===y.type,validate:(...t)=>{const r=b.current;if(!r||"function"!=typeof r.checkValidity||(r.setCustomValidity(""),!1!==r.checkValidity()))return e?e(...t):void 0;k(e=>e+1)}}),F=n.useCallback(e=>{b.current=e,A(e),function(e,t){"function"==typeof e?e(t):e&&(e.current=t)}(v,e)},[v,A]),T=u||"input";n.useEffect(()=>{const e=b.current;e&&"function"==typeof e.setCustomValidity&&("string"==typeof w?(e.setCustomValidity(w),e.reportValidity()):e.setCustomValidity(""))},[w]),n.useEffect(()=>{x>0&&b.current?.reportValidity()},[x]);const _="file"===y.type,D=t??(_?e=>e.target.files:e=>e.target.value),L=a?a(S):_?{}:g?{defaultValue:S}:{value:S},j=bt(C);return n.createElement(n.Fragment,null,n.createElement(T,{...y,name:C,onBlur:V,...i,...L,...xt(w,C,y),disabled:O,onChange:e=>E(D(e)),ref:F}),w&&s?n.createElement("span",{id:j,role:"alert"},s(w,j)):null)}),St=n.forwardRef(({name:e,form:t,initialValue:r,shouldUnregister:o,validate:i,rules:s,validateDebounce:u,disabled:a,delayError:c,mode:l,...d},f)=>{const{value:m,onChange:p,onBlur:h,error:g,name:y,disabled:v}=st({name:e,form:t,initialValue:r,shouldUnregister:o,validate:i,rules:s,validateDebounce:u,delayError:c,disabled:a,mode:l});return n.createElement("input",{...d,name:y,onBlur:h,type:"checkbox",checked:!!m,...xt(g,y,d),disabled:v,onChange:e=>p(e.target.checked),ref:f})});function Et(e,t){return e?Array.isArray(t)?t:[]:t??""}const Vt=n.forwardRef(({name:e,multiple:t,children:r,form:o,initialValue:i,shouldUnregister:s,validate:u,rules:a,validateDebounce:c,disabled:l,delayError:d,mode:f,...m},p)=>{const{value:h,onChange:g,onBlur:y,error:v,name:b,disabled:x}=st({name:e,form:o,initialValue:i,shouldUnregister:s,validate:u,rules:a,validateDebounce:c,delayError:d,disabled:l,mode:f});return n.createElement("select",{...m,name:b,onBlur:y,multiple:t,value:Et(t,h),...xt(v,b,m),disabled:x,onChange:e=>g(t?Array.from(e.target.selectedOptions,e=>e.value):e.target.value),ref:p},r)});exports.Checkbox=St,exports.CheckboxGroupContext=gt,exports.CheckboxGroupProvider=yt,exports.FORM_ERROR=C,exports.Field=kt,exports.Form=function({form:e,context:t,initialValues:r,values:o,shouldUnregister:i,onSubmit:s,onValidSubmit:u,onInvalidSubmit:a,action:c,shouldFocusError:l,...d}){const f=Ge({initialValues:r,values:o,shouldUnregister:i}),m=e||f,p=Le(m,{onSubmit:s,onValidSubmit:u,onInvalidSubmit:a,shouldFocusError:l,onAction:c?e=>c(function(e){const t=new FormData;for(const r of Object.keys(e))vt(t,r,e[r]);return t}(e)):void 0}),{Provider:h}=t??pt;return n.createElement(h,{value:m},n.createElement("form",{...d,noValidate:!0,onSubmit:p}))},exports.FormContext=pt,exports.FormField=function({children:e,...t}){return e(st(t))},exports.FormProvider=ht,exports.Select=Vt,exports.VALIDATION_OUTCOME=O,exports.changeValue=function(e,t,r,n){Ve(e,p(t),r,n)},exports.changeValueByPath=Ve,exports.clearErrors=M,exports.createForm=je,exports.createFormContext=function(){const e=t.createContext(null);return{context:e,FormProvider:function({form:r,children:n}){return t.createElement(e.Provider,{value:r},n)},useFormContext:function(){const r=t.useContext(e);if(!r)throw new Error("no form provided");return r},useField:function(t){return it(t,e)},useFieldArray:function(t){return ft(t,e)},useFieldArrayItem:function(t){return mt(t,e)}}},exports.emitChangeByPath=U,exports.ensureValidate=ke,exports.fieldErrorId=function(e){return bt(p(e).key)},exports.getDirtyFields=ee,exports.getError=function(e,t){return A(e,p(t))},exports.getErrorByPath=A,exports.getErrors=_,exports.getFieldErrors=function(e,t){return T(e,p(t))},exports.getFieldErrorsByPath=T,exports.getFieldState=function(e,t){const r=p(t),{values:n,touched:o,validating:i}=e,s=n.get(r.key);return{value:q(e,r),error:A(e,r),errors:T(e,r),isDirty:n.has(r.key)&&v(e,r.key,r.value)!==s,isTouched:o.has(r.key),isValidating:i.has(r.key)}},exports.getFirstError=D,exports.getTouchedFields=N,exports.getValue=function(e,t){return q(e,p(t))},exports.getValueByPath=q,exports.getValues=I,exports.handleSubmit=Le,exports.hasErrors=P,exports.hasTouched=function(e,t){return R(e,p(t))},exports.hasTouchedByPath=R,exports.incrementSubmitCount=Te,exports.isDirty=Q,exports.isTouched=function({touched:e}){return e.size>0},exports.registerFieldMode=we,exports.registerFieldValidateDeps=ye,exports.registerValidatorByPath=ne,exports.removeField=function(e,t,r){z(e,p(t),r)},exports.removeFieldByPath=z,exports.reset=function(t,r,n){const o=[];if(n?.keepValues)Y(I(t),[],o);else if(n?.keepDirtyValues)for(const[e,r]of t.values){const n=JSON.parse(e);v(t,e,n)!==r&&o.push({segments:n,value:r})}t.initialValues=n?.keepDefaultValues?t.initialValues:r??t.initialValues,t.parsedValues=void 0,n?.keepErrors||M(t);const{emitter:i,touched:s,values:u,deleted:a,validating:c}=t;u.clear(),a.clear(),k(t),n?.keepTouched||s.clear(),c.clear(),n?.keepIsSubmitting||(t.isSubmitting=!1),n?.keepSubmitCount||(t.submitCount=0),n?.keepIsSubmitted||(t.isSubmitSuccessful=void 0),E(t),g(t);for(const{segments:e,value:r}of o)W(t,p(e),r);e.emit(i,"change"),e.emit(i,"touched"),e.emit(i,"validating"),e.emit(i,"submitting"),e.emit(i,"submitCount"),e.emit(i,"submitSuccessful"),e.emit(i,"reset")},exports.resetField=function(t,r,n){const o=p(r),{emitter:i,values:s,touched:c,errors:l,deleted:d}=t;if(s.delete(o.key),k(t,o.key),void 0!==t.parsedValues){t.parsedValues=a(t.parsedValues,o.value);const e=u(t.initialValues,o.value);void 0!==e&&s.set(o.key,e)}n&&"value"in n&&s.set(o.key,n.value),H(d,o),e.emit(i,"change"),!n?.keepTouched&&c.delete(o.key)&&e.emit(i,"touched",o),!n?.keepErrors&&l.delete(o.key)&&e.emit(i,"errors",o),E(t),g(t)},exports.revalidateDependentsOnChange=be,exports.revalidateFormOnChange=he,exports.seedValueByPath=J,exports.setDisabled=function(t,r){t.disabled=r,e.emit(t.emitter,"disabled")},exports.setError=L,exports.setErrorByPath=j,exports.setFocus=function(t,r,n){const{key:o}=p(r);n?e.emit(t.emitter,"focusError",o,n):e.emit(t.emitter,"focusError",o)},exports.setInitialValues=K,exports.setIsSubmitting=Fe,exports.setServerErrors=function(e,t,r){r?.keepExisting||M(e);for(const[r,n]of Object.entries(t))L(e,r,(Array.isArray(n)?n:[n]).map(e=>({type:"server",message:e})))},exports.setSubmitSuccessful=_e,exports.setTouched=function(e,t){B(e,p(t))},exports.setTouchedByPath=B,exports.setValidatingByPath=re,exports.setValue=function(e,t,r,n){W(e,p(t),r,n)},exports.setValueByPath=W,exports.subscribe=function(t,r){const{name:n,event:o="change",scope:i="branch",callback:s}=r;if(void 0===n)return e.on(t.emitter,o,s);const u=(function(e){return Array.isArray(e)&&e.every(e=>"number"!=typeof e)}(n)?n:[n]).map(e=>{const r=p(e);return"errors"===o||"touched"===o?ze(t.emitter,o,r.key,s):Ue(t.emitter,o,r,i,s)});return 1===u.length?u[0]:()=>u.forEach(e=>e())},exports.trigger=async function(t,r,n){const o=e=>m(t.emitter,"validating",()=>void 0===e?le(t):e.every(e=>!t.validating.has(e)),()=>!1);if(void 0===r){if(t.validators.forEach(e=>e()),await o(),t.validate&&await me(t),n?.shouldTouch&&oe(t,[...t.validators.keys()]),n?.shouldFocus){const r=t.errors.keys().next().value;void 0!==r&&e.emit(t.emitter,"focusError",r)}return!P(t)}const i="string"==typeof r||V(r)?[p(r).key]:r.map(e=>p(e).key);if(i.forEach(e=>t.validators.get(e)?.()),await o(i),n?.shouldTouch&&oe(t,i),n?.shouldFocus){const r=i.find(e=>t.errors.has(e));void 0!==r&&e.emit(t.emitter,"focusError",r)}return i.every(e=>!t.errors.has(e))},exports.unregisterFieldMode=Ce,exports.unregisterFieldValidateDeps=ve,exports.unsetValidatingByPath=te,exports.useCanSubmit=function(r){const{emitter:n}=r;return He(t.useCallback(t=>{const r=e.on(n,"errors",t),o=e.on(n,"submitting",t);return()=>{r(),o()}},[n]),()=>!r.isSubmitting&&!P(r))},exports.useCheckboxGroupContext=function(){const e=t.useContext(gt);if(!e)throw new Error("no group provided");return e},exports.useDirtyFields=function(e){return Ke(e,"change",ee.bind(null,e))},exports.useError=function(e,t){return Xe(e,p(t))?.message},exports.useErrorByPath=Xe,exports.useField=st,exports.useFieldArray=function(e){return ft(e,pt)},exports.useFieldArrayItem=function(e){return mt(e,pt)},exports.useFieldErrors=function(e,t){return Ze(e,p(t))},exports.useFieldErrorsByPath=Ze,exports.useForm=Ge,exports.useFormContext=function(){const e=t.useContext(pt);if(!e)throw new Error("no form provided");return e},exports.useFormError=function(e){return Xe(e,p(C))?.message},exports.useFormErrors=function(e){return Ze(e,p(C))},exports.useFormState=function(r){const n=t.useCallback(()=>function(e){return{isDirty:Q(e),dirtyFields:ee(e),isTouched:e.touched.size>0,touchedFields:N(e),hasErrors:P(e),isValid:!P(e),isSubmitting:e.isSubmitting,isValidating:e.validating.size>0,isSubmitSuccessful:e.isSubmitSuccessful,submitCount:e.submitCount,isLoading:e.isLoading,disabled:e.disabled}}(r),[r]);return He(t.useCallback(t=>{const n=et.map(n=>e.on(r.emitter,n,t));return()=>{for(const e of n)e()}},[r.emitter]),n,tt)},exports.useHasErrors=function(e){return Ke(e,"errors",P.bind(null,e))},exports.useIsDirty=function(e){return Ke(e,"change",Q.bind(null,e))},exports.useIsLoading=function(e){return Ke(e,"loading",()=>e.isLoading)},exports.useIsSubmitSuccessful=function(e){return Ke(e.emitter,"submitSuccessful",()=>!!e.isSubmitSuccessful)},exports.useIsSubmitting=function(e){return Ke(e,"submitting",()=>e.isSubmitting)},exports.useIsValid=function(e){return Ke(e,"errors",()=>!P(e))},exports.useIsValidating=function(e){return Ke(e,"validating",()=>e.validating.size>0)},exports.useSubmitCount=function(e){return Ke(e,"submitCount",()=>e.submitCount)},exports.useTouched=function(e,t){return Qe(e,p(t))},exports.useTouchedByPath=Qe,exports.useTouchedFields=function(e){return Ke(e,"touched",N.bind(null,e))},exports.useValue=function(e,t){return Ye(e,p(t))},exports.useValueByPath=Ye,exports.useWatch=Ke,exports.useWatchCore=He,exports.userBlur=Ae,exports.userChangeByPath=Oe,exports.validate=Se;
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|