{"version":3,"file":"FieldApi.cjs","sources":["../../src/FieldApi.ts"],"sourcesContent":["import { batch, createStore } from '@tanstack/store'\nimport {\n  isStandardSchemaValidator,\n  standardSchemaValidators,\n} from './standardSchemaValidator'\nimport { defaultFieldMeta } from './metaHelper'\nimport {\n  determineFieldLevelErrorSourceAndValue,\n  evaluate,\n  getAsyncValidatorArray,\n  getSyncValidatorArray,\n  isFieldInGroup,\n  mergeOpts,\n} from './utils'\nimport { defaultValidationLogic } from './ValidationLogic'\nimport type { AnyFormGroupApi } from './FormGroupApi'\nimport type {\n  FieldErrorMapFromValidator,\n  FieldInfo,\n  FieldLikeAPI,\n  FieldLikeApiOptions,\n  FieldLikeMetaBase,\n  FieldLikeOptions,\n  FieldLikeState,\n  ListenerCause,\n  UnwrapFieldAsyncValidateOrFn,\n  UnwrapFieldValidateOrFn,\n  UpdateMetaOptions,\n  ValidationCause,\n  ValidationError,\n  ValidationErrorMap,\n} from './types'\nimport type { ReadonlyStore } from '@tanstack/store'\nimport type { DeepKeys, DeepValue, RejectPromiseValidator } from './util-types'\nimport type {\n  StandardSchemaV1,\n  TStandardSchemaValidatorValue,\n} from './standardSchemaValidator'\nimport type { FormAsyncValidateOrFn, FormValidateOrFn } from './FormApi'\nimport type { AsyncValidator, SyncValidator, Updater } from './utils'\n\n/**\n * @private\n */\nexport type FieldValidateFn<\n  TParentData,\n  TName extends DeepKeys<TParentData>,\n  TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> = (props: {\n  value: TData\n  fieldApi: FieldApi<\n    TParentData,\n    TName,\n    TData,\n    // This is technically an edge-type; which we try to keep non-`any`, but in this case\n    // It's referring to an inaccessible type from the field validate function inner types, so it's not a big deal\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any\n  >\n}) => unknown\n\n/**\n * @private\n */\nexport type FieldValidateAsyncFn<\n  TParentData,\n  TName extends DeepKeys<TParentData>,\n  TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> = (options: {\n  value: TData\n  fieldApi: FieldApi<\n    TParentData,\n    TName,\n    TData,\n    // This is technically an edge-type; which we try to keep non-`any`, but in this case\n    // It's referring to an inaccessible type from the field validate function inner types, so it's not a big deal\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any\n  >\n  signal: AbortSignal\n}) => unknown | Promise<unknown>\n\n/**\n * @private\n */\nexport type FieldListenerFn<\n  TParentData,\n  TName extends DeepKeys<TParentData>,\n  TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> = (props: {\n  value: TData\n  fieldApi: FieldApi<\n    TParentData,\n    TName,\n    TData,\n    // This is technically an edge-type; which we try to keep non-`any`, but in this case\n    // It's referring to an inaccessible type from the field listener function inner types, so it's not a big deal\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any\n  >\n}) => void\n\n/**\n * @private\n */\nexport type FieldValidateOrFn<\n  TParentData,\n  TName extends DeepKeys<TParentData>,\n  TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> =\n  | FieldValidateFn<TParentData, TName, TData>\n  | StandardSchemaV1<TData, unknown>\n\n/**\n * @private\n */\nexport type FieldAsyncValidateOrFn<\n  TParentData,\n  TName extends DeepKeys<TParentData>,\n  TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> =\n  | FieldValidateAsyncFn<TParentData, TName, TData>\n  | StandardSchemaV1<TData, unknown>\n\nexport interface FieldValidators<\n  TParentData,\n  TName extends DeepKeys<TParentData>,\n  TData extends DeepValue<TParentData, TName>,\n  TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n  TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n  TOnChangeAsync extends\n    | undefined\n    | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n  TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n  TOnBlurAsync extends\n    | undefined\n    | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n  TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n  TOnSubmitAsync extends\n    | undefined\n    | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n  TOnDynamic extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n  TOnDynamicAsync extends\n    | undefined\n    | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n> {\n  /**\n   * An optional function, that runs on the mount event of input.\n   */\n  onMount?: RejectPromiseValidator<TOnMount>\n  /**\n   * An optional function, that runs on the change event of input.\n   *\n   * @example z.string().min(1)\n   */\n  onChange?: RejectPromiseValidator<TOnChange>\n  /**\n   * An optional property similar to `onChange` but async validation\n   *\n   * @example z.string().refine(async (val) => val.length > 3, { message: 'Testing 123' })\n   */\n  onChangeAsync?: TOnChangeAsync\n  /**\n   * An optional number to represent how long the `onChangeAsync` should wait before running\n   *\n   * If set to a number larger than 0, will debounce the async validation event by this length of time in milliseconds\n   */\n  onChangeAsyncDebounceMs?: number\n  /**\n   * An optional list of field names that should trigger this field's `onChange` and `onChangeAsync` events when its value changes\n   */\n  onChangeListenTo?: DeepKeys<TParentData>[]\n  /**\n   * An optional function, that runs on the blur event of input.\n   *\n   * @example z.string().min(1)\n   */\n  onBlur?: RejectPromiseValidator<TOnBlur>\n  /**\n   * An optional property similar to `onBlur` but async validation.\n   *\n   * @example z.string().refine(async (val) => val.length > 3, { message: 'Testing 123' })\n   */\n  onBlurAsync?: TOnBlurAsync\n\n  /**\n   * An optional number to represent how long the `onBlurAsync` should wait before running\n   *\n   * If set to a number larger than 0, will debounce the async validation event by this length of time in milliseconds\n   */\n  onBlurAsyncDebounceMs?: number\n  /**\n   * An optional list of field names that should trigger this field's `onBlur` and `onBlurAsync` events when its value changes\n   */\n  onBlurListenTo?: DeepKeys<TParentData>[]\n  /**\n   * An optional function, that runs on the submit event of form.\n   *\n   * @example z.string().min(1)\n   */\n  onSubmit?: RejectPromiseValidator<TOnSubmit>\n  /**\n   * An optional property similar to `onSubmit` but async validation.\n   *\n   * @example z.string().refine(async (val) => val.length > 3, { message: 'Testing 123' })\n   */\n  onSubmitAsync?: TOnSubmitAsync\n  onDynamic?: RejectPromiseValidator<TOnDynamic>\n  onDynamicAsync?: TOnDynamicAsync\n  onDynamicAsyncDebounceMs?: number\n}\n\nexport interface FieldListeners<\n  TParentData,\n  TName extends DeepKeys<TParentData>,\n  TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> {\n  onChange?: FieldListenerFn<TParentData, TName, TData>\n  onChangeDebounceMs?: number\n  onBlur?: FieldListenerFn<TParentData, TName, TData>\n  onBlurDebounceMs?: number\n  onMount?: FieldListenerFn<TParentData, TName, TData>\n  onUnmount?: FieldListenerFn<TParentData, TName, TData>\n  onSubmit?: FieldListenerFn<TParentData, TName, TData>\n  onGroupSubmit?: FieldListenerFn<TParentData, TName, TData>\n}\n\ninterface FieldExtraOptions<\n  TParentData,\n  TName extends DeepKeys<TParentData>,\n  TData extends DeepValue<TParentData, TName>,\n  TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n  TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n  TOnChangeAsync extends\n    | undefined\n    | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n  TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n  TOnBlurAsync extends\n    | undefined\n    | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n  TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n  TOnSubmitAsync extends\n    | undefined\n    | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n  TOnDynamic extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n  TOnDynamicAsync extends\n    | undefined\n    | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n> {\n  /**\n   * A list of validators to pass to the field\n   */\n  validators?: FieldValidators<\n    TParentData,\n    TName,\n    TData,\n    TOnMount,\n    TOnChange,\n    TOnChangeAsync,\n    TOnBlur,\n    TOnBlurAsync,\n    TOnSubmit,\n    TOnSubmitAsync,\n    TOnDynamic,\n    TOnDynamicAsync\n  >\n\n  /**\n   * A list of listeners which attach to the corresponding events\n   */\n  listeners?: FieldListeners<TParentData, TName, TData>\n}\n\n/**\n * An object type representing the options for a field in a form.\n */\nexport interface FieldOptions<\n  TParentData,\n  TName extends DeepKeys<TParentData>,\n  TData extends DeepValue<TParentData, TName>,\n  TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n  TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n  TOnChangeAsync extends\n    | undefined\n    | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n  TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n  TOnBlurAsync extends\n    | undefined\n    | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n  TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n  TOnSubmitAsync extends\n    | undefined\n    | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n  TOnDynamic extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n  TOnDynamicAsync extends\n    | undefined\n    | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n>\n  extends\n    FieldExtraOptions<\n      TParentData,\n      TName,\n      TData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync\n    >,\n    FieldLikeOptions<\n      TParentData,\n      TName,\n      TData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync\n    > {}\n\nexport interface FieldApiOptions<\n  in out TParentData,\n  in out TName extends DeepKeys<TParentData>,\n  in out TData extends DeepValue<TParentData, TName>,\n  in out TOnMount extends\n    | undefined\n    | FieldValidateOrFn<TParentData, TName, TData>,\n  in out TOnChange extends\n    | undefined\n    | FieldValidateOrFn<TParentData, TName, TData>,\n  in out TOnChangeAsync extends\n    | undefined\n    | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n  in out TOnBlur extends\n    | undefined\n    | FieldValidateOrFn<TParentData, TName, TData>,\n  in out TOnBlurAsync extends\n    | undefined\n    | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n  in out TOnSubmit extends\n    | undefined\n    | FieldValidateOrFn<TParentData, TName, TData>,\n  in out TOnSubmitAsync extends\n    | undefined\n    | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n  in out TOnDynamic extends\n    | undefined\n    | FieldValidateOrFn<TParentData, TName, TData>,\n  in out TOnDynamicAsync extends\n    | undefined\n    | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n  in out TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n  in out TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n  in out TFormOnChangeAsync extends\n    | undefined\n    | FormAsyncValidateOrFn<TParentData>,\n  in out TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n  in out TFormOnBlurAsync extends\n    | undefined\n    | FormAsyncValidateOrFn<TParentData>,\n  in out TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n  in out TFormOnSubmitAsync extends\n    | undefined\n    | FormAsyncValidateOrFn<TParentData>,\n  in out TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n  in out TFormOnDynamicAsync extends\n    | undefined\n    | FormAsyncValidateOrFn<TParentData>,\n  in out TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n  in out TParentSubmitMeta,\n>\n  extends\n    FieldLikeApiOptions<\n      TParentData,\n      TName,\n      TData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync,\n      TFormOnMount,\n      TFormOnChange,\n      TFormOnChangeAsync,\n      TFormOnBlur,\n      TFormOnBlurAsync,\n      TFormOnSubmit,\n      TFormOnSubmitAsync,\n      TFormOnDynamic,\n      TFormOnDynamicAsync,\n      TFormOnServer,\n      TParentSubmitMeta\n    >,\n    FieldExtraOptions<\n      TParentData,\n      TName,\n      TData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync\n    > {}\n\n/**\n * @public\n *\n * A type representing the Field API with all generics set to `any` for convenience.\n */\nexport type AnyFieldApi = FieldApi<\n  any,\n  any,\n  any,\n  any,\n  any,\n  any,\n  any,\n  any,\n  any,\n  any,\n  any,\n  any,\n  any,\n  any,\n  any,\n  any,\n  any,\n  any,\n  any,\n  any,\n  any,\n  any,\n  any\n>\n\n/**\n * We cannot use methods and must use arrow functions. Otherwise, our React adapters\n * will break due to loss of the method when using spread.\n */\n\n/**\n * A class representing the API for managing a form field.\n *\n * Normally, you will not need to create a new `FieldApi` instance directly.\n * Instead, you will use a framework hook/function like `useField` or `createField`\n * to create a new instance for you that uses your framework's reactivity model.\n * However, if you need to create a new instance manually, you can do so by calling\n * the `new FieldApi` constructor.\n */\nexport class FieldApi<\n  in out TParentData,\n  in out TName extends DeepKeys<TParentData>,\n  in out TData extends DeepValue<TParentData, TName>,\n  in out TOnMount extends\n    | undefined\n    | FieldValidateOrFn<TParentData, TName, TData>,\n  in out TOnChange extends\n    | undefined\n    | FieldValidateOrFn<TParentData, TName, TData>,\n  in out TOnChangeAsync extends\n    | undefined\n    | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n  in out TOnBlur extends\n    | undefined\n    | FieldValidateOrFn<TParentData, TName, TData>,\n  in out TOnBlurAsync extends\n    | undefined\n    | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n  in out TOnSubmit extends\n    | undefined\n    | FieldValidateOrFn<TParentData, TName, TData>,\n  in out TOnSubmitAsync extends\n    | undefined\n    | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n  in out TOnDynamic extends\n    | undefined\n    | FieldValidateOrFn<TParentData, TName, TData>,\n  in out TOnDynamicAsync extends\n    | undefined\n    | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n  in out TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n  in out TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n  in out TFormOnChangeAsync extends\n    | undefined\n    | FormAsyncValidateOrFn<TParentData>,\n  in out TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n  in out TFormOnBlurAsync extends\n    | undefined\n    | FormAsyncValidateOrFn<TParentData>,\n  in out TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n  in out TFormOnSubmitAsync extends\n    | undefined\n    | FormAsyncValidateOrFn<TParentData>,\n  in out TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n  in out TFormOnDynamicAsync extends\n    | undefined\n    | FormAsyncValidateOrFn<TParentData>,\n  in out TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n  in out TParentSubmitMeta,\n> implements FieldLikeAPI<\n  TParentData,\n  TName,\n  TData,\n  TOnMount,\n  TOnChange,\n  TOnChangeAsync,\n  TOnBlur,\n  TOnBlurAsync,\n  TOnSubmit,\n  TOnSubmitAsync,\n  TOnDynamic,\n  TOnDynamicAsync,\n  TFormOnMount,\n  TFormOnChange,\n  TFormOnChangeAsync,\n  TFormOnBlur,\n  TFormOnBlurAsync,\n  TFormOnSubmit,\n  TFormOnSubmitAsync,\n  TFormOnDynamic,\n  TFormOnDynamicAsync,\n  TFormOnServer,\n  TParentSubmitMeta,\n  FieldExtraOptions<\n    TParentData,\n    TName,\n    TData,\n    TOnMount,\n    TOnChange,\n    TOnChangeAsync,\n    TOnBlur,\n    TOnBlurAsync,\n    TOnSubmit,\n    TOnSubmitAsync,\n    TOnDynamic,\n    TOnDynamicAsync\n  >\n> {\n  /**\n   * A reference to the form API instance.\n   */\n  form: FieldApiOptions<\n    TParentData,\n    TName,\n    TData,\n    TOnMount,\n    TOnChange,\n    TOnChangeAsync,\n    TOnBlur,\n    TOnBlurAsync,\n    TOnSubmit,\n    TOnSubmitAsync,\n    TOnDynamic,\n    TOnDynamicAsync,\n    TFormOnMount,\n    TFormOnChange,\n    TFormOnChangeAsync,\n    TFormOnBlur,\n    TFormOnBlurAsync,\n    TFormOnSubmit,\n    TFormOnSubmitAsync,\n    TFormOnDynamic,\n    TFormOnDynamicAsync,\n    TFormOnServer,\n    TParentSubmitMeta\n  >['form']\n  /**\n   * The field name.\n   */\n  name: TName\n  /**\n   * The field options.\n   */\n  options: FieldApiOptions<\n    TParentData,\n    TName,\n    TData,\n    TOnMount,\n    TOnChange,\n    TOnChangeAsync,\n    TOnBlur,\n    TOnBlurAsync,\n    TOnSubmit,\n    TOnSubmitAsync,\n    TOnDynamic,\n    TOnDynamicAsync,\n    TFormOnMount,\n    TFormOnChange,\n    TFormOnChangeAsync,\n    TFormOnBlur,\n    TFormOnBlurAsync,\n    TFormOnSubmit,\n    TFormOnSubmitAsync,\n    TFormOnDynamic,\n    TFormOnDynamicAsync,\n    TFormOnServer,\n    TParentSubmitMeta\n  > = {} as any\n  /**\n   * The field state store.\n   */\n  store!: ReadonlyStore<\n    FieldLikeState<\n      TParentData,\n      TName,\n      TData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync,\n      TFormOnMount,\n      TFormOnChange,\n      TFormOnChangeAsync,\n      TFormOnBlur,\n      TFormOnBlurAsync,\n      TFormOnSubmit,\n      TFormOnSubmitAsync,\n      TFormOnDynamic,\n      TFormOnDynamicAsync\n    >\n  >\n  /**\n   * The current field state.\n   */\n  get state() {\n    return this.store.state\n  }\n  timeoutIds: {\n    validations: Record<ValidationCause, ReturnType<typeof setTimeout> | null>\n    listeners: Record<ListenerCause, ReturnType<typeof setTimeout> | null>\n    formListeners: Record<ListenerCause, ReturnType<typeof setTimeout> | null>\n  }\n\n  /**\n   * Initializes a new `FieldApi` instance.\n   */\n  constructor(\n    opts: FieldApiOptions<\n      TParentData,\n      TName,\n      TData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync,\n      TFormOnMount,\n      TFormOnChange,\n      TFormOnChangeAsync,\n      TFormOnBlur,\n      TFormOnBlurAsync,\n      TFormOnSubmit,\n      TFormOnSubmitAsync,\n      TFormOnDynamic,\n      TFormOnDynamicAsync,\n      TFormOnServer,\n      TParentSubmitMeta\n    >,\n  ) {\n    this.form = opts.form\n    this.name = opts.name\n    this.options = opts\n\n    this.timeoutIds = {\n      validations: {} as Record<ValidationCause, never>,\n      listeners: {} as Record<ListenerCause, never>,\n      formListeners: {} as Record<ListenerCause, never>,\n    }\n\n    this.store = createStore(\n      (\n        prevVal:\n          | FieldLikeState<\n              TParentData,\n              TName,\n              TData,\n              TOnMount,\n              TOnChange,\n              TOnChangeAsync,\n              TOnBlur,\n              TOnBlurAsync,\n              TOnSubmit,\n              TOnSubmitAsync,\n              TOnDynamic,\n              TOnDynamicAsync,\n              TFormOnMount,\n              TFormOnChange,\n              TFormOnChangeAsync,\n              TFormOnBlur,\n              TFormOnBlurAsync,\n              TFormOnSubmit,\n              TFormOnSubmitAsync,\n              TFormOnDynamic,\n              TFormOnDynamicAsync\n            >\n          | undefined,\n      ) => {\n        // Temp hack to subscribe to form.store\n        this.form.store.get()\n\n        const meta = this.form.getFieldMeta(this.name) ?? {\n          ...defaultFieldMeta,\n          ...opts.defaultMeta,\n        }\n\n        let value = this.form.getFieldValue(this.name)\n        if (\n          !meta.isTouched &&\n          (value as unknown) === undefined &&\n          this.options.defaultValue !== undefined &&\n          !evaluate(value, this.options.defaultValue)\n        ) {\n          value = this.options.defaultValue\n        }\n\n        if (prevVal && prevVal.value === value && prevVal.meta === meta) {\n          return prevVal\n        }\n\n        return {\n          value,\n          meta,\n        } as FieldLikeState<\n          TParentData,\n          TName,\n          TData,\n          TOnMount,\n          TOnChange,\n          TOnChangeAsync,\n          TOnBlur,\n          TOnBlurAsync,\n          TOnSubmit,\n          TOnSubmitAsync,\n          TOnDynamic,\n          TOnDynamicAsync,\n          TFormOnMount,\n          TFormOnChange,\n          TFormOnChangeAsync,\n          TFormOnBlur,\n          TFormOnBlurAsync,\n          TFormOnSubmit,\n          TFormOnSubmitAsync,\n          TFormOnDynamic,\n          TFormOnDynamicAsync\n        >\n      },\n    )\n  }\n\n  /**\n   * @private\n   */\n  runValidator<\n    TValue extends TStandardSchemaValidatorValue<TData> & {\n      fieldApi: AnyFieldApi\n    },\n    TType extends 'validate' | 'validateAsync',\n  >(props: {\n    validate: TType extends 'validate'\n      ? FieldValidateOrFn<any, any, any>\n      : FieldAsyncValidateOrFn<any, any, any>\n    value: TValue\n    type: TType\n    // When `api` is 'field', the return type cannot be `FormValidationError`\n  }): unknown {\n    if (isStandardSchemaValidator(props.validate)) {\n      return standardSchemaValidators[props.type](\n        props.value,\n        props.validate,\n      ) as never\n    }\n\n    return (props.validate as FieldValidateFn<any, any>)(props.value) as never\n  }\n\n  /**\n   * Mounts the field instance to the form.\n   * @returns A function to unmount the field instance.\n   */\n  mount = () => {\n    if (this.options.defaultValue !== undefined && !this.getMeta().isTouched) {\n      this.form.setFieldValue(this.name, this.options.defaultValue, {\n        dontUpdateMeta: true,\n      })\n    }\n\n    const info = this.getInfo()\n    info.instance = this as never\n\n    this.update(this.options as never)\n\n    const { onMount } = this.options.validators || {}\n\n    if (onMount) {\n      const error = this.runValidator({\n        validate: onMount,\n        value: {\n          value: this.state.value,\n          fieldApi: this,\n          validationSource: 'field',\n        },\n        type: 'validate',\n      })\n      if (error) {\n        this.setMeta(\n          (prev) =>\n            ({\n              ...prev,\n              // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n              errorMap: { ...prev?.errorMap, onMount: error },\n              errorSourceMap: {\n                // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n                ...prev?.errorSourceMap,\n                onMount: 'field',\n              },\n            }) as never,\n        )\n      }\n    }\n\n    this.options.listeners?.onMount?.({\n      value: this.state.value,\n      fieldApi: this,\n    })\n\n    return () => {\n      // Stop any in-flight async validation or listener work tied to this instance.\n      for (const [key, timeout] of Object.entries(\n        this.timeoutIds.validations,\n      )) {\n        if (timeout) {\n          clearTimeout(timeout)\n          this.timeoutIds.validations[\n            key as keyof typeof this.timeoutIds.validations\n          ] = null\n        }\n      }\n      for (const [key, timeout] of Object.entries(this.timeoutIds.listeners)) {\n        if (timeout) {\n          clearTimeout(timeout)\n          this.timeoutIds.listeners[\n            key as keyof typeof this.timeoutIds.listeners\n          ] = null\n        }\n      }\n      for (const [key, timeout] of Object.entries(\n        this.timeoutIds.formListeners,\n      )) {\n        if (timeout) {\n          clearTimeout(timeout)\n          this.timeoutIds.formListeners[\n            key as keyof typeof this.timeoutIds.formListeners\n          ] = null\n        }\n      }\n\n      const fieldInfo = this.form.fieldInfo[this.name]\n      if (!fieldInfo) return\n\n      // If a newer field instance has already been mounted for this name,\n      // avoid touching its shared validation state during teardown.\n      if (fieldInfo.instance !== this) return\n\n      for (const [key, validationMeta] of Object.entries(\n        fieldInfo.validationMetaMap,\n      )) {\n        validationMeta?.lastAbortController.abort()\n        fieldInfo.validationMetaMap[\n          key as keyof typeof fieldInfo.validationMetaMap\n        ] = undefined\n      }\n\n      this.form.baseStore.setState((prev) => ({\n        // Preserve interaction flags so field-level defaultValue does not\n        // reseed user-entered values on remount.\n        ...prev,\n        fieldMetaBase: {\n          ...prev.fieldMetaBase,\n          [this.name]: {\n            ...defaultFieldMeta,\n            isTouched:\n              prev.fieldMetaBase[this.name]?.isTouched ??\n              defaultFieldMeta.isTouched,\n            isBlurred:\n              prev.fieldMetaBase[this.name]?.isBlurred ??\n              defaultFieldMeta.isBlurred,\n            isDirty:\n              prev.fieldMetaBase[this.name]?.isDirty ??\n              defaultFieldMeta.isDirty,\n          },\n        },\n      }))\n\n      fieldInfo.instance = null\n\n      this.options.listeners?.onUnmount?.({\n        value: this.state.value,\n        fieldApi: this,\n      })\n\n      this.form.options.listeners?.onFieldUnmount?.({\n        formApi: this.form,\n        fieldApi: this,\n      })\n    }\n  }\n\n  /**\n   * Updates the field instance with new options.\n   */\n  update = (\n    opts: FieldApiOptions<\n      TParentData,\n      TName,\n      TData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync,\n      TFormOnMount,\n      TFormOnChange,\n      TFormOnChangeAsync,\n      TFormOnBlur,\n      TFormOnBlurAsync,\n      TFormOnSubmit,\n      TFormOnSubmitAsync,\n      TFormOnDynamic,\n      TFormOnDynamicAsync,\n      TFormOnServer,\n      TParentSubmitMeta\n    >,\n  ) => {\n    this.options = opts\n    this.name = opts.name\n\n    // Default Value\n    if (!this.state.meta.isTouched && this.options.defaultValue !== undefined) {\n      const formField = this.form.getFieldValue(this.name)\n      if (!evaluate(formField, opts.defaultValue)) {\n        this.form.setFieldValue(this.name, opts.defaultValue as never, {\n          dontUpdateMeta: true,\n          dontValidate: true,\n          dontRunListeners: true,\n        })\n      }\n    }\n\n    if (!this.form.getFieldMeta(this.name)) {\n      this.form.setFieldMeta(this.name, this.state.meta)\n    }\n  }\n\n  /**\n   * Gets the current field value.\n   * @deprecated Use `field.state.value` instead.\n   */\n  getValue = (): TData => {\n    return this.form.getFieldValue(this.name) as TData\n  }\n\n  /**\n   * Sets the field value and run the `change` validator.\n   */\n  setValue = (updater: Updater<TData>, options?: UpdateMetaOptions) => {\n    this.form.setFieldValue(\n      this.name,\n      updater as never,\n      mergeOpts(options, { dontRunListeners: true, dontValidate: true }),\n    )\n\n    if (!options?.dontRunListeners) {\n      this.triggerOnChangeListener()\n    }\n\n    if (!options?.dontValidate) {\n      this.validate('change')\n    }\n  }\n\n  getMeta = () => this.store.state.meta\n\n  /**\n   * Sets the field metadata.\n   */\n  setMeta = (\n    updater: Updater<\n      FieldLikeMetaBase<\n        TParentData,\n        TName,\n        TData,\n        TOnMount,\n        TOnChange,\n        TOnChangeAsync,\n        TOnBlur,\n        TOnBlurAsync,\n        TOnSubmit,\n        TOnSubmitAsync,\n        TOnDynamic,\n        TOnDynamicAsync,\n        TFormOnMount,\n        TFormOnChange,\n        TFormOnChangeAsync,\n        TFormOnBlur,\n        TFormOnBlurAsync,\n        TFormOnSubmit,\n        TFormOnSubmitAsync,\n        TFormOnDynamic,\n        TFormOnDynamicAsync\n      >\n    >,\n  ) => this.form.setFieldMeta(this.name, updater)\n\n  /**\n   * Gets the field information object.\n   */\n  getInfo = () => this.form.getFieldInfo(this.name)\n\n  /**\n   * Pushes a new value to the field.\n   */\n  pushValue = (\n    value: TData extends any[] ? TData[number] : never,\n    options?: UpdateMetaOptions,\n  ) => {\n    this.form.pushFieldValue(\n      this.name,\n      value as any,\n      mergeOpts(options, { dontRunListeners: true }),\n    )\n\n    if (!options?.dontRunListeners) {\n      this.triggerOnChangeListener()\n    }\n  }\n\n  /**\n   * Inserts a value at the specified index, shifting the subsequent values to the right.\n   */\n  insertValue = (\n    index: number,\n    value: TData extends any[] ? TData[number] : never,\n    options?: UpdateMetaOptions,\n  ) => {\n    this.form.insertFieldValue(\n      this.name,\n      index,\n      value as any,\n      mergeOpts(options, { dontRunListeners: true }),\n    )\n\n    if (!options?.dontRunListeners) {\n      this.triggerOnChangeListener()\n    }\n  }\n\n  /**\n   * Replaces a value at the specified index.\n   */\n  replaceValue = (\n    index: number,\n    value: TData extends any[] ? TData[number] : never,\n    options?: UpdateMetaOptions,\n  ) => {\n    this.form.replaceFieldValue(\n      this.name,\n      index,\n      value as any,\n      mergeOpts(options, { dontRunListeners: true }),\n    )\n\n    if (!options?.dontRunListeners) {\n      this.triggerOnChangeListener()\n    }\n  }\n\n  /**\n   * Removes a value at the specified index.\n   */\n  removeValue = (index: number, options?: UpdateMetaOptions) => {\n    this.form.removeFieldValue(\n      this.name,\n      index,\n      mergeOpts(options, { dontRunListeners: true }),\n    )\n\n    if (!options?.dontRunListeners) {\n      this.triggerOnChangeListener()\n    }\n  }\n\n  /**\n   * Swaps the values at the specified indices.\n   */\n  swapValues = (\n    aIndex: number,\n    bIndex: number,\n    options?: UpdateMetaOptions,\n  ) => {\n    this.form.swapFieldValues(\n      this.name,\n      aIndex,\n      bIndex,\n      mergeOpts(options, { dontRunListeners: true }),\n    )\n\n    if (!options?.dontRunListeners) {\n      this.triggerOnChangeListener()\n    }\n  }\n\n  /**\n   * Moves the value at the first specified index to the second specified index.\n   */\n  moveValue = (aIndex: number, bIndex: number, options?: UpdateMetaOptions) => {\n    this.form.moveFieldValues(\n      this.name,\n      aIndex,\n      bIndex,\n      mergeOpts(options, { dontRunListeners: true }),\n    )\n\n    if (!options?.dontRunListeners) {\n      this.triggerOnChangeListener()\n    }\n  }\n\n  /**\n   * Clear all values from the array.\n   */\n  clearValues = (options?: UpdateMetaOptions) => {\n    this.form.clearFieldValues(\n      this.name,\n      mergeOpts(options, { dontRunListeners: true }),\n    )\n\n    if (!options?.dontRunListeners) {\n      this.triggerOnChangeListener()\n    }\n  }\n\n  /**\n   * @private\n   */\n  getLinkedFields = (cause: ValidationCause) => {\n    const fields = Object.values(this.form.fieldInfo) as FieldInfo<any>[]\n\n    const linkedFields: AnyFieldApi[] = []\n    for (const field of fields) {\n      if (!field.instance) continue\n      // TODO: How to handle FieldGroups? Do we need to? IDK.\n      if (!(field.instance instanceof FieldApi)) {\n        continue\n      }\n      const { onChangeListenTo, onBlurListenTo } =\n        field.instance.options.validators || {}\n      if (cause === 'change' && onChangeListenTo?.includes(this.name)) {\n        linkedFields.push(field.instance)\n      }\n      if (cause === 'blur' && onBlurListenTo?.includes(this.name as string)) {\n        linkedFields.push(field.instance)\n      }\n    }\n\n    return linkedFields\n  }\n\n  /**\n   * @private\n   */\n  validateSync = (\n    cause: ValidationCause,\n    errorFromForm: ValidationErrorMap,\n  ) => {\n    const validates = getSyncValidatorArray(cause, {\n      ...this.options,\n      form: this.form,\n      fieldName: this.name,\n      validationLogic:\n        this.form.options.validationLogic || defaultValidationLogic,\n    })\n\n    const linkedFields = this.getLinkedFields(cause)\n    const linkedFieldValidates = linkedFields.reduce(\n      (acc, field) => {\n        const fieldValidates = getSyncValidatorArray(cause, {\n          ...field.options,\n          form: field.form,\n          fieldName: field.name,\n          validationLogic:\n            field.form.options.validationLogic || defaultValidationLogic,\n        })\n        fieldValidates.forEach((validate) => {\n          ;(validate as any).field = field\n        })\n        return acc.concat(fieldValidates as never)\n      },\n      [] as Array<\n        SyncValidator<any> & {\n          field: AnyFieldApi\n        }\n      >,\n    )\n\n    // Needs type cast as eslint errantly believes this is always falsy\n    let hasErrored = false as boolean\n\n    batch(() => {\n      const validateFieldFn = (\n        field: AnyFieldApi,\n        validateObj: SyncValidator<any>,\n      ) => {\n        const errorMapKey = getErrorMapKey(validateObj.cause)\n\n        const fieldLevelError = validateObj.validate\n          ? normalizeError(\n              field.runValidator({\n                validate: validateObj.validate,\n                value: {\n                  value: field.store.state.value,\n                  validationSource: 'field',\n                  fieldApi: field,\n                },\n                type: 'validate',\n              }),\n            )\n          : undefined\n\n        const formLevelError = errorFromForm[errorMapKey]\n\n        const { newErrorValue, newSource } =\n          determineFieldLevelErrorSourceAndValue({\n            formLevelError,\n            fieldLevelError,\n          })\n\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        if (field.state.meta.errorMap?.[errorMapKey] !== newErrorValue) {\n          field.setMeta((prev) => ({\n            ...prev,\n            errorMap: {\n              ...prev.errorMap,\n              [errorMapKey]: newErrorValue,\n            },\n            errorSourceMap: {\n              ...prev.errorSourceMap,\n              [errorMapKey]: newSource,\n            },\n          }))\n        }\n        if (newErrorValue) {\n          hasErrored = true\n        }\n      }\n\n      for (const validateObj of validates) {\n        validateFieldFn(this, validateObj)\n      }\n      for (const fieldValitateObj of linkedFieldValidates) {\n        if (!fieldValitateObj.validate) continue\n        validateFieldFn(fieldValitateObj.field, fieldValitateObj)\n      }\n    })\n\n    /**\n     *  when we have an error for onSubmit in the state, we want\n     *  to clear the error as soon as the user enters a valid value in the field\n     */\n    const submitErrKey = getErrorMapKey('submit')\n\n    if (\n      // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n      this.state.meta.errorMap?.[submitErrKey] &&\n      cause !== 'submit' &&\n      !hasErrored\n    ) {\n      this.setMeta((prev) => ({\n        ...prev,\n        errorMap: {\n          ...prev.errorMap,\n          [submitErrKey]: undefined,\n        },\n        errorSourceMap: {\n          ...prev.errorSourceMap,\n          [submitErrKey]: undefined,\n        },\n      }))\n    }\n\n    return { hasErrored }\n  }\n\n  /**\n   * `@private`\n   * Starts tracking an async validation, incrementing the counter and setting isValidating if needed.\n   */\n  private startValidation() {\n    this.setMeta((prev) => {\n      const newCount = prev._pendingValidationsCount + 1\n      return {\n        ...prev,\n        _pendingValidationsCount: newCount,\n        isValidating:\n          newCount > 0 && !prev.isValidating ? true : prev.isValidating,\n      }\n    })\n  }\n\n  /**\n   * `@private`\n   * Ends tracking an async validation, decrementing the counter and clearing isValidating if no validations remain.\n   */\n  private endValidation() {\n    this.setMeta((prev) => {\n      const newCount = Math.max(0, prev._pendingValidationsCount - 1)\n      return {\n        ...prev,\n        _pendingValidationsCount: newCount,\n        isValidating:\n          newCount === 0 && prev.isValidating ? false : prev.isValidating,\n      }\n    })\n  }\n\n  /**\n   * @private\n   */\n  validateAsync = async (\n    cause: ValidationCause,\n    formValidationResultPromise: Promise<\n      FieldErrorMapFromValidator<\n        TParentData,\n        TName,\n        TData,\n        TOnMount,\n        TOnChange,\n        TOnChangeAsync,\n        TOnBlur,\n        TOnBlurAsync,\n        TOnSubmit,\n        TOnSubmitAsync\n      >\n    >,\n  ) => {\n    const validates = getAsyncValidatorArray(cause, {\n      ...this.options,\n      form: this.form,\n      fieldName: this.name,\n      validationLogic:\n        this.form.options.validationLogic || defaultValidationLogic,\n    })\n\n    // Get the field-specific error messages that are coming from the form's validator\n    const asyncFormValidationResults = await formValidationResultPromise\n\n    const linkedFields = this.getLinkedFields(cause)\n    const linkedFieldValidates = linkedFields.reduce(\n      (acc, field) => {\n        const fieldValidates = getAsyncValidatorArray(cause, {\n          ...field.options,\n          form: field.form,\n          fieldName: field.name,\n          validationLogic:\n            field.form.options.validationLogic || defaultValidationLogic,\n        })\n        fieldValidates.forEach((validate) => {\n          ;(validate as any).field = field\n        })\n        return acc.concat(fieldValidates as never)\n      },\n      [] as Array<\n        AsyncValidator<any> & {\n          field: AnyFieldApi\n        }\n      >,\n    )\n\n    /**\n     * We have to use a for loop and generate our promises this way, otherwise it won't be sync\n     * when there are no validators needed to be run\n     */\n    const validatesPromises: Promise<ValidationError | undefined>[] = []\n    const linkedPromises: Promise<ValidationError | undefined>[] = []\n\n    // Check if there are actual async validators to run before setting isValidating\n    // This prevents unnecessary re-renders when there are no async validators\n    // See: https://github.com/TanStack/form/issues/1130\n    const hasAsyncValidators = validates.some((v) => v.validate)\n    const linkedFieldsWithAsyncValidators = Array.from(\n      new Set(\n        linkedFieldValidates.filter((v) => v.validate).map((v) => v.field),\n      ),\n    )\n\n    batch(() => {\n      if (hasAsyncValidators) {\n        this.startValidation()\n      }\n\n      for (const linkedField of linkedFieldsWithAsyncValidators) {\n        linkedField.startValidation()\n      }\n    })\n\n    const validateFieldAsyncFn = (\n      field: AnyFieldApi,\n      validateObj: AsyncValidator<any>,\n      promises: Promise<ValidationError | undefined>[],\n    ) => {\n      const errorMapKey = getErrorMapKey(validateObj.cause)\n      const fieldInfo = field.getInfo()\n      const fieldValidatorMeta = fieldInfo.validationMetaMap[errorMapKey]\n\n      fieldValidatorMeta?.lastAbortController.abort()\n      const controller = new AbortController()\n\n      fieldInfo.validationMetaMap[errorMapKey] = {\n        lastAbortController: controller,\n      }\n\n      promises.push(\n        new Promise<ValidationError | undefined>(async (resolve) => {\n          let rawError!: ValidationError | undefined\n          try {\n            rawError = await new Promise((rawResolve, rawReject) => {\n              if (field.timeoutIds.validations[validateObj.cause]) {\n                clearTimeout(field.timeoutIds.validations[validateObj.cause]!)\n                field.endValidation()\n              }\n\n              field.timeoutIds.validations[validateObj.cause] = setTimeout(\n                async () => {\n                  if (controller.signal.aborted) return rawResolve(undefined)\n                  try {\n                    rawResolve(\n                      await this.runValidator({\n                        validate: validateObj.validate,\n                        value: {\n                          value: field.store.state.value,\n                          fieldApi: field,\n                          signal: controller.signal,\n                          validationSource: 'field',\n                        },\n                        type: 'validateAsync',\n                      }),\n                    )\n                  } catch (e) {\n                    rawReject(e)\n                  }\n                },\n                validateObj.debounceMs,\n              )\n            })\n          } catch (e: unknown) {\n            rawError = e as ValidationError\n          }\n          if (controller.signal.aborted) return resolve(undefined)\n\n          const fieldLevelError = normalizeError(rawError)\n          const formLevelError =\n            asyncFormValidationResults[\n              field.name as keyof typeof asyncFormValidationResults\n            ]?.[errorMapKey]\n\n          const { newErrorValue, newSource } =\n            determineFieldLevelErrorSourceAndValue({\n              formLevelError,\n              fieldLevelError,\n            })\n\n          if (field.getInfo().instance !== field) {\n            return resolve(undefined)\n          }\n\n          field.setMeta((prev) => {\n            return {\n              ...prev,\n              errorMap: {\n                // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n                ...prev?.errorMap,\n                [errorMapKey]: newErrorValue,\n              },\n              errorSourceMap: {\n                ...prev.errorSourceMap,\n                [errorMapKey]: newSource,\n              },\n            }\n          })\n\n          resolve(newErrorValue)\n        }),\n      )\n    }\n\n    // TODO: Dedupe this logic to reduce bundle size\n    for (const validateObj of validates) {\n      if (!validateObj.validate) continue\n      validateFieldAsyncFn(this, validateObj, validatesPromises)\n    }\n    for (const fieldValitateObj of linkedFieldValidates) {\n      if (!fieldValitateObj.validate) continue\n      validateFieldAsyncFn(\n        fieldValitateObj.field,\n        fieldValitateObj,\n        linkedPromises,\n      )\n    }\n\n    let results: ValidationError[] = []\n    if (validatesPromises.length || linkedPromises.length) {\n      results = await Promise.all(validatesPromises)\n      await Promise.all(linkedPromises)\n    }\n\n    // Only reset isValidating if we set it to true earlier\n    batch(() => {\n      if (hasAsyncValidators) {\n        this.endValidation()\n      }\n\n      for (const linkedField of linkedFieldsWithAsyncValidators) {\n        linkedField.endValidation()\n      }\n    })\n\n    return results.filter(Boolean)\n  }\n\n  /**\n   * Validates the field value.\n   */\n  validate = (\n    cause: ValidationCause,\n    opts?: { skipFormValidation?: boolean; skipGroupValidation?: boolean },\n  ): ValidationError[] | Promise<ValidationError[]> => {\n    // If the field is pristine, do not validate\n    if (!this.state.meta.isTouched) return []\n\n    // Cascade into any encompassing `FormGroupApi`'s own validators so\n    // group-scoped strategies (e.g. `revalidateLogic` gated on the group's\n    // own `submissionAttempts`) get a chance to react to this field change.\n    // Mirror the field's sync→short-circuit-on-error→async semantics for\n    // each group: only kick off async validators if the group's sync pass\n    // was clean (or its `asyncAlways` flag is set).\n    const encompassingGroups = opts?.skipGroupValidation\n      ? []\n      : Array.from(this.form.formGroupApis).filter((group) =>\n          this.name.startsWith(group.name),\n        )\n\n    // Attempt to sync validate first\n    const formSyncResult = opts?.skipFormValidation\n      ? { fieldsErrorMap: {} as never }\n      : this.form.validateSync(cause)\n    let fieldsErrorMap = (formSyncResult.fieldsErrorMap[this.name] ??\n      {}) as ValidationErrorMap\n\n    // For each encompassing group whose own submission has been attempted,\n    // also re-run the parent form's validators with that group as the\n    // gating context. This ensures form-level errors (e.g. those produced\n    // by a form-level z.object onDynamic during a group submit) are kept\n    // fresh on subsequent field changes — even though the form itself\n    // hasn't been submitted directly.\n    if (!opts?.skipFormValidation) {\n      for (const group of encompassingGroups) {\n        if (group.state.meta.submissionAttempts === 0) continue\n        const { fieldsErrorMap: groupFormErrors } = this.form.validateSync(\n          cause,\n          {\n            group,\n            dontUpdateFormErrorMap: true,\n            filterFieldNames: (fieldName) =>\n              isFieldInGroup(group.name, fieldName),\n          },\n        )\n        fieldsErrorMap = {\n          ...fieldsErrorMap,\n          ...(groupFormErrors[this.name] ?? {}),\n        }\n      }\n    }\n\n    const { hasErrored } = this.validateSync(cause, fieldsErrorMap)\n\n    const groupHasErroredWeakMap = new WeakMap<AnyFormGroupApi, boolean>()\n    for (const group of encompassingGroups) {\n      const { hasErrored: groupHasErrored } = group.validateSync(\n        cause,\n        {},\n        { skipRelatedFieldValidation: true },\n      )\n\n      groupHasErroredWeakMap.set(group, groupHasErrored)\n    }\n\n    if (hasErrored && !this.options.asyncAlways) {\n      this.getInfo().validationMetaMap[\n        getErrorMapKey(cause)\n      ]?.lastAbortController.abort()\n\n      const groupErrors = [] as ValidationError[][]\n\n      for (const group of encompassingGroups) {\n        group\n          .getInfo()\n          .validationMetaMap[getErrorMapKey(cause)]?.lastAbortController.abort()\n\n        groupErrors.push(group.state.meta.errors)\n      }\n\n      return [...this.state.meta.errors, ...groupErrors.flat()]\n    }\n\n    // No error? Attempt async validation\n    const formValidationResultPromise = opts?.skipFormValidation\n      ? Promise.resolve({})\n      : this.form.validateAsync(cause)\n\n    const fieldAsyncResults = this.validateAsync(\n      cause,\n      formValidationResultPromise,\n    )\n\n    const groupAsyncResults: Promise<ValidationError[]>[] = []\n    for (const group of encompassingGroups) {\n      if (groupHasErroredWeakMap.get(group) && !group.options.asyncAlways) {\n        continue\n      }\n\n      groupAsyncResults.push(\n        group.validateAsync(cause, formValidationResultPromise, {\n          skipRelatedFieldValidation: true,\n        }),\n      )\n    }\n\n    if (groupAsyncResults.length === 0) {\n      return fieldAsyncResults\n    }\n\n    return Promise.all([fieldAsyncResults, ...groupAsyncResults]).then(\n      (results) => results.flat(),\n    )\n  }\n\n  /**\n   * Handles the change event.\n   */\n  handleChange = (updater: Updater<TData>) => {\n    this.setValue(updater)\n  }\n\n  /**\n   * Handles the blur event.\n   */\n  handleBlur = () => {\n    const prevTouched = this.state.meta.isTouched\n    if (!prevTouched) {\n      this.setMeta((prev) => ({ ...prev, isTouched: true }))\n    }\n    if (!this.state.meta.isBlurred) {\n      this.setMeta((prev) => ({ ...prev, isBlurred: true }))\n    }\n    this.validate('blur')\n\n    this.triggerOnBlurListener()\n  }\n\n  /**\n   * Updates the field's errorMap\n   */\n  setErrorMap = (\n    errorMap: ValidationErrorMap<\n      UnwrapFieldValidateOrFn<TName, TOnMount, TFormOnMount>,\n      UnwrapFieldValidateOrFn<TName, TOnChange, TFormOnChange>,\n      UnwrapFieldAsyncValidateOrFn<TName, TOnChangeAsync, TFormOnChangeAsync>,\n      UnwrapFieldValidateOrFn<TName, TOnBlur, TFormOnBlur>,\n      UnwrapFieldAsyncValidateOrFn<TName, TOnBlurAsync, TFormOnBlurAsync>,\n      UnwrapFieldValidateOrFn<TName, TOnSubmit, TFormOnSubmit>,\n      UnwrapFieldAsyncValidateOrFn<TName, TOnSubmitAsync, TFormOnSubmitAsync>,\n      UnwrapFieldValidateOrFn<TName, TOnDynamic, TFormOnDynamic>,\n      UnwrapFieldAsyncValidateOrFn<TName, TOnDynamicAsync, TFormOnDynamicAsync>\n    >,\n  ) => {\n    this.setMeta((prev) => ({\n      ...prev,\n      errorMap: {\n        ...prev.errorMap,\n        ...errorMap,\n      },\n    }))\n  }\n\n  /**\n   * Parses the field's value with the given schema and returns\n   * issues (if any). This method does NOT set any internal errors.\n   * @param schema The standard schema to parse this field's value with.\n   */\n  parseValueWithSchema = (schema: StandardSchemaV1<TData, unknown>) => {\n    return standardSchemaValidators.validate(\n      { value: this.state.value, validationSource: 'field' },\n      schema,\n    )\n  }\n\n  /**\n   * Parses the field's value with the given schema and returns\n   * issues (if any). This method does NOT set any internal errors.\n   * @param schema The standard schema to parse this field's value with.\n   */\n  parseValueWithSchemaAsync = (schema: StandardSchemaV1<TData, unknown>) => {\n    return standardSchemaValidators.validateAsync(\n      { value: this.state.value, validationSource: 'field' },\n      schema,\n    )\n  }\n\n  private triggerOnBlurListener = () => {\n    const formDebounceMs = this.form.options.listeners?.onBlurDebounceMs\n    if (formDebounceMs && formDebounceMs > 0) {\n      if (this.timeoutIds.formListeners.blur) {\n        clearTimeout(this.timeoutIds.formListeners.blur)\n      }\n\n      this.timeoutIds.formListeners.blur = setTimeout(() => {\n        this.form.options.listeners?.onBlur?.({\n          formApi: this.form,\n          fieldApi: this,\n        })\n      }, formDebounceMs)\n    } else {\n      this.form.options.listeners?.onBlur?.({\n        formApi: this.form,\n        fieldApi: this,\n      })\n    }\n\n    const fieldDebounceMs = this.options.listeners?.onBlurDebounceMs\n    if (fieldDebounceMs && fieldDebounceMs > 0) {\n      if (this.timeoutIds.listeners.blur) {\n        clearTimeout(this.timeoutIds.listeners.blur)\n      }\n\n      this.timeoutIds.listeners.blur = setTimeout(() => {\n        this.options.listeners?.onBlur?.({\n          value: this.state.value,\n          fieldApi: this,\n        })\n      }, fieldDebounceMs)\n    } else {\n      this.options.listeners?.onBlur?.({\n        value: this.state.value,\n        fieldApi: this,\n      })\n    }\n  }\n\n  /**\n   * @private\n   */\n  triggerOnChangeListener = () => {\n    const formDebounceMs = this.form.options.listeners?.onChangeDebounceMs\n    if (formDebounceMs && formDebounceMs > 0) {\n      if (this.timeoutIds.formListeners.change) {\n        clearTimeout(this.timeoutIds.formListeners.change)\n      }\n\n      this.timeoutIds.formListeners.change = setTimeout(() => {\n        this.form.options.listeners?.onChange?.({\n          formApi: this.form,\n          fieldApi: this,\n        })\n      }, formDebounceMs)\n    } else {\n      this.form.options.listeners?.onChange?.({\n        formApi: this.form,\n        fieldApi: this,\n      })\n    }\n\n    const fieldDebounceMs = this.options.listeners?.onChangeDebounceMs\n    if (fieldDebounceMs && fieldDebounceMs > 0) {\n      if (this.timeoutIds.listeners.change) {\n        clearTimeout(this.timeoutIds.listeners.change)\n      }\n\n      this.timeoutIds.listeners.change = setTimeout(() => {\n        this.options.listeners?.onChange?.({\n          value: this.state.value,\n          fieldApi: this,\n        })\n      }, fieldDebounceMs)\n    } else {\n      this.options.listeners?.onChange?.({\n        value: this.state.value,\n        fieldApi: this,\n      })\n    }\n\n    for (const group of this.form.formGroupApis) {\n      if (isFieldInGroup(group.name, this.name)) {\n        group.triggerOnChangeListener()\n      }\n    }\n  }\n\n  /**\n   * @private\n   */\n  triggerOnSubmitListener = () => {\n    this.options.listeners?.onSubmit?.({\n      value: this.state.value,\n      fieldApi: this,\n    })\n  }\n}\n\nfunction normalizeError(rawError?: ValidationError) {\n  if (rawError) {\n    return rawError\n  }\n\n  return undefined\n}\n\nfunction getErrorMapKey(cause: ValidationCause) {\n  switch (cause) {\n    case 'submit':\n      return 'onSubmit'\n    case 'blur':\n      return 'onBlur'\n    case 'mount':\n      return 'onMount'\n    case 'server':\n      return 'onServer'\n    case 'dynamic':\n      return 'onDynamic'\n    case 'change':\n    default:\n      return 'onChange'\n  }\n}\n"],"names":["defaultFieldMeta","opts","evaluate","mergeOpts","getSyncValidatorArray","defaultValidationLogic","batch","determineFieldLevelErrorSourceAndValue","getAsyncValidatorArray","isFieldInGroup","standardSchemaValidators","createStore","isStandardSchemaValidator"],"mappings":"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"}