{"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  mergeOpts,\n} from './utils'\nimport { defaultValidationLogic } from './ValidationLogic'\nimport type { ReadonlyStore } from '@tanstack/store'\nimport type {\n  DeepKeys,\n  DeepValue,\n  RejectPromiseValidator,\n  UnwrapOneLevelOfArray,\n} from './util-types'\nimport type {\n  StandardSchemaV1,\n  StandardSchemaV1Issue,\n  TStandardSchemaValidatorValue,\n} from './standardSchemaValidator'\nimport type {\n  FieldInfo,\n  FormApi,\n  FormAsyncValidateOrFn,\n  FormValidateAsyncFn,\n  FormValidateFn,\n  FormValidateOrFn,\n} from './FormApi'\nimport type {\n  ListenerCause,\n  UpdateMetaOptions,\n  ValidationCause,\n  ValidationError,\n  ValidationErrorMap,\n  ValidationErrorMapSource,\n} from './types'\nimport type { AsyncValidator, SyncValidator, Updater } from './utils'\n\n/**\n * @private\n */\n// TODO: Add the `Unwrap` type to the errors\ntype FieldErrorMapFromValidator<\n  TFormData,\n  TName extends DeepKeys<TFormData>,\n  TData extends DeepValue<TFormData, TName>,\n  TOnMount extends undefined | FieldValidateOrFn<TFormData, TName, TData>,\n  TOnChange extends undefined | FieldValidateOrFn<TFormData, TName, TData>,\n  TOnChangeAsync extends\n    | undefined\n    | FieldAsyncValidateOrFn<TFormData, TName, TData>,\n  TOnBlur extends undefined | FieldValidateOrFn<TFormData, TName, TData>,\n  TOnBlurAsync extends\n    | undefined\n    | FieldAsyncValidateOrFn<TFormData, TName, TData>,\n  TOnSubmit extends undefined | FieldValidateOrFn<TFormData, TName, TData>,\n  TOnSubmitAsync extends\n    | undefined\n    | FieldAsyncValidateOrFn<TFormData, TName, TData>,\n> = Partial<\n  Record<\n    DeepKeys<TFormData>,\n    ValidationErrorMap<\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync\n    >\n  >\n>\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 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\ntype StandardBrandedSchemaV1<T> = T & { __standardSchemaV1: true }\n\ntype UnwrapFormValidateOrFnForInner<\n  TValidateOrFn extends undefined | FormValidateOrFn<any>,\n> = [TValidateOrFn] extends [FormValidateFn<any>]\n  ? ReturnType<TValidateOrFn>\n  : [TValidateOrFn] extends [StandardSchemaV1<infer TOut, any>]\n    ? StandardBrandedSchemaV1<TOut>\n    : undefined\n\nexport type UnwrapFieldValidateOrFn<\n  TName extends string,\n  TValidateOrFn extends undefined | FieldValidateOrFn<any, any, any>,\n  TFormValidateOrFn extends undefined | FormValidateOrFn<any>,\n> =\n  | ([TFormValidateOrFn] extends [StandardSchemaV1<any, infer TStandardOut>]\n      ? TName extends keyof TStandardOut\n        ? StandardSchemaV1Issue[]\n        : undefined\n      : undefined)\n  | (UnwrapFormValidateOrFnForInner<TFormValidateOrFn> extends infer TFormValidateVal\n      ? TFormValidateVal extends { __standardSchemaV1: true }\n        ? [DeepValue<TFormValidateVal, TName>] extends [never]\n          ? undefined\n          : StandardSchemaV1Issue[]\n        : TFormValidateVal extends { fields: any }\n          ? TName extends keyof TFormValidateVal['fields']\n            ? TFormValidateVal['fields'][TName]\n            : undefined\n          : undefined\n      : never)\n  | ([TValidateOrFn] extends [FieldValidateFn<any, any, any>]\n      ? ReturnType<TValidateOrFn>\n      : [TValidateOrFn] extends [StandardSchemaV1<any, any>]\n        ? // TODO: Check if `disableErrorFlat` is enabled, if so, return StandardSchemaV1Issue[][]\n          StandardSchemaV1Issue[]\n        : undefined)\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 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\ntype UnwrapFormAsyncValidateOrFnForInner<\n  TValidateOrFn extends undefined | FormAsyncValidateOrFn<any>,\n> = [TValidateOrFn] extends [FormValidateAsyncFn<any>]\n  ? Awaited<ReturnType<TValidateOrFn>>\n  : [TValidateOrFn] extends [StandardSchemaV1<infer TOut, any>]\n    ? StandardBrandedSchemaV1<TOut>\n    : undefined\n\nexport type UnwrapFieldAsyncValidateOrFn<\n  TName extends string,\n  TValidateOrFn extends undefined | FieldAsyncValidateOrFn<any, any, any>,\n  TFormValidateOrFn extends undefined | FormAsyncValidateOrFn<any>,\n> =\n  | ([TFormValidateOrFn] extends [StandardSchemaV1<any, infer TStandardOut>]\n      ? TName extends keyof TStandardOut\n        ? StandardSchemaV1Issue[]\n        : undefined\n      : undefined)\n  | (UnwrapFormAsyncValidateOrFnForInner<TFormValidateOrFn> extends infer TFormValidateVal\n      ? TFormValidateVal extends { __standardSchemaV1: true }\n        ? [DeepValue<TFormValidateVal, TName>] extends [never]\n          ? undefined\n          : StandardSchemaV1Issue[]\n        : TFormValidateVal extends { fields: any }\n          ? TName extends keyof TFormValidateVal['fields']\n            ? TFormValidateVal['fields'][TName]\n            : undefined\n          : undefined\n      : never)\n  | ([TValidateOrFn] extends [FieldValidateAsyncFn<any, any, any>]\n      ? Awaited<ReturnType<TValidateOrFn>>\n      : [TValidateOrFn] extends [StandardSchemaV1<any, any>]\n        ? // TODO: Check if `disableErrorFlat` is enabled, if so, return StandardSchemaV1Issue[][]\n          StandardSchemaV1Issue[]\n        : undefined)\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\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}\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  /**\n   * The field name. The type will be `DeepKeys<TParentData>` to ensure your name is a deep key of the parent dataset.\n   */\n  name: TName\n  /**\n   * An optional default value for the field.\n   */\n  defaultValue?: NoInfer<TData>\n  /**\n   * The default time to debounce async validation if there is not a more specific debounce time passed.\n   */\n  asyncDebounceMs?: number\n  /**\n   * If `true`, always run async validation, even if there are errors emitted during synchronous validation.\n   */\n  asyncAlways?: boolean\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   * An optional object with default metadata for the field.\n   */\n  defaultMeta?: Partial<\n    FieldMeta<\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      any,\n      any,\n      any,\n      any,\n      any,\n      any,\n      any,\n      any,\n      any\n    >\n  >\n  /**\n   * A list of listeners which attach to the corresponding events\n   */\n  listeners?: FieldListeners<TParentData, TName, TData>\n  /**\n   * Disable the `flat(1)` operation on `field.errors`. This is useful if you want to keep the error structure as is. Not suggested for most use-cases.\n   */\n  disableErrorFlat?: boolean\n}\n\n/**\n * An object type representing the required options for the FieldApi class.\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> extends FieldOptions<\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  form: FormApi<\n    TParentData,\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\nexport type FieldMetaBase<\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  TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n  TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n  TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n  TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n> = {\n  /**\n   * A flag indicating whether the field has been touched.\n   */\n  isTouched: boolean\n  /**\n   * A flag indicating whether the field has been blurred.\n   */\n  isBlurred: boolean\n  /**\n   * A flag that is `true` if the field's value has been modified by the user. Opposite of `isPristine`.\n   */\n  isDirty: boolean\n  /**\n   * A map of errors related to the field value.\n   */\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  /**\n   * @private allows tracking the source of the errors in the error map\n   */\n  errorSourceMap: ValidationErrorMapSource\n  /**\n   * A flag indicating whether the field is currently being validated.\n   */\n  isValidating: boolean\n  /**\n   * @private a counter that is incremented every time a structural array\n   * operation (push, insert, remove, swap, move, replace, clear) modifies\n   * the value of an array field. Adapters can subscribe to this to trigger\n   * re-renders for `mode=\"array\"` fields without having to subscribe to the\n   * full field value.\n   */\n  _arrayVersion: number\n}\n\nexport type AnyFieldMetaBase = FieldMetaBase<\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\nexport type FieldMetaDerived<\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  TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n  TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n  TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n  TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n> = {\n  /**\n   * An array of errors related to the field value.\n   */\n  errors: Array<\n    | UnwrapOneLevelOfArray<\n        UnwrapFieldValidateOrFn<TName, TOnMount, TFormOnMount>\n      >\n    | UnwrapOneLevelOfArray<\n        UnwrapFieldValidateOrFn<TName, TOnChange, TFormOnChange>\n      >\n    | UnwrapOneLevelOfArray<\n        UnwrapFieldAsyncValidateOrFn<TName, TOnChangeAsync, TFormOnChangeAsync>\n      >\n    | UnwrapOneLevelOfArray<\n        UnwrapFieldValidateOrFn<TName, TOnBlur, TFormOnBlur>\n      >\n    | UnwrapOneLevelOfArray<\n        UnwrapFieldAsyncValidateOrFn<TName, TOnBlurAsync, TFormOnBlurAsync>\n      >\n    | UnwrapOneLevelOfArray<\n        UnwrapFieldValidateOrFn<TName, TOnSubmit, TFormOnSubmit>\n      >\n    | UnwrapOneLevelOfArray<\n        UnwrapFieldAsyncValidateOrFn<TName, TOnSubmitAsync, TFormOnSubmitAsync>\n      >\n    | UnwrapOneLevelOfArray<\n        UnwrapFieldValidateOrFn<TName, TOnDynamic, TFormOnDynamic>\n      >\n    | UnwrapOneLevelOfArray<\n        UnwrapFieldAsyncValidateOrFn<\n          TName,\n          TOnDynamicAsync,\n          TFormOnDynamicAsync\n        >\n      >\n  >\n  /**\n   * A flag that is `true` if the field's value has not been modified by the user. Opposite of `isDirty`.\n   */\n  isPristine: boolean\n  /**\n   * A boolean indicating if the field is valid. Evaluates `true` if there are no field errors.\n   */\n  isValid: boolean\n  /**\n   * A flag indicating whether the field's current value is the default value\n   */\n  isDefaultValue: boolean\n}\n\nexport type AnyFieldMetaDerived = FieldMetaDerived<\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 * An object type representing the metadata of a field in a form.\n */\nexport type FieldMeta<\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  TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n  TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n  TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n  TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n> = FieldMetaBase<\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  FieldMetaDerived<\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\nexport type AnyFieldMeta = FieldMeta<\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 * An object type representing the state of a field.\n */\nexport type FieldState<\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  TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n  TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n  TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n  TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n> = {\n  /**\n   * The current value of the field.\n   */\n  value: TData\n  /**\n   * The current metadata of the field.\n   */\n  meta: FieldMeta<\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 * @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> {\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    FieldState<\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          | FieldState<\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 FieldState<\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      FieldMetaBase<\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      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   */\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 =\n      validates.some((v) => v.validate) ||\n      linkedFieldValidates.some((v) => v.validate)\n\n    if (hasAsyncValidators) {\n      if (!this.state.meta.isValidating) {\n        this.setMeta((prev) => ({ ...prev, isValidating: true }))\n      }\n\n      for (const linkedField of linkedFields) {\n        linkedField.setMeta((prev) => ({ ...prev, isValidating: true }))\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              }\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    if (hasAsyncValidators) {\n      this.setMeta((prev) => ({ ...prev, isValidating: false }))\n\n      for (const linkedField of linkedFields) {\n        linkedField.setMeta((prev) => ({ ...prev, isValidating: false }))\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 },\n  ): ValidationError[] | Promise<ValidationError[]> => {\n    // If the field is pristine, do not validate\n    if (!this.state.meta.isTouched) return []\n\n    // Attempt to sync validate first\n    const { fieldsErrorMap } = opts?.skipFormValidation\n      ? { fieldsErrorMap: {} as never }\n      : this.form.validateSync(cause)\n    const { hasErrored } = this.validateSync(\n      cause,\n      fieldsErrorMap[this.name] ?? {},\n    )\n\n    if (hasErrored && !this.options.asyncAlways) {\n      this.getInfo().validationMetaMap[\n        getErrorMapKey(cause)\n      ]?.lastAbortController.abort()\n      return this.state.meta.errors\n    }\n\n    // No error? Attempt async validation\n    const formValidationResultPromise = opts?.skipFormValidation\n      ? Promise.resolve({})\n      : this.form.validateAsync(cause)\n    return this.validateAsync(cause, formValidationResultPromise)\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}\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","standardSchemaValidators","createStore","isStandardSchemaValidator"],"mappings":"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"}