{"version":3,"file":"FormApi.cjs","sources":["../../src/FormApi.ts"],"sourcesContent":["import { batch, createStore } from '@tanstack/store'\nimport {\n  deleteBy,\n  determineFormLevelErrorSourceAndValue,\n  evaluate,\n  functionalUpdate,\n  getAsyncValidatorArray,\n  getBy,\n  getSyncValidatorArray,\n  isGlobalFormValidationError,\n  isNonEmptyArray,\n  mergeOpts,\n  setBy,\n  throttleFormState,\n  uuid,\n} from './utils'\nimport { defaultValidationLogic } from './ValidationLogic'\nimport {\n  isStandardSchemaValidator,\n  standardSchemaValidators,\n} from './standardSchemaValidator'\nimport { defaultFieldMeta, metaHelper } from './metaHelper'\nimport { formEventClient } from './EventClient'\nimport type { ReadonlyStore, Store } from '@tanstack/store'\n\n// types\nimport type { ValidationLogicFn } from './ValidationLogic'\nimport type {\n  StandardSchemaV1,\n  StandardSchemaV1Issue,\n  TStandardSchemaValidatorValue,\n} from './standardSchemaValidator'\nimport type {\n  AnyFieldApi,\n  AnyFieldMeta,\n  AnyFieldMetaBase,\n  FieldApi,\n} from './FieldApi'\nimport type {\n  ExtractGlobalFormError,\n  FieldManipulator,\n  FormValidationError,\n  FormValidationErrorMap,\n  GlobalFormValidationError,\n  ListenerCause,\n  UpdateMetaOptions,\n  ValidationCause,\n  ValidationError,\n  ValidationErrorMap,\n  ValidationErrorMapKeys,\n} from './types'\nimport type {\n  DeepKeys,\n  DeepKeysOfType,\n  DeepValue,\n  RejectPromiseValidator,\n} from './util-types'\nimport type { Updater } from './utils'\n\n/**\n * @private\n */\n// TODO: Add the `Unwrap` type to the errors\ntype FormErrorMapFromValidator<\n  TFormData,\n  TOnMount extends undefined | FormValidateOrFn<TFormData>,\n  TOnChange extends undefined | FormValidateOrFn<TFormData>,\n  TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n  TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n  TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n  TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n> = Partial<\n  Record<\n    DeepKeys<TFormData>,\n    ValidationErrorMap<\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync\n    >\n  >\n>\n\nexport type FormValidateFn<TFormData> = (props: {\n  value: TFormData\n  formApi: FormApi<\n    TFormData,\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  >\n}) => unknown\n\n/**\n * @private\n */\nexport type FormValidateOrFn<TFormData> =\n  | FormValidateFn<TFormData>\n  | StandardSchemaV1<TFormData, unknown>\n\nexport type UnwrapFormValidateOrFn<\n  TValidateOrFn extends undefined | FormValidateOrFn<any>,\n> = [TValidateOrFn] extends [FormValidateFn<any>]\n  ? ExtractGlobalFormError<ReturnType<TValidateOrFn>>\n  : [TValidateOrFn] extends [StandardSchemaV1<any, any>]\n    ? Record<string, StandardSchemaV1Issue[]>\n    : undefined\n\n/**\n * @private\n */\nexport type FormValidateAsyncFn<TFormData> = (props: {\n  value: TFormData\n  formApi: FormApi<\n    TFormData,\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  >\n  signal: AbortSignal\n}) => unknown | Promise<unknown>\n\nexport type FormValidator<TFormData, TType, TFn = unknown> = {\n  validate(options: { value: TType }, fn: TFn): ValidationError\n  validateAsync(\n    options: { value: TType },\n    fn: TFn,\n  ): Promise<FormValidationError<TFormData>>\n}\n\ntype ValidationPromiseResult<TFormData> =\n  | {\n      fieldErrors: Partial<Record<DeepKeys<TFormData>, ValidationError>>\n      errorMapKey: ValidationErrorMapKeys\n    }\n  | undefined\n\n/**\n * @private\n */\nexport type FormAsyncValidateOrFn<TFormData> =\n  | FormValidateAsyncFn<TFormData>\n  | StandardSchemaV1<TFormData, unknown>\n\nexport type UnwrapFormAsyncValidateOrFn<\n  TValidateOrFn extends undefined | FormAsyncValidateOrFn<any>,\n> = [TValidateOrFn] extends [FormValidateAsyncFn<any>]\n  ? ExtractGlobalFormError<Awaited<ReturnType<TValidateOrFn>>>\n  : [TValidateOrFn] extends [StandardSchemaV1<any, any>]\n    ? Record<string, StandardSchemaV1Issue[]>\n    : undefined\n\nexport interface FormValidators<\n  TFormData,\n  TOnMount extends undefined | FormValidateOrFn<TFormData>,\n  TOnChange extends undefined | FormValidateOrFn<TFormData>,\n  TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n  TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n  TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n  TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n> {\n  /**\n   * Optional function that fires as soon as the component mounts.\n   */\n  onMount?: RejectPromiseValidator<TOnMount>\n  /**\n   * Optional function that checks the validity of your data whenever a value changes\n   */\n  onChange?: RejectPromiseValidator<TOnChange>\n  /**\n   * Optional onChange asynchronous counterpart to onChange. Useful for more complex validation logic that might involve server requests.\n   */\n  onChangeAsync?: TOnChangeAsync\n  /**\n   * The default time in milliseconds that 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   * Optional function that validates the form data when a field loses focus, returns a `FormValidationError`\n   */\n  onBlur?: RejectPromiseValidator<TOnBlur>\n  /**\n   * Optional onBlur asynchronous validation method for when a field loses focus returns a ` FormValidationError` or a promise of `Promise<FormValidationError>`\n   */\n  onBlurAsync?: TOnBlurAsync\n  /**\n   * The default time in milliseconds that 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  onSubmit?: RejectPromiseValidator<TOnSubmit>\n  onSubmitAsync?: TOnSubmitAsync\n  onDynamic?: RejectPromiseValidator<TOnDynamic>\n  onDynamicAsync?: TOnDynamicAsync\n  onDynamicAsyncDebounceMs?: number\n}\n\nexport interface FormListeners<\n  TFormData,\n  TOnMount extends undefined | FormValidateOrFn<TFormData>,\n  TOnChange extends undefined | FormValidateOrFn<TFormData>,\n  TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n  TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n  TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n  TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TSubmitMeta = never,\n> {\n  onChange?: (props: {\n    formApi: FormApi<\n      TFormData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync,\n      TOnServer,\n      TSubmitMeta\n    >\n    fieldApi: AnyFieldApi\n  }) => void\n  onChangeDebounceMs?: number\n\n  onBlur?: (props: {\n    formApi: FormApi<\n      TFormData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync,\n      TOnServer,\n      TSubmitMeta\n    >\n    fieldApi: AnyFieldApi\n  }) => void\n  onBlurDebounceMs?: number\n\n  onMount?: (props: {\n    formApi: FormApi<\n      TFormData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync,\n      TOnServer,\n      TSubmitMeta\n    >\n  }) => void\n\n  onSubmit?: (props: {\n    formApi: FormApi<\n      TFormData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync,\n      TOnServer,\n      TSubmitMeta\n    >\n    meta: TSubmitMeta\n  }) => void\n\n  onFieldUnmount?: (props: {\n    formApi: FormApi<\n      TFormData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync,\n      TOnServer,\n      TSubmitMeta\n    >\n    fieldApi: AnyFieldApi\n  }) => void\n}\n\n/**\n * An object representing the base properties of a form, unrelated to any validators\n */\nexport interface BaseFormOptions<in out TFormData, in out TSubmitMeta = never> {\n  /**\n   * Set initial values for your form.\n   */\n  defaultValues?: TFormData\n  /**\n   * onSubmitMeta, the data passed from the handleSubmit handler, to the onSubmit function props\n   */\n  onSubmitMeta?: TSubmitMeta\n}\n\n/**\n * An object representing the options for a form.\n */\nexport interface FormOptions<\n  in out TFormData,\n  in out TOnMount extends undefined | FormValidateOrFn<TFormData>,\n  in out TOnChange extends undefined | FormValidateOrFn<TFormData>,\n  in out TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  in out TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n  in out TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  in out TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n  in out TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  in out TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n  in out TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  in out TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n  in out TSubmitMeta = never,\n> extends BaseFormOptions<TFormData, TSubmitMeta> {\n  /**\n   * The form name, used for devtools and identification\n   */\n  formId?: string\n  /**\n   * The default state for the form.\n   */\n  defaultState?: Partial<\n    FormState<\n      TFormData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync,\n      TOnServer\n    >\n  >\n  /**\n   * If true, always run async validation, even when sync validation has produced an error. Defaults to undefined.\n   */\n  asyncAlways?: boolean\n  /**\n   * Optional time in milliseconds if you want to introduce a delay before firing off an async action.\n   */\n  asyncDebounceMs?: number\n  /**\n   * If true, allows the form to be submitted in an invalid state i.e. canSubmit will remain true regardless of validation errors. Defaults to undefined.\n   */\n  canSubmitWhenInvalid?: boolean\n  /**\n   * A list of validators to pass to the form\n   */\n  validators?: FormValidators<\n    TFormData,\n    TOnMount,\n    TOnChange,\n    TOnChangeAsync,\n    TOnBlur,\n    TOnBlurAsync,\n    TOnSubmit,\n    TOnSubmitAsync,\n    TOnDynamic,\n    TOnDynamicAsync\n  >\n\n  validationLogic?: ValidationLogicFn\n\n  /**\n   * form level listeners\n   */\n  listeners?: FormListeners<\n    TFormData,\n    TOnMount,\n    TOnChange,\n    TOnChangeAsync,\n    TOnBlur,\n    TOnBlurAsync,\n    TOnSubmit,\n    TOnSubmitAsync,\n    TOnDynamic,\n    TOnDynamicAsync,\n    TOnServer,\n    TSubmitMeta\n  >\n\n  /**\n   * A function to be called when the form is submitted, what should happen once the user submits a valid form returns `any` or a promise `Promise<any>`\n   */\n  onSubmit?: (props: {\n    value: TFormData\n    formApi: FormApi<\n      TFormData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync,\n      TOnServer,\n      TSubmitMeta\n    >\n    meta: TSubmitMeta\n  }) => any | Promise<any>\n  /**\n   * Specify an action for scenarios where the user tries to submit an invalid form.\n   */\n  onSubmitInvalid?: (props: {\n    value: TFormData\n    formApi: FormApi<\n      TFormData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync,\n      TOnServer,\n      TSubmitMeta\n    >\n    meta: TSubmitMeta\n  }) => void\n  // Only runs in `core` for the first run on the Form, any additional transforms\n  // need to be handled at framework runtime due to complexity of comparison check\n  // and state merging\n  //\n  // Made intentionally type loose to avoid headaches with framework's individual\n  // `useTransform` hooks\n  transform?: (data: unknown) => unknown\n}\n\nexport type AnyFormOptions = FormOptions<\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 representing the validation metadata for a field. Not intended for public usage.\n */\nexport type ValidationMeta = {\n  /**\n   * An abort controller stored in memory to cancel previous async validation attempts.\n   */\n  lastAbortController: AbortController\n}\n\n/**\n * An object representing the field information for a specific field within the form.\n */\nexport type FieldInfo<TFormData> = {\n  /**\n   * An instance of the FieldAPI.\n   */\n  instance: FieldApi<\n    TFormData,\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  > | null\n  /**\n   * A record of field validation internal handling.\n   */\n  validationMetaMap: Record<ValidationErrorMapKeys, ValidationMeta | undefined>\n}\n\n/**\n * An object representing the current state of the form.\n */\nexport type BaseFormState<\n  in out TFormData,\n  in out TOnMount extends undefined | FormValidateOrFn<TFormData>,\n  in out TOnChange extends undefined | FormValidateOrFn<TFormData>,\n  in out TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  in out TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n  in out TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  in out TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n  in out TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  in out TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n  in out TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  in out TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n> = {\n  /**\n   * The current values of the form fields.\n   */\n  values: TFormData\n  /**\n   * The error map for the form itself.\n   */\n  errorMap: ValidationErrorMap<\n    UnwrapFormValidateOrFn<TOnMount>,\n    UnwrapFormValidateOrFn<TOnChange>,\n    UnwrapFormAsyncValidateOrFn<TOnChangeAsync>,\n    UnwrapFormValidateOrFn<TOnBlur>,\n    UnwrapFormAsyncValidateOrFn<TOnBlurAsync>,\n    UnwrapFormValidateOrFn<TOnSubmit>,\n    UnwrapFormAsyncValidateOrFn<TOnSubmitAsync>,\n    UnwrapFormValidateOrFn<TOnDynamic>,\n    UnwrapFormAsyncValidateOrFn<TOnDynamicAsync>,\n    UnwrapFormAsyncValidateOrFn<TOnServer>\n  >\n  /**\n   * An internal mechanism used for keeping track of validation logic in a form.\n   */\n  validationMetaMap: Record<ValidationErrorMapKeys, ValidationMeta | undefined>\n  /**\n   * A record of field metadata for each field in the form, not including the derived properties, like `errors` and such\n   */\n  fieldMetaBase: Partial<Record<DeepKeys<TFormData>, AnyFieldMetaBase>>\n  /**\n   * A boolean indicating if the form is currently in the process of being submitted after `handleSubmit` is called.\n   *\n   * Goes back to `false` when submission completes for one of the following reasons:\n   * - the validation step returned errors.\n   * - the `onSubmit` function has completed.\n   *\n   * Note: if you're running async operations in your `onSubmit` function make sure to await them to ensure `isSubmitting` is set to `false` only when the async operation completes.\n   *\n   * This is useful for displaying loading indicators or disabling form inputs during submission.\n   *\n   */\n  isSubmitting: boolean\n  /**\n   * A boolean indicating if the `onSubmit` function has completed successfully.\n   *\n   * Goes back to `false` at each new submission attempt.\n   *\n   * Note: you can use isSubmitting to check if the form is currently submitting.\n   */\n  isSubmitted: boolean\n  /**\n   * A boolean indicating if the form or any of its fields are currently validating.\n   */\n  isValidating: boolean\n  /**\n   * A counter for tracking the number of submission attempts.\n   */\n  submissionAttempts: number\n  /**\n   * A boolean indicating if the last submission was successful.\n   */\n  isSubmitSuccessful: boolean\n  /**\n   * @private, used to force a re-evaluation of the form state when options change\n   */\n  _force_re_eval?: boolean\n}\n\nexport type AnyBaseFormState = BaseFormState<\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 DerivedFormState<\n  in out TFormData,\n  in out TOnMount extends undefined | FormValidateOrFn<TFormData>,\n  in out TOnChange extends undefined | FormValidateOrFn<TFormData>,\n  in out TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  in out TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n  in out TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  in out TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n  in out TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  in out TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n  in out TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  in out TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n> = {\n  /**\n   * A boolean indicating if the form is currently validating.\n   */\n  isFormValidating: boolean\n  /**\n   * A boolean indicating if the form is valid.\n   */\n  isFormValid: boolean\n  /**\n   * The error array for the form itself.\n   */\n  errors: Array<\n    NonNullable<\n      | UnwrapFormValidateOrFn<TOnMount>\n      | UnwrapFormValidateOrFn<TOnChange>\n      | UnwrapFormAsyncValidateOrFn<TOnChangeAsync>\n      | UnwrapFormValidateOrFn<TOnBlur>\n      | UnwrapFormAsyncValidateOrFn<TOnBlurAsync>\n      | UnwrapFormValidateOrFn<TOnSubmit>\n      | UnwrapFormAsyncValidateOrFn<TOnSubmitAsync>\n      | UnwrapFormValidateOrFn<TOnDynamic>\n      | UnwrapFormAsyncValidateOrFn<TOnDynamicAsync>\n      | UnwrapFormAsyncValidateOrFn<TOnServer>\n    >\n  >\n  /**\n   * A boolean indicating if any of the form fields are currently validating.\n   */\n  isFieldsValidating: boolean\n  /**\n   * A boolean indicating if all the form fields are valid. Evaluates `true` if there are no field errors.\n   */\n  isFieldsValid: boolean\n  /**\n   * A boolean indicating if any of the form fields have been touched.\n   */\n  isTouched: boolean\n  /**\n   * A boolean indicating if any of the form fields have been blurred.\n   */\n  isBlurred: boolean\n  /**\n   * A boolean indicating if any of the form's fields' values have been modified by the user. Evaluates `true` if the user have modified at least one of the fields. Opposite of `isPristine`.\n   */\n  isDirty: boolean\n  /**\n   * A boolean indicating if none of the form's fields' values have been modified by the user. Evaluates `true` if the user have not modified any of the fields. Opposite of `isDirty`.\n   */\n  isPristine: boolean\n  /**\n   * A boolean indicating if all of the form's fields are the same as default values.\n   */\n  isDefaultValue: boolean\n  /**\n   * A boolean indicating if the form and all its fields are valid. Evaluates `true` if there are no errors.\n   */\n  isValid: boolean\n  /**\n   * A boolean indicating if the form can be submitted based on its current state.\n   */\n  canSubmit: boolean\n  /**\n   * A record of field metadata for each field in the form.\n   */\n  fieldMeta: Partial<Record<DeepKeys<TFormData>, AnyFieldMeta>>\n}\n\nexport interface FormState<\n  in out TFormData,\n  in out TOnMount extends undefined | FormValidateOrFn<TFormData>,\n  in out TOnChange extends undefined | FormValidateOrFn<TFormData>,\n  in out TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  in out TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n  in out TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  in out TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n  in out TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  in out TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n  in out TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  in out TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n>\n  extends\n    BaseFormState<\n      TFormData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync,\n      TOnServer\n    >,\n    DerivedFormState<\n      TFormData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync,\n      TOnServer\n    > {}\n\nexport type AnyFormState = FormState<\n  any,\n  any,\n  any,\n  any,\n  any,\n  any,\n  any,\n  any,\n  any,\n  any,\n  any\n>\n\nfunction getDefaultFormState<\n  TFormData,\n  TOnMount extends undefined | FormValidateOrFn<TFormData>,\n  TOnChange extends undefined | FormValidateOrFn<TFormData>,\n  TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n  TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n  TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n  TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n>(\n  defaultState: Partial<\n    FormState<\n      TFormData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync,\n      TOnServer\n    >\n  >,\n): BaseFormState<\n  TFormData,\n  TOnMount,\n  TOnChange,\n  TOnChangeAsync,\n  TOnBlur,\n  TOnBlurAsync,\n  TOnSubmit,\n  TOnSubmitAsync,\n  TOnDynamic,\n  TOnDynamicAsync,\n  TOnServer\n> {\n  return {\n    values: defaultState.values ?? ({} as never),\n    errorMap: defaultState.errorMap ?? {},\n    fieldMetaBase: defaultState.fieldMetaBase ?? ({} as never),\n    isSubmitted: defaultState.isSubmitted ?? false,\n    isSubmitting: defaultState.isSubmitting ?? false,\n    isValidating: defaultState.isValidating ?? false,\n    submissionAttempts: defaultState.submissionAttempts ?? 0,\n    isSubmitSuccessful: defaultState.isSubmitSuccessful ?? false,\n    validationMetaMap: defaultState.validationMetaMap ?? {\n      onChange: undefined,\n      onBlur: undefined,\n      onSubmit: undefined,\n      onMount: undefined,\n      onServer: undefined,\n      onDynamic: undefined,\n    },\n  }\n}\n\n/**\n * @public\n *\n * A type representing the Form API with all generics set to `any` for convenience.\n */\nexport type AnyFormApi = FormApi<\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 Form API. It handles the logic and interactions with the form state.\n *\n * Normally, you will not need to create a new `FormApi` instance directly. Instead, you will use a framework\n * hook/function like `useForm` or `createForm` 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 the `new FormApi` constructor.\n */\nexport class FormApi<\n  in out TFormData,\n  in out TOnMount extends undefined | FormValidateOrFn<TFormData>,\n  in out TOnChange extends undefined | FormValidateOrFn<TFormData>,\n  in out TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  in out TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n  in out TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  in out TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n  in out TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  in out TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n  in out TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  in out TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n  in out TSubmitMeta = never,\n> implements FieldManipulator<TFormData, TSubmitMeta> {\n  /**\n   * The options for the form.\n   */\n  options: FormOptions<\n    TFormData,\n    TOnMount,\n    TOnChange,\n    TOnChangeAsync,\n    TOnBlur,\n    TOnBlurAsync,\n    TOnSubmit,\n    TOnSubmitAsync,\n    TOnDynamic,\n    TOnDynamicAsync,\n    TOnServer,\n    TSubmitMeta\n  > = {}\n\n  baseStore!: Store<\n    BaseFormState<\n      TFormData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync,\n      TOnServer\n    >\n  >\n  fieldMetaDerived: Store<\n    FormState<\n      TFormData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync,\n      TOnServer\n    >['fieldMeta']\n  >\n  store: ReadonlyStore<\n    FormState<\n      TFormData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync,\n      TOnServer\n    >\n  >\n  /**\n   * A record of field information for each field in the form.\n   */\n  fieldInfo: Partial<Record<DeepKeys<TFormData>, FieldInfo<TFormData>>> = {}\n\n  get state() {\n    return this.store.state\n  }\n\n  /**\n   * @private\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   * @private\n   */\n  _formId: string\n  /**\n   * @private\n   */\n  private _devtoolsSubmissionOverride: boolean\n\n  /**\n   * Constructs a new `FormApi` instance with the given form options.\n   */\n  constructor(\n    opts?: FormOptions<\n      TFormData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync,\n      TOnServer,\n      TSubmitMeta\n    >,\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._formId = opts?.formId ?? uuid()\n\n    this._devtoolsSubmissionOverride = false\n\n    let baseStoreVal: BaseFormState<\n      TFormData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync,\n      TOnServer\n    > = getDefaultFormState({\n      ...(opts?.defaultState as any),\n      values: opts?.defaultValues ?? opts?.defaultState?.values,\n      isFormValid: true,\n    })\n\n    if (opts?.transform) {\n      baseStoreVal = (\n        opts.transform({ state: baseStoreVal }) as { state: unknown }\n      ).state as never\n      for (const errKey of Object.keys(baseStoreVal.errorMap)) {\n        const errKeyMap = baseStoreVal.errorMap[errKey as never] as\n          | GlobalFormValidationError<any>\n          | undefined\n        if (\n          errKeyMap === undefined ||\n          !isGlobalFormValidationError(errKeyMap)\n        ) {\n          continue\n        }\n\n        for (const fieldName of Object.keys(errKeyMap.fields)) {\n          const fieldErr = errKeyMap.fields[fieldName]\n          if (fieldErr === undefined) {\n            continue\n          }\n          const existingFieldMeta = baseStoreVal.fieldMetaBase[\n            fieldName as never\n          ] as AnyFieldMetaBase | undefined\n          baseStoreVal.fieldMetaBase[fieldName as never] = {\n            isTouched: false,\n            isValidating: false,\n            isBlurred: false,\n            isDirty: false,\n            _arrayVersion: 0,\n            ...(existingFieldMeta ?? {}),\n            errorSourceMap: {\n              ...(existingFieldMeta?.['errorSourceMap'] ?? {}),\n              onChange: 'form',\n            },\n            errorMap: {\n              ...(existingFieldMeta?.['errorMap'] ?? {}),\n              [errKey as never]: fieldErr,\n            },\n          } satisfies AnyFieldMetaBase as never\n        }\n      }\n    }\n\n    this.baseStore = createStore(baseStoreVal) as never\n\n    let prevBaseStore:\n      | BaseFormState<\n          TFormData,\n          TOnMount,\n          TOnChange,\n          TOnChangeAsync,\n          TOnBlur,\n          TOnBlurAsync,\n          TOnSubmit,\n          TOnSubmitAsync,\n          TOnDynamic,\n          TOnDynamicAsync,\n          TOnServer\n        >\n      | undefined = undefined\n\n    this.fieldMetaDerived = createStore(\n      (prevVal: Record<DeepKeys<TFormData>, AnyFieldMeta> | undefined) => {\n        const currBaseStore = this.baseStore.get()\n\n        let originalMetaCount = 0\n\n        const fieldMeta: FormState<\n          TFormData,\n          TOnMount,\n          TOnChange,\n          TOnChangeAsync,\n          TOnBlur,\n          TOnBlurAsync,\n          TOnSubmit,\n          TOnSubmitAsync,\n          TOnDynamic,\n          TOnDynamicAsync,\n          TOnServer\n        >['fieldMeta'] = {}\n\n        for (const fieldName of Object.keys(\n          currBaseStore.fieldMetaBase,\n        ) as Array<keyof typeof currBaseStore.fieldMetaBase>) {\n          const currBaseMeta = currBaseStore.fieldMetaBase[\n            fieldName as never\n          ] as AnyFieldMetaBase\n\n          const prevBaseMeta = prevBaseStore?.fieldMetaBase[\n            fieldName as never\n          ] as AnyFieldMetaBase | undefined\n\n          const prevFieldInfo =\n            prevVal?.[fieldName as never as keyof typeof prevVal]\n\n          const curFieldVal = getBy(currBaseStore.values, fieldName)\n\n          let fieldErrors = prevFieldInfo?.errors\n          if (\n            !prevBaseMeta ||\n            currBaseMeta.errorMap !== prevBaseMeta.errorMap\n          ) {\n            // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n            fieldErrors = Object.values(currBaseMeta.errorMap ?? {}).filter(\n              (val) => val !== undefined,\n            )\n\n            // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n            const fieldInstance = this.getFieldInfo(fieldName)?.instance\n\n            if (!fieldInstance || !fieldInstance.options.disableErrorFlat) {\n              fieldErrors = fieldErrors.flat(1)\n            }\n          }\n\n          // As primitives, we don't need to aggressively persist the same referential value for performance reasons\n          const isFieldValid = !isNonEmptyArray(fieldErrors)\n          const isFieldPristine = !currBaseMeta.isDirty\n          const isDefaultValue = evaluate(\n            curFieldVal,\n            // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n            this.getFieldInfo(fieldName)?.instance?.options.defaultValue ??\n              getBy(this.options.defaultValues, fieldName),\n          )\n\n          if (\n            prevFieldInfo &&\n            prevFieldInfo.isPristine === isFieldPristine &&\n            prevFieldInfo.isValid === isFieldValid &&\n            prevFieldInfo.isDefaultValue === isDefaultValue &&\n            prevFieldInfo.errors === fieldErrors &&\n            currBaseMeta === prevBaseMeta\n          ) {\n            fieldMeta[fieldName] = prevFieldInfo\n            originalMetaCount++\n            continue\n          }\n\n          fieldMeta[fieldName] = {\n            ...currBaseMeta,\n            errors: fieldErrors ?? [],\n            isPristine: isFieldPristine,\n            isValid: isFieldValid,\n            isDefaultValue: isDefaultValue,\n          } satisfies AnyFieldMeta as AnyFieldMeta\n        }\n\n        if (!Object.keys(currBaseStore.fieldMetaBase).length) return fieldMeta\n\n        if (\n          prevVal &&\n          originalMetaCount === Object.keys(currBaseStore.fieldMetaBase).length\n        ) {\n          return prevVal\n        }\n\n        prevBaseStore = this.baseStore.get()\n\n        return fieldMeta\n      },\n    ) as never\n\n    let prevBaseStoreForStore:\n      | BaseFormState<\n          TFormData,\n          TOnMount,\n          TOnChange,\n          TOnChangeAsync,\n          TOnBlur,\n          TOnBlurAsync,\n          TOnSubmit,\n          TOnSubmitAsync,\n          TOnDynamic,\n          TOnDynamicAsync,\n          TOnServer\n        >\n      | undefined = undefined\n\n    this.store = createStore<\n      FormState<\n        TFormData,\n        TOnMount,\n        TOnChange,\n        TOnChangeAsync,\n        TOnBlur,\n        TOnBlurAsync,\n        TOnSubmit,\n        TOnSubmitAsync,\n        TOnDynamic,\n        TOnDynamicAsync,\n        TOnServer\n      >\n    >((prevVal) => {\n      const currBaseStore = this.baseStore.get()\n      const currFieldMeta = this.fieldMetaDerived.get()\n\n      // Computed state\n      const fieldMetaValues = Object.values(currFieldMeta).filter(\n        Boolean,\n      ) as AnyFieldMeta[]\n\n      const isFieldsValidating = fieldMetaValues.some(\n        (field) => field.isValidating,\n      )\n\n      const isFieldsValid = fieldMetaValues.every((field) => field.isValid)\n\n      const isTouched = fieldMetaValues.some((field) => field.isTouched)\n      const isBlurred = fieldMetaValues.some((field) => field.isBlurred)\n      const isDefaultValue = fieldMetaValues.every(\n        (field) => field.isDefaultValue,\n      )\n\n      const shouldInvalidateOnMount =\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        isTouched && currBaseStore.errorMap?.onMount\n\n      const isDirty = fieldMetaValues.some((field) => field.isDirty)\n      const isPristine = !isDirty\n\n      const hasOnMountError = Boolean(\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        currBaseStore.errorMap?.onMount ||\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        fieldMetaValues.some((f) => f?.errorMap?.onMount),\n      )\n\n      const isValidating = !!isFieldsValidating\n\n      // As `errors` is not a primitive, we need to aggressively persist the same referencial value for performance reasons\n      let errors = prevVal?.errors ?? []\n      if (\n        !prevBaseStoreForStore ||\n        currBaseStore.errorMap !== prevBaseStoreForStore.errorMap\n      ) {\n        errors = Object.values(currBaseStore.errorMap).reduce<\n          Array<\n            NonNullable<\n              | UnwrapFormValidateOrFn<TOnMount>\n              | UnwrapFormValidateOrFn<TOnChange>\n              | UnwrapFormAsyncValidateOrFn<TOnChangeAsync>\n              | UnwrapFormValidateOrFn<TOnBlur>\n              | UnwrapFormAsyncValidateOrFn<TOnBlurAsync>\n              | UnwrapFormValidateOrFn<TOnSubmit>\n              | UnwrapFormAsyncValidateOrFn<TOnSubmitAsync>\n              | UnwrapFormAsyncValidateOrFn<TOnServer>\n            >\n          >\n        >((prev, curr) => {\n          if (curr === undefined) return prev\n\n          if (curr && isGlobalFormValidationError(curr)) {\n            prev.push(curr.form as never)\n            return prev\n          }\n          prev.push(curr as never)\n          return prev\n        }, [])\n      }\n\n      const isFormValid = errors.length === 0\n      const isValid = isFieldsValid && isFormValid\n      const submitInvalid = this.options.canSubmitWhenInvalid ?? false\n      const canSubmit =\n        (currBaseStore.submissionAttempts === 0 &&\n          !isTouched &&\n          !hasOnMountError) ||\n        (!isValidating && !currBaseStore.isSubmitting && isValid) ||\n        submitInvalid\n\n      let errorMap = currBaseStore.errorMap\n      if (shouldInvalidateOnMount) {\n        errors = errors.filter((err) => err !== currBaseStore.errorMap.onMount)\n        errorMap = Object.assign(errorMap, { onMount: undefined })\n      }\n\n      if (\n        prevVal &&\n        prevBaseStoreForStore &&\n        prevVal.errorMap === errorMap &&\n        prevVal.fieldMeta === this.fieldMetaDerived.state &&\n        prevVal.errors === errors &&\n        prevVal.isFieldsValidating === isFieldsValidating &&\n        prevVal.isFieldsValid === isFieldsValid &&\n        prevVal.isFormValid === isFormValid &&\n        prevVal.isValid === isValid &&\n        prevVal.canSubmit === canSubmit &&\n        prevVal.isTouched === isTouched &&\n        prevVal.isBlurred === isBlurred &&\n        prevVal.isPristine === isPristine &&\n        prevVal.isDefaultValue === isDefaultValue &&\n        prevVal.isDirty === isDirty &&\n        evaluate(prevBaseStoreForStore, currBaseStore)\n      ) {\n        return prevVal\n      }\n\n      const state = {\n        ...currBaseStore,\n        errorMap,\n        fieldMeta: this.fieldMetaDerived.state,\n        errors,\n        isFieldsValidating,\n        isFieldsValid,\n        isFormValid,\n        isValid,\n        canSubmit,\n        isTouched,\n        isBlurred,\n        isPristine,\n        isDefaultValue,\n        isDirty,\n      } as FormState<\n        TFormData,\n        TOnMount,\n        TOnChange,\n        TOnChangeAsync,\n        TOnBlur,\n        TOnBlurAsync,\n        TOnSubmit,\n        TOnSubmitAsync,\n        TOnDynamic,\n        TOnDynamicAsync,\n        TOnServer\n      >\n\n      prevBaseStoreForStore = this.baseStore.get()\n\n      return state\n    })\n\n    this.handleSubmit = this.handleSubmit.bind(this)\n\n    this.update(opts || {})\n  }\n\n  get formId(): string {\n    return this._formId\n  }\n\n  /**\n   * @private\n   */\n  runValidator<\n    TValue extends TStandardSchemaValidatorValue<TFormData> & {\n      formApi: AnyFormApi\n    },\n    TType extends 'validate' | 'validateAsync',\n  >(props: {\n    validate: TType extends 'validate'\n      ? FormValidateOrFn<TFormData>\n      : FormAsyncValidateOrFn<TFormData>\n    value: TValue\n    type: TType\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 FormValidateFn<any>)(props.value) as never\n  }\n\n  mount = () => {\n    // devtool broadcasts\n    const cleanupDevtoolBroadcast = this.store.subscribe(() => {\n      throttleFormState(this)\n    })\n\n    // devtool requests\n    const cleanupFormStateListener = formEventClient.on(\n      'request-form-state',\n      (e) => {\n        if (e.payload.id === this._formId) {\n          formEventClient.emit('form-api', {\n            id: this._formId,\n            state: this.store.state,\n            options: this.options,\n          })\n        }\n      },\n    )\n\n    const cleanupFormResetListener = formEventClient.on(\n      'request-form-reset',\n      (e) => {\n        if (e.payload.id === this._formId) {\n          this.reset()\n        }\n      },\n    )\n\n    const cleanupFormForceSubmitListener = formEventClient.on(\n      'request-form-force-submit',\n      (e) => {\n        if (e.payload.id === this._formId) {\n          this._devtoolsSubmissionOverride = true\n          this.handleSubmit()\n          this._devtoolsSubmissionOverride = false\n        }\n      },\n    )\n\n    const cleanup = () => {\n      cleanupFormForceSubmitListener()\n      cleanupFormResetListener()\n      cleanupFormStateListener()\n      cleanupDevtoolBroadcast.unsubscribe()\n\n      // broadcast form unmount for devtools\n      formEventClient.emit('form-unmounted', {\n        id: this._formId,\n      })\n    }\n\n    this.options.listeners?.onMount?.({ formApi: this })\n\n    const { onMount } = this.options.validators || {}\n\n    // broadcast form state for devtools on mounting\n    formEventClient.emit('form-api', {\n      id: this._formId,\n      state: this.store.state,\n      options: this.options,\n    })\n\n    // if no validation skip\n    if (!onMount) return cleanup\n\n    // validate\n    this.validateSync('mount')\n    return cleanup\n  }\n\n  /**\n   * Updates the form options and form state.\n   */\n  update = (\n    options?: FormOptions<\n      TFormData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync,\n      TOnServer,\n      TSubmitMeta\n    >,\n  ) => {\n    if (!options) return\n\n    const oldOptions = this.options\n\n    // Options need to be updated first so that when the store is updated, the state is correct for the derived state\n    this.options = options\n\n    const shouldUpdateValues =\n      options.defaultValues &&\n      !evaluate(options.defaultValues, oldOptions.defaultValues) &&\n      !this.state.isTouched\n\n    const shouldUpdateState =\n      !evaluate(options.defaultState, oldOptions.defaultState) &&\n      !this.state.isTouched\n\n    if (!shouldUpdateValues && !shouldUpdateState) return\n\n    batch(() => {\n      this.baseStore.setState(() =>\n        getDefaultFormState(\n          Object.assign(\n            {},\n            this.state as any,\n\n            shouldUpdateState ? options.defaultState : {},\n\n            shouldUpdateValues\n              ? {\n                  values: options.defaultValues,\n                }\n              : {},\n          ),\n        ),\n      )\n    })\n\n    formEventClient.emit('form-api', {\n      id: this._formId,\n      state: this.store.state,\n      options: this.options,\n    })\n  }\n\n  /**\n   * Resets the form state to the default values.\n   * If values are provided, the form will be reset to those values instead and the default values will be updated.\n   *\n   * @param values - Optional values to reset the form to.\n   * @param opts - Optional options to control the reset behavior.\n   */\n  reset = (values?: TFormData, opts?: { keepDefaultValues?: boolean }) => {\n    const { fieldMeta: currentFieldMeta } = this.state\n    const fieldMetaBase = this.resetFieldMeta(currentFieldMeta)\n\n    if (values && !opts?.keepDefaultValues) {\n      this.options = {\n        ...this.options,\n        defaultValues: values,\n      }\n    }\n\n    this.baseStore.setState(() => {\n      let nextValues =\n        values ??\n        this.options.defaultValues ??\n        this.options.defaultState?.values\n\n      if (!values) {\n        ;(Object.values(this.fieldInfo) as FieldInfo<any>[]).forEach(\n          (fieldInfo) => {\n            if (\n              fieldInfo.instance &&\n              fieldInfo.instance.options.defaultValue !== undefined\n            ) {\n              nextValues = setBy(\n                nextValues,\n                fieldInfo.instance.name,\n                fieldInfo.instance.options.defaultValue,\n              )\n            }\n          },\n        )\n      }\n\n      return getDefaultFormState({\n        ...(this.options.defaultState as any),\n        values: nextValues,\n        fieldMetaBase,\n      })\n    })\n  }\n\n  /**\n   * Validates all fields according to the FIELD level validators.\n   * This will ignore FORM level validators, use form.validate({ValidationCause}) for a complete validation\n   */\n  validateAllFields = async (cause: ValidationCause) => {\n    const fieldValidationPromises: Promise<ValidationError[]>[] = [] as any\n\n    batch(() => {\n      void (Object.values(this.fieldInfo) as FieldInfo<any>[]).forEach(\n        (field) => {\n          if (!field.instance) return\n          const fieldInstance = field.instance\n\n          // Validate the field\n          fieldValidationPromises.push(\n            // Remember, `validate` is either a sync operation or a promise\n            Promise.resolve().then(() =>\n              fieldInstance.validate(cause, { skipFormValidation: true }),\n            ),\n          )\n\n          // If any fields are not touched\n          if (!field.instance.state.meta.isTouched) {\n            // Mark them as touched\n            field.instance.setMeta((prev) => ({ ...prev, isTouched: true }))\n          }\n        },\n      )\n    })\n\n    const fieldErrorMapMap = await Promise.all(fieldValidationPromises)\n    return fieldErrorMapMap.flat()\n  }\n\n  /**\n   * Validates the children of a specified array in the form starting from a given index until the end using the correct handlers for a given validation type.\n   */\n  validateArrayFieldsStartingFrom = async <\n    TField extends DeepKeysOfType<TFormData, any[]>,\n  >(\n    field: TField,\n    index: number,\n    cause: ValidationCause,\n  ) => {\n    const currentValue = this.getFieldValue(field)\n\n    const lastIndex = Array.isArray(currentValue)\n      ? Math.max((currentValue as Array<unknown>).length - 1, 0)\n      : null\n\n    // We have to validate all fields that have shifted (at least the current field)\n    const fieldKeysToValidate = [`${field}[${index}]`]\n    for (let i = index + 1; i <= (lastIndex ?? 0); i++) {\n      fieldKeysToValidate.push(`${field}[${i}]`)\n    }\n\n    // We also have to include all fields that are nested in the shifted fields\n    const fieldsToValidate = Object.keys(this.fieldInfo).filter((fieldKey) =>\n      fieldKeysToValidate.some((key) => fieldKey.startsWith(key)),\n    ) as DeepKeys<TFormData>[]\n\n    // Validate the fields\n    const fieldValidationPromises: Promise<ValidationError[]>[] = [] as any\n    batch(() => {\n      fieldsToValidate.forEach((nestedField) => {\n        fieldValidationPromises.push(\n          Promise.resolve().then(() => this.validateField(nestedField, cause)),\n        )\n      })\n    })\n\n    const fieldErrorMapMap = await Promise.all(fieldValidationPromises)\n    return fieldErrorMapMap.flat()\n  }\n\n  /**\n   * Validates a specified field in the form using the correct handlers for a given validation type.\n   */\n  validateField = <TField extends DeepKeys<TFormData>>(\n    field: TField,\n    cause: ValidationCause,\n  ) => {\n    const fieldInstance = this.fieldInfo[field]?.instance\n\n    if (!fieldInstance) {\n      const { hasErrored } = this.validateSync(cause)\n\n      if (hasErrored && !this.options.asyncAlways) {\n        return this.getFieldMeta(field)?.errors ?? []\n      }\n\n      return this.validateAsync(cause).then(() => {\n        return this.getFieldMeta(field)?.errors ?? []\n      })\n    }\n\n    // If the field is not touched (same logic as in validateAllFields)\n    if (!fieldInstance.state.meta.isTouched) {\n      // Mark it as touched\n      fieldInstance.setMeta((prev) => ({ ...prev, isTouched: true }))\n    }\n\n    return fieldInstance.validate(cause)\n  }\n\n  /**\n   * TODO: This code is copied from FieldApi, we should refactor to share\n   * @private\n   */\n  validateSync = (\n    cause: ValidationCause,\n  ): {\n    hasErrored: boolean\n    fieldsErrorMap: FormErrorMapFromValidator<\n      TFormData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync\n    >\n  } => {\n    const validates = getSyncValidatorArray(cause, {\n      ...this.options,\n      form: this,\n      validationLogic: this.options.validationLogic || defaultValidationLogic,\n    })\n\n    let hasErrored = false as boolean\n\n    // This map will only include fields that have errors in the current validation cycle\n    const currentValidationErrorMap: FormErrorMapFromValidator<\n      TFormData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync\n    > = {}\n\n    batch(() => {\n      for (const validateObj of validates) {\n        if (!validateObj.validate) continue\n\n        const rawError = this.runValidator({\n          validate: validateObj.validate,\n          value: {\n            value: this.state.values,\n            formApi: this,\n            validationSource: 'form',\n          },\n          type: 'validate',\n        })\n\n        const { formError, fieldErrors } = normalizeError<TFormData>(rawError)\n\n        const errorMapKey = getErrorMapKey(validateObj.cause)\n\n        const allFieldsToProcess = new Set([\n          ...Object.keys(this.state.fieldMeta),\n          ...Object.keys(fieldErrors || {}),\n        ] as DeepKeys<TFormData>[])\n\n        for (const field of allFieldsToProcess) {\n          if (\n            this.baseStore.state.fieldMetaBase[field] === undefined &&\n            !fieldErrors?.[field]\n          ) {\n            continue\n          }\n\n          const fieldMeta = this.getFieldMeta(field) ?? defaultFieldMeta\n          const {\n            errorMap: currentErrorMap,\n            errorSourceMap: currentErrorMapSource,\n          } = fieldMeta\n\n          const newFormValidatorError = fieldErrors?.[field]\n\n          const { newErrorValue, newSource } =\n            determineFormLevelErrorSourceAndValue({\n              newFormValidatorError,\n              isPreviousErrorFromFormValidator:\n                // These conditional checks are required, otherwise we get runtime errors.\n                // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n                currentErrorMapSource?.[errorMapKey] === 'form',\n              // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n              previousErrorValue: currentErrorMap?.[errorMapKey],\n            })\n\n          if (newSource === 'form') {\n            currentValidationErrorMap[field] = {\n              ...currentValidationErrorMap[field],\n              [errorMapKey]: newFormValidatorError,\n            }\n          }\n\n          // This conditional check is required, otherwise we get runtime errors.\n          // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n          if (currentErrorMap?.[errorMapKey] !== newErrorValue) {\n            this.setFieldMeta(field, (prev = defaultFieldMeta) => ({\n              ...prev,\n              errorMap: {\n                ...prev.errorMap,\n                [errorMapKey]: newErrorValue,\n              },\n              errorSourceMap: {\n                ...prev.errorSourceMap,\n                [errorMapKey]: newSource,\n              },\n            }))\n          }\n        }\n\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        if (this.state.errorMap?.[errorMapKey] !== formError) {\n          this.baseStore.setState((prev) => ({\n            ...prev,\n            errorMap: {\n              ...prev.errorMap,\n              [errorMapKey]: formError,\n            },\n          }))\n        }\n\n        if (formError || fieldErrors) {\n          hasErrored = true\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      if (\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        this.state.errorMap?.[submitErrKey] &&\n        cause !== 'submit' &&\n        !hasErrored\n      ) {\n        this.baseStore.setState((prev) => ({\n          ...prev,\n          errorMap: {\n            ...prev.errorMap,\n            [submitErrKey]: undefined,\n          },\n        }))\n      }\n\n      /**\n       *  when we have an error for onServer 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 serverErrKey = getErrorMapKey('server')\n      if (\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        this.state.errorMap?.[serverErrKey] &&\n        cause !== 'server' &&\n        !hasErrored\n      ) {\n        this.baseStore.setState((prev) => ({\n          ...prev,\n          errorMap: {\n            ...prev.errorMap,\n            [serverErrKey]: undefined,\n          },\n        }))\n      }\n    })\n\n    return { hasErrored, fieldsErrorMap: currentValidationErrorMap }\n  }\n\n  /**\n   * @private\n   */\n  validateAsync = async (\n    cause: ValidationCause,\n  ): Promise<\n    FormErrorMapFromValidator<\n      TFormData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync\n    >\n  > => {\n    const validates = getAsyncValidatorArray(cause, {\n      ...this.options,\n      form: this,\n      validationLogic: this.options.validationLogic || defaultValidationLogic,\n    })\n\n    if (!this.state.isFormValidating) {\n      this.baseStore.setState((prev) => ({ ...prev, isFormValidating: true }))\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 promises: Promise<ValidationPromiseResult<TFormData>>[] = []\n\n    let fieldErrorsFromFormValidators:\n      | Partial<Record<DeepKeys<TFormData>, ValidationError>>\n      | undefined\n\n    for (const validateObj of validates) {\n      if (!validateObj.validate) continue\n      const key = getErrorMapKey(validateObj.cause)\n      const fieldValidatorMeta = this.state.validationMetaMap[key]\n\n      fieldValidatorMeta?.lastAbortController.abort()\n      const controller = new AbortController()\n\n      this.state.validationMetaMap[key] = {\n        lastAbortController: controller,\n      }\n\n      promises.push(\n        new Promise<ValidationPromiseResult<TFormData>>(async (resolve) => {\n          let rawError!:\n            | ValidationError\n            | FormValidationError<unknown>\n            | undefined\n          try {\n            rawError = await new Promise((rawResolve, rawReject) => {\n              setTimeout(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: this.state.values,\n                        formApi: this,\n                        validationSource: 'form',\n                        signal: controller.signal,\n                      },\n                      type: 'validateAsync',\n                    }),\n                  )\n                } catch (e) {\n                  rawReject(e)\n                }\n              }, validateObj.debounceMs)\n            })\n          } catch (e: unknown) {\n            rawError = e as ValidationError\n          }\n          const { formError, fieldErrors: fieldErrorsFromNormalizeError } =\n            normalizeError<TFormData>(rawError)\n\n          if (fieldErrorsFromNormalizeError) {\n            fieldErrorsFromFormValidators = fieldErrorsFromFormValidators\n              ? {\n                  ...fieldErrorsFromFormValidators,\n                  ...fieldErrorsFromNormalizeError,\n                }\n              : fieldErrorsFromNormalizeError\n          }\n          const errorMapKey = getErrorMapKey(validateObj.cause)\n\n          for (const field of Object.keys(\n            this.state.fieldMeta,\n          ) as DeepKeys<TFormData>[]) {\n            if (this.baseStore.state.fieldMetaBase[field] === undefined) {\n              continue\n            }\n\n            const fieldMeta = this.getFieldMeta(field)\n            if (!fieldMeta) continue\n\n            const {\n              errorMap: currentErrorMap,\n              errorSourceMap: currentErrorMapSource,\n            } = fieldMeta\n\n            const newFormValidatorError = fieldErrorsFromFormValidators?.[field]\n\n            const { newErrorValue, newSource } =\n              determineFormLevelErrorSourceAndValue({\n                newFormValidatorError,\n                isPreviousErrorFromFormValidator:\n                  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n                  currentErrorMapSource?.[errorMapKey] === 'form',\n                // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n                previousErrorValue: currentErrorMap?.[errorMapKey],\n              })\n\n            if (\n              // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n              currentErrorMap?.[errorMapKey] !== newErrorValue\n            ) {\n              this.setFieldMeta(field, (prev) => ({\n                ...prev,\n                errorMap: {\n                  ...prev.errorMap,\n                  [errorMapKey]: newErrorValue,\n                },\n                errorSourceMap: {\n                  ...prev.errorSourceMap,\n                  [errorMapKey]: newSource,\n                },\n              }))\n            }\n          }\n\n          this.baseStore.setState((prev) => ({\n            ...prev,\n            errorMap: {\n              ...prev.errorMap,\n              [errorMapKey]: formError,\n            },\n          }))\n\n          resolve(\n            fieldErrorsFromFormValidators\n              ? { fieldErrors: fieldErrorsFromFormValidators, errorMapKey }\n              : undefined,\n          )\n        }),\n      )\n    }\n\n    let results: ValidationPromiseResult<TFormData>[] = []\n\n    const fieldsErrorMap: FormErrorMapFromValidator<\n      TFormData,\n      TOnMount,\n      TOnChange,\n      TOnChangeAsync,\n      TOnBlur,\n      TOnBlurAsync,\n      TOnSubmit,\n      TOnSubmitAsync,\n      TOnDynamic,\n      TOnDynamicAsync\n    > = {}\n    if (promises.length) {\n      results = await Promise.all(promises)\n      for (const fieldValidationResult of results) {\n        if (fieldValidationResult?.fieldErrors) {\n          const { errorMapKey } = fieldValidationResult\n\n          for (const [field, fieldError] of Object.entries(\n            fieldValidationResult.fieldErrors,\n          )) {\n            const oldErrorMap =\n              fieldsErrorMap[field as DeepKeys<TFormData>] || {}\n            const newErrorMap = {\n              ...oldErrorMap,\n              [errorMapKey]: fieldError,\n            }\n            fieldsErrorMap[field as DeepKeys<TFormData>] = newErrorMap\n          }\n        }\n      }\n    }\n\n    this.baseStore.setState((prev) => ({\n      ...prev,\n      isFormValidating: false,\n    }))\n\n    return fieldsErrorMap\n  }\n\n  /**\n   * @private\n   */\n  validate = (\n    cause: ValidationCause,\n  ):\n    | FormErrorMapFromValidator<\n        TFormData,\n        TOnMount,\n        TOnChange,\n        TOnChangeAsync,\n        TOnBlur,\n        TOnBlurAsync,\n        TOnSubmit,\n        TOnSubmitAsync,\n        TOnDynamic,\n        TOnDynamicAsync\n      >\n    | Promise<\n        FormErrorMapFromValidator<\n          TFormData,\n          TOnMount,\n          TOnChange,\n          TOnChangeAsync,\n          TOnBlur,\n          TOnBlurAsync,\n          TOnSubmit,\n          TOnSubmitAsync,\n          TOnDynamic,\n          TOnDynamicAsync\n        >\n      > => {\n    // Attempt to sync validate first\n    const { hasErrored, fieldsErrorMap } = this.validateSync(cause)\n\n    if (hasErrored && !this.options.asyncAlways) {\n      return fieldsErrorMap\n    }\n\n    // No error? Attempt async validation\n    return this.validateAsync(cause)\n  }\n\n  // Needs to edgecase in the React adapter specifically to avoid type errors\n  handleSubmit(): Promise<void>\n  handleSubmit(submitMeta: TSubmitMeta): Promise<void>\n  handleSubmit(submitMeta?: TSubmitMeta): Promise<void> {\n    return this._handleSubmit(submitMeta)\n  }\n\n  /**\n   * Handles the form submission, performs validation, and calls the appropriate onSubmit or onSubmitInvalid callbacks.\n   */\n  _handleSubmit = async (submitMeta?: TSubmitMeta): Promise<void> => {\n    this.baseStore.setState((old) => ({\n      ...old,\n      // Submission attempts mark the form as not submitted\n      isSubmitted: false,\n      // Count submission attempts\n      submissionAttempts: old.submissionAttempts + 1,\n      isSubmitSuccessful: false, // Reset isSubmitSuccessful at the start of submission\n    }))\n\n    batch(() => {\n      void (Object.values(this.fieldInfo) as FieldInfo<any>[]).forEach(\n        (field) => {\n          if (!field.instance) return\n          // If any fields are not touched\n          if (!field.instance.state.meta.isTouched) {\n            // Mark them as touched\n            field.instance.setMeta((prev) => ({ ...prev, isTouched: true }))\n          }\n        },\n      )\n    })\n\n    const submitMetaArg =\n      submitMeta ?? (this.options.onSubmitMeta as TSubmitMeta)\n\n    if (!this.state.canSubmit && !this._devtoolsSubmissionOverride) {\n      this.options.onSubmitInvalid?.({\n        value: this.state.values,\n        formApi: this,\n        meta: submitMetaArg,\n      })\n      return\n    }\n\n    this.baseStore.setState((d) => ({ ...d, isSubmitting: true }))\n\n    const done = () => {\n      this.baseStore.setState((prev) => ({ ...prev, isSubmitting: false }))\n    }\n\n    await this.validateAllFields('submit')\n\n    if (!this.state.isFieldsValid) {\n      done()\n\n      this.options.onSubmitInvalid?.({\n        value: this.state.values,\n        formApi: this,\n        meta: submitMetaArg,\n      })\n\n      formEventClient.emit('form-submission', {\n        id: this._formId,\n        submissionAttempt: this.state.submissionAttempts,\n        successful: false,\n        stage: 'validateAllFields',\n        errors: (Object.values(this.state.fieldMeta) as AnyFieldMeta[])\n          .map((meta: AnyFieldMeta) => meta.errors)\n          .flat(),\n      })\n      return\n    }\n\n    await this.validate('submit')\n\n    // Fields are invalid, do not submit\n    if (!this.state.isValid) {\n      done()\n\n      this.options.onSubmitInvalid?.({\n        value: this.state.values,\n        formApi: this,\n        meta: submitMetaArg,\n      })\n\n      formEventClient.emit('form-submission', {\n        id: this._formId,\n        submissionAttempt: this.state.submissionAttempts,\n        successful: false,\n        stage: 'validate',\n        errors: this.state.errors,\n      })\n\n      return\n    }\n\n    batch(() => {\n      void (Object.values(this.fieldInfo) as FieldInfo<TFormData>[]).forEach(\n        (field) => {\n          field.instance?.options.listeners?.onSubmit?.({\n            value: field.instance.state.value,\n            fieldApi: field.instance,\n          })\n        },\n      )\n    })\n\n    this.options.listeners?.onSubmit?.({ formApi: this, meta: submitMetaArg })\n\n    try {\n      // Run the submit code\n      await this.options.onSubmit?.({\n        value: this.state.values,\n        formApi: this,\n        meta: submitMetaArg,\n      })\n\n      batch(() => {\n        this.baseStore.setState((prev) => ({\n          ...prev,\n          isSubmitted: true,\n          isSubmitSuccessful: true, // Set isSubmitSuccessful to true on successful submission\n        }))\n\n        formEventClient.emit('form-submission', {\n          id: this._formId,\n          submissionAttempt: this.state.submissionAttempts,\n          successful: true,\n        })\n\n        done()\n      })\n    } catch (err) {\n      this.baseStore.setState((prev) => ({\n        ...prev,\n        isSubmitSuccessful: false, // Ensure isSubmitSuccessful is false if an error occurs\n      }))\n\n      formEventClient.emit('form-submission', {\n        id: this._formId,\n        submissionAttempt: this.state.submissionAttempts,\n        successful: false,\n        stage: 'inflight',\n        onError: err,\n      })\n\n      done()\n\n      throw err\n    }\n  }\n\n  /**\n   * Gets the value of the specified field.\n   */\n  getFieldValue = <TField extends DeepKeys<TFormData>>(\n    field: TField,\n  ): DeepValue<TFormData, TField> => getBy(this.state.values, field)\n\n  /**\n   * Gets the metadata of the specified field.\n   */\n  getFieldMeta = <TField extends DeepKeys<TFormData>>(\n    field: TField,\n  ): AnyFieldMeta | undefined => {\n    return this.state.fieldMeta[field]\n  }\n\n  /**\n   * Gets the field info of the specified field.\n   */\n  getFieldInfo = <TField extends DeepKeys<TFormData>>(\n    field: TField,\n  ): FieldInfo<TFormData> => {\n    return (this.fieldInfo[field] ||= {\n      instance: null,\n      validationMetaMap: {\n        onChange: undefined,\n        onBlur: undefined,\n        onSubmit: undefined,\n        onMount: undefined,\n        onServer: undefined,\n        onDynamic: undefined,\n      },\n    })\n  }\n\n  /**\n   * Updates the metadata of the specified field.\n   */\n  setFieldMeta = <TField extends DeepKeys<TFormData>>(\n    field: TField,\n    updater: Updater<AnyFieldMetaBase>,\n  ) => {\n    this.baseStore.setState((prev) => {\n      return {\n        ...prev,\n        fieldMetaBase: {\n          ...prev.fieldMetaBase,\n          [field]: functionalUpdate(\n            updater,\n            prev.fieldMetaBase[field] as never,\n          ),\n        },\n      }\n    })\n  }\n\n  /**\n   * resets every field's meta\n   */\n  resetFieldMeta = <TField extends DeepKeys<TFormData>>(\n    fieldMeta: Partial<Record<TField, AnyFieldMeta>>,\n  ): Partial<Record<TField, AnyFieldMeta>> => {\n    return Object.keys(fieldMeta).reduce(\n      (acc, key) => {\n        const fieldKey = key as TField\n        acc[fieldKey] = defaultFieldMeta\n        return acc\n      },\n      {} as Partial<Record<TField, AnyFieldMeta>>,\n    )\n  }\n\n  /**\n   * Sets the value of the specified field and optionally updates the touched state.\n   */\n  setFieldValue = <TField extends DeepKeys<TFormData>>(\n    field: TField,\n    updater: Updater<DeepValue<TFormData, TField>>,\n    opts?: UpdateMetaOptions,\n  ) => {\n    const dontUpdateMeta = opts?.dontUpdateMeta ?? false\n    const dontRunListeners = opts?.dontRunListeners ?? false\n    const dontValidate = opts?.dontValidate ?? false\n\n    batch(() => {\n      if (!dontUpdateMeta) {\n        this.setFieldMeta(field, (prev) => ({\n          ...prev,\n          isTouched: true,\n          isDirty: true,\n          errorMap: {\n            // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n            ...prev?.errorMap,\n            onMount: undefined,\n          },\n        }))\n      }\n\n      this.baseStore.setState((prev) => {\n        return {\n          ...prev,\n          values: setBy(prev.values, field, updater),\n        }\n      })\n    })\n\n    if (!dontRunListeners) {\n      this.getFieldInfo(field).instance?.triggerOnChangeListener()\n    }\n\n    if (!dontValidate) {\n      this.validateField(field, 'change')\n    }\n  }\n\n  deleteField = <TField extends DeepKeys<TFormData>>(field: TField) => {\n    const subFieldsToDelete = Object.keys(this.fieldInfo).filter((f) => {\n      const fieldStr = field.toString()\n      return f !== fieldStr && f.startsWith(fieldStr)\n    })\n\n    const fieldsToDelete = [...subFieldsToDelete, field]\n\n    // Cleanup the last fields\n    this.baseStore.setState((prev) => {\n      const newState = { ...prev }\n      fieldsToDelete.forEach((f) => {\n        newState.values = deleteBy(newState.values, f)\n        delete this.fieldInfo[f as never]\n        delete newState.fieldMetaBase[f as never]\n      })\n\n      return newState\n    })\n  }\n\n  /**\n   * Pushes a value into an array field.\n   */\n  pushFieldValue = <TField extends DeepKeysOfType<TFormData, any[]>>(\n    field: TField,\n    value: DeepValue<TFormData, TField> extends any[]\n      ? DeepValue<TFormData, TField>[number]\n      : never,\n    options?: UpdateMetaOptions,\n  ) => {\n    this.setFieldValue(\n      field,\n      (prev) => [...(Array.isArray(prev) ? prev : []), value] as any,\n      options,\n    )\n\n    metaHelper(this).bumpArrayVersion(field)\n  }\n\n  insertFieldValue = async <TField extends DeepKeysOfType<TFormData, any[]>>(\n    field: TField,\n    index: number,\n    value: DeepValue<TFormData, TField> extends any[]\n      ? DeepValue<TFormData, TField>[number]\n      : never,\n    options?: UpdateMetaOptions,\n  ) => {\n    this.setFieldValue(\n      field,\n      (prev) => {\n        return [\n          ...(prev as DeepValue<TFormData, TField>[]).slice(0, index),\n          value,\n          ...(prev as DeepValue<TFormData, TField>[]).slice(index),\n        ] as any\n      },\n      mergeOpts(options, { dontValidate: true }),\n    )\n\n    const dontValidate = options?.dontValidate ?? false\n    if (!dontValidate) {\n      // Validate the whole array + all fields that have shifted\n      await this.validateField(field, 'change')\n    }\n\n    // Shift down all meta after validating to make sure the new field has been mounted\n    metaHelper(this).handleArrayInsert(field, index)\n\n    if (!dontValidate) {\n      await this.validateArrayFieldsStartingFrom(field, index, 'change')\n    }\n  }\n\n  /**\n   * Replaces a value into an array field at the specified index.\n   */\n  replaceFieldValue = async <TField extends DeepKeysOfType<TFormData, any[]>>(\n    field: TField,\n    index: number,\n    value: DeepValue<TFormData, TField> extends any[]\n      ? DeepValue<TFormData, TField>[number]\n      : never,\n    options?: UpdateMetaOptions,\n  ) => {\n    this.setFieldValue(\n      field,\n      (prev) => {\n        return (prev as DeepValue<TFormData, TField>[]).map((d, i) =>\n          i === index ? value : d,\n        ) as any\n      },\n      mergeOpts(options, { dontValidate: true }),\n    )\n\n    metaHelper(this).bumpArrayVersion(field)\n\n    const dontValidate = options?.dontValidate ?? false\n    if (!dontValidate) {\n      // Validate the whole array + all fields that have shifted\n      await this.validateField(field, 'change')\n      await this.validateArrayFieldsStartingFrom(field, index, 'change')\n    }\n  }\n\n  /**\n   * Removes a value from an array field at the specified index.\n   */\n  removeFieldValue = async <TField extends DeepKeysOfType<TFormData, any[]>>(\n    field: TField,\n    index: number,\n    options?: UpdateMetaOptions,\n  ) => {\n    const fieldValue = this.getFieldValue(field)\n\n    const lastIndex = Array.isArray(fieldValue)\n      ? Math.max((fieldValue as Array<unknown>).length - 1, 0)\n      : null\n\n    this.setFieldValue(\n      field,\n      (prev) => {\n        return (prev as DeepValue<TFormData, TField>[]).filter(\n          (_d, i) => i !== index,\n        ) as any\n      },\n      mergeOpts(options, { dontValidate: true }),\n    )\n\n    // Shift up all meta\n    metaHelper(this).handleArrayRemove(field, index)\n\n    if (lastIndex !== null) {\n      const start = `${field}[${lastIndex}]`\n      this.deleteField(start as never)\n    }\n\n    const dontValidate = options?.dontValidate ?? false\n    if (!dontValidate) {\n      // Validate the whole array + all fields that have shifted\n      await this.validateField(field, 'change')\n      await this.validateArrayFieldsStartingFrom(field, index, 'change')\n    }\n  }\n\n  /**\n   * Swaps the values at the specified indices within an array field.\n   */\n  swapFieldValues = <TField extends DeepKeysOfType<TFormData, any[]>>(\n    field: TField,\n    index1: number,\n    index2: number,\n    options?: UpdateMetaOptions,\n  ) => {\n    this.setFieldValue(\n      field,\n      (prev: any) => {\n        const prev1 = prev[index1]!\n        const prev2 = prev[index2]!\n        return setBy(setBy(prev, `${index1}`, prev2), `${index2}`, prev1)\n      },\n      mergeOpts(options, { dontValidate: true }),\n    )\n\n    // Swap meta\n    metaHelper(this).handleArraySwap(field, index1, index2)\n\n    const dontValidate = options?.dontValidate ?? false\n    if (!dontValidate) {\n      // Validate the whole array\n      this.validateField(field, 'change')\n      // Validate the swapped fields\n      this.validateField(`${field}[${index1}]` as DeepKeys<TFormData>, 'change')\n      this.validateField(`${field}[${index2}]` as DeepKeys<TFormData>, 'change')\n    }\n  }\n\n  /**\n   * Moves the value at the first specified index to the second specified index within an array field.\n   */\n  moveFieldValues = <TField extends DeepKeysOfType<TFormData, any[]>>(\n    field: TField,\n    index1: number,\n    index2: number,\n    options?: UpdateMetaOptions,\n  ) => {\n    this.setFieldValue(\n      field,\n      (prev: any) => {\n        const next: any = [...prev]\n        next.splice(index2, 0, next.splice(index1, 1)[0])\n        return next\n      },\n      mergeOpts(options, { dontValidate: true }),\n    )\n\n    // Move meta between index1 and index2\n    metaHelper(this).handleArrayMove(field, index1, index2)\n\n    const dontValidate = options?.dontValidate ?? false\n    if (!dontValidate) {\n      // Validate the whole array\n      this.validateField(field, 'change')\n      // Validate the moved fields\n      this.validateField(`${field}[${index1}]` as DeepKeys<TFormData>, 'change')\n      this.validateField(`${field}[${index2}]` as DeepKeys<TFormData>, 'change')\n    }\n  }\n\n  /**\n   * Clear all values within an array field.\n   */\n  clearFieldValues = <TField extends DeepKeysOfType<TFormData, any[]>>(\n    field: TField,\n    options?: UpdateMetaOptions,\n  ) => {\n    const fieldValue = this.getFieldValue(field)\n\n    const lastIndex = Array.isArray(fieldValue)\n      ? Math.max((fieldValue as unknown[]).length - 1, 0)\n      : null\n\n    this.setFieldValue(\n      field,\n      [] as any,\n      mergeOpts(options, { dontValidate: true }),\n    )\n\n    metaHelper(this).bumpArrayVersion(field)\n\n    if (lastIndex !== null) {\n      for (let i = 0; i <= lastIndex; i++) {\n        const fieldKey = `${field}[${i}]`\n        this.deleteField(fieldKey as never)\n      }\n    }\n\n    const dontValidate = options?.dontValidate ?? false\n    if (!dontValidate) {\n      // validate array change\n      this.validateField(field, 'change')\n    }\n  }\n\n  /**\n   * Resets the field value and meta to default state\n   */\n  resetField = <TField extends DeepKeys<TFormData>>(field: TField) => {\n    this.baseStore.setState((prev) => {\n      const fieldDefault =\n        this.getFieldInfo(field).instance?.options.defaultValue\n      const formDefault = getBy(this.options.defaultValues, field)\n      const targetValue = fieldDefault ?? formDefault\n\n      return {\n        ...prev,\n        fieldMetaBase: {\n          ...prev.fieldMetaBase,\n          [field]: defaultFieldMeta,\n        },\n        values:\n          targetValue !== undefined\n            ? setBy(prev.values, field, targetValue)\n            : prev.values,\n      }\n    })\n  }\n\n  /**\n   * Updates the form's errorMap\n   */\n  setErrorMap = (\n    errorMap: FormValidationErrorMap<\n      TFormData,\n      UnwrapFormValidateOrFn<TOnMount>,\n      UnwrapFormValidateOrFn<TOnChange>,\n      UnwrapFormAsyncValidateOrFn<TOnChangeAsync>,\n      UnwrapFormValidateOrFn<TOnBlur>,\n      UnwrapFormAsyncValidateOrFn<TOnBlurAsync>,\n      UnwrapFormValidateOrFn<TOnSubmit>,\n      UnwrapFormAsyncValidateOrFn<TOnSubmitAsync>,\n      UnwrapFormValidateOrFn<TOnDynamic>,\n      UnwrapFormAsyncValidateOrFn<TOnDynamicAsync>,\n      UnwrapFormAsyncValidateOrFn<TOnServer>\n    >,\n  ) => {\n    batch(() => {\n      Object.entries(errorMap).forEach(([key, value]) => {\n        const errorMapKey = key as ValidationErrorMapKeys\n\n        if (isGlobalFormValidationError(value)) {\n          const { formError, fieldErrors } = normalizeError<TFormData>(value)\n\n          for (const fieldName of Object.keys(\n            this.fieldInfo,\n          ) as DeepKeys<TFormData>[]) {\n            const fieldMeta = this.getFieldMeta(fieldName)\n            if (!fieldMeta) continue\n\n            this.setFieldMeta(fieldName, (prev) => ({\n              ...prev,\n              errorMap: {\n                ...prev.errorMap,\n                [errorMapKey]: fieldErrors?.[fieldName],\n              },\n              errorSourceMap: {\n                ...prev.errorSourceMap,\n                [errorMapKey]: 'form',\n              },\n            }))\n          }\n\n          this.baseStore.setState((prev) => ({\n            ...prev,\n            errorMap: {\n              ...prev.errorMap,\n              [errorMapKey]: formError,\n            },\n          }))\n        } else {\n          this.baseStore.setState((prev) => ({\n            ...prev,\n            errorMap: {\n              ...prev.errorMap,\n              [errorMapKey]: value,\n            },\n          }))\n        }\n      })\n    })\n  }\n\n  /**\n   * Returns form and field level errors\n   */\n  getAllErrors = (): {\n    form: {\n      errors: Array<\n        NonNullable<\n          | UnwrapFormValidateOrFn<TOnMount>\n          | UnwrapFormValidateOrFn<TOnChange>\n          | UnwrapFormAsyncValidateOrFn<TOnChangeAsync>\n          | UnwrapFormValidateOrFn<TOnBlur>\n          | UnwrapFormAsyncValidateOrFn<TOnBlurAsync>\n          | UnwrapFormValidateOrFn<TOnSubmit>\n          | UnwrapFormAsyncValidateOrFn<TOnSubmitAsync>\n          | UnwrapFormValidateOrFn<TOnDynamic>\n          | UnwrapFormAsyncValidateOrFn<TOnDynamicAsync>\n          | UnwrapFormAsyncValidateOrFn<TOnServer>\n        >\n      >\n      errorMap: ValidationErrorMap<\n        UnwrapFormValidateOrFn<TOnMount>,\n        UnwrapFormValidateOrFn<TOnChange>,\n        UnwrapFormAsyncValidateOrFn<TOnChangeAsync>,\n        UnwrapFormValidateOrFn<TOnBlur>,\n        UnwrapFormAsyncValidateOrFn<TOnBlurAsync>,\n        UnwrapFormValidateOrFn<TOnSubmit>,\n        UnwrapFormAsyncValidateOrFn<TOnSubmitAsync>,\n        UnwrapFormValidateOrFn<TOnDynamic>,\n        UnwrapFormAsyncValidateOrFn<TOnDynamicAsync>,\n        UnwrapFormAsyncValidateOrFn<TOnServer>\n      >\n    }\n    fields: Record<\n      DeepKeys<TFormData>,\n      { errors: ValidationError[]; errorMap: ValidationErrorMap }\n    >\n  } => {\n    return {\n      form: {\n        errors: this.state.errors,\n        errorMap: this.state.errorMap,\n      },\n      fields: Object.entries(this.state.fieldMeta).reduce(\n        (acc, [fieldName, fieldMeta]) => {\n          if (\n            Object.keys(fieldMeta as AnyFieldMeta).length &&\n            (fieldMeta as AnyFieldMeta).errors.length\n          ) {\n            acc[fieldName as DeepKeys<TFormData>] = {\n              errors: (fieldMeta as AnyFieldMeta).errors,\n              errorMap: (fieldMeta as AnyFieldMeta).errorMap,\n            }\n          }\n\n          return acc\n        },\n        {} as Record<\n          DeepKeys<TFormData>,\n          { errors: ValidationError[]; errorMap: ValidationErrorMap }\n        >,\n      ),\n    }\n  }\n\n  /**\n   * Parses the form's values with a given standard schema and returns\n   * issues (if any). This method does NOT set any internal errors.\n   * @param schema The standard schema to parse the form values with.\n   */\n  parseValuesWithSchema = (schema: StandardSchemaV1<TFormData, unknown>) => {\n    return standardSchemaValidators.validate(\n      { value: this.state.values, validationSource: 'form' },\n      schema,\n    )\n  }\n\n  /**\n   * Parses the form's values with a given standard schema and returns\n   * issues (if any). This method does NOT set any internal errors.\n   * @param schema The standard schema to parse the form values with.\n   */\n  parseValuesWithSchemaAsync = (\n    schema: StandardSchemaV1<TFormData, unknown>,\n  ) => {\n    return standardSchemaValidators.validateAsync(\n      { value: this.state.values, validationSource: 'form' },\n      schema,\n    )\n  }\n}\n\nfunction normalizeError<TFormData>(rawError?: FormValidationError<unknown>): {\n  formError: ValidationError\n  fieldErrors?: Partial<Record<DeepKeys<TFormData>, ValidationError>>\n} {\n  if (rawError) {\n    if (isGlobalFormValidationError(rawError)) {\n      const formError = normalizeError(rawError.form).formError\n      const fieldErrors = rawError.fields\n      return { formError, fieldErrors } as never\n    }\n\n    return { formError: rawError }\n  }\n\n  return { formError: 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":["throttleFormState","formEventClient","evaluate","batch","opts","setBy","getSyncValidatorArray","defaultValidationLogic","defaultFieldMeta","determineFormLevelErrorSourceAndValue","getAsyncValidatorArray","getBy","functionalUpdate","deleteBy","metaHelper","mergeOpts","isGlobalFormValidationError","standardSchemaValidators","uuid","createStore","isNonEmptyArray","isStandardSchemaValidator"],"mappings":"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"}