@regle/core 1.18.2 → 1.19.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @regle/core v1.18.2
2
+ * @regle/core v1.19.0-beta.1
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,10 +299,16 @@ 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>;
305
- type ProcessChildrenFields<TState extends Record<string, any> | undefined, TRules extends ReglePartialRuleTree<NonNullable<TState>>, TShortcuts extends RegleShortcutDefinition = {}> = { [TIndex in keyof TupleToPlainObj<UnionToTuple<TState>>]: TIndex extends `${infer TIndexInt extends number}` ? { [TKey in keyof UnionToTuple<TState>[TIndexInt] as IsEmptyObject<FindCorrespondingVariant<UnionToTuple<TState>[TIndexInt] extends Record<string, any> ? UnionToTuple<TState>[TIndexInt] : never, UnionToTuple<TRules>> extends [infer U] ? TKey extends keyof U ? U[TKey] : EmptyObject : EmptyObject> extends true ? TKey extends keyof TState ? TState[TKey] extends NonNullable<TState[TKey]> ? TKey : never : never : TKey]-?: InferRegleStatusType<FindCorrespondingVariant<UnionToTuple<TState>[TIndexInt] extends Record<string, any> ? UnionToTuple<TState>[TIndexInt] : never, UnionToTuple<TRules>> extends [infer U] ? TKey extends keyof U ? U[TKey] : EmptyObject : EmptyObject, NonNullable<UnionToTuple<TState>[TIndexInt]>, TKey, TShortcuts> } & { [TKey in keyof UnionToTuple<TState>[TIndexInt] as IsEmptyObject<FindCorrespondingVariant<UnionToTuple<TState>[TIndexInt] extends Record<string, any> ? UnionToTuple<TState>[TIndexInt] : never, UnionToTuple<TRules>> extends [infer U] ? TKey extends keyof U ? U[TKey] : EmptyObject : EmptyObject> extends true ? TKey extends keyof TState ? TState[TKey] extends NonNullable<TState[TKey]> ? never : TKey : TKey : never]?: InferRegleStatusType<FindCorrespondingVariant<UnionToTuple<TState>[TIndexInt] extends Record<string, any> ? UnionToTuple<TState>[TIndexInt] : never, UnionToTuple<TRules>> extends [infer U] ? TKey extends keyof U ? U[TKey] : EmptyObject : EmptyObject, NonNullable<UnionToTuple<TState>[TIndexInt]>, TKey, 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
+ /** Helper type to extract state tuple item at index */
306
+ type StateTupleItem<TState, TIndexInt extends number> = UnionToTuple<TState>[TIndexInt] extends Record<string, any> ? UnionToTuple<TState>[TIndexInt] : never;
307
+ /** Helper type to extract NonNullable state tuple item */
308
+ type NonNullableStateTupleItem<TState, TIndexInt extends number> = NonNullable<StateTupleItem<TState, TIndexInt>>;
309
+ /** Helper type to find the corresponding variant rule */
310
+ type VariantRuleForKey<TState, TRules, TIndexInt extends number, TKey> = FindCorrespondingVariant<StateTupleItem<TState, TIndexInt>, UnionToTuple<TRules>> extends [infer U] ? TKey extends keyof U ? U[TKey] : EmptyObject : EmptyObject;
311
+ type ProcessChildrenFields<TState extends Record<string, any> | undefined, TRules extends ReglePartialRuleTree<NonNullable<TState>>, TShortcuts extends RegleShortcutDefinition = {}> = { [TIndex in keyof TupleToPlainObj<UnionToTuple<TState>>]: TIndex extends `${infer TIndexInt extends number}` ? { [TKey in keyof UnionToTuple<TState>[TIndexInt] as IsEmptyObject<VariantRuleForKey<TState, TRules, TIndexInt, TKey>> extends true ? TKey extends keyof TState ? TState[TKey] extends NonNullable<TState[TKey]> ? TKey : never : never : TKey]-?: InferRegleStatusType<VariantRuleForKey<TState, TRules, TIndexInt, TKey>, NonNullableStateTupleItem<TState, TIndexInt>, TKey, TShortcuts> } & { [TKey in keyof UnionToTuple<TState>[TIndexInt] as IsEmptyObject<VariantRuleForKey<TState, TRules, TIndexInt, TKey>> extends true ? TKey extends keyof TState ? TState[TKey] extends NonNullable<TState[TKey]> ? never : TKey : TKey : never]?: InferRegleStatusType<VariantRuleForKey<TState, TRules, TIndexInt, TKey>, NonNullableStateTupleItem<TState, TIndexInt>, TKey, TShortcuts> } : {} };
306
312
  type FindCorrespondingVariant<TState extends Record<string, any>, TRules extends any[]> = TRules extends [infer F, ...infer R] ? F extends ReglePartialRuleTree<TState> ? [F] : FindCorrespondingVariant<TState, R> : [];
307
313
  type PossibleLiteralTypes<T extends Record<string, any>, TKey extends keyof T> = unknown extends T[TKey] ? {
308
314
  [x: string]: { [K in TKey]-?: Omit<RegleRuleDecl<any, Partial<ExtendedRulesDeclarations>>, 'literal'> & {
@@ -428,7 +434,87 @@ interface inferRulesFn<TCustomRules extends Partial<ExtendedRulesDeclarations>>
428
434
  * @see {@link https://reglejs.dev/core-concepts/#dynamic-rules-object Documentation}
429
435
  */
430
436
  declare const inferRules: inferRulesFn<Partial<ExtendedRulesDeclarations>>;
431
- interface GlobalConfigOptions<TCustomRules extends Partial<ExtendedRulesDeclarations> = CustomRulesDeclarationTree, TShortcuts extends RegleShortcutDefinition<any> = never> {
437
+ interface CommonComparisonOptions {
438
+ /**
439
+ * Change the behaviour of the rule to check only if the value is equal in addition to be strictly superior or inferior
440
+ * @default true
441
+ */
442
+ allowEqual?: boolean;
443
+ }
444
+ interface CommonAlphaOptions {
445
+ /**
446
+ * Allow symbols in alphabetical-like rules (like "_")
447
+ * @default true
448
+ */
449
+ allowSymbols?: boolean;
450
+ }
451
+ interface UrlOptions {
452
+ /**
453
+ * Optional regex for validating the URL protocol
454
+ */
455
+ protocol?: RegExp;
456
+ }
457
+ type DefaultValidators = {
458
+ alpha: RegleRuleWithParamsDefinition<unknown, string, [options?: CommonAlphaOptions | undefined]>;
459
+ alphaNum: RegleRuleWithParamsDefinition<unknown, string | number, [options?: CommonAlphaOptions | undefined]>;
460
+ atLeastOne: RegleRuleWithParamsDefinition<unknown, Record<string, unknown> | object, [keys?: string[] | undefined], false, boolean, false, Record<string, unknown> | object>;
461
+ between: RegleRuleWithParamsDefinition<unknown, number, [min: number, max: number, options?: CommonComparisonOptions]>;
462
+ boolean: RegleRuleDefinition<unknown, unknown, [], false, boolean, any, unknown>;
463
+ checked: RegleRuleDefinition<unknown, boolean, [], false, boolean, boolean>;
464
+ contains: RegleRuleWithParamsDefinition<unknown, string, [part: MaybeInput<string>], false, boolean>;
465
+ date: RegleRuleDefinition<unknown, unknown, [], false, boolean, MaybeInput<Date>, unknown>;
466
+ dateAfter: RegleRuleWithParamsDefinition<unknown, string | Date, [after: MaybeInput<string | Date>, options?: CommonComparisonOptions], false, true | {
467
+ $valid: false;
468
+ error: 'date-not-after';
469
+ } | {
470
+ $valid: false;
471
+ error: 'value-or-parameter-not-a-date';
472
+ }>;
473
+ dateBefore: RegleRuleWithParamsDefinition<unknown, string | Date, [before: MaybeInput<string | Date>, options?: CommonComparisonOptions], false, true | {
474
+ $valid: false;
475
+ error: 'date-not-before';
476
+ } | {
477
+ $valid: false;
478
+ error: 'value-or-parameter-not-a-date';
479
+ }>;
480
+ dateBetween: RegleRuleWithParamsDefinition<unknown, string | Date, [before: MaybeInput<string | Date>, after: MaybeInput<string | Date>, options?: CommonComparisonOptions], false, boolean>;
481
+ decimal: RegleRuleDefinition<unknown, string | number, [], false, boolean, string | number>;
482
+ email: RegleRuleDefinition<unknown, string, [], false, boolean, string>;
483
+ endsWith: RegleRuleWithParamsDefinition<unknown, string, [part: MaybeInput<string>], false, boolean>;
484
+ exactLength: RegleRuleWithParamsDefinition<unknown, string | any[] | Record<PropertyKey, any>, [count: number], false, boolean>;
485
+ exactValue: RegleRuleWithParamsDefinition<unknown, number, [count: number], false, boolean>;
486
+ file: RegleRuleDefinition<unknown, unknown, [], false, boolean, MaybeInput<File>, unknown>;
487
+ fileType: RegleRuleWithParamsDefinition<unknown, File, [accept: readonly string[]], false, boolean>;
488
+ hexadecimal: RegleRuleDefinition<unknown, string, [], false, boolean, string>;
489
+ integer: RegleRuleDefinition<unknown, string | number, [], false, boolean, string | number>;
490
+ ipv4Address: RegleRuleDefinition<unknown, string, [], false, boolean, string>;
491
+ literal: RegleRuleDefinition<unknown, string | number, [literal: string | number], false, boolean, string | number, string | number, true>;
492
+ macAddress: RegleRuleWithParamsDefinition<unknown, string, [separator?: string | undefined], false, boolean>;
493
+ maxLength: RegleRuleWithParamsDefinition<unknown, string | any[] | Record<PropertyKey, any>, [max: number, options?: CommonComparisonOptions], false, boolean>;
494
+ maxFileSize: RegleRuleWithParamsDefinition<unknown, unknown, [maxSize: number], false, true | {
495
+ $valid: boolean;
496
+ fileSize: number;
497
+ }, MaybeInput<File>, unknown>;
498
+ maxValue: RegleRuleWithParamsDefinition<unknown, number | string, [max: number | string, options?: CommonComparisonOptions], false, boolean>;
499
+ minFileSize: RegleRuleWithParamsDefinition<unknown, unknown, [minSize: number], false, true | {
500
+ $valid: boolean;
501
+ fileSize: number;
502
+ }, MaybeInput<File>, unknown>;
503
+ minLength: RegleRuleWithParamsDefinition<unknown, string | any[] | Record<PropertyKey, any>, [min: number, options?: CommonComparisonOptions], false, boolean, string | any[] | Record<PropertyKey, any>>;
504
+ minValue: RegleRuleWithParamsDefinition<unknown, number | string, [min: number | string, options?: CommonComparisonOptions], false, boolean>;
505
+ nativeEnum: RegleRuleDefinition<unknown, string | number, [enumLike: EnumLike], false, boolean, string | number>;
506
+ number: RegleRuleDefinition<unknown, unknown, [], false, boolean, any, unknown>;
507
+ numeric: RegleRuleDefinition<unknown, string | number, [], false, boolean, string | number>;
508
+ oneOf: RegleRuleDefinition<unknown, string | number, [options: (string | number)[]], false, boolean, string | number>;
509
+ regex: RegleRuleWithParamsDefinition<unknown, string | number, [regexp: RegExp | RegExp[]], false, boolean>;
510
+ required: RegleRuleDefinition<unknown, unknown, [], false, boolean, unknown, unknown, true>;
511
+ sameAs: RegleRuleWithParamsDefinition<unknown, unknown, [target: any, otherName?: string], false, boolean>;
512
+ string: RegleRuleDefinition<unknown, unknown, [], false, boolean, any, unknown>;
513
+ type: RegleRuleDefinition<unknown, unknown, [], false, boolean, unknown, unknown>;
514
+ startsWith: RegleRuleWithParamsDefinition<unknown, string, [part: MaybeInput<string>], false, boolean>;
515
+ url: RegleRuleWithParamsDefinition<unknown, string, [options?: UrlOptions | undefined], false, boolean, unknown, string>;
516
+ };
517
+ interface GlobalConfigOptions<TCustomRules extends Partial<ExtendedRulesDeclarations> = EmptyObject, TShortcuts extends RegleShortcutDefinition<any> = never> {
432
518
  /**
433
519
  * Declare custom rules to be used globally or override the default rules messages.
434
520
  *
@@ -526,8 +612,8 @@ declare function defineRegleConfig<TShortcuts extends RegleShortcutDefinition<TC
526
612
  shortcuts,
527
613
  overrides
528
614
  }: GlobalConfigOptions<TCustomRules, TShortcuts>): {
529
- useRegle: useRegleFn<TCustomRules, TShortcuts>;
530
- inferRules: inferRulesFn<TCustomRules>;
615
+ useRegle: useRegleFn<Omit<TCustomRules, keyof DefaultValidators>, TShortcuts>;
616
+ inferRules: inferRulesFn<Omit<TCustomRules, keyof DefaultValidators>>;
531
617
  useRules: useRulesFn<TCustomRules, TShortcuts>;
532
618
  };
533
619
  /**
@@ -566,9 +652,31 @@ declare function extendRegleConfig<TRootCustomRules extends Partial<ExtendedRule
566
652
  useRegle: useRegleFn<Merge<TRootCustomRules, TCustomRules>, TRootShortcuts & TShortcuts>;
567
653
  inferRules: inferRulesFn<Merge<TRootCustomRules, TCustomRules>>;
568
654
  };
569
- 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;
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<any, 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;
570
678
  interface useRegleFn<TCustomRules extends Partial<ExtendedRulesDeclarations>, TShortcuts extends RegleShortcutDefinition<any> = never, TAdditionalReturnProperties extends Record<string, any> = {}, TAdditionalOptions extends Record<string, any> = {}> {
571
- <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>;
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>;
572
680
  __config?: GlobalConfigOptions<TCustomRules, TShortcuts>;
573
681
  }
574
682
  /**
@@ -929,8 +1037,8 @@ type IsLiteral<T> = string extends T ? false : true;
929
1037
  /**
930
1038
  * Returned typed of rules created with `createRule`
931
1039
  * */
932
- 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> {
933
- 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>>;
934
1042
  message: (metadata: PossibleRegleRuleMetadataConsumer<TFilteredValue>) => string | string[];
935
1043
  active: (metadata: PossibleRegleRuleMetadataConsumer<TFilteredValue>) => boolean;
936
1044
  tooltip: (metadata: PossibleRegleRuleMetadataConsumer<TFilteredValue>) => string | string[];
@@ -939,11 +1047,17 @@ interface RegleRuleDefinition<TType extends string | unknown = unknown, TValue e
939
1047
  exec: (value: Maybe<TFilteredValue>) => TAsync extends false ? TMetaData : Promise<TMetaData>;
940
1048
  required: TNonEmpty;
941
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
+ };
942
1056
  /**
943
1057
  * Rules with params created with `createRules` are callable while being customizable
944
1058
  */
945
- 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> & {
946
- (...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>;
947
1061
  } & (TParams extends [param?: any, ...any[]] ? {
948
1062
  exec: (value: Maybe<TFilteredValue>) => TAsync extends false ? TMetadata : Promise<TMetadata>;
949
1063
  } : {});
@@ -996,7 +1110,7 @@ type RegleRuleRawInput<TValue extends any = any, TParams extends [...any[]] = [.
996
1110
  * For a rule with params it will return a function
997
1111
  * Otherwise it will return the rule definition
998
1112
  */
999
- 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>;
1000
1114
  type RegleRuleDefinitionProcessor<TValue extends any = any, TParams extends any[] = [], TReturn = any> = (value: Maybe<TValue>, ...params: TParams) => TReturn;
1001
1115
  type RegleRuleDefinitionWithMetadataProcessor<TValue extends any, TMetadata extends RegleRuleMetadataConsumer<TValue, any[]>, TReturn = any> = ((metadata: TMetadata) => TReturn) | TReturn;
1002
1116
  type RegleCollectionRuleDefinition<TValue = any[], TCustomRules extends Partial<ExtendedRulesDeclarations> = Partial<ExtendedRulesDeclarations>> = (RegleRuleDecl<NonNullable<TValue>, TCustomRules, CollectionRegleBehaviourOptions> & {
@@ -1022,93 +1136,42 @@ interface RegleRuleInit<TType extends string | unknown = unknown, TValue extends
1022
1136
  * @argument
1023
1137
  * Rule core
1024
1138
  */
1025
- 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> {
1026
1140
  validator: (value: Maybe<TValue>, ...args: TParams) => TAsync extends false ? TMetadata : Promise<TMetadata>;
1027
1141
  message: RegleInitPropertyGetter<TValue, string | string[], TParams, TMetadata>;
1028
- active?: RegleInitPropertyGetter<TValue, string | string[], TParams, TMetadata>;
1142
+ active?: RegleInitPropertyGetter<TValue, boolean, TParams, TMetadata>;
1029
1143
  tooltip?: RegleInitPropertyGetter<TValue, string | string[], TParams, TMetadata>;
1030
1144
  type?: TType;
1031
1145
  async?: boolean;
1146
+ required?: TNonEmpty;
1032
1147
  }
1033
1148
  type RegleRuleTypeReturn<TValue, TParams extends [...any[]]> = {
1034
1149
  value: TValue;
1035
1150
  params: [...TParams];
1036
1151
  };
1037
- interface CommonComparisonOptions {
1038
- /**
1039
- * Change the behaviour of the rule to check only if the value is equal in addition to be strictly superior or inferior
1040
- * @default true
1041
- */
1042
- allowEqual?: boolean;
1043
- }
1044
- interface CommonAlphaOptions {
1045
- /**
1046
- * Allow symbols in alphabetical-like rules (like "_")
1047
- * @default true
1048
- */
1049
- allowSymbols?: boolean;
1050
- }
1051
- type DefaultValidators = {
1052
- alpha: RegleRuleWithParamsDefinition<unknown, string, [options?: CommonAlphaOptions | undefined]>;
1053
- alphaNum: RegleRuleWithParamsDefinition<unknown, string | number, [options?: CommonAlphaOptions | undefined]>;
1054
- atLeastOne: RegleRuleWithParamsDefinition<unknown, Record<string, unknown> | object, [keys?: string[] | undefined], false, boolean, false, Record<string, unknown> | object>;
1055
- between: RegleRuleWithParamsDefinition<unknown, number, [min: Maybe<number>, max: Maybe<number>]>;
1056
- boolean: RegleRuleDefinition<unknown, unknown, [], false, boolean, any, unknown>;
1057
- checked: RegleRuleDefinition<unknown, boolean, [], false, boolean, boolean>;
1058
- contains: RegleRuleWithParamsDefinition<unknown, string, [part: Maybe<string>], false, boolean>;
1059
- date: RegleRuleDefinition<unknown, unknown, [], false, boolean, MaybeInput<Date>, unknown>;
1060
- dateAfter: RegleRuleWithParamsDefinition<unknown, string | Date, [after: Maybe<string | Date>, options?: CommonComparisonOptions], false, true | {
1061
- $valid: false;
1062
- error: 'date-not-after';
1063
- } | {
1064
- $valid: false;
1065
- error: 'value-or-parameter-not-a-date';
1066
- }>;
1067
- dateBefore: RegleRuleWithParamsDefinition<unknown, string | Date, [before: Maybe<string | Date>, options?: CommonComparisonOptions], false, true | {
1068
- $valid: false;
1069
- error: 'date-not-before';
1070
- } | {
1071
- $valid: false;
1072
- error: 'value-or-parameter-not-a-date';
1073
- }>;
1074
- dateBetween: RegleRuleWithParamsDefinition<unknown, string | Date, [before: Maybe<string | Date>, after: Maybe<string | Date>, options?: CommonComparisonOptions], false, boolean>;
1075
- decimal: RegleRuleDefinition<unknown, string | number, [], false, boolean, string | number>;
1076
- email: RegleRuleDefinition<unknown, string, [], false, boolean, string>;
1077
- endsWith: RegleRuleWithParamsDefinition<unknown, string, [part: Maybe<string>], false, boolean>;
1078
- exactLength: RegleRuleWithParamsDefinition<unknown, string | any[] | Record<PropertyKey, any>, [count: number], false, boolean>;
1079
- exactValue: RegleRuleWithParamsDefinition<unknown, number, [count: number], false, boolean>;
1080
- file: RegleRuleDefinition<unknown, unknown, [], false, boolean, MaybeInput<File>, unknown>;
1081
- fileType: RegleRuleWithParamsDefinition<unknown, unknown, [accept: string[]], false, boolean>;
1082
- hexadecimal: RegleRuleDefinition<unknown, string, [], false, boolean, string>;
1083
- integer: RegleRuleDefinition<unknown, string | number, [], false, boolean, string | number>;
1084
- ipv4Address: RegleRuleDefinition<unknown, string, [], false, boolean, string>;
1085
- literal: RegleRuleDefinition<unknown, string | number, [literal: string | number], false, boolean, string | number, string | number, true>;
1086
- macAddress: RegleRuleWithParamsDefinition<unknown, string, [separator?: string | undefined], false, boolean>;
1087
- maxLength: RegleRuleWithParamsDefinition<unknown, string | any[] | Record<PropertyKey, any>, [count: number, options?: CommonComparisonOptions], false, boolean>;
1088
- maxFileSize: RegleRuleWithParamsDefinition<unknown, unknown, [maxSize: number], false, boolean, MaybeInput<File>, unknown>;
1089
- maxValue: RegleRuleWithParamsDefinition<unknown, number, [count: number, options?: CommonComparisonOptions], false, boolean>;
1090
- minFileSize: RegleRuleWithParamsDefinition<unknown, unknown, [minSize: number], false, boolean, MaybeInput<File>, unknown>;
1091
- minLength: RegleRuleWithParamsDefinition<unknown, string | any[] | Record<PropertyKey, any>, [count: number, options?: CommonComparisonOptions], false, boolean>;
1092
- minValue: RegleRuleWithParamsDefinition<unknown, number, [count: number, options?: CommonComparisonOptions], false, boolean>;
1093
- nativeEnum: RegleRuleDefinition<unknown, string | number, [enumLike: EnumLike], false, boolean, string | number>;
1094
- number: RegleRuleDefinition<unknown, unknown, [], false, boolean, any, unknown>;
1095
- numeric: RegleRuleDefinition<unknown, string | number, [], false, boolean, string | number>;
1096
- oneOf: RegleRuleDefinition<unknown, string | number, [options: (string | number)[]], false, boolean, string | number>;
1097
- regex: RegleRuleWithParamsDefinition<unknown, string, [regexp: RegExp], false, boolean>;
1098
- required: RegleRuleDefinition<unknown, unknown, [], false, boolean, unknown, unknown, true>;
1099
- sameAs: RegleRuleWithParamsDefinition<unknown, unknown, [target: unknown, otherName?: string], false, boolean>;
1100
- string: RegleRuleDefinition<unknown, unknown, [], false, boolean, any, unknown>;
1101
- type: RegleRuleDefinition<unknown, unknown, [], false, boolean, unknown, unknown>;
1102
- startsWith: RegleRuleWithParamsDefinition<unknown, string, [part: Maybe<string>], false, boolean>;
1103
- url: RegleRuleDefinition<unknown, string, [], false, boolean, string>;
1104
- };
1105
1152
  type CustomRulesDeclarationTree = {
1106
1153
  [x: string]: RegleRuleRawInput<any, any[], boolean, any> | undefined;
1107
1154
  };
1108
- type DefaultValidatorsTree = { [K in keyof DefaultValidators]: RegleRuleRawInput<any, any[], boolean, any> | undefined };
1109
- type ExtendedRulesDeclarations = CustomRulesDeclarationTree & DefaultValidatorsTree;
1155
+ type DefaultValidatorsTree = { [K in keyof DefaultValidators]: DefaultValidators[K] | undefined };
1156
+ /**
1157
+ * Extend this interface to declare your custom rules
1158
+ */
1159
+ interface CustomRules {}
1160
+ type ExtendedRulesDeclarations = CustomRulesDeclarationTree & DefaultValidatorsTree & CustomRules;
1110
1161
  /** @deprecated Use {@link ExtendedRulesDeclarations} instead */
1111
1162
  type AllRulesDeclarations = ExtendedRulesDeclarations;
1163
+ /**
1164
+ * Extend this interface to declare your custom field properties
1165
+ */
1166
+ interface CustomFieldProperties {}
1167
+ /**
1168
+ * Extend this interface to declare your custom nested properties
1169
+ */
1170
+ interface CustomNestedProperties {}
1171
+ /**
1172
+ * Extend this interface to declare your custom collection properties
1173
+ */
1174
+ interface CustomCollectionProperties {}
1112
1175
  /**
1113
1176
  * @public
1114
1177
  */
@@ -1122,7 +1185,7 @@ type ProcessNestedFields<TState extends Record<string, any> | undefined, TRules
1122
1185
  /**
1123
1186
  * @public
1124
1187
  */
1125
- 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> & {
1188
+ 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> & {
1126
1189
  /** 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>;
1127
1190
  /**
1128
1191
  * Collection of all the issues, collected for all children properties and nested forms.
@@ -1139,7 +1202,7 @@ type RegleStatus<TState extends object | Record<string, any> | undefined = Recor
1139
1202
  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). */
1140
1203
  $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). */
1141
1204
  $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>>;
1142
- } & ProcessNestedFields<TState, TRules, TShortcuts> & ([TShortcuts['nested']] extends [never] ? {} : { [K in keyof TShortcuts['nested']]: ReturnType<NonNullable<TShortcuts['nested']>[K]> }) & (TRules['$self'] extends RegleRuleDecl ? {
1205
+ } & ProcessNestedFields<TState, TRules, TShortcuts> & CustomNestedProperties & ([TShortcuts['nested']] extends [never] ? {} : { [K in keyof TShortcuts['nested']]: ReturnType<NonNullable<TShortcuts['nested']>[K]> }) & (TRules['$self'] extends RegleRuleDecl ? {
1143
1206
  /** 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>;
1144
1207
  } : {});
1145
1208
  /**
@@ -1147,6 +1210,7 @@ type RegleStatus<TState extends object | Record<string, any> | undefined = Recor
1147
1210
  * @reference {@link RegleStatus}
1148
1211
  */
1149
1212
  interface $InternalRegleStatus extends $InternalRegleCommonStatus {
1213
+ readonly $externalErrors?: $InternalRegleErrorTree;
1150
1214
  $fields: {
1151
1215
  [x: string]: $InternalRegleStatusType;
1152
1216
  };
@@ -1202,7 +1266,7 @@ type RegleFieldStatus<TState extends any = any, TRules extends RegleFormProperty
1202
1266
  $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). */
1203
1267
  $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 */
1204
1268
  readonly $rules: ComputeFieldRules<TState, TRules>;
1205
- } & ([TShortcuts['fields']] extends [never] ? {} : { [K in keyof TShortcuts['fields']]: ReturnType<NonNullable<TShortcuts['fields']>[K]> });
1269
+ } & CustomFieldProperties & ([TShortcuts['fields']] extends [never] ? {} : { [K in keyof TShortcuts['fields']]: ReturnType<NonNullable<TShortcuts['fields']>[K]> });
1206
1270
  /**
1207
1271
  * @internal
1208
1272
  * @reference {@link RegleFieldStatus}
@@ -1424,12 +1488,12 @@ type RegleCollectionStatus<TState extends any[] = any[], TRules extends ReglePar
1424
1488
  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). */
1425
1489
  $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). */
1426
1490
  $validate: (value?: JoinDiscriminatedUnions<TState>) => Promise<RegleCollectionResult<TState, JoinDiscriminatedUnions<TRules>>>;
1427
- } & ([TShortcuts['collections']] extends [never] ? {} : { [K in keyof TShortcuts['collections']]: ReturnType<NonNullable<TShortcuts['collections']>[K]> });
1491
+ } & CustomCollectionProperties & ([TShortcuts['collections']] extends [never] ? {} : { [K in keyof TShortcuts['collections']]: ReturnType<NonNullable<TShortcuts['collections']>[K]> });
1428
1492
  /**
1429
1493
  * @internal
1430
1494
  * @reference {@link RegleCollectionStatus}
1431
1495
  */
1432
- interface $InternalRegleCollectionStatus extends Omit<$InternalRegleStatus, '$fields' | '$issues' | '$errors' | '$silentErrors' | '~modifiers'> {
1496
+ interface $InternalRegleCollectionStatus extends Omit<$InternalRegleStatus, '$fields' | '$issues' | '$errors' | '$silentErrors' | '~modifiers' | '$externalErrors'> {
1433
1497
  readonly $self: $InternalRegleFieldStatus;
1434
1498
  readonly $each: Array<$InternalRegleStatusType>;
1435
1499
  readonly $issues: $InternalRegleCollectionIssues;
@@ -1484,7 +1548,7 @@ type $InternalFormPropertyTypes = MaybeRefOrComputedRef<$InternalRegleRuleDecl>
1484
1548
  * @public
1485
1549
  * Rule tree for a form property
1486
1550
  */
1487
- 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[]> } & {
1551
+ 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] } & {
1488
1552
  [x: string]: FormRuleDeclaration<TValue, any[]> | boolean | number | undefined;
1489
1553
  };
1490
1554
  /**
@@ -1707,7 +1771,7 @@ type SuperCompatibleRegleCollectionIssues = $InternalRegleCollectionIssues;
1707
1771
  *
1708
1772
  * @see {@link https://reglejs.dev/core-concepts/rules/reusable-rules Documentation}
1709
1773
  */
1710
- 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>;
1774
+ 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>;
1711
1775
  /**
1712
1776
  * Returns a clean list of parameters
1713
1777
  * Removing Ref and executing function to return the unwrapped value
@@ -1994,9 +2058,9 @@ declare function narrowVariant<TRoot extends {
1994
2058
  [x: string]: unknown;
1995
2059
  };
1996
2060
  $value: unknown;
1997
- }, const TKey extends keyof TRoot, const TValue extends (LazyJoinDiscriminatedUnions<Exclude<TRoot[TKey], RegleCollectionStatus<any, any, any> | RegleStatus<any, any, any> | NarrowVariantExtracts[keyof NarrowVariantExtracts]>> extends {
2061
+ }, 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 {
1998
2062
  $value: infer V;
1999
- } ? V : unknown)>(root: TRoot | undefined, discriminantKey: TKey, discriminantValue: TValue): root is NarrowVariant<TRoot, TKey, TValue>;
2063
+ } ? V : unknown)>(root: TRoot | undefined, discriminantKey: TKey, discriminantValue: TValue): root is NarrowVariant<NonNullable<TRoot>, TKey, TValue>;
2000
2064
  /**
2001
2065
  * Create a reactive reference to a narrowed variant.
2002
2066
  * Useful in templates or when you need a stable ref to the narrowed type.
@@ -2107,4 +2171,4 @@ declare function refineRules<TRules extends RegleUnknownRulesTree, TRefinement e
2107
2171
  * @see {@link https://reglejs.dev/introduction/devtools Documentation}
2108
2172
  */
2109
2173
  declare const RegleVuePlugin: Plugin;
2110
- 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 };
2174
+ 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.2
2
+ * @regle/core v1.19.0-beta.1
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.2";
3242
+ var version$1 = "1.19.0-beta.1";
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.2
2
+ * @regle/core v1.19.0-beta.1
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.2`;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.1`;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.2",
3
+ "version": "1.19.0-beta.1",
4
4
  "description": "Headless form validation library for Vue",
5
5
  "keywords": [
6
6
  "regle",
@@ -54,7 +54,7 @@
54
54
  },
55
55
  "devDependencies": {
56
56
  "@total-typescript/ts-reset": "0.6.1",
57
- "@types/node": "24.1.0",
57
+ "@types/node": "24.10.10",
58
58
  "@vue/devtools-kit": "7.7.9",
59
59
  "@vue/test-utils": "2.4.6",
60
60
  "tsdown": "0.20.1",