{"version":3,"file":"use-form.cjs","names":["useFormErrors","useFormValues","useFormStatus","useFormWatch","useFormList","useFormValidating","validateFieldValue","shouldValidateOnChange","getPath","validateValues","getInputOnChange","getDataPath"],"sources":["../src/use-form.ts"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from 'react';\nimport { useFormActions } from './actions';\nimport { getInputOnChange } from './get-input-on-change';\nimport { useFormErrors } from './hooks/use-form-errors/use-form-errors';\nimport { useFormList } from './hooks/use-form-list/use-form-list';\nimport { useFormStatus } from './hooks/use-form-status/use-form-status';\nimport { useFormValidating } from './hooks/use-form-validating/use-form-validating';\nimport { useFormValues } from './hooks/use-form-values/use-form-values';\nimport { useFormWatch } from './hooks/use-form-watch/use-form-watch';\nimport { getDataPath, getPath } from './paths';\nimport {\n  FormErrors,\n  FormRulesRecord,\n  GetInputNode,\n  GetInputProps,\n  GetTransformedValues,\n  Initialize,\n  IsValidating,\n  Key,\n  OnReset,\n  OnSubmit,\n  Reset,\n  SetFieldValue,\n  SetValues,\n  UseFormInput,\n  UseFormReturnType,\n} from './types';\nimport { shouldValidateOnChange, validateFieldValue, validateValues } from './validate';\n\nconst defaultResolveValidationError = (err: unknown) =>\n  err instanceof Error ? err.message : String(err);\n\nexport function useForm<\n  Values extends Record<string, any>,\n  TransformedValues = Values,\n  R extends FormErrors | Promise<FormErrors> = FormErrors,\n>(\n  input: UseFormInput<Values, TransformedValues> & { validate: (values: Values) => R }\n): UseFormReturnType<Values, TransformedValues, (values: Values) => R>;\n\nexport function useForm<\n  Values extends Record<string, any>,\n  TransformedValues = Values,\n  Rules extends FormRulesRecord<Values> = FormRulesRecord<Values>,\n>(\n  input: UseFormInput<Values, TransformedValues> & { validate: Rules }\n): UseFormReturnType<Values, TransformedValues, Rules>;\n\nexport function useForm<\n  Values extends Record<string, any> = Record<string, any>,\n  TransformedValues = Values,\n>(\n  input?: UseFormInput<Values, TransformedValues>\n): UseFormReturnType<Values, TransformedValues, undefined>;\n\nexport function useForm<\n  Values extends Record<PropertyKey, any> = Record<string, any>,\n  TransformedValues = Values,\n>({\n  name,\n  mode = 'controlled',\n  initialValues,\n  initialErrors = {},\n  initialDirty = {},\n  initialTouched = {},\n  clearInputErrorOnChange = true,\n  validateInputOnChange = false,\n  validateInputOnBlur = false,\n  onValuesChange,\n  transformValues = ((values: Values) => values) as any,\n  enhanceGetInputProps,\n  validate: rules,\n  onSubmitPreventDefault = 'always',\n  touchTrigger = 'change',\n  cascadeUpdates = false,\n  validateDebounce = 0,\n  resolveValidationError = defaultResolveValidationError,\n}: UseFormInput<Values, TransformedValues> = {}): UseFormReturnType<Values, TransformedValues> {\n  const $errors = useFormErrors<Values>(initialErrors);\n  const $values = useFormValues<Values>({ initialValues, onValuesChange, mode });\n  const $status = useFormStatus<Values>({ initialDirty, initialTouched, $values, mode });\n  const $watch = useFormWatch<Values>({ $values, $status, cascadeUpdates });\n  const $list = useFormList<Values>({ $values, $errors, $status, $watch });\n  const $validating = useFormValidating();\n  const [formKey, setFormKey] = useState(0);\n  const [fieldKeys, setFieldKeys] = useState<Record<string, number>>({});\n  const [submitting, setSubmitting] = useState(false);\n  const validateGeneration = useRef(0);\n\n  const reset: Reset = useCallback(() => {\n    $values.resetValues();\n    $errors.clearErrors();\n    $status.resetDirty();\n    $status.resetTouched();\n    $validating.clearValidating();\n    mode === 'uncontrolled' && setFormKey((key) => key + 1);\n  }, []);\n\n  const handleValuesChanges = useCallback(\n    (previousValues: Values) => {\n      clearInputErrorOnChange && $errors.clearErrors();\n      mode === 'uncontrolled' && setFormKey((key) => key + 1);\n      $watch.notifyWatchSubscribers(previousValues);\n    },\n    [clearInputErrorOnChange]\n  );\n\n  const initialize: Initialize<Values> = useCallback(\n    (values) => {\n      const previousValues = $values.refValues.current;\n      $values.initialize(values, () => mode === 'uncontrolled' && setFormKey((key) => key + 1));\n      handleValuesChanges(previousValues);\n    },\n    [handleValuesChanges]\n  );\n\n  const debouncedValidateField = useMemo(() => {\n    const timers: Record<string, ReturnType<typeof setTimeout>> = {};\n\n    const handleValidation = (path: string) => {\n      const signal = $validating.getAbortSignal(path);\n      const result = validateFieldValue(\n        path,\n        rules,\n        $values.refValues.current,\n        resolveValidationError,\n        signal\n      );\n\n      const applyResult = (results: { hasError: boolean; error: React.ReactNode }) => {\n        if (signal.aborted) {\n          return;\n        }\n        if (results.hasError) {\n          $errors.setFieldError(path as any, results.error);\n        } else {\n          $errors.clearFieldError(path);\n        }\n      };\n\n      const cleanup = () => {\n        if (!signal.aborted) {\n          $validating.setFieldValidating(path, false);\n        }\n      };\n\n      if (result instanceof Promise) {\n        $validating.setFieldValidating(path, true);\n        result.then(applyResult).finally(cleanup);\n      } else {\n        applyResult(result);\n      }\n    };\n\n    return (path: string) => {\n      clearTimeout(timers[path]);\n      if (validateDebounce > 0) {\n        timers[path] = setTimeout(() => handleValidation(path), validateDebounce);\n      } else {\n        handleValidation(path);\n      }\n    };\n  }, [validateDebounce, rules, resolveValidationError]);\n\n  const setFieldValue: SetFieldValue<Values> = useCallback(\n    (path, value, options) => {\n      const shouldValidate = shouldValidateOnChange(path, validateInputOnChange);\n      const resolvedValue =\n        value instanceof Function ? value(getPath(path, $values.refValues.current) as any) : value;\n\n      $status.setCalculatedFieldDirty(path, resolvedValue);\n      touchTrigger === 'change' && $status.setFieldTouched(path, true);\n      !shouldValidate && clearInputErrorOnChange && $errors.clearFieldError(path);\n\n      $values.setFieldValue({\n        path,\n        value,\n        updateState: mode === 'controlled',\n        subscribers: [\n          ...$watch.getFieldSubscribers(path),\n          shouldValidate ? () => debouncedValidateField(String(path)) : null,\n          options?.forceUpdate !== false && mode !== 'controlled'\n            ? () =>\n                setFieldKeys((keys) => ({\n                  ...keys,\n                  [path as string]: (keys[path as string] || 0) + 1,\n                }))\n            : null,\n        ],\n      });\n    },\n    [onValuesChange, rules, debouncedValidateField]\n  );\n\n  const setValues: SetValues<Values> = useCallback(\n    (values) => {\n      const previousValues = $values.refValues.current;\n      $values.setValues({ values, updateState: mode === 'controlled' });\n      handleValuesChanges(previousValues);\n    },\n    [onValuesChange, handleValuesChanges]\n  );\n\n  const validate = useCallback(() => {\n    const generation = ++validateGeneration.current;\n    const signal = $validating.getAbortSignal('__form__');\n\n    const handleResult = (results: { hasErrors: boolean; errors: Record<string, any> }) => {\n      if (generation !== validateGeneration.current) {\n        return { hasErrors: false, errors: {} };\n      }\n      $errors.setErrors(results.errors);\n      return results;\n    };\n\n    const cleanup = () => {\n      if (generation === validateGeneration.current) {\n        $validating.setFormValidating(false);\n      }\n    };\n\n    const result = validateValues(rules, $values.refValues.current, resolveValidationError, signal);\n\n    if (result instanceof Promise) {\n      $validating.setFormValidating(true);\n      return result.then(handleResult).finally(cleanup);\n    }\n\n    return handleResult(result);\n  }, [rules, resolveValidationError]);\n\n  const validateField = useCallback(\n    (path: string) => {\n      const signal = $validating.getAbortSignal(String(path));\n\n      const applyResult = (results: { hasError: boolean; error: React.ReactNode }) => {\n        if (signal.aborted) {\n          return { hasError: false, error: null };\n        }\n        if (results.hasError) {\n          $errors.setFieldError(path, results.error);\n        } else {\n          $errors.clearFieldError(path);\n        }\n        return results;\n      };\n\n      const cleanup = () => {\n        if (!signal.aborted) {\n          $validating.setFieldValidating(String(path), false);\n        }\n      };\n\n      const result = validateFieldValue(\n        path,\n        rules,\n        $values.refValues.current,\n        resolveValidationError,\n        signal\n      );\n\n      if (result instanceof Promise) {\n        $validating.setFieldValidating(String(path), true);\n        return result.then(applyResult).finally(cleanup);\n      }\n\n      return applyResult(result);\n    },\n    [rules, resolveValidationError]\n  );\n\n  const getInputProps: GetInputProps<Values> = (\n    path,\n    { type = 'input', withError = true, withFocus, ...otherOptions } = {}\n  ) => {\n    const _withFocus = withFocus ?? type !== 'radio';\n    const onChange = getInputOnChange((value) =>\n      setFieldValue(path, value as any, { forceUpdate: false })\n    );\n\n    const payload: any = { onChange, 'data-path': getDataPath(name, path) };\n\n    if (withError) {\n      payload.error = $errors.errorsState[path];\n    }\n\n    if (type === 'checkbox') {\n      payload[mode === 'controlled' ? 'checked' : 'defaultChecked'] = getPath(\n        path,\n        $values.refValues.current\n      );\n    } else if (type === 'radio') {\n      payload[mode === 'controlled' ? 'checked' : 'defaultChecked'] =\n        getPath(path, $values.refValues.current) === otherOptions.value;\n      payload.value = otherOptions.value;\n    } else {\n      payload[mode === 'controlled' ? 'value' : 'defaultValue'] = getPath(\n        path,\n        $values.refValues.current\n      );\n    }\n\n    if (_withFocus) {\n      payload.onFocus = () => $status.setFieldTouched(path, true);\n      payload.onBlur = () => {\n        if (shouldValidateOnChange(path, validateInputOnBlur)) {\n          debouncedValidateField(String(path));\n        }\n      };\n    }\n\n    return Object.assign(\n      payload,\n      enhanceGetInputProps?.({\n        inputProps: payload,\n        field: path,\n        options: { type, withError, withFocus: _withFocus, ...otherOptions },\n        form: form as any,\n      })\n    );\n  };\n\n  const onSubmit: OnSubmit<Values, TransformedValues> =\n    (handleSubmit, handleValidationFailure) => (event) => {\n      if (onSubmitPreventDefault === 'always') {\n        event?.preventDefault();\n      }\n\n      setSubmitting(true);\n\n      const handleValidation = (results: { hasErrors: boolean; errors: Record<string, any> }) => {\n        if (results.hasErrors) {\n          if (onSubmitPreventDefault === 'validation-failed') {\n            event?.preventDefault();\n          }\n\n          handleValidationFailure?.(results.errors, $values.refValues.current, event);\n          setSubmitting(false);\n        } else {\n          const submitResult = handleSubmit?.(\n            transformValues($values.refValues.current) as any,\n            event\n          );\n\n          if (submitResult instanceof Promise) {\n            submitResult.finally(() => setSubmitting(false));\n          } else {\n            setSubmitting(false);\n          }\n        }\n      };\n\n      const result = validate();\n      if (result instanceof Promise) {\n        result.then(handleValidation).catch(() => {\n          setSubmitting(false);\n        });\n      } else {\n        handleValidation(result);\n      }\n    };\n\n  const getTransformedValues: GetTransformedValues<Values, TransformedValues> = (input) =>\n    (transformValues as any)(input || $values.refValues.current);\n\n  const onReset: OnReset = useCallback((event) => {\n    event.preventDefault();\n    reset();\n  }, []);\n\n  const isValid = useCallback(\n    (path?: string) => {\n      const signal = new AbortController().signal;\n      if (path) {\n        const result = validateFieldValue(\n          path,\n          rules,\n          $values.refValues.current,\n          resolveValidationError,\n          signal\n        );\n        if (result instanceof Promise) {\n          return result.then((r) => !r.hasError);\n        }\n        return !result.hasError;\n      }\n      const result = validateValues(\n        rules,\n        $values.refValues.current,\n        resolveValidationError,\n        signal\n      );\n      if (result instanceof Promise) {\n        return result.then((r) => !r.hasErrors);\n      }\n      return !result.hasErrors;\n    },\n    [rules, resolveValidationError]\n  );\n\n  const key: Key<Values> = (path) => `${formKey}-${String(path)}-${fieldKeys[String(path)] || 0}`;\n\n  const getInputNode: GetInputNode<Values> = useCallback(\n    (path) => document.querySelector(`[data-path=\"${getDataPath(name, path)}\"]`),\n    []\n  );\n\n  const resetField = useCallback(\n    (path: PropertyKey) => {\n      $values.resetField(path, [\n        mode !== 'controlled'\n          ? () =>\n              setFieldKeys((keys) => ({\n                ...keys,\n                [path as string]: (keys[path as string] || 0) + 1,\n              }))\n          : null,\n      ]);\n    },\n    [$values.resetField, mode, setFieldKeys]\n  );\n\n  const form = {\n    watch: $watch.watch,\n\n    initialized: $values.initialized.current,\n    values: mode === 'uncontrolled' ? $values.refValues.current : $values.stateValues,\n    getValues: $values.getValues,\n    getInitialValues: $values.getValuesSnapshot,\n    setInitialValues: $values.setValuesSnapshot,\n    resetField,\n    initialize,\n    setValues,\n    setFieldValue,\n\n    submitting,\n    setSubmitting,\n\n    validating: $validating.validating,\n    isValidating: $validating.isValidating as IsValidating<Values>,\n\n    errors: $errors.errorsState,\n    setErrors: $errors.setErrors,\n    setFieldError: $errors.setFieldError,\n    clearFieldError: $errors.clearFieldError,\n    clearErrors: $errors.clearErrors,\n\n    resetDirty: $status.resetDirty,\n    setTouched: $status.setTouched,\n    setDirty: $status.setDirty,\n    isTouched: $status.isTouched,\n    resetTouched: $status.resetTouched,\n    isDirty: $status.isDirty,\n    getTouched: $status.getTouched,\n    getDirty: $status.getDirty,\n\n    reorderListItem: $list.reorderListItem,\n    insertListItem: $list.insertListItem,\n    removeListItem: $list.removeListItem,\n    replaceListItem: $list.replaceListItem,\n\n    reset,\n    validate,\n    validateField,\n    getInputProps,\n    onSubmit,\n    onReset,\n    isValid,\n    getTransformedValues,\n    key,\n\n    getInputNode,\n  };\n\n  useFormActions(name, form as any);\n\n  return form as any;\n}\n"],"mappings":"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"}