@regle/core 1.11.0 → 1.12.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,26 +2,6 @@ import * as vue0 from "vue";
2
2
  import { MaybeRef, MaybeRefOrGetter, Plugin, Raw, Ref, UnwrapNestedRefs, UnwrapRef } from "vue";
3
3
  import { EmptyObject, IsAny, IsEmptyObject, IsUnion, IsUnknown, Merge, Or, PartialDeep, RequireOneOrNone, RequiredDeep, UnionToIntersection, UnionToTuple } from "type-fest";
4
4
  import { StandardSchemaV1 } from "@standard-schema/spec";
5
- type Prettify<T> = T extends infer R ? { [K in keyof R]: R[K] } & {} : never;
6
- type Maybe<T = any> = T | null | undefined;
7
- type MaybeInput<T = any> = T | null | undefined;
8
- type MaybeOutput<T = any> = T | undefined;
9
- type MaybeReadonly<T> = T | Readonly<T>;
10
- type NonUndefined<T> = Exclude<T, undefined>;
11
- type PromiseReturn<T> = T extends Promise<infer U> ? U : T;
12
- type MaybeGetter<T, V$1 = any, TAdd extends Record<string, any> = {}> = T | ((value: Ref<V$1>, index: number) => T & TAdd);
13
- type Unwrap<T extends MaybeRef<Record<string, any>>> = T extends Ref ? UnwrapRef<T> : UnwrapNestedRefs<T>;
14
- type UnwrapSimple<T extends MaybeRef<Record<string, any>>> = T extends Ref ? UnwrapRef<T> : T extends ((...args: any[]) => infer U) ? U : T;
15
- type ExtractFromGetter<T extends MaybeGetter<any, any, any>> = T extends ((value: Ref<any>, index: number) => infer U extends Record<string, any>) ? U : T;
16
- type ExtendOnlyRealRecord<T extends unknown> = NonNullable<T> extends File | Date ? false : NonNullable<T> extends Record<string, any> ? true : false;
17
- type OmitByType<T extends Record<string, any>, U$1> = { [K in keyof T as T[K] extends U$1 ? never : K]: T[K] };
18
- type DeepMaybeRef<T extends Record<string, any>> = { [K in keyof T]: MaybeRef<T[K]> };
19
- type ExcludeByType<T, U$1> = { [K in keyof T as T[K] extends U$1 ? never : K]: T[K] extends U$1 ? never : T[K] };
20
- type PrimitiveTypes = string | number | boolean | bigint | Date | File;
21
- type isRecordLiteral<T extends unknown> = NonNullable<T> extends Date | File ? false : NonNullable<T> extends Record<string, any> ? true : false;
22
- type NoInferLegacy<A$1 extends any> = [A$1][A$1 extends any ? 0 : never];
23
- type ArrayElement<T> = T extends Array<infer U> ? U : never;
24
- type NonEmptyTuple<T> = [T, ...T[]] | T[];
25
5
  interface RegleBehaviourOptions {
26
6
  /**
27
7
  * Only display error when calling `r$.$validate()`
@@ -215,10 +195,26 @@ type RegleResult<Data extends Record<string, any> | any[] | unknown, TRules$1 ex
215
195
  data: IsUnknown<Data> extends true ? unknown : IsAny<Data> extends true ? unknown : HasNamedKeys<Data> extends true ? Data extends Array<infer U extends Record<string, any>> ? DeepSafeFormState<U, TRules$1>[] : Data extends Date | File ? SafeFieldProperty<Data, TRules$1> : Data extends Record<string, any> ? DeepSafeFormState<Data, TRules$1> : SafeFieldProperty<Data, TRules$1> : unknown;
216
196
  };
217
197
  type RegleNestedResult<Data extends Record<string, any> | unknown, TRules$1 extends ReglePartialRuleTree<any> | RegleFormPropertyType<any>> = RegleResult<Data, TRules$1> & ({
198
+ /**
199
+ * The form contains validation errors, so the issues and errors will be populated.
200
+ */
218
201
  valid: false;
202
+ /**
203
+ * Collection of all the error messages, collected for all children properties and nested forms.
204
+ *
205
+ * Only contains errors from properties where $dirty equals true.
206
+ * */
219
207
  issues: RegleIssuesTree<Data>;
208
+ /**
209
+ * Collection of all the issues, collected for all children properties and nested forms.
210
+ *
211
+ * Only contains issues from properties where $dirty equals true.
212
+ */
220
213
  errors: RegleErrorTree<Data>;
221
214
  } | {
215
+ /**
216
+ * The result is valid, so the issues and errors will be empty.
217
+ */
222
218
  valid: true;
223
219
  issues: EmptyObject;
224
220
  errors: EmptyObject;
@@ -232,10 +228,15 @@ type RegleCollectionResult<Data extends any[], TRules$1 extends ReglePartialRule
232
228
  issues: EmptyObject;
233
229
  errors: EmptyObject;
234
230
  });
235
- type RegleFieldResult<Data extends any, TRules$1 extends ReglePartialRuleTree<any> | RegleFormPropertyType<any>> = RegleResult<Data, TRules$1> & {
231
+ type RegleFieldResult<Data extends any, TRules$1 extends ReglePartialRuleTree<any> | RegleFormPropertyType<any>> = RegleResult<Data, TRules$1> & ({
232
+ valid: false;
236
233
  issues: RegleFieldIssue<TRules$1>[];
237
234
  errors: string[];
238
- };
235
+ } | {
236
+ valid: true;
237
+ issues: [];
238
+ errors: [];
239
+ });
239
240
  /**
240
241
  * Infer safe output from any `r$` instance
241
242
  *
@@ -265,11 +266,18 @@ type NarrowVariant<TRoot extends {
265
266
  $fields: {
266
267
  [x: string]: unknown;
267
268
  };
269
+ $value: unknown;
268
270
  }, TKey$1 extends keyof TRoot, TValue$1 extends (LazyJoinDiscriminatedUnions<Exclude<TRoot[TKey$1], RegleCollectionStatus<any, any, any> | RegleStatus<any, any, any> | NarrowVariantExtracts[keyof NarrowVariantExtracts]>> extends {
269
271
  $value: infer V;
270
272
  } ? V : unknown)> = Extract<TRoot, { [K in TKey$1]: RegleFieldStatus<TValue$1, any, any> | RegleFieldStatus<MaybeInput<TValue$1>, any, any> | (IsEmptyObject<NarrowVariantFieldExtracts<TValue$1>> extends true ? EmptyObject : NarrowVariantFieldExtracts<TValue$1>[keyof NarrowVariantFieldExtracts<TValue$1>]) }> & {
271
- $fields: Extract<TRoot['$fields'], { [K in TKey$1]: RegleFieldStatus<TValue$1, any, any> | RegleFieldStatus<MaybeInput<TValue$1>, any, any> | (IsEmptyObject<NarrowVariantFieldExtracts<TValue$1>> extends true ? EmptyObject : NarrowVariantFieldExtracts<TValue$1>[keyof NarrowVariantFieldExtracts<TValue$1>]) }>;
272
- };
273
+ $fields: Extract<TRoot['$fields'], { [K in TKey$1]: RegleFieldStatus<TValue$1, any, any> | RegleFieldStatus<MaybeInput<TValue$1>, any, any> | (IsEmptyObject<NarrowVariantFieldExtracts<TValue$1>> extends true ? EmptyObject : NarrowVariantFieldExtracts<TValue$1>[keyof NarrowVariantFieldExtracts<TValue$1>]) }> & { [K in TKey$1]: TRoot[K] & {
274
+ $value: TValue$1;
275
+ } };
276
+ } & {
277
+ $value: Omit<TRoot['$value'], TKey$1> & { [K in TKey$1]: TValue$1 };
278
+ } & { [K in TKey$1]: TRoot[K] & {
279
+ $value: TValue$1;
280
+ } };
273
281
  type MaybeVariantStatus<TState$1 extends Record<string, any> | undefined = Record<string, any>, TRules$1 extends ReglePartialRuleTree<NonNullable<TState$1>> = Record<string, any>, TShortcuts extends RegleShortcutDefinition = {}> = IsUnion<NonNullable<TState$1>> extends true ? Omit<RegleStatus<TState$1, TRules$1, TShortcuts>, '$fields'> & {
274
282
  $fields: ProcessChildrenFields<TState$1, TRules$1, TShortcuts>[keyof ProcessChildrenFields<TState$1, TRules$1, TShortcuts>];
275
283
  } & (HasNamedKeys<TState$1> extends true ? ProcessChildrenFields<TState$1, TRules$1, TShortcuts>[keyof ProcessChildrenFields<TState$1, TRules$1, TShortcuts>] : {}) : RegleStatus<TState$1, TRules$1, TShortcuts>;
@@ -284,6 +292,74 @@ type PossibleLiteralTypes<T extends Record<string, any>, TKey$1 extends keyof T>
284
292
  } } };
285
293
  type RequiredForm<T extends Record<string, any>, TKey$1 extends keyof T> = Omit<ReglePartialRuleTree<T>, TKey$1> & PossibleLiteralTypes<T, TKey$1>[keyof PossibleLiteralTypes<T, TKey$1>];
286
294
  type VariantTuple<T extends Record<string, any>, TKey$1 extends keyof T> = [RequiredForm<T, TKey$1>, ...RequiredForm<T, TKey$1>[]];
295
+ type RemoveCommonKey<T extends readonly any[], K$1 extends PropertyKey> = T extends [infer F, ...infer R] ? [Prettify<Omit<F, K$1>>, ...RemoveCommonKey<R, K$1>] : [];
296
+ /**
297
+ * Restore the optional properties (with ?) of a generated mapped object type
298
+ */
299
+
300
+ type MergePropsIntoRequiredBooleans<TObject extends Record<string, any>> = { [K in keyof TObject]-?: TObject[K] extends NonNullable<TObject[K]> ? true : false }[keyof TObject];
301
+ /**
302
+ * Ensure that if at least one prop is required, the "prop" object will be required too
303
+ */
304
+ type HaveAnyRequiredProps<TObject extends Record<string, any>> = [TObject] extends [never] ? false : TObject extends Record<string, any> ? MergePropsIntoRequiredBooleans<TObject> extends false ? false : true : false;
305
+ /**
306
+ * Get item value from object, otherwise fallback to undefined. Avoid TS to not be able to infer keys not present on all unions
307
+ */
308
+ type GetMaybeObjectValue<O extends Record<string, any>, K$1 extends string> = K$1 extends keyof O ? O[K$1] : undefined;
309
+ /**
310
+ * Combine all union values to be able to get even the normally "never" values, act as an intersection type
311
+ */
312
+ type RetrieveUnionUnknownValues<T extends readonly any[], TKeys extends string> = T extends [infer F extends Record<string, any>, ...infer R] ? [{ [K in TKeys as GetMaybeObjectValue<F, K> extends NonUndefined<GetMaybeObjectValue<F, K>> ? never : K]?: GetMaybeObjectValue<F, K> } & { [K in TKeys as GetMaybeObjectValue<F, K> extends NonUndefined<GetMaybeObjectValue<F, K>> ? K : never]: GetMaybeObjectValue<F, K> }, ...RetrieveUnionUnknownValues<R, TKeys>] : [];
313
+ /**
314
+ * Get all possible keys from a union, even the ones present only on one union
315
+ */
316
+ type RetrieveUnionUnknownKeysOf<T extends readonly any[]> = T extends [infer F, ...infer R] ? [keyof F, ...RetrieveUnionUnknownKeysOf<R>] : [];
317
+ /**
318
+ * Transforms a union and apply undefined values to non-present keys to support intersection
319
+ */
320
+ type NormalizeUnion<TUnion> = RetrieveUnionUnknownValues<NonNullable<UnionToTuple<TUnion>>, RetrieveUnionUnknownKeysOf<NonNullable<UnionToTuple<TUnion>>>[number]>[number];
321
+ /**
322
+ * Combine all members of a union type, merging types for each key, and keeping loose types
323
+ */
324
+ type JoinDiscriminatedUnions<TUnion extends unknown> = HasNamedKeys<TUnion> extends true ? isRecordLiteral<TUnion> extends true ? Prettify<Partial<UnionToIntersection<RemoveCommonKey<UnionToTuple<NonNullable<TUnion>>, keyof NormalizeUnion<NonNullable<TUnion>>>[number]>> & Pick<NormalizeUnion<NonNullable<TUnion>>, keyof NormalizeUnion<NonNullable<TUnion>>>> : TUnion : TUnion;
325
+ type LazyJoinDiscriminatedUnions<TUnion extends unknown> = isRecordLiteral<TUnion> extends true ? Prettify<Partial<UnionToIntersection<RemoveCommonKey<UnionToTuple<TUnion>, keyof NonNullable<TUnion>>[number]>> & Pick<NonNullable<TUnion>, keyof NonNullable<TUnion>>> : TUnion;
326
+ type EnumLike = {
327
+ [k: string]: string | number;
328
+ [nu: number]: string;
329
+ };
330
+ type enumType<T extends Record<string, unknown>> = T[keyof T];
331
+ type UnwrapMaybeRef<T extends MaybeRef<any> | DeepReactiveState<any>> = T extends Ref<any> ? UnwrapRef<T> : UnwrapNestedRefs<T>;
332
+ type UnwrapStatic<T> = IsUnknown<T> extends true ? any : T extends RegleStatic<infer U> ? Raw<U> : UnwrapStaticSimple<T>;
333
+ type UnwrapStaticSimple<T> = T extends Array<infer U> ? Array<UnwrapStatic<U>> : isRecordLiteral<T> extends true ? { [K in keyof T]: UnwrapStatic<T[K]> } : T;
334
+ type TupleToPlainObj<T> = { [I in keyof T & `${number}`]: T[I] };
335
+ type HasNamedKeys<T> = IsUnion<T> extends true ? ProcessHasNamedKeys<LazyJoinDiscriminatedUnions<T>> : ProcessHasNamedKeys<T>;
336
+ type ProcessHasNamedKeys<T> = { [K in keyof NonNullable<T>]: K extends string ? (string extends K ? never : K) : never }[keyof NonNullable<T>] extends never ? false : true;
337
+ declare const RegleStaticSymbol: unique symbol;
338
+ type RegleStatic<T> = T extends (new (...args: infer Args) => infer U) ? RegleStaticImpl<new (...args: Args) => RegleStaticImpl<U>> : RegleStaticImpl<T>;
339
+ type RegleStaticImpl<T> = Raw<T & {
340
+ [RegleStaticSymbol]: true;
341
+ }>;
342
+ type IsRegleStatic<T> = T extends RegleStaticImpl<T> ? true : false;
343
+ type Prettify<T> = T extends infer R ? { [K in keyof R]: R[K] } & {} : never;
344
+ type Maybe<T = any> = T | null | undefined;
345
+ type MaybeInput<T = any> = T | null | undefined;
346
+ type MaybeOutput<T = any> = T | undefined;
347
+ type MaybeReadonly<T> = T | Readonly<T>;
348
+ type NonUndefined<T> = Exclude<T, undefined>;
349
+ type PromiseReturn<T> = T extends Promise<infer U> ? U : T;
350
+ type MaybeGetter<T, V$1 = any, TAdd extends Record<string, any> = {}> = T | ((value: Ref<V$1>, index: number) => T & TAdd);
351
+ type Unwrap<T extends MaybeRef<Record<string, any>>> = T extends Ref ? UnwrapRef<T> : UnwrapNestedRefs<T>;
352
+ type UnwrapSimple<T extends MaybeRef<Record<string, any>>> = T extends Ref ? UnwrapRef<T> : T extends ((...args: any[]) => infer U) ? U : T;
353
+ type ExtractFromGetter<T extends MaybeGetter<any, any, any>> = T extends ((value: Ref<any>, index: number) => infer U extends Record<string, any>) ? U : T;
354
+ type ExtendOnlyRealRecord<T extends unknown> = NonNullable<T> extends File | Date | RegleStatic<unknown> ? false : NonNullable<T> extends Record<string, any> ? true : false;
355
+ type OmitByType<T extends Record<string, any>, U$1> = { [K in keyof T as T[K] extends U$1 ? never : K]: T[K] };
356
+ type DeepMaybeRef<T extends Record<string, any>> = { [K in keyof T]: MaybeRef<T[K]> };
357
+ type ExcludeByType<T, U$1> = { [K in keyof T as T[K] extends U$1 ? never : K]: T[K] extends U$1 ? never : T[K] };
358
+ type PrimitiveTypes = string | number | boolean | bigint | Date | File;
359
+ type isRecordLiteral<T extends unknown> = NonNullable<T> extends Date | File ? false : NonNullable<T> extends Record<string, any> ? true : false;
360
+ type NoInferLegacy<A$1 extends any> = [A$1][A$1 extends any ? 0 : never];
361
+ type ArrayElement<T> = T extends Array<infer U> ? U : never;
362
+ type NonEmptyTuple<T> = [T, ...T[]] | T[];
287
363
  type useRegleFnOptions<TState$1 extends Record<string, any> | MaybeInput<PrimitiveTypes>, TRules$1 extends DeepExact<TRules$1, ReglePartialRuleTree<Unwrap<TState$1 extends Record<string, any> ? TState$1 : {}>, Partial<AllRulesDeclarations>>>, TAdditionalOptions extends Record<string, any>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>> = TState$1 extends MaybeInput<PrimitiveTypes> ? Partial<DeepMaybeRef<RegleBehaviourOptions>> & TAdditionalOptions : Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<JoinDiscriminatedUnions<TState$1 extends Record<string, any> ? Unwrap<TState$1> : {}>, TState$1 extends Record<string, any> ? (TRules$1 extends Record<string, any> ? TRules$1 : {}) : {}, TValidationGroups> & TAdditionalOptions;
288
364
  interface useRegleFn<TCustomRules extends Partial<AllRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<any> = never, TAdditionalReturnProperties extends Record<string, any> = {}, TAdditionalOptions extends Record<string, any> = {}> {
289
365
  <TState$1 extends Record<string, any> | MaybeInput<PrimitiveTypes>, TRules$1 extends DeepExact<TRules$1, ReglePartialRuleTree<Unwrap<TState$1 extends Record<string, any> ? TState$1 : {}>, Partial<AllRulesDeclarations> & TCustomRules>>, TDecl extends RegleRuleDecl<NonNullable<TState$1>, Partial<AllRulesDeclarations> & TCustomRules>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>>(...params: [state: Maybe<MaybeRef<TState$1> | DeepReactiveState<TState$1>>, rulesFactory: TState$1 extends MaybeInput<PrimitiveTypes> ? MaybeRefOrGetter<TDecl> : TState$1 extends Record<string, any> ? MaybeRef<TRules$1> | ((...args: any[]) => TRules$1) : {}, ...(HaveAnyRequiredProps<useRegleFnOptions<TState$1, TRules$1, TAdditionalOptions, TValidationGroups>> extends true ? [options: useRegleFnOptions<TState$1, TRules$1, TAdditionalOptions, TValidationGroups>] : [options?: useRegleFnOptions<TState$1, TRules$1, TAdditionalOptions, TValidationGroups>])]): NonNullable<TState$1> extends PrimitiveTypes ? RegleSingleField<NonNullable<TState$1>, TDecl, TShortcuts, TAdditionalReturnProperties> : Regle<TState$1 extends Record<string, any> ? Unwrap<TState$1> : {}, TRules$1 extends Record<string, any> ? TRules$1 : {}, TValidationGroups, TShortcuts, TAdditionalReturnProperties>;
@@ -387,6 +463,17 @@ interface useRulesFn<TCustomRules extends Partial<AllRulesDeclarations>, TShortc
387
463
  * ```
388
464
  */
389
465
  declare const useRules: useRulesFn<Partial<AllRulesDeclarations>, RegleShortcutDefinition<any>>;
466
+ /**
467
+ * Marks a value as static and treats the constructor as a regular raw Field.
468
+ * @param value - The value to mark as static.
469
+ * @returns The marked value.
470
+ * @example
471
+ * ```ts
472
+ * const StaticDecimal = markStatic(Decimal);
473
+ * const StaticBigWrapper = markStatic(BigWrapper);
474
+ * ```
475
+ */
476
+ declare function markStatic<T extends object>(value: T): RegleStatic<T>;
390
477
  /**
391
478
  * Infer type of the `r$` of any function returning a regle instance
392
479
  */
@@ -425,46 +512,6 @@ type TypeError<Msg> = {
425
512
  [' TypeError']: Msg;
426
513
  };
427
514
  type Coerce<T> = `${T & string}`;
428
- type RemoveCommonKey<T extends readonly any[], K$1 extends PropertyKey> = T extends [infer F, ...infer R] ? [Prettify<Omit<F, K$1>>, ...RemoveCommonKey<R, K$1>] : [];
429
- /**
430
- * Restore the optional properties (with ?) of a generated mapped object type
431
- */
432
-
433
- type MergePropsIntoRequiredBooleans<TObject extends Record<string, any>> = { [K in keyof TObject]-?: TObject[K] extends NonNullable<TObject[K]> ? true : false }[keyof TObject];
434
- /**
435
- * Ensure that if at least one prop is required, the "prop" object will be required too
436
- */
437
- type HaveAnyRequiredProps<TObject extends Record<string, any>> = [TObject] extends [never] ? false : TObject extends Record<string, any> ? MergePropsIntoRequiredBooleans<TObject> extends false ? false : true : false;
438
- /**
439
- * Get item value from object, otherwise fallback to undefined. Avoid TS to not be able to infer keys not present on all unions
440
- */
441
- type GetMaybeObjectValue<O extends Record<string, any>, K$1 extends string> = K$1 extends keyof O ? O[K$1] : undefined;
442
- /**
443
- * Combine all union values to be able to get even the normally "never" values, act as an intersection type
444
- */
445
- type RetrieveUnionUnknownValues<T extends readonly any[], TKeys extends string> = T extends [infer F extends Record<string, any>, ...infer R] ? [{ [K in TKeys as GetMaybeObjectValue<F, K> extends NonUndefined<GetMaybeObjectValue<F, K>> ? never : K]?: GetMaybeObjectValue<F, K> } & { [K in TKeys as GetMaybeObjectValue<F, K> extends NonUndefined<GetMaybeObjectValue<F, K>> ? K : never]: GetMaybeObjectValue<F, K> }, ...RetrieveUnionUnknownValues<R, TKeys>] : [];
446
- /**
447
- * Get all possible keys from a union, even the ones present only on one union
448
- */
449
- type RetrieveUnionUnknownKeysOf<T extends readonly any[]> = T extends [infer F, ...infer R] ? [keyof F, ...RetrieveUnionUnknownKeysOf<R>] : [];
450
- /**
451
- * Transforms a union and apply undefined values to non-present keys to support intersection
452
- */
453
- type NormalizeUnion<TUnion> = RetrieveUnionUnknownValues<NonNullable<UnionToTuple<TUnion>>, RetrieveUnionUnknownKeysOf<NonNullable<UnionToTuple<TUnion>>>[number]>[number];
454
- /**
455
- * Combine all members of a union type, merging types for each key, and keeping loose types
456
- */
457
- type JoinDiscriminatedUnions<TUnion extends unknown> = HasNamedKeys<TUnion> extends true ? isRecordLiteral<TUnion> extends true ? Prettify<Partial<UnionToIntersection<RemoveCommonKey<UnionToTuple<NonNullable<TUnion>>, keyof NormalizeUnion<NonNullable<TUnion>>>[number]>> & Pick<NormalizeUnion<NonNullable<TUnion>>, keyof NormalizeUnion<NonNullable<TUnion>>>> : TUnion : TUnion;
458
- type LazyJoinDiscriminatedUnions<TUnion extends unknown> = isRecordLiteral<TUnion> extends true ? Prettify<Partial<UnionToIntersection<RemoveCommonKey<UnionToTuple<TUnion>, keyof NonNullable<TUnion>>[number]>> & Pick<NonNullable<TUnion>, keyof NonNullable<TUnion>>> : TUnion;
459
- type EnumLike = {
460
- [k: string]: string | number;
461
- [nu: number]: string;
462
- };
463
- type enumType<T extends Record<string, unknown>> = T[keyof T];
464
- type UnwrapMaybeRef<T extends MaybeRef<any> | DeepReactiveState<any>> = T extends Ref<any> ? UnwrapRef<T> : UnwrapNestedRefs<T>;
465
- type TupleToPlainObj<T> = { [I in keyof T & `${number}`]: T[I] };
466
- type HasNamedKeys<T> = IsUnion<T> extends true ? ProcessHasNamedKeys<LazyJoinDiscriminatedUnions<T>> : ProcessHasNamedKeys<T>;
467
- type ProcessHasNamedKeys<T> = { [K in keyof NonNullable<T>]: K extends string ? (string extends K ? never : K) : never }[keyof NonNullable<T>] extends never ? false : true;
468
515
  type InferInput<TRules$1 extends MaybeRef<ReglePartialRuleTree<Record<string, any>, any>> | ((state: any) => ReglePartialRuleTree<Record<string, any>, any>) | MaybeRef<StandardSchemaV1<any>>, TMarkMaybe extends boolean = true> = TRules$1 extends MaybeRef<StandardSchemaV1<infer State>> ? State : IsUnion<UnwrapSimple<TRules$1>> extends true ? InferTupleUnionInput<UnionToTuple<UnwrapSimple<TRules$1>>>[number] : TMarkMaybe extends true ? Prettify<{ [K in keyof UnwrapSimple<TRules$1> as UnwrapSimple<TRules$1>[K] extends MaybeRef<RegleRuleDecl<any, any>> ? K : never]?: ProcessInputChildren<UnwrapSimple<TRules$1>[K], TMarkMaybe> } & { [K in keyof UnwrapSimple<TRules$1> as UnwrapSimple<TRules$1>[K] extends MaybeRef<RegleRuleDecl<any, any>> ? never : K]: ProcessInputChildren<UnwrapSimple<TRules$1>[K], TMarkMaybe> }> : Prettify<{ [K in keyof UnwrapSimple<TRules$1>]: ProcessInputChildren<UnwrapSimple<TRules$1>[K], TMarkMaybe> }>;
469
516
  type ProcessInputChildren<TRule extends unknown, TMarkMaybe extends boolean> = TRule extends {
470
517
  $each: RegleCollectionEachRules<any, any>;
@@ -706,7 +753,7 @@ type $InternalReglePartialRuleTree = {
706
753
  /**
707
754
  * @public
708
755
  */
709
- type RegleFormPropertyType<TValue$1 = any, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = [NonNullable<TValue$1>] extends [never] ? MaybeRef<RegleRuleDecl<TValue$1, TCustomRules>> : NonNullable<TValue$1> extends Array<any> ? RegleCollectionRuleDecl<TValue$1, TCustomRules> : NonNullable<TValue$1> extends Date ? MaybeRef<RegleRuleDecl<NonNullable<TValue$1>, TCustomRules>> : NonNullable<TValue$1> extends File ? MaybeRef<RegleRuleDecl<NonNullable<TValue$1>, TCustomRules>> : NonNullable<TValue$1> extends Ref<infer V> ? RegleFormPropertyType<V, TCustomRules> : NonNullable<TValue$1> extends Record<string, any> ? ReglePartialRuleTree<NonNullable<TValue$1>, TCustomRules> : MaybeRef<RegleRuleDecl<NonNullable<TValue$1>, TCustomRules>>;
756
+ type RegleFormPropertyType<TValue$1 = any, TCustomRules extends Partial<AllRulesDeclarations> = Partial<AllRulesDeclarations>> = [NonNullable<TValue$1>] extends [never] ? MaybeRef<RegleRuleDecl<TValue$1, TCustomRules>> : NonNullable<TValue$1> extends Array<any> ? RegleCollectionRuleDecl<TValue$1, TCustomRules> : NonNullable<TValue$1> extends Date ? MaybeRef<RegleRuleDecl<NonNullable<TValue$1>, TCustomRules>> : NonNullable<TValue$1> extends File ? MaybeRef<RegleRuleDecl<NonNullable<TValue$1>, TCustomRules>> : NonNullable<TValue$1> extends Ref<infer V> ? RegleFormPropertyType<V, TCustomRules> : NonNullable<TValue$1> extends Record<string, any> ? NonNullable<TValue$1> extends RegleStatic<infer U> ? MaybeRef<RegleRuleDecl<Raw<U>, TCustomRules>> : ReglePartialRuleTree<NonNullable<TValue$1>, TCustomRules> : MaybeRef<RegleRuleDecl<NonNullable<TValue$1>, TCustomRules>>;
710
757
  /**
711
758
  * @internal
712
759
  * @reference {@link RegleFormPropertyType}
@@ -807,13 +854,13 @@ interface $InternalRegleStatus extends $InternalRegleCommonStatus {
807
854
  /**
808
855
  * @public
809
856
  */
810
- type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl | ReglePartialRuleTree<any>, TState$1 extends Record<PropertyKey, any> = any, TKey$1 extends PropertyKey = string, TShortcuts extends RegleShortcutDefinition = {}> = HasNamedKeys<TState$1> extends true ? [TState$1[TKey$1]] extends [undefined | null] ? RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : NonNullable<TState$1[TKey$1]> extends Array<infer U extends Record<string, any>> ? ExtendOnlyRealRecord<U> extends true ? TRule extends RegleCollectionRuleDefinition<any, any> ? ExtractFromGetter<TRule['$each']> extends ReglePartialRuleTree<any> ? RegleCollectionStatus<TState$1[TKey$1], ExtractFromGetter<TRule['$each']>, TRule, TShortcuts> : RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : RegleCollectionStatus<TState$1[TKey$1], {}, TRule, TShortcuts> : RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : TRule extends ReglePartialRuleTree<any> ? NonNullable<TState$1[TKey$1]> extends Array<any> ? RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : NonNullable<TState$1[TKey$1]> extends Date | File ? RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : unknown extends TState$1[TKey$1] ? RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : NonNullable<TState$1[TKey$1]> extends Record<PropertyKey, any> ? MaybeVariantStatus<TState$1[TKey$1], TRule, TShortcuts> : RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : NonNullable<TState$1[TKey$1]> extends Date | File ? RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : unknown extends TState$1[TKey$1] ? RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : NonNullable<TState$1[TKey$1]> extends Record<PropertyKey, any> ? MaybeVariantStatus<TState$1[TKey$1], ReglePartialRuleTree<TState$1[TKey$1]>, TShortcuts> : RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : RegleCommonStatus<unknown>;
857
+ type InferRegleStatusType<TRule extends RegleCollectionRuleDecl | RegleRuleDecl | ReglePartialRuleTree<any>, TState$1 extends Record<PropertyKey, any> = any, TKey$1 extends PropertyKey = string, TShortcuts extends RegleShortcutDefinition = {}> = HasNamedKeys<TState$1> extends true ? [TState$1[TKey$1]] extends [undefined | null] ? RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : NonNullable<TState$1[TKey$1]> extends Array<infer U extends Record<string, any>> ? ExtendOnlyRealRecord<U> extends true ? TRule extends RegleCollectionRuleDefinition<any, any> ? ExtractFromGetter<TRule['$each']> extends ReglePartialRuleTree<any> ? RegleCollectionStatus<TState$1[TKey$1], ExtractFromGetter<TRule['$each']>, TRule, TShortcuts> : RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : RegleCollectionStatus<TState$1[TKey$1], {}, TRule, TShortcuts> : RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : TRule extends ReglePartialRuleTree<any> ? NonNullable<TState$1[TKey$1]> extends Array<any> ? RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : NonNullable<TState$1[TKey$1]> extends Date | File ? RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : unknown extends TState$1[TKey$1] ? RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : NonNullable<TState$1[TKey$1]> extends Record<PropertyKey, any> ? NonNullable<TState$1[TKey$1]> extends RegleStaticImpl<infer U> ? RegleFieldStatus<Raw<U>, TRule, TShortcuts> : MaybeVariantStatus<TState$1[TKey$1], TRule, TShortcuts> : RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : NonNullable<TState$1[TKey$1]> extends Date | File ? RegleFieldStatus<Raw<NonNullable<TState$1[TKey$1]>>, TRule, TShortcuts> : unknown extends TState$1[TKey$1] ? RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : NonNullable<TState$1[TKey$1]> extends Record<PropertyKey, any> ? NonNullable<TState$1[TKey$1]> extends RegleStaticImpl<infer U> ? RegleFieldStatus<Raw<U>, TRule, TShortcuts> : MaybeVariantStatus<TState$1[TKey$1], ReglePartialRuleTree<TState$1[TKey$1]>, TShortcuts> : RegleFieldStatus<TState$1[TKey$1], TRule, TShortcuts> : RegleCommonStatus<unknown>;
811
858
  /**
812
859
  * @internal
813
860
  * @reference {@link InferRegleStatusType}
814
861
  */
815
862
  type $InternalRegleStatusType = $InternalRegleCollectionStatus | $InternalRegleStatus | $InternalRegleFieldStatus;
816
- type RegleFieldIssue<TRules$1 extends RegleFormPropertyType<any, Partial<AllRulesDeclarations>> = EmptyObject> = {
863
+ type RegleFieldIssue<TRules$1 extends RegleFormPropertyType<unknown, Partial<AllRulesDeclarations>> = EmptyObject> = {
817
864
  readonly $property: string;
818
865
  readonly $type?: string;
819
866
  readonly $message: string;
@@ -830,17 +877,26 @@ type RegleFieldIssue<TRules$1 extends RegleFormPropertyType<any, Partial<AllRule
830
877
  } : {
831
878
  readonly $rule: string;
832
879
  } }[keyof ComputeFieldRules<any, TRules$1>]);
833
- type ComputeFieldRules<TState$1 extends any, TRules$1 extends RegleFormPropertyType<any, Partial<AllRulesDeclarations>>> = IsEmptyObject<TRules$1> extends true ? {
880
+ type ComputeFieldRules<TState$1 extends any, TRules$1 extends RegleFormPropertyType<unknown, Partial<AllRulesDeclarations>>> = IsEmptyObject<TRules$1> extends true ? {
834
881
  readonly [x: string]: RegleRuleStatus<TState$1, any[], any>;
835
882
  } : { readonly [TRuleKey in keyof Omit<TRules$1, '$each' | keyof FieldRegleBehaviourOptions>]: RegleRuleStatus<TState$1, TRules$1[TRuleKey] extends RegleRuleDefinition<any, infer TParams, any> ? TParams : [], TRules$1[TRuleKey] extends RegleRuleDefinition<any, any, any, infer TMetadata> ? TMetadata : TRules$1[TRuleKey] extends InlineRuleDeclaration<any, any[], infer TMetadata> ? TMetadata extends Promise<infer P> ? P : TMetadata : boolean> };
836
883
  /**
837
884
  * @public
838
885
  */
839
- type RegleFieldStatus<TState$1 extends any = any, TRules$1 extends RegleFormPropertyType<any, Partial<AllRulesDeclarations>> = Record<string, any>, TShortcuts extends RegleShortcutDefinition = never> = Omit<RegleCommonStatus<TState$1>, '$value' | '$silentValue'> & {
886
+ type RegleFieldStatus<TState$1 extends any = any, TRules$1 extends RegleFormPropertyType<unknown, Partial<AllRulesDeclarations>> = Record<string, any>, TShortcuts extends RegleShortcutDefinition = never> = Omit<RegleCommonStatus<TState$1>, '$value' | '$silentValue' | '$initialValue' | '$originalValue'> & {
840
887
  /** A reference to the original validated model. It can be used to bind your form with v-model.*/
841
888
  $value: MaybeOutput<UnwrapNestedRefs<TState$1>>;
842
889
  /** $value variant that will not "touch" the field and update the value silently, running only the rules, so you can easily swap values without impacting user interaction. */
843
890
  $silentValue: MaybeOutput<UnwrapNestedRefs<TState$1>>;
891
+ /**
892
+ * This value reflect the current initial value of the field.
893
+ * The initial value is different than the original value as the initial value can be mutated when using `$reset`.
894
+ */
895
+ readonly $initialValue: MaybeOutput<UnwrapNestedRefs<TState$1>>;
896
+ /**
897
+ * This value reflect the original value of the field at original call. This can't be mutated
898
+ */
899
+ readonly $originalValue: MaybeOutput<UnwrapNestedRefs<TState$1>>;
844
900
  /** Collection of all the error messages, collected for all children properties and nested forms.
845
901
  *
846
902
  * Only contains errors from properties where $dirty equals true. */
@@ -926,20 +982,20 @@ interface RegleCommonStatus<TValue$1 = any> extends StandardSchemaV1<TValue$1> {
926
982
  /** Id used to track collections items */
927
983
  $id?: string;
928
984
  /** A reference to the original validated model. It can be used to bind your form with v-model.*/
929
- $value: JoinDiscriminatedUnions<UnwrapNestedRefs<TValue$1>>;
985
+ $value: UnwrapStatic<JoinDiscriminatedUnions<UnwrapNestedRefs<TValue$1>>>;
930
986
  /**
931
987
  * This value reflect the current initial value of the field.
932
988
  * The initial value is different than the original value as the initial value can be mutated when using `$reset`.
933
989
  */
934
- readonly $initialValue: JoinDiscriminatedUnions<UnwrapNestedRefs<TValue$1>>;
990
+ readonly $initialValue: UnwrapStatic<JoinDiscriminatedUnions<UnwrapNestedRefs<TValue$1>>>;
935
991
  /**
936
992
  * This value reflect the original value of the field at original call. This can't be mutated
937
993
  */
938
- readonly $originalValue: JoinDiscriminatedUnions<UnwrapNestedRefs<TValue$1>>;
994
+ readonly $originalValue: UnwrapStatic<JoinDiscriminatedUnions<UnwrapNestedRefs<TValue$1>>>;
939
995
  /**
940
996
  * `$value` variant that will not "touch" the field and update the value silently, running only the rules, so you can easily swap values without impacting user interaction.
941
997
  * */
942
- $silentValue: JoinDiscriminatedUnions<UnwrapNestedRefs<TValue$1>>;
998
+ $silentValue: UnwrapStatic<JoinDiscriminatedUnions<UnwrapNestedRefs<TValue$1>>>;
943
999
  /** Marks the field and all nested properties as $dirty. */
944
1000
  $touch(): void;
945
1001
  /**
@@ -1068,7 +1124,7 @@ type RegleIssuesTree<TState$1 = MaybeRef<Record<string, any> | any[]>> = { reado
1068
1124
  type RegleExternalErrorTree<TState$1 = MaybeRef<Record<string, any> | any[]>> = { readonly [K in keyof JoinDiscriminatedUnions<UnwrapMaybeRef<TState$1>>]?: RegleValidationErrors<JoinDiscriminatedUnions<UnwrapMaybeRef<TState$1>>[K], true> };
1069
1125
  type RegleExternalSchemaErrorTree<TState$1 = MaybeRef<Record<string, any> | any[]>> = { readonly [K in keyof JoinDiscriminatedUnions<UnwrapMaybeRef<TState$1>>]?: RegleValidationErrors<JoinDiscriminatedUnions<UnwrapMaybeRef<TState$1>>[K], true, true> };
1070
1126
  type ErrorMessageOrIssue<TIssue extends boolean> = TIssue extends true ? RegleFieldIssue[] : string[];
1071
- type RegleValidationErrors<TState$1 extends Record<string, any> | any[] | unknown = never, TExternal extends boolean = false, TIssue extends boolean = false> = HasNamedKeys<TState$1> extends true ? IsAny<TState$1> extends true ? any : NonNullable<TState$1> extends Array<infer U> ? U extends Record<string, any> ? TExternal extends false ? ExtendOnlyRealRecord<U> extends true ? RegleCollectionErrors<U, TIssue> : ErrorMessageOrIssue<TIssue> : RegleExternalCollectionErrors<U, TIssue> : ErrorMessageOrIssue<TIssue> : NonNullable<TState$1> extends Date | File ? ErrorMessageOrIssue<TIssue> : NonNullable<TState$1> extends Record<string, any> ? TExternal extends false ? RegleErrorTree<TState$1, TIssue> : RegleExternalErrorTree<TState$1> : ErrorMessageOrIssue<TIssue> : any;
1127
+ type RegleValidationErrors<TState$1 extends Record<string, any> | any[] | unknown = never, TExternal extends boolean = false, TIssue extends boolean = false> = HasNamedKeys<TState$1> extends true ? IsAny<TState$1> extends true ? any : NonNullable<TState$1> extends Array<infer U> ? U extends Record<string, any> ? TExternal extends false ? ExtendOnlyRealRecord<U> extends true ? RegleCollectionErrors<U, TIssue> : ErrorMessageOrIssue<TIssue> : RegleExternalCollectionErrors<U, TIssue> : ErrorMessageOrIssue<TIssue> : NonNullable<TState$1> extends Date | File ? ErrorMessageOrIssue<TIssue> : NonNullable<TState$1> extends Record<string, any> ? IsRegleStatic<NonNullable<TState$1>> extends true ? ErrorMessageOrIssue<TIssue> : TExternal extends false ? RegleErrorTree<TState$1, TIssue> : RegleExternalErrorTree<TState$1> : ErrorMessageOrIssue<TIssue> : any;
1072
1128
  type RegleCollectionErrors<TState$1 extends Record<string, any>, TIssue extends boolean = false> = {
1073
1129
  readonly $self: TIssue extends true ? RegleFieldIssue[] : string[];
1074
1130
  readonly $each: RegleValidationErrors<TState$1, false, TIssue>[];
@@ -1229,7 +1285,7 @@ declare function extendRegleConfig<TRootCustomRules extends Partial<AllRulesDecl
1229
1285
  useRegle: useRegleFn<Merge<TRootCustomRules, TCustomRules>, TRootShortcuts & TShortcuts>;
1230
1286
  inferRules: inferRulesFn<Merge<TRootCustomRules, TCustomRules>>;
1231
1287
  };
1232
- type MergedRegles<TRegles extends Record<string, SuperCompatibleRegleRoot>, TValue$1 = { [K in keyof TRegles]: TRegles[K]['$value'] }> = Omit<RegleCommonStatus, '$value' | '$silentValue' | '$errors' | '$silentErrors' | '$name' | '$unwatch' | '$watch'> & {
1288
+ type MergedRegles<TRegles extends Record<string, SuperCompatibleRegleRoot>, TValue$1 = { [K in keyof TRegles]: TRegles[K]['$value'] }> = Omit<RegleCommonStatus, '$value' | '$silentValue' | '$errors' | '$silentErrors' | '$name' | '$unwatch' | '$watch' | '$extractDirtyFields'> & {
1233
1289
  /** Map of merged Regle instances and their properties */
1234
1290
  readonly $instances: { [K in keyof TRegles]: TRegles[K] };
1235
1291
  /** A reference to the original validated model. It can be used to bind your form with v-model.*/
@@ -1245,11 +1301,11 @@ type MergedRegles<TRegles extends Record<string, SuperCompatibleRegleRoot>, TVal
1245
1301
  readonly $issues: { [K in keyof TRegles]: TRegles[K]['$issues'] };
1246
1302
  readonly $silentIssues: { [K in keyof TRegles]: TRegles[K]['$silentIssues'] };
1247
1303
  /** Will return a copy of your state with only the fields that are dirty. By default it will filter out nullish values or objects, but you can override it with the first parameter $extractDirtyFields(false). */
1248
- $extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TValue$1>;
1304
+ $extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TValue$1>[];
1249
1305
  /** Sets all properties as dirty, triggering all rules. It returns a promise that will either resolve to false or a type safe copy of your form state. Values that had the required rule will be transformed into a non-nullable value (type only). */
1250
1306
  $validate: (forceValues?: TRegles['$value']) => Promise<MergedReglesResult<TRegles>>;
1251
- };
1252
- type MergedScopedRegles<TValue$1 extends Record<string, unknown>[] = Record<string, unknown>[]> = Omit<MergedRegles<Record<string, SuperCompatibleRegleRoot>, TValue$1>, '$instances' | '$errors' | '$silentErrors' | '$value' | '$silentValue' | '$validate'> & {
1307
+ } & { [K in keyof TRegles]: TRegles[K] };
1308
+ type MergedScopedRegles<TValue$1 extends Record<string, unknown>[] = Record<string, unknown>[]> = Omit<MergedRegles<Record<string, SuperCompatibleRegleRoot>, TValue$1>, '$instances' | '$errors' | '$silentErrors' | '$value' | '$silentValue' | '$validate' | '$extractDirtyFields'> & {
1253
1309
  /** Array of scoped Regles instances */
1254
1310
  readonly $instances: SuperCompatibleRegleRoot[];
1255
1311
  /** Collection of all registered Regles instances values */
@@ -1262,6 +1318,8 @@ type MergedScopedRegles<TValue$1 extends Record<string, unknown>[] = Record<stri
1262
1318
  readonly $issues: RegleValidationErrors<Record<string, unknown>, false, true>[];
1263
1319
  /** Collection of all registered Regles instances silent issues */
1264
1320
  readonly $silentIssues: RegleValidationErrors<Record<string, unknown>, false, true>[];
1321
+ /** Will return a copy of your state with only the fields that are dirty. By default it will filter out nullish values or objects, but you can override it with the first parameter $extractDirtyFields(false). */
1322
+ $extractDirtyFields: (filterNullishValues?: boolean) => PartialDeep<TValue$1>;
1265
1323
  /** Sets all properties as dirty, triggering all rules. It returns a promise that will either resolve to false or a type safe copy of your form state. Values that had the required rule will be transformed into a non-nullable value (type only). */
1266
1324
  $validate: (forceValues?: TValue$1) => Promise<{
1267
1325
  valid: boolean;
@@ -1286,9 +1344,9 @@ type MergedReglesResult<TRegles extends Record<string, SuperCompatibleRegleRoot>
1286
1344
  issues: EmptyObject;
1287
1345
  };
1288
1346
  declare function mergeRegles<TRegles extends Record<string, SuperCompatibleRegleRoot>, TScoped extends boolean = false>(regles: TRegles, _scoped?: TScoped): TScoped extends false ? MergedRegles<TRegles> : MergedScopedRegles;
1289
- type useCollectScopeFn<TNamedScoped extends boolean = false> = TNamedScoped extends true ? <const TValue$1 extends Record<string, Record<string, any>>>(namespace?: MaybeRefOrGetter<string>) => {
1347
+ type useCollectScopeFn<TNamedScoped extends boolean = false> = TNamedScoped extends true ? <const TValue$1 extends Record<string, Record<string, any>>>(namespace?: MaybeRefOrGetter<string | string[]>) => {
1290
1348
  r$: MergedRegles<{ [K in keyof TValue$1]: RegleRoot<TValue$1[K]> & SuperCompatibleRegleRoot }>;
1291
- } : <TValue$1 extends Record<string, unknown>[] = Record<string, unknown>[]>(namespace?: MaybeRefOrGetter<string>) => {
1349
+ } : <TValue$1 extends Record<string, unknown>[] = Record<string, unknown>[]>(namespace?: MaybeRefOrGetter<string | string[]>) => {
1292
1350
  r$: MergedScopedRegles<TValue$1>;
1293
1351
  };
1294
1352
  type UseScopedRegleOptions<TAsRecord extends boolean> = {
@@ -1322,7 +1380,7 @@ declare function createScopedUseRegle<TCustomRegle extends useRegleFn<any, any>
1322
1380
  useScopedRegle: TReturnedRegle;
1323
1381
  useCollectScope: useCollectScopeFn<TAsRecord>;
1324
1382
  };
1325
- declare const useCollectScope: <TValue$1 extends Record<string, unknown>[] = Record<string, unknown>[]>(namespace?: vue0.MaybeRefOrGetter<string>) => {
1383
+ declare const useCollectScope: <TValue$1 extends Record<string, unknown>[] = Record<string, unknown>[]>(namespace?: vue0.MaybeRefOrGetter<string | string[]>) => {
1326
1384
  r$: MergedScopedRegles<TValue$1>;
1327
1385
  }, useScopedRegle: useRegleFn<Partial<AllRulesDeclarations>, never, {
1328
1386
  dispose: () => void;
@@ -1365,6 +1423,7 @@ declare function narrowVariant<TRoot extends {
1365
1423
  $fields: {
1366
1424
  [x: string]: unknown;
1367
1425
  };
1426
+ $value: unknown;
1368
1427
  }, const TKey$1 extends keyof TRoot, const TValue$1 extends (LazyJoinDiscriminatedUnions<Exclude<TRoot[TKey$1], RegleCollectionStatus<any, any, any> | RegleStatus<any, any, any> | NarrowVariantExtracts[keyof NarrowVariantExtracts]>> extends {
1369
1428
  $value: infer V;
1370
1429
  } ? V : unknown)>(root: TRoot | undefined, discriminantKey: TKey$1, discriminantValue: TValue$1): root is NarrowVariant<TRoot, TKey$1, TValue$1>;
@@ -1415,4 +1474,4 @@ declare function defineRules<TRules$1 extends RegleUnknownRulesTree>(rules: TRul
1415
1474
  */
1416
1475
  declare function refineRules<TRules$1 extends RegleUnknownRulesTree, TRefinement extends ReglePartialRuleTree<InferInput<TRules$1>> & RegleUnknownRulesTree>(rules: TRules$1, refinement: (state: Ref<InferInput<TRules$1>>) => TRefinement): (state: Ref<InferInput<TRules$1>>) => Merge<TRules$1, TRefinement>;
1417
1476
  declare const RegleVuePlugin: Plugin;
1418
- export { type $InternalRegleStatus, type AllRulesDeclarations, type ArrayElement, type CommonAlphaOptions, type CommonComparisonOptions, type CreateScopedUseRegleOptions, type DeepMaybeRef, type DeepReactiveState, type DefaultValidatorsTree, type FormRuleDeclaration, type HasNamedKeys, type HaveAnyRequiredProps, type InferInput, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleShortcuts, type InferRegleStatusType, type InferSafeOutput, type InlineRuleDeclaration, InternalRuleType, type JoinDiscriminatedUnions, type LocalRegleBehaviourOptions, type Maybe, type MaybeInput, type MaybeOutput, type MaybeReadonly, type MaybeVariantStatus, type MergedRegles, type MergedScopedRegles, type NarrowVariant, type NarrowVariantExtracts, type NarrowVariantFieldExtracts, type NoInferLegacy, type NonEmptyTuple, type PrimitiveTypes, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleCustomFieldStatus, type RegleEnforceCustomRequiredRules, type RegleEnforceRequiredRules, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleExternalSchemaErrorTree, type RegleFieldIssue, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type RegleIssuesTree, type ReglePartialRuleTree, type RegleResult, type RegleRoot, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleMetadataExtended, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleTypeReturn, type RegleRuleWithParamsDefinition, type RegleShortcutDefinition, type RegleSingleField, type RegleStatus, type RegleUniversalParams, type RegleUnknownRulesTree, type RegleValidationErrors, type RegleValidationGroupEntry, type RegleValidationGroupOutput, type RegleRuleTree as RegleValidationTree, RegleVuePlugin, type ResolvedRegleBehaviourOptions, type ScopedInstancesRecord, type ScopedInstancesRecordLike, type SuperCompatibleRegle, type SuperCompatibleRegleCollectionErrors, type SuperCompatibleRegleCollectionStatus, type SuperCompatibleRegleFieldStatus, type SuperCompatibleRegleResult, type SuperCompatibleRegleRoot, type SuperCompatibleRegleRuleStatus, type SuperCompatibleRegleStatus, type TupleToPlainObj, type Unwrap, type UnwrapRegleUniversalParams, type UnwrapRuleWithParams, type UseScopedRegleOptions, createRule, createScopedUseRegle, createVariant, defineRegleConfig, defineRules, extendRegleConfig, flatErrors, inferRules, type inferRulesFn, mergeRegles, narrowVariant, refineRules, unwrapRuleParameters, useCollectScope, type useCollectScopeFn, useRegle, type useRegleFn, useRootStorage, useRules, type useRulesFn, useScopedRegle, variantToRef };
1477
+ export { type $InternalRegleStatus, type AllRulesDeclarations, type ArrayElement, type CommonAlphaOptions, type CommonComparisonOptions, type CreateScopedUseRegleOptions, type DeepMaybeRef, type DeepReactiveState, type DefaultValidatorsTree, type FormRuleDeclaration, type HasNamedKeys, type HaveAnyRequiredProps, type InferInput, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleShortcuts, type InferRegleStatusType, type InferSafeOutput, type InlineRuleDeclaration, InternalRuleType, type IsRegleStatic, type JoinDiscriminatedUnions, type LocalRegleBehaviourOptions, type Maybe, type MaybeInput, type MaybeOutput, type MaybeReadonly, type MaybeVariantStatus, type MergedRegles, type MergedScopedRegles, type NarrowVariant, type NarrowVariantExtracts, type NarrowVariantFieldExtracts, type NoInferLegacy, type NonEmptyTuple, type PrimitiveTypes, type Regle, type RegleBehaviourOptions, type RegleCollectionErrors, type RegleCollectionRuleDecl, type RegleCollectionRuleDefinition, type RegleCollectionStatus, type RegleCommonStatus, type RegleComputedRules, type RegleCustomFieldStatus, type RegleEnforceCustomRequiredRules, type RegleEnforceRequiredRules, type RegleErrorTree, type RegleExternalCollectionErrors, type RegleExternalErrorTree, type RegleExternalSchemaErrorTree, type RegleFieldIssue, type RegleFieldStatus, type RegleFormPropertyType, type RegleInternalRuleDefs, type RegleIssuesTree, type ReglePartialRuleTree, type RegleResult, type RegleRoot, type RegleRuleCore, type RegleRuleDecl, type RegleRuleDefinition, type RegleRuleDefinitionProcessor, type RegleRuleDefinitionWithMetadataProcessor, type RegleRuleInit, type RegleRuleMetadataConsumer, type RegleRuleMetadataDefinition, type RegleRuleMetadataExtended, type RegleRuleRaw, type RegleRuleStatus, type RegleRuleTypeReturn, type RegleRuleWithParamsDefinition, type RegleShortcutDefinition, type RegleSingleField, type RegleStatic, type RegleStaticImpl, type RegleStatus, type RegleUniversalParams, type RegleUnknownRulesTree, type RegleValidationErrors, type RegleValidationGroupEntry, type RegleValidationGroupOutput, type RegleRuleTree as RegleValidationTree, RegleVuePlugin, type ResolvedRegleBehaviourOptions, type ScopedInstancesRecord, type ScopedInstancesRecordLike, type SuperCompatibleRegle, type SuperCompatibleRegleCollectionErrors, type SuperCompatibleRegleCollectionStatus, type SuperCompatibleRegleFieldStatus, type SuperCompatibleRegleResult, type SuperCompatibleRegleRoot, type SuperCompatibleRegleRuleStatus, type SuperCompatibleRegleStatus, type TupleToPlainObj, type Unwrap, type UnwrapRegleUniversalParams, type UnwrapRuleWithParams, type UnwrapStatic, type UseScopedRegleOptions, createRule, createScopedUseRegle, createVariant, defineRegleConfig, defineRules, extendRegleConfig, flatErrors, inferRules, type inferRulesFn, markStatic, mergeRegles, narrowVariant, refineRules, unwrapRuleParameters, useCollectScope, type useCollectScopeFn, useRegle, type useRegleFn, useRootStorage, useRules, type useRulesFn, useScopedRegle, variantToRef };
@@ -137,6 +137,20 @@ function dotPathObjectToNested(obj) {
137
137
  }
138
138
  return result;
139
139
  }
140
+ function hasOwn(val, key) {
141
+ return Object.prototype.hasOwnProperty.call(val, key);
142
+ }
143
+ function def(obj, key, value, writable = false) {
144
+ Object.defineProperty(obj, key, {
145
+ configurable: true,
146
+ enumerable: false,
147
+ writable,
148
+ value
149
+ });
150
+ }
151
+ function isConstructor(value) {
152
+ return typeof value === "function" && !!value.prototype && value.prototype.constructor === value;
153
+ }
140
154
 
141
155
  /**
142
156
  * This utility will coerce any string, number or Date value into a Date using the Date constructor.
@@ -644,8 +658,11 @@ function useStorage() {
644
658
  };
645
659
  }
646
660
 
661
+ const regleSymbol = Symbol("regle");
662
+ const REGLE_FLAGS = { REGLE_STATIC: "__regle_static" };
663
+
647
664
  function isNestedRulesDef(state, rules) {
648
- return isRefObject(state) || isObject(rules.value) && !isEmpty(rules.value) && !Object.entries(rules.value).some(([_, rule]) => isRuleDef(rule) || typeof rule === "function");
665
+ return !isStatic(state.value) && (isRefObject(state) || isObject(rules.value) && !isEmpty(rules.value) && !Object.entries(rules.value).some(([_, rule]) => isRuleDef(rule) || typeof rule === "function"));
649
666
  }
650
667
  function isCollectionRulesDef(rules, state, schemaMode = false) {
651
668
  return !!rules.value && isObject(rules.value) && "$each" in rules.value || schemaMode && Array.isArray(state.value) && state.value.some(isObject) || Array.isArray(state.value) && state.value.some(isObject);
@@ -663,6 +680,9 @@ function isFormRuleDefinition(rule) {
663
680
  }
664
681
  return true;
665
682
  }
683
+ function isStatic(value) {
684
+ return isObject(value) && hasOwn(value, REGLE_FLAGS.REGLE_STATIC) && value[REGLE_FLAGS.REGLE_STATIC] === true;
685
+ }
666
686
 
667
687
  function isNestedRulesStatus(rule) {
668
688
  return isObject(rule) && "$fields" in rule;
@@ -1024,6 +1044,9 @@ function createReactiveFieldStatus({ state, rulesDef, customMessages, path, cach
1024
1044
  const $dirty = ref(false);
1025
1045
  const triggerPunishment = ref(false);
1026
1046
  const $anyDirty = computed(() => $dirty.value);
1047
+ const $isArrayOrRegleStatic = computed(() => {
1048
+ return $isArray || isStatic(state.value);
1049
+ });
1027
1050
  const $debounce$1 = computed(() => {
1028
1051
  if ($localOptions.value.$debounce != null) return $localOptions.value.$debounce;
1029
1052
  if (scopeState.$haveAnyAsyncRule.value) return DEFAULT_DEBOUNCE_TIME;
@@ -1225,7 +1248,8 @@ function createReactiveFieldStatus({ state, rulesDef, customMessages, path, cach
1225
1248
  processShortcuts,
1226
1249
  $silentValue,
1227
1250
  $inactive,
1228
- $modifiers
1251
+ $modifiers,
1252
+ $isArrayOrRegleStatic
1229
1253
  };
1230
1254
  });
1231
1255
  define$watchState();
@@ -1258,7 +1282,7 @@ function createReactiveFieldStatus({ state, rulesDef, customMessages, path, cach
1258
1282
  if (rulesDef.value instanceof Function) createReactiveRulesResult();
1259
1283
  if (!scopeState.$silent.value || scopeState.$rewardEarly.value && scopeState.$error.value) $commit();
1260
1284
  if (scopeState.$clearExternalErrorsOnChange.value) $clearExternalErrors();
1261
- }, { deep: $isArray ? true : isVueSuperiorOrEqualTo3dotFive ? 1 : true });
1285
+ }, { deep: scopeState.$isArrayOrRegleStatic.value ? true : isVueSuperiorOrEqualTo3dotFive ? 1 : true });
1262
1286
  }
1263
1287
  async function $commitHandler() {
1264
1288
  try {
@@ -2419,8 +2443,6 @@ const INSPECTOR_IDS = {
2419
2443
  TIMELINE: "regle-timeline"
2420
2444
  };
2421
2445
 
2422
- const regleSymbol = Symbol("regle");
2423
-
2424
2446
  function useRegleDevtoolsRegistry() {
2425
2447
  const loggedWarning = ref(false);
2426
2448
  const devtoolsApi = shallowRef();
@@ -2442,7 +2464,7 @@ function useRegleDevtoolsRegistry() {
2442
2464
  id,
2443
2465
  name,
2444
2466
  r$,
2445
- componentName: options?.componentName ? `<${options.componentName}>` : void 0,
2467
+ componentName: options?.componentName,
2446
2468
  filePath: options?.filePath
2447
2469
  });
2448
2470
  const stopHandle = watch(() => r$, () => notifyDevtools(), {
@@ -2577,7 +2599,9 @@ function buildFieldState(fieldStatus) {
2577
2599
  const remainingProperties = getRemainingProperties(fieldStatus, [
2578
2600
  ...PRIORITY_KEYS.FIELD,
2579
2601
  "$rules",
2580
- "$fields"
2602
+ "$fields",
2603
+ "$modifiers",
2604
+ "$deepCompare"
2581
2605
  ]);
2582
2606
  if (remainingProperties.length > 0) state["Other Properties"] = remainingProperties;
2583
2607
  if (fieldStatus["~modifiers"]) state["Modifiers"] = Object.entries(fieldStatus["~modifiers"]).map(([key, value]) => ({
@@ -2624,8 +2648,7 @@ function buildRuleState(ruleStatus) {
2624
2648
  "$fieldPending",
2625
2649
  "$fieldCorrect",
2626
2650
  "$fieldError",
2627
- "$maybePending",
2628
- "$externalErrors"
2651
+ "$maybePending"
2629
2652
  ]);
2630
2653
  if (remainingProperties.length > 0) state["Other Properties"] = remainingProperties;
2631
2654
  return state;
@@ -2634,7 +2657,12 @@ function buildRootState(r$) {
2634
2657
  const state = {};
2635
2658
  const priorityProperties = getPriorityProperties(r$, PRIORITY_KEYS.ROOT);
2636
2659
  if (priorityProperties.length > 0) state["State"] = priorityProperties;
2637
- const remainingProperties = getRemainingProperties(r$, [...PRIORITY_KEYS.ROOT, "$fields"]);
2660
+ const remainingProperties = getRemainingProperties(r$, [
2661
+ ...PRIORITY_KEYS.ROOT,
2662
+ "$fields",
2663
+ "$modifiers",
2664
+ "$path"
2665
+ ]);
2638
2666
  if (remainingProperties.length > 0) state["Other Properties"] = remainingProperties;
2639
2667
  if (r$["~modifiers"]) state["Modifiers"] = Object.entries(r$["~modifiers"]).map(([key, value]) => ({
2640
2668
  key,
@@ -2686,7 +2714,7 @@ function buildInspectorState(nodeId, getInstance) {
2686
2714
  return buildRootState(instance.r$);
2687
2715
  }
2688
2716
 
2689
- function handleValidateAction(nodeId, api) {
2717
+ function handleValidateAction(nodeId) {
2690
2718
  if (nodeId.includes(":rule:")) return;
2691
2719
  const fieldInfo = parseFieldNodeId(nodeId);
2692
2720
  if (fieldInfo) {
@@ -2700,9 +2728,9 @@ function handleValidateAction(nodeId, api) {
2700
2728
  const instance = regleDevtoolsRegistry.get(nodeId);
2701
2729
  if (instance && typeof instance.r$.$validate === "function") instance.r$.$validate();
2702
2730
  }
2703
- emitInspectorState(api);
2731
+ regleDevtoolsRegistry.notifyDevtools();
2704
2732
  }
2705
- async function handleResetAction(nodeId, api, resetState = false) {
2733
+ function handleResetAction(nodeId, resetState = false) {
2706
2734
  const fieldInfo = parseFieldNodeId(nodeId);
2707
2735
  if (fieldInfo) {
2708
2736
  const { instanceId, fieldName } = fieldInfo;
@@ -2715,6 +2743,23 @@ async function handleResetAction(nodeId, api, resetState = false) {
2715
2743
  const instance = regleDevtoolsRegistry.get(nodeId);
2716
2744
  if (instance && typeof instance.r$.$reset === "function") instance.r$.$reset({ toOriginalState: resetState });
2717
2745
  }
2746
+ regleDevtoolsRegistry.notifyDevtools();
2747
+ }
2748
+ function handleTouchAction(nodeId) {
2749
+ if (nodeId.includes(":rule:")) return;
2750
+ const fieldInfo = parseFieldNodeId(nodeId);
2751
+ if (fieldInfo) {
2752
+ const { instanceId, fieldName } = fieldInfo;
2753
+ const instance = regleDevtoolsRegistry.get(instanceId);
2754
+ if (instance && instance.r$.$fields) {
2755
+ const fieldStatus = resolveFieldByPath(instance.r$.$fields, fieldName);
2756
+ if (fieldStatus && typeof fieldStatus.$touch === "function") fieldStatus.$touch();
2757
+ }
2758
+ } else {
2759
+ const instance = regleDevtoolsRegistry.get(nodeId);
2760
+ if (instance && typeof instance.r$.$touch === "function") instance.r$.$touch();
2761
+ }
2762
+ regleDevtoolsRegistry.notifyDevtools();
2718
2763
  }
2719
2764
  function handleEditInspectorState(payload) {
2720
2765
  const { nodeId, path, state } = payload;
@@ -2734,7 +2779,7 @@ async function emitInspectorState(api) {
2734
2779
 
2735
2780
  function buildNodeTags(fieldOrR$, componentName) {
2736
2781
  const tags = [];
2737
- const isOptional = isFieldStatus(fieldOrR$) ? "required" in fieldOrR$.$rules && !fieldOrR$.$rules.required.$active : false;
2782
+ const isOptional = isFieldStatus(fieldOrR$) ? "required" in fieldOrR$.$rules && !fieldOrR$.$rules.required.$active || isEmpty(fieldOrR$.$rules) : false;
2738
2783
  const isNestedOrCollection = isNestedRulesStatus(fieldOrR$) || isCollectionRulesStatus(fieldOrR$);
2739
2784
  if (fieldOrR$.$error) tags.push({
2740
2785
  label: "error",
@@ -2761,7 +2806,7 @@ function buildNodeTags(fieldOrR$, componentName) {
2761
2806
  backgroundColor: COLORS.OPTIONAL.bg,
2762
2807
  tooltip: TOOLTIP_LABELS_FIELDS.OPTIONAL
2763
2808
  });
2764
- if (!fieldOrR$.$invalid) tags.push({
2809
+ if (!fieldOrR$.$invalid && fieldOrR$.$dirty) tags.push({
2765
2810
  label: "valid",
2766
2811
  textColor: COLORS.VALID.text,
2767
2812
  backgroundColor: COLORS.VALID.bg,
@@ -2774,14 +2819,14 @@ function buildNodeTags(fieldOrR$, componentName) {
2774
2819
  backgroundColor: COLORS.DIRTY.bg,
2775
2820
  tooltip: isNestedOrCollection ? TOOLTIP_LABELS_NESTED.DIRTY : TOOLTIP_LABELS_FIELDS.DIRTY
2776
2821
  });
2777
- else if ("$rules" in fieldOrR$) tags.push({
2822
+ else if (!isOptional) tags.push({
2778
2823
  label: "pristine",
2779
2824
  textColor: COLORS.PRISTINE.text,
2780
2825
  backgroundColor: COLORS.PRISTINE.bg,
2781
2826
  tooltip: TOOLTIP_LABELS_FIELDS.PRISTINE
2782
2827
  });
2783
2828
  if (componentName) tags.push({
2784
- label: componentName,
2829
+ label: `<${componentName}.vue>`,
2785
2830
  textColor: COLORS.COMPONENT.text,
2786
2831
  backgroundColor: COLORS.COMPONENT.bg
2787
2832
  });
@@ -2939,6 +2984,8 @@ function filterInspectorTree(nodes, filter) {
2939
2984
  return filtered;
2940
2985
  }
2941
2986
 
2987
+ var version$1 = "1.12.0-beta.1";
2988
+
2942
2989
  function createDevtools(app) {
2943
2990
  setupDevtoolsPlugin({
2944
2991
  id: "regle-devtools",
@@ -2957,26 +3004,40 @@ function createDevtools(app) {
2957
3004
  icon: "rule",
2958
3005
  treeFilterPlaceholder: "Filter state",
2959
3006
  stateFilterPlaceholder: "Filter validation status",
3007
+ actions: [{
3008
+ icon: "confirmation_number",
3009
+ tooltip: "Log Regle version",
3010
+ action: () => {
3011
+ console.info("Regle version", version$1);
3012
+ }
3013
+ }],
2960
3014
  nodeActions: [
2961
3015
  {
2962
- icon: "check_circle",
3016
+ icon: "check",
2963
3017
  tooltip: "Validate",
2964
3018
  action: (nodeId) => {
2965
- handleValidateAction(nodeId, api);
3019
+ handleValidateAction(nodeId);
2966
3020
  }
2967
3021
  },
3022
+ {
3023
+ icon: "touch_app",
3024
+ action: (nodeId) => {
3025
+ handleTouchAction(nodeId);
3026
+ },
3027
+ tooltip: "Touch the instance with $touch"
3028
+ },
2968
3029
  {
2969
3030
  icon: "refresh",
2970
3031
  tooltip: "Reset validation state",
2971
3032
  action: (nodeId) => {
2972
- handleResetAction(nodeId, api);
3033
+ handleResetAction(nodeId);
2973
3034
  }
2974
3035
  },
2975
3036
  {
2976
3037
  icon: "restore",
2977
3038
  tooltip: "Restore to original state",
2978
3039
  action: (nodeId) => {
2979
- handleResetAction(nodeId, api, true);
3040
+ handleResetAction(nodeId, true);
2980
3041
  }
2981
3042
  }
2982
3043
  ]
@@ -3212,6 +3273,33 @@ email: { required }
3212
3273
  */
3213
3274
  const useRules = createUseRulesComposable();
3214
3275
 
3276
+ /**
3277
+ * Marks a value as static and treats the constructor as a regular raw Field.
3278
+ * @param value - The value to mark as static.
3279
+ * @returns The marked value.
3280
+ * @example
3281
+ * ```ts
3282
+ * const StaticDecimal = markStatic(Decimal);
3283
+ * const StaticBigWrapper = markStatic(BigWrapper);
3284
+ * ```
3285
+ */
3286
+ function markStatic(value) {
3287
+ if (isConstructor(value)) {
3288
+ const OriginalConstructor = value;
3289
+ const StaticConstructor = function(...args) {
3290
+ return applyMarkStatic(new OriginalConstructor(...args));
3291
+ };
3292
+ Object.defineProperty(StaticConstructor, "name", { value: OriginalConstructor.name });
3293
+ StaticConstructor.prototype = OriginalConstructor.prototype;
3294
+ return applyMarkStatic(StaticConstructor);
3295
+ }
3296
+ return applyMarkStatic(value);
3297
+ }
3298
+ function applyMarkStatic(value) {
3299
+ if (!hasOwn(value, REGLE_FLAGS.REGLE_STATIC) && Object.isExtensible(value)) def(value, REGLE_FLAGS.REGLE_STATIC, true);
3300
+ return value;
3301
+ }
3302
+
3215
3303
  /**
3216
3304
  * Define a global regle configuration, where you can:
3217
3305
  * - Customize built-in rules messages
@@ -3417,7 +3505,7 @@ function mergeRegles(regles, _scoped) {
3417
3505
  };
3418
3506
  }
3419
3507
  }
3420
- return reactive({
3508
+ const fullStatus = reactive({
3421
3509
  ...!scoped && { $silentValue },
3422
3510
  $errors,
3423
3511
  $issues,
@@ -3440,23 +3528,46 @@ function mergeRegles(regles, _scoped) {
3440
3528
  $extractDirtyFields,
3441
3529
  $clearExternalErrors
3442
3530
  });
3531
+ watchEffect(() => {
3532
+ if (scoped) return;
3533
+ for (const key of Object.keys(fullStatus).filter((key$1) => !key$1.startsWith("$") && !key$1.startsWith("~"))) delete fullStatus[key];
3534
+ for (const [key, field] of Object.entries($instances.value)) Object.assign(fullStatus, { [key]: field });
3535
+ });
3536
+ return fullStatus;
3443
3537
  }
3444
3538
 
3445
3539
  function createUseCollectScope(instances, options) {
3446
3540
  function useCollectScope$1(namespace) {
3447
3541
  const computedNamespace = computed(() => toValue(namespace));
3542
+ const namespaceInstances = reactive({});
3448
3543
  setEmptyNamespace();
3449
3544
  const r$ = ref(collectRegles(instances.value));
3450
3545
  const regle = reactive({ r$ });
3451
3546
  function setEmptyNamespace() {
3452
- if (computedNamespace.value && !instances.value[computedNamespace.value]) instances.value[computedNamespace.value] = {};
3547
+ if (computedNamespace.value) {
3548
+ if (typeof computedNamespace.value === "string" && !instances.value[computedNamespace.value]) instances.value[computedNamespace.value] = {};
3549
+ else if (Array.isArray(computedNamespace.value)) computedNamespace.value.forEach((namespace$1) => {
3550
+ if (!instances.value[namespace$1]) instances.value[namespace$1] = {};
3551
+ });
3552
+ }
3453
3553
  }
3454
3554
  watch(computedNamespace, setEmptyNamespace);
3455
3555
  watch(instances, (newInstances) => {
3456
3556
  r$.value = collectRegles(newInstances);
3457
3557
  }, { deep: true });
3458
3558
  function collectRegles(r$Instances) {
3459
- if (computedNamespace.value) return mergeRegles(r$Instances[computedNamespace.value] ?? {}, !options.asRecord);
3559
+ if (computedNamespace.value) if (typeof computedNamespace.value === "string") return mergeRegles(r$Instances[computedNamespace.value] ?? {}, !options.asRecord);
3560
+ else {
3561
+ Object.keys(namespaceInstances).forEach((key) => {
3562
+ delete namespaceInstances[key];
3563
+ });
3564
+ computedNamespace.value.forEach((namespace$1) => {
3565
+ Object.entries(r$Instances[namespace$1]).forEach(([key, regle$1]) => {
3566
+ Object.assign(namespaceInstances, { [key]: regle$1 });
3567
+ });
3568
+ });
3569
+ return mergeRegles(namespaceInstances, !options.asRecord);
3570
+ }
3460
3571
  else return mergeRegles(r$Instances["~~global"] ?? {}, !options.asRecord);
3461
3572
  }
3462
3573
  return { r$: regle.r$ };
@@ -3624,11 +3735,9 @@ function refineRules(rules, refinement) {
3624
3735
  return (state) => merge({ ...rules }, refinement(state));
3625
3736
  }
3626
3737
 
3627
- var version$1 = "1.11.0";
3628
-
3629
3738
  const RegleVuePlugin = { install(app) {
3630
3739
  app.provide(regleSymbol, version$1);
3631
3740
  if (typeof window !== "undefined" && true) createDevtools(app);
3632
3741
  } };
3633
3742
 
3634
- export { InternalRuleType, RegleVuePlugin, createRule, createScopedUseRegle, createVariant, defineRegleConfig, defineRules, extendRegleConfig, flatErrors, inferRules, mergeRegles, narrowVariant, refineRules, unwrapRuleParameters, useCollectScope, useRegle, useRootStorage, useRules, useScopedRegle, variantToRef };
3743
+ export { InternalRuleType, RegleVuePlugin, createRule, createScopedUseRegle, createVariant, defineRegleConfig, defineRules, extendRegleConfig, flatErrors, inferRules, markStatic, mergeRegles, narrowVariant, refineRules, unwrapRuleParameters, useCollectScope, useRegle, useRootStorage, useRules, useScopedRegle, variantToRef };
@@ -1 +1 @@
1
- import{computed as e,effectScope as t,getCurrentInstance as n,getCurrentScope as r,isRef as i,markRaw as a,nextTick as o,onMounted as s,onScopeDispose as c,reactive as l,ref as u,shallowRef as d,toRef as f,toValue as p,triggerRef as m,unref as h,version as g,watch as _,watchEffect as v}from"vue";function y(e){return e?.constructor?.name==`File`||e?.constructor?.name==`FileList`}function b(e,t=!0){return e==null?!0:e instanceof Date?isNaN(e.getTime()):y(e)?e.size<=0:Array.isArray(e)?t?e.length===0:!1:typeof e==`object`&&e?Object.keys(e).length===0:!String(e).length}const x=Symbol(`regle-rule`);function S(e){if(typeof e.source.flags==`string`)return e.source.flags;{let t=[];return e.global&&t.push(`g`),e.ignoreCase&&t.push(`i`),e.multiline&&t.push(`m`),e.sticky&&t.push(`y`),e.unicode&&t.push(`u`),t.join(``)}}function C(e,t=0){if(t>20)return e;let n=e,r={}.toString.call(e).slice(8,-1);if(r==`Set`&&(n=new Set([...e].map(e=>C(e,t++)))),r==`Map`&&(n=new Map([...e].map(e=>[C(e[0]),C(e[1])]))),r==`Date`&&(n=new Date(e.getTime())),r==`RegExp`&&(n=RegExp(e.source,S(e))),r==`Array`||r==`Object`)for(let r in n=Array.isArray(e)?[]:{},e)n[r]=C(e[r],t++);return n}function w(e){return e&&(e instanceof Date||e.constructor.name==`File`||e.constructor.name==`FileList`)?!1:typeof e==`object`&&!!e&&!Array.isArray(e)}function T(e,...t){for(var n=[].slice.call(arguments),r,i=n.length;r=n[i-1],i--;)if(!r||typeof r!=`object`&&typeof r!=`function`)throw Error(`expected object, got `+r);for(var a=n[0],o=n.slice(1),s=o.length,i=0;i<s;i++){var c=o[i];for(var l in c)a[l]=c[l]}return a}function E(e){let t={};for(let n in e){if(!Object.prototype.hasOwnProperty.call(e,n))continue;let r=e[n],i=n.split(`.`),a=t;for(let e=0;e<i.length;e++){let t=i[e],n=e===i.length-1,o=t.match(/^\d+$/)?Number(t):null;if(o!==null){if(Array.isArray(a))if(n)a[o]=r;else{if(typeof a[o]!=`object`||a[o]===null){let t=i[e+1];a[o]=t&&t.match(/^\d+$/)?{$each:[],$self:[]}:{}}a=`$each`in a[o]?a[o].$each:a[o]}}else if(n)if(Array.isArray(a[t])){let e=a[t].slice();a[t]={},a[t].$self=e}else typeof a[t]==`object`&&a[t]!==null&&`$each`in a[t]?a[t].$self=r:a[t]=r;else{let n=i[e+1];if(Array.isArray(a[t])){let e=a[t].slice();a[t]={$each:[]},a[t].$self=e}(typeof a[t]!=`object`||a[t]===null||Array.isArray(a[t])&&!n.match(/^\d+$/))&&(n&&n.match(/^\d+$/)?a[t]={$each:[],$self:[]}:a[t]={}),a=`$each`in a[t]?a[t].$each:a[t]}}}return t}function D(e){let t=Object.prototype.toString.call(e);return e==null?new Date(NaN):e instanceof Date||typeof e==`object`&&t===`[object Date]`?new Date(e.getTime()):typeof e==`number`||t===`[object Number]`||typeof e==`string`||t===`[object String]`?new Date(e):new Date(NaN)}function O(e,t,{immediate:n=!1,trackDebounceRef:r}={}){let i,a=(...a)=>{r&&(r.value=!0);function o(){r&&(r.value=!1)}return new Promise((r,s)=>{function c(e){r(e),o()}if(clearTimeout(i),i=setTimeout(()=>{if(o(),i=void 0,!n)try{Promise.resolve(e.apply(this,[...a])).then(c).catch(e=>s(e)).finally(o)}catch(e){s(e)}},t),n){o();try{Promise.resolve(e.apply(this,[...a])).then(c).catch(e=>s(e)).finally(o)}catch(e){s(e)}}})};return a.cancel=()=>{clearTimeout(i),i=void 0,r&&(r.value=!1)},a}function k(e,t,n=!1,r=!0){if(e===t)return!0;if(e&&t&&typeof e==`object`&&typeof t==`object`){if(e.constructor!==t.constructor)return!1;var i,a,o;if(Array.isArray(e)&&Array.isArray(t)){if(i=e.length,i!=t.length)return!1;if(r||!r&&n){for(a=i;a--!==0;)if(!k(e[a],t[a],n,!1))return!1}return!0}if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===t.toString();if(o=Object.keys(e),i=o.length,i!==Object.keys(t).length)return!1;for(a=i;a--!==0;)if(!Object.prototype.hasOwnProperty.call(t,o[a]))return!1;for(a=i;a--!==0;){var s=o[a];if(w(e)&&w(t)&&s&&(r||!r&&n)&&!k(e[s],t[s],n,!1))return!1}return!0}return e!==e&&t!==t}var A=class extends Error{constructor(e=`Promise was aborted`){super(e),this.name=`AbortError`}};function j(e){let t=new AbortController,{signal:n}=t,r=new Promise((t,r)=>{if(n.aborted){r(new A);return}function i(){r(new A)}n.addEventListener(`abort`,i),e.then(e=>{n.removeEventListener(`abort`,i),n.aborted?r(new A):t(e)}).catch(e=>{n.removeEventListener(`abort`,i),n.aborted?r(new A):r(e)})});function i(e){t.abort(e)}return{promise:r,abort:i,signal:n}}const M={Inline:`__inline`,Async:`__async`};function N(e,t){return e.some(e=>t?e?.[t]:!1)}function P(e,t){return t?e.reduce((e,n)=>{let r=n?.[t]||[];return e.concat(r)},[]):[]}function F(e){try{return e.map(e=>p(e))}catch{return[]}}function I(t){return t.map(t=>t instanceof Function?e(t):i(t)?t:f(()=>t))}function L(e){let t=e.toString().replace(/\/\/.*$/gm,``).replace(/\/\*[\s\S]*?\*\//g,``).match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return t?(t[0]||t[1]||t[2]||t[3]||t[4]||``).split(`,`).map(e=>e.trim()).filter(e=>e.length>0).length:0}function R(e,...t){let{validator:n,type:r,async:i}=e,o=i||r===M.Async||n.constructor.name===`AsyncFunction`;return a({validator(n,...r){return e.validator(n,...F(r.length?r:t))},message(n){return typeof e.message==`function`?e.message({...n,$params:F(n?.$params?.length?n.$params:t)}):e.message},active(n){return typeof e.active==`function`?e.active({...n,$params:F(n?.$params?.length?n.$params:t)}):e.active??!0},tooltip(n){return typeof e.tooltip==`function`?e.tooltip({...n,$params:F(n?.$params?.length?n.$params:t)}):e.tooltip??[]},exec(n){let r=e.validator(n,...F(t)),i;return r instanceof Promise?r.then(e=>(i=e,typeof i==`object`&&`$valid`in i?i.$valid:typeof i==`boolean`?i:!1)):(i=r,typeof i==`object`&&`$valid`in i?i.$valid:typeof i==`boolean`?i:!1)},type:r,_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:!1,_tooltip_patched:!1,_async:o,_params:I(t),_brand:x})}function z(e){if(typeof e.validator==`function`){let t=[],n=e.async??e.validator.constructor.name===`AsyncFunction`,r=R({...e,async:n},...t);if(L(e.validator)>1){let t=function(...t){return R(e,...t)};return t.validator=r.validator,t.message=r.message,t.active=r.active,t.tooltip=r.tooltip,t.type=r.type,t.exec=r.exec,t._validator=r.validator,t._message=r.message,t._active=r.active,t._tooltip=r.tooltip,t._type=e.type,t._message_pacthed=!1,t._tooltip_pacthed=!1,t._async=n,t}else return r}throw Error(`[createRule] validator must be a function`)}function B(e){return w(e.value)}function V(e,n,r){let i=t(),a;return a=e instanceof Function?i.run(()=>e(n,r??0)):e,{scope:i,unwrapped:a}}const H={LessThan:-1,EqualTo:0,GreaterThan:1};function U(e,t){let n=String(e).split(`.`),r=String(t).split(`.`);for(let e=0;e<Math.min(n.length,r.length);e++){let t=Number(n[e]),i=Number(r[e]);if(t>i)return H.GreaterThan;if(i>t)return H.LessThan;if(!isNaN(t)&&isNaN(i))return H.GreaterThan;if(isNaN(t)&&!isNaN(i))return H.LessThan}return H.EqualTo}const W=U(g,`3.5.0`)!==-1;function G(){return Math.floor(Math.random()*Date.now()).toString()}function K(){return typeof window>`u`?G():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function q(e){return r()?(c(e),!0):!1}function J(e){let n=!1,r,i=t(!0);return((...t)=>(n||=(r=i.run(()=>e(...t)),!0),r))}function Y(){let e=d(new Map),t=d(new Map),n=d(new Map),i=d(new Map),a=d(new Map),o=d(new Map);function s(e){let n=t.value.get(e);if(n)return n;{let n=u({});return t.value.set(e,n),n}}function l(e){let t=n.value.get(e);if(t)return t;{let t=u([]);return n.value.set(e,t),t}}function f(e,t,n){o.value.set(`${e}-${t}`,n)}function p(e,t){return o.value.get(`${e}-${t}`)}function m(e,t){e&&t!=null&&o.value.delete(`${e}-${t}`)}function h(e,t){i.value.set(e,t)}function g(e){return i.value.get(e)??!1}function _(t,n){e.value.set(t,n)}function v(t,n){let r=e.value.get(t);if(r)return y(n,r)?{valid:!0}:{valid:!1}}function y(e,t){let n=Object.keys(t),r=Object.keys(e);return r.length!==n.length||!r.every(e=>n.includes(e))?!1:r.every(n=>{let r=e[n],i=t[n];return!i||!r||typeof r==`function`||typeof i==`function`||typeof r==`number`||typeof r==`boolean`||typeof r==`string`?!1:r._params?r._params?.every((e,t)=>{if(typeof i==`number`||typeof i==`boolean`||typeof i==`string`)return!0;{let e=F(i._params),n=F(r._params);return e?.[t]===n?.[t]}}):!0})}function b(e){let t=a.value.get(e);if(t)return t;{let t=u(!1),n=u(!0),r=u({}),i=u(!1);return a.value.set(e,{$pending:t,$valid:n,$metadata:r,$validating:i}),{$pending:t,$valid:n,$metadata:r,$validating:i}}}return r()&&c(()=>{e.value.clear(),t.value.clear(),n.value.clear(),i.value.clear(),a.value.clear(),o.value.clear()}),{addRuleDeclEntry:_,setDirtyEntry:h,checkRuleDeclEntry:v,getDirtyState:g,trySetRuleStatusRef:b,getFieldsEntry:s,getCollectionsEntry:l,getArrayStatus:p,addArrayStatus:f,deleteArrayStatus:m,arrayStatusStorage:o}}function X(e,t){return B(e)||w(t.value)&&!b(t.value)&&!Object.entries(t.value).some(([e,t])=>Q(t)||typeof t==`function`)}function ee(e,t,n=!1){return!!e.value&&w(e.value)&&`$each`in e.value||n&&Array.isArray(t.value)&&t.value.some(w)||Array.isArray(t.value)&&t.value.some(w)}function Z(e){return!!e.value&&(w(e.value)||B(e.value))}function Q(e){return w(e)&&`_validator`in e}function $(e){return typeof e.value==`function`?`_validator`in e.value:!0}function te(e){return w(e)&&`$fields`in e}function ne(e){return!!e&&`$rules`in e}function re({field:e,silent:t=!1}){let n=Object.entries(e.$rules??{}).map(([n,r])=>{let i=``;if(t&&!r.$valid)i=r.$message;else if(!r.$valid&&e.$error&&!r.$validating)i=r.$message;else return null;return{$message:i,$property:e.fieldName,$rule:n,$type:r.$type,...typeof r.$metadata==`object`?r.$metadata:{}}}).filter(e=>!!e).reduce((e,t)=>(typeof t.$message==`string`?e.push(t):e.push(...t.$message.map(e=>({...t,$message:e}))),e),[]),r=e.$error&&e.$externalErrors?e.$externalErrors.map(t=>({$message:t,$property:e.fieldName,$rule:`external`,$type:void 0})):[],i=[];return e.$schemaErrors&&e.$error&&(i=!Array.isArray(e.$schemaErrors)&&`$self`in e.$schemaErrors?e.$schemaErrors.$self??[]:e.$schemaErrors??[]),[...n,...r,...i]}function ie({field:e}){let t=[];for(let n of Object.values(e.$rules??{})){let e=n.$tooltip;e&&(typeof e==`string`?t.push(e):t.push(...e))}return t}function ae(e){return w(e)&&`$each`in e}function oe(e,t){let{includePath:n=!1}=t??{};if(Array.isArray(e)&&e.every(e=>!w(e)))return e;if(ae(e)){let t=n?e.$self?.map(e=>({message:e,path:[]}))??[]:e.$self??[],r=e.$each?.map(e=>se(e,n))??[];return t?.concat(r.flat())}else return Object.entries(e).map(([e,t])=>se(t,n,[e])).flat()}function se(e,t=!1,n){let r=t&&!n?[]:n;if(Array.isArray(e)&&e.every(e=>!w(e)))return t?e.map(e=>({message:e,path:r??[]})):e;if(ae(e)){let n=r?.length?e.$self?.map(e=>({message:e,path:r??[]}))??[]:e.$self??[],i=e.$each?.map((e,n)=>se(e,t,r?.concat(n)))??[];return n?.concat(i.flat())}else return Object.entries(e).map(([e,n])=>se(n,t,r?.concat(e))).flat()}function ce({customMessages:n,rule:r,ruleKey:i,state:a,path:o,cachePath:s,storage:c,modifiers:d}){let f=t(),p={},m,h=e(()=>Q(r.value)&&r.value._async),g=u(!1),{$pending:v,$valid:y,$metadata:x,$validating:S}=c.trySetRuleStatusRef(`${s}.${i}`);function C(){f=t(),p=f.run(()=>{let t=u(!1),s=u(!1),c=u(!0),l=u(!1),d=u(!1),f=e(()=>({$value:a.value,$error:s.value,$dirty:t.value,$pending:l.value,$correct:d.value,$invalid:c.value,$rule:{$valid:y.value,$invalid:!y.value,$pending:v.value},$params:C.value,...x.value})),p=e(()=>{try{return $(r)?typeof r.value.active==`function`?r.value.active(f.value):!!r.value.active:!0}catch(e){return console.error(`Error in "active" function for "${o}.${i}" rule`,{cause:e}),!0}});function m(e){try{let t=``,a=n?n[i]?.[e]:void 0;if(a&&(t=typeof a==`function`?a(f.value):a),$(r)){let n=`_${e}_patched`;a&&!r.value[n]||(t=typeof r.value[e]==`function`?r.value[e](f.value):r.value[e]??``)}return t}catch(t){return console.error(`Error in "${e}" function for "${o}.${i}" rule`,{cause:t}),``}}let h=e(()=>{let e=m(`message`);return b(e)&&(e=`This field is not valid`),e}),g=e(()=>m(`tooltip`)),_=e(()=>$(r)&&r.value.type?r.value.type:i),S=e(()=>$(r)?r.value.validator:r.value),C=e(()=>typeof r.value==`function`?[]:F(r.value._params??[]));return{$active:p,$message:h,$type:_,$validator:S,$params:C,$path:e(()=>`${o}.${_.value}`),$tooltip:g,$fieldCorrect:d,$fieldError:s,$fieldDirty:t,$fieldPending:l,$fieldInvalid:c}}),m=_(p?.$params,()=>{(!d.$silent.value||d.$rewardEarly.value&&p.$fieldError.value)&&E()})}C();function w(){y.value=!0,p.$fieldDirty.value&&(v.value=!0)}async function T(){let e=!1;try{let t=p.$validator.value;if(typeof t!=`function`)return console.error(`${o}: Incorrect rule format, it needs to be either a function or created with "createRule".`),!1;let n=t(a.value,...p.$params.value),r=a.value;w();let i;if(i=n instanceof Promise?await n:n,a.value!==r)return!0;if(typeof i==`boolean`)e=i;else{let{$valid:t,...n}=i;e=t,x.value=n}}catch{e=!1}finally{v.value=!1}return e}async function E(){try{S.value=!0;let e=!1;if(g.value=!0,Q(r.value)&&r.value._async)e=await T();else{let t=p.$validator.value,n=t(a.value,...p.$params.value);if(n instanceof Promise)console.warn(`You used a async validator function on a non-async rule, please use "async await" or the "withAsync" helper`);else if(n!=null)if(typeof n==`boolean`)e=n;else{let{$valid:t,...r}=n;e=t,x.value=r}}return y.value=e,e}catch{return!1}finally{S.value=!1,g.value=!1}}function D(){y.value=!0,x.value={},v.value=!1,S.value=!1,C()}function O(){m(),f.stop(),f=t()}return l({...p,$pending:v,$valid:y,$metadata:x,$haveAsync:h,$maybePending:g,$validating:S,$parse:E,$unwatch:O,$watch:C,$reset:D})}function le(e){return{"~standard":{version:1,vendor:`regle`,validate:async t=>{let{valid:n,data:r,errors:i}=await e(t);return n?{value:r,issues:[]}:{issues:oe(i,{includePath:!0})}}}}}function ue({state:n,rulesDef:r,customMessages:i,path:a,cachePath:o,fieldName:s,storage:c,options:d,externalErrors:p,schemaErrors:m,schemaMode:g,onUnwatch:y,$isArray:x,initialState:S,originalState:T,shortcuts:E,onValidate:A}){let M=t(),N,P=[],F,I,L,R,z=()=>{},B,V=u(!1);function H(){let e=r.value,t=c.checkRuleDeclEntry(o,e),s={};for(let t in e)t.startsWith(`$`)&&(s[t]=e[t]);X.value=s,K();let l=r.value,u=[];for(let e in l){if(e.startsWith(`$`)||e.startsWith(`~`))continue;let t=l[e];if(!t)continue;let r=f(()=>t);u.push([e,ce({modifiers:{$silent:N.$silent,$rewardEarly:N.$rewardEarly},customMessages:i,rule:r,ruleKey:e,state:n,path:a,cachePath:o,storage:c,$debounce:X.value.$debounce})])}Y.value=Object.fromEntries(u),N.processShortcuts(),U(),t?.valid!=null&&(N.$dirty.value=c.getDirtyState(o),(N.$dirty.value&&!N.$silent.value||N.$rewardEarly.value&&N.$error.value)&&z()),c.addRuleDeclEntry(o,e)}function U(){z=N.$debounce.value>0?O(J,N.$debounce.value,{trackDebounceRef:V}):J}function G(){if(Y.value)for(let e of Object.values(Y.value))e.$unwatch();I(),R?.(),N.$dirty.value&&c.setDirtyEntry(o,N.$dirty.value),F?.(),M.stop(),M=t();for(let e of P)e.stop();P=[],y?.(),L?.()}function K(){if(Y.value)for(let e of Object.values(Y.value))e.$watch();N=M.run(()=>{let i=u(!1),a=u(!1),o=e(()=>i.value),c=e(()=>X.value.$debounce==null?N.$haveAnyAsyncRule.value?200:0:X.value.$debounce),f=e(()=>X.value.$deepCompare==null?!1:X.value.$deepCompare),_=e(()=>X.value.$lazy==null?h(d.lazy)==null?!1:h(d.lazy):X.value.$lazy),y=e(()=>X.value.$rewardEarly==null?h(d.rewardEarly)==null?!1:h(d.rewardEarly):X.value.$rewardEarly),x=e(()=>X.value.$clearExternalErrorsOnChange==null?h(d.clearExternalErrorsOnChange)==null?!C.value:h(d.clearExternalErrorsOnChange):X.value.$clearExternalErrorsOnChange),C=e(()=>y.value?!0:X.value.$silent==null?h(d.silent)==null?!1:h(d.silent):X.value.$silent),w=e(()=>X.value.$autoDirty==null?h(d.autoDirty)==null?!0:h(d.autoDirty):X.value.$autoDirty),T=e(()=>{for(let e of Object.values(Y.value))if(e.$validating)return!0;return!1}),O=e({get:()=>n.value,set(e){F(),n.value=e,q()}}),A=e(()=>V.value?W.value&&i.value:W.value&&!U.value&&i.value),j=e(()=>re({field:{$rules:Y.value,$error:A.value,$externalErrors:p?.value,$schemaErrors:m?.value,fieldName:s}})),M=e(()=>re({field:{$rules:Y.value,$error:A.value,$externalErrors:p?.value,$schemaErrors:m?.value,fieldName:s},silent:!0})),I=e(()=>j.value.map(e=>e.$message)),L=e(()=>M.value.map(e=>e.$message)),R=e(()=>i.value?S.value instanceof Date&&n.value instanceof Date?D(S.value).getDate()!==D(n.value).getDate():S.value==null?!!n.value:Array.isArray(n.value)&&Array.isArray(S.value)?!k(n.value,S.value,X.value.$deepCompare):S.value!==n.value:!1),z=e(()=>R.value),B=e(()=>ie({field:{$rules:Y.value}})),H=e(()=>(C.value||o.value)&&!(W.value||U.value)),U=e(()=>a.value||!y.value?Object.entries(Y.value).some(([e,t])=>t.$pending):!1),W=e(()=>m?.value&&!Array.isArray(m?.value)&&`$self`in m.value?m?.value.$self?.length>0:p?.value?.length||m?.value?.length?!0:K.value?!1:Object.values(Y.value).some(e=>!e.$valid||e.$maybePending)),G=e(()=>s),K=e(()=>!g&&!Object.keys(r.value).some(e=>!e.startsWith(`$`))),J=e(()=>{if(p?.value?.length||K.value||V.value)return!1;if(i.value&&!b(n.value)&&!T.value&&!U.value){if(g)return!m?.value?.length;{let e=Object.values(Y.value);for(let t of e)if(t.$active&&!t.$valid)return!1;return e.some(e=>e.$active)}}return!1}),ee=e(()=>Object.values(Y.value).some(e=>e.$haveAsync)),Z=e(()=>({$debounce:c.value,$lazy:_.value,$rewardEarly:y.value,$autoDirty:w.value,$silent:C.value,$clearExternalErrorsOnChange:x.value}));function Q(){E?.fields&&Object.entries(E.fields).forEach(([e,r])=>{let a=t();$[e]=a.run(()=>{let e=u();return v(()=>{e.value=r(l({$dirty:i,$externalErrors:p?.value??[],$value:n,$silentValue:O,$rules:Y,$error:A,$pending:U,$invalid:W,$correct:J,$errors:I,$ready:H,$silentErrors:L,$anyDirty:o,$tooltips:B,$name:G,$inactive:K,$edited:R,$anyEdited:z}))}),e}),P.push(a)})}let $={};return{$error:A,$pending:U,$invalid:W,$correct:J,$debounce:c,$deepCompare:f,$lazy:_,$ready:H,$issues:j,$silentIssues:M,$errors:I,$silentErrors:L,$rewardEarly:y,$autoDirty:w,$silent:C,$clearExternalErrorsOnChange:x,$anyDirty:o,$edited:R,$anyEdited:z,$name:G,$haveAnyAsyncRule:ee,$shortcuts:$,$validating:T,$tooltips:B,$dirty:i,processShortcuts:Q,$silentValue:O,$inactive:K,$modifiers:Z}}),q(),I=_(N.$dirty,e=>{c.setDirtyEntry(o,e),Object.values(Y.value).forEach(t=>{t.$fieldDirty=e})}),R=_([N.$error,N.$correct,N.$invalid,N.$pending],()=>{Object.values(Y.value).forEach(e=>{e.$fieldError=N.$error.value,e.$fieldInvalid=N.$invalid.value,e.$fieldPending=N.$pending.value,e.$fieldCorrect=N.$correct.value})}),L=_(N.$haveAnyAsyncRule,U)}function q(){F=_(n,()=>{N.$autoDirty.value&&!N.$silent.value&&(N.$dirty.value||(N.$dirty.value=!0)),r.value instanceof Function&&H(),(!N.$silent.value||N.$rewardEarly.value&&N.$error.value)&&z(),N.$clearExternalErrorsOnChange.value&&oe()},{deep:x?!0:W?1:!0})}async function J(){try{let{promise:e}=Q(Promise.allSettled(Object.values(Y.value).map(e=>e.$parse())));await e}catch{}}let Y=u({}),X=u({});H();function ee(e,t){if(Z(),oe(),N.$dirty.value=!1,c.setDirtyEntry(o,!1),!t)if(e?.toOriginalState)n.value=C(T),S.value=C(T);else if(e?.toInitialState)n.value=C(S.value);else if(e?.toState){let t;t=typeof e?.toState==`function`?e?.toState():e?.toState,S.value=C(t),n.value=C(t)}else S.value=w(n.value)?C(n.value):Array.isArray(n.value)?[...n.value]:n.value;if(e?.clearExternalErrors&&oe(),!t&&!e?.keepValidationState)for(let e of Object.values(Y.value))e.$reset();if(!N.$lazy.value&&!N.$silent.value&&!t)for(let e of Object.values(Y.value))e.$parse()}function Z(){`cancel`in z&&z.cancel()}function Q(e){return B&&B.abort(),B=j(e),B}function $(){Z(),B&&B.abort()}function te(e=!0,t=!1){N.$dirty.value||(N.$dirty.value=!0),t&&e?(!N.$silent.value||N.$rewardEarly.value&&N.$error.value)&&(Z(),z()):e&&(Z(),z())}async function ne(e){try{if(e&&(n.value=e),g)return A?(te(!1),A()):{valid:!1,data:n.value,errors:N.$errors.value,issues:N.$issues.value};let t=n.value;if(!N.$dirty.value)N.$dirty.value=!0;else if(!N.$silent.value&&N.$dirty.value&&!N.$pending.value&&!V.value&&!N.$haveAnyAsyncRule.value)return{valid:!N.$error.value,data:t,errors:N.$errors.value,issues:N.$issues.value};if(g)return{valid:!m?.value?.length,data:t,errors:N.$errors.value,issues:N.$issues.value};if(b(Y.value))return{valid:!0,data:t,errors:N.$errors.value,issues:N.$issues.value};$();let{promise:r}=Q(Promise.allSettled(Object.values(Y.value).map(e=>e.$parse())));return{valid:(await r).every(e=>e.status===`fulfilled`&&e.value===!0),data:t,errors:N.$errors.value,issues:N.$issues.value}}catch{return{valid:!1,data:n.value,errors:N.$errors.value,issues:N.$issues.value}}}function ae(e=!0){return N.$dirty.value?n.value:e?{_null:!0}:null}function oe(){p?.value?.length&&(p.value=[])}!N.$lazy.value&&!N.$dirty.value&&!N.$silent.value&&J();let{$shortcuts:se,$validating:ue,$autoDirty:de,$rewardEarly:fe,$clearExternalErrorsOnChange:pe,$haveAnyAsyncRule:me,$debounce:he,$lazy:ge,..._e}=N;return l({..._e,$externalErrors:p,$value:n,$initialValue:S,$originalValue:T,$rules:Y,...se,$path:a,$isDebouncing:V,$reset:ee,$touch:te,$validate:ne,$unwatch:G,$watch:K,$extractDirtyFields:ae,$clearExternalErrors:oe,$abort:$,"~modifiers":N.$modifiers,...le(ne)})}function de({$id:t,path:n,cachePath:r,index:i,options:a,storage:o,stateValue:s,customMessages:c,rules:l,externalErrors:u,schemaErrors:d,initialState:p,originalState:m,shortcuts:h,fieldName:g,schemaMode:_}){let v=s.value?.$id??l.$key??K(),y=`${r}.${String(v)}`,b=`${n}.${i}`;typeof s.value==`object`&&s.value!=null&&(s.value.$id||Object.defineProperties(s.value,{$id:{value:v,enumerable:!1,configurable:!1,writable:!1}}));let x=f(u?.value??[],i),S=e(()=>d?.value?.[i]),C=me({index:i,state:s,rulesDef:f(()=>l),customMessages:c,path:b,cachePath:y,storage:o,options:a,externalErrors:x,schemaErrors:S,initialState:p,originalState:m,shortcuts:h,fieldName:g,schemaMode:_});return C&&(C.$id=s.value?.$id??String(v),o.addArrayStatus(t,C.$id,C)),C}function fe({state:n,rulesDef:r,customMessages:i,path:a,cachePath:o,storage:s,options:c,externalErrors:d,schemaErrors:p,schemaMode:m,initialState:g,originalState:y,shortcuts:x,fieldName:S}){let w=t(),T,E=t(),D,O=[];if(!Array.isArray(n.value)&&!r.value.$each)return;let k=u(),A=u(n.value),j=u({}),M,N,P=u({}),F=s.getCollectionsEntry(a);D=E.run(()=>({isPrimitiveArray:e(()=>n.value?.length?Array.isArray(n.value)&&n.value.length?n.value.every(e=>typeof e!=`object`):r.value.$each&&!(r.value.$each instanceof Function)?Object.values(r.value.$each).every(e=>Q(e)||typeof e==`function`):!1:!1)})),I(),B();function I(){j.value=Object.fromEntries(Object.entries(r.value).filter(([e])=>e.startsWith(`$`))),typeof n.value==`object`&&(n.value!=null&&!n.value?.$id&&n.value!==null?(k.value=K(),Object.defineProperties(n.value,{$id:{value:k.value,enumerable:!1,configurable:!1,writable:!1}})):n.value?.$id&&(k.value=n.value.$id)),A.value=P.value.$value,Array.isArray(n.value)&&!D.isPrimitiveArray.value?F.value=n.value.filter(e=>typeof e==`object`).map((t,n)=>{let{scope:l,unwrapped:u}=V(r.value.$each,f(()=>t),n);l&&O.push(l);let h=f(g.value??[],n),_=f(d?.value??{},`$each`),v=e(()=>p?.value?.$each);return de({$id:k.value,path:a,cachePath:o,customMessages:i,rules:u??{},stateValue:f(()=>t),index:n,options:c,storage:s,externalErrors:_,schemaErrors:v,initialState:h,originalState:y,shortcuts:x,fieldName:S,schemaMode:m})||null}).filter(e=>!!e):F.value=[],P.value=ue({state:n,rulesDef:r,customMessages:i,path:a,cachePath:a,storage:s,options:c,externalErrors:f(d?.value??{},`$self`),schemaErrors:e(()=>p?.value?.$self),$isArray:!0,initialState:g,originalState:y,shortcuts:x,fieldName:S,schemaMode:m})}function L(){if(Array.isArray(n.value)&&!D.isPrimitiveArray.value){let t=C(F.value);F.value=n.value.filter(e=>typeof e==`object`).map((t,n)=>{let o=f(()=>t);if(t.$id&&F.value.find(e=>e.$id===t.$id)){let e=s.getArrayStatus(k.value,t.$id);return e?(e.$value=o,e):null}else{let{scope:t,unwrapped:l}=V(r.value.$each,o,n);t&&O.push(t);let u=f(d?.value??{},`$each`),h=e(()=>p?.value?.$each??[]);return de({$id:k.value,path:a,cachePath:a,customMessages:i,rules:l??{},stateValue:o,index:n,options:c,storage:s,externalErrors:u,schemaErrors:h,initialState:f(g.value??[],n),originalState:y,shortcuts:x,fieldName:S,schemaMode:m})||null}}).filter(e=>!!e),t.filter(e=>!n.value?.find(t=>e.$id===t.$id)).forEach((e,t)=>{s.deleteArrayStatus(k.value,t.toString())})}else F.value=[]}function R(){M=_(n,()=>{N?.(),n.value!=null&&!Object.hasOwn(n.value,`$id`)&&!k.value?I():L(),z()},{deep:W?1:!0,flush:`pre`}),z()}function z(){N=_(n,()=>{T.$autoDirty.value&&!T.$silent.value&&P.value.$touch(!1,!0)},{flush:`post`})}function B(){R(),w=t(),T=w.run(()=>{let r=e({get:()=>n.value,set(e){M?.(),N?.(),n.value=e,R()}}),i=e(()=>P.value.$dirty&&(!F.value.length||F.value.every(e=>e.$dirty))),o=e(()=>P.value.$anyDirty||F.value.some(e=>e.$anyDirty)),s=e(()=>P.value.$invalid||F.value.some(e=>e.$invalid)),d=e(()=>(b(P.value.$rules)?!0:P.value.$correct)&&(!F.value.length||F.value.every(e=>e.$correct||e.$anyDirty&&!e.$invalid))),f=e(()=>P.value.$error||F.value.some(e=>e.$error)),p=e(()=>!(s.value||m.value)),m=e(()=>P.value.$pending||F.value.some(e=>e.$pending)),_=e(()=>!!F.value.length&&F.value.every(e=>e.$edited)),C=e(()=>P.value.$anyEdited||F.value.some(e=>e.$anyEdited)),w=e(()=>({$self:P.value.$issues,$each:F.value.map(e=>e.$issues)})),T=e(()=>({$self:P.value.$errors,$each:F.value.map(e=>e.$errors)})),E=e(()=>({$self:P.value.$silentErrors,$each:F.value.map(e=>e.$silentErrors)})),D=e(()=>j.value.$rewardEarly==null?h(c.rewardEarly)==null?!1:h(c.rewardEarly):j.value.$rewardEarly),k=e(()=>D.value?!0:j.value.$silent==null?h(c.silent)==null?!1:h(c.silent):j.value.$silent),A=e(()=>j.value.$autoDirty==null?h(c.autoDirty)==null?!0:h(c.autoDirty):j.value.$autoDirty),I=e(()=>S),L=e(()=>({$deepCompare:j.value.$deepCompare??!1,$lazy:j.value.$lazy??!1,$rewardEarly:D.value,$autoDirty:A.value,$silent:k.value,$clearExternalErrorsOnChange:j.value.$clearExternalErrorsOnChange??!1}));function z(){x?.collections&&Object.entries(x?.collections).forEach(([e,c])=>{let h=t();B[e]=h.run(()=>{let e=u();return v(()=>{e.value=c(l({$dirty:i,$error:f,$path:a,$silentValue:r,$pending:m,$invalid:s,$correct:d,$errors:T,$silentErrors:E,$initialValue:g,$originalValue:y,$ready:p,$anyDirty:o,$name:I,$each:F,$self:P,$value:n,$edited:_,$anyEdited:C,$issues:w}))}),e}),O.push(h)})}let B={};return z(),{$dirty:i,$anyDirty:o,$invalid:s,$correct:d,$error:f,$pending:m,$errors:T,$silentErrors:E,$ready:p,$name:I,$shortcuts:B,$silentValue:r,$edited:_,$anyEdited:C,$rewardEarly:D,$silent:k,$autoDirty:A,$issues:w,$modifiers:L}}),D.isPrimitiveArray.value&&r.value.$each&&console.warn(`${a} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`)}function H(){M?.(),P.value&&P.value.$unwatch(),F.value&&F.value.forEach(e=>{`$dirty`in e&&e.$unwatch()}),w.stop(),w=t(),E.stop(),E=t(!0),O.forEach(e=>e.stop()),O=[]}function U(e=!0,t=!1){P.value.$touch(e,t),F.value.forEach(n=>{n.$touch(e,t)})}function G(e,t){if(H(),!t)if(e?.toOriginalState)n.value=C(y),g.value=C(y);else if(e?.toInitialState)n.value=C(g.value);else if(e?.toState){let t;t=typeof e?.toState==`function`?e?.toState():e?.toState,g.value=C(t),n.value=C(t)}else g.value=C(n.value);e?.clearExternalErrors&&Y(),e?.keepValidationState||(P.value.$reset(e,t),F.value.forEach(t=>{t.$reset(e,!0)})),t||I()}function q(){P.value.$abort(),F.value.forEach(e=>{e.$abort()})}async function J(e){e&&(n.value=e);let t=n.value;try{return q(),{valid:(await Promise.allSettled([P.value.$validate(e),...F.value.map(e=>e.$validate())])).every(e=>e.status===`fulfilled`?e.value.valid===!0:!1),data:t,errors:T.$errors.value,issues:T.$issues.value}}catch{return{valid:!1,data:t,errors:T.$errors.value,issues:T.$issues.value}}}function Y(){P.value.$clearExternalErrors(),F.value.forEach(e=>{e.$clearExternalErrors()})}function X(e=!0){let t=F.value.map(t=>{if(te(t))return t.$extractDirtyFields(e)});return e&&t.every(e=>b(e))&&(t=[]),t}let{$shortcuts:ee,...Z}=T;return l({$self:P,...Z,...ee,$path:a,$each:F,$value:n,$initialValue:g,$originalValue:y,$validate:J,$unwatch:H,$watch:B,$touch:U,$reset:G,$abort:q,$extractDirtyFields:X,$clearExternalErrors:Y,"~modifiers":T.$modifiers,...le(J)})}function pe({rulesDef:n,state:r,path:i=``,cachePath:a,rootRules:o,externalErrors:s,schemaErrors:c,rootSchemaErrors:d,validationGroups:p,initialState:m,originalState:g,fieldName:y,...x}){let S=t(),T,E=[],D=null,O=null,k=null,A=null;async function j(t=!0){let o=Object.entries(n.value),l=Object.fromEntries(o.reduce((t,[n,o])=>{if(!o)return t;let l=f(r.value??{},n),u=f(()=>o),d=f(s?.value??{},n),p=e(()=>c?.value?.[n]),h=f(m?.value??{},n);return t.push([n,me({state:l,rulesDef:u,path:i?`${i}.${n}`:n,cachePath:a?`${a}.${n}`:n,externalErrors:d,schemaErrors:p,initialState:h,originalState:g?.[n],fieldName:n,...x})]),t},[])),u=Object.fromEntries(Object.entries(h(s)??{}).filter(([e,t])=>!(e in n.value)&&!!t).map(([t])=>{let n=f(r.value??{},t),o=f(s?.value??{},t),l=e(()=>c?.value?.[t]),u=f(m?.value??{},t),d=i?`${i}.${t}`:t,p=a?`${a}.${t}`:t;return[t,me({state:n,rulesDef:e(()=>({})),path:d,cachePath:p,externalErrors:o,schemaErrors:l,initialState:u,originalState:g?.[t],fieldName:t,...x})]})),d=Object.fromEntries(Object.entries(h(c)??{}).map(([t])=>{let n=i?`${i}.${t}`:t,o=a?`${a}.${t}`:t,l=f(r.value??{},t),u=f(s?.value??{},t),d=e(()=>c?.value?.[t]),p=f(m?.value??{},t);return[t,me({state:l,rulesDef:e(()=>({})),path:n,cachePath:o,externalErrors:u,schemaErrors:d,initialState:p,originalState:g?.[t],fieldName:t,...x})]})),p=Object.fromEntries(Object.entries(r.value??{}).filter(([e])=>!(e in n.value)&&!(e in(u??{}))&&!(e in(d??{}))).map(([t])=>{let n=f(r.value??{},t),o=f(s?.value??{},t),l=e(()=>c?.value?.[t]),u=f(m?.value??{},t);return[t,me({state:n,rulesDef:e(()=>({})),path:i?`${i}.${t}`:t,cachePath:a?`${a}.${t}`:t,externalErrors:o,schemaErrors:l,initialState:u,originalState:g?.[t],fieldName:t,...x})]}));M.value={...l,...u,...d,...p},t&&L()}let M=x.storage.getFieldsEntry(a);j();function F(){s&&(k=_(s,()=>{R(),j()},{deep:!0}))}function I(){A=_(r,()=>{R(),j(),T.$autoDirty.value&&!T.$silent.value&&V(!1,!0)},{flush:`post`})}function L(){o&&(D?.(),D=_(o,()=>{R(),j()},{deep:!0,flush:`pre`}),F()),d&&(O?.(),O=_(d,()=>{R(),j()},{deep:!0,flush:`post`})),I(),T=S.run(()=>{let n=e({get:()=>r.value,set(e){R(),r.value=e,j(),T.$autoDirty.value&&!T.$silent.value&&V(!1,!0)}}),a=e({get:()=>r.value,set(e){R(),r.value=e,j()}}),o=e(()=>{let e=M.value,t=Object.keys(e);if(!t.length)return!1;for(let n of t)if(!e[n]?.$dirty)return!1;return!0}),s=e(()=>{let e=M.value;for(let t in e)if(e[t]?.$anyDirty)return!0;return!1}),c=e(()=>{let e=M.value,t=Object.entries(e);if(!t.length)return!1;for(let[e,n]of t)if(n?.$invalid)return!0;return!1}),d=e(()=>{let e=Object.entries(M.value).reduce((e,[t,n])=>((!ne(n)||!n.$inactive)&&e.push([t,n]),e),[]);return e.length?x.schemaMode?e.every(([e,t])=>t.$correct):e.every(([e,t])=>ne(t)?`required`in t.$rules&&t.$rules.required.$active?t.$correct:!t.$invalid&&!t.$pending&&!t.$isDebouncing:t?.$correct):!1}),f=e(()=>{let e=M.value;if(!Object.keys(e).length)return!1;for(let t in e)if(e[t]?.$error)return!0;return!1}),_=e(()=>h(x.options.rewardEarly)==null?!1:h(x.options.rewardEarly)),b=e(()=>h(x.options.silent)==null?!!_.value:h(x.options.silent)),S=e(()=>h(x.options.autoDirty)==null?!0:h(x.options.autoDirty)),C=e(()=>(b.value||s.value)&&!(c.value||D.value)),w=u(!1),D=e(()=>{if(w.value)return!0;let e=M.value;for(let t in e)if(e[t]?.$pending)return!0;return!1}),O=e(()=>{let e={};for(let t in M.value)e[t]=M.value[t]?.$issues;return e}),k=e(()=>{let e={};for(let t in M.value)e[t]=M.value[t]?.$errors;return e}),A=e(()=>{let e={};for(let t in M.value)e[t]=M.value[t]?.$silentErrors;return e}),F=e(()=>{if(!Object.keys(M.value).length)return!1;for(let e in M.value)if(!M.value[e]?.$edited)return!1;return!0}),I=e(()=>{for(let e in M.value)if(M.value[e]?.$anyEdited)return!0;return!1}),L=e(()=>y),z=e(()=>({autoDirty:S.value,lazy:h(x.options.lazy)??!1,rewardEarly:_.value,silent:b.value,clearExternalErrorsOnChange:h(x.options.clearExternalErrorsOnChange)??!1,id:h(x.options.id)}));function B(){x.shortcuts?.nested&&Object.entries(x.shortcuts.nested).forEach(([e,n])=>{let p=t();U[e]=p.run(()=>{let e=u();return v(()=>{e.value=n(l({$dirty:o,$path:i,$value:r,$silentValue:a,$error:f,$originalValue:g,$pending:D,$invalid:c,$correct:d,$ready:C,$anyDirty:s,$name:L,$silentErrors:A,$initialValue:m,$errors:k,$fields:M,$edited:F,$anyEdited:I,$issues:O,"~modifiers":h(x.options)}))}),e}),E.push(p)})}let H=e({get:()=>p?Object.fromEntries(Object.entries(p?.(M.value)??{}).map(([e,t])=>t.length?[e,{...Object.fromEntries([`$invalid`,`$error`,`$pending`,`$dirty`,`$correct`].map(e=>[e,N(t,e)])),...Object.fromEntries([`$errors`,`$silentErrors`].map(e=>[e,P(t,e)]))}]:[])):{},set(){}}),U={};return B(),{$dirty:o,$anyDirty:s,$invalid:c,$correct:d,$error:f,$pending:D,$issues:O,$errors:k,$silentErrors:A,$ready:C,$name:L,$shortcuts:U,$groups:H,$silentValue:a,$edited:F,$anyEdited:I,$localPending:w,$autoDirty:S,$silent:b,$value:n,$modifiers:z}})}function R(){if(D?.(),k?.(),A?.(),O?.(),E=[],T={},M.value)for(let e of Object.values(M.value))e?.$unwatch()}function z(){let e=M.value;for(let t of Object.values(e))t.$clearExternalErrors()}function B(e,t){if(k?.(),R(),!t)if(e?.toOriginalState)r.value=C({...g}),m.value=C({...g});else if(e?.toInitialState)r.value=C({...m.value});else if(e?.toState){let t;t=typeof e?.toState==`function`?e?.toState():e?.toState,m.value=C(t),r.value=C(t)}else m.value=C(r.value);if(!e?.keepValidationState)for(let t of Object.values(M.value))t?.$reset(e,!0);e?.clearExternalErrors&&z(),F(),t||j()}function V(e=!0,t=!1){for(let n of Object.values(M.value))n?.$touch(e,t)}function H(e){return e.filter(([e,t])=>w(t)?!(t&&typeof t==`object`&&`_null`in t)&&!b(t):Array.isArray(t)?t.length:!0)}function U(e=!0){let t=Object.entries(M.value).map(([t,n])=>[t,n.$extractDirtyFields(e)]);return e&&(t=H(t)),Object.fromEntries(t)}function W(){for(let e of Object.values(M.value))e.$abort()}async function G(e){try{if(e&&(r.value=e),x.schemaMode)return x.onValidate?(V(!1),T.$localPending.value=!0,x.onValidate()):{valid:!1,data:r.value,errors:T.$errors.value,issues:T.$issues.value};{let e=r.value;return W(),{valid:(await Promise.allSettled(Object.values(M.value).map(e=>e.$validate()))).every(e=>e.status===`fulfilled`&&e?.value.valid===!0),data:e,errors:T.$errors.value,issues:T.$issues.value}}}catch{return{valid:!1,data:r.value,errors:T.$errors.value,issues:T.$issues.value}}finally{T.$localPending.value=!1}}let{$shortcuts:K,$localPending:q,...J}=T,Y=l({...J,...K,$path:i,$initialValue:m,$originalValue:g,$fields:M,$reset:B,$touch:V,$validate:G,$unwatch:R,$watch:L,$clearExternalErrors:z,$extractDirtyFields:U,$abort:W,...o?{"~modifiers":T.$modifiers}:{},...le(G)});return v(()=>{for(let e of Object.keys(Y).filter(e=>!e.startsWith(`$`)&&!e.startsWith(`~`)))delete Y[e];for(let e of Object.values(M.value))e?.$name&&Object.assign(Y,{[e.$name]:e})}),Y}function me({rulesDef:e,...n}){if(ee(e,n.state,n.schemaMode))return fe({rulesDef:e,...n});if(X(n.state,e)){if(B(n.state))return pe({rulesDef:e,...n});{let r=t().run(()=>{let e=f(n.state.value?n.state:u({}));return _(()=>n.state.value,t=>{e.value=t},{deep:!0}),_(e,e=>{n.state.value=e},{deep:!0}),{fakeState:e}}),{state:i,...a}=n;return pe({rulesDef:e,...a,state:r.fakeState})}}else if(Z(e))return ue({rulesDef:i(e.value)?e.value:e,...n})}const he=Symbol(`regle`);function ge({initialState:e,originalState:t,options:n,scopeRules:i,state:a,customRules:o,shortcuts:s,schemaErrors:d,schemaMode:f=!1,onValidate:p}){let m=Y(),h=u(),g=u(),v,y;function b(){v=_(()=>n.externalErrors?.value,()=>{y?.(),n.externalErrors?.value&&Object.keys(n.externalErrors.value).some(e=>e.includes(`.`))?g.value=E(n.externalErrors.value):g.value=n.externalErrors?.value,x()},{immediate:!0,deep:!0})}function x(){y=_(()=>g.value,()=>{v?.(),n.externalErrors?.value&&(n.externalErrors.value=g.value),b()},{deep:!0})}return b(),X(a,i)?h.value=pe({rootRules:i,rulesDef:i,state:a,customMessages:o?.(),storage:m,options:n,externalErrors:g,validationGroups:n.validationGroups,initialState:e,originalState:t,shortcuts:s,fieldName:`root`,path:``,cachePath:``,schemaErrors:d,rootSchemaErrors:d,schemaMode:f,onValidate:p}):Z(i)&&(h.value=ue({rulesDef:i,state:a,customMessages:o?.(),storage:m,options:n,externalErrors:g,initialState:e,originalState:t,shortcuts:s,fieldName:`root`,path:``,cachePath:``,schemaMode:f,schemaErrors:d,onValidate:p})),r()&&c(()=>{h.value?.$unwatch(),y?.(),v?.()}),l({regle:h})}function _e({state:t,rulesFactory:n,options:r,globalOptions:a,customRules:o,shortcuts:s}){let c=i(n)?n:typeof n==`function`?void 0:e(()=>n),l={...a,...r},f,p=d(c??{});typeof n==`function`&&(f=v(()=>{p.value=n(t),m(p)}));let h=u(w(t.value)?{...C(t.value)}:C(t.value)),g=w(t.value)?{...C(t.value)}:C(t.value);return q(()=>{f?.()}),ge({scopeRules:p,state:t,options:l,initialState:h,originalState:g,customRules:o,shortcuts:s})}function ve(e,t,n){let r={autoDirty:t?.autoDirty,lazy:t?.lazy,rewardEarly:t?.rewardEarly,silent:t?.silent,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange};function a(t,a,o){return{r$:_e({state:i(t)?t:u(t),rulesFactory:a,options:o,globalOptions:r,customRules:e,shortcuts:n}).regle}}return a}const ye=ve();function be(){function e(e,t){return t}return e}const xe=be();function Se(e){let t={};if(Object.entries(e).some(([e,t])=>Q(t)||typeof t==`function`))return null;for(let n in e){let r=e[n];r&&w(r)&&`$each`in r&&r.$each&&w(r.$each)?t[n]=[Se(r.$each)]:w(r)&&!b(r)&&!Object.entries(r).some(([e,t])=>Q(t)||typeof t==`function`)?t[n]=Se(r):t[n]=null}return t}function Ce(t,n,r){let a={autoDirty:n?.autoDirty,lazy:n?.lazy,rewardEarly:n?.rewardEarly,silent:n?.silent,clearExternalErrorsOnChange:n?.clearExternalErrorsOnChange};function o(n,o){let s=i(n)?n:typeof n==`function`?void 0:e(()=>n);return _e({state:u(Se(s?.value)),rulesFactory:s,options:o,globalOptions:a,customRules:t,shortcuts:r}).regle}return o}const we=Ce();function Te({rules:e,modifiers:t,shortcuts:n}){let r=ve(e,t,n),i=Ce(e,t,n);return r.__config={rules:e,modifiers:t,shortcuts:n},i.__config={rules:e,modifiers:t,shortcuts:n},{useRegle:r,inferRules:be(),useRules:i}}function Ee(e,{rules:t,modifiers:n,shortcuts:r}){let i=e.__config??{},a=()=>({...i.rules?.(),...t?.()}),o=i.modifiers&&n?T(i.modifiers,n):i.modifiers??n,s=i.shortcuts&&r?T(i.shortcuts,r):i.shortcuts??r,c=ve(a,o,s);return c.__config={rules:a,modifiers:o,shortcuts:s},{useRegle:c,inferRules:be()}}function De(t,n){let r=n??!1,i=e({get:()=>r?Object.values(t).map(e=>e.$value):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$value])),set:e=>{r||typeof e==`object`&&Object.entries(e).forEach(([e,n])=>t[e].$value=n)}}),a=e({get:()=>Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$silentValue])),set:e=>{typeof e==`object`&&Object.entries(e).forEach(([e,n])=>t[e].$silentValue=n)}}),o=e(()=>{let e=Object.entries(t);return!!e.length&&e.every(([e,t])=>t?.$dirty)}),s=e(()=>Object.entries(t).some(([e,t])=>t?.$anyDirty)),c=e(()=>Object.entries(t).some(([e,t])=>t?.$invalid)),u=e(()=>{let e=Object.entries(t);return!!e.length&&e.every(([e,t])=>t?.$correct||t.$anyDirty&&!t.$invalid)}),d=e(()=>Object.entries(t).some(([e,t])=>t?.$error)),f=e(()=>{let e=Object.entries(t);return!!e.length&&e.every(([e,t])=>t?.$ready)}),p=e(()=>Object.entries(t).some(([e,t])=>t?.$pending)),m=e(()=>r?Object.entries(t).map(([e,t])=>t.$issues):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$issues]))),h=e(()=>r?Object.entries(t).map(([e,t])=>t.$silentIssues):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$silentIssues]))),g=e(()=>r?Object.entries(t).map(([e,t])=>t.$errors):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$errors]))),_=e(()=>r?Object.entries(t).map(([e,t])=>t.$silentErrors):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$silentErrors]))),v=e(()=>{let e=Object.entries(t);return!!e.length&&e.every(([e,t])=>t?.$edited)}),y=e(()=>Object.entries(t).some(([e,t])=>t?.$anyEdited)),b=e(()=>r?Object.values(t):t);function x(e){Object.values(t).forEach(t=>{t.$reset(e)})}function S(){Object.values(t).forEach(e=>{e.$touch()})}function C(e=!0){return Object.values(t).map(t=>t.$extractDirtyFields(e))}function w(){Object.values(t).forEach(e=>{e.$clearExternalErrors()})}async function T(e){try{e&&(i.value=e);let n=i.value;return{valid:(await Promise.allSettled(Object.values(t).map(e=>e.$validate()))).every(e=>e.status===`fulfilled`?e.value.valid===!0:!1),data:n,errors:g.value,issues:m.value}}catch{return{valid:!1,data:i.value,errors:g.value,issues:m.value}}}return l({...!r&&{$silentValue:a},$errors:g,$issues:m,$silentIssues:h,$silentErrors:_,$instances:b,$value:i,$dirty:o,$anyDirty:s,$invalid:c,$correct:u,$error:d,$pending:p,$ready:f,$edited:v,$anyEdited:y,$reset:x,$touch:S,$validate:T,$extractDirtyFields:C,$clearExternalErrors:w})}function Oe(t,n){function r(r){let i=e(()=>p(r));s();let a=u(c(t.value)),o=l({r$:a});function s(){i.value&&!t.value[i.value]&&(t.value[i.value]={})}_(i,s),_(t,e=>{a.value=c(e)},{deep:!0});function c(e){return i.value?De(e[i.value]??{},!n.asRecord):De(e[`~~global`]??{},!n.asRecord)}return{r$:o.r$}}return{useCollectScope:r}}function ke(t,r){let i=r??ye;return{useScopedRegle:((r,a,o)=>{let{namespace:c,scopeKey:l,...d}=o??{};i.__config??={};let f=e(()=>p(c)),m=u(`${Object.keys(t.value).length+1}-${K()}`),h=e(()=>o?.scopeKey??`instance-${m.value}`),{r$:g}=i(r,a,d);y(),q(v),_(f,(e,t)=>{v(t),y()}),n()&&s(()=>{let e=n();typeof window<`u`&&e?.proxy?.$el?.parentElement&&document.documentElement&&!document.documentElement.contains(e?.proxy?.$el?.parentElement)&&v()});function v(e){let n=e??f.value;n?t.value[n]&&delete t.value[n][h.value]:t.value[`~~global`][h.value]&&delete t.value[`~~global`][h.value]}function y(){f.value?(t.value[f.value]||(t.value[f.value]={}),t.value[f.value][h.value]=g):(t.value[`~~global`]||(t.value[`~~global`]={}),t.value[`~~global`][h.value]=g)}return{r$:g,dispose:v,register:y}})}}function Ae(e){let t=(e?.customStore?()=>(e.customStore&&(e.customStore?.value[`~~global`]?e.customStore?.value&&(e.customStore.value={"~~global":{}}):e.customStore.value[`~~global`]={}),e.customStore):J(()=>u({"~~global":{}})))(),{useScopedRegle:n}=ke(t,e?.customUseRegle),{useCollectScope:r}=Oe(t,{asRecord:e?.asRecord});return{useScopedRegle:n,useCollectScope:r}}const{useCollectScope:je,useScopedRegle:Me}=Ae();function Ne(t,n,r){let i=e(()=>p(t)[n]);return e(()=>r.find(e=>{if(e[n]&&`literal`in e[n]){let t=e[n].literal;if(Q(t))return h(t._params?.[0])===i.value}})||r.find(e=>w(e[n])&&!Object.keys(e[n]).some(e=>e===`literal`))||{})}function Pe(e,t,n){return!!e&&w(e[t])&&`$value`in e[t]&&e[t]?.$value===n}function Fe(e,t,n,r){let a=i(e)?f(e.value,`$fields`):f(e,`$fields`),s=u();return _(a,async()=>{await o(),Pe(a.value,t,n)?s.value=f(e).value:s.value=void 0},{immediate:!0,flush:`pre`}),s}function Ie(e){return e}function Le(e,t){return n=>T({...e},t(n))}var Re=`1.11.0`;const ze={install(e){e.provide(he,Re)}};export{M as InternalRuleType,ze as RegleVuePlugin,z as createRule,Ae as createScopedUseRegle,Ne as createVariant,Te as defineRegleConfig,Ie as defineRules,Ee as extendRegleConfig,oe as flatErrors,xe as inferRules,De as mergeRegles,Pe as narrowVariant,Le as refineRules,F as unwrapRuleParameters,je as useCollectScope,ye as useRegle,ge as useRootStorage,we as useRules,Me as useScopedRegle,Fe as variantToRef};
1
+ import{computed as e,effectScope as t,getCurrentInstance as n,getCurrentScope as r,isRef as i,markRaw as a,nextTick as o,onMounted as s,onScopeDispose as c,reactive as l,ref as u,shallowRef as d,toRef as f,toValue as p,triggerRef as m,unref as h,version as g,watch as _,watchEffect as v}from"vue";function y(e){return e?.constructor?.name==`File`||e?.constructor?.name==`FileList`}function b(e,t=!0){return e==null?!0:e instanceof Date?isNaN(e.getTime()):y(e)?e.size<=0:Array.isArray(e)?t?e.length===0:!1:typeof e==`object`&&e?Object.keys(e).length===0:!String(e).length}const x=Symbol(`regle-rule`);function S(e){if(typeof e.source.flags==`string`)return e.source.flags;{let t=[];return e.global&&t.push(`g`),e.ignoreCase&&t.push(`i`),e.multiline&&t.push(`m`),e.sticky&&t.push(`y`),e.unicode&&t.push(`u`),t.join(``)}}function C(e,t=0){if(t>20)return e;let n=e,r={}.toString.call(e).slice(8,-1);if(r==`Set`&&(n=new Set([...e].map(e=>C(e,t++)))),r==`Map`&&(n=new Map([...e].map(e=>[C(e[0]),C(e[1])]))),r==`Date`&&(n=new Date(e.getTime())),r==`RegExp`&&(n=RegExp(e.source,S(e))),r==`Array`||r==`Object`)for(let r in n=Array.isArray(e)?[]:{},e)n[r]=C(e[r],t++);return n}function w(e){return e&&(e instanceof Date||e.constructor.name==`File`||e.constructor.name==`FileList`)?!1:typeof e==`object`&&!!e&&!Array.isArray(e)}function T(e,...t){for(var n=[].slice.call(arguments),r,i=n.length;r=n[i-1],i--;)if(!r||typeof r!=`object`&&typeof r!=`function`)throw Error(`expected object, got `+r);for(var a=n[0],o=n.slice(1),s=o.length,i=0;i<s;i++){var c=o[i];for(var l in c)a[l]=c[l]}return a}function E(e){let t={};for(let n in e){if(!Object.prototype.hasOwnProperty.call(e,n))continue;let r=e[n],i=n.split(`.`),a=t;for(let e=0;e<i.length;e++){let t=i[e],n=e===i.length-1,o=t.match(/^\d+$/)?Number(t):null;if(o!==null){if(Array.isArray(a))if(n)a[o]=r;else{if(typeof a[o]!=`object`||a[o]===null){let t=i[e+1];a[o]=t&&t.match(/^\d+$/)?{$each:[],$self:[]}:{}}a=`$each`in a[o]?a[o].$each:a[o]}}else if(n)if(Array.isArray(a[t])){let e=a[t].slice();a[t]={},a[t].$self=e}else typeof a[t]==`object`&&a[t]!==null&&`$each`in a[t]?a[t].$self=r:a[t]=r;else{let n=i[e+1];if(Array.isArray(a[t])){let e=a[t].slice();a[t]={$each:[]},a[t].$self=e}(typeof a[t]!=`object`||a[t]===null||Array.isArray(a[t])&&!n.match(/^\d+$/))&&(n&&n.match(/^\d+$/)?a[t]={$each:[],$self:[]}:a[t]={}),a=`$each`in a[t]?a[t].$each:a[t]}}}return t}function D(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function O(e,t,n,r=!1){Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})}function k(e){return typeof e==`function`&&!!e.prototype&&e.prototype.constructor===e}function A(e){let t=Object.prototype.toString.call(e);return e==null?new Date(NaN):e instanceof Date||typeof e==`object`&&t===`[object Date]`?new Date(e.getTime()):typeof e==`number`||t===`[object Number]`||typeof e==`string`||t===`[object String]`?new Date(e):new Date(NaN)}function j(e,t,{immediate:n=!1,trackDebounceRef:r}={}){let i,a=(...a)=>{r&&(r.value=!0);function o(){r&&(r.value=!1)}return new Promise((r,s)=>{function c(e){r(e),o()}if(clearTimeout(i),i=setTimeout(()=>{if(o(),i=void 0,!n)try{Promise.resolve(e.apply(this,[...a])).then(c).catch(e=>s(e)).finally(o)}catch(e){s(e)}},t),n){o();try{Promise.resolve(e.apply(this,[...a])).then(c).catch(e=>s(e)).finally(o)}catch(e){s(e)}}})};return a.cancel=()=>{clearTimeout(i),i=void 0,r&&(r.value=!1)},a}function M(e,t,n=!1,r=!0){if(e===t)return!0;if(e&&t&&typeof e==`object`&&typeof t==`object`){if(e.constructor!==t.constructor)return!1;var i,a,o;if(Array.isArray(e)&&Array.isArray(t)){if(i=e.length,i!=t.length)return!1;if(r||!r&&n){for(a=i;a--!==0;)if(!M(e[a],t[a],n,!1))return!1}return!0}if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===t.toString();if(o=Object.keys(e),i=o.length,i!==Object.keys(t).length)return!1;for(a=i;a--!==0;)if(!Object.prototype.hasOwnProperty.call(t,o[a]))return!1;for(a=i;a--!==0;){var s=o[a];if(w(e)&&w(t)&&s&&(r||!r&&n)&&!M(e[s],t[s],n,!1))return!1}return!0}return e!==e&&t!==t}var N=class extends Error{constructor(e=`Promise was aborted`){super(e),this.name=`AbortError`}};function P(e){let t=new AbortController,{signal:n}=t,r=new Promise((t,r)=>{if(n.aborted){r(new N);return}function i(){r(new N)}n.addEventListener(`abort`,i),e.then(e=>{n.removeEventListener(`abort`,i),n.aborted?r(new N):t(e)}).catch(e=>{n.removeEventListener(`abort`,i),n.aborted?r(new N):r(e)})});function i(e){t.abort(e)}return{promise:r,abort:i,signal:n}}const F={Inline:`__inline`,Async:`__async`};function I(e,t){return e.some(e=>t?e?.[t]:!1)}function L(e,t){return t?e.reduce((e,n)=>{let r=n?.[t]||[];return e.concat(r)},[]):[]}function R(e){try{return e.map(e=>p(e))}catch{return[]}}function z(t){return t.map(t=>t instanceof Function?e(t):i(t)?t:f(()=>t))}function B(e){let t=e.toString().replace(/\/\/.*$/gm,``).replace(/\/\*[\s\S]*?\*\//g,``).match(/^(?:async\s*)?(?:function\b.*?\(|\((.*?)\)|(\w+))\s*=>|\((.*?)\)\s*=>|function.*?\((.*?)\)|\((.*?)\)/);return t?(t[0]||t[1]||t[2]||t[3]||t[4]||``).split(`,`).map(e=>e.trim()).filter(e=>e.length>0).length:0}function V(e,...t){let{validator:n,type:r,async:i}=e,o=i||r===F.Async||n.constructor.name===`AsyncFunction`;return a({validator(n,...r){return e.validator(n,...R(r.length?r:t))},message(n){return typeof e.message==`function`?e.message({...n,$params:R(n?.$params?.length?n.$params:t)}):e.message},active(n){return typeof e.active==`function`?e.active({...n,$params:R(n?.$params?.length?n.$params:t)}):e.active??!0},tooltip(n){return typeof e.tooltip==`function`?e.tooltip({...n,$params:R(n?.$params?.length?n.$params:t)}):e.tooltip??[]},exec(n){let r=e.validator(n,...R(t)),i;return r instanceof Promise?r.then(e=>(i=e,typeof i==`object`&&`$valid`in i?i.$valid:typeof i==`boolean`?i:!1)):(i=r,typeof i==`object`&&`$valid`in i?i.$valid:typeof i==`boolean`?i:!1)},type:r,_validator:e.validator,_message:e.message,_active:e.active,_tooltip:e.tooltip,_type:e.type,_message_patched:!1,_tooltip_patched:!1,_async:o,_params:z(t),_brand:x})}function H(e){if(typeof e.validator==`function`){let t=[],n=e.async??e.validator.constructor.name===`AsyncFunction`,r=V({...e,async:n},...t);if(B(e.validator)>1){let t=function(...t){return V(e,...t)};return t.validator=r.validator,t.message=r.message,t.active=r.active,t.tooltip=r.tooltip,t.type=r.type,t.exec=r.exec,t._validator=r.validator,t._message=r.message,t._active=r.active,t._tooltip=r.tooltip,t._type=e.type,t._message_pacthed=!1,t._tooltip_pacthed=!1,t._async=n,t}else return r}throw Error(`[createRule] validator must be a function`)}function U(e){return w(e.value)}function W(e,n,r){let i=t(),a;return a=e instanceof Function?i.run(()=>e(n,r??0)):e,{scope:i,unwrapped:a}}const G={LessThan:-1,EqualTo:0,GreaterThan:1};function ee(e,t){let n=String(e).split(`.`),r=String(t).split(`.`);for(let e=0;e<Math.min(n.length,r.length);e++){let t=Number(n[e]),i=Number(r[e]);if(t>i)return G.GreaterThan;if(i>t)return G.LessThan;if(!isNaN(t)&&isNaN(i))return G.GreaterThan;if(isNaN(t)&&!isNaN(i))return G.LessThan}return G.EqualTo}const K=ee(g,`3.5.0`)!==-1;function q(){return Math.floor(Math.random()*Date.now()).toString()}function J(){return typeof window>`u`?q():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function Y(e){return r()?(c(e),!0):!1}function X(e){let n=!1,r,i=t(!0);return((...t)=>(n||=(r=i.run(()=>e(...t)),!0),r))}function Z(){let e=d(new Map),t=d(new Map),n=d(new Map),i=d(new Map),a=d(new Map),o=d(new Map);function s(e){let n=t.value.get(e);if(n)return n;{let n=u({});return t.value.set(e,n),n}}function l(e){let t=n.value.get(e);if(t)return t;{let t=u([]);return n.value.set(e,t),t}}function f(e,t,n){o.value.set(`${e}-${t}`,n)}function p(e,t){return o.value.get(`${e}-${t}`)}function m(e,t){e&&t!=null&&o.value.delete(`${e}-${t}`)}function h(e,t){i.value.set(e,t)}function g(e){return i.value.get(e)??!1}function _(t,n){e.value.set(t,n)}function v(t,n){let r=e.value.get(t);if(r)return y(n,r)?{valid:!0}:{valid:!1}}function y(e,t){let n=Object.keys(t),r=Object.keys(e);return r.length!==n.length||!r.every(e=>n.includes(e))?!1:r.every(n=>{let r=e[n],i=t[n];return!i||!r||typeof r==`function`||typeof i==`function`||typeof r==`number`||typeof r==`boolean`||typeof r==`string`?!1:r._params?r._params?.every((e,t)=>{if(typeof i==`number`||typeof i==`boolean`||typeof i==`string`)return!0;{let e=R(i._params),n=R(r._params);return e?.[t]===n?.[t]}}):!0})}function b(e){let t=a.value.get(e);if(t)return t;{let t=u(!1),n=u(!0),r=u({}),i=u(!1);return a.value.set(e,{$pending:t,$valid:n,$metadata:r,$validating:i}),{$pending:t,$valid:n,$metadata:r,$validating:i}}}return r()&&c(()=>{e.value.clear(),t.value.clear(),n.value.clear(),i.value.clear(),a.value.clear(),o.value.clear()}),{addRuleDeclEntry:_,setDirtyEntry:h,checkRuleDeclEntry:v,getDirtyState:g,trySetRuleStatusRef:b,getFieldsEntry:s,getCollectionsEntry:l,getArrayStatus:p,addArrayStatus:f,deleteArrayStatus:m,arrayStatusStorage:o}}const te=Symbol(`regle`),Q={REGLE_STATIC:`__regle_static`};function ne(e,t){return!oe(e.value)&&(U(e)||w(t.value)&&!b(t.value)&&!Object.entries(t.value).some(([e,t])=>$(t)||typeof t==`function`))}function re(e,t,n=!1){return!!e.value&&w(e.value)&&`$each`in e.value||n&&Array.isArray(t.value)&&t.value.some(w)||Array.isArray(t.value)&&t.value.some(w)}function ie(e){return!!e.value&&(w(e.value)||U(e.value))}function $(e){return w(e)&&`_validator`in e}function ae(e){return typeof e.value==`function`?`_validator`in e.value:!0}function oe(e){return w(e)&&D(e,Q.REGLE_STATIC)&&e[Q.REGLE_STATIC]===!0}function se(e){return w(e)&&`$fields`in e}function ce(e){return!!e&&`$rules`in e}function le({field:e,silent:t=!1}){let n=Object.entries(e.$rules??{}).map(([n,r])=>{let i=``;if(t&&!r.$valid)i=r.$message;else if(!r.$valid&&e.$error&&!r.$validating)i=r.$message;else return null;return{$message:i,$property:e.fieldName,$rule:n,$type:r.$type,...typeof r.$metadata==`object`?r.$metadata:{}}}).filter(e=>!!e).reduce((e,t)=>(typeof t.$message==`string`?e.push(t):e.push(...t.$message.map(e=>({...t,$message:e}))),e),[]),r=e.$error&&e.$externalErrors?e.$externalErrors.map(t=>({$message:t,$property:e.fieldName,$rule:`external`,$type:void 0})):[],i=[];return e.$schemaErrors&&e.$error&&(i=!Array.isArray(e.$schemaErrors)&&`$self`in e.$schemaErrors?e.$schemaErrors.$self??[]:e.$schemaErrors??[]),[...n,...r,...i]}function ue({field:e}){let t=[];for(let n of Object.values(e.$rules??{})){let e=n.$tooltip;e&&(typeof e==`string`?t.push(e):t.push(...e))}return t}function de(e){return w(e)&&`$each`in e}function fe(e,t){let{includePath:n=!1}=t??{};if(Array.isArray(e)&&e.every(e=>!w(e)))return e;if(de(e)){let t=n?e.$self?.map(e=>({message:e,path:[]}))??[]:e.$self??[],r=e.$each?.map(e=>pe(e,n))??[];return t?.concat(r.flat())}else return Object.entries(e).map(([e,t])=>pe(t,n,[e])).flat()}function pe(e,t=!1,n){let r=t&&!n?[]:n;if(Array.isArray(e)&&e.every(e=>!w(e)))return t?e.map(e=>({message:e,path:r??[]})):e;if(de(e)){let n=r?.length?e.$self?.map(e=>({message:e,path:r??[]}))??[]:e.$self??[],i=e.$each?.map((e,n)=>pe(e,t,r?.concat(n)))??[];return n?.concat(i.flat())}else return Object.entries(e).map(([e,n])=>pe(n,t,r?.concat(e))).flat()}function me({customMessages:n,rule:r,ruleKey:i,state:a,path:o,cachePath:s,storage:c,modifiers:d}){let f=t(),p={},m,h=e(()=>$(r.value)&&r.value._async),g=u(!1),{$pending:v,$valid:y,$metadata:x,$validating:S}=c.trySetRuleStatusRef(`${s}.${i}`);function C(){f=t(),p=f.run(()=>{let t=u(!1),s=u(!1),c=u(!0),l=u(!1),d=u(!1),f=e(()=>({$value:a.value,$error:s.value,$dirty:t.value,$pending:l.value,$correct:d.value,$invalid:c.value,$rule:{$valid:y.value,$invalid:!y.value,$pending:v.value},$params:C.value,...x.value})),p=e(()=>{try{return ae(r)?typeof r.value.active==`function`?r.value.active(f.value):!!r.value.active:!0}catch(e){return console.error(`Error in "active" function for "${o}.${i}" rule`,{cause:e}),!0}});function m(e){try{let t=``,a=n?n[i]?.[e]:void 0;if(a&&(t=typeof a==`function`?a(f.value):a),ae(r)){let n=`_${e}_patched`;a&&!r.value[n]||(t=typeof r.value[e]==`function`?r.value[e](f.value):r.value[e]??``)}return t}catch(t){return console.error(`Error in "${e}" function for "${o}.${i}" rule`,{cause:t}),``}}let h=e(()=>{let e=m(`message`);return b(e)&&(e=`This field is not valid`),e}),g=e(()=>m(`tooltip`)),_=e(()=>ae(r)&&r.value.type?r.value.type:i),S=e(()=>ae(r)?r.value.validator:r.value),C=e(()=>typeof r.value==`function`?[]:R(r.value._params??[]));return{$active:p,$message:h,$type:_,$validator:S,$params:C,$path:e(()=>`${o}.${_.value}`),$tooltip:g,$fieldCorrect:d,$fieldError:s,$fieldDirty:t,$fieldPending:l,$fieldInvalid:c}}),m=_(p?.$params,()=>{(!d.$silent.value||d.$rewardEarly.value&&p.$fieldError.value)&&E()})}C();function w(){y.value=!0,p.$fieldDirty.value&&(v.value=!0)}async function T(){let e=!1;try{let t=p.$validator.value;if(typeof t!=`function`)return console.error(`${o}: Incorrect rule format, it needs to be either a function or created with "createRule".`),!1;let n=t(a.value,...p.$params.value),r=a.value;w();let i;if(i=n instanceof Promise?await n:n,a.value!==r)return!0;if(typeof i==`boolean`)e=i;else{let{$valid:t,...n}=i;e=t,x.value=n}}catch{e=!1}finally{v.value=!1}return e}async function E(){try{S.value=!0;let e=!1;if(g.value=!0,$(r.value)&&r.value._async)e=await T();else{let t=p.$validator.value,n=t(a.value,...p.$params.value);if(n instanceof Promise)console.warn(`You used a async validator function on a non-async rule, please use "async await" or the "withAsync" helper`);else if(n!=null)if(typeof n==`boolean`)e=n;else{let{$valid:t,...r}=n;e=t,x.value=r}}return y.value=e,e}catch{return!1}finally{S.value=!1,g.value=!1}}function D(){y.value=!0,x.value={},v.value=!1,S.value=!1,C()}function O(){m(),f.stop(),f=t()}return l({...p,$pending:v,$valid:y,$metadata:x,$haveAsync:h,$maybePending:g,$validating:S,$parse:E,$unwatch:O,$watch:C,$reset:D})}function he(e){return{"~standard":{version:1,vendor:`regle`,validate:async t=>{let{valid:n,data:r,errors:i}=await e(t);return n?{value:r,issues:[]}:{issues:fe(i,{includePath:!0})}}}}}function ge({state:n,rulesDef:r,customMessages:i,path:a,cachePath:o,fieldName:s,storage:c,options:d,externalErrors:p,schemaErrors:m,schemaMode:g,onUnwatch:y,$isArray:x,initialState:S,originalState:T,shortcuts:E,onValidate:D}){let O=t(),k,N=[],F,I,L,R,z=()=>{},B,V=u(!1);function H(){let e=r.value,t=c.checkRuleDeclEntry(o,e),s={};for(let t in e)t.startsWith(`$`)&&(s[t]=e[t]);Y.value=s,G();let l=r.value,u=[];for(let e in l){if(e.startsWith(`$`)||e.startsWith(`~`))continue;let t=l[e];if(!t)continue;let r=f(()=>t);u.push([e,me({modifiers:{$silent:k.$silent,$rewardEarly:k.$rewardEarly},customMessages:i,rule:r,ruleKey:e,state:n,path:a,cachePath:o,storage:c,$debounce:Y.value.$debounce})])}J.value=Object.fromEntries(u),k.processShortcuts(),U(),t?.valid!=null&&(k.$dirty.value=c.getDirtyState(o),(k.$dirty.value&&!k.$silent.value||k.$rewardEarly.value&&k.$error.value)&&z()),c.addRuleDeclEntry(o,e)}function U(){z=k.$debounce.value>0?j(q,k.$debounce.value,{trackDebounceRef:V}):q}function W(){if(J.value)for(let e of Object.values(J.value))e.$unwatch();I(),R?.(),k.$dirty.value&&c.setDirtyEntry(o,k.$dirty.value),F?.(),O.stop(),O=t();for(let e of N)e.stop();N=[],y?.(),L?.()}function G(){if(J.value)for(let e of Object.values(J.value))e.$watch();k=O.run(()=>{let i=u(!1),a=u(!1),o=e(()=>i.value),c=e(()=>x||oe(n.value)),f=e(()=>Y.value.$debounce==null?k.$haveAnyAsyncRule.value?200:0:Y.value.$debounce),_=e(()=>Y.value.$deepCompare==null?!1:Y.value.$deepCompare),y=e(()=>Y.value.$lazy==null?h(d.lazy)==null?!1:h(d.lazy):Y.value.$lazy),C=e(()=>Y.value.$rewardEarly==null?h(d.rewardEarly)==null?!1:h(d.rewardEarly):Y.value.$rewardEarly),w=e(()=>Y.value.$clearExternalErrorsOnChange==null?h(d.clearExternalErrorsOnChange)==null?!T.value:h(d.clearExternalErrorsOnChange):Y.value.$clearExternalErrorsOnChange),T=e(()=>C.value?!0:Y.value.$silent==null?h(d.silent)==null?!1:h(d.silent):Y.value.$silent),D=e(()=>Y.value.$autoDirty==null?h(d.autoDirty)==null?!0:h(d.autoDirty):Y.value.$autoDirty),O=e(()=>{for(let e of Object.values(J.value))if(e.$validating)return!0;return!1}),j=e({get:()=>n.value,set(e){F(),n.value=e,ee()}}),P=e(()=>V.value?K.value&&i.value:K.value&&!G.value&&i.value),I=e(()=>le({field:{$rules:J.value,$error:P.value,$externalErrors:p?.value,$schemaErrors:m?.value,fieldName:s}})),L=e(()=>le({field:{$rules:J.value,$error:P.value,$externalErrors:p?.value,$schemaErrors:m?.value,fieldName:s},silent:!0})),R=e(()=>I.value.map(e=>e.$message)),z=e(()=>L.value.map(e=>e.$message)),B=e(()=>i.value?S.value instanceof Date&&n.value instanceof Date?A(S.value).getDate()!==A(n.value).getDate():S.value==null?!!n.value:Array.isArray(n.value)&&Array.isArray(S.value)?!M(n.value,S.value,Y.value.$deepCompare):S.value!==n.value:!1),H=e(()=>B.value),U=e(()=>ue({field:{$rules:J.value}})),W=e(()=>(T.value||o.value)&&!(K.value||G.value)),G=e(()=>a.value||!C.value?Object.entries(J.value).some(([e,t])=>t.$pending):!1),K=e(()=>m?.value&&!Array.isArray(m?.value)&&`$self`in m.value?m?.value.$self?.length>0:p?.value?.length||m?.value?.length?!0:X.value?!1:Object.values(J.value).some(e=>!e.$valid||e.$maybePending)),q=e(()=>s),X=e(()=>!g&&!Object.keys(r.value).some(e=>!e.startsWith(`$`))),Z=e(()=>{if(p?.value?.length||X.value||V.value)return!1;if(i.value&&!b(n.value)&&!O.value&&!G.value){if(g)return!m?.value?.length;{let e=Object.values(J.value);for(let t of e)if(t.$active&&!t.$valid)return!1;return e.some(e=>e.$active)}}return!1}),te=e(()=>Object.values(J.value).some(e=>e.$haveAsync)),Q=e(()=>({$debounce:f.value,$lazy:y.value,$rewardEarly:C.value,$autoDirty:D.value,$silent:T.value,$clearExternalErrorsOnChange:w.value}));function ne(){E?.fields&&Object.entries(E.fields).forEach(([e,r])=>{let a=t();re[e]=a.run(()=>{let e=u();return v(()=>{e.value=r(l({$dirty:i,$externalErrors:p?.value??[],$value:n,$silentValue:j,$rules:J,$error:P,$pending:G,$invalid:K,$correct:Z,$errors:R,$ready:W,$silentErrors:z,$anyDirty:o,$tooltips:U,$name:q,$inactive:X,$edited:B,$anyEdited:H}))}),e}),N.push(a)})}let re={};return{$error:P,$pending:G,$invalid:K,$correct:Z,$debounce:f,$deepCompare:_,$lazy:y,$ready:W,$issues:I,$silentIssues:L,$errors:R,$silentErrors:z,$rewardEarly:C,$autoDirty:D,$silent:T,$clearExternalErrorsOnChange:w,$anyDirty:o,$edited:B,$anyEdited:H,$name:q,$haveAnyAsyncRule:te,$shortcuts:re,$validating:O,$tooltips:U,$dirty:i,processShortcuts:ne,$silentValue:j,$inactive:X,$modifiers:Q,$isArrayOrRegleStatic:c}}),ee(),I=_(k.$dirty,e=>{c.setDirtyEntry(o,e),Object.values(J.value).forEach(t=>{t.$fieldDirty=e})}),R=_([k.$error,k.$correct,k.$invalid,k.$pending],()=>{Object.values(J.value).forEach(e=>{e.$fieldError=k.$error.value,e.$fieldInvalid=k.$invalid.value,e.$fieldPending=k.$pending.value,e.$fieldCorrect=k.$correct.value})}),L=_(k.$haveAnyAsyncRule,U)}function ee(){F=_(n,()=>{k.$autoDirty.value&&!k.$silent.value&&(k.$dirty.value||(k.$dirty.value=!0)),r.value instanceof Function&&H(),(!k.$silent.value||k.$rewardEarly.value&&k.$error.value)&&z(),k.$clearExternalErrorsOnChange.value&&$()},{deep:k.$isArrayOrRegleStatic.value?!0:K?1:!0})}async function q(){try{let{promise:e}=te(Promise.allSettled(Object.values(J.value).map(e=>e.$parse())));await e}catch{}}let J=u({}),Y=u({});H();function X(e,t){if(Z(),$(),k.$dirty.value=!1,c.setDirtyEntry(o,!1),!t)if(e?.toOriginalState)n.value=C(T),S.value=C(T);else if(e?.toInitialState)n.value=C(S.value);else if(e?.toState){let t;t=typeof e?.toState==`function`?e?.toState():e?.toState,S.value=C(t),n.value=C(t)}else S.value=w(n.value)?C(n.value):Array.isArray(n.value)?[...n.value]:n.value;if(e?.clearExternalErrors&&$(),!t&&!e?.keepValidationState)for(let e of Object.values(J.value))e.$reset();if(!k.$lazy.value&&!k.$silent.value&&!t)for(let e of Object.values(J.value))e.$parse()}function Z(){`cancel`in z&&z.cancel()}function te(e){return B&&B.abort(),B=P(e),B}function Q(){Z(),B&&B.abort()}function ne(e=!0,t=!1){k.$dirty.value||(k.$dirty.value=!0),t&&e?(!k.$silent.value||k.$rewardEarly.value&&k.$error.value)&&(Z(),z()):e&&(Z(),z())}async function re(e){try{if(e&&(n.value=e),g)return D?(ne(!1),D()):{valid:!1,data:n.value,errors:k.$errors.value,issues:k.$issues.value};let t=n.value;if(!k.$dirty.value)k.$dirty.value=!0;else if(!k.$silent.value&&k.$dirty.value&&!k.$pending.value&&!V.value&&!k.$haveAnyAsyncRule.value)return{valid:!k.$error.value,data:t,errors:k.$errors.value,issues:k.$issues.value};if(g)return{valid:!m?.value?.length,data:t,errors:k.$errors.value,issues:k.$issues.value};if(b(J.value))return{valid:!0,data:t,errors:k.$errors.value,issues:k.$issues.value};Q();let{promise:r}=te(Promise.allSettled(Object.values(J.value).map(e=>e.$parse())));return{valid:(await r).every(e=>e.status===`fulfilled`&&e.value===!0),data:t,errors:k.$errors.value,issues:k.$issues.value}}catch{return{valid:!1,data:n.value,errors:k.$errors.value,issues:k.$issues.value}}}function ie(e=!0){return k.$dirty.value?n.value:e?{_null:!0}:null}function $(){p?.value?.length&&(p.value=[])}!k.$lazy.value&&!k.$dirty.value&&!k.$silent.value&&q();let{$shortcuts:ae,$validating:se,$autoDirty:ce,$rewardEarly:de,$clearExternalErrorsOnChange:fe,$haveAnyAsyncRule:pe,$debounce:ge,$lazy:_e,...ve}=k;return l({...ve,$externalErrors:p,$value:n,$initialValue:S,$originalValue:T,$rules:J,...ae,$path:a,$isDebouncing:V,$reset:X,$touch:ne,$validate:re,$unwatch:W,$watch:G,$extractDirtyFields:ie,$clearExternalErrors:$,$abort:Q,"~modifiers":k.$modifiers,...he(re)})}function _e({$id:t,path:n,cachePath:r,index:i,options:a,storage:o,stateValue:s,customMessages:c,rules:l,externalErrors:u,schemaErrors:d,initialState:p,originalState:m,shortcuts:h,fieldName:g,schemaMode:_}){let v=s.value?.$id??l.$key??J(),y=`${r}.${String(v)}`,b=`${n}.${i}`;typeof s.value==`object`&&s.value!=null&&(s.value.$id||Object.defineProperties(s.value,{$id:{value:v,enumerable:!1,configurable:!1,writable:!1}}));let x=f(u?.value??[],i),S=e(()=>d?.value?.[i]),C=be({index:i,state:s,rulesDef:f(()=>l),customMessages:c,path:b,cachePath:y,storage:o,options:a,externalErrors:x,schemaErrors:S,initialState:p,originalState:m,shortcuts:h,fieldName:g,schemaMode:_});return C&&(C.$id=s.value?.$id??String(v),o.addArrayStatus(t,C.$id,C)),C}function ve({state:n,rulesDef:r,customMessages:i,path:a,cachePath:o,storage:s,options:c,externalErrors:d,schemaErrors:p,schemaMode:m,initialState:g,originalState:y,shortcuts:x,fieldName:S}){let w=t(),T,E=t(),D,O=[];if(!Array.isArray(n.value)&&!r.value.$each)return;let k=u(),A=u(n.value),j=u({}),M,N,P=u({}),F=s.getCollectionsEntry(a);D=E.run(()=>({isPrimitiveArray:e(()=>n.value?.length?Array.isArray(n.value)&&n.value.length?n.value.every(e=>typeof e!=`object`):r.value.$each&&!(r.value.$each instanceof Function)?Object.values(r.value.$each).every(e=>$(e)||typeof e==`function`):!1:!1)})),I(),B();function I(){j.value=Object.fromEntries(Object.entries(r.value).filter(([e])=>e.startsWith(`$`))),typeof n.value==`object`&&(n.value!=null&&!n.value?.$id&&n.value!==null?(k.value=J(),Object.defineProperties(n.value,{$id:{value:k.value,enumerable:!1,configurable:!1,writable:!1}})):n.value?.$id&&(k.value=n.value.$id)),A.value=P.value.$value,Array.isArray(n.value)&&!D.isPrimitiveArray.value?F.value=n.value.filter(e=>typeof e==`object`).map((t,n)=>{let{scope:l,unwrapped:u}=W(r.value.$each,f(()=>t),n);l&&O.push(l);let h=f(g.value??[],n),_=f(d?.value??{},`$each`),v=e(()=>p?.value?.$each);return _e({$id:k.value,path:a,cachePath:o,customMessages:i,rules:u??{},stateValue:f(()=>t),index:n,options:c,storage:s,externalErrors:_,schemaErrors:v,initialState:h,originalState:y,shortcuts:x,fieldName:S,schemaMode:m})||null}).filter(e=>!!e):F.value=[],P.value=ge({state:n,rulesDef:r,customMessages:i,path:a,cachePath:a,storage:s,options:c,externalErrors:f(d?.value??{},`$self`),schemaErrors:e(()=>p?.value?.$self),$isArray:!0,initialState:g,originalState:y,shortcuts:x,fieldName:S,schemaMode:m})}function L(){if(Array.isArray(n.value)&&!D.isPrimitiveArray.value){let t=C(F.value);F.value=n.value.filter(e=>typeof e==`object`).map((t,n)=>{let o=f(()=>t);if(t.$id&&F.value.find(e=>e.$id===t.$id)){let e=s.getArrayStatus(k.value,t.$id);return e?(e.$value=o,e):null}else{let{scope:t,unwrapped:l}=W(r.value.$each,o,n);t&&O.push(t);let u=f(d?.value??{},`$each`),h=e(()=>p?.value?.$each??[]);return _e({$id:k.value,path:a,cachePath:a,customMessages:i,rules:l??{},stateValue:o,index:n,options:c,storage:s,externalErrors:u,schemaErrors:h,initialState:f(g.value??[],n),originalState:y,shortcuts:x,fieldName:S,schemaMode:m})||null}}).filter(e=>!!e),t.filter(e=>!n.value?.find(t=>e.$id===t.$id)).forEach((e,t)=>{s.deleteArrayStatus(k.value,t.toString())})}else F.value=[]}function R(){M=_(n,()=>{N?.(),n.value!=null&&!Object.hasOwn(n.value,`$id`)&&!k.value?I():L(),z()},{deep:K?1:!0,flush:`pre`}),z()}function z(){N=_(n,()=>{T.$autoDirty.value&&!T.$silent.value&&P.value.$touch(!1,!0)},{flush:`post`})}function B(){R(),w=t(),T=w.run(()=>{let r=e({get:()=>n.value,set(e){M?.(),N?.(),n.value=e,R()}}),i=e(()=>P.value.$dirty&&(!F.value.length||F.value.every(e=>e.$dirty))),o=e(()=>P.value.$anyDirty||F.value.some(e=>e.$anyDirty)),s=e(()=>P.value.$invalid||F.value.some(e=>e.$invalid)),d=e(()=>(b(P.value.$rules)?!0:P.value.$correct)&&(!F.value.length||F.value.every(e=>e.$correct||e.$anyDirty&&!e.$invalid))),f=e(()=>P.value.$error||F.value.some(e=>e.$error)),p=e(()=>!(s.value||m.value)),m=e(()=>P.value.$pending||F.value.some(e=>e.$pending)),_=e(()=>!!F.value.length&&F.value.every(e=>e.$edited)),C=e(()=>P.value.$anyEdited||F.value.some(e=>e.$anyEdited)),w=e(()=>({$self:P.value.$issues,$each:F.value.map(e=>e.$issues)})),T=e(()=>({$self:P.value.$errors,$each:F.value.map(e=>e.$errors)})),E=e(()=>({$self:P.value.$silentErrors,$each:F.value.map(e=>e.$silentErrors)})),D=e(()=>j.value.$rewardEarly==null?h(c.rewardEarly)==null?!1:h(c.rewardEarly):j.value.$rewardEarly),k=e(()=>D.value?!0:j.value.$silent==null?h(c.silent)==null?!1:h(c.silent):j.value.$silent),A=e(()=>j.value.$autoDirty==null?h(c.autoDirty)==null?!0:h(c.autoDirty):j.value.$autoDirty),I=e(()=>S),L=e(()=>({$deepCompare:j.value.$deepCompare??!1,$lazy:j.value.$lazy??!1,$rewardEarly:D.value,$autoDirty:A.value,$silent:k.value,$clearExternalErrorsOnChange:j.value.$clearExternalErrorsOnChange??!1}));function z(){x?.collections&&Object.entries(x?.collections).forEach(([e,c])=>{let h=t();B[e]=h.run(()=>{let e=u();return v(()=>{e.value=c(l({$dirty:i,$error:f,$path:a,$silentValue:r,$pending:m,$invalid:s,$correct:d,$errors:T,$silentErrors:E,$initialValue:g,$originalValue:y,$ready:p,$anyDirty:o,$name:I,$each:F,$self:P,$value:n,$edited:_,$anyEdited:C,$issues:w}))}),e}),O.push(h)})}let B={};return z(),{$dirty:i,$anyDirty:o,$invalid:s,$correct:d,$error:f,$pending:m,$errors:T,$silentErrors:E,$ready:p,$name:I,$shortcuts:B,$silentValue:r,$edited:_,$anyEdited:C,$rewardEarly:D,$silent:k,$autoDirty:A,$issues:w,$modifiers:L}}),D.isPrimitiveArray.value&&r.value.$each&&console.warn(`${a} is a Array of primitives. Tracking can be lost when reassigning the Array. We advise to use an Array of objects instead`)}function V(){M?.(),P.value&&P.value.$unwatch(),F.value&&F.value.forEach(e=>{`$dirty`in e&&e.$unwatch()}),w.stop(),w=t(),E.stop(),E=t(!0),O.forEach(e=>e.stop()),O=[]}function H(e=!0,t=!1){P.value.$touch(e,t),F.value.forEach(n=>{n.$touch(e,t)})}function U(e,t){if(V(),!t)if(e?.toOriginalState)n.value=C(y),g.value=C(y);else if(e?.toInitialState)n.value=C(g.value);else if(e?.toState){let t;t=typeof e?.toState==`function`?e?.toState():e?.toState,g.value=C(t),n.value=C(t)}else g.value=C(n.value);e?.clearExternalErrors&&q(),e?.keepValidationState||(P.value.$reset(e,t),F.value.forEach(t=>{t.$reset(e,!0)})),t||I()}function G(){P.value.$abort(),F.value.forEach(e=>{e.$abort()})}async function ee(e){e&&(n.value=e);let t=n.value;try{return G(),{valid:(await Promise.allSettled([P.value.$validate(e),...F.value.map(e=>e.$validate())])).every(e=>e.status===`fulfilled`?e.value.valid===!0:!1),data:t,errors:T.$errors.value,issues:T.$issues.value}}catch{return{valid:!1,data:t,errors:T.$errors.value,issues:T.$issues.value}}}function q(){P.value.$clearExternalErrors(),F.value.forEach(e=>{e.$clearExternalErrors()})}function Y(e=!0){let t=F.value.map(t=>{if(se(t))return t.$extractDirtyFields(e)});return e&&t.every(e=>b(e))&&(t=[]),t}let{$shortcuts:X,...Z}=T;return l({$self:P,...Z,...X,$path:a,$each:F,$value:n,$initialValue:g,$originalValue:y,$validate:ee,$unwatch:V,$watch:B,$touch:H,$reset:U,$abort:G,$extractDirtyFields:Y,$clearExternalErrors:q,"~modifiers":T.$modifiers,...he(ee)})}function ye({rulesDef:n,state:r,path:i=``,cachePath:a,rootRules:o,externalErrors:s,schemaErrors:c,rootSchemaErrors:d,validationGroups:p,initialState:m,originalState:g,fieldName:y,...x}){let S=t(),T,E=[],D=null,O=null,k=null,A=null;async function j(t=!0){let o=Object.entries(n.value),l=Object.fromEntries(o.reduce((t,[n,o])=>{if(!o)return t;let l=f(r.value??{},n),u=f(()=>o),d=f(s?.value??{},n),p=e(()=>c?.value?.[n]),h=f(m?.value??{},n);return t.push([n,be({state:l,rulesDef:u,path:i?`${i}.${n}`:n,cachePath:a?`${a}.${n}`:n,externalErrors:d,schemaErrors:p,initialState:h,originalState:g?.[n],fieldName:n,...x})]),t},[])),u=Object.fromEntries(Object.entries(h(s)??{}).filter(([e,t])=>!(e in n.value)&&!!t).map(([t])=>{let n=f(r.value??{},t),o=f(s?.value??{},t),l=e(()=>c?.value?.[t]),u=f(m?.value??{},t),d=i?`${i}.${t}`:t,p=a?`${a}.${t}`:t;return[t,be({state:n,rulesDef:e(()=>({})),path:d,cachePath:p,externalErrors:o,schemaErrors:l,initialState:u,originalState:g?.[t],fieldName:t,...x})]})),d=Object.fromEntries(Object.entries(h(c)??{}).map(([t])=>{let n=i?`${i}.${t}`:t,o=a?`${a}.${t}`:t,l=f(r.value??{},t),u=f(s?.value??{},t),d=e(()=>c?.value?.[t]),p=f(m?.value??{},t);return[t,be({state:l,rulesDef:e(()=>({})),path:n,cachePath:o,externalErrors:u,schemaErrors:d,initialState:p,originalState:g?.[t],fieldName:t,...x})]})),p=Object.fromEntries(Object.entries(r.value??{}).filter(([e])=>!(e in n.value)&&!(e in(u??{}))&&!(e in(d??{}))).map(([t])=>{let n=f(r.value??{},t),o=f(s?.value??{},t),l=e(()=>c?.value?.[t]),u=f(m?.value??{},t);return[t,be({state:n,rulesDef:e(()=>({})),path:i?`${i}.${t}`:t,cachePath:a?`${a}.${t}`:t,externalErrors:o,schemaErrors:l,initialState:u,originalState:g?.[t],fieldName:t,...x})]}));M.value={...l,...u,...d,...p},t&&F()}let M=x.storage.getFieldsEntry(a);j();function N(){s&&(k=_(s,()=>{R(),j()},{deep:!0}))}function P(){A=_(r,()=>{R(),j(),T.$autoDirty.value&&!T.$silent.value&&V(!1,!0)},{flush:`post`})}function F(){o&&(D?.(),D=_(o,()=>{R(),j()},{deep:!0,flush:`pre`}),N()),d&&(O?.(),O=_(d,()=>{R(),j()},{deep:!0,flush:`post`})),P(),T=S.run(()=>{let n=e({get:()=>r.value,set(e){R(),r.value=e,j(),T.$autoDirty.value&&!T.$silent.value&&V(!1,!0)}}),a=e({get:()=>r.value,set(e){R(),r.value=e,j()}}),o=e(()=>{let e=M.value,t=Object.keys(e);if(!t.length)return!1;for(let n of t)if(!e[n]?.$dirty)return!1;return!0}),s=e(()=>{let e=M.value;for(let t in e)if(e[t]?.$anyDirty)return!0;return!1}),c=e(()=>{let e=M.value,t=Object.entries(e);if(!t.length)return!1;for(let[e,n]of t)if(n?.$invalid)return!0;return!1}),d=e(()=>{let e=Object.entries(M.value).reduce((e,[t,n])=>((!ce(n)||!n.$inactive)&&e.push([t,n]),e),[]);return e.length?x.schemaMode?e.every(([e,t])=>t.$correct):e.every(([e,t])=>ce(t)?`required`in t.$rules&&t.$rules.required.$active?t.$correct:!t.$invalid&&!t.$pending&&!t.$isDebouncing:t?.$correct):!1}),f=e(()=>{let e=M.value;if(!Object.keys(e).length)return!1;for(let t in e)if(e[t]?.$error)return!0;return!1}),_=e(()=>h(x.options.rewardEarly)==null?!1:h(x.options.rewardEarly)),b=e(()=>h(x.options.silent)==null?!!_.value:h(x.options.silent)),S=e(()=>h(x.options.autoDirty)==null?!0:h(x.options.autoDirty)),C=e(()=>(b.value||s.value)&&!(c.value||D.value)),w=u(!1),D=e(()=>{if(w.value)return!0;let e=M.value;for(let t in e)if(e[t]?.$pending)return!0;return!1}),O=e(()=>{let e={};for(let t in M.value)e[t]=M.value[t]?.$issues;return e}),k=e(()=>{let e={};for(let t in M.value)e[t]=M.value[t]?.$errors;return e}),A=e(()=>{let e={};for(let t in M.value)e[t]=M.value[t]?.$silentErrors;return e}),N=e(()=>{if(!Object.keys(M.value).length)return!1;for(let e in M.value)if(!M.value[e]?.$edited)return!1;return!0}),P=e(()=>{for(let e in M.value)if(M.value[e]?.$anyEdited)return!0;return!1}),F=e(()=>y),z=e(()=>({autoDirty:S.value,lazy:h(x.options.lazy)??!1,rewardEarly:_.value,silent:b.value,clearExternalErrorsOnChange:h(x.options.clearExternalErrorsOnChange)??!1,id:h(x.options.id)}));function B(){x.shortcuts?.nested&&Object.entries(x.shortcuts.nested).forEach(([e,n])=>{let p=t();U[e]=p.run(()=>{let e=u();return v(()=>{e.value=n(l({$dirty:o,$path:i,$value:r,$silentValue:a,$error:f,$originalValue:g,$pending:D,$invalid:c,$correct:d,$ready:C,$anyDirty:s,$name:F,$silentErrors:A,$initialValue:m,$errors:k,$fields:M,$edited:N,$anyEdited:P,$issues:O,"~modifiers":h(x.options)}))}),e}),E.push(p)})}let H=e({get:()=>p?Object.fromEntries(Object.entries(p?.(M.value)??{}).map(([e,t])=>t.length?[e,{...Object.fromEntries([`$invalid`,`$error`,`$pending`,`$dirty`,`$correct`].map(e=>[e,I(t,e)])),...Object.fromEntries([`$errors`,`$silentErrors`].map(e=>[e,L(t,e)]))}]:[])):{},set(){}}),U={};return B(),{$dirty:o,$anyDirty:s,$invalid:c,$correct:d,$error:f,$pending:D,$issues:O,$errors:k,$silentErrors:A,$ready:C,$name:F,$shortcuts:U,$groups:H,$silentValue:a,$edited:N,$anyEdited:P,$localPending:w,$autoDirty:S,$silent:b,$value:n,$modifiers:z}})}function R(){if(D?.(),k?.(),A?.(),O?.(),E=[],T={},M.value)for(let e of Object.values(M.value))e?.$unwatch()}function z(){let e=M.value;for(let t of Object.values(e))t.$clearExternalErrors()}function B(e,t){if(k?.(),R(),!t)if(e?.toOriginalState)r.value=C({...g}),m.value=C({...g});else if(e?.toInitialState)r.value=C({...m.value});else if(e?.toState){let t;t=typeof e?.toState==`function`?e?.toState():e?.toState,m.value=C(t),r.value=C(t)}else m.value=C(r.value);if(!e?.keepValidationState)for(let t of Object.values(M.value))t?.$reset(e,!0);e?.clearExternalErrors&&z(),N(),t||j()}function V(e=!0,t=!1){for(let n of Object.values(M.value))n?.$touch(e,t)}function H(e){return e.filter(([e,t])=>w(t)?!(t&&typeof t==`object`&&`_null`in t)&&!b(t):Array.isArray(t)?t.length:!0)}function U(e=!0){let t=Object.entries(M.value).map(([t,n])=>[t,n.$extractDirtyFields(e)]);return e&&(t=H(t)),Object.fromEntries(t)}function W(){for(let e of Object.values(M.value))e.$abort()}async function G(e){try{if(e&&(r.value=e),x.schemaMode)return x.onValidate?(V(!1),T.$localPending.value=!0,x.onValidate()):{valid:!1,data:r.value,errors:T.$errors.value,issues:T.$issues.value};{let e=r.value;return W(),{valid:(await Promise.allSettled(Object.values(M.value).map(e=>e.$validate()))).every(e=>e.status===`fulfilled`&&e?.value.valid===!0),data:e,errors:T.$errors.value,issues:T.$issues.value}}}catch{return{valid:!1,data:r.value,errors:T.$errors.value,issues:T.$issues.value}}finally{T.$localPending.value=!1}}let{$shortcuts:ee,$localPending:K,...q}=T,J=l({...q,...ee,$path:i,$initialValue:m,$originalValue:g,$fields:M,$reset:B,$touch:V,$validate:G,$unwatch:R,$watch:F,$clearExternalErrors:z,$extractDirtyFields:U,$abort:W,...o?{"~modifiers":T.$modifiers}:{},...he(G)});return v(()=>{for(let e of Object.keys(J).filter(e=>!e.startsWith(`$`)&&!e.startsWith(`~`)))delete J[e];for(let e of Object.values(M.value))e?.$name&&Object.assign(J,{[e.$name]:e})}),J}function be({rulesDef:e,...n}){if(re(e,n.state,n.schemaMode))return ve({rulesDef:e,...n});if(ne(n.state,e)){if(U(n.state))return ye({rulesDef:e,...n});{let r=t().run(()=>{let e=f(n.state.value?n.state:u({}));return _(()=>n.state.value,t=>{e.value=t},{deep:!0}),_(e,e=>{n.state.value=e},{deep:!0}),{fakeState:e}}),{state:i,...a}=n;return ye({rulesDef:e,...a,state:r.fakeState})}}else if(ie(e))return ge({rulesDef:i(e.value)?e.value:e,...n})}var xe=`1.12.0-beta.1`;function Se({initialState:e,originalState:t,options:n,scopeRules:i,state:a,customRules:o,shortcuts:s,schemaErrors:d,schemaMode:f=!1,onValidate:p}){let m=Z(),h=u(),g=u(),v,y;function b(){v=_(()=>n.externalErrors?.value,()=>{y?.(),n.externalErrors?.value&&Object.keys(n.externalErrors.value).some(e=>e.includes(`.`))?g.value=E(n.externalErrors.value):g.value=n.externalErrors?.value,x()},{immediate:!0,deep:!0})}function x(){y=_(()=>g.value,()=>{v?.(),n.externalErrors?.value&&(n.externalErrors.value=g.value),b()},{deep:!0})}return b(),ne(a,i)?h.value=ye({rootRules:i,rulesDef:i,state:a,customMessages:o?.(),storage:m,options:n,externalErrors:g,validationGroups:n.validationGroups,initialState:e,originalState:t,shortcuts:s,fieldName:`root`,path:``,cachePath:``,schemaErrors:d,rootSchemaErrors:d,schemaMode:f,onValidate:p}):ie(i)&&(h.value=ge({rulesDef:i,state:a,customMessages:o?.(),storage:m,options:n,externalErrors:g,initialState:e,originalState:t,shortcuts:s,fieldName:`root`,path:``,cachePath:``,schemaMode:f,schemaErrors:d,onValidate:p})),r()&&c(()=>{h.value?.$unwatch(),y?.(),v?.()}),l({regle:h})}function Ce({state:t,rulesFactory:n,options:r,globalOptions:a,customRules:o,shortcuts:s}){let c=i(n)?n:typeof n==`function`?void 0:e(()=>n),l={...a,...r},f,p=d(c??{});typeof n==`function`&&(f=v(()=>{p.value=n(t),m(p)}));let h=u(w(t.value)?{...C(t.value)}:C(t.value)),g=w(t.value)?{...C(t.value)}:C(t.value);return Y(()=>{f?.()}),Se({scopeRules:p,state:t,options:l,initialState:h,originalState:g,customRules:o,shortcuts:s})}function we(e,t,n){let r={autoDirty:t?.autoDirty,lazy:t?.lazy,rewardEarly:t?.rewardEarly,silent:t?.silent,clearExternalErrorsOnChange:t?.clearExternalErrorsOnChange};function a(t,a,o){return{r$:Ce({state:i(t)?t:u(t),rulesFactory:a,options:o,globalOptions:r,customRules:e,shortcuts:n}).regle}}return a}const Te=we();function Ee(){function e(e,t){return t}return e}const De=Ee();function Oe(e){let t={};if(Object.entries(e).some(([e,t])=>$(t)||typeof t==`function`))return null;for(let n in e){let r=e[n];r&&w(r)&&`$each`in r&&r.$each&&w(r.$each)?t[n]=[Oe(r.$each)]:w(r)&&!b(r)&&!Object.entries(r).some(([e,t])=>$(t)||typeof t==`function`)?t[n]=Oe(r):t[n]=null}return t}function ke(t,n,r){let a={autoDirty:n?.autoDirty,lazy:n?.lazy,rewardEarly:n?.rewardEarly,silent:n?.silent,clearExternalErrorsOnChange:n?.clearExternalErrorsOnChange};function o(n,o){let s=i(n)?n:typeof n==`function`?void 0:e(()=>n);return Ce({state:u(Oe(s?.value)),rulesFactory:s,options:o,globalOptions:a,customRules:t,shortcuts:r}).regle}return o}const Ae=ke();function je(e){if(k(e)){let t=e,n=function(...e){return Me(new t(...e))};return Object.defineProperty(n,`name`,{value:t.name}),n.prototype=t.prototype,Me(n)}return Me(e)}function Me(e){return!D(e,Q.REGLE_STATIC)&&Object.isExtensible(e)&&O(e,Q.REGLE_STATIC,!0),e}function Ne({rules:e,modifiers:t,shortcuts:n}){let r=we(e,t,n),i=ke(e,t,n);return r.__config={rules:e,modifiers:t,shortcuts:n},i.__config={rules:e,modifiers:t,shortcuts:n},{useRegle:r,inferRules:Ee(),useRules:i}}function Pe(e,{rules:t,modifiers:n,shortcuts:r}){let i=e.__config??{},a=()=>({...i.rules?.(),...t?.()}),o=i.modifiers&&n?T(i.modifiers,n):i.modifiers??n,s=i.shortcuts&&r?T(i.shortcuts,r):i.shortcuts??r,c=we(a,o,s);return c.__config={rules:a,modifiers:o,shortcuts:s},{useRegle:c,inferRules:Ee()}}function Fe(t,n){let r=n??!1,i=e({get:()=>r?Object.values(t).map(e=>e.$value):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$value])),set:e=>{r||typeof e==`object`&&Object.entries(e).forEach(([e,n])=>t[e].$value=n)}}),a=e({get:()=>Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$silentValue])),set:e=>{typeof e==`object`&&Object.entries(e).forEach(([e,n])=>t[e].$silentValue=n)}}),o=e(()=>{let e=Object.entries(t);return!!e.length&&e.every(([e,t])=>t?.$dirty)}),s=e(()=>Object.entries(t).some(([e,t])=>t?.$anyDirty)),c=e(()=>Object.entries(t).some(([e,t])=>t?.$invalid)),u=e(()=>{let e=Object.entries(t);return!!e.length&&e.every(([e,t])=>t?.$correct||t.$anyDirty&&!t.$invalid)}),d=e(()=>Object.entries(t).some(([e,t])=>t?.$error)),f=e(()=>{let e=Object.entries(t);return!!e.length&&e.every(([e,t])=>t?.$ready)}),p=e(()=>Object.entries(t).some(([e,t])=>t?.$pending)),m=e(()=>r?Object.entries(t).map(([e,t])=>t.$issues):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$issues]))),h=e(()=>r?Object.entries(t).map(([e,t])=>t.$silentIssues):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$silentIssues]))),g=e(()=>r?Object.entries(t).map(([e,t])=>t.$errors):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$errors]))),_=e(()=>r?Object.entries(t).map(([e,t])=>t.$silentErrors):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.$silentErrors]))),y=e(()=>{let e=Object.entries(t);return!!e.length&&e.every(([e,t])=>t?.$edited)}),b=e(()=>Object.entries(t).some(([e,t])=>t?.$anyEdited)),x=e(()=>r?Object.values(t):t);function S(e){Object.values(t).forEach(t=>{t.$reset(e)})}function C(){Object.values(t).forEach(e=>{e.$touch()})}function w(e=!0){return Object.values(t).map(t=>t.$extractDirtyFields(e))}function T(){Object.values(t).forEach(e=>{e.$clearExternalErrors()})}async function E(e){try{e&&(i.value=e);let n=i.value;return{valid:(await Promise.allSettled(Object.values(t).map(e=>e.$validate()))).every(e=>e.status===`fulfilled`?e.value.valid===!0:!1),data:n,errors:g.value,issues:m.value}}catch{return{valid:!1,data:i.value,errors:g.value,issues:m.value}}}let D=l({...!r&&{$silentValue:a},$errors:g,$issues:m,$silentIssues:h,$silentErrors:_,$instances:x,$value:i,$dirty:o,$anyDirty:s,$invalid:c,$correct:u,$error:d,$pending:p,$ready:f,$edited:y,$anyEdited:b,$reset:S,$touch:C,$validate:E,$extractDirtyFields:w,$clearExternalErrors:T});return v(()=>{if(!r){for(let e of Object.keys(D).filter(e=>!e.startsWith(`$`)&&!e.startsWith(`~`)))delete D[e];for(let[e,t]of Object.entries(x.value))Object.assign(D,{[e]:t})}}),D}function Ie(t,n){function r(r){let i=e(()=>p(r)),a=l({});c();let o=u(d(t.value)),s=l({r$:o});function c(){i.value&&(typeof i.value==`string`&&!t.value[i.value]?t.value[i.value]={}:Array.isArray(i.value)&&i.value.forEach(e=>{t.value[e]||(t.value[e]={})}))}_(i,c),_(t,e=>{o.value=d(e)},{deep:!0});function d(e){return i.value?typeof i.value==`string`?Fe(e[i.value]??{},!n.asRecord):(Object.keys(a).forEach(e=>{delete a[e]}),i.value.forEach(t=>{Object.entries(e[t]).forEach(([e,t])=>{Object.assign(a,{[e]:t})})}),Fe(a,!n.asRecord)):Fe(e[`~~global`]??{},!n.asRecord)}return{r$:s.r$}}return{useCollectScope:r}}function Le(t,r){let i=r??Te;return{useScopedRegle:((r,a,o)=>{let{namespace:c,scopeKey:l,...d}=o??{};i.__config??={};let f=e(()=>p(c)),m=u(`${Object.keys(t.value).length+1}-${J()}`),h=e(()=>o?.scopeKey??`instance-${m.value}`),{r$:g}=i(r,a,d);y(),Y(v),_(f,(e,t)=>{v(t),y()}),n()&&s(()=>{let e=n();typeof window<`u`&&e?.proxy?.$el?.parentElement&&document.documentElement&&!document.documentElement.contains(e?.proxy?.$el?.parentElement)&&v()});function v(e){let n=e??f.value;n?t.value[n]&&delete t.value[n][h.value]:t.value[`~~global`][h.value]&&delete t.value[`~~global`][h.value]}function y(){f.value?(t.value[f.value]||(t.value[f.value]={}),t.value[f.value][h.value]=g):(t.value[`~~global`]||(t.value[`~~global`]={}),t.value[`~~global`][h.value]=g)}return{r$:g,dispose:v,register:y}})}}function Re(e){let t=(e?.customStore?()=>(e.customStore&&(e.customStore?.value[`~~global`]?e.customStore?.value&&(e.customStore.value={"~~global":{}}):e.customStore.value[`~~global`]={}),e.customStore):X(()=>u({"~~global":{}})))(),{useScopedRegle:n}=Le(t,e?.customUseRegle),{useCollectScope:r}=Ie(t,{asRecord:e?.asRecord});return{useScopedRegle:n,useCollectScope:r}}const{useCollectScope:ze,useScopedRegle:Be}=Re();function Ve(t,n,r){let i=e(()=>p(t)[n]);return e(()=>r.find(e=>{if(e[n]&&`literal`in e[n]){let t=e[n].literal;if($(t))return h(t._params?.[0])===i.value}})||r.find(e=>w(e[n])&&!Object.keys(e[n]).some(e=>e===`literal`))||{})}function He(e,t,n){return!!e&&w(e[t])&&`$value`in e[t]&&e[t]?.$value===n}function Ue(e,t,n,r){let a=i(e)?f(e.value,`$fields`):f(e,`$fields`),s=u();return _(a,async()=>{await o(),He(a.value,t,n)?s.value=f(e).value:s.value=void 0},{immediate:!0,flush:`pre`}),s}function We(e){return e}function Ge(e,t){return n=>T({...e},t(n))}const Ke={install(e){e.provide(te,xe)}};export{F as InternalRuleType,Ke as RegleVuePlugin,H as createRule,Re as createScopedUseRegle,Ve as createVariant,Ne as defineRegleConfig,We as defineRules,Pe as extendRegleConfig,fe as flatErrors,De as inferRules,je as markStatic,Fe as mergeRegles,He as narrowVariant,Ge as refineRules,R as unwrapRuleParameters,ze as useCollectScope,Te as useRegle,Se as useRootStorage,Ae as useRules,Be as useScopedRegle,Ue as variantToRef};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@regle/core",
3
- "version": "1.11.0",
3
+ "version": "1.12.0-beta.1",
4
4
  "description": "Headless form validation library for Vue",
5
5
  "peerDependencies": {
6
6
  "pinia": ">=2.2.5",