@regle/core 1.18.3 → 1.19.0-beta.2

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.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @regle/core v1.18.3
2
+ * @regle/core v1.19.0-beta.2
3
3
  * (c) 2026 Victor Garcia
4
4
  * @license MIT
5
5
  */
@@ -139,7 +139,7 @@ type RegleShortcutDefinition<TCustomRules extends Record<string, any> = {}> = {
139
139
  /**
140
140
  * Allow you to customize the properties for every parent of a nested object
141
141
  */
142
- nested?: ShortcutCommonFn<RegleStatus<Record<string, any>, ReglePartialRuleTree<any, Partial<TCustomRules> & Partial<DefaultValidators>>>>;
142
+ nested?: ShortcutCommonFn<RegleStatus<Record<string, any>, ReglePartialRuleTree<any, Partial<TCustomRules>>>>;
143
143
  /**
144
144
  * Allow you to customize the properties for every parent of a collection
145
145
  */
@@ -172,7 +172,7 @@ type Regle<TState extends Record<string, any> = EmptyObject, TRules extends Regl
172
172
  * @template TShortcuts - Custom shortcut definitions for common validation patterns
173
173
  * @template TAdditionalReturnProperties - Additional properties to extend the return type
174
174
  */
175
- type RegleSingleField<TState extends Maybe<PrimitiveTypes> = any, TRules extends RegleRuleDecl<NonNullable<TState>> = EmptyObject, TShortcuts extends RegleShortcutDefinition = {}, TAdditionalReturnProperties extends Record<string, any> = {}> = {
175
+ type RegleSingleField<TState extends Maybe<PrimitiveTypes> = any, TRules extends RegleRuleDecl<NonNullable<TState>, CustomRulesDeclarationTree> = EmptyObject, TShortcuts extends RegleShortcutDefinition = {}, TAdditionalReturnProperties extends Record<string, any> = {}> = {
176
176
  /**
177
177
  * r$ is a reactive object containing the values, errors, dirty state and all the necessary validations properties you'll need to display information.
178
178
  *
@@ -290,8 +290,8 @@ type NarrowVariant<TRoot extends {
290
290
  $value: unknown;
291
291
  }, TKey extends keyof TRoot, TValue extends (LazyJoinDiscriminatedUnions<Exclude<TRoot[TKey], RegleCollectionStatus<any, any, any> | RegleStatus<any, any, any> | NarrowVariantExtracts[keyof NarrowVariantExtracts]>> extends {
292
292
  $value: infer V;
293
- } ? V : unknown)> = Extract<TRoot, { [K in TKey]: RegleFieldStatus<TValue, any, any> | RegleFieldStatus<MaybeInput<TValue>, any, any> | (IsEmptyObject<NarrowVariantFieldExtracts<TValue>> extends true ? EmptyObject : NarrowVariantFieldExtracts<TValue>[keyof NarrowVariantFieldExtracts<TValue>]) }> & {
294
- $fields: Extract<TRoot['$fields'], { [K in TKey]: RegleFieldStatus<TValue, any, any> | RegleFieldStatus<MaybeInput<TValue>, any, any> | (IsEmptyObject<NarrowVariantFieldExtracts<TValue>> extends true ? EmptyObject : NarrowVariantFieldExtracts<TValue>[keyof NarrowVariantFieldExtracts<TValue>]) }> & { [K in TKey]: TRoot[K] & {
293
+ } ? V : unknown)> = Extract<TRoot, { [K in TKey]: RegleFieldStatus<TValue, any, any> | RegleFieldStatus<MaybeInput<TValue>, any, any> | (IsEmptyObject<NarrowVariantFieldExtracts<TValue>> extends true ? 'foo' : NarrowVariantFieldExtracts<TValue>[keyof NarrowVariantFieldExtracts<TValue>]) }> & {
294
+ $fields: Extract<TRoot['$fields'], { [K in TKey]: RegleFieldStatus<TValue, any, any> | RegleFieldStatus<MaybeInput<TValue>, any, any> | (IsEmptyObject<NarrowVariantFieldExtracts<TValue>> extends true ? 'bar' : NarrowVariantFieldExtracts<TValue>[keyof NarrowVariantFieldExtracts<TValue>]) }> & { [K in TKey]: TRoot[K] & {
295
295
  $value: TValue;
296
296
  } };
297
297
  } & {
@@ -299,9 +299,9 @@ type NarrowVariant<TRoot extends {
299
299
  } & { [K in TKey]: TRoot[K] & {
300
300
  $value: TValue;
301
301
  } };
302
- type MaybeVariantStatus<TState extends Record<string, any> | undefined = Record<string, any>, TRules extends ReglePartialRuleTree<NonNullable<TState>> = Record<string, any>, TShortcuts extends RegleShortcutDefinition = {}> = IsUnion<NonNullable<TState>> extends true ? IsUnion<TRules> extends true ? Omit<RegleStatus<TState, TRules, TShortcuts>, '$fields'> & {
303
- $fields: ProcessChildrenFields<TState, TRules, TShortcuts>[keyof ProcessChildrenFields<TState, TRules, TShortcuts>];
304
- } & (HasNamedKeys<TState> extends true ? ProcessChildrenFields<TState, TRules, TShortcuts>[keyof ProcessChildrenFields<TState, TRules, TShortcuts>] : {}) : RegleStatus<JoinDiscriminatedUnions<TState>, TRules extends ReglePartialRuleTree<NonNullable<JoinDiscriminatedUnions<TState>>> ? TRules : EmptyObject, TShortcuts> : RegleStatus<TState, TRules, TShortcuts>;
302
+ type MaybeVariantStatus<TState extends Record<string, any> | undefined = Record<string, any>, TRules extends ReglePartialRuleTree<NonNullable<TState>> = Record<string, any>, TShortcuts extends RegleShortcutDefinition = {}> = IsUnion<NonNullable<TState>> extends true ? IsUnion<TRules> extends true ? Omit<RegleStatus<NonNullable<TState>, TRules, TShortcuts>, '$fields'> & {
303
+ $fields: ProcessChildrenFields<NonNullable<TState>, TRules, TShortcuts>[keyof ProcessChildrenFields<NonNullable<TState>, TRules, TShortcuts>];
304
+ } & (HasNamedKeys<NonNullable<TState>> extends true ? ProcessChildrenFields<NonNullable<TState>, TRules, TShortcuts>[keyof ProcessChildrenFields<NonNullable<TState>, TRules, TShortcuts>] : {}) : RegleStatus<JoinDiscriminatedUnions<NonNullable<TState>>, TRules extends ReglePartialRuleTree<NonNullable<JoinDiscriminatedUnions<NonNullable<TState>>>> ? TRules : EmptyObject, TShortcuts> : RegleStatus<TState, TRules, TShortcuts>;
305
305
  /** Helper type to extract state tuple item at index */
306
306
  type StateTupleItem<TState, TIndexInt extends number> = UnionToTuple<TState>[TIndexInt] extends Record<string, any> ? UnionToTuple<TState>[TIndexInt] : never;
307
307
  /** Helper type to extract NonNullable state tuple item */
@@ -403,7 +403,87 @@ type ArrayElement<T> = T extends Array<infer U> ? U : never;
403
403
  * Declares a tuple that must have at least one element
404
404
  */
405
405
  type NonEmptyTuple<T> = [T, ...T[]] | T[];
406
- interface inferRulesFn<TCustomRules extends Partial<ExtendedRulesDeclarations>> {
406
+ interface CommonComparisonOptions {
407
+ /**
408
+ * Change the behaviour of the rule to check only if the value is equal in addition to be strictly superior or inferior
409
+ * @default true
410
+ */
411
+ allowEqual?: boolean;
412
+ }
413
+ interface CommonAlphaOptions {
414
+ /**
415
+ * Allow symbols in alphabetical-like rules (like "_")
416
+ * @default true
417
+ */
418
+ allowSymbols?: boolean;
419
+ }
420
+ interface UrlOptions {
421
+ /**
422
+ * Optional regex for validating the URL protocol
423
+ */
424
+ protocol?: RegExp;
425
+ }
426
+ type DefaultValidators = {
427
+ alpha: RegleRuleWithParamsDefinition<unknown, string, [options?: CommonAlphaOptions | undefined]>;
428
+ alphaNum: RegleRuleWithParamsDefinition<unknown, string | number, [options?: CommonAlphaOptions | undefined]>;
429
+ atLeastOne: RegleRuleWithParamsDefinition<unknown, Record<string, unknown> | object, [keys?: string[] | undefined], false, boolean, false, Record<string, unknown> | object>;
430
+ between: RegleRuleWithParamsDefinition<unknown, number, [min: number, max: number, options?: CommonComparisonOptions]>;
431
+ boolean: RegleRuleDefinition<unknown, unknown, [], false, boolean, any, unknown>;
432
+ checked: RegleRuleDefinition<unknown, boolean, [], false, boolean, boolean>;
433
+ contains: RegleRuleWithParamsDefinition<unknown, string, [part: MaybeInput<string>], false, boolean>;
434
+ date: RegleRuleDefinition<unknown, unknown, [], false, boolean, MaybeInput<Date>, unknown>;
435
+ dateAfter: RegleRuleWithParamsDefinition<unknown, string | Date, [after: MaybeInput<string | Date>, options?: CommonComparisonOptions], false, true | {
436
+ $valid: false;
437
+ error: 'date-not-after';
438
+ } | {
439
+ $valid: false;
440
+ error: 'value-or-parameter-not-a-date';
441
+ }>;
442
+ dateBefore: RegleRuleWithParamsDefinition<unknown, string | Date, [before: MaybeInput<string | Date>, options?: CommonComparisonOptions], false, true | {
443
+ $valid: false;
444
+ error: 'date-not-before';
445
+ } | {
446
+ $valid: false;
447
+ error: 'value-or-parameter-not-a-date';
448
+ }>;
449
+ dateBetween: RegleRuleWithParamsDefinition<unknown, string | Date, [before: MaybeInput<string | Date>, after: MaybeInput<string | Date>, options?: CommonComparisonOptions], false, boolean>;
450
+ decimal: RegleRuleDefinition<unknown, string | number, [], false, boolean, string | number>;
451
+ email: RegleRuleDefinition<unknown, string, [], false, boolean, string>;
452
+ endsWith: RegleRuleWithParamsDefinition<unknown, string, [part: MaybeInput<string>], false, boolean>;
453
+ exactLength: RegleRuleWithParamsDefinition<unknown, string | any[] | Record<PropertyKey, any>, [count: number], false, boolean>;
454
+ exactValue: RegleRuleWithParamsDefinition<unknown, number, [count: number], false, boolean>;
455
+ file: RegleRuleDefinition<unknown, unknown, [], false, boolean, MaybeInput<File>, unknown>;
456
+ fileType: RegleRuleWithParamsDefinition<unknown, File, [accept: readonly string[]], false, boolean>;
457
+ hexadecimal: RegleRuleDefinition<unknown, string, [], false, boolean, string>;
458
+ integer: RegleRuleDefinition<unknown, string | number, [], false, boolean, string | number>;
459
+ ipv4Address: RegleRuleDefinition<unknown, string, [], false, boolean, string>;
460
+ literal: RegleRuleDefinition<unknown, string | number, [literal: string | number], false, boolean, MaybeInput<string | number>, string | number, true>;
461
+ macAddress: RegleRuleWithParamsDefinition<unknown, string, [separator?: string | undefined], false, boolean>;
462
+ maxLength: RegleRuleWithParamsDefinition<unknown, string | any[] | Record<PropertyKey, any>, [max: number, options?: CommonComparisonOptions], false, boolean>;
463
+ maxFileSize: RegleRuleWithParamsDefinition<unknown, File, [maxSize: number], false, true | {
464
+ $valid: boolean;
465
+ fileSize: number;
466
+ }, MaybeInput<File>, File>;
467
+ maxValue: RegleRuleWithParamsDefinition<unknown, number | string, [max: number | string, options?: CommonComparisonOptions], false, boolean>;
468
+ minFileSize: RegleRuleWithParamsDefinition<unknown, File, [minSize: number], false, true | {
469
+ $valid: boolean;
470
+ fileSize: number;
471
+ }, MaybeInput<File>, File>;
472
+ minLength: RegleRuleWithParamsDefinition<unknown, string | any[] | Record<PropertyKey, any>, [min: number, options?: CommonComparisonOptions], false, boolean, string | any[] | Record<PropertyKey, any>>;
473
+ minValue: RegleRuleWithParamsDefinition<unknown, number | string, [min: number | string, options?: CommonComparisonOptions], false, boolean>;
474
+ nativeEnum: RegleRuleDefinition<unknown, string | number, [enumLike: EnumLike], false, boolean, string | number>;
475
+ number: RegleRuleDefinition<unknown, unknown, [], false, boolean, any, unknown>;
476
+ numeric: RegleRuleDefinition<unknown, string | number, [], false, boolean, string | number>;
477
+ oneOf: RegleRuleDefinition<unknown, string | number, [options: readonly [string | number, ...(string | number)[]]], false, boolean, MaybeInput<string | number>, string | number>;
478
+ regex: RegleRuleWithParamsDefinition<unknown, string | number, [regexp: RegExp | readonly RegExp[]], false, boolean>;
479
+ required: RegleRuleDefinition<unknown, unknown, [], false, boolean, unknown, unknown, true>;
480
+ sameAs: RegleRuleWithParamsDefinition<unknown, unknown, [target: any, otherName?: string], false, boolean>;
481
+ string: RegleRuleDefinition<unknown, unknown, [], false, boolean, any, unknown>;
482
+ type: RegleRuleDefinition<unknown, unknown, [], false, boolean, unknown, unknown>;
483
+ startsWith: RegleRuleWithParamsDefinition<unknown, string, [part: MaybeInput<string>], false, boolean>;
484
+ url: RegleRuleWithParamsDefinition<unknown, string, [options?: UrlOptions | undefined], false, boolean, unknown, string>;
485
+ };
486
+ interface inferRulesFn<TCustomRules extends Partial<ExtendedRulesDeclarationsOverrides>> {
407
487
  <TState extends MaybeRef<Record<string, any> | MaybeInput<PrimitiveTypes>>, TRules extends ReglePartialRuleTree<Unwrap<TState extends Record<string, any> ? TState : {}>, Partial<DefaultValidatorsTree> & TCustomRules>, TDecl extends RegleRuleDecl<NonNullable<TState>, Partial<DefaultValidatorsTree> & TCustomRules>>(state: Maybe<TState> | DeepReactiveState<TState>, rulesFactory: Unwrap<TState> extends MaybeInput<PrimitiveTypes> ? TDecl : Unwrap<TState> extends Record<string, any> ? TRules : {}): NonNullable<Unwrap<TState>> extends PrimitiveTypes ? TDecl : TRules;
408
488
  }
409
489
  /**
@@ -433,8 +513,8 @@ interface inferRulesFn<TCustomRules extends Partial<ExtendedRulesDeclarations>>
433
513
  *
434
514
  * @see {@link https://reglejs.dev/core-concepts/#dynamic-rules-object Documentation}
435
515
  */
436
- declare const inferRules: inferRulesFn<Partial<ExtendedRulesDeclarations>>;
437
- interface GlobalConfigOptions<TCustomRules extends Partial<ExtendedRulesDeclarations> = CustomRulesDeclarationTree, TShortcuts extends RegleShortcutDefinition<any> = never> {
516
+ declare const inferRules: inferRulesFn<Partial<ExtendedRulesDeclarationsOverrides>>;
517
+ interface GlobalConfigOptions<TCustomRules extends Partial<ExtendedRulesDeclarationsOverrides> = EmptyObject, TShortcuts extends RegleShortcutDefinition<any> = never> {
438
518
  /**
439
519
  * Declare custom rules to be used globally or override the default rules messages.
440
520
  *
@@ -526,14 +606,14 @@ interface GlobalConfigOptions<TCustomRules extends Partial<ExtendedRulesDeclarat
526
606
  *
527
607
  * @see {@link https://reglejs.dev/advanced-usage/global-config Documentation}
528
608
  */
529
- declare function defineRegleConfig<TShortcuts extends RegleShortcutDefinition<TCustomRules>, TCustomRules extends Partial<ExtendedRulesDeclarations>>({
609
+ declare function defineRegleConfig<TShortcuts extends RegleShortcutDefinition<TCustomRules>, TCustomRules extends Partial<ExtendedRulesDeclarationsOverrides>>({
530
610
  rules,
531
611
  modifiers,
532
612
  shortcuts,
533
613
  overrides
534
614
  }: GlobalConfigOptions<TCustomRules, TShortcuts>): {
535
- useRegle: useRegleFn<TCustomRules, TShortcuts>;
536
- inferRules: inferRulesFn<TCustomRules>;
615
+ useRegle: useRegleFn<Omit<TCustomRules, keyof DefaultValidators>, TShortcuts>;
616
+ inferRules: inferRulesFn<Omit<TCustomRules, keyof DefaultValidators>>;
537
617
  useRules: useRulesFn<TCustomRules, TShortcuts>;
538
618
  };
539
619
  /**
@@ -563,7 +643,7 @@ declare function defineRegleConfig<TShortcuts extends RegleShortcutDefinition<TC
563
643
  *
564
644
  * @see {@link https://reglejs.dev/advanced-usage/global-config Documentation}
565
645
  */
566
- declare function extendRegleConfig<TRootCustomRules extends Partial<ExtendedRulesDeclarations>, TRootShortcuts extends RegleShortcutDefinition<{}>, TShortcuts extends RegleShortcutDefinition<Merge<TRootCustomRules, TCustomRules>>, TCustomRules extends Partial<ExtendedRulesDeclarations>>(regle: useRegleFn<TRootCustomRules, TRootShortcuts>, {
646
+ declare function extendRegleConfig<TRootCustomRules extends Partial<ExtendedRulesDeclarationsOverrides>, TRootShortcuts extends RegleShortcutDefinition<{}>, TShortcuts extends RegleShortcutDefinition<Merge<TRootCustomRules, TCustomRules>>, TCustomRules extends Partial<ExtendedRulesDeclarationsOverrides>>(regle: useRegleFn<TRootCustomRules, TRootShortcuts>, {
567
647
  rules,
568
648
  modifiers,
569
649
  shortcuts,
@@ -572,9 +652,31 @@ declare function extendRegleConfig<TRootCustomRules extends Partial<ExtendedRule
572
652
  useRegle: useRegleFn<Merge<TRootCustomRules, TCustomRules>, TRootShortcuts & TShortcuts>;
573
653
  inferRules: inferRulesFn<Merge<TRootCustomRules, TCustomRules>>;
574
654
  };
575
- type useRegleFnOptions<TState extends Record<string, any> | MaybeInput<PrimitiveTypes>, TRules extends ReglePartialRuleTree<NonNullable<JoinDiscriminatedUnions<TState>>, Partial<ExtendedRulesDeclarations>>, TAdditionalOptions extends Record<string, any>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>> = TState extends Record<string, any> ? Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<JoinDiscriminatedUnions<TState>, TRules, TValidationGroups> & TAdditionalOptions : Partial<DeepMaybeRef<RegleBehaviourOptions>> & TAdditionalOptions;
576
- interface useRegleFn<TCustomRules extends Partial<ExtendedRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<any> = never, TAdditionalReturnProperties extends Record<string, any> = {}, TAdditionalOptions extends Record<string, any> = {}> {
577
- <TState extends MaybeRef<Record<string, any> | MaybeInput<PrimitiveTypes>>, TRules extends ReglePartialRuleTree<JoinDiscriminatedUnions<Unwrap<TState>>, Partial<ExtendedRulesDeclarations> & Partial<TCustomRules>>, TDecl extends RegleRuleDecl<NonNullable<Unwrap<TState>>, Partial<ExtendedRulesDeclarations> & Partial<TCustomRules>>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>>(...params: [state: Maybe<TState> | DeepReactiveState<TState>, rulesFactory: Unwrap<TState> extends MaybeInput<PrimitiveTypes> ? MaybeRefOrGetter<TDecl> : Unwrap<TState> extends Record<string, any> ? MaybeComputedOrGetter<TRules> : {}, ...(HaveAnyRequiredProps<useRegleFnOptions<Unwrap<TState>, TRules, TAdditionalOptions, TValidationGroups>> extends true ? [options: useRegleFnOptions<Unwrap<NoInferLegacy<TState>>, TRules, TAdditionalOptions, TValidationGroups>] : [options?: useRegleFnOptions<Unwrap<NoInferLegacy<TState>>, TRules, TAdditionalOptions, TValidationGroups>])]): NonNullable<Unwrap<TState>> extends PrimitiveTypes ? RegleSingleField<NonNullable<Unwrap<TState>>, TDecl, TShortcuts, TAdditionalReturnProperties> : Regle<Unwrap<TState> extends Record<string, any> ? Unwrap<TState> : {}, UnwrapSimple<TRules> extends Record<string, any> ? UnwrapSimple<TRules> : {}, TValidationGroups, TShortcuts, TAdditionalReturnProperties>;
655
+ /**
656
+ * Define a global Regle options to customize the validation behavior across your application.
657
+ * It's meant to be used with the Regle Vue plugin.
658
+ *
659
+ * @param options - Configuration options
660
+ * @returns The configuration options
661
+ *
662
+ * @example
663
+ * ```ts
664
+ * import { defineRegleOptions } from '@regle/core';
665
+ *
666
+ * const regleOptions = defineRegleOptions({
667
+ * modifiers: {
668
+ * lazy: true,
669
+ * rewardEarly: true
670
+ * }
671
+ * });
672
+ * ```
673
+ *
674
+ * @see {@link https://reglejs.dev/advanced-usage/global-config Documentation}
675
+ */
676
+ declare function defineRegleOptions<T extends GlobalConfigOptions<Partial<ExtendedRulesDeclarationsOverrides>, RegleShortcutDefinition<any>>>(options: T): T;
677
+ type useRegleFnOptions<TState extends Record<string, any> | MaybeInput<PrimitiveTypes>, TRules extends ReglePartialRuleTree<NonNullable<JoinDiscriminatedUnions<TState>>, CustomRulesDeclarationTree>, TAdditionalOptions extends Record<string, any>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>> = TState extends Record<string, any> ? Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<JoinDiscriminatedUnions<TState>, TRules, TValidationGroups> & TAdditionalOptions : Partial<DeepMaybeRef<RegleBehaviourOptions>> & TAdditionalOptions;
678
+ interface useRegleFn<TCustomRules extends Partial<ExtendedRulesDeclarationsOverrides>, TShortcuts extends RegleShortcutDefinition<any> = never, TAdditionalReturnProperties extends Record<string, any> = {}, TAdditionalOptions extends Record<string, any> = {}> {
679
+ <TState extends MaybeRef<Record<string, any> | MaybeInput<PrimitiveTypes>>, TRules extends ReglePartialRuleTree<JoinDiscriminatedUnions<Unwrap<TState>>, Partial<ExtendedRulesDeclarations & Omit<TCustomRules, keyof DefaultValidatorsTree>>>, TDecl extends RegleRuleDecl<NonNullable<Unwrap<TState>>, Partial<ExtendedRulesDeclarations & TCustomRules>>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>>(...params: [state: Maybe<TState> | DeepReactiveState<TState>, rulesFactory: Unwrap<TState> extends MaybeInput<PrimitiveTypes> ? MaybeRefOrGetter<TDecl> : Unwrap<TState> extends Record<string, any> ? MaybeComputedOrGetter<TRules> : {}, ...(HaveAnyRequiredProps<useRegleFnOptions<Unwrap<TState>, TRules, TAdditionalOptions, TValidationGroups>> extends true ? [options: useRegleFnOptions<Unwrap<NoInferLegacy<TState>>, TRules, TAdditionalOptions, TValidationGroups>] : [options?: useRegleFnOptions<Unwrap<NoInferLegacy<TState>>, TRules, TAdditionalOptions, TValidationGroups>])]): NonNullable<Unwrap<TState>> extends PrimitiveTypes ? RegleSingleField<NonNullable<Unwrap<TState>>, TDecl, TShortcuts, TAdditionalReturnProperties> : Regle<Unwrap<TState> extends Record<string, any> ? Unwrap<TState> : {}, UnwrapSimple<TRules> extends Record<string, any> ? UnwrapSimple<TRules> : {}, TValidationGroups, TShortcuts, TAdditionalReturnProperties>;
578
680
  __config?: GlobalConfigOptions<TCustomRules, TShortcuts>;
579
681
  }
580
682
  /**
@@ -610,7 +712,7 @@ interface useRegleFn<TCustomRules extends Partial<ExtendedRulesDeclarations>, TS
610
712
  *
611
713
  * @see {@link https://reglejs.dev/core-concepts/ Documentation}
612
714
  */
613
- declare const useRegle: useRegleFn<Partial<ExtendedRulesDeclarations>, RegleShortcutDefinition<any>, {}, {}>;
715
+ declare const useRegle: useRegleFn<Partial<ExtendedRulesDeclarationsOverrides>, RegleShortcutDefinition<any>, {}, {}>;
614
716
  /**
615
717
  * @internal
616
718
  * This is the internal function that creates the root storage for the Regle instance.
@@ -757,7 +859,7 @@ declare function getErrors<TRegle extends SuperCompatibleRegleRoot | SuperCompat
757
859
  */
758
860
  declare function getIssues<TRegle extends SuperCompatibleRegleRoot | SuperCompatibleRegleStatus, TPath extends Paths<TRegle['$issues']>>(r$: MaybeRef<TRegle>, path: TPath | (string & {})): IsStringLiteral<TPath> extends true ? Get<TRegle['$issues'], TPath & string> : RegleFieldIssue[] | undefined;
759
861
  type useRulesFnOptions<TRules extends RegleUnknownRulesTree | RegleRuleDecl, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TState = InferInput<TRules>> = Partial<DeepMaybeRef<RegleBehaviourOptions>> & LocalRegleBehaviourOptions<JoinDiscriminatedUnions<TState extends Record<string, any> ? Unwrap<TState> : {}>, TState extends Record<string, any> ? (TRules extends Record<string, any> ? TRules : {}) : {}, TValidationGroups>;
760
- interface useRulesFn<TCustomRules extends Partial<ExtendedRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<any> = never> {
862
+ interface useRulesFn<TCustomRules extends Partial<ExtendedRulesDeclarationsOverrides>, TShortcuts extends RegleShortcutDefinition<any> = never> {
761
863
  <TRules extends RegleUnknownRulesTree | RegleRuleDecl, TDecl extends RegleRuleDecl<NonNullable<TState>, Partial<ExtendedRulesDeclarations> & TCustomRules>, TValidationGroups extends Record<string, RegleValidationGroupEntry[]>, TState extends Record<string, any> = InferInput<TRules>>(rulesFactory: TState extends Record<string, any> ? MaybeRef<TRules> | ((...args: any[]) => TRules) : {}, options?: useRulesFnOptions<TRules, TValidationGroups, TState>): NonNullable<TState> extends PrimitiveTypes ? Raw<RegleFieldStatus<NonNullable<TState>, TDecl, TShortcuts>> & StandardSchemaV1<TState> : Raw<RegleRoot<TState extends Record<string, any> ? Unwrap<TState> : {}, TRules extends Record<string, any> ? TRules : {}, TValidationGroups, TShortcuts>> & StandardSchemaV1<TState>;
762
864
  __config?: GlobalConfigOptions<TCustomRules, TShortcuts>;
763
865
  }
@@ -791,7 +893,7 @@ interface useRulesFn<TCustomRules extends Partial<ExtendedRulesDeclarations>, TS
791
893
  *
792
894
  * @see {@link https://reglejs.dev/common-usage/standard-schema#userules Documentation}
793
895
  */
794
- declare const useRules: useRulesFn<Partial<ExtendedRulesDeclarations>, RegleShortcutDefinition<any>>;
896
+ declare const useRules: useRulesFn<Partial<ExtendedRulesDeclarationsOverrides>, RegleShortcutDefinition<any>>;
795
897
  /**
796
898
  * Marks a value as static and treats the constructor as a regular raw Field.
797
899
  * @param value - The value to mark as static.
@@ -935,8 +1037,8 @@ type IsLiteral<T> = string extends T ? false : true;
935
1037
  /**
936
1038
  * Returned typed of rules created with `createRule`
937
1039
  * */
938
- interface RegleRuleDefinition<TType extends string | unknown = unknown, TValue extends unknown = unknown, TParams extends any[] = [], TAsync extends boolean = boolean, TMetaData extends RegleRuleMetadataDefinition = RegleRuleMetadataDefinition, _TInput = unknown, TFilteredValue extends any = (TValue extends Date & File & (infer M) ? M : TValue), TNonEmpty extends boolean = boolean> extends RegleInternalRuleDefs<TFilteredValue, TParams, TAsync, TMetaData> {
939
- validator: RegleRuleDefinitionProcessor<TFilteredValue, TParams, TAsync extends false ? TMetaData : Promise<TMetaData>>;
1040
+ interface RegleRuleDefinition<TType extends string | unknown = unknown, TValue extends unknown = unknown, TParams extends any[] = [], TAsync extends boolean = boolean, TMetaData extends RegleRuleMetadataDefinition = RegleRuleMetadataDefinition, _TInput = unknown, TFilteredValue extends any = (TValue extends Date & File & (infer M) ? M : TValue), TNonEmpty extends boolean = boolean> extends RegleInternalRuleDefs<TFilteredValue, TParams, TAsync, TMetaData>, RegleRuleDefinitionLight<TParams, TAsync, TMetaData> {
1041
+ validator: RegleRuleDefinitionProcessor<TFilteredValue, [...TParams, ...unknown[]], TAsync extends false ? TMetaData : Promise<TMetaData>>;
940
1042
  message: (metadata: PossibleRegleRuleMetadataConsumer<TFilteredValue>) => string | string[];
941
1043
  active: (metadata: PossibleRegleRuleMetadataConsumer<TFilteredValue>) => boolean;
942
1044
  tooltip: (metadata: PossibleRegleRuleMetadataConsumer<TFilteredValue>) => string | string[];
@@ -945,11 +1047,17 @@ interface RegleRuleDefinition<TType extends string | unknown = unknown, TValue e
945
1047
  exec: (value: Maybe<TFilteredValue>) => TAsync extends false ? TMetaData : Promise<TMetaData>;
946
1048
  required: TNonEmpty;
947
1049
  }
1050
+ type RegleRuleDefinitionLight<TParams extends [...unknown[]] = [], TAsync extends boolean = boolean, TMetaData extends RegleRuleMetadataDefinition = RegleRuleMetadataDefinition> = {
1051
+ value: unknown;
1052
+ params: [...TParams];
1053
+ async: TAsync;
1054
+ metadata: TMetaData;
1055
+ };
948
1056
  /**
949
1057
  * Rules with params created with `createRules` are callable while being customizable
950
1058
  */
951
- type RegleRuleWithParamsDefinition<TType extends string | unknown = unknown, TValue extends unknown = unknown, TParams extends any[] = never, TAsync extends boolean = false, TMetadata extends RegleRuleMetadataDefinition = boolean, TInput = unknown, TFilteredValue extends any = (TValue extends Date & File & (infer M) ? M : TValue)> = RegleRuleCore<TType, TFilteredValue, TParams, TAsync, TMetadata> & RegleInternalRuleDefs<TFilteredValue, TParams, TAsync, TMetadata> & {
952
- (...params: RegleUniversalParams<TParams>): RegleRuleDefinition<TType, TFilteredValue, TParams, TAsync, TMetadata, TInput>;
1059
+ type RegleRuleWithParamsDefinition<TType extends string | unknown = unknown, TValue extends unknown = unknown, TParams extends any[] = never, TAsync extends boolean = false, TMetadata extends RegleRuleMetadataDefinition = boolean, TInput = unknown, TFilteredValue extends any = (TValue extends Date & File & (infer M) ? M : TValue), TNonEmpty extends boolean = false> = RegleRuleCore<TType, TFilteredValue, TParams, TAsync, TMetadata, TNonEmpty> & RegleInternalRuleDefs<TFilteredValue, TParams, TAsync, TMetadata> & RegleRuleDefinitionLight<TParams, TAsync, TMetadata> & {
1060
+ (...params: RegleUniversalParams<TParams>): RegleRuleDefinition<TType, TFilteredValue, TParams, TAsync, TMetadata, TInput, TFilteredValue, TNonEmpty>;
953
1061
  } & (TParams extends [param?: any, ...any[]] ? {
954
1062
  exec: (value: Maybe<TFilteredValue>) => TAsync extends false ? TMetadata : Promise<TMetadata>;
955
1063
  } : {});
@@ -1002,7 +1110,7 @@ type RegleRuleRawInput<TValue extends any = any, TParams extends [...any[]] = [.
1002
1110
  * For a rule with params it will return a function
1003
1111
  * Otherwise it will return the rule definition
1004
1112
  */
1005
- type InferRegleRule<TType extends string | unknown, TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = false, TMetaData extends RegleRuleMetadataDefinition = boolean, TNonEmpty extends boolean = false> = [TParams] extends [[]] ? RegleRuleDefinition<TType, TValue, TParams, TAsync, TMetaData, TValue, TValue, TNonEmpty> : RegleRuleWithParamsDefinition<TType, TValue, TParams, TAsync, TMetaData, TNonEmpty>;
1113
+ type InferRegleRule<TType extends string | unknown, TValue extends any = any, TParams extends any[] = [], TAsync extends boolean = false, TMetaData extends RegleRuleMetadataDefinition = boolean, TNonEmpty extends boolean = false> = [TParams] extends [[]] ? RegleRuleDefinition<TType, TValue, TParams, TAsync, TMetaData, TValue, TValue, TNonEmpty> : RegleRuleWithParamsDefinition<TType, TValue, TParams, TAsync, TMetaData, TValue, TValue, TNonEmpty>;
1006
1114
  type RegleRuleDefinitionProcessor<TValue extends any = any, TParams extends any[] = [], TReturn = any> = (value: Maybe<TValue>, ...params: TParams) => TReturn;
1007
1115
  type RegleRuleDefinitionWithMetadataProcessor<TValue extends any, TMetadata extends RegleRuleMetadataConsumer<TValue, any[]>, TReturn = any> = ((metadata: TMetadata) => TReturn) | TReturn;
1008
1116
  type RegleCollectionRuleDefinition<TValue = any[], TCustomRules extends Partial<ExtendedRulesDeclarations> = Partial<ExtendedRulesDeclarations>> = (RegleRuleDecl<NonNullable<TValue>, TCustomRules, CollectionRegleBehaviourOptions> & {
@@ -1028,93 +1136,44 @@ interface RegleRuleInit<TType extends string | unknown = unknown, TValue extends
1028
1136
  * @argument
1029
1137
  * Rule core
1030
1138
  */
1031
- interface RegleRuleCore<TType extends string | unknown, TValue extends any, TParams extends any[] = [], TAsync extends boolean = false, TMetadata extends RegleRuleMetadataDefinition = boolean> {
1139
+ interface RegleRuleCore<TType extends string | unknown, TValue extends any, TParams extends any[] = [], TAsync extends boolean = false, TMetadata extends RegleRuleMetadataDefinition = boolean, TNonEmpty extends boolean = false> {
1032
1140
  validator: (value: Maybe<TValue>, ...args: TParams) => TAsync extends false ? TMetadata : Promise<TMetadata>;
1033
1141
  message: RegleInitPropertyGetter<TValue, string | string[], TParams, TMetadata>;
1034
- active?: RegleInitPropertyGetter<TValue, string | string[], TParams, TMetadata>;
1142
+ active?: RegleInitPropertyGetter<TValue, boolean, TParams, TMetadata>;
1035
1143
  tooltip?: RegleInitPropertyGetter<TValue, string | string[], TParams, TMetadata>;
1036
1144
  type?: TType;
1037
1145
  async?: boolean;
1146
+ required?: TNonEmpty;
1038
1147
  }
1039
1148
  type RegleRuleTypeReturn<TValue, TParams extends [...any[]]> = {
1040
1149
  value: TValue;
1041
1150
  params: [...TParams];
1042
1151
  };
1043
- interface CommonComparisonOptions {
1044
- /**
1045
- * Change the behaviour of the rule to check only if the value is equal in addition to be strictly superior or inferior
1046
- * @default true
1047
- */
1048
- allowEqual?: boolean;
1049
- }
1050
- interface CommonAlphaOptions {
1051
- /**
1052
- * Allow symbols in alphabetical-like rules (like "_")
1053
- * @default true
1054
- */
1055
- allowSymbols?: boolean;
1056
- }
1057
- type DefaultValidators = {
1058
- alpha: RegleRuleWithParamsDefinition<unknown, string, [options?: CommonAlphaOptions | undefined]>;
1059
- alphaNum: RegleRuleWithParamsDefinition<unknown, string | number, [options?: CommonAlphaOptions | undefined]>;
1060
- atLeastOne: RegleRuleWithParamsDefinition<unknown, Record<string, unknown> | object, [keys?: string[] | undefined], false, boolean, false, Record<string, unknown> | object>;
1061
- between: RegleRuleWithParamsDefinition<unknown, number, [min: Maybe<number>, max: Maybe<number>]>;
1062
- boolean: RegleRuleDefinition<unknown, unknown, [], false, boolean, any, unknown>;
1063
- checked: RegleRuleDefinition<unknown, boolean, [], false, boolean, boolean>;
1064
- contains: RegleRuleWithParamsDefinition<unknown, string, [part: Maybe<string>], false, boolean>;
1065
- date: RegleRuleDefinition<unknown, unknown, [], false, boolean, MaybeInput<Date>, unknown>;
1066
- dateAfter: RegleRuleWithParamsDefinition<unknown, string | Date, [after: Maybe<string | Date>, options?: CommonComparisonOptions], false, true | {
1067
- $valid: false;
1068
- error: 'date-not-after';
1069
- } | {
1070
- $valid: false;
1071
- error: 'value-or-parameter-not-a-date';
1072
- }>;
1073
- dateBefore: RegleRuleWithParamsDefinition<unknown, string | Date, [before: Maybe<string | Date>, options?: CommonComparisonOptions], false, true | {
1074
- $valid: false;
1075
- error: 'date-not-before';
1076
- } | {
1077
- $valid: false;
1078
- error: 'value-or-parameter-not-a-date';
1079
- }>;
1080
- dateBetween: RegleRuleWithParamsDefinition<unknown, string | Date, [before: Maybe<string | Date>, after: Maybe<string | Date>, options?: CommonComparisonOptions], false, boolean>;
1081
- decimal: RegleRuleDefinition<unknown, string | number, [], false, boolean, string | number>;
1082
- email: RegleRuleDefinition<unknown, string, [], false, boolean, string>;
1083
- endsWith: RegleRuleWithParamsDefinition<unknown, string, [part: Maybe<string>], false, boolean>;
1084
- exactLength: RegleRuleWithParamsDefinition<unknown, string | any[] | Record<PropertyKey, any>, [count: number], false, boolean>;
1085
- exactValue: RegleRuleWithParamsDefinition<unknown, number, [count: number], false, boolean>;
1086
- file: RegleRuleDefinition<unknown, unknown, [], false, boolean, MaybeInput<File>, unknown>;
1087
- fileType: RegleRuleWithParamsDefinition<unknown, unknown, [accept: string[]], false, boolean>;
1088
- hexadecimal: RegleRuleDefinition<unknown, string, [], false, boolean, string>;
1089
- integer: RegleRuleDefinition<unknown, string | number, [], false, boolean, string | number>;
1090
- ipv4Address: RegleRuleDefinition<unknown, string, [], false, boolean, string>;
1091
- literal: RegleRuleDefinition<unknown, string | number, [literal: string | number], false, boolean, string | number, string | number, true>;
1092
- macAddress: RegleRuleWithParamsDefinition<unknown, string, [separator?: string | undefined], false, boolean>;
1093
- maxLength: RegleRuleWithParamsDefinition<unknown, string | any[] | Record<PropertyKey, any>, [count: number, options?: CommonComparisonOptions], false, boolean>;
1094
- maxFileSize: RegleRuleWithParamsDefinition<unknown, unknown, [maxSize: number], false, boolean, MaybeInput<File>, unknown>;
1095
- maxValue: RegleRuleWithParamsDefinition<unknown, number, [count: number, options?: CommonComparisonOptions], false, boolean>;
1096
- minFileSize: RegleRuleWithParamsDefinition<unknown, unknown, [minSize: number], false, boolean, MaybeInput<File>, unknown>;
1097
- minLength: RegleRuleWithParamsDefinition<unknown, string | any[] | Record<PropertyKey, any>, [count: number, options?: CommonComparisonOptions], false, boolean>;
1098
- minValue: RegleRuleWithParamsDefinition<unknown, number, [count: number, options?: CommonComparisonOptions], false, boolean>;
1099
- nativeEnum: RegleRuleDefinition<unknown, string | number, [enumLike: EnumLike], false, boolean, string | number>;
1100
- number: RegleRuleDefinition<unknown, unknown, [], false, boolean, any, unknown>;
1101
- numeric: RegleRuleDefinition<unknown, string | number, [], false, boolean, string | number>;
1102
- oneOf: RegleRuleDefinition<unknown, string | number, [options: (string | number)[]], false, boolean, string | number>;
1103
- regex: RegleRuleWithParamsDefinition<unknown, string, [regexp: RegExp], false, boolean>;
1104
- required: RegleRuleDefinition<unknown, unknown, [], false, boolean, unknown, unknown, true>;
1105
- sameAs: RegleRuleWithParamsDefinition<unknown, unknown, [target: unknown, otherName?: string], false, boolean>;
1106
- string: RegleRuleDefinition<unknown, unknown, [], false, boolean, any, unknown>;
1107
- type: RegleRuleDefinition<unknown, unknown, [], false, boolean, unknown, unknown>;
1108
- startsWith: RegleRuleWithParamsDefinition<unknown, string, [part: Maybe<string>], false, boolean>;
1109
- url: RegleRuleDefinition<unknown, string, [], false, boolean, string>;
1110
- };
1111
1152
  type CustomRulesDeclarationTree = {
1112
1153
  [x: string]: RegleRuleRawInput<any, any[], boolean, any> | undefined;
1113
1154
  };
1114
- type DefaultValidatorsTree = { [K in keyof DefaultValidators]: RegleRuleRawInput<any, any[], boolean, any> | undefined };
1115
- type ExtendedRulesDeclarations = CustomRulesDeclarationTree & DefaultValidatorsTree;
1155
+ type DefaultValidatorsTree = { [K in keyof DefaultValidators]: DefaultValidators[K] extends ((...args: any[]) => infer U) ? U : DefaultValidators[K] };
1156
+ type DefaultValidatorsTreeOverrides = { [K in keyof DefaultValidators]: DefaultValidators[K] | ((...args: any[]) => DefaultValidators[K]) };
1157
+ /**
1158
+ * Extend this interface to declare your custom rules
1159
+ */
1160
+ interface CustomRules {}
1161
+ type ExtendedRulesDeclarations = CustomRulesDeclarationTree & DefaultValidatorsTree & CustomRules;
1162
+ type ExtendedRulesDeclarationsOverrides = CustomRulesDeclarationTree & DefaultValidatorsTreeOverrides & CustomRules;
1116
1163
  /** @deprecated Use {@link ExtendedRulesDeclarations} instead */
1117
1164
  type AllRulesDeclarations = ExtendedRulesDeclarations;
1165
+ /**
1166
+ * Extend this interface to declare your custom field properties
1167
+ */
1168
+ interface CustomFieldProperties {}
1169
+ /**
1170
+ * Extend this interface to declare your custom nested properties
1171
+ */
1172
+ interface CustomNestedProperties {}
1173
+ /**
1174
+ * Extend this interface to declare your custom collection properties
1175
+ */
1176
+ interface CustomCollectionProperties {}
1118
1177
  /**
1119
1178
  * @public
1120
1179
  */
@@ -1128,7 +1187,7 @@ type ProcessNestedFields<TState extends Record<string, any> | undefined, TRules
1128
1187
  /**
1129
1188
  * @public
1130
1189
  */
1131
- type RegleStatus<TState extends object | Record<string, any> | undefined = Record<string, any>, TRules extends ReglePartialRuleTree<NonNullable<TState>> = Record<string, any>, TShortcuts extends RegleShortcutDefinition = {}> = RegleCommonStatus<TState, TRules> & {
1190
+ type RegleStatus<TState extends object | Record<string, any> | undefined = Record<string, any>, TRules extends ReglePartialRuleTree<NonNullable<TState>, Partial<ExtendedRulesDeclarations>> = Record<string, any>, TShortcuts extends RegleShortcutDefinition = {}> = RegleCommonStatus<TState, TRules> & {
1132
1191
  /** Represents all the children of your object. You can access any nested child at any depth to get the relevant data you need for your form. */readonly $fields: ProcessNestedFields<TState, TRules, TShortcuts, true>;
1133
1192
  /**
1134
1193
  * Collection of all the issues, collected for all children properties and nested forms.
@@ -1145,7 +1204,7 @@ type RegleStatus<TState extends object | Record<string, any> | undefined = Recor
1145
1204
  readonly $silentErrors: RegleErrorTree<TState>; /** 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). */
1146
1205
  $extractDirtyFields: (filterNullishValues?: boolean) => DeepPartial<TState>; /** 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). */
1147
1206
  $validate: (forceValues?: JoinDiscriminatedUnions<TState> extends EmptyObject ? any : HasNamedKeys<JoinDiscriminatedUnions<TState>> extends true ? IsUnknown<JoinDiscriminatedUnions<TState>> extends true ? any : JoinDiscriminatedUnions<TState> : any) => Promise<RegleResult<JoinDiscriminatedUnions<TState>, TRules>>;
1148
- } & ProcessNestedFields<TState, TRules, TShortcuts> & ([TShortcuts['nested']] extends [never] ? {} : { [K in keyof TShortcuts['nested']]: ReturnType<NonNullable<TShortcuts['nested']>[K]> }) & (TRules['$self'] extends RegleRuleDecl ? {
1207
+ } & ProcessNestedFields<TState, TRules, TShortcuts> & CustomNestedProperties & ([TShortcuts['nested']] extends [never] ? {} : { [K in keyof TShortcuts['nested']]: ReturnType<NonNullable<TShortcuts['nested']>[K]> }) & (TRules['$self'] extends RegleRuleDecl ? {
1149
1208
  /** Represents the status of the parent object. Status only concern the object itself and not its children */readonly $self: RegleFieldStatus<NonNullable<TRules['$self']>, NonNullable<TRules['$self']>, TShortcuts>;
1150
1209
  } : {});
1151
1210
  /**
@@ -1153,6 +1212,7 @@ type RegleStatus<TState extends object | Record<string, any> | undefined = Recor
1153
1212
  * @reference {@link RegleStatus}
1154
1213
  */
1155
1214
  interface $InternalRegleStatus extends $InternalRegleCommonStatus {
1215
+ readonly $externalErrors?: $InternalRegleErrorTree;
1156
1216
  $fields: {
1157
1217
  [x: string]: $InternalRegleStatusType;
1158
1218
  };
@@ -1208,7 +1268,7 @@ type RegleFieldStatus<TState extends any = any, TRules extends RegleFormProperty
1208
1268
  $extractDirtyFields: (filterNullishValues?: boolean) => MaybeOutput<TState>; /** 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). */
1209
1269
  $validate: (forceValues?: IsUnknown<TState> extends true ? any : TState) => Promise<RegleFieldResult<TState, TRules>>; /** This is reactive tree containing all the declared rules of your field. To know more about the rule properties check the rules properties section */
1210
1270
  readonly $rules: ComputeFieldRules<TState, TRules>;
1211
- } & ([TShortcuts['fields']] extends [never] ? {} : { [K in keyof TShortcuts['fields']]: ReturnType<NonNullable<TShortcuts['fields']>[K]> });
1271
+ } & CustomFieldProperties & ([TShortcuts['fields']] extends [never] ? {} : { [K in keyof TShortcuts['fields']]: ReturnType<NonNullable<TShortcuts['fields']>[K]> });
1212
1272
  /**
1213
1273
  * @internal
1214
1274
  * @reference {@link RegleFieldStatus}
@@ -1430,12 +1490,12 @@ type RegleCollectionStatus<TState extends any[] = any[], TRules extends ReglePar
1430
1490
  readonly $silentErrors: RegleCollectionErrors<TState>; /** 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). */
1431
1491
  $extractDirtyFields: (filterNullishValues?: boolean) => DeepPartial<TState>; /** 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). */
1432
1492
  $validate: (value?: JoinDiscriminatedUnions<TState>) => Promise<RegleCollectionResult<TState, JoinDiscriminatedUnions<TRules>>>;
1433
- } & ([TShortcuts['collections']] extends [never] ? {} : { [K in keyof TShortcuts['collections']]: ReturnType<NonNullable<TShortcuts['collections']>[K]> });
1493
+ } & CustomCollectionProperties & ([TShortcuts['collections']] extends [never] ? {} : { [K in keyof TShortcuts['collections']]: ReturnType<NonNullable<TShortcuts['collections']>[K]> });
1434
1494
  /**
1435
1495
  * @internal
1436
1496
  * @reference {@link RegleCollectionStatus}
1437
1497
  */
1438
- interface $InternalRegleCollectionStatus extends Omit<$InternalRegleStatus, '$fields' | '$issues' | '$errors' | '$silentErrors' | '~modifiers'> {
1498
+ interface $InternalRegleCollectionStatus extends Omit<$InternalRegleStatus, '$fields' | '$issues' | '$errors' | '$silentErrors' | '~modifiers' | '$externalErrors'> {
1439
1499
  readonly $self: $InternalRegleFieldStatus;
1440
1500
  readonly $each: Array<$InternalRegleStatusType>;
1441
1501
  readonly $issues: $InternalRegleCollectionIssues;
@@ -1490,7 +1550,7 @@ type $InternalFormPropertyTypes = MaybeRefOrComputedRef<$InternalRegleRuleDecl>
1490
1550
  * @public
1491
1551
  * Rule tree for a form property
1492
1552
  */
1493
- type RegleRuleDecl<TValue extends any = any, TCustomRules extends Partial<ExtendedRulesDeclarations> = Partial<DefaultValidatorsTree>, TOptions extends Record<string, unknown> = FieldRegleBehaviourOptions<TValue>> = TOptions & { [TKey in keyof RemoveIndexSignature<TCustomRules>]?: FormRuleDeclaration<TValue, any[]> } & {
1553
+ type RegleRuleDecl<TValue extends any = any, TCustomRules extends Partial<ExtendedRulesDeclarations> = Partial<DefaultValidatorsTree>, TOptions extends Record<string, unknown> = FieldRegleBehaviourOptions<TValue>> = TOptions & { [TKey in keyof RemoveIndexSignature<TCustomRules>]?: NonNullable<TCustomRules[TKey]> extends RegleRuleDefinitionLight<infer TParams, boolean, infer TMetadata> ? RegleRuleDefinitionLight<[...TParams, ...unknown[]], boolean, TMetadata> | InlineRuleDeclaration<TValue, [...TParams, ...unknown[]], any> : TCustomRules[TKey] } & {
1494
1554
  [x: string]: FormRuleDeclaration<TValue, any[]> | boolean | number | undefined;
1495
1555
  };
1496
1556
  /**
@@ -1713,7 +1773,7 @@ type SuperCompatibleRegleCollectionIssues = $InternalRegleCollectionIssues;
1713
1773
  *
1714
1774
  * @see {@link https://reglejs.dev/core-concepts/rules/reusable-rules Documentation}
1715
1775
  */
1716
- declare function createRule<const TType extends string | unknown, TValue extends any, TParams extends any[], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>, TMetadata extends RegleRuleMetadataDefinition = (TReturn extends Promise<infer M> ? M : TReturn), TAsync extends boolean = (TReturn extends Promise<any> ? true : false), TNonEmpty extends boolean = false>(definition: RegleRuleInit<TType, TValue, TParams, TReturn, TMetadata, TAsync, TNonEmpty>): InferRegleRule<TType, TValue, TParams, TAsync, TMetadata, TNonEmpty>;
1776
+ declare function createRule<const TType extends string | unknown, TValue extends any, TParams extends any[], TReturn extends RegleRuleMetadataDefinition | Promise<RegleRuleMetadataDefinition>, TMetadata extends RegleRuleMetadataDefinition = (TReturn extends Promise<infer M> ? M : TReturn), TAsync extends boolean = (TReturn extends Promise<any> ? true : false), TNonEmpty extends boolean = false>(definition: RegleRuleInit<TType, TValue, TParams, TReturn, TMetadata, TAsync, TNonEmpty>): InferRegleRule<TType, TValue, TParams, TAsync, TMetadata, TNonEmpty extends true ? true : false>;
1717
1777
  /**
1718
1778
  * Returns a clean list of parameters
1719
1779
  * Removing Ref and executing function to return the unwrapped value
@@ -1862,10 +1922,10 @@ type CreateScopedUseRegleOptions<TCustomRegle extends useRegleFn<any, any>, TAsR
1862
1922
  *
1863
1923
  * @see {@link https://reglejs.dev/advanced-usage/scoped-validation Documentation}
1864
1924
  */
1865
- declare function createScopedUseRegle<TCustomRegle extends useRegleFn<any, any> = useRegleFn<Partial<ExtendedRulesDeclarations>>, TAsRecord extends boolean = false, TReturnedRegle extends useRegleFn<any, any, any, any> = (TCustomRegle extends useRegleFn<infer A, infer B> ? useRegleFn<A, B, {
1925
+ declare function createScopedUseRegle<TCustomRegle extends useRegleFn<any, any> = useRegleFn<Partial<ExtendedRulesDeclarationsOverrides>>, TAsRecord extends boolean = false, TReturnedRegle extends useRegleFn<any, any, any, any> = (TCustomRegle extends useRegleFn<infer A, infer B> ? useRegleFn<A, B, {
1866
1926
  dispose: () => void;
1867
1927
  register: () => void;
1868
- }, UseScopedRegleOptions<TAsRecord>> : useRegleFn<Partial<ExtendedRulesDeclarations>, any, {
1928
+ }, UseScopedRegleOptions<TAsRecord>> : useRegleFn<Partial<ExtendedRulesDeclarationsOverrides>, any, {
1869
1929
  dispose: () => void;
1870
1930
  register: () => void;
1871
1931
  }, UseScopedRegleOptions<TAsRecord>>)>(options?: CreateScopedUseRegleOptions<TCustomRegle, TAsRecord>): {
@@ -1928,7 +1988,7 @@ declare const useCollectScope: <TValue extends Record<string, unknown>[] = Recor
1928
1988
  *
1929
1989
  * @see {@link https://reglejs.dev/advanced-usage/scoped-validation Documentation}
1930
1990
  */
1931
- declare const useScopedRegle: useRegleFn<Partial<ExtendedRulesDeclarations>, never, {
1991
+ declare const useScopedRegle: useRegleFn<Partial<ExtendedRulesDeclarationsOverrides>, never, {
1932
1992
  dispose: () => void;
1933
1993
  register: () => void;
1934
1994
  }, {
@@ -2000,9 +2060,9 @@ declare function narrowVariant<TRoot extends {
2000
2060
  [x: string]: unknown;
2001
2061
  };
2002
2062
  $value: unknown;
2003
- }, const TKey extends keyof TRoot, const TValue extends (LazyJoinDiscriminatedUnions<Exclude<TRoot[TKey], RegleCollectionStatus<any, any, any> | RegleStatus<any, any, any> | NarrowVariantExtracts[keyof NarrowVariantExtracts]>> extends {
2063
+ }, const TKey extends keyof Omit<NonNullable<TRoot>, `$${string}` | `~${string}`>, const TValue extends (LazyJoinDiscriminatedUnions<Exclude<NonNullable<TRoot>[TKey], RegleCollectionStatus<any, any, any> | RegleStatus<any, any, any> | NarrowVariantExtracts[keyof NarrowVariantExtracts]>> extends {
2004
2064
  $value: infer V;
2005
- } ? V : unknown)>(root: TRoot | undefined, discriminantKey: TKey, discriminantValue: TValue): root is NarrowVariant<TRoot, TKey, TValue>;
2065
+ } ? V : unknown)>(root: TRoot | undefined, discriminantKey: TKey, discriminantValue: TValue): root is NarrowVariant<NonNullable<TRoot>, TKey, TValue>;
2006
2066
  /**
2007
2067
  * Create a reactive reference to a narrowed variant.
2008
2068
  * Useful in templates or when you need a stable ref to the narrowed type.
@@ -2113,4 +2173,4 @@ declare function refineRules<TRules extends RegleUnknownRulesTree, TRefinement e
2113
2173
  * @see {@link https://reglejs.dev/introduction/devtools Documentation}
2114
2174
  */
2115
2175
  declare const RegleVuePlugin: Plugin;
2116
- export { type $InternalRegleStatus, type AllRulesDeclarations, type ArrayElement, type CommonAlphaOptions, type CommonComparisonOptions, type CreateScopedUseRegleOptions, type DeepMaybeRef, type DeepPartial, type DeepReactiveState, type DefaultValidatorsTree, type DumbJoinDiscriminatedUnions, type ExtendedRulesDeclarations, type FormRuleDeclaration, type GlobalConfigOverrides, type HasNamedKeys, type HaveAnyRequiredProps, type InferInput, type InferOutput, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleSettings, type InferRegleShortcuts, type InferRegleStatusType, type InferRegleValidationResult, type InferSafeOutput, type InferValidOutput, type InlineRuleDeclaration, InternalRuleType, type IsRegleStatic, type JoinDiscriminatedUnions, type LazyJoinDiscriminatedUnions, 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 Prettify, 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 RegleLike, 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 RegleRuleWithParamsDefinitionInput, 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, getErrors, getIssues, inferRules, type inferRulesFn, type isEditedHandlerFn, markStatic, mergeRegles, narrowVariant, refineRules, unwrapRuleParameters, useCollectScope, type useCollectScopeFn, useRegle, type useRegleFn, useRootStorage, useRules, type useRulesFn, useScopedRegle, variantToRef };
2176
+ export { type $InternalRegleStatus, type AllRulesDeclarations, type ArrayElement, type CommonAlphaOptions, type CommonComparisonOptions, type CreateScopedUseRegleOptions, type CustomCollectionProperties, type CustomFieldProperties, type CustomNestedProperties, type CustomRules, type DeepMaybeRef, type DeepPartial, type DeepReactiveState, type DefaultValidatorsTree, type DumbJoinDiscriminatedUnions, type ExtendedRulesDeclarations, type FormRuleDeclaration, type GlobalConfigOverrides, type HasNamedKeys, type HaveAnyRequiredProps, type InferInput, type InferOutput, type InferRegleRoot, type InferRegleRule, type InferRegleRules, type InferRegleSettings, type InferRegleShortcuts, type InferRegleStatusType, type InferRegleValidationResult, type InferSafeOutput, type InferValidOutput, type InlineRuleDeclaration, InternalRuleType, type IsRegleStatic, type JoinDiscriminatedUnions, type LazyJoinDiscriminatedUnions, 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 Prettify, 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 RegleLike, 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 RegleRuleWithParamsDefinitionInput, 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 UrlOptions, type UseScopedRegleOptions, createRule, createScopedUseRegle, createVariant, defineRegleConfig, defineRegleOptions, defineRules, extendRegleConfig, flatErrors, getErrors, getIssues, inferRules, type inferRulesFn, type isEditedHandlerFn, markStatic, mergeRegles, narrowVariant, refineRules, unwrapRuleParameters, useCollectScope, type useCollectScopeFn, useRegle, type useRegleFn, useRootStorage, useRules, type useRulesFn, useScopedRegle, variantToRef };
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @regle/core v1.18.3
2
+ * @regle/core v1.19.0-beta.2
3
3
  * (c) 2026 Victor Garcia
4
4
  * @license MIT
5
5
  */
@@ -736,6 +736,7 @@ function useStorage() {
736
736
  }
737
737
 
738
738
  const regleSymbol = Symbol("regle");
739
+ const regleConfigSymbol = Symbol("regle-config");
739
740
  const REGLE_FLAGS = { REGLE_STATIC: "__regle_static" };
740
741
 
741
742
  function isNestedRulesDef(state, rules) {
@@ -1170,36 +1171,40 @@ function createReactiveFieldStatus({ state, rulesDef, customMessages, path, cach
1170
1171
  });
1171
1172
  const $lazy = computed(() => {
1172
1173
  if ($localOptions.value.$lazy != null) return $localOptions.value.$lazy;
1173
- else if (unref(options.lazy) != null) return unref(options.lazy);
1174
+ else if (unref(options.lazy) != null) return unref(options.lazy) === true;
1174
1175
  return false;
1175
1176
  });
1176
1177
  const $immediateDirty = computed(() => {
1177
1178
  if ($localOptions.value.$immediateDirty != null) return $localOptions.value.$immediateDirty;
1178
- else if (unref(options.immediateDirty) != null) return unref(options.immediateDirty);
1179
+ else if (unref(options.immediateDirty) != null) return unref(options.immediateDirty) === true;
1179
1180
  return false;
1180
1181
  });
1181
1182
  const $rewardEarly = computed(() => {
1182
- if ($localOptions.value.$rewardEarly != null) return $localOptions.value.$rewardEarly;
1183
- else if (unref(options.rewardEarly) != null) return unref(options.rewardEarly);
1183
+ if ($localOptions.value.$rewardEarly != null) return !!$localOptions.value.$rewardEarly;
1184
+ else if (unref(options.rewardEarly) != null) return unref(options.rewardEarly) === true;
1184
1185
  return false;
1185
1186
  });
1186
1187
  const $clearExternalErrorsOnChange = computed(() => {
1187
- if ($localOptions.value.$clearExternalErrorsOnChange != null) return $localOptions.value.$clearExternalErrorsOnChange;
1188
- else if (unref(options.clearExternalErrorsOnChange) != null) return unref(options.clearExternalErrorsOnChange);
1188
+ if ($localOptions.value.$clearExternalErrorsOnChange != null) return !!$localOptions.value.$clearExternalErrorsOnChange;
1189
+ else if (unref(options.clearExternalErrorsOnChange) != null) return unref(options.clearExternalErrorsOnChange) === true;
1189
1190
  else if ($silent.value) return false;
1190
1191
  return true;
1191
1192
  });
1192
1193
  const $silent = computed(() => {
1193
1194
  if ($rewardEarly.value) return true;
1194
1195
  else if ($localOptions.value.$silent != null) return $localOptions.value.$silent;
1195
- else if (unref(options.silent) != null) return unref(options.silent);
1196
+ else if (unref(options.silent) != null) return unref(options.silent) === true;
1196
1197
  else return false;
1197
1198
  });
1198
1199
  const $autoDirty = computed(() => {
1199
1200
  if ($localOptions.value.$autoDirty != null) return $localOptions.value.$autoDirty;
1200
- else if (unref(options.autoDirty) != null) return unref(options.autoDirty);
1201
+ else if (unref(options.autoDirty) != null) return unref(options.autoDirty) === true;
1201
1202
  return true;
1202
1203
  });
1204
+ const $isEdited = computed(() => {
1205
+ if ($localOptions.value.$isEdited != null) return $localOptions.value.$isEdited;
1206
+ else if (overrides?.isEdited != null) return overrides.isEdited;
1207
+ });
1203
1208
  const $validating = computed(() => {
1204
1209
  for (const ruleResult of Object.values($rules.value)) if (ruleResult.$validating) return true;
1205
1210
  return false;
@@ -1251,8 +1256,7 @@ function createReactiveFieldStatus({ state, rulesDef, customMessages, path, cach
1251
1256
  return initialValue !== currentValue;
1252
1257
  }
1253
1258
  watchEffect(() => {
1254
- if ($dirty.value) if ($localOptions.value.$isEdited) $edited.value = $localOptions.value.$isEdited(state.value, initialState.value, isEditedHandler);
1255
- else if (overrides?.isEdited) $edited.value = overrides.isEdited(state.value, initialState.value, isEditedHandler);
1259
+ if ($dirty.value) if ($isEdited.value) $edited.value = $isEdited.value(state.value, initialState.value, isEditedHandler);
1256
1260
  else $edited.value = isEditedHandler(state.value, initialState.value);
1257
1261
  else $edited.value = false;
1258
1262
  });
@@ -1302,7 +1306,9 @@ function createReactiveFieldStatus({ state, rulesDef, customMessages, path, cach
1302
1306
  $rewardEarly: $rewardEarly.value,
1303
1307
  $autoDirty: $autoDirty.value,
1304
1308
  $silent: $silent.value,
1305
- $clearExternalErrorsOnChange: $clearExternalErrorsOnChange.value
1309
+ $clearExternalErrorsOnChange: $clearExternalErrorsOnChange.value,
1310
+ $immediateDirty: $immediateDirty.value,
1311
+ $isEdited: $isEdited.value
1306
1312
  };
1307
1313
  });
1308
1314
  function processShortcuts() {
@@ -1822,29 +1828,41 @@ function createReactiveCollectionStatus({ state, rulesDef, customMessages, path,
1822
1828
  });
1823
1829
  const $rewardEarly = computed(() => {
1824
1830
  if ($localOptions.value.$rewardEarly != null) return $localOptions.value.$rewardEarly;
1825
- else if (unref(options.rewardEarly) != null) return unref(options.rewardEarly);
1831
+ else if (unref(options.rewardEarly) != null) return unref(options.rewardEarly) === true;
1826
1832
  return false;
1827
1833
  });
1828
1834
  const $silent = computed(() => {
1829
1835
  if ($rewardEarly.value) return true;
1830
1836
  else if ($localOptions.value.$silent != null) return $localOptions.value.$silent;
1831
- else if (unref(options.silent) != null) return unref(options.silent);
1837
+ else if (unref(options.silent) != null) return unref(options.silent) === true;
1832
1838
  else return false;
1833
1839
  });
1834
1840
  const $autoDirty = computed(() => {
1835
1841
  if ($localOptions.value.$autoDirty != null) return $localOptions.value.$autoDirty;
1836
- else if (unref(options.autoDirty) != null) return unref(options.autoDirty);
1842
+ else if (unref(options.autoDirty) != null) return unref(options.autoDirty) === true;
1837
1843
  return true;
1838
1844
  });
1845
+ const $immediateDirty = computed(() => {
1846
+ if ($localOptions.value.$immediateDirty != null) return $localOptions.value.$immediateDirty;
1847
+ else if (unref(options.immediateDirty) != null) return unref(options.immediateDirty) === true;
1848
+ return false;
1849
+ });
1850
+ const $isEdited = computed(() => {
1851
+ if ($localOptions.value.$isEdited != null) return $localOptions.value.$isEdited;
1852
+ else if (overrides?.isEdited != null) return overrides.isEdited;
1853
+ });
1839
1854
  const $name = computed(() => fieldName ?? options.id ?? "root");
1840
1855
  const $modifiers = computed(() => {
1841
1856
  return {
1842
1857
  $deepCompare: $localOptions.value.$deepCompare ?? false,
1858
+ $debounce: $localOptions.value.$debounce ?? 0,
1843
1859
  $lazy: $localOptions.value.$lazy ?? false,
1844
1860
  $rewardEarly: $rewardEarly.value,
1845
1861
  $autoDirty: $autoDirty.value,
1846
1862
  $silent: $silent.value,
1847
- $clearExternalErrorsOnChange: $localOptions.value.$clearExternalErrorsOnChange ?? false
1863
+ $clearExternalErrorsOnChange: $localOptions.value.$clearExternalErrorsOnChange ?? false,
1864
+ $immediateDirty: $immediateDirty.value,
1865
+ $isEdited: $isEdited.value
1848
1866
  };
1849
1867
  });
1850
1868
  function processShortcuts() {
@@ -2256,14 +2274,26 @@ function createReactiveNestedStatus({ rulesDef, state, path = "", cachePath, roo
2256
2274
  return false;
2257
2275
  });
2258
2276
  const $silent = computed(() => {
2259
- if (unref(commonArgs.options.silent) != null) return unref(commonArgs.options.silent);
2277
+ if (unref(commonArgs.options.silent) != null) return unref(commonArgs.options.silent) === true;
2260
2278
  else if ($rewardEarly.value) return true;
2261
2279
  return false;
2262
2280
  });
2263
2281
  const $autoDirty = computed(() => {
2264
- if (unref(commonArgs.options.autoDirty) != null) return unref(commonArgs.options.autoDirty);
2282
+ if (unref(commonArgs.options.autoDirty) != null) return unref(commonArgs.options.autoDirty) === true;
2265
2283
  return true;
2266
2284
  });
2285
+ const $immediateDirty = computed(() => {
2286
+ if (unref(commonArgs.options.immediateDirty) != null) return unref(commonArgs.options.immediateDirty) === true;
2287
+ return false;
2288
+ });
2289
+ const $lazy = computed(() => {
2290
+ if (unref(commonArgs.options.lazy) != null) return unref(commonArgs.options.lazy) === true;
2291
+ return false;
2292
+ });
2293
+ const $clearExternalErrorsOnChange = computed(() => {
2294
+ if (unref(commonArgs.options.clearExternalErrorsOnChange) != null) return unref(commonArgs.options.clearExternalErrorsOnChange) === true;
2295
+ return false;
2296
+ });
2267
2297
  const $ready = computed(() => {
2268
2298
  return !($invalid.value || $pending.value);
2269
2299
  });
@@ -2305,10 +2335,11 @@ function createReactiveNestedStatus({ rulesDef, state, path = "", cachePath, roo
2305
2335
  const $modifiers = computed(() => {
2306
2336
  return {
2307
2337
  autoDirty: $autoDirty.value,
2308
- lazy: unref(commonArgs.options.lazy) ?? false,
2338
+ lazy: $lazy.value,
2309
2339
  rewardEarly: $rewardEarly.value,
2310
2340
  silent: $silent.value,
2311
- clearExternalErrorsOnChange: unref(commonArgs.options.clearExternalErrorsOnChange) ?? false,
2341
+ clearExternalErrorsOnChange: $clearExternalErrorsOnChange.value,
2342
+ immediateDirty: $immediateDirty.value,
2312
2343
  id: unref(commonArgs.options.id)
2313
2344
  };
2314
2345
  });
@@ -2509,6 +2540,7 @@ function createReactiveNestedStatus({ rulesDef, state, path = "", cachePath, roo
2509
2540
  $initialValue: initialState,
2510
2541
  $originalValue: originalState,
2511
2542
  $self: $selfStatus,
2543
+ $externalErrors: externalErrors,
2512
2544
  $fields,
2513
2545
  $reset,
2514
2546
  $touch,
@@ -3207,7 +3239,7 @@ function filterInspectorTree(nodes, filter) {
3207
3239
  return filtered;
3208
3240
  }
3209
3241
 
3210
- var version$1 = "1.18.3";
3242
+ var version$1 = "1.19.0-beta.2";
3211
3243
 
3212
3244
  function createDevtools(app) {
3213
3245
  setupDevtoolsPlugin({
@@ -3371,8 +3403,28 @@ function useRootStorage({ initialState, originalState, options, scopeRules, stat
3371
3403
 
3372
3404
  function createRootRegleLogic({ state, rulesFactory, options, globalOptions, customRules, shortcuts, overrides }) {
3373
3405
  const definedRules = isRef(rulesFactory) ? rulesFactory : typeof rulesFactory === "function" ? void 0 : computed(() => rulesFactory);
3406
+ /**
3407
+ * Options injected by the plugin
3408
+ */
3409
+ const pluginOptions = inject(regleConfigSymbol, void 0) ?? {};
3410
+ const mergedGlobalOptions = {
3411
+ ...pluginOptions.modifiers,
3412
+ ...globalOptions
3413
+ };
3414
+ const mergedCustomRules = () => ({
3415
+ ...pluginOptions.rules?.(),
3416
+ ...customRules?.()
3417
+ });
3418
+ const mergedShortcuts = {
3419
+ ...pluginOptions.shortcuts,
3420
+ ...shortcuts
3421
+ };
3422
+ const mergedOverrides = {
3423
+ ...pluginOptions.overrides,
3424
+ ...overrides
3425
+ };
3374
3426
  const resolvedOptions = {
3375
- ...globalOptions,
3427
+ ...mergedGlobalOptions,
3376
3428
  ...options
3377
3429
  };
3378
3430
  let unwatchRules;
@@ -3392,28 +3444,20 @@ function createRootRegleLogic({ state, rulesFactory, options, globalOptions, cus
3392
3444
  options: resolvedOptions,
3393
3445
  initialState,
3394
3446
  originalState,
3395
- customRules,
3396
- shortcuts,
3397
- overrides
3447
+ customRules: mergedCustomRules,
3448
+ shortcuts: mergedShortcuts,
3449
+ overrides: mergedOverrides
3398
3450
  });
3399
3451
  }
3400
3452
 
3401
3453
  function createUseRegleComposable(options) {
3402
- const { rules: customRules, modifiers, shortcuts, overrides } = options ?? {};
3403
- const globalOptions = {
3404
- autoDirty: modifiers?.autoDirty,
3405
- lazy: modifiers?.lazy,
3406
- rewardEarly: modifiers?.rewardEarly,
3407
- silent: modifiers?.silent,
3408
- clearExternalErrorsOnChange: modifiers?.clearExternalErrorsOnChange,
3409
- immediateDirty: modifiers?.immediateDirty
3410
- };
3454
+ const { rules: customRules, modifiers = {}, shortcuts, overrides } = options ?? {};
3411
3455
  function useRegle(state, rulesFactory, options) {
3412
3456
  return { r$: createRootRegleLogic({
3413
3457
  state: isRef(state) ? state : ref(state),
3414
3458
  rulesFactory,
3415
3459
  options,
3416
- globalOptions,
3460
+ globalOptions: modifiers,
3417
3461
  customRules,
3418
3462
  shortcuts,
3419
3463
  overrides
@@ -3581,22 +3625,14 @@ function createEmptyRuleState(rules) {
3581
3625
  return result;
3582
3626
  }
3583
3627
  function createUseRulesComposable(options) {
3584
- const { rules: customRules, modifiers, shortcuts, overrides } = options ?? {};
3585
- const globalOptions = {
3586
- autoDirty: modifiers?.autoDirty,
3587
- lazy: modifiers?.lazy,
3588
- rewardEarly: modifiers?.rewardEarly,
3589
- silent: modifiers?.silent,
3590
- clearExternalErrorsOnChange: modifiers?.clearExternalErrorsOnChange,
3591
- immediateDirty: modifiers?.immediateDirty
3592
- };
3628
+ const { rules: customRules, modifiers = {}, shortcuts, overrides } = options ?? {};
3593
3629
  function useRules(rulesFactory, options) {
3594
3630
  const definedRules = isRef(rulesFactory) ? rulesFactory : typeof rulesFactory === "function" ? void 0 : computed(() => rulesFactory);
3595
3631
  return createRootRegleLogic({
3596
3632
  state: ref(createEmptyRuleState(definedRules?.value)),
3597
3633
  rulesFactory: definedRules,
3598
3634
  options,
3599
- globalOptions,
3635
+ globalOptions: modifiers,
3600
3636
  customRules,
3601
3637
  shortcuts,
3602
3638
  overrides
@@ -3785,6 +3821,30 @@ function extendRegleConfig(regle, { rules, modifiers, shortcuts, overrides }) {
3785
3821
  inferRules: createInferRuleHelper()
3786
3822
  };
3787
3823
  }
3824
+ /**
3825
+ * Define a global Regle options to customize the validation behavior across your application.
3826
+ * It's meant to be used with the Regle Vue plugin.
3827
+ *
3828
+ * @param options - Configuration options
3829
+ * @returns The configuration options
3830
+ *
3831
+ * @example
3832
+ * ```ts
3833
+ * import { defineRegleOptions } from '@regle/core';
3834
+ *
3835
+ * const regleOptions = defineRegleOptions({
3836
+ * modifiers: {
3837
+ * lazy: true,
3838
+ * rewardEarly: true
3839
+ * }
3840
+ * });
3841
+ * ```
3842
+ *
3843
+ * @see {@link https://reglejs.dev/advanced-usage/global-config Documentation}
3844
+ */
3845
+ function defineRegleOptions(options) {
3846
+ return options;
3847
+ }
3788
3848
 
3789
3849
  /**
3790
3850
  * Merge multiple Regle instances into a single validation state.
@@ -4271,7 +4331,7 @@ function createVariant(root, discriminantKey, variants) {
4271
4331
  * @see {@link https://reglejs.dev/advanced-usage/variants Documentation}
4272
4332
  */
4273
4333
  function narrowVariant(root, discriminantKey, discriminantValue) {
4274
- return !!root && isObject(root[discriminantKey]) && "$value" in root[discriminantKey] && root[discriminantKey]?.$value === discriminantValue;
4334
+ return !!root && discriminantKey in root && isObject(root[discriminantKey]) && "$value" in root[discriminantKey] && root[discriminantKey]?.$value === discriminantValue;
4275
4335
  }
4276
4336
  function variantToRef(root, discriminantKey, discriminantValue, _options) {
4277
4337
  const fromRoot = isRef(root) ? toRef(root.value, "$fields") : toRef(root, "$fields");
@@ -4366,9 +4426,10 @@ function refineRules(rules, refinement) {
4366
4426
  *
4367
4427
  * @see {@link https://reglejs.dev/introduction/devtools Documentation}
4368
4428
  */
4369
- const RegleVuePlugin = { install(app) {
4429
+ const RegleVuePlugin = { install(app, options) {
4370
4430
  app.provide(regleSymbol, version$1);
4431
+ if (options) app.provide(regleConfigSymbol, options);
4371
4432
  if (typeof window !== "undefined" && true) createDevtools(app);
4372
4433
  } };
4373
4434
 
4374
- export { InternalRuleType, RegleVuePlugin, createRule, createScopedUseRegle, createVariant, defineRegleConfig, defineRules, extendRegleConfig, flatErrors, getErrors, getIssues, inferRules, markStatic, mergeRegles, narrowVariant, refineRules, unwrapRuleParameters, useCollectScope, useRegle, useRootStorage, useRules, useScopedRegle, variantToRef };
4435
+ export { InternalRuleType, RegleVuePlugin, createRule, createScopedUseRegle, createVariant, defineRegleConfig, defineRegleOptions, defineRules, extendRegleConfig, flatErrors, getErrors, getIssues, inferRules, markStatic, mergeRegles, narrowVariant, refineRules, unwrapRuleParameters, useCollectScope, useRegle, useRootStorage, useRules, useScopedRegle, variantToRef };
@@ -1,7 +1,7 @@
1
1
  /**
2
- * @regle/core v1.18.3
2
+ * @regle/core v1.19.0-beta.2
3
3
  * (c) 2026 Victor Garcia
4
4
  * @license MIT
5
5
  */
6
6
 
7
- 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`}function b(e){return e&&(e instanceof Date||e.constructor.name==`File`||e.constructor.name==`FileList`)?!1:typeof e==`object`&&!!e&&!Array.isArray(e)}function x(e,t,n){if(!e)return n;var r,i;if(Array.isArray(t)&&(r=t.slice(0)),typeof t==`string`&&(r=t.split(`.`)),typeof t==`symbol`&&(r=[t]),!Array.isArray(r))throw Error(`props arg must be an array, a string or a symbol`);for(;r.length;)if(i=r.shift(),!e||!i||(e=e[i],e===void 0))return n;return e}function S(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 C(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 w(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function T(e,t,n,r=!1){Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})}function E(e){return typeof e==`function`&&!!e.prototype&&`constructor`in e.prototype&&e.prototype.constructor===e}function D(e,t=!0,n=!0){return e==null?!0:e instanceof Date?isNaN(e.getTime()):y(e)?e.size<=0:Array.isArray(e)?t?e.length===0:!1:b(e)?e==null?!0:n?Object.keys(e).length===0:!1:!String(e).length}const O=Symbol(`regle-rule`);function k(e){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 A(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=>A(e,t++)))),r==`Map`&&(n=new Map([...e].map(e=>[A(e[0]),A(e[1])]))),r==`Date`&&(n=new Date(e.getTime())),r==`RegExp`&&(n=RegExp(e.source,k(e))),r==`Array`||r==`Object`)for(let r in n=Array.isArray(e)?[]:{},e)n[r]=A(e[r],t++);return n}function j(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 M(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 N(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(!N(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(b(e)&&b(t)&&s&&(r||!r&&n)&&!N(e[s],t[s],n,!1))return!1}return!0}return e!==e&&t!==t}var P=class extends Error{constructor(e=`Promise was aborted`){super(e),this.name=`AbortError`}};function F(e){let t=new AbortController,{signal:n}=t,r=new Promise((t,r)=>{function i(){r(new P)}n.addEventListener(`abort`,i),e.then(e=>{n.removeEventListener(`abort`,i),n.aborted?r(new P):t(e)}).catch(e=>{n.removeEventListener(`abort`,i),n.aborted?r(new P):r(e)})});function i(e){t.abort(e)}return{promise:r,abort:i,signal:n}}const I={Inline:`__inline`,Async:`__async`};function L(e){try{return e.map(e=>p(e))}catch{return[]}}function R(t){return t.map(t=>t instanceof Function?e(t):i(t)?t:f(()=>t))}function z(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 B(e,...t){let{validator:n,type:r,async:i}=e,o=i||r===I.Async||n.constructor.name===`AsyncFunction`;return a({validator(n,...r){return e.validator(n,...L(r.length?r:t))},message(n){return typeof e.message==`function`?e.message({...n,$params:L(n?.$params?.length?n.$params:t)}):e.message},active(n){return typeof e.active==`function`?e.active({...n,$params:L(n?.$params?.length?n.$params:t)}):e.active??!0},tooltip(n){return typeof e.tooltip==`function`?e.tooltip({...n,$params:L(n?.$params?.length?n.$params:t)}):e.tooltip??[]},exec(n){let r=e.validator(n,...L(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:R(t),_brand:O})}function V(e){if(typeof e.validator==`function`){let t=[],n=e.async??e.validator.constructor.name===`AsyncFunction`,r=B({...e,async:n},...t);if(z(e.validator)>1){let t=function(...t){return B(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 H(e){return b(e.value)}function U(e,n,r){let i=t(),a;return a=e instanceof Function?i.run(()=>e(n,r??0)):e,{scope:i,unwrapped:a}}const W={LessThan:-1,EqualTo:0,GreaterThan:1};function G(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 W.GreaterThan;if(i>t)return W.LessThan;if(!isNaN(t)&&isNaN(i))return W.GreaterThan;if(isNaN(t)&&!isNaN(i))return W.LessThan}return W.EqualTo}const ee=G(g,`3.5.0`)!==-1;function te(){return Math.floor(Math.random()*Date.now()).toString()}function K(){return typeof window>`u`?te():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(e,t){return e.some(e=>t?e?.[t]:!1)}function X(e,t){return t?e.reduce((e,n)=>{let r=n?.[t]||[];return e.concat(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=L(i._params),n=L(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 ne=Symbol(`regle`),Q={REGLE_STATIC:`__regle_static`};function re(e,t){return!se(e.value)&&(H(e)||b(t.value)&&!D(t.value)&&!Object.entries(t.value).some(([e,t])=>$(t)||typeof t==`function`))}function ie(e,t){return!!e.value&&b(e.value)&&`$each`in e.value||Array.isArray(t.value)}function ae(e){return!!e.value&&(b(e.value)||H(e.value))}function $(e){return(b(e)||typeof e==`function`)&&`_validator`in e}function oe(e){return typeof e.value==`function`?`_validator`in e.value:!0}function se(e){return b(e)&&w(e,Q.REGLE_STATIC)&&e[Q.REGLE_STATIC]===!0}function ce(e){return b(e)&&`$fields`in e}function le(e){return!!e&&`$rules`in e}function ue({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 de({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 fe(e){return b(e)&&`$each`in e}function pe(e,t){let{includePath:n=!1}=t??{};if(Array.isArray(e)&&e.every(e=>!b(e)))return e;if(fe(e)){let t=n?e.$self?.map(e=>({message:e,path:[]}))??[]:e.$self??[],r=e.$each?.map(e=>me(e,n))??[];return t?.concat(r.flat())}else return Object.entries(e).map(([e,t])=>me(t,n,[e])).flat()}function me(e,t=!1,n){let r=t&&!n?[]:n;if(Array.isArray(e)&&e.every(e=>!b(e)))return t?e.map(e=>({message:e,path:r??[]})):e;if(fe(e)){let n=r?.length?e.$self?.map(e=>({message:e,path:r??[]}))??[]:e.$self??[],i=e.$each?.map((e,n)=>me(e,t,r?.concat(n)))??[];return n?.concat(i.flat())}else return Object.entries(e).map(([e,n])=>me(n,t,r?.concat(e))).flat()}function he({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:b,$validating:x}=c.trySetRuleStatusRef(`${s}.${i}`);function S(){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:S.value,...b.value})),p=e(()=>{try{return oe(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),oe(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 D(e)&&(e=`This field is not valid`),e}),g=e(()=>m(`tooltip`)),_=e(()=>oe(r)&&r.value.type?r.value.type:i),x=e(()=>oe(r)?r.value.validator:r.value),S=e(()=>typeof r.value==`function`?[]:L(r.value._params??[]));return{$active:p,$message:h,$type:_,$validator:x,$params:S,$path:e(()=>`${o}.${i}`),$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()},{deep:ee?1:!0})}S();function C(){y.value=!0,p.$fieldDirty.value&&(v.value=!0)}async function w(){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;C();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,b.value=n}}catch{e=!1}finally{v.value=!1}return e}function T(e,t=!0){if($(r.value)&&r.value._async)return!0;let n=e(a.value,...p.$params.value);if(n instanceof Promise)return!0;if(n!=null){if(typeof n==`boolean`)return n;{let{$valid:e,...t}=n;return b.value=t,e}}return!0}async function E(){try{x.value=!0;let e=!1;if(g.value=!0,$(r.value)&&r.value._async)e=await w();else{let t=p.$validator.value;e=T(t)}return y.value=e,e}catch{return!1}finally{x.value=!1,g.value=!1}}function O(){try{return x.value=!0,T(p.$validator.value)}catch{return!1}finally{x.value=!1}}function k(){y.value=!0,b.value={},v.value=!1,x.value=!1,S()}function A(){m(),f.stop(),f=t()}return l({...p,$pending:v,$valid:y,$metadata:b,$haveAsync:h,$maybePending:g,$validating:x,$parse:E,$parseSync:O,$unwatch:A,$watch:S,$reset:k})}function ge(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:pe(i,{includePath:!0})}}}}}function _e({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:C,shortcuts:w,overrides:T,onValidate:E}){let O=t(),k,P=[],I,L,R,z,B=()=>{},V,H=()=>{},U=u(!1);function W(){let e=r.value,t=c.checkRuleDeclEntry(o,e),s={};for(let t in e)t.startsWith(`$`)&&(s[t]=e[t]);Z.value=s,q();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,he({modifiers:{$silent:k.$silent,$rewardEarly:k.$rewardEarly},customMessages:i,rule:r,ruleKey:e,state:n,path:a,cachePath:o,storage:c,$debounce:Z.value.$debounce})])}X.value=Object.fromEntries(u),k.processShortcuts(),G(),te(),t?.valid!=null&&(k.$dirty.value=c.getDirtyState(o),(k.$dirty.value&&!k.$silent.value||k.$rewardEarly.value&&k.$error.value)&&B()),c.addRuleDeclEntry(o,e)}function G(){B=k.$debounce.value>0?M(Y,k.$debounce.value,{trackDebounceRef:U}):Y}function te(){H=k.$debounce.value>0?M(()=>{k.$dirty.value=!0},k.$debounce.value):()=>{k.$dirty.value=!0}}function K(){if(X.value)for(let e of Object.values(X.value))e.$unwatch();L(),z?.(),k.$dirty.value&&c.setDirtyEntry(o,k.$dirty.value),I?.(),O.stop(),O=t();for(let e of P)e.stop();P=[],y?.(),R?.()}function q(){if(X.value)for(let e of Object.values(X.value))e.$watch();k=O.run(()=>{let i=u(!1),a=u(!1),o=e(()=>i.value),c=e(()=>x||se(n.value)),f=e(()=>Z.value.$debounce==null?k.$haveAnyAsyncRule.value?200:0:Z.value.$debounce),_=e(()=>Z.value.$deepCompare==null?!1:Z.value.$deepCompare),y=e(()=>Z.value.$lazy==null?h(d.lazy)==null?!1:h(d.lazy):Z.value.$lazy),b=e(()=>Z.value.$immediateDirty==null?h(d.immediateDirty)==null?!1:h(d.immediateDirty):Z.value.$immediateDirty),C=e(()=>Z.value.$rewardEarly==null?h(d.rewardEarly)==null?!1:h(d.rewardEarly):Z.value.$rewardEarly),E=e(()=>Z.value.$clearExternalErrorsOnChange==null?h(d.clearExternalErrorsOnChange)==null?!O.value:h(d.clearExternalErrorsOnChange):Z.value.$clearExternalErrorsOnChange),O=e(()=>C.value?!0:Z.value.$silent==null?h(d.silent)==null?!1:h(d.silent):Z.value.$silent),A=e(()=>Z.value.$autoDirty==null?h(d.autoDirty)==null?!0:h(d.autoDirty):Z.value.$autoDirty),M=e(()=>{for(let e of Object.values(X.value))if(e.$validating)return!0;return!1}),F=e({get:()=>n.value,set(e){I(),n.value=e,J()}}),L=e(()=>U.value?q.value&&i.value:q.value&&!K.value&&i.value),R=e(()=>ue({field:{$rules:X.value,$error:L.value,$externalErrors:p?.value,$schemaErrors:m?.value,fieldName:Y.value}})),z=e(()=>ue({field:{$rules:X.value,$error:L.value,$externalErrors:p?.value,$schemaErrors:m?.value,fieldName:Y.value},silent:!0})),B=e(()=>R.value.map(e=>e.$message)),V=e(()=>z.value.map(e=>e.$message)),H=u(!1);function W(e,t){return t instanceof Date&&e instanceof Date?j(t).getDate()!==j(e).getDate():t==null?!!e:Array.isArray(e)&&Array.isArray(t)?!N(e,t,Z.value.$deepCompare):t!==e}v(()=>{i.value?Z.value.$isEdited?H.value=Z.value.$isEdited(n.value,S.value,W):T?.isEdited?H.value=T.isEdited(n.value,S.value,W):H.value=W(n.value,S.value):H.value=!1});let G=e(()=>H.value),ee=e(()=>de({field:{$rules:X.value}})),te=e(()=>!(q.value||K.value)),K=e(()=>a.value||!C.value?Object.entries(X.value).some(([e,t])=>t.$pending):!1),q=e(()=>p?.value?.length||m?.value?.length?!0:ne.value?!1:Object.values(X.value).some(e=>!e.$valid||e.$maybePending)),Y=e(()=>s??d.id??`root`),ne=e(()=>!g&&!Object.keys(r.value).some(e=>!e.startsWith(`$`))),Q=e(()=>{if(p?.value?.length||ne.value||U.value)return!1;if(i.value&&!D(n.value)&&!M.value&&!K.value){if(g)return!m?.value?.length;{let e=Object.values(X.value);for(let t of e)if(t.$active&&!t.$valid)return!1;return e.some(e=>e.$active)}}return!1}),re=e(()=>Object.values(X.value).some(e=>e.$haveAsync)),ie=e(()=>({$debounce:f.value,$lazy:y.value,$rewardEarly:C.value,$autoDirty:A.value,$silent:O.value,$clearExternalErrorsOnChange:E.value}));function ae(){w?.fields&&Object.entries(w.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:F,$rules:X,$error:L,$pending:K,$invalid:q,$correct:Q,$errors:B,$ready:te,$silentErrors:V,$anyDirty:o,$tooltips:ee,$name:Y,$inactive:ne,$edited:H,$anyEdited:G}))}),e}),P.push(a)})}let $={};return{$error:L,$pending:K,$invalid:q,$correct:Q,$debounce:f,$deepCompare:_,$lazy:y,$immediateDirty:b,$ready:te,$issues:R,$silentIssues:z,$errors:B,$silentErrors:V,$rewardEarly:C,$autoDirty:A,$silent:O,$clearExternalErrorsOnChange:E,$anyDirty:o,$edited:H,$anyEdited:G,$name:Y,$haveAnyAsyncRule:re,$shortcuts:$,$validating:M,$tooltips:ee,$dirty:i,processShortcuts:ae,$silentValue:F,$inactive:ne,$modifiers:ie,$isArrayOrRegleStatic:c}}),J(),L=_(k.$dirty,e=>{c.setDirtyEntry(o,e),Object.values(X.value).forEach(t=>{t.$fieldDirty=e})}),z=_([k.$error,k.$correct,k.$invalid,k.$pending],()=>{Object.values(X.value).forEach(e=>{e.$fieldError=k.$error.value,e.$fieldInvalid=k.$invalid.value,e.$fieldPending=k.$pending.value,e.$fieldCorrect=k.$correct.value})}),R=_(k.$haveAnyAsyncRule,G)}function J(){I=_(n,()=>{k.$autoDirty.value&&!k.$silent.value&&(k.$dirty.value||H()),r.value instanceof Function&&W(),(!k.$silent.value||k.$rewardEarly.value&&k.$error.value)&&B(),k.$clearExternalErrorsOnChange.value&&le()},{deep:k.$isArrayOrRegleStatic.value?!0:ee?1:!0})}async function Y(){try{let{promise:e}=re(Promise.allSettled(Object.values(X.value).map(e=>e.$parse())));await e}catch{}}let X=u({}),Z=u({});W();function ne(e,t){if(Q(),le(),k.$dirty.value=!1,c.setDirtyEntry(o,!1),!t)if(e?.toOriginalState)n.value=A(C),S.value=A(C);else if(e?.toInitialState)n.value=A(S.value);else if(e?.toState){let t;t=typeof e?.toState==`function`?e?.toState():e?.toState,S.value=A(t),n.value=A(t)}else S.value=b(n.value)&&!se(n.value)?A(n.value):Array.isArray(n.value)?[...n.value]:n.value;if(e?.clearExternalErrors&&le(),!t&&!e?.keepValidationState)for(let e of Object.values(X.value))e.$reset();if(!k.$lazy.value&&!k.$silent.value&&!t)for(let e of Object.values(X.value))e.$parse()}function Q(){`cancel`in B&&B.cancel()}function re(e){return V&&V.abort(),V=F(e),V}function ie(){Q(),V&&V.abort()}function ae(e=!0,t=!1){k.$dirty.value||H(),t&&e?(!k.$silent.value||k.$rewardEarly.value&&k.$error.value)&&(Q(),B()):e&&(Q(),B())}async function $(e){try{if(e&&(n.value=e),g)return E?(ae(!1),E()):{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&&!U.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(D(X.value))return{valid:!0,data:t,errors:k.$errors.value,issues:k.$issues.value};ie();let{promise:r}=re(Promise.allSettled(Object.values(X.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 oe(e){try{return e&&(n.value=e),k.$dirty.value||(k.$dirty.value=!0),g?!1:Object.values(X.value).map(e=>e.$parseSync()).every(e=>!!e)}catch{return!1}}function ce(e=!0){return k.$dirty.value?n.value:e?{_null:!0}:null}function le(){p?.value?.length&&(p.value=[])}!k.$lazy.value&&!k.$dirty.value&&!k.$silent.value&&Y(),k.$immediateDirty.value&&(k.$dirty.value=!0);let{$shortcuts:fe,$validating:pe,$autoDirty:me,$rewardEarly:_e,$clearExternalErrorsOnChange:ve,$haveAnyAsyncRule:ye,$debounce:be,$lazy:xe,...Se}=k;return l({...Se,$externalErrors:p,$value:n,$initialValue:S,$originalValue:C,$rules:X,...fe,$path:a,$isDebouncing:U,$reset:ne,$touch:ae,$validate:$,$validateSync:oe,$unwatch:K,$watch:q,$extractDirtyFields:ce,$clearExternalErrors:le,$abort:ie,$schemaMode:g,"~modifiers":k.$modifiers,...ge($)})}function ve({$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:_,overrides:v}){let y=s.value?.$id??l.$key??K(),x=`${r}.${String(y)}`,S=`${n}.${i}`;typeof s.value==`object`&&s.value!=null&&(s.value.$id||Object.defineProperties(s.value,{$id:{value:y,enumerable:!1,configurable:!1,writable:!1}}));let C=f(u?.value??[],i),w=e(()=>d?.value?.[i]),T=xe({index:i,state:s,rulesDef:f(()=>l),customMessages:c,path:S,cachePath:x,storage:o,options:a,externalErrors:C,schemaErrors:w,initialState:p,originalState:m,shortcuts:h,fieldName:g,schemaMode:_,overrides:v});return T&&(T.$id=s.value?.$id??String(y),o.addArrayStatus(t,T.$id,T)),s.value&&(!b(s.value)||se(s.value))&&_&&T?.$touch(),T}function ye({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:b,fieldName:x,overrides:S}){let C=t(),w,T=t(),E,O=[];if(!Array.isArray(n.value)&&!r.value.$each)return;let k=u(),j=u(n.value),M=u({}),N,P,F=u({}),I=s.getCollectionsEntry(a);E=T.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)})),L(),V();function L(){M.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)),j.value=F.value.$value,Array.isArray(n.value)&&(!E.isPrimitiveArray.value||m)?I.value=n.value.map((t,n)=>{let{scope:l,unwrapped:u}=U(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 ve({$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:b,fieldName:x,schemaMode:m,overrides:S})||null}).filter(e=>!!e):I.value=[],F.value=_e({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:b,fieldName:x,schemaMode:m,overrides:S})}function R(){if(Array.isArray(n.value)&&(!E.isPrimitiveArray.value||m)){let t=A(I.value);I.value=n.value.map((t,n)=>{let o=f(()=>t);if(t.$id&&I.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}=U(r.value.$each,o,n);t&&O.push(t);let u=f(d?.value??{},`$each`),h=e(()=>p?.value?.$each??[]);return ve({$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:b,fieldName:x,schemaMode:m,overrides:S})||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 I.value=[]}function z(){N=_(n,()=>{P?.(),n.value!=null&&!Object.hasOwn(n.value,`$id`)&&!k.value?L():R(),B()},{deep:ee?1:!0,flush:`pre`}),B()}function B(){P=_(n,()=>{w.$autoDirty.value&&!w.$silent.value&&F.value.$touch(!1,!0)},{flush:`post`})}function V(){z(),C=t(),w=C.run(()=>{let r=e({get:()=>n.value,set(e){N?.(),P?.(),n.value=e,z()}}),i=e(()=>F.value.$dirty&&(!I.value.length||I.value.every(e=>e.$dirty))),o=e(()=>F.value.$anyDirty||I.value.some(e=>e.$anyDirty)),s=e(()=>F.value.$invalid||I.value.some(e=>e.$invalid)),d=e(()=>(m?F.value.$correct:D(F.value.$rules)?!0:F.value.$correct)&&(!I.value.length||I.value.every(e=>e.$correct||e.$anyDirty&&!e.$invalid))),f=e(()=>F.value.$error||I.value.some(e=>e.$error)),p=e(()=>!(s.value||_.value)),_=e(()=>F.value.$pending||I.value.some(e=>e.$pending)),S=e(()=>!!I.value.length&&I.value.every(e=>e.$edited)),C=e(()=>F.value.$anyEdited||I.value.some(e=>e.$anyEdited)),w=e(()=>({$self:F.value.$issues,$each:I.value.map(e=>e.$issues)})),T=e(()=>({$self:F.value.$errors,$each:I.value.map(e=>e.$errors)})),E=e(()=>({$self:F.value.$silentErrors,$each:I.value.map(e=>e.$silentErrors)})),k=e(()=>M.value.$rewardEarly==null?h(c.rewardEarly)==null?!1:h(c.rewardEarly):M.value.$rewardEarly),A=e(()=>k.value?!0:M.value.$silent==null?h(c.silent)==null?!1:h(c.silent):M.value.$silent),j=e(()=>M.value.$autoDirty==null?h(c.autoDirty)==null?!0:h(c.autoDirty):M.value.$autoDirty),L=e(()=>x??c.id??`root`),R=e(()=>({$deepCompare:M.value.$deepCompare??!1,$lazy:M.value.$lazy??!1,$rewardEarly:k.value,$autoDirty:j.value,$silent:A.value,$clearExternalErrorsOnChange:M.value.$clearExternalErrorsOnChange??!1}));function B(){b?.collections&&Object.entries(b?.collections).forEach(([e,c])=>{let m=t();V[e]=m.run(()=>{let e=u();return v(()=>{e.value=c(l({$dirty:i,$error:f,$path:a,$silentValue:r,$pending:_,$invalid:s,$correct:d,$errors:T,$silentErrors:E,$initialValue:g,$originalValue:y,$ready:p,$anyDirty:o,$name:L,$each:I,$self:F,$value:n,$edited:S,$anyEdited:C,$issues:w}))}),e}),O.push(m)})}let V={};return B(),{$dirty:i,$anyDirty:o,$invalid:s,$correct:d,$error:f,$pending:_,$errors:T,$silentErrors:E,$ready:p,$name:L,$shortcuts:V,$silentValue:r,$edited:S,$anyEdited:C,$rewardEarly:k,$silent:A,$autoDirty:j,$issues:w,$modifiers:R}}),E.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(){N?.(),F.value&&F.value.$unwatch(),I.value&&I.value.forEach(e=>{`$dirty`in e&&e.$unwatch()}),C.stop(),C=t(),T.stop(),T=t(!0),O.forEach(e=>e.stop()),O=[]}function W(e=!0,t=!1){F.value.$touch(e,t),I.value.forEach(n=>{n.$touch(e,t)})}function G(e,t){if(H(),!t)if(e?.toOriginalState)n.value=A(y),g.value=A(y);else if(e?.toInitialState)n.value=A(g.value);else if(e?.toState){let t;t=typeof e?.toState==`function`?e?.toState():e?.toState,g.value=A(t),n.value=A(t)}else g.value=A(n.value);e?.clearExternalErrors&&Y(),e?.keepValidationState||(F.value.$reset(e,t),I.value.forEach(t=>{t.$reset(e,!0)})),t||L()}function te(){F.value.$abort(),I.value.forEach(e=>{e.$abort()})}async function q(e){e&&(n.value=e);let t=n.value;try{return te(),{valid:(await Promise.allSettled([F.value.$validate(e),...I.value.map(e=>e.$validate())])).every(e=>e.status===`fulfilled`?e.value.valid===!0:!1),data:t,errors:w.$errors.value,issues:w.$issues.value}}catch{return{valid:!1,data:t,errors:w.$errors.value,issues:w.$issues.value}}}function J(e){e&&(n.value=e);try{return[F.value.$validateSync(e),...I.value.map(e=>e.$validateSync())].every(e=>!!e)}catch{return!1}}function Y(){F.value.$clearExternalErrors(),I.value.forEach(e=>{e.$clearExternalErrors()})}function X(e=!0){let t=I.value.map(t=>{if(ce(t))return t.$extractDirtyFields(e)});return e&&t.every(e=>D(e))&&(t=[]),t}let{$shortcuts:Z,...ne}=w;return l({$self:F,...ne,...Z,$path:a,$each:I,$value:n,$initialValue:g,$originalValue:y,$validate:q,$validateSync:J,$unwatch:H,$watch:V,$touch:W,$reset:G,$abort:te,$extractDirtyFields:X,$clearExternalErrors:Y,"~modifiers":w.$modifiers,...ge(q)})}function be({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(),C,w=[],T=null,E=null,O=null,k=null,j=u(void 0);async function M(t=!0){let o=Object.entries(n.value).filter(([e])=>e!==`$self`),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,xe({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,xe({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,xe({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,xe({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})]}));P.value={...l,...u,...d,...p},t&&L()}function N(){n.value.$self&&(j.value=_e({state:r,rulesDef:e(()=>n.value.$self??{}),path:i,cachePath:a,externalErrors:u(void 0),schemaErrors:u(void 0),initialState:f(m?.value??{},`$self`),originalState:g?.$self,fieldName:`$self`,...x}))}let P=x.storage.getFieldsEntry(a);M(),N();function F(){s&&(O=_(s,()=>{R(),M()},{deep:!0}))}function I(){k=_(r,()=>{R(),M(),C.$autoDirty.value&&!C.$silent.value&&V(!1,!0)},{flush:`post`})}function L(){o&&(T?.(),T=_(o,()=>{R(),M()},{deep:!0,flush:`pre`}),F()),d&&(E?.(),E=_(d,()=>{R(),M()},{deep:!0,flush:`post`})),I(),C=S.run(()=>{let a=e({get:()=>r.value,set(e){R(),r.value=e,M(),C.$autoDirty.value&&!C.$silent.value&&V(!1,!0)}}),o=e({get:()=>r.value,set(e){R(),r.value=e,M()}}),s=e(()=>{let e=P.value,t=Object.keys(e);if(!t.length)return!1;for(let n of t)if(!e[n]?.$dirty)return!1;return!0}),c=e(()=>{let e=P.value;for(let t in e)if(e[t]?.$anyDirty)return!0;return!1}),d=e(()=>{if(j.value?.$invalid)return!0;let e=P.value,t=Object.entries(e);if(!t.length)return!1;for(let[e,n]of t)if(n?.$invalid)return!0;return!1}),f=e(()=>{let e=Object.entries(P.value).reduce((e,[t,n])=>((!le(n)||!n.$inactive)&&e.push([t,n]),e),[]),t=n.value.$self&&!D(n.value.$self);if(e.length||t){let t=j.value?.$correct??!0,n=!1;return n=x.schemaMode?e.every(([e,t])=>t.$correct):e.every(([e,t])=>le(t)?`required`in t.$rules&&t.$rules.required.$active?t.$correct:!t.$invalid&&!t.$pending&&!t.$isDebouncing:t?.$correct),t&&n}return!1}),_=e(()=>{if(j.value?.$error)return!0;let e=P.value;if(!Object.keys(e).length)return!1;for(let t in e)if(e[t]?.$error)return!0;return!1}),b=e(()=>h(x.options.rewardEarly)==null?!1:h(x.options.rewardEarly)),S=e(()=>h(x.options.silent)==null?!!b.value:h(x.options.silent)),T=e(()=>h(x.options.autoDirty)==null?!0:h(x.options.autoDirty)),E=e(()=>!(d.value||k.value)),O=u(!1),k=e(()=>{if(j.value?.$pending||O.value)return!0;let e=P.value;for(let t in e)if(e[t]?.$pending)return!0;return!1}),A=e(()=>{let e={...j.value&&{$self:j.value?.$issues??[]}};for(let t in P.value)e[t]=P.value[t]?.$issues;return e}),N=e(()=>{let e={...j.value&&{$self:j.value?.$errors??[]}};for(let t in P.value)e[t]=P.value[t]?.$errors;return e}),F=e(()=>{let e={...j.value&&{$self:j.value?.$silentErrors??[]}};for(let t in P.value)e[t]=P.value[t]?.$silentErrors;return e}),I=e(()=>{if(j.value?.$edited)return!0;if(!Object.keys(P.value).length)return!1;for(let e in P.value)if(!P.value[e]?.$edited)return!1;return!0}),L=e(()=>{if(j.value?.$anyEdited)return!0;for(let e in P.value)if(P.value[e]?.$anyEdited)return!0;return!1}),z=e(()=>y??x.options.id??`root`),B=e(()=>({autoDirty:T.value,lazy:h(x.options.lazy)??!1,rewardEarly:b.value,silent:S.value,clearExternalErrorsOnChange:h(x.options.clearExternalErrorsOnChange)??!1,id:h(x.options.id)}));function H(){x.shortcuts?.nested&&Object.entries(x.shortcuts.nested).forEach(([e,n])=>{let a=t();W[e]=a.run(()=>{let e=u();return v(()=>{e.value=n(l({$dirty:s,$path:i,$value:r,$silentValue:o,$error:_,$originalValue:g,$pending:k,$invalid:d,$correct:f,$ready:E,$anyDirty:c,$name:z,$silentErrors:F,$initialValue:m,$errors:N,$fields:P,$edited:I,$anyEdited:L,$issues:A,$self:j,"~modifiers":h(x.options)}))}),e}),w.push(a)})}let U=e({get:()=>p?Object.fromEntries(Object.entries(p?.(P.value)??{}).map(([e,t])=>t.length?[e,{...Object.fromEntries([`$invalid`,`$error`,`$pending`,`$dirty`,`$correct`].map(e=>[e,Y(t,e)])),...Object.fromEntries([`$errors`,`$silentErrors`].map(e=>[e,X(t,e)]))}]:[])):{},set(){}}),W={};return H(),{$dirty:s,$anyDirty:c,$invalid:d,$correct:f,$error:_,$pending:k,$issues:A,$errors:N,$silentErrors:F,$ready:E,$name:z,$shortcuts:W,$groups:U,$silentValue:o,$edited:I,$anyEdited:L,$localPending:O,$autoDirty:T,$silent:S,$value:a,$modifiers:B}})}function R(){if(T?.(),O?.(),k?.(),E?.(),w=[],C={},P.value)for(let e of Object.values(P.value))e?.$unwatch()}function z(){let e=P.value;for(let t of Object.values(e))t.$clearExternalErrors();j.value?.$clearExternalErrors()}function B(e,t){if(O?.(),R(),!t)if(e?.toOriginalState)r.value=A({...g}),m.value=A({...g});else if(e?.toInitialState)r.value=A({...m.value});else if(e?.toState){let t;t=typeof e?.toState==`function`?e?.toState():e?.toState,m.value=A(t),r.value=A(t)}else m.value=A(r.value);if(!e?.keepValidationState){for(let t of Object.values(P.value))t?.$reset(e,!0);j.value?.$reset(e,!0)}e?.clearExternalErrors&&z(),F(),t||M()}function V(e=!0,t=!1){for(let n of Object.values(P.value))n?.$touch(e,t);j.value?.$touch(e,t)}function H(e){return e.filter(([e,t])=>b(t)&&!se(t)?!(t&&typeof t==`object`&&`_null`in t)&&!D(t):Array.isArray(t)?t.length:!0)}function U(e=!0){let t=Object.entries(P.value).map(([t,n])=>[t,n.$extractDirtyFields(e)]);return e&&(t=H(t)),Object.fromEntries(t)}function W(){for(let e of Object.values(P.value))e.$abort();j.value?.$abort()}async function G(e){try{if(e&&(r.value=e),x.schemaMode)return x.onValidate?(V(!1),C.$localPending.value=!0,x.onValidate()):{valid:!1,data:r.value,errors:C.$errors.value,issues:C.$issues.value};{let e=r.value;W();let t=[...Object.values(P.value).map(e=>e.$validate()),...j.value?[j.value?.$validate()]:[]];return{valid:(await Promise.allSettled(t)).every(e=>e.status===`fulfilled`&&e?.value?.valid===!0),data:e,errors:C.$errors.value,issues:C.$issues.value}}}catch{return{valid:!1,data:r.value,errors:C.$errors.value,issues:C.$issues.value}}finally{C.$localPending.value=!1}}function ee(e){try{return e&&(r.value=e),[...Object.values(P.value).map(e=>e.$validateSync()),...j.value?[j.value?.$validateSync()]:[]].every(e=>!!e)}catch{return!1}}let{$shortcuts:te,$localPending:K,...q}=C,J=l({...q,...te,$path:i,$initialValue:m,$originalValue:g,$self:j,$fields:P,$reset:B,$touch:V,$validate:G,$unwatch:R,$watch:L,$clearExternalErrors:z,$extractDirtyFields:U,$abort:W,$validateSync:ee,...o?{"~modifiers":C.$modifiers}:{},...ge(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(P.value))e?.$name&&Object.assign(J,{[e.$name]:e})}),J}function xe({rulesDef:e,...n}){if(ie(e,n.state))return ye({rulesDef:e,...n});if(re(n.state,e)){if(H(n.state))return be({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 be({rulesDef:e,...a,state:r.fakeState})}}else if(ae(e))return _e({rulesDef:i(e.value)?e.value:e,...n})}var Se=`1.18.3`;function Ce({initialState:e,originalState:t,options:n,scopeRules:i,state:a,customRules:o,shortcuts:s,schemaErrors:d,schemaMode:f=!1,onValidate:p,overrides:m}){let h=Z(),g=u(),v=u(),y,b;function x(){y=_(()=>n.externalErrors?.value,()=>{b?.(),n.externalErrors?.value&&Object.keys(n.externalErrors.value).some(e=>e.includes(`.`))?v.value=C(n.externalErrors.value):v.value=n.externalErrors?.value,S()},{immediate:!0,deep:!0})}function S(){b=_(()=>v.value,()=>{y?.(),n.externalErrors?.value&&(n.externalErrors.value=v.value),x()},{deep:!0})}return x(),re(a,i)?g.value=be({rootRules:i,rulesDef:i,state:a,customMessages:o?.(),storage:h,options:n,externalErrors:v,validationGroups:n.validationGroups,initialState:e,originalState:t,shortcuts:s,fieldName:void 0,path:``,cachePath:``,schemaErrors:d,rootSchemaErrors:d,schemaMode:f,onValidate:p,overrides:m}):ae(i)&&(g.value=_e({rulesDef:i,state:a,customMessages:o?.(),storage:h,options:n,externalErrors:v,initialState:e,originalState:t,shortcuts:s,fieldName:void 0,path:``,cachePath:``,schemaMode:f,schemaErrors:d,onValidate:p,overrides:m})),r()&&c(()=>{g.value?.$unwatch(),b?.(),y?.()}),l({regle:g})}function we({state:t,rulesFactory:n,options:r,globalOptions:a,customRules:o,shortcuts:s,overrides:c}){let l=i(n)?n:typeof n==`function`?void 0:e(()=>n),f={...a,...r},p,h=d(l??{});typeof n==`function`&&(p=v(()=>{h.value=n(t),m(h)}));let g=u(b(t.value)?{...A(t.value)}:A(t.value)),_=b(t.value)?{...A(t.value)}:A(t.value);return q(()=>{p?.()}),Ce({scopeRules:h,state:t,options:f,initialState:g,originalState:_,customRules:o,shortcuts:s,overrides:c})}function Te(e){let{rules:t,modifiers:n,shortcuts:r,overrides:a}=e??{},o={autoDirty:n?.autoDirty,lazy:n?.lazy,rewardEarly:n?.rewardEarly,silent:n?.silent,clearExternalErrorsOnChange:n?.clearExternalErrorsOnChange,immediateDirty:n?.immediateDirty};function s(e,n,s){return{r$:we({state:i(e)?e:u(e),rulesFactory:n,options:s,globalOptions:o,customRules:t,shortcuts:r,overrides:a}).regle}}return s}const Ee=Te();function De(){function e(e,t){return t}return e}const Oe=De();function ke(e,t){return x(h(e).$errors,String(t))}function Ae(e,t){return x(h(e).$issues,String(t))}function je(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&&b(r)&&`$each`in r&&r.$each&&b(r.$each)?t[n]=[je(r.$each)]:b(r)&&!D(r)&&!Object.entries(r).some(([e,t])=>$(t)||typeof t==`function`)?t[n]=je(r):t[n]=null}return t}function Me(t){let{rules:n,modifiers:r,shortcuts:a,overrides:o}=t??{},s={autoDirty:r?.autoDirty,lazy:r?.lazy,rewardEarly:r?.rewardEarly,silent:r?.silent,clearExternalErrorsOnChange:r?.clearExternalErrorsOnChange,immediateDirty:r?.immediateDirty};function c(t,r){let c=i(t)?t:typeof t==`function`?void 0:e(()=>t);return we({state:u(je(c?.value)),rulesFactory:c,options:r,globalOptions:s,customRules:n,shortcuts:a,overrides:o}).regle}return c}const Ne=Me();function Pe(e){if(E(e)){let t=e,n=class extends t{constructor(...e){return super(...e),Fe(this)}};return Object.defineProperty(n,`name`,{value:t.name}),Fe(n)}return Fe(e)}function Fe(e){return!w(e,Q.REGLE_STATIC)&&Object.isExtensible(e)&&T(e,Q.REGLE_STATIC,!0),e}function Ie({rules:e,modifiers:t,shortcuts:n,overrides:r}){let i=Te({rules:e,modifiers:t,shortcuts:n,overrides:r}),a=Me({rules:e,modifiers:t,shortcuts:n,overrides:r});return i.__config={rules:e,modifiers:t,shortcuts:n,overrides:r},a.__config={rules:e,modifiers:t,shortcuts:n,overrides:r},{useRegle:i,inferRules:De(),useRules:a}}function Le(e,{rules:t,modifiers:n,shortcuts:r,overrides:i}){let a=e.__config??{},o=()=>({...a.rules?.(),...t?.()}),s=a.modifiers&&n?S(a.modifiers,n):a.modifiers??n,c=a.shortcuts&&r?S(a.shortcuts,r):a.shortcuts??r,l=a.overrides&&i?S(a.overrides,i):a.overrides??i,u=Te({rules:o,modifiers:s,shortcuts:c,overrides:l});return u.__config={rules:o,modifiers:s,shortcuts:c,overrides:l},{useRegle:u,inferRules:De()}}function Re(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 ze(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`?Re(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})})}),Re(a,!n.asRecord)):Re(e[`~~global`]??{},!n.asRecord)}return{r$:s.r$}}return{useCollectScope:r}}function Be(t,r){let i=r??Ee;return{useScopedRegle:((r,a,o)=>{let{namespace:c,scopeKey:l,id:d,...f}=o??{};i.__config??={};let m=e(()=>d??l),h=e(()=>p(c)),g=u(`${Object.keys(t.value).length+1}-${K()}`),v=e(()=>m.value??`instance-${g.value}`),{r$:y}=i(r,a,{...f,id:m.value});x(),q(b),_(h,(e,t)=>{b(t),x()}),n()&&s(()=>{let e=n();typeof window<`u`&&e?.proxy?.$el?.parentElement&&document.documentElement&&!document.documentElement.contains(e?.proxy?.$el?.parentElement)&&b()});function b(e){let n=e??h.value;n?t.value[n]&&delete t.value[n][v.value]:t.value[`~~global`][v.value]&&delete t.value[`~~global`][v.value]}function x(){h.value?(t.value[h.value]||(t.value[h.value]={}),t.value[h.value][v.value]=y):(t.value[`~~global`]||(t.value[`~~global`]={}),t.value[`~~global`][v.value]=y)}return{r$:y,dispose:b,register:x}})}}function Ve(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}=Be(t,e?.customUseRegle),{useCollectScope:r}=ze(t,{asRecord:e?.asRecord});return{useScopedRegle:n,useCollectScope:r}}const{useCollectScope:He,useScopedRegle:Ue}=Ve(),We=He,Ge=Ue;function Ke(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=>b(e[n])&&!Object.keys(e[n]).some(e=>e===`literal`))||{})}function qe(e,t,n){return!!e&&b(e[t])&&`$value`in e[t]&&e[t]?.$value===n}function Je(e,t,n,r){let a=i(e)?f(e.value,`$fields`):f(e,`$fields`),s=u();return _(a,async()=>{await o(),qe(a.value,t,n)?s.value=f(e).value:s.value=void 0},{immediate:!0,flush:`pre`}),s}function Ye(e){return e}function Xe(e,t){return n=>S({...e},t(n))}const Ze={install(e){e.provide(ne,Se)}};export{I as InternalRuleType,Ze as RegleVuePlugin,V as createRule,Ve as createScopedUseRegle,Ke as createVariant,Ie as defineRegleConfig,Ye as defineRules,Le as extendRegleConfig,pe as flatErrors,ke as getErrors,Ae as getIssues,Oe as inferRules,Pe as markStatic,Re as mergeRegles,qe as narrowVariant,Xe as refineRules,L as unwrapRuleParameters,We as useCollectScope,Ee as useRegle,Ce as useRootStorage,Ne as useRules,Ge as useScopedRegle,Je as variantToRef};
7
+ import{computed as e,effectScope as t,getCurrentInstance as n,getCurrentScope as r,inject as i,isRef as a,markRaw as o,nextTick as s,onMounted as c,onScopeDispose as l,reactive as u,ref as d,shallowRef as f,toRef as p,toValue as m,triggerRef as h,unref as g,version as _,watch as v,watchEffect as y}from"vue";function b(e){return e?.constructor?.name==`File`}function x(e){return e&&(e instanceof Date||e.constructor.name==`File`||e.constructor.name==`FileList`)?!1:typeof e==`object`&&!!e&&!Array.isArray(e)}function S(e,t,n){if(!e)return n;var r,i;if(Array.isArray(t)&&(r=t.slice(0)),typeof t==`string`&&(r=t.split(`.`)),typeof t==`symbol`&&(r=[t]),!Array.isArray(r))throw Error(`props arg must be an array, a string or a symbol`);for(;r.length;)if(i=r.shift(),!e||!i||(e=e[i],e===void 0))return n;return e}function C(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 w(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 T(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function E(e,t,n,r=!1){Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})}function D(e){return typeof e==`function`&&!!e.prototype&&`constructor`in e.prototype&&e.prototype.constructor===e}function O(e,t=!0,n=!0){return e==null?!0:e instanceof Date?isNaN(e.getTime()):b(e)?e.size<=0:Array.isArray(e)?t?e.length===0:!1:x(e)?e==null?!0:n?Object.keys(e).length===0:!1:!String(e).length}const k=Symbol(`regle-rule`);function A(e){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 j(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=>j(e,t++)))),r==`Map`&&(n=new Map([...e].map(e=>[j(e[0]),j(e[1])]))),r==`Date`&&(n=new Date(e.getTime())),r==`RegExp`&&(n=RegExp(e.source,A(e))),r==`Array`||r==`Object`)for(let r in n=Array.isArray(e)?[]:{},e)n[r]=j(e[r],t++);return n}function M(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 N(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 P(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(!P(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(x(e)&&x(t)&&s&&(r||!r&&n)&&!P(e[s],t[s],n,!1))return!1}return!0}return e!==e&&t!==t}var F=class extends Error{constructor(e=`Promise was aborted`){super(e),this.name=`AbortError`}};function I(e){let t=new AbortController,{signal:n}=t,r=new Promise((t,r)=>{function i(){r(new F)}n.addEventListener(`abort`,i),e.then(e=>{n.removeEventListener(`abort`,i),n.aborted?r(new F):t(e)}).catch(e=>{n.removeEventListener(`abort`,i),n.aborted?r(new F):r(e)})});function i(e){t.abort(e)}return{promise:r,abort:i,signal:n}}const L={Inline:`__inline`,Async:`__async`};function R(e){try{return e.map(e=>m(e))}catch{return[]}}function z(t){return t.map(t=>t instanceof Function?e(t):a(t)?t:p(()=>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,a=i||r===L.Async||n.constructor.name===`AsyncFunction`;return o({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:a,_params:z(t),_brand:k})}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 x(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 K(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 ee=K(_,`3.5.0`)!==-1;function te(){return Math.floor(Math.random()*Date.now()).toString()}function q(){return typeof window>`u`?te():window.crypto.getRandomValues(new Uint32Array(1))[0].toString(10)}function J(e){return r()?(l(e),!0):!1}function Y(e){let n=!1,r,i=t(!0);return((...t)=>(n||=(r=i.run(()=>e(...t)),!0),r))}function X(e,t){return e.some(e=>t?e?.[t]:!1)}function Z(e,t){return t?e.reduce((e,n)=>{let r=n?.[t]||[];return e.concat(r)},[]):[]}function ne(){let e=f(new Map),t=f(new Map),n=f(new Map),i=f(new Map),a=f(new Map),o=f(new Map);function s(e){let n=t.value.get(e);if(n)return n;{let n=d({});return t.value.set(e,n),n}}function c(e){let t=n.value.get(e);if(t)return t;{let t=d([]);return n.value.set(e,t),t}}function u(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=d(!1),n=d(!0),r=d({}),i=d(!1);return a.value.set(e,{$pending:t,$valid:n,$metadata:r,$validating:i}),{$pending:t,$valid:n,$metadata:r,$validating:i}}}return r()&&l(()=>{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:c,getArrayStatus:p,addArrayStatus:u,deleteArrayStatus:m,arrayStatusStorage:o}}const Q=Symbol(`regle`),re=Symbol(`regle-config`),ie={REGLE_STATIC:`__regle_static`};function ae(e,t){return!le(e.value)&&(U(e)||x(t.value)&&!O(t.value)&&!Object.entries(t.value).some(([e,t])=>$(t)||typeof t==`function`))}function oe(e,t){return!!e.value&&x(e.value)&&`$each`in e.value||Array.isArray(t.value)}function se(e){return!!e.value&&(x(e.value)||U(e.value))}function $(e){return(x(e)||typeof e==`function`)&&`_validator`in e}function ce(e){return typeof e.value==`function`?`_validator`in e.value:!0}function le(e){return x(e)&&T(e,ie.REGLE_STATIC)&&e[ie.REGLE_STATIC]===!0}function ue(e){return x(e)&&`$fields`in e}function de(e){return!!e&&`$rules`in e}function fe({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 pe({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 me(e){return x(e)&&`$each`in e}function he(e,t){let{includePath:n=!1}=t??{};if(Array.isArray(e)&&e.every(e=>!x(e)))return e;if(me(e)){let t=n?e.$self?.map(e=>({message:e,path:[]}))??[]:e.$self??[],r=e.$each?.map(e=>ge(e,n))??[];return t?.concat(r.flat())}else return Object.entries(e).map(([e,t])=>ge(t,n,[e])).flat()}function ge(e,t=!1,n){let r=t&&!n?[]:n;if(Array.isArray(e)&&e.every(e=>!x(e)))return t?e.map(e=>({message:e,path:r??[]})):e;if(me(e)){let n=r?.length?e.$self?.map(e=>({message:e,path:r??[]}))??[]:e.$self??[],i=e.$each?.map((e,n)=>ge(e,t,r?.concat(n)))??[];return n?.concat(i.flat())}else return Object.entries(e).map(([e,n])=>ge(n,t,r?.concat(e))).flat()}function _e({customMessages:n,rule:r,ruleKey:i,state:a,path:o,cachePath:s,storage:c,modifiers:l}){let f=t(),p={},m,h=e(()=>$(r.value)&&r.value._async),g=d(!1),{$pending:_,$valid:y,$metadata:b,$validating:x}=c.trySetRuleStatusRef(`${s}.${i}`);function S(){f=t(),p=f.run(()=>{let t=d(!1),s=d(!1),c=d(!0),l=d(!1),u=d(!1),f=e(()=>({$value:a.value,$error:s.value,$dirty:t.value,$pending:l.value,$correct:u.value,$invalid:c.value,$rule:{$valid:y.value,$invalid:!y.value,$pending:_.value},$params:S.value,...b.value})),p=e(()=>{try{return ce(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),ce(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 O(e)&&(e=`This field is not valid`),e}),g=e(()=>m(`tooltip`)),v=e(()=>ce(r)&&r.value.type?r.value.type:i),x=e(()=>ce(r)?r.value.validator:r.value),S=e(()=>typeof r.value==`function`?[]:R(r.value._params??[]));return{$active:p,$message:h,$type:v,$validator:x,$params:S,$path:e(()=>`${o}.${i}`),$tooltip:g,$fieldCorrect:u,$fieldError:s,$fieldDirty:t,$fieldPending:l,$fieldInvalid:c}}),m=v(p?.$params,()=>{(!l.$silent.value||l.$rewardEarly.value&&p.$fieldError.value)&&E()},{deep:ee?1:!0})}S();function C(){y.value=!0,p.$fieldDirty.value&&(_.value=!0)}async function w(){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;C();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,b.value=n}}catch{e=!1}finally{_.value=!1}return e}function T(e,t=!0){if($(r.value)&&r.value._async)return!0;let n=e(a.value,...p.$params.value);if(n instanceof Promise)return!0;if(n!=null){if(typeof n==`boolean`)return n;{let{$valid:e,...t}=n;return b.value=t,e}}return!0}async function E(){try{x.value=!0;let e=!1;if(g.value=!0,$(r.value)&&r.value._async)e=await w();else{let t=p.$validator.value;e=T(t)}return y.value=e,e}catch{return!1}finally{x.value=!1,g.value=!1}}function D(){try{return x.value=!0,T(p.$validator.value)}catch{return!1}finally{x.value=!1}}function k(){y.value=!0,b.value={},_.value=!1,x.value=!1,S()}function A(){m(),f.stop(),f=t()}return u({...p,$pending:_,$valid:y,$metadata:b,$haveAsync:h,$maybePending:g,$validating:x,$parse:E,$parseSync:D,$unwatch:A,$watch:S,$reset:k})}function ve(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:he(i,{includePath:!0})}}}}}function ye({state:n,rulesDef:r,customMessages:i,path:a,cachePath:o,fieldName:s,storage:c,options:l,externalErrors:f,schemaErrors:m,schemaMode:h,onUnwatch:_,$isArray:b,initialState:S,originalState:C,shortcuts:w,overrides:T,onValidate:E}){let D=t(),k,A=[],F,L,R,z,B=()=>{},V,H=()=>{},U=d(!1);function W(){let e=r.value,t=c.checkRuleDeclEntry(o,e),s={};for(let t in e)t.startsWith(`$`)&&(s[t]=e[t]);Z.value=s,q();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=p(()=>t);u.push([e,_e({modifiers:{$silent:k.$silent,$rewardEarly:k.$rewardEarly},customMessages:i,rule:r,ruleKey:e,state:n,path:a,cachePath:o,storage:c,$debounce:Z.value.$debounce})])}X.value=Object.fromEntries(u),k.processShortcuts(),G(),K(),t?.valid!=null&&(k.$dirty.value=c.getDirtyState(o),(k.$dirty.value&&!k.$silent.value||k.$rewardEarly.value&&k.$error.value)&&B()),c.addRuleDeclEntry(o,e)}function G(){B=k.$debounce.value>0?N(Y,k.$debounce.value,{trackDebounceRef:U}):Y}function K(){H=k.$debounce.value>0?N(()=>{k.$dirty.value=!0},k.$debounce.value):()=>{k.$dirty.value=!0}}function te(){if(X.value)for(let e of Object.values(X.value))e.$unwatch();L(),z?.(),k.$dirty.value&&c.setDirtyEntry(o,k.$dirty.value),F?.(),D.stop(),D=t();for(let e of A)e.stop();A=[],_?.(),R?.()}function q(){if(X.value)for(let e of Object.values(X.value))e.$watch();k=D.run(()=>{let i=d(!1),a=d(!1),o=e(()=>i.value),c=e(()=>b||le(n.value)),p=e(()=>Z.value.$debounce==null?k.$haveAnyAsyncRule.value?200:0:Z.value.$debounce),_=e(()=>Z.value.$deepCompare==null?!1:Z.value.$deepCompare),v=e(()=>Z.value.$lazy==null?g(l.lazy)==null?!1:g(l.lazy)===!0:Z.value.$lazy),x=e(()=>Z.value.$immediateDirty==null?g(l.immediateDirty)==null?!1:g(l.immediateDirty)===!0:Z.value.$immediateDirty),C=e(()=>Z.value.$rewardEarly==null?g(l.rewardEarly)==null?!1:g(l.rewardEarly)===!0:!!Z.value.$rewardEarly),E=e(()=>Z.value.$clearExternalErrorsOnChange==null?g(l.clearExternalErrorsOnChange)==null?!D.value:g(l.clearExternalErrorsOnChange)===!0:!!Z.value.$clearExternalErrorsOnChange),D=e(()=>C.value?!0:Z.value.$silent==null?g(l.silent)==null?!1:g(l.silent)===!0:Z.value.$silent),j=e(()=>Z.value.$autoDirty==null?g(l.autoDirty)==null?!0:g(l.autoDirty)===!0:Z.value.$autoDirty),N=e(()=>{if(Z.value.$isEdited!=null)return Z.value.$isEdited;if(T?.isEdited!=null)return T.isEdited}),I=e(()=>{for(let e of Object.values(X.value))if(e.$validating)return!0;return!1}),L=e({get:()=>n.value,set(e){F(),n.value=e,J()}}),R=e(()=>U.value?Y.value&&i.value:Y.value&&!q.value&&i.value),z=e(()=>fe({field:{$rules:X.value,$error:R.value,$externalErrors:f?.value,$schemaErrors:m?.value,fieldName:ne.value}})),B=e(()=>fe({field:{$rules:X.value,$error:R.value,$externalErrors:f?.value,$schemaErrors:m?.value,fieldName:ne.value},silent:!0})),V=e(()=>z.value.map(e=>e.$message)),H=e(()=>B.value.map(e=>e.$message)),W=d(!1);function G(e,t){return t instanceof Date&&e instanceof Date?M(t).getDate()!==M(e).getDate():t==null?!!e:Array.isArray(e)&&Array.isArray(t)?!P(e,t,Z.value.$deepCompare):t!==e}y(()=>{i.value?N.value?W.value=N.value(n.value,S.value,G):W.value=G(n.value,S.value):W.value=!1});let K=e(()=>W.value),ee=e(()=>pe({field:{$rules:X.value}})),te=e(()=>!(Y.value||q.value)),q=e(()=>a.value||!C.value?Object.entries(X.value).some(([e,t])=>t.$pending):!1),Y=e(()=>f?.value?.length||m?.value?.length?!0:Q.value?!1:Object.values(X.value).some(e=>!e.$valid||e.$maybePending)),ne=e(()=>s??l.id??`root`),Q=e(()=>!h&&!Object.keys(r.value).some(e=>!e.startsWith(`$`))),re=e(()=>{if(f?.value?.length||Q.value||U.value)return!1;if(i.value&&!O(n.value)&&!I.value&&!q.value){if(h)return!m?.value?.length;{let e=Object.values(X.value);for(let t of e)if(t.$active&&!t.$valid)return!1;return e.some(e=>e.$active)}}return!1}),ie=e(()=>Object.values(X.value).some(e=>e.$haveAsync)),ae=e(()=>({$debounce:p.value,$lazy:v.value,$rewardEarly:C.value,$autoDirty:j.value,$silent:D.value,$clearExternalErrorsOnChange:E.value,$immediateDirty:x.value,$isEdited:N.value}));function oe(){w?.fields&&Object.entries(w.fields).forEach(([e,r])=>{let a=t();se[e]=a.run(()=>{let e=d();return y(()=>{e.value=r(u({$dirty:i,$externalErrors:f?.value??[],$value:n,$silentValue:L,$rules:X,$error:R,$pending:q,$invalid:Y,$correct:re,$errors:V,$ready:te,$silentErrors:H,$anyDirty:o,$tooltips:ee,$name:ne,$inactive:Q,$edited:W,$anyEdited:K}))}),e}),A.push(a)})}let se={};return{$error:R,$pending:q,$invalid:Y,$correct:re,$debounce:p,$deepCompare:_,$lazy:v,$immediateDirty:x,$ready:te,$issues:z,$silentIssues:B,$errors:V,$silentErrors:H,$rewardEarly:C,$autoDirty:j,$silent:D,$clearExternalErrorsOnChange:E,$anyDirty:o,$edited:W,$anyEdited:K,$name:ne,$haveAnyAsyncRule:ie,$shortcuts:se,$validating:I,$tooltips:ee,$dirty:i,processShortcuts:oe,$silentValue:L,$inactive:Q,$modifiers:ae,$isArrayOrRegleStatic:c}}),J(),L=v(k.$dirty,e=>{c.setDirtyEntry(o,e),Object.values(X.value).forEach(t=>{t.$fieldDirty=e})}),z=v([k.$error,k.$correct,k.$invalid,k.$pending],()=>{Object.values(X.value).forEach(e=>{e.$fieldError=k.$error.value,e.$fieldInvalid=k.$invalid.value,e.$fieldPending=k.$pending.value,e.$fieldCorrect=k.$correct.value})}),R=v(k.$haveAnyAsyncRule,G)}function J(){F=v(n,()=>{k.$autoDirty.value&&!k.$silent.value&&(k.$dirty.value||H()),r.value instanceof Function&&W(),(!k.$silent.value||k.$rewardEarly.value&&k.$error.value)&&B(),k.$clearExternalErrorsOnChange.value&&ce()},{deep:k.$isArrayOrRegleStatic.value?!0:ee?1:!0})}async function Y(){try{let{promise:e}=re(Promise.allSettled(Object.values(X.value).map(e=>e.$parse())));await e}catch{}}let X=d({}),Z=d({});W();function ne(e,t){if(Q(),ce(),k.$dirty.value=!1,c.setDirtyEntry(o,!1),!t)if(e?.toOriginalState)n.value=j(C),S.value=j(C);else if(e?.toInitialState)n.value=j(S.value);else if(e?.toState){let t;t=typeof e?.toState==`function`?e?.toState():e?.toState,S.value=j(t),n.value=j(t)}else S.value=x(n.value)&&!le(n.value)?j(n.value):Array.isArray(n.value)?[...n.value]:n.value;if(e?.clearExternalErrors&&ce(),!t&&!e?.keepValidationState)for(let e of Object.values(X.value))e.$reset();if(!k.$lazy.value&&!k.$silent.value&&!t)for(let e of Object.values(X.value))e.$parse()}function Q(){`cancel`in B&&B.cancel()}function re(e){return V&&V.abort(),V=I(e),V}function ie(){Q(),V&&V.abort()}function ae(e=!0,t=!1){k.$dirty.value||H(),t&&e?(!k.$silent.value||k.$rewardEarly.value&&k.$error.value)&&(Q(),B()):e&&(Q(),B())}async function oe(e){try{if(e&&(n.value=e),h)return E?(ae(!1),E()):{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&&!U.value&&!k.$haveAnyAsyncRule.value)return{valid:!k.$error.value,data:t,errors:k.$errors.value,issues:k.$issues.value};if(h)return{valid:!m?.value?.length,data:t,errors:k.$errors.value,issues:k.$issues.value};if(O(X.value))return{valid:!0,data:t,errors:k.$errors.value,issues:k.$issues.value};ie();let{promise:r}=re(Promise.allSettled(Object.values(X.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 se(e){try{return e&&(n.value=e),k.$dirty.value||(k.$dirty.value=!0),h?!1:Object.values(X.value).map(e=>e.$parseSync()).every(e=>!!e)}catch{return!1}}function $(e=!0){return k.$dirty.value?n.value:e?{_null:!0}:null}function ce(){f?.value?.length&&(f.value=[])}!k.$lazy.value&&!k.$dirty.value&&!k.$silent.value&&Y(),k.$immediateDirty.value&&(k.$dirty.value=!0);let{$shortcuts:ue,$validating:de,$autoDirty:me,$rewardEarly:he,$clearExternalErrorsOnChange:ge,$haveAnyAsyncRule:ye,$debounce:be,$lazy:xe,...Se}=k;return u({...Se,$externalErrors:f,$value:n,$initialValue:S,$originalValue:C,$rules:X,...ue,$path:a,$isDebouncing:U,$reset:ne,$touch:ae,$validate:oe,$validateSync:se,$unwatch:te,$watch:q,$extractDirtyFields:$,$clearExternalErrors:ce,$abort:ie,$schemaMode:h,"~modifiers":k.$modifiers,...ve(oe)})}function be({$id:t,path:n,cachePath:r,index:i,options:a,storage:o,stateValue:s,customMessages:c,rules:l,externalErrors:u,schemaErrors:d,initialState:f,originalState:m,shortcuts:h,fieldName:g,schemaMode:_,overrides:v}){let y=s.value?.$id??l.$key??q(),b=`${r}.${String(y)}`,S=`${n}.${i}`;typeof s.value==`object`&&s.value!=null&&(s.value.$id||Object.defineProperties(s.value,{$id:{value:y,enumerable:!1,configurable:!1,writable:!1}}));let C=p(u?.value??[],i),w=e(()=>d?.value?.[i]),T=Ce({index:i,state:s,rulesDef:p(()=>l),customMessages:c,path:S,cachePath:b,storage:o,options:a,externalErrors:C,schemaErrors:w,initialState:f,originalState:m,shortcuts:h,fieldName:g,schemaMode:_,overrides:v});return T&&(T.$id=s.value?.$id??String(y),o.addArrayStatus(t,T.$id,T)),s.value&&(!x(s.value)||le(s.value))&&_&&T?.$touch(),T}function xe({state:n,rulesDef:r,customMessages:i,path:a,cachePath:o,storage:s,options:c,externalErrors:l,schemaErrors:f,schemaMode:m,initialState:h,originalState:_,shortcuts:b,fieldName:x,overrides:S}){let C=t(),w,T=t(),E,D=[];if(!Array.isArray(n.value)&&!r.value.$each)return;let k=d(),A=d(n.value),M=d({}),N,P,F=d({}),I=s.getCollectionsEntry(a);E=T.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)})),L(),V();function L(){M.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=q(),Object.defineProperties(n.value,{$id:{value:k.value,enumerable:!1,configurable:!1,writable:!1}})):n.value?.$id&&(k.value=n.value.$id)),A.value=F.value.$value,Array.isArray(n.value)&&(!E.isPrimitiveArray.value||m)?I.value=n.value.map((t,n)=>{let{scope:u,unwrapped:d}=W(r.value.$each,p(()=>t),n);u&&D.push(u);let g=p(h.value??[],n),v=p(l?.value??{},`$each`),y=e(()=>f?.value?.$each);return be({$id:k.value,path:a,cachePath:o,customMessages:i,rules:d??{},stateValue:p(()=>t),index:n,options:c,storage:s,externalErrors:v,schemaErrors:y,initialState:g,originalState:_,shortcuts:b,fieldName:x,schemaMode:m,overrides:S})||null}).filter(e=>!!e):I.value=[],F.value=ye({state:n,rulesDef:r,customMessages:i,path:a,cachePath:a,storage:s,options:c,externalErrors:p(l?.value??{},`$self`),schemaErrors:e(()=>f?.value?.$self),$isArray:!0,initialState:h,originalState:_,shortcuts:b,fieldName:x,schemaMode:m,overrides:S})}function R(){if(Array.isArray(n.value)&&(!E.isPrimitiveArray.value||m)){let t=j(I.value);I.value=n.value.map((t,n)=>{let o=p(()=>t);if(t.$id&&I.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:u}=W(r.value.$each,o,n);t&&D.push(t);let d=p(l?.value??{},`$each`),g=e(()=>f?.value?.$each??[]);return be({$id:k.value,path:a,cachePath:a,customMessages:i,rules:u??{},stateValue:o,index:n,options:c,storage:s,externalErrors:d,schemaErrors:g,initialState:p(h.value??[],n),originalState:_,shortcuts:b,fieldName:x,schemaMode:m,overrides:S})||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 I.value=[]}function z(){N=v(n,()=>{P?.(),n.value!=null&&!Object.hasOwn(n.value,`$id`)&&!k.value?L():R(),B()},{deep:ee?1:!0,flush:`pre`}),B()}function B(){P=v(n,()=>{w.$autoDirty.value&&!w.$silent.value&&F.value.$touch(!1,!0)},{flush:`post`})}function V(){z(),C=t(),w=C.run(()=>{let r=e({get:()=>n.value,set(e){N?.(),P?.(),n.value=e,z()}}),i=e(()=>F.value.$dirty&&(!I.value.length||I.value.every(e=>e.$dirty))),o=e(()=>F.value.$anyDirty||I.value.some(e=>e.$anyDirty)),s=e(()=>F.value.$invalid||I.value.some(e=>e.$invalid)),l=e(()=>(m?F.value.$correct:O(F.value.$rules)?!0:F.value.$correct)&&(!I.value.length||I.value.every(e=>e.$correct||e.$anyDirty&&!e.$invalid))),f=e(()=>F.value.$error||I.value.some(e=>e.$error)),p=e(()=>!(s.value||v.value)),v=e(()=>F.value.$pending||I.value.some(e=>e.$pending)),C=e(()=>!!I.value.length&&I.value.every(e=>e.$edited)),w=e(()=>F.value.$anyEdited||I.value.some(e=>e.$anyEdited)),T=e(()=>({$self:F.value.$issues,$each:I.value.map(e=>e.$issues)})),E=e(()=>({$self:F.value.$errors,$each:I.value.map(e=>e.$errors)})),k=e(()=>({$self:F.value.$silentErrors,$each:I.value.map(e=>e.$silentErrors)})),A=e(()=>M.value.$rewardEarly==null?g(c.rewardEarly)==null?!1:g(c.rewardEarly)===!0:M.value.$rewardEarly),j=e(()=>A.value?!0:M.value.$silent==null?g(c.silent)==null?!1:g(c.silent)===!0:M.value.$silent),L=e(()=>M.value.$autoDirty==null?g(c.autoDirty)==null?!0:g(c.autoDirty)===!0:M.value.$autoDirty),R=e(()=>M.value.$immediateDirty==null?g(c.immediateDirty)==null?!1:g(c.immediateDirty)===!0:M.value.$immediateDirty),B=e(()=>{if(M.value.$isEdited!=null)return M.value.$isEdited;if(S?.isEdited!=null)return S.isEdited}),V=e(()=>x??c.id??`root`),H=e(()=>({$deepCompare:M.value.$deepCompare??!1,$debounce:M.value.$debounce??0,$lazy:M.value.$lazy??!1,$rewardEarly:A.value,$autoDirty:L.value,$silent:j.value,$clearExternalErrorsOnChange:M.value.$clearExternalErrorsOnChange??!1,$immediateDirty:R.value,$isEdited:B.value}));function U(){b?.collections&&Object.entries(b?.collections).forEach(([e,c])=>{let m=t();W[e]=m.run(()=>{let e=d();return y(()=>{e.value=c(u({$dirty:i,$error:f,$path:a,$silentValue:r,$pending:v,$invalid:s,$correct:l,$errors:E,$silentErrors:k,$initialValue:h,$originalValue:_,$ready:p,$anyDirty:o,$name:V,$each:I,$self:F,$value:n,$edited:C,$anyEdited:w,$issues:T}))}),e}),D.push(m)})}let W={};return U(),{$dirty:i,$anyDirty:o,$invalid:s,$correct:l,$error:f,$pending:v,$errors:E,$silentErrors:k,$ready:p,$name:V,$shortcuts:W,$silentValue:r,$edited:C,$anyEdited:w,$rewardEarly:A,$silent:j,$autoDirty:L,$issues:T,$modifiers:H}}),E.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(){N?.(),F.value&&F.value.$unwatch(),I.value&&I.value.forEach(e=>{`$dirty`in e&&e.$unwatch()}),C.stop(),C=t(),T.stop(),T=t(!0),D.forEach(e=>e.stop()),D=[]}function U(e=!0,t=!1){F.value.$touch(e,t),I.value.forEach(n=>{n.$touch(e,t)})}function G(e,t){if(H(),!t)if(e?.toOriginalState)n.value=j(_),h.value=j(_);else if(e?.toInitialState)n.value=j(h.value);else if(e?.toState){let t;t=typeof e?.toState==`function`?e?.toState():e?.toState,h.value=j(t),n.value=j(t)}else h.value=j(n.value);e?.clearExternalErrors&&Y(),e?.keepValidationState||(F.value.$reset(e,t),I.value.forEach(t=>{t.$reset(e,!0)})),t||L()}function K(){F.value.$abort(),I.value.forEach(e=>{e.$abort()})}async function te(e){e&&(n.value=e);let t=n.value;try{return K(),{valid:(await Promise.allSettled([F.value.$validate(e),...I.value.map(e=>e.$validate())])).every(e=>e.status===`fulfilled`?e.value.valid===!0:!1),data:t,errors:w.$errors.value,issues:w.$issues.value}}catch{return{valid:!1,data:t,errors:w.$errors.value,issues:w.$issues.value}}}function J(e){e&&(n.value=e);try{return[F.value.$validateSync(e),...I.value.map(e=>e.$validateSync())].every(e=>!!e)}catch{return!1}}function Y(){F.value.$clearExternalErrors(),I.value.forEach(e=>{e.$clearExternalErrors()})}function X(e=!0){let t=I.value.map(t=>{if(ue(t))return t.$extractDirtyFields(e)});return e&&t.every(e=>O(e))&&(t=[]),t}let{$shortcuts:Z,...ne}=w;return u({$self:F,...ne,...Z,$path:a,$each:I,$value:n,$initialValue:h,$originalValue:_,$validate:te,$validateSync:J,$unwatch:H,$watch:V,$touch:U,$reset:G,$abort:K,$extractDirtyFields:X,$clearExternalErrors:Y,"~modifiers":w.$modifiers,...ve(te)})}function Se({rulesDef:n,state:r,path:i=``,cachePath:a,rootRules:o,externalErrors:s,schemaErrors:c,rootSchemaErrors:l,validationGroups:f,initialState:m,originalState:h,fieldName:_,...b}){let S=t(),C,w=[],T=null,E=null,D=null,k=null,A=d(void 0);async function M(t=!0){let o=Object.entries(n.value).filter(([e])=>e!==`$self`),l=Object.fromEntries(o.reduce((t,[n,o])=>{if(!o)return t;let l=p(r.value??{},n),u=p(()=>o),d=p(s?.value??{},n),f=e(()=>c?.value?.[n]),g=p(m?.value??{},n);return t.push([n,Ce({state:l,rulesDef:u,path:i?`${i}.${n}`:n,cachePath:a?`${a}.${n}`:n,externalErrors:d,schemaErrors:f,initialState:g,originalState:h?.[n],fieldName:n,...b})]),t},[])),u=Object.fromEntries(Object.entries(g(s)??{}).filter(([e,t])=>!(e in n.value)&&!!t).map(([t])=>{let n=p(r.value??{},t),o=p(s?.value??{},t),l=e(()=>c?.value?.[t]),u=p(m?.value??{},t),d=i?`${i}.${t}`:t,f=a?`${a}.${t}`:t;return[t,Ce({state:n,rulesDef:e(()=>({})),path:d,cachePath:f,externalErrors:o,schemaErrors:l,initialState:u,originalState:h?.[t],fieldName:t,...b})]})),d=Object.fromEntries(Object.entries(g(c)??{}).map(([t])=>{let n=i?`${i}.${t}`:t,o=a?`${a}.${t}`:t,l=p(r.value??{},t),u=p(s?.value??{},t),d=e(()=>c?.value?.[t]),f=p(m?.value??{},t);return[t,Ce({state:l,rulesDef:e(()=>({})),path:n,cachePath:o,externalErrors:u,schemaErrors:d,initialState:f,originalState:h?.[t],fieldName:t,...b})]})),f=Object.fromEntries(Object.entries(r.value??{}).filter(([e])=>!(e in n.value)&&!(e in(u??{}))&&!(e in(d??{}))).map(([t])=>{let n=p(r.value??{},t),o=p(s?.value??{},t),l=e(()=>c?.value?.[t]),u=p(m?.value??{},t);return[t,Ce({state:n,rulesDef:e(()=>({})),path:i?`${i}.${t}`:t,cachePath:a?`${a}.${t}`:t,externalErrors:o,schemaErrors:l,initialState:u,originalState:h?.[t],fieldName:t,...b})]}));P.value={...l,...u,...d,...f},t&&L()}function N(){n.value.$self&&(A.value=ye({state:r,rulesDef:e(()=>n.value.$self??{}),path:i,cachePath:a,externalErrors:d(void 0),schemaErrors:d(void 0),initialState:p(m?.value??{},`$self`),originalState:h?.$self,fieldName:`$self`,...b}))}let P=b.storage.getFieldsEntry(a);M(),N();function F(){s&&(D=v(s,()=>{R(),M()},{deep:!0}))}function I(){k=v(r,()=>{R(),M(),C.$autoDirty.value&&!C.$silent.value&&V(!1,!0)},{flush:`post`})}function L(){o&&(T?.(),T=v(o,()=>{R(),M()},{deep:!0,flush:`pre`}),F()),l&&(E?.(),E=v(l,()=>{R(),M()},{deep:!0,flush:`post`})),I(),C=S.run(()=>{let a=e({get:()=>r.value,set(e){R(),r.value=e,M(),C.$autoDirty.value&&!C.$silent.value&&V(!1,!0)}}),o=e({get:()=>r.value,set(e){R(),r.value=e,M()}}),s=e(()=>{let e=P.value,t=Object.keys(e);if(!t.length)return!1;for(let n of t)if(!e[n]?.$dirty)return!1;return!0}),c=e(()=>{let e=P.value;for(let t in e)if(e[t]?.$anyDirty)return!0;return!1}),l=e(()=>{if(A.value?.$invalid)return!0;let e=P.value,t=Object.entries(e);if(!t.length)return!1;for(let[e,n]of t)if(n?.$invalid)return!0;return!1}),p=e(()=>{let e=Object.entries(P.value).reduce((e,[t,n])=>((!de(n)||!n.$inactive)&&e.push([t,n]),e),[]),t=n.value.$self&&!O(n.value.$self);if(e.length||t){let t=A.value?.$correct??!0,n=!1;return n=b.schemaMode?e.every(([e,t])=>t.$correct):e.every(([e,t])=>de(t)?`required`in t.$rules&&t.$rules.required.$active?t.$correct:!t.$invalid&&!t.$pending&&!t.$isDebouncing:t?.$correct),t&&n}return!1}),v=e(()=>{if(A.value?.$error)return!0;let e=P.value;if(!Object.keys(e).length)return!1;for(let t in e)if(e[t]?.$error)return!0;return!1}),x=e(()=>g(b.options.rewardEarly)==null?!1:g(b.options.rewardEarly)),S=e(()=>g(b.options.silent)==null?!!x.value:g(b.options.silent)===!0),T=e(()=>g(b.options.autoDirty)==null?!0:g(b.options.autoDirty)===!0),E=e(()=>g(b.options.immediateDirty)==null?!1:g(b.options.immediateDirty)===!0),D=e(()=>g(b.options.lazy)==null?!1:g(b.options.lazy)===!0),k=e(()=>g(b.options.clearExternalErrorsOnChange)==null?!1:g(b.options.clearExternalErrorsOnChange)===!0),j=e(()=>!(l.value||F.value)),N=d(!1),F=e(()=>{if(A.value?.$pending||N.value)return!0;let e=P.value;for(let t in e)if(e[t]?.$pending)return!0;return!1}),I=e(()=>{let e={...A.value&&{$self:A.value?.$issues??[]}};for(let t in P.value)e[t]=P.value[t]?.$issues;return e}),L=e(()=>{let e={...A.value&&{$self:A.value?.$errors??[]}};for(let t in P.value)e[t]=P.value[t]?.$errors;return e}),z=e(()=>{let e={...A.value&&{$self:A.value?.$silentErrors??[]}};for(let t in P.value)e[t]=P.value[t]?.$silentErrors;return e}),B=e(()=>{if(A.value?.$edited)return!0;if(!Object.keys(P.value).length)return!1;for(let e in P.value)if(!P.value[e]?.$edited)return!1;return!0}),H=e(()=>{if(A.value?.$anyEdited)return!0;for(let e in P.value)if(P.value[e]?.$anyEdited)return!0;return!1}),U=e(()=>_??b.options.id??`root`),W=e(()=>({autoDirty:T.value,lazy:D.value,rewardEarly:x.value,silent:S.value,clearExternalErrorsOnChange:k.value,immediateDirty:E.value,id:g(b.options.id)}));function G(){b.shortcuts?.nested&&Object.entries(b.shortcuts.nested).forEach(([e,n])=>{let a=t();ee[e]=a.run(()=>{let e=d();return y(()=>{e.value=n(u({$dirty:s,$path:i,$value:r,$silentValue:o,$error:v,$originalValue:h,$pending:F,$invalid:l,$correct:p,$ready:j,$anyDirty:c,$name:U,$silentErrors:z,$initialValue:m,$errors:L,$fields:P,$edited:B,$anyEdited:H,$issues:I,$self:A,"~modifiers":g(b.options)}))}),e}),w.push(a)})}let K=e({get:()=>f?Object.fromEntries(Object.entries(f?.(P.value)??{}).map(([e,t])=>t.length?[e,{...Object.fromEntries([`$invalid`,`$error`,`$pending`,`$dirty`,`$correct`].map(e=>[e,X(t,e)])),...Object.fromEntries([`$errors`,`$silentErrors`].map(e=>[e,Z(t,e)]))}]:[])):{},set(){}}),ee={};return G(),{$dirty:s,$anyDirty:c,$invalid:l,$correct:p,$error:v,$pending:F,$issues:I,$errors:L,$silentErrors:z,$ready:j,$name:U,$shortcuts:ee,$groups:K,$silentValue:o,$edited:B,$anyEdited:H,$localPending:N,$autoDirty:T,$silent:S,$value:a,$modifiers:W}})}function R(){if(T?.(),D?.(),k?.(),E?.(),w=[],C={},P.value)for(let e of Object.values(P.value))e?.$unwatch()}function z(){let e=P.value;for(let t of Object.values(e))t.$clearExternalErrors();A.value?.$clearExternalErrors()}function B(e,t){if(D?.(),R(),!t)if(e?.toOriginalState)r.value=j({...h}),m.value=j({...h});else if(e?.toInitialState)r.value=j({...m.value});else if(e?.toState){let t;t=typeof e?.toState==`function`?e?.toState():e?.toState,m.value=j(t),r.value=j(t)}else m.value=j(r.value);if(!e?.keepValidationState){for(let t of Object.values(P.value))t?.$reset(e,!0);A.value?.$reset(e,!0)}e?.clearExternalErrors&&z(),F(),t||M()}function V(e=!0,t=!1){for(let n of Object.values(P.value))n?.$touch(e,t);A.value?.$touch(e,t)}function H(e){return e.filter(([e,t])=>x(t)&&!le(t)?!(t&&typeof t==`object`&&`_null`in t)&&!O(t):Array.isArray(t)?t.length:!0)}function U(e=!0){let t=Object.entries(P.value).map(([t,n])=>[t,n.$extractDirtyFields(e)]);return e&&(t=H(t)),Object.fromEntries(t)}function W(){for(let e of Object.values(P.value))e.$abort();A.value?.$abort()}async function G(e){try{if(e&&(r.value=e),b.schemaMode)return b.onValidate?(V(!1),C.$localPending.value=!0,b.onValidate()):{valid:!1,data:r.value,errors:C.$errors.value,issues:C.$issues.value};{let e=r.value;W();let t=[...Object.values(P.value).map(e=>e.$validate()),...A.value?[A.value?.$validate()]:[]];return{valid:(await Promise.allSettled(t)).every(e=>e.status===`fulfilled`&&e?.value?.valid===!0),data:e,errors:C.$errors.value,issues:C.$issues.value}}}catch{return{valid:!1,data:r.value,errors:C.$errors.value,issues:C.$issues.value}}finally{C.$localPending.value=!1}}function K(e){try{return e&&(r.value=e),[...Object.values(P.value).map(e=>e.$validateSync()),...A.value?[A.value?.$validateSync()]:[]].every(e=>!!e)}catch{return!1}}let{$shortcuts:ee,$localPending:te,...q}=C,J=u({...q,...ee,$path:i,$initialValue:m,$originalValue:h,$self:A,$externalErrors:s,$fields:P,$reset:B,$touch:V,$validate:G,$unwatch:R,$watch:L,$clearExternalErrors:z,$extractDirtyFields:U,$abort:W,$validateSync:K,...o?{"~modifiers":C.$modifiers}:{},...ve(G)});return y(()=>{for(let e of Object.keys(J).filter(e=>!e.startsWith(`$`)&&!e.startsWith(`~`)))delete J[e];for(let e of Object.values(P.value))e?.$name&&Object.assign(J,{[e.$name]:e})}),J}function Ce({rulesDef:e,...n}){if(oe(e,n.state))return xe({rulesDef:e,...n});if(ae(n.state,e)){if(U(n.state))return Se({rulesDef:e,...n});{let r=t().run(()=>{let e=p(n.state.value?n.state:d({}));return v(()=>n.state.value,t=>{e.value=t},{deep:!0}),v(e,e=>{n.state.value=e},{deep:!0}),{fakeState:e}}),{state:i,...a}=n;return Se({rulesDef:e,...a,state:r.fakeState})}}else if(se(e))return ye({rulesDef:a(e.value)?e.value:e,...n})}var we=`1.19.0-beta.2`;function Te({initialState:e,originalState:t,options:n,scopeRules:i,state:a,customRules:o,shortcuts:s,schemaErrors:c,schemaMode:f=!1,onValidate:p,overrides:m}){let h=ne(),g=d(),_=d(),y,b;function x(){y=v(()=>n.externalErrors?.value,()=>{b?.(),n.externalErrors?.value&&Object.keys(n.externalErrors.value).some(e=>e.includes(`.`))?_.value=w(n.externalErrors.value):_.value=n.externalErrors?.value,S()},{immediate:!0,deep:!0})}function S(){b=v(()=>_.value,()=>{y?.(),n.externalErrors?.value&&(n.externalErrors.value=_.value),x()},{deep:!0})}return x(),ae(a,i)?g.value=Se({rootRules:i,rulesDef:i,state:a,customMessages:o?.(),storage:h,options:n,externalErrors:_,validationGroups:n.validationGroups,initialState:e,originalState:t,shortcuts:s,fieldName:void 0,path:``,cachePath:``,schemaErrors:c,rootSchemaErrors:c,schemaMode:f,onValidate:p,overrides:m}):se(i)&&(g.value=ye({rulesDef:i,state:a,customMessages:o?.(),storage:h,options:n,externalErrors:_,initialState:e,originalState:t,shortcuts:s,fieldName:void 0,path:``,cachePath:``,schemaMode:f,schemaErrors:c,onValidate:p,overrides:m})),r()&&l(()=>{g.value?.$unwatch(),b?.(),y?.()}),u({regle:g})}function Ee({state:t,rulesFactory:n,options:r,globalOptions:o,customRules:s,shortcuts:c,overrides:l}){let u=a(n)?n:typeof n==`function`?void 0:e(()=>n),p=i(re,void 0)??{},m={...p.modifiers,...o},g=()=>({...p.rules?.(),...s?.()}),_={...p.shortcuts,...c},v={...p.overrides,...l},b={...m,...r},S,C=f(u??{});typeof n==`function`&&(S=y(()=>{C.value=n(t),h(C)}));let w=d(x(t.value)?{...j(t.value)}:j(t.value)),T=x(t.value)?{...j(t.value)}:j(t.value);return J(()=>{S?.()}),Te({scopeRules:C,state:t,options:b,initialState:w,originalState:T,customRules:g,shortcuts:_,overrides:v})}function De(e){let{rules:t,modifiers:n={},shortcuts:r,overrides:i}=e??{};function o(e,o,s){return{r$:Ee({state:a(e)?e:d(e),rulesFactory:o,options:s,globalOptions:n,customRules:t,shortcuts:r,overrides:i}).regle}}return o}const Oe=De();function ke(){function e(e,t){return t}return e}const Ae=ke();function je(e,t){return S(g(e).$errors,String(t))}function Me(e,t){return S(g(e).$issues,String(t))}function Ne(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&&x(r)&&`$each`in r&&r.$each&&x(r.$each)?t[n]=[Ne(r.$each)]:x(r)&&!O(r)&&!Object.entries(r).some(([e,t])=>$(t)||typeof t==`function`)?t[n]=Ne(r):t[n]=null}return t}function Pe(t){let{rules:n,modifiers:r={},shortcuts:i,overrides:o}=t??{};function s(t,s){let c=a(t)?t:typeof t==`function`?void 0:e(()=>t);return Ee({state:d(Ne(c?.value)),rulesFactory:c,options:s,globalOptions:r,customRules:n,shortcuts:i,overrides:o}).regle}return s}const Fe=Pe();function Ie(e){if(D(e)){let t=e,n=class extends t{constructor(...e){return super(...e),Le(this)}};return Object.defineProperty(n,`name`,{value:t.name}),Le(n)}return Le(e)}function Le(e){return!T(e,ie.REGLE_STATIC)&&Object.isExtensible(e)&&E(e,ie.REGLE_STATIC,!0),e}function Re({rules:e,modifiers:t,shortcuts:n,overrides:r}){let i=De({rules:e,modifiers:t,shortcuts:n,overrides:r}),a=Pe({rules:e,modifiers:t,shortcuts:n,overrides:r});return i.__config={rules:e,modifiers:t,shortcuts:n,overrides:r},a.__config={rules:e,modifiers:t,shortcuts:n,overrides:r},{useRegle:i,inferRules:ke(),useRules:a}}function ze(e,{rules:t,modifiers:n,shortcuts:r,overrides:i}){let a=e.__config??{},o=()=>({...a.rules?.(),...t?.()}),s=a.modifiers&&n?C(a.modifiers,n):a.modifiers??n,c=a.shortcuts&&r?C(a.shortcuts,r):a.shortcuts??r,l=a.overrides&&i?C(a.overrides,i):a.overrides??i,u=De({rules:o,modifiers:s,shortcuts:c,overrides:l});return u.__config={rules:o,modifiers:s,shortcuts:c,overrides:l},{useRegle:u,inferRules:ke()}}function Be(e){return e}function Ve(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)),l=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)}),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=u({...!r&&{$silentValue:a},$errors:g,$issues:m,$silentIssues:h,$silentErrors:_,$instances:x,$value:i,$dirty:o,$anyDirty:s,$invalid:c,$correct:l,$error:d,$pending:p,$ready:f,$edited:v,$anyEdited:b,$reset:S,$touch:C,$validate:E,$extractDirtyFields:w,$clearExternalErrors:T});return y(()=>{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 He(t,n){function r(r){let i=e(()=>m(r)),a=u({});c();let o=d(l(t.value)),s=u({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]={})}))}v(i,c),v(t,e=>{o.value=l(e)},{deep:!0});function l(e){return i.value?typeof i.value==`string`?Ve(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})})}),Ve(a,!n.asRecord)):Ve(e[`~~global`]??{},!n.asRecord)}return{r$:s.r$}}return{useCollectScope:r}}function Ue(t,r){let i=r??Oe;return{useScopedRegle:((r,a,o)=>{let{namespace:s,scopeKey:l,id:u,...f}=o??{};i.__config??={};let p=e(()=>u??l),h=e(()=>m(s)),g=d(`${Object.keys(t.value).length+1}-${q()}`),_=e(()=>p.value??`instance-${g.value}`),{r$:y}=i(r,a,{...f,id:p.value});x(),J(b),v(h,(e,t)=>{b(t),x()}),n()&&c(()=>{let e=n();typeof window<`u`&&e?.proxy?.$el?.parentElement&&document.documentElement&&!document.documentElement.contains(e?.proxy?.$el?.parentElement)&&b()});function b(e){let n=e??h.value;n?t.value[n]&&delete t.value[n][_.value]:t.value[`~~global`][_.value]&&delete t.value[`~~global`][_.value]}function x(){h.value?(t.value[h.value]||(t.value[h.value]={}),t.value[h.value][_.value]=y):(t.value[`~~global`]||(t.value[`~~global`]={}),t.value[`~~global`][_.value]=y)}return{r$:y,dispose:b,register:x}})}}function We(e){let t=(e?.customStore?()=>(e.customStore&&(e.customStore?.value[`~~global`]?e.customStore?.value&&(e.customStore.value={"~~global":{}}):e.customStore.value[`~~global`]={}),e.customStore):Y(()=>d({"~~global":{}})))(),{useScopedRegle:n}=Ue(t,e?.customUseRegle),{useCollectScope:r}=He(t,{asRecord:e?.asRecord});return{useScopedRegle:n,useCollectScope:r}}const{useCollectScope:Ge,useScopedRegle:Ke}=We(),qe=Ge,Je=Ke;function Ye(t,n,r){let i=e(()=>m(t)[n]);return e(()=>r.find(e=>{if(e[n]&&`literal`in e[n]){let t=e[n].literal;if($(t))return g(t._params?.[0])===i.value}})||r.find(e=>x(e[n])&&!Object.keys(e[n]).some(e=>e===`literal`))||{})}function Xe(e,t,n){return!!e&&t in e&&x(e[t])&&`$value`in e[t]&&e[t]?.$value===n}function Ze(e,t,n,r){let i=a(e)?p(e.value,`$fields`):p(e,`$fields`),o=d();return v(i,async()=>{await s(),Xe(i.value,t,n)?o.value=p(e).value:o.value=void 0},{immediate:!0,flush:`pre`}),o}function Qe(e){return e}function $e(e,t){return n=>C({...e},t(n))}const et={install(e,t){e.provide(Q,we),t&&e.provide(re,t)}};export{L as InternalRuleType,et as RegleVuePlugin,H as createRule,We as createScopedUseRegle,Ye as createVariant,Re as defineRegleConfig,Be as defineRegleOptions,Qe as defineRules,ze as extendRegleConfig,he as flatErrors,je as getErrors,Me as getIssues,Ae as inferRules,Ie as markStatic,Ve as mergeRegles,Xe as narrowVariant,$e as refineRules,R as unwrapRuleParameters,qe as useCollectScope,Oe as useRegle,Te as useRootStorage,Fe as useRules,Je as useScopedRegle,Ze as variantToRef};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@regle/core",
3
- "version": "1.18.3",
3
+ "version": "1.19.0-beta.2",
4
4
  "description": "Headless form validation library for Vue",
5
5
  "keywords": [
6
6
  "regle",