react-hook-form 6.15.5-beta.0 → 6.15.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.production.min.js","sources":["../src/utils/isHTMLElement.ts","../src/constants.ts","../src/utils/isNullOrUndefined.ts","../src/utils/isObject.ts","../src/utils/isKey.ts","../src/utils/compact.ts","../src/utils/stringToPath.ts","../src/utils/set.ts","../src/logic/transformToNestObject.ts","../src/utils/isUndefined.ts","../src/utils/get.ts","../src/logic/removeAllEventListeners.ts","../src/logic/getRadioValue.ts","../src/utils/isRadioInput.ts","../src/utils/isFileInput.ts","../src/utils/isCheckBoxInput.ts","../src/utils/isMultipleSelect.ts","../src/logic/getCheckboxValue.ts","../src/logic/getFieldValue.ts","../src/logic/getMultipleSelectValue.ts","../src/utils/isDetached.ts","../src/utils/isEmptyObject.ts","../src/utils/isBoolean.ts","../src/utils/unset.ts","../src/logic/findRemovedFieldAndRemoveListener.ts","../src/utils/isPrimitive.ts","../src/utils/deepMerge.ts","../src/utils/deepEqual.ts","../src/logic/setFieldArrayDirtyFields.ts","../src/utils/isString.ts","../src/logic/getFieldsValues.ts","../src/utils/isRegex.ts","../src/logic/getValueAndMessage.ts","../src/utils/isFunction.ts","../src/utils/isMessage.ts","../src/logic/getValidateError.ts","../src/logic/appendErrors.ts","../src/logic/validateField.ts","../src/utils/getPath.ts","../src/logic/assignWatchFields.ts","../src/logic/skipValidation.ts","../src/logic/getNodeParentName.ts","../src/logic/isNameInFieldArray.ts","../src/utils/isWeb.ts","../src/utils/cloneObject.ts","../src/utils/validationModeChecker.ts","../src/utils/isRadioOrCheckbox.ts","../src/useForm.ts","../src/useFormContext.tsx","../src/logic/generateId.ts","../src/utils/remove.ts","../src/utils/move.ts","../src/utils/swap.ts","../src/utils/prepend.ts","../src/utils/insert.ts","../src/utils/fillEmptyArray.ts","../src/utils/fillBooleanArray.ts","../src/useFieldArray.ts","../src/useController.ts","../src/logic/getInputValue.ts","../src/controller.tsx","../src/logic/isErrorStateChanged.ts","../src/logic/attachEventListeners.ts","../src/utils/isSelectInput.ts","../src/logic/focusOnErrorField.ts","../src/utils/onDomRemove.ts","../src/useWatch.ts"],"sourcesContent":["export default (value: any): value is HTMLElement =>\n value instanceof HTMLElement;\n","import { ValidationMode } from './types';\n\nexport const EVENTS = {\n BLUR: 'blur',\n CHANGE: 'change',\n INPUT: 'input',\n};\n\nexport const VALIDATION_MODE: ValidationMode = {\n onBlur: 'onBlur',\n onChange: 'onChange',\n onSubmit: 'onSubmit',\n onTouched: 'onTouched',\n all: 'all',\n};\n\nexport const SELECT = 'select';\n\nexport const UNDEFINED = 'undefined';\n\nexport const INPUT_VALIDATION_RULES = {\n max: 'max',\n min: 'min',\n maxLength: 'maxLength',\n minLength: 'minLength',\n pattern: 'pattern',\n required: 'required',\n validate: 'validate',\n};\n","export default (value: unknown): value is null | undefined => value == null;\n","import isNullOrUndefined from './isNullOrUndefined';\n\nexport const isObjectType = (value: unknown) => typeof value === 'object';\n\nexport default <T extends object>(value: unknown): value is T =>\n !isNullOrUndefined(value) &&\n !Array.isArray(value) &&\n isObjectType(value) &&\n !(value instanceof Date);\n","export default (value: string) => /^\\w*$/.test(value);\n","export default (value: any[]) => value.filter(Boolean);\n","import compact from './compact';\n\nexport default (input: string): string[] =>\n compact(\n input\n .replace(/[\"|']/g, '')\n .replace(/\\[/g, '.')\n .replace(/\\]/g, '')\n .split('.'),\n );\n","import isObject from './isObject';\nimport isKey from './isKey';\nimport stringToPath from './stringToPath';\nimport { FieldValues } from '../types';\n\nexport default function set(\n object: FieldValues,\n path: string,\n value?: unknown,\n) {\n let index = -1;\n const tempPath = isKey(path) ? [path] : stringToPath(path);\n const length = tempPath.length;\n const lastIndex = length - 1;\n\n while (++index < length) {\n const key = tempPath[index];\n let newValue = value;\n\n if (index !== lastIndex) {\n const objValue = object[key];\n newValue =\n isObject(objValue) || Array.isArray(objValue)\n ? objValue\n : !isNaN(+tempPath[index + 1])\n ? []\n : {};\n }\n object[key] = newValue;\n object = object[key];\n }\n return object;\n}\n","import set from '../utils/set';\nimport isKey from '../utils/isKey';\nimport { FieldValues } from '../types';\n\nexport default (data: FieldValues, value: Record<string, any> = {}): any => {\n for (const key in data) {\n !isKey(key) ? set(value, key, data[key]) : (value[key] = data[key]);\n }\n return value;\n};\n","export default (val: unknown): val is undefined => val === undefined;\n","import isUndefined from './isUndefined';\nimport isNullOrUndefined from './isNullOrUndefined';\nimport compact from './compact';\n\nexport default (obj: any = {}, path: string, defaultValue?: unknown) => {\n const result = compact(path.split(/[,[\\].]+?/)).reduce(\n (result, key) => (isNullOrUndefined(result) ? result : result[key]),\n obj,\n );\n\n return isUndefined(result) || result === obj\n ? isUndefined(obj[path])\n ? defaultValue\n : obj[path]\n : result;\n};\n","import isHTMLElement from '../utils/isHTMLElement';\nimport { EVENTS } from '../constants';\nimport { Ref } from '../types';\n\nexport default (\n ref: Ref,\n validateWithStateUpdate: EventListenerOrEventListenerObject,\n): void => {\n if (isHTMLElement(ref) && ref.removeEventListener) {\n ref.removeEventListener(EVENTS.INPUT, validateWithStateUpdate);\n ref.removeEventListener(EVENTS.CHANGE, validateWithStateUpdate);\n ref.removeEventListener(EVENTS.BLUR, validateWithStateUpdate);\n }\n};\n","import { RadioOrCheckboxOption } from '../types';\n\ntype RadioFieldResult = {\n isValid: boolean;\n value: number | string | null;\n};\n\nconst defaultReturn: RadioFieldResult = {\n isValid: false,\n value: null,\n};\n\nexport default (options?: RadioOrCheckboxOption[]): RadioFieldResult =>\n Array.isArray(options)\n ? options.reduce(\n (previous, option): RadioFieldResult =>\n option && option.ref.checked\n ? {\n isValid: true,\n value: option.ref.value,\n }\n : previous,\n defaultReturn,\n )\n : defaultReturn;\n","import { FieldElement } from '../types';\n\nexport default (element: FieldElement): element is HTMLInputElement =>\n element.type === 'radio';\n","import { FieldElement } from '../types';\n\nexport default (element: FieldElement): element is HTMLInputElement =>\n element.type === 'file';\n","import { FieldElement } from '../types';\n\nexport default (element: FieldElement): element is HTMLInputElement =>\n element.type === 'checkbox';\n","import { FieldElement } from '../types';\nimport { SELECT } from '../constants';\n\nexport default (element: FieldElement): element is HTMLSelectElement =>\n element.type === `${SELECT}-multiple`;\n","import isUndefined from '../utils/isUndefined';\nimport { RadioOrCheckboxOption } from '../types';\n\ntype CheckboxFieldResult = {\n isValid: boolean;\n value: string | string[] | boolean;\n};\n\nconst defaultResult: CheckboxFieldResult = {\n value: false,\n isValid: false,\n};\n\nconst validResult = { value: true, isValid: true };\n\nexport default (options?: RadioOrCheckboxOption[]): CheckboxFieldResult => {\n if (Array.isArray(options)) {\n if (options.length > 1) {\n const values = options\n .filter((option) => option && option.ref.checked)\n .map(({ ref: { value } }) => value);\n return { value: values, isValid: !!values.length };\n }\n\n const { checked, value, attributes } = options[0].ref;\n\n return checked\n ? attributes && !isUndefined((attributes as any).value)\n ? isUndefined(value) || value === ''\n ? validResult\n : { value: value, isValid: true }\n : validResult\n : defaultResult;\n }\n\n return defaultResult;\n};\n","import * as React from 'react';\nimport getRadioValue from './getRadioValue';\nimport getMultipleSelectValue from './getMultipleSelectValue';\nimport isRadioInput from '../utils/isRadioInput';\nimport get from '../utils/get';\nimport isFileInput from '../utils/isFileInput';\nimport isCheckBox from '../utils/isCheckBoxInput';\nimport isMultipleSelect from '../utils/isMultipleSelect';\nimport getCheckboxValue from './getCheckboxValue';\nimport { FieldRefs, FieldValues, InternalFieldName } from '../types';\n\nexport default function getFieldValue<TFieldValues extends FieldValues>(\n fieldsRef: React.MutableRefObject<FieldRefs<TFieldValues>>,\n name: InternalFieldName<TFieldValues>,\n shallowFieldsStateRef?: React.MutableRefObject<Partial<FieldValues>>,\n excludeDisabled?: boolean,\n shouldKeepRawValue?: boolean,\n) {\n const field = fieldsRef.current[name]!;\n\n if (field) {\n const {\n ref: { value, disabled },\n ref,\n valueAsNumber,\n valueAsDate,\n setValueAs,\n } = field;\n\n if (disabled && excludeDisabled) {\n return;\n }\n\n if (isFileInput(ref)) {\n return ref.files;\n }\n\n if (isRadioInput(ref)) {\n return getRadioValue(field.options).value;\n }\n\n if (isMultipleSelect(ref)) {\n return getMultipleSelectValue(ref.options);\n }\n\n if (isCheckBox(ref)) {\n return getCheckboxValue(field.options).value;\n }\n\n return shouldKeepRawValue\n ? value\n : valueAsNumber\n ? value === ''\n ? NaN\n : +value\n : valueAsDate\n ? (ref as HTMLInputElement).valueAsDate\n : setValueAs\n ? setValueAs(value)\n : value;\n }\n\n if (shallowFieldsStateRef) {\n return get(shallowFieldsStateRef.current, name);\n }\n}\n","export default (\n options: HTMLOptionElement[] | HTMLOptionsCollection,\n): string[] =>\n [...options]\n .filter(({ selected }): boolean => selected)\n .map(({ value }): string => value);\n","import { Ref } from '../types';\n\nexport default function isDetached(element: Ref): boolean {\n if (!element) {\n return true;\n }\n\n if (\n !(element instanceof HTMLElement) ||\n element.nodeType === Node.DOCUMENT_NODE\n ) {\n return false;\n }\n\n return isDetached(element.parentNode as Ref);\n}\n","import isObject from './isObject';\nimport { EmptyObject } from '../types';\n\nexport default (value: unknown): value is EmptyObject =>\n isObject(value) && !Object.keys(value).length;\n","export default (value: unknown): value is boolean => typeof value === 'boolean';\n","import isKey from './isKey';\nimport stringToPath from './stringToPath';\nimport isEmptyObject from './isEmptyObject';\nimport isObject from './isObject';\nimport isUndefined from './isUndefined';\nimport isBoolean from './isBoolean';\n\nfunction baseGet(object: any, updatePath: (string | number)[]) {\n const length = updatePath.slice(0, -1).length;\n let index = 0;\n\n while (index < length) {\n object = isUndefined(object) ? index++ : object[updatePath[index++]];\n }\n\n return object;\n}\n\nexport default function unset(object: any, path: string) {\n const updatePath = isKey(path) ? [path] : stringToPath(path);\n const childObject =\n updatePath.length == 1 ? object : baseGet(object, updatePath);\n const key = updatePath[updatePath.length - 1];\n let previousObjRef;\n\n if (childObject) {\n delete childObject[key];\n }\n\n for (let k = 0; k < updatePath.slice(0, -1).length; k++) {\n let index = -1;\n let objectRef;\n const currentPaths = updatePath.slice(0, -(k + 1));\n const currentPathsLength = currentPaths.length - 1;\n\n if (k > 0) {\n previousObjRef = object;\n }\n\n while (++index < currentPaths.length) {\n const item = currentPaths[index];\n objectRef = objectRef ? objectRef[item] : object[item];\n\n if (\n currentPathsLength === index &&\n ((isObject(objectRef) && isEmptyObject(objectRef)) ||\n (Array.isArray(objectRef) &&\n !objectRef.filter(\n (data) =>\n (isObject(data) && !isEmptyObject(data)) || isBoolean(data),\n ).length))\n ) {\n previousObjRef ? delete previousObjRef[item] : delete object[item];\n }\n\n previousObjRef = objectRef;\n }\n }\n\n return object;\n}\n","import * as React from 'react';\nimport removeAllEventListeners from './removeAllEventListeners';\nimport getFieldValue from './getFieldValue';\nimport isRadioInput from '../utils/isRadioInput';\nimport set from '../utils/set';\nimport isCheckBoxInput from '../utils/isCheckBoxInput';\nimport isDetached from '../utils/isDetached';\nimport unset from '../utils/unset';\nimport compact from '../utils/compact';\nimport isUndefined from '../utils/isUndefined';\nimport { Field, FieldRefs, FieldValues, Ref } from '../types';\n\nconst isSameRef = (fieldValue: Field, ref: Ref) =>\n fieldValue && fieldValue.ref === ref;\n\nexport default function findRemovedFieldAndRemoveListener<\n TFieldValues extends FieldValues\n>(\n fieldsRef: React.MutableRefObject<FieldRefs<TFieldValues>>,\n handleChange: ({ type, target }: Event) => Promise<void | boolean>,\n field: Field,\n shallowFieldsStateRef: React.MutableRefObject<FieldValues>,\n shouldUnregister?: boolean,\n forceDelete?: boolean,\n): void {\n const {\n ref,\n ref: { name },\n } = field;\n const fieldRef = fieldsRef.current[name] as Field;\n\n if (!shouldUnregister) {\n const value = getFieldValue(fieldsRef, name, shallowFieldsStateRef);\n\n !isUndefined(value) && set(shallowFieldsStateRef.current, name, value);\n }\n\n if (!ref.type || !fieldRef) {\n delete fieldsRef.current[name];\n return;\n }\n\n if (isRadioInput(ref) || isCheckBoxInput(ref)) {\n if (Array.isArray(fieldRef.options) && fieldRef.options.length) {\n compact(fieldRef.options).forEach((option = {}, index): void => {\n if (\n (isDetached(option.ref) && isSameRef(option, option.ref)) ||\n forceDelete\n ) {\n removeAllEventListeners(option.ref, handleChange);\n unset(fieldRef.options, `[${index}]`);\n }\n });\n\n if (fieldRef.options && !compact(fieldRef.options).length) {\n delete fieldsRef.current[name];\n }\n } else {\n delete fieldsRef.current[name];\n }\n } else if ((isDetached(ref) && isSameRef(fieldRef, ref)) || forceDelete) {\n removeAllEventListeners(ref, handleChange);\n\n delete fieldsRef.current[name];\n }\n}\n","import isNullOrUndefined from './isNullOrUndefined';\nimport { isObjectType } from './isObject';\nimport { Primitive } from '../types';\n\nexport default (value: unknown): value is Primitive =>\n isNullOrUndefined(value) || !isObjectType(value);\n","import isObject from './isObject';\nimport isPrimitive from './isPrimitive';\n\nexport function deepMerge<\n T extends Record<keyof T, any>,\n U extends Record<keyof U, any>\n>(target: T, source: U): T & U {\n if (isPrimitive(target) || isPrimitive(source)) {\n return source;\n }\n\n for (const key in source) {\n const targetValue = target[key];\n const sourceValue = source[key];\n\n try {\n target[key] =\n (isObject(targetValue) && isObject(sourceValue)) ||\n (Array.isArray(targetValue) && Array.isArray(sourceValue))\n ? deepMerge(targetValue, sourceValue)\n : sourceValue;\n } catch {}\n }\n\n return target;\n}\n","import * as React from 'react';\nimport isObject from '../utils/isObject';\nimport isPrimitive from './isPrimitive';\n\nexport default function deepEqual(\n object1: any,\n object2: any,\n isErrorObject?: boolean,\n) {\n if (\n isPrimitive(object1) ||\n isPrimitive(object2) ||\n object1 instanceof Date ||\n object2 instanceof Date\n ) {\n return object1 === object2;\n }\n\n if (!React.isValidElement(object1)) {\n const keys1 = Object.keys(object1);\n const keys2 = Object.keys(object2);\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n for (const key of keys1) {\n const val1 = object1[key];\n\n if (!(isErrorObject && key === 'ref')) {\n const val2 = object2[key];\n\n if (\n (isObject(val1) || Array.isArray(val1)) &&\n (isObject(val2) || Array.isArray(val2))\n ? !deepEqual(val1, val2, isErrorObject)\n : val1 !== val2\n ) {\n return false;\n }\n }\n }\n }\n\n return true;\n}\n","import { get } from '../utils';\nimport set from '../utils/set';\nimport { deepMerge } from '../utils/deepMerge';\nimport deepEqual from '../utils/deepEqual';\n\nfunction setDirtyFields<\n T extends Record<string, unknown>[],\n U extends Record<string, unknown>[],\n K extends Record<string, boolean | []>\n>(\n values: T,\n defaultValues: U,\n dirtyFields: Record<string, boolean | []>[],\n parentNode?: K,\n parentName?: keyof K,\n) {\n let index = -1;\n\n while (++index < values.length) {\n for (const key in values[index]) {\n if (Array.isArray(values[index][key])) {\n !dirtyFields[index] && (dirtyFields[index] = {});\n dirtyFields[index][key] = [];\n setDirtyFields(\n values[index][key] as T,\n get(defaultValues[index] || {}, key, []),\n dirtyFields[index][key] as [],\n dirtyFields[index],\n key,\n );\n } else {\n deepEqual(get(defaultValues[index] || {}, key), values[index][key])\n ? set(dirtyFields[index] || {}, key)\n : (dirtyFields[index] = {\n ...dirtyFields[index],\n [key]: true,\n });\n }\n }\n\n parentNode &&\n !dirtyFields.length &&\n delete parentNode[parentName as keyof K];\n }\n\n return dirtyFields;\n}\n\nexport default <T extends U, U extends Record<string, unknown>[]>(\n values: T,\n defaultValues: U,\n dirtyFields: Record<string, boolean | []>[],\n) =>\n deepMerge(\n setDirtyFields(values, defaultValues, dirtyFields.slice(0, values.length)),\n setDirtyFields(defaultValues, values, dirtyFields.slice(0, values.length)),\n );\n","export default (value: unknown): value is string => typeof value === 'string';\n","import * as React from 'react';\nimport getFieldValue from './getFieldValue';\nimport isString from '../utils/isString';\nimport { deepMerge } from '../utils/deepMerge';\nimport isUndefined from '../utils/isUndefined';\nimport { InternalFieldName, FieldValues, FieldRefs } from '../types';\nimport transformToNestObject from './transformToNestObject';\n\nexport default <TFieldValues extends FieldValues>(\n fieldsRef: React.MutableRefObject<FieldRefs<TFieldValues>>,\n shallowFieldsState: Record<string, any>,\n shouldUnregister: boolean,\n excludeDisabled?: boolean,\n search?:\n | InternalFieldName<TFieldValues>\n | InternalFieldName<TFieldValues>[]\n | { nest: boolean },\n) => {\n const output = {} as TFieldValues;\n\n for (const name in fieldsRef.current) {\n if (\n isUndefined(search) ||\n (isString(search)\n ? name.startsWith(search)\n : Array.isArray(search) && search.find((data) => name.startsWith(data)))\n ) {\n output[name as InternalFieldName<TFieldValues>] = getFieldValue(\n fieldsRef,\n name,\n undefined,\n excludeDisabled,\n );\n }\n }\n\n return shouldUnregister\n ? transformToNestObject(output)\n : deepMerge(shallowFieldsState, transformToNestObject(output));\n};\n","export default (value: unknown): value is RegExp => value instanceof RegExp;\n","import isObject from '../utils/isObject';\nimport isRegex from '../utils/isRegex';\nimport { ValidationRule } from '../types';\n\nexport default (validationData?: ValidationRule) =>\n isObject(validationData) && !isRegex(validationData)\n ? validationData\n : {\n value: validationData,\n message: '',\n };\n","export default (value: unknown): value is Function =>\n typeof value === 'function';\n","import * as React from 'react';\nimport isString from '../utils/isString';\nimport { Message } from '../types';\n\nexport default (value: unknown): value is Message =>\n isString(value) || React.isValidElement(value as JSX.Element);\n","import isBoolean from '../utils/isBoolean';\nimport isMessage from '../utils/isMessage';\nimport { FieldError, ValidateResult, Ref } from '../types';\n\nexport default function getValidateError(\n result: ValidateResult,\n ref: Ref,\n type = 'validate',\n): FieldError | void {\n if (isMessage(result) || (isBoolean(result) && !result)) {\n return {\n type,\n message: isMessage(result) ? result : '',\n ref,\n };\n }\n}\n","import {\n InternalFieldName,\n ValidateResult,\n InternalFieldErrors,\n} from '../types';\n\nexport default <TFieldValues>(\n name: InternalFieldName<TFieldValues>,\n validateAllFieldCriteria: boolean,\n errors: InternalFieldErrors<TFieldValues>,\n type: string,\n message: ValidateResult,\n) =>\n validateAllFieldCriteria\n ? {\n ...errors[name],\n types: {\n ...(errors[name] && errors[name]!.types ? errors[name]!.types : {}),\n [type]: message || true,\n },\n }\n : {};\n","import * as React from 'react';\nimport getRadioValue from './getRadioValue';\nimport getCheckboxValue from './getCheckboxValue';\nimport isNullOrUndefined from '../utils/isNullOrUndefined';\nimport isRadioInput from '../utils/isRadioInput';\nimport getValueAndMessage from './getValueAndMessage';\nimport isCheckBoxInput from '../utils/isCheckBoxInput';\nimport isString from '../utils/isString';\nimport isEmptyObject from '../utils/isEmptyObject';\nimport isObject from '../utils/isObject';\nimport isFunction from '../utils/isFunction';\nimport getFieldsValue from './getFieldValue';\nimport isRegex from '../utils/isRegex';\nimport isBoolean from '../utils/isBoolean';\nimport isMessage from '../utils/isMessage';\nimport getValidateError from './getValidateError';\nimport appendErrors from './appendErrors';\nimport { INPUT_VALIDATION_RULES } from '../constants';\nimport {\n Field,\n FieldValues,\n FieldRefs,\n Message,\n FieldError,\n InternalFieldName,\n InternalFieldErrors,\n} from '../types';\n\nexport default async <TFieldValues extends FieldValues>(\n fieldsRef: React.MutableRefObject<FieldRefs<TFieldValues>>,\n validateAllFieldCriteria: boolean,\n {\n ref,\n ref: { value },\n options,\n required,\n maxLength,\n minLength,\n min,\n max,\n pattern,\n validate,\n }: Field,\n shallowFieldsStateRef: React.MutableRefObject<Record<string, any>>,\n): Promise<InternalFieldErrors<TFieldValues>> => {\n const name: InternalFieldName<TFieldValues> = ref.name;\n const error: InternalFieldErrors<TFieldValues> = {};\n const isRadio = isRadioInput(ref);\n const isCheckBox = isCheckBoxInput(ref);\n const isRadioOrCheckbox = isRadio || isCheckBox;\n const isEmpty = value === '';\n const appendErrorsCurry = appendErrors.bind(\n null,\n name,\n validateAllFieldCriteria,\n error,\n );\n const getMinMaxMessage = (\n exceedMax: boolean,\n maxLengthMessage: Message,\n minLengthMessage: Message,\n maxType = INPUT_VALIDATION_RULES.maxLength,\n minType = INPUT_VALIDATION_RULES.minLength,\n ) => {\n const message = exceedMax ? maxLengthMessage : minLengthMessage;\n error[name] = {\n type: exceedMax ? maxType : minType,\n message,\n ref,\n ...(exceedMax\n ? appendErrorsCurry(maxType, message)\n : appendErrorsCurry(minType, message)),\n };\n };\n\n if (\n required &&\n ((!isRadio && !isCheckBox && (isEmpty || isNullOrUndefined(value))) ||\n (isBoolean(value) && !value) ||\n (isCheckBox && !getCheckboxValue(options).isValid) ||\n (isRadio && !getRadioValue(options).isValid))\n ) {\n const { value, message } = isMessage(required)\n ? { value: !!required, message: required }\n : getValueAndMessage(required);\n\n if (value) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.required,\n message,\n ref: isRadioOrCheckbox\n ? (((fieldsRef.current[name] as Field).options || [])[0] || {}).ref\n : ref,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.required, message),\n };\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n }\n\n if ((!isNullOrUndefined(min) || !isNullOrUndefined(max)) && value !== '') {\n let exceedMax;\n let exceedMin;\n const maxOutput = getValueAndMessage(max);\n const minOutput = getValueAndMessage(min);\n\n if (!isNaN(value)) {\n const valueNumber =\n (ref as HTMLInputElement).valueAsNumber || parseFloat(value);\n if (!isNullOrUndefined(maxOutput.value)) {\n exceedMax = valueNumber > maxOutput.value;\n }\n if (!isNullOrUndefined(minOutput.value)) {\n exceedMin = valueNumber < minOutput.value;\n }\n } else {\n const valueDate =\n (ref as HTMLInputElement).valueAsDate || new Date(value);\n if (isString(maxOutput.value)) {\n exceedMax = valueDate > new Date(maxOutput.value);\n }\n if (isString(minOutput.value)) {\n exceedMin = valueDate < new Date(minOutput.value);\n }\n }\n\n if (exceedMax || exceedMin) {\n getMinMaxMessage(\n !!exceedMax,\n maxOutput.message,\n minOutput.message,\n INPUT_VALIDATION_RULES.max,\n INPUT_VALIDATION_RULES.min,\n );\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n }\n\n if (isString(value) && !isEmpty && (maxLength || minLength)) {\n const maxLengthOutput = getValueAndMessage(maxLength);\n const minLengthOutput = getValueAndMessage(minLength);\n const exceedMax =\n !isNullOrUndefined(maxLengthOutput.value) &&\n value.length > maxLengthOutput.value;\n const exceedMin =\n !isNullOrUndefined(minLengthOutput.value) &&\n value.length < minLengthOutput.value;\n\n if (exceedMax || exceedMin) {\n getMinMaxMessage(\n exceedMax,\n maxLengthOutput.message,\n minLengthOutput.message,\n );\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n }\n\n if (isString(value) && pattern && !isEmpty) {\n const { value: patternValue, message } = getValueAndMessage(pattern);\n\n if (isRegex(patternValue) && !patternValue.test(value)) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.pattern,\n message,\n ref,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.pattern, message),\n };\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n }\n\n if (validate) {\n const fieldValue = getFieldsValue(\n fieldsRef,\n name,\n shallowFieldsStateRef,\n false,\n true,\n );\n const validateRef = isRadioOrCheckbox && options ? options[0].ref : ref;\n\n if (isFunction(validate)) {\n const result = await validate(fieldValue);\n const validateError = getValidateError(result, validateRef);\n\n if (validateError) {\n error[name] = {\n ...validateError,\n ...appendErrorsCurry(\n INPUT_VALIDATION_RULES.validate,\n validateError.message,\n ),\n };\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n } else if (isObject(validate)) {\n let validationResult = {} as FieldError;\n for (const [key, validateFunction] of Object.entries(validate)) {\n if (!isEmptyObject(validationResult) && !validateAllFieldCriteria) {\n break;\n }\n\n const validateResult = await validateFunction(fieldValue);\n const validateError = getValidateError(\n validateResult,\n validateRef,\n key,\n );\n\n if (validateError) {\n validationResult = {\n ...validateError,\n ...appendErrorsCurry(key, validateError.message),\n };\n\n if (validateAllFieldCriteria) {\n error[name] = validationResult;\n }\n }\n }\n\n if (!isEmptyObject(validationResult)) {\n error[name] = {\n ref: validateRef,\n ...validationResult,\n };\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n }\n }\n\n return error;\n};\n","import isPrimitive from './isPrimitive';\nimport isObject from './isObject';\nimport { FieldName } from '../types';\n\nexport const getPath = <TFieldValues>(\n rootPath: FieldName<TFieldValues>,\n values: any,\n paths: FieldName<TFieldValues>[] = [],\n): FieldName<TFieldValues>[] => {\n for (const property in values) {\n const rootName = (rootPath +\n (isObject(values)\n ? `.${property}`\n : `[${property}]`)) as FieldName<TFieldValues>;\n\n isPrimitive(values[property])\n ? paths.push(rootName)\n : getPath(rootName, values[property], paths);\n }\n\n return paths;\n};\n","import get from '../utils/get';\nimport { getPath } from '../utils/getPath';\nimport isEmptyObject from '../utils/isEmptyObject';\nimport isUndefined from '../utils/isUndefined';\nimport isObject from '../utils/isObject';\nimport {\n DeepPartial,\n FieldValue,\n FieldValues,\n InternalFieldName,\n UnpackNestedValue,\n} from '../types';\n\nexport default <TFieldValues extends FieldValues>(\n fieldValues: TFieldValues,\n fieldName: InternalFieldName<TFieldValues>,\n watchFields: Set<InternalFieldName<TFieldValues>>,\n inputValue: UnpackNestedValue<DeepPartial<TFieldValues>>,\n isSingleField?: boolean,\n):\n | FieldValue<TFieldValues>\n | UnpackNestedValue<DeepPartial<TFieldValues>>\n | undefined => {\n let value = undefined;\n\n watchFields.add(fieldName);\n\n if (!isEmptyObject(fieldValues)) {\n value = get(fieldValues, fieldName);\n\n if (isObject(value) || Array.isArray(value)) {\n getPath(fieldName, value).forEach((name) => watchFields.add(name));\n }\n }\n\n return isUndefined(value)\n ? isSingleField\n ? inputValue\n : get(inputValue, fieldName)\n : value;\n};\n","export default ({\n isOnBlur,\n isOnChange,\n isOnTouch,\n isTouched,\n isReValidateOnBlur,\n isReValidateOnChange,\n isBlurEvent,\n isSubmitted,\n isOnAll,\n}: {\n isOnAll?: boolean;\n isOnBlur?: boolean;\n isOnChange?: boolean;\n isReValidateOnBlur?: boolean;\n isReValidateOnChange?: boolean;\n isBlurEvent?: boolean;\n isSubmitted?: boolean;\n isOnTouch?: boolean;\n isTouched?: boolean;\n}) => {\n if (isOnAll) {\n return false;\n } else if (!isSubmitted && isOnTouch) {\n return !(isTouched || isBlurEvent);\n } else if (isSubmitted ? isReValidateOnBlur : isOnBlur) {\n return !isBlurEvent;\n } else if (isSubmitted ? isReValidateOnChange : isOnChange) {\n return isBlurEvent;\n }\n return true;\n};\n","export default (name: string) => name.substring(0, name.indexOf('['));\n","import { FieldValues, InternalFieldName } from '../types';\n\nexport const isMatchFieldArrayName = (name: string, searchName: string) =>\n RegExp(\n `^${searchName}([|.)\\\\d+`.replace(/\\[/g, '\\\\[').replace(/\\]/g, '\\\\]'),\n ).test(name);\n\nexport default (\n names: Set<InternalFieldName<FieldValues>>,\n name: InternalFieldName<FieldValues>,\n) => [...names].some((current) => isMatchFieldArrayName(name, current));\n","import { UNDEFINED } from '../constants';\n\nexport default typeof window !== UNDEFINED &&\n typeof window.HTMLElement !== UNDEFINED &&\n typeof document !== UNDEFINED;\n","import isPrimitive from './isPrimitive';\nimport isHTMLElement from './isHTMLElement';\nimport isWeb from './isWeb';\n\nexport default function cloneObject<T extends unknown>(data: T): T {\n let copy: any;\n\n if (\n isPrimitive(data) ||\n (isWeb && (data instanceof File || isHTMLElement(data)))\n ) {\n return data;\n }\n\n if (\n !['Set', 'Map', 'Object', 'Date', 'Array'].includes(\n (data as Object).constructor?.name,\n )\n ) {\n return data;\n }\n\n if (data instanceof Date) {\n copy = new Date(data.getTime());\n return copy;\n }\n\n if (data instanceof Set) {\n copy = new Set();\n for (const item of data) {\n copy.add(item);\n }\n return copy;\n }\n\n if (data instanceof Map) {\n copy = new Map();\n for (const key of data.keys()) {\n copy.set(key, cloneObject(data.get(key)));\n }\n return copy;\n }\n\n copy = Array.isArray(data) ? [] : {};\n\n for (const key in data) {\n copy[key] = cloneObject(data[key]);\n }\n\n return copy;\n}\n","import { VALIDATION_MODE } from '../constants';\nimport { Mode } from '../types';\n\nexport default (\n mode?: Mode,\n): {\n isOnSubmit: boolean;\n isOnBlur: boolean;\n isOnChange: boolean;\n isOnAll: boolean;\n isOnTouch: boolean;\n} => ({\n isOnSubmit: !mode || mode === VALIDATION_MODE.onSubmit,\n isOnBlur: mode === VALIDATION_MODE.onBlur,\n isOnChange: mode === VALIDATION_MODE.onChange,\n isOnAll: mode === VALIDATION_MODE.all,\n isOnTouch: mode === VALIDATION_MODE.onTouched,\n});\n","import isRadioInput from './isRadioInput';\nimport isCheckBoxInput from './isCheckBoxInput';\nimport { FieldElement } from '../types';\n\nexport default (ref: FieldElement): ref is HTMLInputElement =>\n isRadioInput(ref) || isCheckBoxInput(ref);\n","import * as React from 'react';\nimport attachEventListeners from './logic/attachEventListeners';\nimport transformToNestObject from './logic/transformToNestObject';\nimport focusOnErrorField from './logic/focusOnErrorField';\nimport findRemovedFieldAndRemoveListener from './logic/findRemovedFieldAndRemoveListener';\nimport setFieldArrayDirtyFields from './logic/setFieldArrayDirtyFields';\nimport getFieldsValues from './logic/getFieldsValues';\nimport getFieldValue from './logic/getFieldValue';\nimport isErrorStateChanged from './logic/isErrorStateChanged';\nimport validateField from './logic/validateField';\nimport assignWatchFields from './logic/assignWatchFields';\nimport skipValidation from './logic/skipValidation';\nimport getNodeParentName from './logic/getNodeParentName';\nimport deepEqual from './utils/deepEqual';\nimport isNameInFieldArray from './logic/isNameInFieldArray';\nimport isCheckBoxInput from './utils/isCheckBoxInput';\nimport isEmptyObject from './utils/isEmptyObject';\nimport isRadioInput from './utils/isRadioInput';\nimport isSelectInput from './utils/isSelectInput';\nimport isFileInput from './utils/isFileInput';\nimport onDomRemove from './utils/onDomRemove';\nimport isObject from './utils/isObject';\nimport { getPath } from './utils/getPath';\nimport isPrimitive from './utils/isPrimitive';\nimport isFunction from './utils/isFunction';\nimport isString from './utils/isString';\nimport isUndefined from './utils/isUndefined';\nimport get from './utils/get';\nimport set from './utils/set';\nimport unset from './utils/unset';\nimport isKey from './utils/isKey';\nimport cloneObject from './utils/cloneObject';\nimport modeChecker from './utils/validationModeChecker';\nimport isMultipleSelect from './utils/isMultipleSelect';\nimport compact from './utils/compact';\nimport isNullOrUndefined from './utils/isNullOrUndefined';\nimport isRadioOrCheckboxFunction from './utils/isRadioOrCheckbox';\nimport isWeb from './utils/isWeb';\nimport isHTMLElement from './utils/isHTMLElement';\nimport { EVENTS, UNDEFINED, VALIDATION_MODE } from './constants';\nimport {\n UseFormMethods,\n FieldValues,\n UnpackNestedValue,\n FieldName,\n InternalFieldName,\n FieldErrors,\n Field,\n FieldRefs,\n UseFormOptions,\n RegisterOptions,\n SubmitHandler,\n FieldElement,\n FormStateProxy,\n ReadFormState,\n Ref,\n HandleChange,\n RadioOrCheckboxOption,\n OmitResetState,\n SetValueConfig,\n ErrorOption,\n FormState,\n SubmitErrorHandler,\n FieldNamesMarkedBoolean,\n LiteralToPrimitive,\n DeepPartial,\n InternalNameSet,\n DefaultValues,\n FieldError,\n SetFieldValue,\n FieldArrayDefaultValues,\n ResetFieldArrayFunctionRef,\n UseWatchRenderFunctions,\n RecordInternalNameSet,\n} from './types';\n\nconst isWindowUndefined = typeof window === UNDEFINED;\nconst isProxyEnabled = isWeb ? 'Proxy' in window : typeof Proxy !== UNDEFINED;\n\nexport function useForm<\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object\n>({\n mode = VALIDATION_MODE.onSubmit,\n reValidateMode = VALIDATION_MODE.onChange,\n resolver,\n context,\n defaultValues = {} as DefaultValues<TFieldValues>,\n shouldFocusError = true,\n shouldUnregister = true,\n criteriaMode,\n}: UseFormOptions<TFieldValues, TContext> = {}): UseFormMethods<TFieldValues> {\n const fieldsRef = React.useRef<FieldRefs<TFieldValues>>({});\n const fieldArrayDefaultValuesRef = React.useRef<FieldArrayDefaultValues>({});\n const fieldArrayValuesRef = React.useRef<FieldArrayDefaultValues>({});\n const watchFieldsRef = React.useRef<InternalNameSet<TFieldValues>>(new Set());\n const useWatchFieldsRef = React.useRef<RecordInternalNameSet<TFieldValues>>(\n {},\n );\n const useWatchRenderFunctionsRef = React.useRef<UseWatchRenderFunctions>({});\n const fieldsWithValidationRef = React.useRef<\n FieldNamesMarkedBoolean<TFieldValues>\n >({});\n const validFieldsRef = React.useRef<FieldNamesMarkedBoolean<TFieldValues>>(\n {},\n );\n const defaultValuesRef = React.useRef<DefaultValues<TFieldValues>>(\n defaultValues,\n );\n const isUnMount = React.useRef(false);\n const isWatchAllRef = React.useRef(false);\n const handleChangeRef = React.useRef<HandleChange>();\n const shallowFieldsStateRef = React.useRef({});\n const resetFieldArrayFunctionRef = React.useRef<\n ResetFieldArrayFunctionRef<TFieldValues>\n >({});\n const contextRef = React.useRef(context);\n const resolverRef = React.useRef(resolver);\n const fieldArrayNamesRef = React.useRef<InternalNameSet<TFieldValues>>(\n new Set(),\n );\n const modeRef = React.useRef(modeChecker(mode));\n const { isOnSubmit, isOnTouch } = modeRef.current;\n const isValidateAllFieldCriteria = criteriaMode === VALIDATION_MODE.all;\n const [formState, setFormState] = React.useState<FormState<TFieldValues>>({\n isDirty: false,\n isValidating: false,\n dirtyFields: {},\n isSubmitted: false,\n submitCount: 0,\n touched: {},\n isSubmitting: false,\n isSubmitSuccessful: false,\n isValid: !isOnSubmit,\n errors: {},\n });\n const readFormStateRef = React.useRef<ReadFormState>({\n isDirty: !isProxyEnabled,\n dirtyFields: !isProxyEnabled,\n touched: !isProxyEnabled || isOnTouch,\n isValidating: !isProxyEnabled,\n isSubmitting: !isProxyEnabled,\n isValid: !isProxyEnabled,\n });\n const formStateRef = React.useRef(formState);\n const observerRef = React.useRef<MutationObserver | undefined>();\n const {\n isOnBlur: isReValidateOnBlur,\n isOnChange: isReValidateOnChange,\n } = React.useRef(modeChecker(reValidateMode)).current;\n\n contextRef.current = context;\n resolverRef.current = resolver;\n formStateRef.current = formState;\n shallowFieldsStateRef.current = shouldUnregister\n ? {}\n : isEmptyObject(shallowFieldsStateRef.current)\n ? cloneObject(defaultValues)\n : shallowFieldsStateRef.current;\n\n const updateFormState = React.useCallback(\n (state: Partial<FormState<TFieldValues>> = {}) => {\n if (!isUnMount.current) {\n formStateRef.current = {\n ...formStateRef.current,\n ...state,\n };\n setFormState(formStateRef.current);\n }\n },\n [],\n );\n\n const updateIsValidating = () =>\n readFormStateRef.current.isValidating &&\n updateFormState({\n isValidating: true,\n });\n\n const shouldRenderBaseOnError = React.useCallback(\n (\n name: InternalFieldName<TFieldValues>,\n error: FieldError | undefined,\n shouldRender: boolean | null = false,\n state: {\n dirtyFields?: FieldNamesMarkedBoolean<TFieldValues>;\n isDirty?: boolean;\n touched?: FieldNamesMarkedBoolean<TFieldValues>;\n } = {},\n isValid?: boolean,\n ): boolean | void => {\n let shouldReRender =\n shouldRender ||\n isErrorStateChanged<TFieldValues>({\n errors: formStateRef.current.errors,\n error,\n name,\n validFields: validFieldsRef.current,\n fieldsWithValidation: fieldsWithValidationRef.current,\n });\n const previousError = get(formStateRef.current.errors, name);\n\n if (error) {\n unset(validFieldsRef.current, name);\n shouldReRender =\n shouldReRender ||\n !previousError ||\n !deepEqual(previousError, error, true);\n set(formStateRef.current.errors, name, error);\n } else {\n if (get(fieldsWithValidationRef.current, name) || resolverRef.current) {\n set(validFieldsRef.current, name, true);\n shouldReRender = shouldReRender || previousError;\n }\n\n unset(formStateRef.current.errors, name);\n }\n\n if (\n (shouldReRender && !isNullOrUndefined(shouldRender)) ||\n !isEmptyObject(state) ||\n readFormStateRef.current.isValidating\n ) {\n updateFormState({\n ...state,\n ...(resolverRef.current ? { isValid: !!isValid } : {}),\n isValidating: false,\n });\n }\n },\n [],\n );\n\n const setFieldValue = React.useCallback(\n (name: FieldName<TFieldValues>, rawValue: SetFieldValue<TFieldValues>) => {\n const { ref, options } = fieldsRef.current[name] as Field;\n const value =\n isWeb && isHTMLElement(ref) && isNullOrUndefined(rawValue)\n ? ''\n : rawValue;\n\n if (isRadioInput(ref)) {\n (options || []).forEach(\n ({ ref: radioRef }: { ref: HTMLInputElement }) =>\n (radioRef.checked = radioRef.value === value),\n );\n } else if (isFileInput(ref) && !isString(value)) {\n ref.files = value as FileList;\n } else if (isMultipleSelect(ref)) {\n [...ref.options].forEach(\n (selectRef) =>\n (selectRef.selected = (value as string[]).includes(\n selectRef.value,\n )),\n );\n } else if (isCheckBoxInput(ref) && options) {\n options.length > 1\n ? options.forEach(\n ({ ref: checkboxRef }) =>\n (checkboxRef.checked = Array.isArray(value)\n ? !!(value as []).find(\n (data: string) => data === checkboxRef.value,\n )\n : value === checkboxRef.value),\n )\n : (options[0].ref.checked = !!value);\n } else {\n ref.value = value;\n }\n },\n [],\n );\n\n const isFormDirty = React.useCallback(\n (name?: string, data?: unknown[]): boolean => {\n if (readFormStateRef.current.isDirty) {\n const formValues = getValues();\n\n name && data && set(formValues, name, data);\n\n return !deepEqual(formValues, defaultValuesRef.current);\n }\n\n return false;\n },\n [],\n );\n\n const updateAndGetDirtyState = React.useCallback(\n (\n name: InternalFieldName<TFieldValues>,\n shouldRender = true,\n ): Partial<\n Pick<FormState<TFieldValues>, 'dirtyFields' | 'isDirty' | 'touched'>\n > => {\n if (\n readFormStateRef.current.isDirty ||\n readFormStateRef.current.dirtyFields\n ) {\n const isFieldDirty = !deepEqual(\n get(defaultValuesRef.current, name),\n getFieldValue(fieldsRef, name, shallowFieldsStateRef),\n );\n const isDirtyFieldExist = get(formStateRef.current.dirtyFields, name);\n const previousIsDirty = formStateRef.current.isDirty;\n\n isFieldDirty\n ? set(formStateRef.current.dirtyFields, name, true)\n : unset(formStateRef.current.dirtyFields, name);\n\n const state = {\n isDirty: isFormDirty(),\n dirtyFields: formStateRef.current.dirtyFields,\n };\n\n const isChanged =\n (readFormStateRef.current.isDirty &&\n previousIsDirty !== state.isDirty) ||\n (readFormStateRef.current.dirtyFields &&\n isDirtyFieldExist !== get(formStateRef.current.dirtyFields, name));\n\n isChanged && shouldRender && updateFormState(state);\n\n return isChanged ? state : {};\n }\n\n return {};\n },\n [],\n );\n\n const executeValidation = React.useCallback(\n async (\n name: InternalFieldName<TFieldValues>,\n skipReRender?: boolean | null,\n ): Promise<boolean> => {\n if (process.env.NODE_ENV !== 'production') {\n if (!fieldsRef.current[name]) {\n console.warn('📋 Field is missing with `name` attribute: ', name);\n return false;\n }\n }\n\n const error = (\n await validateField<TFieldValues>(\n fieldsRef,\n isValidateAllFieldCriteria,\n fieldsRef.current[name] as Field,\n shallowFieldsStateRef,\n )\n )[name];\n\n shouldRenderBaseOnError(name, error, skipReRender);\n\n return isUndefined(error);\n },\n [shouldRenderBaseOnError, isValidateAllFieldCriteria],\n );\n\n const executeSchemaOrResolverValidation = React.useCallback(\n async (\n names:\n | InternalFieldName<TFieldValues>\n | InternalFieldName<TFieldValues>[],\n ) => {\n const { errors } = await resolverRef.current!(\n getValues(),\n contextRef.current,\n isValidateAllFieldCriteria,\n );\n const previousFormIsValid = formStateRef.current.isValid;\n\n if (Array.isArray(names)) {\n const isInputsValid = names\n .map((name) => {\n const error = get(errors, name);\n\n error\n ? set(formStateRef.current.errors, name, error)\n : unset(formStateRef.current.errors, name);\n\n return !error;\n })\n .every(Boolean);\n\n updateFormState({\n isValid: isEmptyObject(errors),\n isValidating: false,\n });\n\n return isInputsValid;\n } else {\n const error = get(errors, names);\n\n shouldRenderBaseOnError(\n names,\n error,\n previousFormIsValid !== isEmptyObject(errors),\n {},\n isEmptyObject(errors),\n );\n\n return !error;\n }\n },\n [shouldRenderBaseOnError, isValidateAllFieldCriteria],\n );\n\n const trigger = React.useCallback(\n async (\n name?: FieldName<TFieldValues> | FieldName<TFieldValues>[],\n ): Promise<boolean> => {\n const fields = name || Object.keys(fieldsRef.current);\n\n updateIsValidating();\n\n if (resolverRef.current) {\n return executeSchemaOrResolverValidation(fields);\n }\n\n if (Array.isArray(fields)) {\n !name && (formStateRef.current.errors = {});\n const result = await Promise.all(\n fields.map(async (data) => await executeValidation(data, null)),\n );\n updateFormState({\n isValidating: false,\n });\n return result.every(Boolean);\n }\n\n return await executeValidation(fields);\n },\n [executeSchemaOrResolverValidation, executeValidation],\n );\n\n const setInternalValues = React.useCallback(\n (\n name: FieldName<TFieldValues>,\n value: SetFieldValue<TFieldValues>,\n { shouldDirty, shouldValidate }: SetValueConfig,\n ) => {\n const data = {};\n set(data, name, value);\n\n for (const fieldName of getPath(name, value)) {\n if (fieldsRef.current[fieldName]) {\n setFieldValue(fieldName, get(data, fieldName));\n shouldDirty && updateAndGetDirtyState(fieldName);\n shouldValidate && trigger(fieldName as FieldName<TFieldValues>);\n }\n }\n },\n [trigger, setFieldValue, updateAndGetDirtyState],\n );\n\n const setInternalValue = React.useCallback(\n (\n name: FieldName<TFieldValues>,\n value: SetFieldValue<TFieldValues>,\n config: SetValueConfig,\n ) => {\n !shouldUnregister &&\n !isPrimitive(value) &&\n set(\n shallowFieldsStateRef.current,\n name,\n Array.isArray(value) ? [...value] : { ...value },\n );\n\n if (fieldsRef.current[name]) {\n setFieldValue(name, value);\n config.shouldDirty && updateAndGetDirtyState(name);\n config.shouldValidate && trigger(name as any);\n } else if (!isPrimitive(value)) {\n setInternalValues(name, value, config);\n\n if (fieldArrayNamesRef.current.has(name)) {\n const parentName = getNodeParentName(name) || name;\n set(fieldArrayDefaultValuesRef.current, name, value);\n\n resetFieldArrayFunctionRef.current[parentName]({\n [parentName]: get(fieldArrayDefaultValuesRef.current, parentName),\n } as UnpackNestedValue<DeepPartial<TFieldValues>>);\n\n if (\n (readFormStateRef.current.isDirty ||\n readFormStateRef.current.dirtyFields) &&\n config.shouldDirty\n ) {\n set(\n formStateRef.current.dirtyFields,\n name,\n setFieldArrayDirtyFields(\n value,\n get(defaultValuesRef.current, name, []),\n get(formStateRef.current.dirtyFields, name, []),\n ),\n );\n\n updateFormState({\n isDirty: !deepEqual(\n { ...getValues(), [name]: value },\n defaultValuesRef.current,\n ),\n });\n }\n }\n }\n\n !shouldUnregister && set(shallowFieldsStateRef.current, name, value);\n },\n [updateAndGetDirtyState, setFieldValue, setInternalValues],\n );\n\n const isFieldWatched = <T extends FieldName<TFieldValues>>(name: T) =>\n isWatchAllRef.current ||\n watchFieldsRef.current.has(name) ||\n watchFieldsRef.current.has((name.match(/\\w+/) || [])[0]);\n\n const renderWatchedInputs = <T extends FieldName<FieldValues>>(\n name: T,\n ): boolean => {\n let found = true;\n\n if (!isEmptyObject(useWatchFieldsRef.current)) {\n for (const key in useWatchFieldsRef.current) {\n if (\n !name ||\n !useWatchFieldsRef.current[key].size ||\n useWatchFieldsRef.current[key].has(name) ||\n useWatchFieldsRef.current[key].has(getNodeParentName(name))\n ) {\n useWatchRenderFunctionsRef.current[key]();\n found = false;\n }\n }\n }\n\n return found;\n };\n\n function setValue(\n name: FieldName<TFieldValues>,\n value: SetFieldValue<TFieldValues>,\n config?: SetValueConfig,\n ): void {\n setInternalValue(name, value, config || {});\n isFieldWatched(name) && updateFormState();\n renderWatchedInputs(name);\n }\n\n handleChangeRef.current = handleChangeRef.current\n ? handleChangeRef.current\n : async ({ type, target }: Event): Promise<void | boolean> => {\n let name = (target as Ref)!.name;\n const field = fieldsRef.current[name];\n let error;\n let isValid;\n\n if (field) {\n const isBlurEvent = type === EVENTS.BLUR;\n const shouldSkipValidation = skipValidation({\n isBlurEvent,\n isReValidateOnChange,\n isReValidateOnBlur,\n isTouched: !!get(formStateRef.current.touched, name),\n isSubmitted: formStateRef.current.isSubmitted,\n ...modeRef.current,\n });\n let state = updateAndGetDirtyState(name, false);\n let shouldRender =\n !isEmptyObject(state) ||\n (!isBlurEvent && isFieldWatched(name as FieldName<TFieldValues>));\n\n if (\n isBlurEvent &&\n !get(formStateRef.current.touched, name) &&\n readFormStateRef.current.touched\n ) {\n set(formStateRef.current.touched, name, true);\n state = {\n ...state,\n touched: formStateRef.current.touched,\n };\n }\n\n if (!shouldUnregister && isCheckBoxInput(target as Ref)) {\n set(\n shallowFieldsStateRef.current,\n name,\n getFieldValue(fieldsRef, name),\n );\n }\n\n if (shouldSkipValidation) {\n !isBlurEvent && renderWatchedInputs(name);\n return (\n (!isEmptyObject(state) ||\n (shouldRender && isEmptyObject(state))) &&\n updateFormState(state)\n );\n }\n\n updateIsValidating();\n\n if (resolverRef.current) {\n const { errors } = await resolverRef.current(\n getValues(),\n contextRef.current,\n isValidateAllFieldCriteria,\n );\n const previousFormIsValid = formStateRef.current.isValid;\n error = get(errors, name);\n\n if (\n isCheckBoxInput(target as Ref) &&\n !error &&\n resolverRef.current\n ) {\n const parentNodeName = getNodeParentName(name);\n const currentError = get(errors, parentNodeName, {});\n currentError.type &&\n currentError.message &&\n (error = currentError);\n\n if (\n parentNodeName &&\n (currentError ||\n get(formStateRef.current.errors, parentNodeName))\n ) {\n name = parentNodeName;\n }\n }\n\n isValid = isEmptyObject(errors);\n\n previousFormIsValid !== isValid && (shouldRender = true);\n } else {\n error = (\n await validateField<TFieldValues>(\n fieldsRef,\n isValidateAllFieldCriteria,\n field,\n shallowFieldsStateRef,\n )\n )[name];\n }\n\n !isBlurEvent && renderWatchedInputs(name);\n shouldRenderBaseOnError(name, error, shouldRender, state, isValid);\n }\n };\n\n function setFieldArrayDefaultValues<T extends FieldValues>(data: T): T {\n if (!shouldUnregister) {\n let copy = cloneObject(data);\n\n for (const value of fieldArrayNamesRef.current) {\n if (isKey(value) && !copy[value]) {\n copy = {\n ...copy,\n [value]: [],\n };\n }\n }\n\n return copy;\n }\n return data;\n }\n\n function getValues(): UnpackNestedValue<TFieldValues>;\n function getValues<TFieldName extends string, TFieldValue extends unknown>(\n name: TFieldName,\n ): TFieldName extends keyof TFieldValues\n ? UnpackNestedValue<TFieldValues>[TFieldName]\n : TFieldValue;\n function getValues<TFieldName extends keyof TFieldValues>(\n names: TFieldName[],\n ): UnpackNestedValue<Pick<TFieldValues, TFieldName>>;\n function getValues(payload?: string | string[]): unknown {\n if (isString(payload)) {\n return getFieldValue(fieldsRef, payload, shallowFieldsStateRef);\n }\n\n if (Array.isArray(payload)) {\n const data = {};\n\n for (const name of payload) {\n set(data, name, getFieldValue(fieldsRef, name, shallowFieldsStateRef));\n }\n\n return data;\n }\n\n return setFieldArrayDefaultValues(\n getFieldsValues(\n fieldsRef,\n cloneObject(shallowFieldsStateRef.current),\n shouldUnregister,\n ),\n );\n }\n\n const validateResolver = React.useCallback(\n async (values = {}) => {\n const newDefaultValues = isEmptyObject(fieldsRef.current)\n ? defaultValuesRef.current\n : {};\n\n const { errors } =\n (await resolverRef.current!(\n {\n ...newDefaultValues,\n ...getValues(),\n ...values,\n },\n contextRef.current,\n isValidateAllFieldCriteria,\n )) || {};\n const isValid = isEmptyObject(errors);\n\n formStateRef.current.isValid !== isValid &&\n updateFormState({\n isValid,\n });\n },\n [isValidateAllFieldCriteria],\n );\n\n const removeFieldEventListener = React.useCallback(\n (field: Field, forceDelete?: boolean) => {\n findRemovedFieldAndRemoveListener(\n fieldsRef,\n handleChangeRef.current!,\n field,\n shallowFieldsStateRef,\n shouldUnregister,\n forceDelete,\n );\n\n if (shouldUnregister) {\n unset(validFieldsRef.current, field.ref.name);\n unset(fieldsWithValidationRef.current, field.ref.name);\n }\n },\n [shouldUnregister],\n );\n\n const updateWatchedValue = React.useCallback((name: string) => {\n if (isWatchAllRef.current) {\n updateFormState();\n } else {\n for (const watchField of watchFieldsRef.current) {\n if (watchField.startsWith(name)) {\n updateFormState();\n break;\n }\n }\n\n renderWatchedInputs(name);\n }\n }, []);\n\n const removeFieldEventListenerAndRef = React.useCallback(\n (field?: Field, forceDelete?: boolean) => {\n if (field) {\n removeFieldEventListener(field, forceDelete);\n\n if (shouldUnregister && !compact(field.options || []).length) {\n unset(formStateRef.current.errors, field.ref.name);\n set(formStateRef.current.dirtyFields, field.ref.name, true);\n\n updateFormState({\n isDirty: isFormDirty(),\n });\n\n readFormStateRef.current.isValid &&\n resolverRef.current &&\n validateResolver();\n updateWatchedValue(field.ref.name);\n }\n }\n },\n [validateResolver, removeFieldEventListener],\n );\n\n function clearErrors(\n name?: FieldName<TFieldValues> | FieldName<TFieldValues>[],\n ): void {\n name &&\n (Array.isArray(name) ? name : [name]).forEach((inputName) =>\n fieldsRef.current[inputName] && isKey(inputName)\n ? delete formStateRef.current.errors[inputName]\n : unset(formStateRef.current.errors, inputName),\n );\n\n updateFormState({\n errors: name ? formStateRef.current.errors : {},\n });\n }\n\n function setError(name: FieldName<TFieldValues>, error: ErrorOption) {\n const ref = (fieldsRef.current[name] || {})!.ref;\n\n set(formStateRef.current.errors, name, {\n ...error,\n ref,\n });\n\n updateFormState({\n isValid: false,\n });\n\n error.shouldFocus && ref && ref.focus && ref.focus();\n }\n\n const watchInternal = React.useCallback(\n <T>(fieldNames?: string | string[], defaultValue?: T, watchId?: string) => {\n const watchFields = watchId\n ? useWatchFieldsRef.current[watchId]\n : watchFieldsRef.current;\n let fieldValues = getFieldsValues<TFieldValues>(\n fieldsRef,\n cloneObject(shallowFieldsStateRef.current),\n shouldUnregister,\n false,\n fieldNames,\n );\n\n if (isString(fieldNames)) {\n const parentNodeName = getNodeParentName(fieldNames) || fieldNames;\n\n if (fieldArrayNamesRef.current.has(parentNodeName)) {\n fieldValues = {\n ...fieldArrayValuesRef.current,\n ...fieldValues,\n };\n }\n\n return assignWatchFields<TFieldValues>(\n fieldValues,\n fieldNames,\n watchFields,\n isUndefined(get(defaultValuesRef.current, fieldNames))\n ? defaultValue\n : get(defaultValuesRef.current, fieldNames),\n true,\n );\n }\n\n const combinedDefaultValues = isUndefined(defaultValue)\n ? defaultValuesRef.current\n : defaultValue;\n\n if (Array.isArray(fieldNames)) {\n return fieldNames.reduce(\n (previous, name) => ({\n ...previous,\n [name]: assignWatchFields<TFieldValues>(\n fieldValues,\n name,\n watchFields,\n combinedDefaultValues as UnpackNestedValue<\n DeepPartial<TFieldValues>\n >,\n ),\n }),\n {},\n );\n }\n\n isWatchAllRef.current = isUndefined(watchId);\n\n return transformToNestObject(\n (!isEmptyObject(fieldValues) && fieldValues) ||\n (combinedDefaultValues as FieldValues),\n );\n },\n [],\n );\n\n function watch(): UnpackNestedValue<TFieldValues>;\n function watch<\n TFieldName extends string,\n TFieldValue extends TFieldValues[TFieldName]\n >(\n name?: TFieldName,\n defaultValue?: UnpackNestedValue<LiteralToPrimitive<TFieldValue>>,\n ): UnpackNestedValue<LiteralToPrimitive<TFieldValue>>;\n function watch<TFieldName extends keyof TFieldValues>(\n names: TFieldName[],\n defaultValues?: UnpackNestedValue<\n DeepPartial<Pick<TFieldValues, TFieldName>>\n >,\n ): UnpackNestedValue<Pick<TFieldValues, TFieldName>>;\n function watch(\n names: string[],\n defaultValues?: UnpackNestedValue<DeepPartial<TFieldValues>>,\n ): UnpackNestedValue<DeepPartial<TFieldValues>>;\n function watch(\n fieldNames?: string | string[] | undefined,\n defaultValue?: unknown,\n ): unknown {\n return watchInternal(fieldNames, defaultValue);\n }\n\n function unregister(\n name: FieldName<TFieldValues> | FieldName<TFieldValues>[],\n ): void {\n for (const fieldName of Array.isArray(name) ? name : [name]) {\n removeFieldEventListenerAndRef(fieldsRef.current[fieldName], true);\n }\n }\n\n function registerFieldRef<TFieldElement extends FieldElement<TFieldValues>>(\n ref: TFieldElement & Ref,\n options: RegisterOptions | null = {},\n ): ((name: InternalFieldName<TFieldValues>) => void) | void {\n if (process.env.NODE_ENV !== 'production') {\n if (!ref.name) {\n return console.warn(\n '📋 Field is missing `name` attribute',\n ref,\n `https://react-hook-form.com/api#useForm`,\n );\n }\n\n if (\n fieldArrayNamesRef.current.has(ref.name.split(/\\[\\d+\\]$/)[0]) &&\n !RegExp(\n `^${ref.name.split(/\\[\\d+\\]$/)[0]}[\\\\d+].\\\\w+`\n .replace(/\\[/g, '\\\\[')\n .replace(/\\]/g, '\\\\]'),\n ).test(ref.name)\n ) {\n return console.warn(\n '📋 `name` prop should be in object shape: name=\"test[index].name\"',\n ref,\n 'https://react-hook-form.com/api#useFieldArray',\n );\n }\n }\n\n const { name, type, value } = ref;\n const fieldRefAndValidationOptions = {\n ref,\n ...options,\n };\n const fields = fieldsRef.current;\n const isRadioOrCheckbox = isRadioOrCheckboxFunction(ref);\n const isFieldArray = isNameInFieldArray(fieldArrayNamesRef.current, name);\n const compareRef = (currentRef: Ref) =>\n isWeb && (!isHTMLElement(ref) || currentRef === ref);\n let field = fields[name] as Field;\n let isEmptyDefaultValue = true;\n let defaultValue;\n\n if (\n field &&\n (isRadioOrCheckbox\n ? Array.isArray(field.options) &&\n compact(field.options).find((option) => {\n return value === option.ref.value && compareRef(option.ref);\n })\n : compareRef(field.ref))\n ) {\n fields[name] = {\n ...field,\n ...options,\n };\n return;\n }\n\n if (type) {\n field = isRadioOrCheckbox\n ? {\n options: [\n ...compact((field && field.options) || []),\n {\n ref,\n } as RadioOrCheckboxOption,\n ],\n ref: { type, name },\n ...options,\n }\n : {\n ...fieldRefAndValidationOptions,\n };\n } else {\n field = fieldRefAndValidationOptions;\n }\n\n fields[name] = field;\n\n const isEmptyUnmountFields = isUndefined(\n get(shallowFieldsStateRef.current, name),\n );\n\n if (!isEmptyObject(defaultValuesRef.current) || !isEmptyUnmountFields) {\n defaultValue = get(\n isEmptyUnmountFields\n ? defaultValuesRef.current\n : shallowFieldsStateRef.current,\n name,\n );\n isEmptyDefaultValue = isUndefined(defaultValue);\n\n if (!isEmptyDefaultValue && !isFieldArray) {\n setFieldValue(name as FieldName<TFieldValues>, defaultValue);\n }\n }\n\n if (!isEmptyObject(options)) {\n set(fieldsWithValidationRef.current, name, true);\n\n if (!isOnSubmit && readFormStateRef.current.isValid) {\n validateField(\n fieldsRef,\n isValidateAllFieldCriteria,\n field,\n shallowFieldsStateRef,\n ).then((error: FieldErrors) => {\n const previousFormIsValid = formStateRef.current.isValid;\n\n isEmptyObject(error)\n ? set(validFieldsRef.current, name, true)\n : unset(validFieldsRef.current, name);\n\n previousFormIsValid !== isEmptyObject(error) && updateFormState();\n });\n }\n }\n\n if (shouldUnregister && !(isFieldArray && isEmptyDefaultValue)) {\n !isFieldArray && unset(formStateRef.current.dirtyFields, name);\n }\n\n if (type) {\n attachEventListeners(\n isRadioOrCheckbox && field.options\n ? field.options[field.options.length - 1]\n : field,\n isRadioOrCheckbox || isSelectInput(ref),\n handleChangeRef.current,\n );\n }\n }\n\n function register<TFieldElement extends FieldElement<TFieldValues>>(\n options?: RegisterOptions,\n ): (ref: (TFieldElement & Ref) | null) => void;\n function register(\n name: FieldName<TFieldValues>,\n options?: RegisterOptions,\n ): void;\n function register<TFieldElement extends FieldElement<TFieldValues>>(\n ref: (TFieldElement & Ref) | null,\n options?: RegisterOptions,\n ): void;\n function register<TFieldElement extends FieldElement<TFieldValues>>(\n refOrRegisterOptions?:\n | FieldName<TFieldValues>\n | RegisterOptions\n | (TFieldElement & Ref)\n | null,\n options?: RegisterOptions,\n ): ((ref: (TFieldElement & Ref) | null) => void) | void {\n if (!isWindowUndefined) {\n if (isString(refOrRegisterOptions)) {\n registerFieldRef({ name: refOrRegisterOptions }, options);\n } else if (\n isObject(refOrRegisterOptions) &&\n 'name' in refOrRegisterOptions\n ) {\n registerFieldRef(refOrRegisterOptions, options);\n } else {\n return (ref: (TFieldElement & Ref) | null) =>\n ref && registerFieldRef(ref, refOrRegisterOptions);\n }\n }\n }\n\n const handleSubmit = React.useCallback(\n <TSubmitFieldValues extends FieldValues = TFieldValues>(\n onValid: SubmitHandler<TSubmitFieldValues>,\n onInvalid?: SubmitErrorHandler<TFieldValues>,\n ) => async (e?: React.BaseSyntheticEvent): Promise<void> => {\n if (e && e.preventDefault) {\n e.preventDefault();\n e.persist();\n }\n let fieldErrors: FieldErrors<TFieldValues> = {};\n let fieldValues = setFieldArrayDefaultValues(\n getFieldsValues(\n fieldsRef,\n cloneObject(shallowFieldsStateRef.current),\n shouldUnregister,\n true,\n ),\n );\n\n readFormStateRef.current.isSubmitting &&\n updateFormState({\n isSubmitting: true,\n });\n\n try {\n if (resolverRef.current) {\n const { errors, values } = await resolverRef.current(\n fieldValues,\n contextRef.current,\n isValidateAllFieldCriteria,\n );\n formStateRef.current.errors = fieldErrors = errors;\n fieldValues = values;\n } else {\n for (const field of Object.values(fieldsRef.current)) {\n if (field) {\n const { name } = field.ref;\n\n const fieldError = await validateField(\n fieldsRef,\n isValidateAllFieldCriteria,\n field,\n shallowFieldsStateRef,\n );\n\n if (fieldError[name]) {\n set(fieldErrors, name, fieldError[name]);\n unset(validFieldsRef.current, name);\n } else if (get(fieldsWithValidationRef.current, name)) {\n unset(formStateRef.current.errors, name);\n set(validFieldsRef.current, name, true);\n }\n }\n }\n }\n\n if (\n isEmptyObject(fieldErrors) &&\n Object.keys(formStateRef.current.errors).every(\n (name) => name in fieldsRef.current,\n )\n ) {\n updateFormState({\n errors: {},\n isSubmitting: true,\n });\n await onValid(fieldValues, e);\n } else {\n formStateRef.current.errors = {\n ...formStateRef.current.errors,\n ...fieldErrors,\n };\n onInvalid && (await onInvalid(formStateRef.current.errors, e));\n shouldFocusError &&\n focusOnErrorField(fieldsRef.current, formStateRef.current.errors);\n }\n } finally {\n formStateRef.current.isSubmitting = false;\n updateFormState({\n isSubmitted: true,\n isSubmitting: false,\n isSubmitSuccessful: isEmptyObject(formStateRef.current.errors),\n submitCount: formStateRef.current.submitCount + 1,\n });\n }\n },\n [shouldFocusError, isValidateAllFieldCriteria],\n );\n\n const resetRefs = ({\n errors,\n isDirty,\n isSubmitted,\n touched,\n isValid,\n submitCount,\n dirtyFields,\n }: OmitResetState) => {\n if (!isValid) {\n validFieldsRef.current = {};\n fieldsWithValidationRef.current = {};\n }\n\n fieldArrayDefaultValuesRef.current = {};\n watchFieldsRef.current = new Set();\n isWatchAllRef.current = false;\n\n updateFormState({\n submitCount: submitCount ? formStateRef.current.submitCount : 0,\n isDirty: isDirty ? formStateRef.current.isDirty : false,\n isSubmitted: isSubmitted ? formStateRef.current.isSubmitted : false,\n isValid: isValid ? formStateRef.current.isValid : false,\n dirtyFields: dirtyFields ? formStateRef.current.dirtyFields : {},\n touched: touched ? formStateRef.current.touched : {},\n errors: errors ? formStateRef.current.errors : {},\n isSubmitting: false,\n isSubmitSuccessful: false,\n });\n };\n\n const reset = (\n values?: DefaultValues<TFieldValues>,\n omitResetState: OmitResetState = {},\n ): void => {\n if (isWeb) {\n for (const field of Object.values(fieldsRef.current)) {\n if (field) {\n const { ref, options } = field;\n const inputRef =\n isRadioOrCheckboxFunction(ref) && Array.isArray(options)\n ? options[0].ref\n : ref;\n\n if (isHTMLElement(inputRef)) {\n try {\n inputRef.closest('form')!.reset();\n break;\n } catch {}\n }\n }\n }\n }\n\n fieldsRef.current = {};\n defaultValuesRef.current = { ...(values || defaultValuesRef.current) };\n values && renderWatchedInputs('');\n\n Object.values(resetFieldArrayFunctionRef.current).forEach(\n (resetFieldArray) => isFunction(resetFieldArray) && resetFieldArray(),\n );\n\n shallowFieldsStateRef.current = shouldUnregister\n ? {}\n : cloneObject(values || defaultValuesRef.current);\n\n resetRefs(omitResetState);\n };\n\n React.useEffect(() => {\n resolver && readFormStateRef.current.isValid && validateResolver();\n observerRef.current =\n observerRef.current || !isWeb\n ? observerRef.current\n : onDomRemove(fieldsRef, removeFieldEventListenerAndRef);\n }, [removeFieldEventListenerAndRef, defaultValuesRef.current]);\n\n React.useEffect(\n () => () => {\n observerRef.current && observerRef.current.disconnect();\n isUnMount.current = true;\n\n if (process.env.NODE_ENV !== 'production') {\n return;\n }\n\n Object.values(fieldsRef.current).forEach((field) =>\n removeFieldEventListenerAndRef(field, true),\n );\n },\n [],\n );\n\n if (!resolver && readFormStateRef.current.isValid) {\n formState.isValid =\n deepEqual(validFieldsRef.current, fieldsWithValidationRef.current) &&\n isEmptyObject(formStateRef.current.errors);\n }\n\n const commonProps = {\n trigger,\n setValue: React.useCallback(setValue, [setInternalValue, trigger]),\n getValues: React.useCallback(getValues, []),\n register: React.useCallback(register, [defaultValuesRef.current]),\n unregister: React.useCallback(unregister, []),\n formState: isProxyEnabled\n ? new Proxy(formState, {\n get: (obj, prop: keyof FormStateProxy) => {\n if (process.env.NODE_ENV !== 'production') {\n if (prop === 'isValid' && isOnSubmit) {\n console.warn(\n '📋 `formState.isValid` is applicable with `onTouched`, `onChange` or `onBlur` mode. https://react-hook-form.com/api#formState',\n );\n }\n }\n\n if (prop in obj) {\n readFormStateRef.current[prop] = true;\n return obj[prop];\n }\n\n return undefined;\n },\n })\n : formState,\n };\n\n const control = React.useMemo(\n () => ({\n isFormDirty,\n updateWatchedValue,\n shouldUnregister,\n updateFormState,\n removeFieldEventListener,\n watchInternal,\n mode: modeRef.current,\n reValidateMode: {\n isReValidateOnBlur,\n isReValidateOnChange,\n },\n validateResolver: resolver ? validateResolver : undefined,\n fieldsRef,\n resetFieldArrayFunctionRef,\n useWatchFieldsRef,\n useWatchRenderFunctionsRef,\n fieldArrayDefaultValuesRef,\n validFieldsRef,\n fieldsWithValidationRef,\n fieldArrayNamesRef,\n readFormStateRef,\n formStateRef,\n defaultValuesRef,\n shallowFieldsStateRef,\n fieldArrayValuesRef,\n ...commonProps,\n }),\n [\n defaultValuesRef.current,\n updateWatchedValue,\n shouldUnregister,\n removeFieldEventListener,\n watchInternal,\n ],\n );\n\n return {\n watch,\n control,\n handleSubmit,\n reset: React.useCallback(reset, []),\n clearErrors: React.useCallback(clearErrors, []),\n setError: React.useCallback(setError, []),\n errors: formState.errors,\n ...commonProps,\n };\n}\n","import * as React from 'react';\nimport { UseFormMethods, FieldValues, FormProviderProps } from './types';\n\nconst FormContext = React.createContext<UseFormMethods | null>(null);\n\nFormContext.displayName = 'RHFContext';\n\nexport const useFormContext = <\n TFieldValues extends FieldValues\n>(): UseFormMethods<TFieldValues> =>\n React.useContext(FormContext) as UseFormMethods<TFieldValues>;\n\nexport const FormProvider = <TFieldValues extends FieldValues>({\n children,\n ...props\n}: FormProviderProps<TFieldValues>) => (\n <FormContext.Provider value={{ ...props } as UseFormMethods}>\n {children}\n </FormContext.Provider>\n);\n","import { UNDEFINED } from '../constants';\n\nexport default () => {\n const d =\n typeof performance === UNDEFINED ? Date.now() : performance.now() * 1000;\n\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16 + d) % 16 | 0;\n\n return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);\n });\n};\n","import isUndefined from './isUndefined';\nimport compact from './compact';\n\nfunction removeAtIndexes<T>(data: T[], indexes: number[]): T[] {\n let i = 0;\n const temp = [...data];\n\n for (const index of indexes) {\n temp.splice(index - i, 1);\n i++;\n }\n\n return compact(temp).length ? temp : [];\n}\n\nexport default <T>(data: T[], index?: number | number[]): T[] =>\n isUndefined(index)\n ? []\n : removeAtIndexes(\n data,\n (Array.isArray(index) ? index : [index]).sort((a, b) => a - b),\n );\n","import isUndefined from './isUndefined';\n\nexport default <T>(\n data: (T | undefined)[],\n from: number,\n to: number,\n): (T | undefined)[] => {\n if (Array.isArray(data)) {\n if (isUndefined(data[to])) {\n data[to] = undefined;\n }\n data.splice(to, 0, data.splice(from, 1)[0]);\n return data;\n }\n\n return [];\n};\n","export default <T>(data: T[], indexA: number, indexB: number): void => {\n const temp = [data[indexB], data[indexA]];\n data[indexA] = temp[0];\n data[indexB] = temp[1];\n};\n","export default function prepend<T>(data: T[]): (T | undefined)[];\nexport default function prepend<T>(data: T[], value: T | T[]): T[];\nexport default function prepend<T>(\n data: T[],\n value?: T | T[],\n): (T | undefined)[] {\n return [...(Array.isArray(value) ? value : [value || undefined]), ...data];\n}\n","export default function insert<T>(data: T[], index: number): (T | undefined)[];\nexport default function insert<T>(\n data: T[],\n index: number,\n value: T | T[],\n): T[];\nexport default function insert<T>(\n data: T[],\n index: number,\n value?: T | T[],\n): (T | undefined)[] {\n return [\n ...data.slice(0, index),\n ...(Array.isArray(value) ? value : [value || undefined]),\n ...data.slice(index),\n ];\n}\n","export default <T>(value: T | T[]): undefined[] | undefined =>\n Array.isArray(value) ? Array(value.length).fill(undefined) : undefined;\n","import isObject from './isObject';\n\nexport default <T>(value: T) =>\n ((Array.isArray(value) ? value : [value]) as T[]).map((data) => {\n if (isObject(data)) {\n const object: Record<string, boolean> = {};\n\n for (const key in data) {\n object[key] = true;\n }\n\n return object;\n }\n\n return true;\n });\n","import * as React from 'react';\nimport { useFormContext } from './useFormContext';\nimport setFieldArrayDirtyFields from './logic/setFieldArrayDirtyFields';\nimport { isMatchFieldArrayName } from './logic/isNameInFieldArray';\nimport generateId from './logic/generateId';\nimport getFieldArrayParentName from './logic/getNodeParentName';\nimport get from './utils/get';\nimport set from './utils/set';\nimport removeArrayAt from './utils/remove';\nimport unset from './utils/unset';\nimport moveArrayAt from './utils/move';\nimport swapArrayAt from './utils/swap';\nimport prependAt from './utils/prepend';\nimport insertAt from './utils/insert';\nimport fillEmptyArray from './utils/fillEmptyArray';\nimport fillBooleanArray from './utils/fillBooleanArray';\nimport compact from './utils/compact';\nimport cloneObject from './utils/cloneObject';\nimport {\n Field,\n FieldValues,\n UseFieldArrayOptions,\n Control,\n ArrayField,\n UnpackNestedValue,\n DeepPartial,\n UseFieldArrayMethods,\n} from './types';\n\nconst mapIds = <\n TFieldArrayValues extends FieldValues = FieldValues,\n TKeyName extends string = 'id'\n>(\n values: Partial<TFieldArrayValues>[] = [],\n keyName: TKeyName,\n skipWarn?: boolean,\n): Partial<ArrayField<TFieldArrayValues, TKeyName>>[] => {\n if (process.env.NODE_ENV !== 'production') {\n if (!skipWarn) {\n for (const value of values) {\n if (typeof value === 'object') {\n if (keyName in value) {\n console.warn(\n `📋 useFieldArray fieldValues contain the keyName \\`${keyName}\\` which is reserved for use by useFieldArray. https://react-hook-form.com/api#useFieldArray`,\n );\n\n break;\n }\n } else {\n console.warn(\n `📋 useFieldArray input's name should be in object shape instead of flat array. https://react-hook-form.com/api#useFieldArray`,\n );\n\n break;\n }\n }\n }\n }\n\n return values.map((value: Partial<TFieldArrayValues>) => ({\n [keyName]: value[keyName] || generateId(),\n ...value,\n }));\n};\n\nexport const useFieldArray = <\n TFieldArrayValues extends FieldValues = FieldValues,\n TKeyName extends string = 'id',\n TControl extends Control = Control\n>({\n control,\n name,\n keyName = 'id' as TKeyName,\n}: UseFieldArrayOptions<TKeyName, TControl>): UseFieldArrayMethods<\n TFieldArrayValues,\n TKeyName\n> => {\n const methods = useFormContext();\n\n if (process.env.NODE_ENV !== 'production') {\n if (!control && !methods) {\n throw new Error(\n '📋 useFieldArray is missing `control` prop. https://react-hook-form.com/api#useFieldArray',\n );\n }\n }\n\n const focusIndexRef = React.useRef(-1);\n const isUnMount = React.useRef(false);\n const {\n isFormDirty,\n updateWatchedValue,\n resetFieldArrayFunctionRef,\n fieldArrayNamesRef,\n fieldsRef,\n defaultValuesRef,\n removeFieldEventListener,\n formStateRef,\n shallowFieldsStateRef,\n updateFormState,\n readFormStateRef,\n validFieldsRef,\n fieldsWithValidationRef,\n fieldArrayDefaultValuesRef,\n validateResolver,\n getValues,\n shouldUnregister,\n fieldArrayValuesRef,\n } = control || methods.control;\n\n const getDefaultValues = <T>(values: T) =>\n get(shouldUnregister ? values : shallowFieldsStateRef.current, name, []);\n\n const fieldArrayParentName = getFieldArrayParentName(name);\n const memoizedDefaultValues = React.useRef<Partial<TFieldArrayValues>[]>([\n ...(get(fieldArrayDefaultValuesRef.current, fieldArrayParentName)\n ? getDefaultValues(fieldArrayDefaultValuesRef.current)\n : getDefaultValues(defaultValuesRef.current)),\n ]);\n const [fields, setFields] = React.useState<\n Partial<ArrayField<TFieldArrayValues, TKeyName>>[]\n >(mapIds(memoizedDefaultValues.current, keyName));\n set(fieldArrayValuesRef.current, name, fields);\n\n const omitKey = <T extends (Partial<TFieldArrayValues> | undefined)[]>(\n fields: T,\n ) => fields.map(({ [keyName]: omitted, ...rest } = {}) => rest);\n\n fieldArrayNamesRef.current.add(name);\n\n const getFieldArrayValue = React.useCallback(\n () => get(fieldArrayValuesRef.current, name, []),\n [name],\n );\n\n const getCurrentFieldsValues = () =>\n mapIds<TFieldArrayValues, TKeyName>(\n get(getValues(), name, getFieldArrayValue()).map(\n (item: Partial<TFieldArrayValues>, index: number) => ({\n ...getFieldArrayValue()[index],\n ...item,\n }),\n ),\n keyName,\n true,\n );\n\n fieldArrayNamesRef.current.add(name);\n\n if (\n fieldArrayParentName &&\n !get(fieldArrayDefaultValuesRef.current, fieldArrayParentName)\n ) {\n set(\n fieldArrayDefaultValuesRef.current,\n fieldArrayParentName,\n cloneObject(get(defaultValuesRef.current, fieldArrayParentName)),\n );\n }\n\n const setFieldAndValidState = (\n fieldsValues: Partial<ArrayField<TFieldArrayValues, TKeyName>>[],\n ) => {\n setFields(fieldsValues);\n set(fieldArrayValuesRef.current, name, fieldsValues);\n\n if (readFormStateRef.current.isValid && validateResolver) {\n const values = getValues();\n set(values, name, fieldsValues);\n validateResolver(values);\n }\n };\n\n const resetFields = () => {\n for (const key in fieldsRef.current) {\n if (isMatchFieldArrayName(key, name)) {\n removeFieldEventListener(fieldsRef.current[key] as Field, true);\n delete fieldsRef.current[key];\n }\n }\n };\n\n const cleanup = <T>(ref: T) =>\n !compact(get(ref, name, [])).length && unset(ref, name);\n\n const updateDirtyFieldsWithDefaultValues = <\n T extends (Partial<TFieldArrayValues> | undefined)[]\n >(\n updatedFieldArrayValues?: T,\n ) => {\n if (updatedFieldArrayValues) {\n set(\n formStateRef.current.dirtyFields,\n name,\n setFieldArrayDirtyFields(\n omitKey(updatedFieldArrayValues),\n get(defaultValuesRef.current, name, []),\n get(formStateRef.current.dirtyFields, name, []),\n ),\n );\n }\n };\n\n const batchStateUpdate = <\n T extends Function,\n K extends (Partial<TFieldArrayValues> | undefined)[]\n >(\n method: T,\n args: {\n argA?: unknown;\n argB?: unknown;\n argC?: unknown;\n argD?: unknown;\n },\n updatedFieldValues?: K,\n updatedFormValues: (Partial<TFieldArrayValues> | undefined)[] = [],\n shouldSet = true,\n shouldUpdateValid = false,\n ) => {\n if (get(shallowFieldsStateRef.current, name)) {\n const output = method(\n get(shallowFieldsStateRef.current, name),\n args.argA,\n args.argB,\n );\n shouldSet && set(shallowFieldsStateRef.current, name, output);\n }\n\n if (get(fieldArrayDefaultValuesRef.current, name)) {\n const output = method(\n get(fieldArrayDefaultValuesRef.current, name),\n args.argA,\n args.argB,\n );\n shouldSet && set(fieldArrayDefaultValuesRef.current, name, output);\n }\n\n if (Array.isArray(get(formStateRef.current.errors, name))) {\n const output = method(\n get(formStateRef.current.errors, name),\n args.argA,\n args.argB,\n );\n shouldSet && set(formStateRef.current.errors, name, output);\n cleanup(formStateRef.current.errors);\n }\n\n if (\n readFormStateRef.current.touched &&\n get(formStateRef.current.touched, name)\n ) {\n const output = method(\n get(formStateRef.current.touched, name),\n args.argA,\n args.argB,\n );\n shouldSet && set(formStateRef.current.touched, name, output);\n cleanup(formStateRef.current.touched);\n }\n\n if (\n readFormStateRef.current.dirtyFields ||\n readFormStateRef.current.isDirty\n ) {\n set(\n formStateRef.current.dirtyFields,\n name,\n setFieldArrayDirtyFields(\n omitKey(updatedFormValues),\n get(defaultValuesRef.current, name, []),\n get(formStateRef.current.dirtyFields, name, []),\n ),\n );\n updateDirtyFieldsWithDefaultValues(updatedFieldValues);\n cleanup(formStateRef.current.dirtyFields);\n }\n\n if (\n shouldUpdateValid &&\n readFormStateRef.current.isValid &&\n !validateResolver\n ) {\n set(\n validFieldsRef.current,\n name,\n method(get(validFieldsRef.current, name, []), args.argA),\n );\n cleanup(validFieldsRef.current);\n\n set(\n fieldsWithValidationRef.current,\n name,\n method(get(fieldsWithValidationRef.current, name, []), args.argA),\n );\n cleanup(fieldsWithValidationRef.current);\n }\n\n if (!isUnMount.current && readFormStateRef.current.isDirty) {\n updateFormState({\n isDirty: isFormDirty(name, omitKey(updatedFormValues)),\n });\n }\n };\n\n const append = (\n value: Partial<TFieldArrayValues> | Partial<TFieldArrayValues>[],\n shouldFocus = true,\n ) => {\n const appendValue = Array.isArray(value) ? value : [value];\n const updateFormValues = [\n ...getCurrentFieldsValues(),\n ...mapIds(appendValue, keyName),\n ];\n setFieldAndValidState(updateFormValues);\n\n if (\n readFormStateRef.current.dirtyFields ||\n readFormStateRef.current.isDirty\n ) {\n updateDirtyFieldsWithDefaultValues(updateFormValues);\n\n updateFormState({\n isDirty: true,\n dirtyFields: formStateRef.current.dirtyFields,\n });\n }\n\n !shouldUnregister &&\n set(shallowFieldsStateRef.current, name, [\n ...(get(shallowFieldsStateRef.current, name) || []),\n ...cloneObject(appendValue),\n ]);\n\n focusIndexRef.current = shouldFocus\n ? get(fieldArrayValuesRef.current, name).length - 1\n : -1;\n };\n\n const prepend = (\n value: Partial<TFieldArrayValues> | Partial<TFieldArrayValues>[],\n shouldFocus = true,\n ) => {\n const emptyArray = fillEmptyArray(value);\n const updatedFieldArrayValues = prependAt(\n getCurrentFieldsValues(),\n mapIds(Array.isArray(value) ? value : [value], keyName),\n );\n\n setFieldAndValidState(updatedFieldArrayValues);\n resetFields();\n batchStateUpdate(\n prependAt,\n {\n argA: emptyArray,\n argC: fillBooleanArray(value),\n },\n updatedFieldArrayValues,\n );\n focusIndexRef.current = shouldFocus ? 0 : -1;\n };\n\n const remove = (index?: number | number[]) => {\n const fieldValues = getCurrentFieldsValues();\n const updatedFieldValues: (\n | Partial<TFieldArrayValues>\n | undefined\n )[] = removeArrayAt(fieldValues, index);\n setFieldAndValidState(\n updatedFieldValues as Partial<ArrayField<TFieldArrayValues, TKeyName>>[],\n );\n resetFields();\n batchStateUpdate(\n removeArrayAt,\n {\n argA: index,\n argC: index,\n },\n updatedFieldValues,\n removeArrayAt(fieldValues, index),\n true,\n true,\n );\n };\n\n const insert = (\n index: number,\n value: Partial<TFieldArrayValues> | Partial<TFieldArrayValues>[],\n shouldFocus = true,\n ) => {\n const emptyArray = fillEmptyArray(value);\n const fieldValues = getCurrentFieldsValues();\n const updatedFieldArrayValues = insertAt(\n fieldValues,\n index,\n mapIds(Array.isArray(value) ? value : [value], keyName),\n );\n\n setFieldAndValidState(updatedFieldArrayValues);\n resetFields();\n batchStateUpdate(\n insertAt,\n {\n argA: index,\n argB: emptyArray,\n argC: index,\n argD: fillBooleanArray(value),\n },\n updatedFieldArrayValues,\n insertAt(fieldValues, index),\n );\n focusIndexRef.current = shouldFocus ? index : -1;\n };\n\n const swap = (indexA: number, indexB: number) => {\n const fieldValues = getCurrentFieldsValues();\n swapArrayAt(fieldValues, indexA, indexB);\n resetFields();\n setFieldAndValidState([...fieldValues]);\n batchStateUpdate(\n swapArrayAt,\n {\n argA: indexA,\n argB: indexB,\n argC: indexA,\n argD: indexB,\n },\n undefined,\n fieldValues,\n false,\n );\n };\n\n const move = (from: number, to: number) => {\n const fieldValues = getCurrentFieldsValues();\n moveArrayAt(fieldValues, from, to);\n resetFields();\n setFieldAndValidState([...fieldValues]);\n batchStateUpdate(\n moveArrayAt,\n {\n argA: from,\n argB: to,\n argC: from,\n argD: to,\n },\n undefined,\n fieldValues,\n false,\n );\n };\n\n React.useEffect(() => {\n if (process.env.NODE_ENV !== 'production') {\n if (!name) {\n console.warn(\n '📋 useFieldArray is missing `name` attribute. https://react-hook-form.com/api#useFieldArray',\n );\n }\n }\n\n const defaultValues = get(fieldArrayDefaultValuesRef.current, name);\n\n if (defaultValues && fields.length < defaultValues.length) {\n set(fieldArrayDefaultValuesRef.current, name, defaultValues.slice(1));\n }\n\n updateWatchedValue(name);\n\n if (focusIndexRef.current > -1) {\n for (const key in fieldsRef.current) {\n const field = fieldsRef.current[key];\n if (\n key.startsWith(`${name}[${focusIndexRef.current}]`) &&\n field!.ref.focus\n ) {\n field!.ref.focus();\n break;\n }\n }\n }\n\n focusIndexRef.current = -1;\n }, [fields, name]);\n\n React.useEffect(() => {\n const resetFunctions = resetFieldArrayFunctionRef.current;\n const fieldArrayNames = fieldArrayNamesRef.current;\n\n if (!getFieldArrayParentName(name)) {\n resetFunctions[name] = <TFieldValues>(\n data?: UnpackNestedValue<DeepPartial<TFieldValues>>,\n ) => {\n resetFields();\n !data && unset(fieldArrayDefaultValuesRef.current, name);\n unset(shallowFieldsStateRef.current, name);\n memoizedDefaultValues.current = get(\n data || defaultValuesRef.current,\n name,\n );\n if (!isUnMount.current) {\n setFields(mapIds(memoizedDefaultValues.current, keyName));\n }\n };\n }\n\n return () => {\n isUnMount.current = true;\n shouldUnregister && remove();\n resetFields();\n delete resetFunctions[name];\n unset(fieldArrayValuesRef.current, name);\n fieldArrayNames.delete(name);\n };\n }, []);\n\n return {\n swap: React.useCallback(swap, [name]),\n move: React.useCallback(move, [name]),\n prepend: React.useCallback(prepend, [name]),\n append: React.useCallback(append, [name]),\n remove: React.useCallback(remove, [name]),\n insert: React.useCallback(insert, [name]),\n fields,\n };\n};\n","import { useFormContext } from './useFormContext';\nimport isNameInFieldArray from './logic/isNameInFieldArray';\nimport isUndefined from './utils/isUndefined';\nimport get from './utils/get';\nimport * as React from 'react';\nimport isFunction from './utils/isFunction';\nimport skipValidation from './logic/skipValidation';\nimport getInputValue from './logic/getInputValue';\nimport set from './utils/set';\nimport {\n FieldValues,\n UseControllerOptions,\n UseControllerMethods,\n} from './types';\n\nexport function useController<TFieldValues extends FieldValues = FieldValues>({\n name,\n rules,\n defaultValue,\n control,\n onFocus,\n}: UseControllerOptions<TFieldValues>): UseControllerMethods<TFieldValues> {\n const methods = useFormContext<TFieldValues>();\n\n if (process.env.NODE_ENV !== 'production') {\n if (!control && !methods) {\n throw new Error(\n '📋 Controller is missing `control` prop. https://react-hook-form.com/api#Controller',\n );\n }\n }\n\n const {\n defaultValuesRef,\n setValue,\n register,\n unregister,\n trigger,\n mode,\n reValidateMode: { isReValidateOnBlur, isReValidateOnChange },\n formState,\n formStateRef: {\n current: { isSubmitted, touched, errors },\n },\n updateFormState,\n readFormStateRef,\n fieldsRef,\n fieldArrayNamesRef,\n shallowFieldsStateRef,\n } = control || methods.control;\n\n const isNotFieldArray = !isNameInFieldArray(fieldArrayNamesRef.current, name);\n const getInitialValue = () =>\n !isUndefined(get(shallowFieldsStateRef.current, name)) && isNotFieldArray\n ? get(shallowFieldsStateRef.current, name)\n : isUndefined(defaultValue)\n ? get(defaultValuesRef.current, name)\n : defaultValue;\n const [value, setInputStateValue] = React.useState(getInitialValue());\n const valueRef = React.useRef(value);\n const ref = React.useRef({\n focus: () => null,\n });\n const onFocusRef = React.useRef(\n onFocus ||\n (() => {\n if (isFunction(ref.current.focus)) {\n ref.current.focus();\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (!isFunction(ref.current.focus)) {\n console.warn(\n `📋 'ref' from Controller render prop must be attached to a React component or a DOM Element whose ref provides a 'focus()' method`,\n );\n }\n }\n }),\n );\n\n const shouldValidate = React.useCallback(\n (isBlurEvent?: boolean) =>\n !skipValidation({\n isBlurEvent,\n isReValidateOnBlur,\n isReValidateOnChange,\n isSubmitted,\n isTouched: !!get(touched, name),\n ...mode,\n }),\n [\n isReValidateOnBlur,\n isReValidateOnChange,\n isSubmitted,\n touched,\n name,\n mode,\n ],\n );\n\n const commonTask = React.useCallback(([event]: any[]) => {\n const data = getInputValue(event);\n setInputStateValue(data);\n valueRef.current = data;\n return data;\n }, []);\n\n const registerField = React.useCallback(\n (shouldUpdateValue?: boolean) => {\n if (process.env.NODE_ENV !== 'production') {\n if (!name) {\n return console.warn(\n '📋 Field is missing `name` prop. https://react-hook-form.com/api#Controller',\n );\n }\n }\n\n if (fieldsRef.current[name]) {\n fieldsRef.current[name] = {\n ref: fieldsRef.current[name]!.ref,\n ...rules,\n };\n } else {\n register(\n Object.defineProperties(\n {\n name,\n focus: onFocusRef.current,\n },\n {\n value: {\n set(data) {\n setInputStateValue(data);\n valueRef.current = data;\n },\n get() {\n return valueRef.current;\n },\n },\n },\n ),\n rules,\n );\n\n shouldUpdateValue = isUndefined(get(defaultValuesRef.current, name));\n }\n\n shouldUpdateValue &&\n isNotFieldArray &&\n setInputStateValue(getInitialValue());\n },\n [rules, name, register],\n );\n\n React.useEffect(() => () => unregister(name), [name]);\n\n React.useEffect(() => {\n if (process.env.NODE_ENV !== 'production') {\n if (isUndefined(value)) {\n console.warn(\n `📋 ${name} is missing in the 'defaultValue' prop of either its Controller (https://react-hook-form.com/api#Controller) or useForm (https://react-hook-form.com/api#useForm)`,\n );\n }\n\n if (!isNotFieldArray && isUndefined(defaultValue)) {\n console.warn(\n '📋 Controller is missing `defaultValue` prop when using `useFieldArray`. https://react-hook-form.com/api#Controller',\n );\n }\n }\n\n registerField();\n }, [registerField]);\n\n React.useEffect(() => {\n !fieldsRef.current[name] && registerField(true);\n });\n\n const onBlur = React.useCallback(() => {\n if (readFormStateRef.current.touched && !get(touched, name)) {\n set(touched, name, true);\n updateFormState({\n touched,\n });\n }\n\n shouldValidate(true) && trigger(name);\n }, [name, updateFormState, shouldValidate, trigger, readFormStateRef]);\n\n const onChange = React.useCallback(\n (...event: any[]) =>\n setValue(name, commonTask(event), {\n shouldValidate: shouldValidate(),\n shouldDirty: true,\n }),\n [setValue, name, shouldValidate],\n );\n\n return {\n field: {\n onChange,\n onBlur,\n name,\n value,\n ref,\n },\n meta: Object.defineProperties(\n {\n invalid: !!get(errors, name),\n },\n {\n isDirty: {\n get() {\n return !!get(formState.dirtyFields, name);\n },\n },\n isTouched: {\n get() {\n return !!get(formState.touched, name);\n },\n },\n },\n ),\n };\n}\n","import isUndefined from '../utils/isUndefined';\nimport isObject from '../utils/isObject';\nimport isPrimitive from '../utils/isPrimitive';\n\nexport default (event: any) =>\n isPrimitive(event) ||\n !isObject(event.target) ||\n (isObject(event.target) && !event.type)\n ? event\n : isUndefined(event.target.value)\n ? event.target.checked\n : event.target.value;\n","import * as React from 'react';\nimport { useController } from './useController';\nimport { ControllerProps, FieldValues } from './types';\n\ntype NativeInputs = 'input' | 'select' | 'textarea';\n\nconst Controller = <\n TAs extends React.ReactElement | React.ComponentType<any> | NativeInputs,\n TFieldValues extends FieldValues = FieldValues\n>(\n props: ControllerProps<TAs, TFieldValues>,\n) => {\n const { rules, as, render, defaultValue, control, onFocus, ...rest } = props;\n const { field, meta } = useController(props);\n\n const componentProps = {\n ...rest,\n ...field,\n };\n\n return as\n ? React.isValidElement(as)\n ? React.cloneElement(as, componentProps)\n : React.createElement(as as NativeInputs, componentProps as any)\n : render\n ? render(field, meta)\n : null;\n};\n\nexport { Controller };\n","import get from '../utils/get';\nimport isUndefined from '../utils/isUndefined';\nimport deepEqual from '../utils/deepEqual';\nimport {\n FieldValues,\n InternalFieldName,\n FieldErrors,\n FieldNamesMarkedBoolean,\n FieldError,\n} from '../types';\n\nexport default <TFieldValues extends FieldValues>({\n errors,\n name,\n error,\n validFields,\n fieldsWithValidation,\n}: {\n errors: FieldErrors<TFieldValues>;\n error: FieldError | undefined;\n name: InternalFieldName<TFieldValues>;\n validFields: FieldNamesMarkedBoolean<TFieldValues>;\n fieldsWithValidation: FieldNamesMarkedBoolean<TFieldValues>;\n}): boolean => {\n const isValid = isUndefined(error);\n const previousError = get(errors, name);\n\n return (\n (isValid && !!previousError) ||\n (!isValid && !deepEqual(previousError, error, true)) ||\n (isValid && get(fieldsWithValidation, name) && !get(validFields, name))\n );\n};\n","import isHTMLElement from '../utils/isHTMLElement';\nimport { EVENTS } from '../constants';\nimport { Field } from '../types';\n\nexport default function attachEventListeners(\n { ref }: Field,\n shouldAttachChangeEvent?: boolean,\n handleChange?: EventListenerOrEventListenerObject,\n): void {\n if (isHTMLElement(ref) && handleChange) {\n ref.addEventListener(\n shouldAttachChangeEvent ? EVENTS.CHANGE : EVENTS.INPUT,\n handleChange,\n );\n ref.addEventListener(EVENTS.BLUR, handleChange);\n }\n}\n","import { FieldElement } from '../types';\nimport { SELECT } from '../constants';\n\nexport default (element: FieldElement): element is HTMLSelectElement =>\n element.type === `${SELECT}-one`;\n","import get from '../utils/get';\nimport isUndefined from '../utils/isUndefined';\nimport { FieldErrors, FieldRefs } from '../types';\n\nexport default <TFieldValues>(\n fields: FieldRefs<TFieldValues>,\n fieldErrors: FieldErrors<TFieldValues>,\n) => {\n for (const key in fields) {\n if (get(fieldErrors, key)) {\n const field = fields[key];\n\n if (field) {\n if (field.ref.focus && isUndefined(field.ref.focus())) {\n break;\n } else if (field.options) {\n field.options[0].ref.focus();\n\n break;\n }\n }\n }\n }\n};\n","import * as React from 'react';\nimport { Field, FieldRefs } from '../types';\nimport isDetached from './isDetached';\n\nexport default function onDomRemove<TFieldValues>(\n fieldsRef: React.MutableRefObject<FieldRefs<TFieldValues>>,\n removeFieldEventListenerAndRef: (\n field: Field | undefined,\n forceDelete?: boolean,\n ) => void,\n): MutationObserver {\n const observer = new MutationObserver((): void => {\n for (const field of Object.values(fieldsRef.current)) {\n if (field && field.options) {\n for (const option of field.options) {\n if (option && option.ref && isDetached(option.ref)) {\n removeFieldEventListenerAndRef(field);\n }\n }\n } else if (field && isDetached(field.ref)) {\n removeFieldEventListenerAndRef(field);\n }\n }\n });\n\n observer.observe(window.document, {\n childList: true,\n subtree: true,\n });\n\n return observer;\n}\n","import * as React from 'react';\nimport { useFormContext } from './useFormContext';\nimport isUndefined from './utils/isUndefined';\nimport isString from './utils/isString';\nimport generateId from './logic/generateId';\nimport get from './utils/get';\nimport {\n DeepPartial,\n UseWatchOptions,\n FieldValues,\n UnpackNestedValue,\n Control,\n} from './types';\n\nexport function useWatch<TWatchFieldValues extends FieldValues>(props: {\n defaultValue?: UnpackNestedValue<DeepPartial<TWatchFieldValues>>;\n control?: Control;\n}): UnpackNestedValue<DeepPartial<TWatchFieldValues>>;\nexport function useWatch<TWatchFieldValue extends any>(props: {\n name: string;\n control?: Control;\n}): undefined | UnpackNestedValue<TWatchFieldValue>;\nexport function useWatch<TWatchFieldValue extends any>(props: {\n name: string;\n defaultValue: UnpackNestedValue<TWatchFieldValue>;\n control?: Control;\n}): UnpackNestedValue<TWatchFieldValue>;\nexport function useWatch<TWatchFieldValues extends FieldValues>(props: {\n name: string[];\n defaultValue?: UnpackNestedValue<DeepPartial<TWatchFieldValues>>;\n control?: Control;\n}): UnpackNestedValue<DeepPartial<TWatchFieldValues>>;\nexport function useWatch<TWatchFieldValues>({\n control,\n name,\n defaultValue,\n}: UseWatchOptions): TWatchFieldValues {\n const methods = useFormContext();\n\n if (process.env.NODE_ENV !== 'production') {\n if (!control && !methods) {\n throw new Error(\n '📋 useWatch is missing `control` prop. https://react-hook-form.com/api#useWatch',\n );\n }\n }\n\n const {\n useWatchFieldsRef,\n useWatchRenderFunctionsRef,\n watchInternal,\n defaultValuesRef,\n } = control || methods.control;\n const updateValue = React.useState<unknown>()[1];\n const idRef = React.useRef<string>();\n const defaultValueRef = React.useRef(defaultValue);\n\n React.useEffect(() => {\n if (process.env.NODE_ENV !== 'production') {\n if (name === '') {\n console.warn(\n '📋 useWatch is missing `name` attribute. https://react-hook-form.com/api#useWatch',\n );\n }\n }\n\n const id = (idRef.current = generateId());\n const watchFieldsHookRender = useWatchRenderFunctionsRef.current;\n const watchFieldsHook = useWatchFieldsRef.current;\n watchFieldsHook[id] = new Set();\n watchFieldsHookRender[id] = () => updateValue({});\n watchInternal(name, defaultValueRef.current, id);\n\n return () => {\n delete watchFieldsHook[id];\n delete watchFieldsHookRender[id];\n };\n }, [\n name,\n useWatchRenderFunctionsRef,\n useWatchFieldsRef,\n watchInternal,\n defaultValueRef,\n ]);\n\n return idRef.current\n ? watchInternal(name, defaultValueRef.current, idRef.current)\n : isUndefined(defaultValue)\n ? isString(name)\n ? get(defaultValuesRef.current, name)\n : Array.isArray(name)\n ? name.reduce(\n (previous, inputName) => ({\n ...previous,\n [inputName]: get(defaultValuesRef.current, inputName),\n }),\n {},\n )\n : defaultValuesRef.current\n : defaultValue;\n}\n"],"names":["value","HTMLElement","EVENTS","VALIDATION_MODE","UNDEFINED","INPUT_VALIDATION_RULES","isObjectType","isNullOrUndefined","Array","isArray","Date","test","filter","Boolean","input","compact","replace","split","set","object","path","index","tempPath","isKey","stringToPath","length","lastIndex","key","newValue","objValue","isObject","isNaN","data","val","undefined","obj","defaultValue","result","reduce","isUndefined","ref","validateWithStateUpdate","isHTMLElement","removeEventListener","defaultReturn","isValid","options","previous","option","checked","element","type","defaultResult","validResult","values","map","attributes","getFieldValue","fieldsRef","name","shallowFieldsStateRef","excludeDisabled","shouldKeepRawValue","field","current","disabled","valueAsNumber","valueAsDate","setValueAs","isFileInput","files","isRadioInput","getRadioValue","isMultipleSelect","selected","isCheckBox","getCheckboxValue","NaN","get","isDetached","nodeType","Node","DOCUMENT_NODE","parentNode","Object","keys","unset","updatePath","childObject","slice","baseGet","previousObjRef","k","objectRef","currentPaths","currentPathsLength","item","isEmptyObject","isBoolean","isSameRef","fieldValue","deepMerge","target","source","isPrimitive","targetValue","sourceValue","deepEqual","object1","object2","isErrorObject","React.isValidElement","keys1","keys2","val1","val2","setDirtyFields","defaultValues","dirtyFields","parentName","[object Object]","shallowFieldsState","shouldUnregister","search","output","isString","startsWith","find","transformToNestObject","RegExp","validationData","isRegex","message","getValidateError","isMessage","validateAllFieldCriteria","errors","types","async","required","maxLength","minLength","min","max","pattern","validate","error","isRadio","isCheckBoxInput","isRadioOrCheckbox","isEmpty","appendErrorsCurry","appendErrors","bind","getMinMaxMessage","exceedMax","maxLengthMessage","minLengthMessage","maxType","minType","getValueAndMessage","exceedMin","maxOutput","minOutput","valueDate","valueNumber","parseFloat","maxLengthOutput","minLengthOutput","patternValue","getFieldsValue","validateRef","isFunction","validateError","validationResult","validateFunction","entries","getPath","rootPath","paths","property","rootName","push","fieldValues","fieldName","watchFields","inputValue","isSingleField","add","forEach","isOnBlur","isOnChange","isOnTouch","isTouched","isReValidateOnBlur","isReValidateOnChange","isBlurEvent","isSubmitted","isOnAll","substring","indexOf","isMatchFieldArrayName","searchName","names","some","window","document","cloneObject","copy","isWeb","File","includes","constructor","getTime","Set","Map","mode","isOnSubmit","isWindowUndefined","isProxyEnabled","Proxy","FormContext","React.createContext","displayName","useFormContext","React.useContext","d","performance","now","c","r","Math","random","toString","indexes","i","temp","splice","removeAtIndexes","sort","a","b","from","to","indexA","indexB","prepend","insert","fill","mapIds","keyName","skipWarn","generateId","useController","rules","control","onFocus","methods","defaultValuesRef","setValue","register","unregister","trigger","reValidateMode","formState","formStateRef","touched","updateFormState","readFormStateRef","fieldArrayNamesRef","isNotFieldArray","isNameInFieldArray","getInitialValue","setInputStateValue","React.useState","valueRef","React.useRef","focus","onFocusRef","shouldValidate","React.useCallback","skipValidation","commonTask","event","getInputValue","registerField","shouldUpdateValue","defineProperties","React.useEffect","onBlur","onChange","shouldDirty","meta","invalid","isDirty","props","as","render","rest","componentProps","React.cloneElement","React.createElement","_a","children","Provider","focusIndexRef","isUnMount","isFormDirty","updateWatchedValue","resetFieldArrayFunctionRef","removeFieldEventListener","validFieldsRef","fieldsWithValidationRef","fieldArrayDefaultValuesRef","validateResolver","getValues","fieldArrayValuesRef","getDefaultValues","fieldArrayParentName","getFieldArrayParentName","memoizedDefaultValues","fields","setFields","omitKey","_b","getFieldArrayValue","getCurrentFieldsValues","setFieldAndValidState","fieldsValues","resetFields","cleanup","updateDirtyFieldsWithDefaultValues","updatedFieldArrayValues","setFieldArrayDirtyFields","batchStateUpdate","method","args","updatedFieldValues","updatedFormValues","shouldSet","shouldUpdateValid","argA","argB","remove","removeArrayAt","argC","resetFunctions","fieldArrayNames","delete","swap","swapArrayAt","argD","move","moveArrayAt","shouldFocus","emptyArray","fillEmptyArray","prependAt","fillBooleanArray","append","appendValue","updateFormValues","insertAt","resolver","context","shouldFocusError","criteriaMode","watchFieldsRef","useWatchFieldsRef","useWatchRenderFunctionsRef","isWatchAllRef","handleChangeRef","contextRef","resolverRef","modeRef","modeChecker","isValidateAllFieldCriteria","setFormState","isValidating","submitCount","isSubmitting","isSubmitSuccessful","observerRef","state","updateIsValidating","shouldRenderBaseOnError","shouldRender","shouldReRender","validFields","fieldsWithValidation","previousError","isErrorStateChanged","setFieldValue","rawValue","radioRef","selectRef","checkboxRef","formValues","updateAndGetDirtyState","isFieldDirty","isDirtyFieldExist","previousIsDirty","isChanged","executeValidation","skipReRender","validateField","executeSchemaOrResolverValidation","previousFormIsValid","isInputsValid","every","Promise","all","setInternalValues","setInternalValue","config","has","getNodeParentName","isFieldWatched","match","renderWatchedInputs","found","size","setFieldArrayDefaultValues","payload","getFieldsValues","shouldSkipValidation","parentNodeName","currentError","newDefaultValues","forceDelete","handleChange","fieldRef","removeAllEventListeners","findRemovedFieldAndRemoveListener","watchField","removeFieldEventListenerAndRef","watchInternal","fieldNames","watchId","assignWatchFields","combinedDefaultValues","registerFieldRef","fieldRefAndValidationOptions","isRadioOrCheckboxFunction","isFieldArray","compareRef","currentRef","isEmptyDefaultValue","isEmptyUnmountFields","then","shouldAttachChangeEvent","addEventListener","attachEventListeners","handleSubmit","onValid","onInvalid","e","preventDefault","persist","fieldErrors","fieldError","focusOnErrorField","observer","MutationObserver","observe","childList","subtree","onDomRemove","disconnect","commonProps","refOrRegisterOptions","prop","React.useMemo","watch","reset","omitResetState","inputRef","closest","resetFieldArray","resetRefs","clearErrors","inputName","setError","updateValue","idRef","defaultValueRef","id","watchFieldsHookRender","watchFieldsHook"],"mappings":"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"}
1
+ {"version":3,"file":"index.umd.production.min.js","sources":["../src/utils/isHTMLElement.ts","../src/constants.ts","../src/utils/isNullOrUndefined.ts","../src/utils/isObject.ts","../src/utils/isKey.ts","../src/utils/compact.ts","../src/utils/stringToPath.ts","../src/utils/set.ts","../src/logic/transformToNestObject.ts","../src/utils/isUndefined.ts","../src/utils/get.ts","../src/logic/removeAllEventListeners.ts","../src/logic/getRadioValue.ts","../src/utils/isRadioInput.ts","../src/utils/isFileInput.ts","../src/utils/isCheckBoxInput.ts","../src/utils/isMultipleSelect.ts","../src/logic/getCheckboxValue.ts","../src/logic/getFieldValue.ts","../src/logic/getMultipleSelectValue.ts","../src/utils/isDetached.ts","../src/utils/isEmptyObject.ts","../src/utils/isBoolean.ts","../src/utils/unset.ts","../src/logic/findRemovedFieldAndRemoveListener.ts","../src/utils/isPrimitive.ts","../src/utils/deepMerge.ts","../src/utils/deepEqual.ts","../src/logic/setFieldArrayDirtyFields.ts","../src/utils/isString.ts","../src/logic/getFieldsValues.ts","../src/utils/isRegex.ts","../src/logic/getValueAndMessage.ts","../src/utils/isFunction.ts","../src/utils/isMessage.ts","../src/logic/getValidateError.ts","../src/logic/appendErrors.ts","../src/logic/validateField.ts","../src/utils/getPath.ts","../src/logic/assignWatchFields.ts","../src/logic/skipValidation.ts","../src/logic/getNodeParentName.ts","../src/logic/isNameInFieldArray.ts","../src/utils/isWeb.ts","../src/utils/cloneObject.ts","../src/utils/validationModeChecker.ts","../src/utils/isRadioOrCheckbox.ts","../src/useForm.ts","../src/useFormContext.tsx","../src/logic/generateId.ts","../src/utils/remove.ts","../src/utils/move.ts","../src/utils/swap.ts","../src/utils/prepend.ts","../src/utils/insert.ts","../src/utils/fillEmptyArray.ts","../src/utils/fillBooleanArray.ts","../src/useFieldArray.ts","../src/useController.ts","../src/logic/getInputValue.ts","../src/controller.tsx","../src/logic/isErrorStateChanged.ts","../src/logic/attachEventListeners.ts","../src/utils/isSelectInput.ts","../src/logic/focusOnErrorField.ts","../src/utils/onDomRemove.ts","../src/useWatch.ts"],"sourcesContent":["export default (value: any): value is HTMLElement =>\n value instanceof HTMLElement;\n","import { ValidationMode } from './types';\n\nexport const EVENTS = {\n BLUR: 'blur',\n CHANGE: 'change',\n INPUT: 'input',\n};\n\nexport const VALIDATION_MODE: ValidationMode = {\n onBlur: 'onBlur',\n onChange: 'onChange',\n onSubmit: 'onSubmit',\n onTouched: 'onTouched',\n all: 'all',\n};\n\nexport const SELECT = 'select';\n\nexport const UNDEFINED = 'undefined';\n\nexport const INPUT_VALIDATION_RULES = {\n max: 'max',\n min: 'min',\n maxLength: 'maxLength',\n minLength: 'minLength',\n pattern: 'pattern',\n required: 'required',\n validate: 'validate',\n};\n","export default (value: unknown): value is null | undefined => value == null;\n","import isNullOrUndefined from './isNullOrUndefined';\n\nexport const isObjectType = (value: unknown) => typeof value === 'object';\n\nexport default <T extends object>(value: unknown): value is T =>\n !isNullOrUndefined(value) &&\n !Array.isArray(value) &&\n isObjectType(value) &&\n !(value instanceof Date);\n","export default (value: string) => /^\\w*$/.test(value);\n","export default (value: any[]) => value.filter(Boolean);\n","import compact from './compact';\n\nexport default (input: string): string[] =>\n compact(\n input\n .replace(/[\"|']/g, '')\n .replace(/\\[/g, '.')\n .replace(/\\]/g, '')\n .split('.'),\n );\n","import isObject from './isObject';\nimport isKey from './isKey';\nimport stringToPath from './stringToPath';\nimport { FieldValues } from '../types';\n\nexport default function set(\n object: FieldValues,\n path: string,\n value?: unknown,\n) {\n let index = -1;\n const tempPath = isKey(path) ? [path] : stringToPath(path);\n const length = tempPath.length;\n const lastIndex = length - 1;\n\n while (++index < length) {\n const key = tempPath[index];\n let newValue = value;\n\n if (index !== lastIndex) {\n const objValue = object[key];\n newValue =\n isObject(objValue) || Array.isArray(objValue)\n ? objValue\n : !isNaN(+tempPath[index + 1])\n ? []\n : {};\n }\n object[key] = newValue;\n object = object[key];\n }\n return object;\n}\n","import set from '../utils/set';\nimport isKey from '../utils/isKey';\nimport { FieldValues } from '../types';\n\nexport default (data: FieldValues, value: Record<string, any> = {}): any => {\n for (const key in data) {\n !isKey(key) ? set(value, key, data[key]) : (value[key] = data[key]);\n }\n return value;\n};\n","export default (val: unknown): val is undefined => val === undefined;\n","import isUndefined from './isUndefined';\nimport isNullOrUndefined from './isNullOrUndefined';\nimport compact from './compact';\n\nexport default (obj: any = {}, path: string, defaultValue?: unknown) => {\n const result = compact(path.split(/[,[\\].]+?/)).reduce(\n (result, key) => (isNullOrUndefined(result) ? result : result[key]),\n obj,\n );\n\n return isUndefined(result) || result === obj\n ? isUndefined(obj[path])\n ? defaultValue\n : obj[path]\n : result;\n};\n","import isHTMLElement from '../utils/isHTMLElement';\nimport { EVENTS } from '../constants';\nimport { Ref } from '../types';\n\nexport default (\n ref: Ref,\n validateWithStateUpdate: EventListenerOrEventListenerObject,\n): void => {\n if (isHTMLElement(ref) && ref.removeEventListener) {\n ref.removeEventListener(EVENTS.INPUT, validateWithStateUpdate);\n ref.removeEventListener(EVENTS.CHANGE, validateWithStateUpdate);\n ref.removeEventListener(EVENTS.BLUR, validateWithStateUpdate);\n }\n};\n","import { RadioOrCheckboxOption } from '../types';\n\ntype RadioFieldResult = {\n isValid: boolean;\n value: number | string | null;\n};\n\nconst defaultReturn: RadioFieldResult = {\n isValid: false,\n value: null,\n};\n\nexport default (options?: RadioOrCheckboxOption[]): RadioFieldResult =>\n Array.isArray(options)\n ? options.reduce(\n (previous, option): RadioFieldResult =>\n option && option.ref.checked\n ? {\n isValid: true,\n value: option.ref.value,\n }\n : previous,\n defaultReturn,\n )\n : defaultReturn;\n","import { FieldElement } from '../types';\n\nexport default (element: FieldElement): element is HTMLInputElement =>\n element.type === 'radio';\n","import { FieldElement } from '../types';\n\nexport default (element: FieldElement): element is HTMLInputElement =>\n element.type === 'file';\n","import { FieldElement } from '../types';\n\nexport default (element: FieldElement): element is HTMLInputElement =>\n element.type === 'checkbox';\n","import { FieldElement } from '../types';\nimport { SELECT } from '../constants';\n\nexport default (element: FieldElement): element is HTMLSelectElement =>\n element.type === `${SELECT}-multiple`;\n","import isUndefined from '../utils/isUndefined';\nimport { RadioOrCheckboxOption } from '../types';\n\ntype CheckboxFieldResult = {\n isValid: boolean;\n value: string | string[] | boolean;\n};\n\nconst defaultResult: CheckboxFieldResult = {\n value: false,\n isValid: false,\n};\n\nconst validResult = { value: true, isValid: true };\n\nexport default (options?: RadioOrCheckboxOption[]): CheckboxFieldResult => {\n if (Array.isArray(options)) {\n if (options.length > 1) {\n const values = options\n .filter((option) => option && option.ref.checked)\n .map(({ ref: { value } }) => value);\n return { value: values, isValid: !!values.length };\n }\n\n const { checked, value, attributes } = options[0].ref;\n\n return checked\n ? attributes && !isUndefined((attributes as any).value)\n ? isUndefined(value) || value === ''\n ? validResult\n : { value: value, isValid: true }\n : validResult\n : defaultResult;\n }\n\n return defaultResult;\n};\n","import * as React from 'react';\nimport getRadioValue from './getRadioValue';\nimport getMultipleSelectValue from './getMultipleSelectValue';\nimport isRadioInput from '../utils/isRadioInput';\nimport get from '../utils/get';\nimport isFileInput from '../utils/isFileInput';\nimport isCheckBox from '../utils/isCheckBoxInput';\nimport isMultipleSelect from '../utils/isMultipleSelect';\nimport getCheckboxValue from './getCheckboxValue';\nimport { FieldRefs, FieldValues, InternalFieldName } from '../types';\n\nexport default function getFieldValue<TFieldValues extends FieldValues>(\n fieldsRef: React.MutableRefObject<FieldRefs<TFieldValues>>,\n name: InternalFieldName<TFieldValues>,\n shallowFieldsStateRef?: React.MutableRefObject<Partial<FieldValues>>,\n excludeDisabled?: boolean,\n shouldKeepRawValue?: boolean,\n) {\n const field = fieldsRef.current[name]!;\n\n if (field) {\n const {\n ref: { value, disabled },\n ref,\n valueAsNumber,\n valueAsDate,\n setValueAs,\n } = field;\n\n if (disabled && excludeDisabled) {\n return;\n }\n\n if (isFileInput(ref)) {\n return ref.files;\n }\n\n if (isRadioInput(ref)) {\n return getRadioValue(field.options).value;\n }\n\n if (isMultipleSelect(ref)) {\n return getMultipleSelectValue(ref.options);\n }\n\n if (isCheckBox(ref)) {\n return getCheckboxValue(field.options).value;\n }\n\n return shouldKeepRawValue\n ? value\n : valueAsNumber\n ? value === ''\n ? NaN\n : +value\n : valueAsDate\n ? (ref as HTMLInputElement).valueAsDate\n : setValueAs\n ? setValueAs(value)\n : value;\n }\n\n if (shallowFieldsStateRef) {\n return get(shallowFieldsStateRef.current, name);\n }\n}\n","export default (\n options: HTMLOptionElement[] | HTMLOptionsCollection,\n): string[] =>\n [...options]\n .filter(({ selected }): boolean => selected)\n .map(({ value }): string => value);\n","import { Ref } from '../types';\n\nexport default function isDetached(element: Ref): boolean {\n if (!element) {\n return true;\n }\n\n if (\n !(element instanceof HTMLElement) ||\n element.nodeType === Node.DOCUMENT_NODE\n ) {\n return false;\n }\n\n return isDetached(element.parentNode as Ref);\n}\n","import isObject from './isObject';\nimport { EmptyObject } from '../types';\n\nexport default (value: unknown): value is EmptyObject =>\n isObject(value) && !Object.keys(value).length;\n","export default (value: unknown): value is boolean => typeof value === 'boolean';\n","import isKey from './isKey';\nimport stringToPath from './stringToPath';\nimport isEmptyObject from './isEmptyObject';\nimport isObject from './isObject';\nimport isUndefined from './isUndefined';\nimport isBoolean from './isBoolean';\n\nfunction baseGet(object: any, updatePath: (string | number)[]) {\n const length = updatePath.slice(0, -1).length;\n let index = 0;\n\n while (index < length) {\n object = isUndefined(object) ? index++ : object[updatePath[index++]];\n }\n\n return object;\n}\n\nexport default function unset(object: any, path: string) {\n const updatePath = isKey(path) ? [path] : stringToPath(path);\n const childObject =\n updatePath.length == 1 ? object : baseGet(object, updatePath);\n const key = updatePath[updatePath.length - 1];\n let previousObjRef;\n\n if (childObject) {\n delete childObject[key];\n }\n\n for (let k = 0; k < updatePath.slice(0, -1).length; k++) {\n let index = -1;\n let objectRef;\n const currentPaths = updatePath.slice(0, -(k + 1));\n const currentPathsLength = currentPaths.length - 1;\n\n if (k > 0) {\n previousObjRef = object;\n }\n\n while (++index < currentPaths.length) {\n const item = currentPaths[index];\n objectRef = objectRef ? objectRef[item] : object[item];\n\n if (\n currentPathsLength === index &&\n ((isObject(objectRef) && isEmptyObject(objectRef)) ||\n (Array.isArray(objectRef) &&\n !objectRef.filter(\n (data) =>\n (isObject(data) && !isEmptyObject(data)) || isBoolean(data),\n ).length))\n ) {\n previousObjRef ? delete previousObjRef[item] : delete object[item];\n }\n\n previousObjRef = objectRef;\n }\n }\n\n return object;\n}\n","import * as React from 'react';\nimport removeAllEventListeners from './removeAllEventListeners';\nimport getFieldValue from './getFieldValue';\nimport isRadioInput from '../utils/isRadioInput';\nimport set from '../utils/set';\nimport isCheckBoxInput from '../utils/isCheckBoxInput';\nimport isDetached from '../utils/isDetached';\nimport unset from '../utils/unset';\nimport compact from '../utils/compact';\nimport isUndefined from '../utils/isUndefined';\nimport { Field, FieldRefs, FieldValues, Ref } from '../types';\n\nconst isSameRef = (fieldValue: Field, ref: Ref) =>\n fieldValue && fieldValue.ref === ref;\n\nexport default function findRemovedFieldAndRemoveListener<\n TFieldValues extends FieldValues\n>(\n fieldsRef: React.MutableRefObject<FieldRefs<TFieldValues>>,\n handleChange: ({ type, target }: Event) => Promise<void | boolean>,\n field: Field,\n shallowFieldsStateRef: React.MutableRefObject<FieldValues>,\n shouldUnregister?: boolean,\n forceDelete?: boolean,\n): void {\n const {\n ref,\n ref: { name },\n } = field;\n const fieldRef = fieldsRef.current[name] as Field;\n\n if (!shouldUnregister) {\n const value = getFieldValue(fieldsRef, name, shallowFieldsStateRef);\n\n !isUndefined(value) && set(shallowFieldsStateRef.current, name, value);\n }\n\n if (!ref.type || !fieldRef) {\n delete fieldsRef.current[name];\n return;\n }\n\n if (isRadioInput(ref) || isCheckBoxInput(ref)) {\n if (Array.isArray(fieldRef.options) && fieldRef.options.length) {\n compact(fieldRef.options).forEach((option = {}, index): void => {\n if (\n (isDetached(option.ref) && isSameRef(option, option.ref)) ||\n forceDelete\n ) {\n removeAllEventListeners(option.ref, handleChange);\n unset(fieldRef.options, `[${index}]`);\n }\n });\n\n if (fieldRef.options && !compact(fieldRef.options).length) {\n delete fieldsRef.current[name];\n }\n } else {\n delete fieldsRef.current[name];\n }\n } else if ((isDetached(ref) && isSameRef(fieldRef, ref)) || forceDelete) {\n removeAllEventListeners(ref, handleChange);\n\n delete fieldsRef.current[name];\n }\n}\n","import isNullOrUndefined from './isNullOrUndefined';\nimport { isObjectType } from './isObject';\nimport { Primitive } from '../types';\n\nexport default (value: unknown): value is Primitive =>\n isNullOrUndefined(value) || !isObjectType(value);\n","import isObject from './isObject';\nimport isPrimitive from './isPrimitive';\n\nexport function deepMerge<\n T extends Record<keyof T, any>,\n U extends Record<keyof U, any>\n>(target: T, source: U): T & U {\n if (isPrimitive(target) || isPrimitive(source)) {\n return source;\n }\n\n for (const key in source) {\n const targetValue = target[key];\n const sourceValue = source[key];\n\n try {\n target[key] =\n (isObject(targetValue) && isObject(sourceValue)) ||\n (Array.isArray(targetValue) && Array.isArray(sourceValue))\n ? deepMerge(targetValue, sourceValue)\n : sourceValue;\n } catch {}\n }\n\n return target;\n}\n","import * as React from 'react';\nimport isObject from '../utils/isObject';\nimport isPrimitive from './isPrimitive';\n\nexport default function deepEqual(\n object1: any,\n object2: any,\n isErrorObject?: boolean,\n) {\n if (\n isPrimitive(object1) ||\n isPrimitive(object2) ||\n object1 instanceof Date ||\n object2 instanceof Date\n ) {\n return object1 === object2;\n }\n\n if (!React.isValidElement(object1)) {\n const keys1 = Object.keys(object1);\n const keys2 = Object.keys(object2);\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n for (const key of keys1) {\n const val1 = object1[key];\n\n if (!(isErrorObject && key === 'ref')) {\n const val2 = object2[key];\n\n if (\n (isObject(val1) || Array.isArray(val1)) &&\n (isObject(val2) || Array.isArray(val2))\n ? !deepEqual(val1, val2, isErrorObject)\n : val1 !== val2\n ) {\n return false;\n }\n }\n }\n }\n\n return true;\n}\n","import { get } from '../utils';\nimport set from '../utils/set';\nimport { deepMerge } from '../utils/deepMerge';\nimport deepEqual from '../utils/deepEqual';\n\nfunction setDirtyFields<\n T extends Record<string, unknown>[],\n U extends Record<string, unknown>[],\n K extends Record<string, boolean | []>\n>(\n values: T,\n defaultValues: U,\n dirtyFields: Record<string, boolean | []>[],\n parentNode?: K,\n parentName?: keyof K,\n) {\n let index = -1;\n\n while (++index < values.length) {\n for (const key in values[index]) {\n if (Array.isArray(values[index][key])) {\n !dirtyFields[index] && (dirtyFields[index] = {});\n dirtyFields[index][key] = [];\n setDirtyFields(\n values[index][key] as T,\n get(defaultValues[index] || {}, key, []),\n dirtyFields[index][key] as [],\n dirtyFields[index],\n key,\n );\n } else {\n deepEqual(get(defaultValues[index] || {}, key), values[index][key])\n ? set(dirtyFields[index] || {}, key)\n : (dirtyFields[index] = {\n ...dirtyFields[index],\n [key]: true,\n });\n }\n }\n\n parentNode &&\n !dirtyFields.length &&\n delete parentNode[parentName as keyof K];\n }\n\n return dirtyFields;\n}\n\nexport default <T extends U, U extends Record<string, unknown>[]>(\n values: T,\n defaultValues: U,\n dirtyFields: Record<string, boolean | []>[],\n) =>\n deepMerge(\n setDirtyFields(values, defaultValues, dirtyFields.slice(0, values.length)),\n setDirtyFields(defaultValues, values, dirtyFields.slice(0, values.length)),\n );\n","export default (value: unknown): value is string => typeof value === 'string';\n","import * as React from 'react';\nimport getFieldValue from './getFieldValue';\nimport isString from '../utils/isString';\nimport { deepMerge } from '../utils/deepMerge';\nimport isUndefined from '../utils/isUndefined';\nimport { InternalFieldName, FieldValues, FieldRefs } from '../types';\nimport transformToNestObject from './transformToNestObject';\n\nexport default <TFieldValues extends FieldValues>(\n fieldsRef: React.MutableRefObject<FieldRefs<TFieldValues>>,\n shallowFieldsState: Record<string, any>,\n shouldUnregister: boolean,\n excludeDisabled?: boolean,\n search?:\n | InternalFieldName<TFieldValues>\n | InternalFieldName<TFieldValues>[]\n | { nest: boolean },\n) => {\n const output = {} as TFieldValues;\n\n for (const name in fieldsRef.current) {\n if (\n isUndefined(search) ||\n (isString(search)\n ? name.startsWith(search)\n : Array.isArray(search) && search.find((data) => name.startsWith(data)))\n ) {\n output[name as InternalFieldName<TFieldValues>] = getFieldValue(\n fieldsRef,\n name,\n undefined,\n excludeDisabled,\n );\n }\n }\n\n return shouldUnregister\n ? transformToNestObject(output)\n : deepMerge(shallowFieldsState, transformToNestObject(output));\n};\n","export default (value: unknown): value is RegExp => value instanceof RegExp;\n","import isObject from '../utils/isObject';\nimport isRegex from '../utils/isRegex';\nimport { ValidationRule } from '../types';\n\nexport default (validationData?: ValidationRule) =>\n isObject(validationData) && !isRegex(validationData)\n ? validationData\n : {\n value: validationData,\n message: '',\n };\n","export default (value: unknown): value is Function =>\n typeof value === 'function';\n","import * as React from 'react';\nimport isString from '../utils/isString';\nimport { Message } from '../types';\n\nexport default (value: unknown): value is Message =>\n isString(value) || React.isValidElement(value as JSX.Element);\n","import isBoolean from '../utils/isBoolean';\nimport isMessage from '../utils/isMessage';\nimport { FieldError, ValidateResult, Ref } from '../types';\n\nexport default function getValidateError(\n result: ValidateResult,\n ref: Ref,\n type = 'validate',\n): FieldError | void {\n if (isMessage(result) || (isBoolean(result) && !result)) {\n return {\n type,\n message: isMessage(result) ? result : '',\n ref,\n };\n }\n}\n","import {\n InternalFieldName,\n ValidateResult,\n InternalFieldErrors,\n} from '../types';\n\nexport default <TFieldValues>(\n name: InternalFieldName<TFieldValues>,\n validateAllFieldCriteria: boolean,\n errors: InternalFieldErrors<TFieldValues>,\n type: string,\n message: ValidateResult,\n) =>\n validateAllFieldCriteria\n ? {\n ...errors[name],\n types: {\n ...(errors[name] && errors[name]!.types ? errors[name]!.types : {}),\n [type]: message || true,\n },\n }\n : {};\n","import * as React from 'react';\nimport getRadioValue from './getRadioValue';\nimport getCheckboxValue from './getCheckboxValue';\nimport isNullOrUndefined from '../utils/isNullOrUndefined';\nimport isRadioInput from '../utils/isRadioInput';\nimport getValueAndMessage from './getValueAndMessage';\nimport isCheckBoxInput from '../utils/isCheckBoxInput';\nimport isString from '../utils/isString';\nimport isEmptyObject from '../utils/isEmptyObject';\nimport isObject from '../utils/isObject';\nimport isFunction from '../utils/isFunction';\nimport getFieldsValue from './getFieldValue';\nimport isRegex from '../utils/isRegex';\nimport isBoolean from '../utils/isBoolean';\nimport isMessage from '../utils/isMessage';\nimport getValidateError from './getValidateError';\nimport appendErrors from './appendErrors';\nimport { INPUT_VALIDATION_RULES } from '../constants';\nimport {\n Field,\n FieldValues,\n FieldRefs,\n Message,\n FieldError,\n InternalFieldName,\n InternalFieldErrors,\n} from '../types';\n\nexport default async <TFieldValues extends FieldValues>(\n fieldsRef: React.MutableRefObject<FieldRefs<TFieldValues>>,\n validateAllFieldCriteria: boolean,\n {\n ref,\n ref: { value },\n options,\n required,\n maxLength,\n minLength,\n min,\n max,\n pattern,\n validate,\n }: Field,\n shallowFieldsStateRef: React.MutableRefObject<Record<string, any>>,\n): Promise<InternalFieldErrors<TFieldValues>> => {\n const name: InternalFieldName<TFieldValues> = ref.name;\n const error: InternalFieldErrors<TFieldValues> = {};\n const isRadio = isRadioInput(ref);\n const isCheckBox = isCheckBoxInput(ref);\n const isRadioOrCheckbox = isRadio || isCheckBox;\n const isEmpty = value === '';\n const appendErrorsCurry = appendErrors.bind(\n null,\n name,\n validateAllFieldCriteria,\n error,\n );\n const getMinMaxMessage = (\n exceedMax: boolean,\n maxLengthMessage: Message,\n minLengthMessage: Message,\n maxType = INPUT_VALIDATION_RULES.maxLength,\n minType = INPUT_VALIDATION_RULES.minLength,\n ) => {\n const message = exceedMax ? maxLengthMessage : minLengthMessage;\n error[name] = {\n type: exceedMax ? maxType : minType,\n message,\n ref,\n ...(exceedMax\n ? appendErrorsCurry(maxType, message)\n : appendErrorsCurry(minType, message)),\n };\n };\n\n if (\n required &&\n ((!isRadio && !isCheckBox && (isEmpty || isNullOrUndefined(value))) ||\n (isBoolean(value) && !value) ||\n (isCheckBox && !getCheckboxValue(options).isValid) ||\n (isRadio && !getRadioValue(options).isValid))\n ) {\n const { value, message } = isMessage(required)\n ? { value: !!required, message: required }\n : getValueAndMessage(required);\n\n if (value) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.required,\n message,\n ref: isRadioOrCheckbox\n ? (((fieldsRef.current[name] as Field).options || [])[0] || {}).ref\n : ref,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.required, message),\n };\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n }\n\n if ((!isNullOrUndefined(min) || !isNullOrUndefined(max)) && value !== '') {\n let exceedMax;\n let exceedMin;\n const maxOutput = getValueAndMessage(max);\n const minOutput = getValueAndMessage(min);\n\n if (!isNaN(value)) {\n const valueNumber =\n (ref as HTMLInputElement).valueAsNumber || parseFloat(value);\n if (!isNullOrUndefined(maxOutput.value)) {\n exceedMax = valueNumber > maxOutput.value;\n }\n if (!isNullOrUndefined(minOutput.value)) {\n exceedMin = valueNumber < minOutput.value;\n }\n } else {\n const valueDate =\n (ref as HTMLInputElement).valueAsDate || new Date(value);\n if (isString(maxOutput.value)) {\n exceedMax = valueDate > new Date(maxOutput.value);\n }\n if (isString(minOutput.value)) {\n exceedMin = valueDate < new Date(minOutput.value);\n }\n }\n\n if (exceedMax || exceedMin) {\n getMinMaxMessage(\n !!exceedMax,\n maxOutput.message,\n minOutput.message,\n INPUT_VALIDATION_RULES.max,\n INPUT_VALIDATION_RULES.min,\n );\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n }\n\n if (isString(value) && !isEmpty && (maxLength || minLength)) {\n const maxLengthOutput = getValueAndMessage(maxLength);\n const minLengthOutput = getValueAndMessage(minLength);\n const exceedMax =\n !isNullOrUndefined(maxLengthOutput.value) &&\n value.length > maxLengthOutput.value;\n const exceedMin =\n !isNullOrUndefined(minLengthOutput.value) &&\n value.length < minLengthOutput.value;\n\n if (exceedMax || exceedMin) {\n getMinMaxMessage(\n exceedMax,\n maxLengthOutput.message,\n minLengthOutput.message,\n );\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n }\n\n if (isString(value) && pattern && !isEmpty) {\n const { value: patternValue, message } = getValueAndMessage(pattern);\n\n if (isRegex(patternValue) && !patternValue.test(value)) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.pattern,\n message,\n ref,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.pattern, message),\n };\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n }\n\n if (validate) {\n const fieldValue = getFieldsValue(\n fieldsRef,\n name,\n shallowFieldsStateRef,\n false,\n true,\n );\n const validateRef = isRadioOrCheckbox && options ? options[0].ref : ref;\n\n if (isFunction(validate)) {\n const result = await validate(fieldValue);\n const validateError = getValidateError(result, validateRef);\n\n if (validateError) {\n error[name] = {\n ...validateError,\n ...appendErrorsCurry(\n INPUT_VALIDATION_RULES.validate,\n validateError.message,\n ),\n };\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n } else if (isObject(validate)) {\n let validationResult = {} as FieldError;\n for (const [key, validateFunction] of Object.entries(validate)) {\n if (!isEmptyObject(validationResult) && !validateAllFieldCriteria) {\n break;\n }\n\n const validateResult = await validateFunction(fieldValue);\n const validateError = getValidateError(\n validateResult,\n validateRef,\n key,\n );\n\n if (validateError) {\n validationResult = {\n ...validateError,\n ...appendErrorsCurry(key, validateError.message),\n };\n\n if (validateAllFieldCriteria) {\n error[name] = validationResult;\n }\n }\n }\n\n if (!isEmptyObject(validationResult)) {\n error[name] = {\n ref: validateRef,\n ...validationResult,\n };\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n }\n }\n\n return error;\n};\n","import isPrimitive from './isPrimitive';\nimport isObject from './isObject';\nimport { FieldName } from '../types';\n\nexport const getPath = <TFieldValues>(\n rootPath: FieldName<TFieldValues>,\n values: any,\n paths: FieldName<TFieldValues>[] = [],\n): FieldName<TFieldValues>[] => {\n for (const property in values) {\n const rootName = (rootPath +\n (isObject(values)\n ? `.${property}`\n : `[${property}]`)) as FieldName<TFieldValues>;\n\n isPrimitive(values[property])\n ? paths.push(rootName)\n : getPath(rootName, values[property], paths);\n }\n\n return paths;\n};\n","import get from '../utils/get';\nimport { getPath } from '../utils/getPath';\nimport isEmptyObject from '../utils/isEmptyObject';\nimport isUndefined from '../utils/isUndefined';\nimport isObject from '../utils/isObject';\nimport {\n DeepPartial,\n FieldValue,\n FieldValues,\n InternalFieldName,\n UnpackNestedValue,\n} from '../types';\n\nexport default <TFieldValues extends FieldValues>(\n fieldValues: TFieldValues,\n fieldName: InternalFieldName<TFieldValues>,\n watchFields: Set<InternalFieldName<TFieldValues>>,\n inputValue: UnpackNestedValue<DeepPartial<TFieldValues>>,\n isSingleField?: boolean,\n):\n | FieldValue<TFieldValues>\n | UnpackNestedValue<DeepPartial<TFieldValues>>\n | undefined => {\n let value = undefined;\n\n watchFields.add(fieldName);\n\n if (!isEmptyObject(fieldValues)) {\n value = get(fieldValues, fieldName);\n\n if (isObject(value) || Array.isArray(value)) {\n getPath(fieldName, value).forEach((name) => watchFields.add(name));\n }\n }\n\n return isUndefined(value)\n ? isSingleField\n ? inputValue\n : get(inputValue, fieldName)\n : value;\n};\n","export default ({\n isOnBlur,\n isOnChange,\n isOnTouch,\n isTouched,\n isReValidateOnBlur,\n isReValidateOnChange,\n isBlurEvent,\n isSubmitted,\n isOnAll,\n}: {\n isOnAll?: boolean;\n isOnBlur?: boolean;\n isOnChange?: boolean;\n isReValidateOnBlur?: boolean;\n isReValidateOnChange?: boolean;\n isBlurEvent?: boolean;\n isSubmitted?: boolean;\n isOnTouch?: boolean;\n isTouched?: boolean;\n}) => {\n if (isOnAll) {\n return false;\n } else if (!isSubmitted && isOnTouch) {\n return !(isTouched || isBlurEvent);\n } else if (isSubmitted ? isReValidateOnBlur : isOnBlur) {\n return !isBlurEvent;\n } else if (isSubmitted ? isReValidateOnChange : isOnChange) {\n return isBlurEvent;\n }\n return true;\n};\n","export default (name: string) => name.substring(0, name.indexOf('['));\n","import { FieldValues, InternalFieldName } from '../types';\n\nexport const isMatchFieldArrayName = (name: string, searchName: string) =>\n RegExp(\n `^${searchName}([|.)\\\\d+`.replace(/\\[/g, '\\\\[').replace(/\\]/g, '\\\\]'),\n ).test(name);\n\nexport default (\n names: Set<InternalFieldName<FieldValues>>,\n name: InternalFieldName<FieldValues>,\n) => [...names].some((current) => isMatchFieldArrayName(name, current));\n","import { UNDEFINED } from '../constants';\n\nexport default typeof window !== UNDEFINED && typeof document !== UNDEFINED;\n","import isPrimitive from './isPrimitive';\nimport isHTMLElement from './isHTMLElement';\nimport isWeb from './isWeb';\n\nexport default function cloneObject<T extends unknown>(data: T): T {\n let copy: any;\n\n if (\n isPrimitive(data) ||\n (isWeb && (data instanceof File || isHTMLElement(data)))\n ) {\n return data;\n }\n\n if (\n !['Set', 'Map', 'Object', 'Date', 'Array'].includes(\n (data as Object).constructor?.name,\n )\n ) {\n return data;\n }\n\n if (data instanceof Date) {\n copy = new Date(data.getTime());\n return copy;\n }\n\n if (data instanceof Set) {\n copy = new Set();\n for (const item of data) {\n copy.add(item);\n }\n return copy;\n }\n\n if (data instanceof Map) {\n copy = new Map();\n for (const key of data.keys()) {\n copy.set(key, cloneObject(data.get(key)));\n }\n return copy;\n }\n\n copy = Array.isArray(data) ? [] : {};\n\n for (const key in data) {\n copy[key] = cloneObject(data[key]);\n }\n\n return copy;\n}\n","import { VALIDATION_MODE } from '../constants';\nimport { Mode } from '../types';\n\nexport default (\n mode?: Mode,\n): {\n isOnSubmit: boolean;\n isOnBlur: boolean;\n isOnChange: boolean;\n isOnAll: boolean;\n isOnTouch: boolean;\n} => ({\n isOnSubmit: !mode || mode === VALIDATION_MODE.onSubmit,\n isOnBlur: mode === VALIDATION_MODE.onBlur,\n isOnChange: mode === VALIDATION_MODE.onChange,\n isOnAll: mode === VALIDATION_MODE.all,\n isOnTouch: mode === VALIDATION_MODE.onTouched,\n});\n","import isRadioInput from './isRadioInput';\nimport isCheckBoxInput from './isCheckBoxInput';\nimport { FieldElement } from '../types';\n\nexport default (ref: FieldElement): ref is HTMLInputElement =>\n isRadioInput(ref) || isCheckBoxInput(ref);\n","import * as React from 'react';\nimport attachEventListeners from './logic/attachEventListeners';\nimport transformToNestObject from './logic/transformToNestObject';\nimport focusOnErrorField from './logic/focusOnErrorField';\nimport findRemovedFieldAndRemoveListener from './logic/findRemovedFieldAndRemoveListener';\nimport setFieldArrayDirtyFields from './logic/setFieldArrayDirtyFields';\nimport getFieldsValues from './logic/getFieldsValues';\nimport getFieldValue from './logic/getFieldValue';\nimport isErrorStateChanged from './logic/isErrorStateChanged';\nimport validateField from './logic/validateField';\nimport assignWatchFields from './logic/assignWatchFields';\nimport skipValidation from './logic/skipValidation';\nimport getNodeParentName from './logic/getNodeParentName';\nimport deepEqual from './utils/deepEqual';\nimport isNameInFieldArray from './logic/isNameInFieldArray';\nimport isCheckBoxInput from './utils/isCheckBoxInput';\nimport isEmptyObject from './utils/isEmptyObject';\nimport isRadioInput from './utils/isRadioInput';\nimport isSelectInput from './utils/isSelectInput';\nimport isFileInput from './utils/isFileInput';\nimport onDomRemove from './utils/onDomRemove';\nimport isObject from './utils/isObject';\nimport { getPath } from './utils/getPath';\nimport isPrimitive from './utils/isPrimitive';\nimport isFunction from './utils/isFunction';\nimport isString from './utils/isString';\nimport isUndefined from './utils/isUndefined';\nimport get from './utils/get';\nimport set from './utils/set';\nimport unset from './utils/unset';\nimport isKey from './utils/isKey';\nimport cloneObject from './utils/cloneObject';\nimport modeChecker from './utils/validationModeChecker';\nimport isMultipleSelect from './utils/isMultipleSelect';\nimport compact from './utils/compact';\nimport isNullOrUndefined from './utils/isNullOrUndefined';\nimport isRadioOrCheckboxFunction from './utils/isRadioOrCheckbox';\nimport isWeb from './utils/isWeb';\nimport isHTMLElement from './utils/isHTMLElement';\nimport { EVENTS, UNDEFINED, VALIDATION_MODE } from './constants';\nimport {\n UseFormMethods,\n FieldValues,\n UnpackNestedValue,\n FieldName,\n InternalFieldName,\n FieldErrors,\n Field,\n FieldRefs,\n UseFormOptions,\n RegisterOptions,\n SubmitHandler,\n FieldElement,\n FormStateProxy,\n ReadFormState,\n Ref,\n HandleChange,\n RadioOrCheckboxOption,\n OmitResetState,\n SetValueConfig,\n ErrorOption,\n FormState,\n SubmitErrorHandler,\n FieldNamesMarkedBoolean,\n LiteralToPrimitive,\n DeepPartial,\n InternalNameSet,\n DefaultValues,\n FieldError,\n SetFieldValue,\n FieldArrayDefaultValues,\n ResetFieldArrayFunctionRef,\n UseWatchRenderFunctions,\n RecordInternalNameSet,\n} from './types';\n\nconst isWindowUndefined = typeof window === UNDEFINED;\nconst isProxyEnabled = isWeb ? 'Proxy' in window : typeof Proxy !== UNDEFINED;\n\nexport function useForm<\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object\n>({\n mode = VALIDATION_MODE.onSubmit,\n reValidateMode = VALIDATION_MODE.onChange,\n resolver,\n context,\n defaultValues = {} as DefaultValues<TFieldValues>,\n shouldFocusError = true,\n shouldUnregister = true,\n criteriaMode,\n}: UseFormOptions<TFieldValues, TContext> = {}): UseFormMethods<TFieldValues> {\n const fieldsRef = React.useRef<FieldRefs<TFieldValues>>({});\n const fieldArrayDefaultValuesRef = React.useRef<FieldArrayDefaultValues>({});\n const fieldArrayValuesRef = React.useRef<FieldArrayDefaultValues>({});\n const watchFieldsRef = React.useRef<InternalNameSet<TFieldValues>>(new Set());\n const useWatchFieldsRef = React.useRef<RecordInternalNameSet<TFieldValues>>(\n {},\n );\n const useWatchRenderFunctionsRef = React.useRef<UseWatchRenderFunctions>({});\n const fieldsWithValidationRef = React.useRef<\n FieldNamesMarkedBoolean<TFieldValues>\n >({});\n const validFieldsRef = React.useRef<FieldNamesMarkedBoolean<TFieldValues>>(\n {},\n );\n const defaultValuesRef = React.useRef<DefaultValues<TFieldValues>>(\n defaultValues,\n );\n const isUnMount = React.useRef(false);\n const isWatchAllRef = React.useRef(false);\n const handleChangeRef = React.useRef<HandleChange>();\n const shallowFieldsStateRef = React.useRef({});\n const resetFieldArrayFunctionRef = React.useRef<\n ResetFieldArrayFunctionRef<TFieldValues>\n >({});\n const contextRef = React.useRef(context);\n const resolverRef = React.useRef(resolver);\n const fieldArrayNamesRef = React.useRef<InternalNameSet<TFieldValues>>(\n new Set(),\n );\n const modeRef = React.useRef(modeChecker(mode));\n const { isOnSubmit, isOnTouch } = modeRef.current;\n const isValidateAllFieldCriteria = criteriaMode === VALIDATION_MODE.all;\n const [formState, setFormState] = React.useState<FormState<TFieldValues>>({\n isDirty: false,\n isValidating: false,\n dirtyFields: {},\n isSubmitted: false,\n submitCount: 0,\n touched: {},\n isSubmitting: false,\n isSubmitSuccessful: false,\n isValid: !isOnSubmit,\n errors: {},\n });\n const readFormStateRef = React.useRef<ReadFormState>({\n isDirty: !isProxyEnabled,\n dirtyFields: !isProxyEnabled,\n touched: !isProxyEnabled || isOnTouch,\n isValidating: !isProxyEnabled,\n isSubmitting: !isProxyEnabled,\n isValid: !isProxyEnabled,\n });\n const formStateRef = React.useRef(formState);\n const observerRef = React.useRef<MutationObserver | undefined>();\n const {\n isOnBlur: isReValidateOnBlur,\n isOnChange: isReValidateOnChange,\n } = React.useRef(modeChecker(reValidateMode)).current;\n\n contextRef.current = context;\n resolverRef.current = resolver;\n formStateRef.current = formState;\n shallowFieldsStateRef.current = shouldUnregister\n ? {}\n : isEmptyObject(shallowFieldsStateRef.current)\n ? cloneObject(defaultValues)\n : shallowFieldsStateRef.current;\n\n const updateFormState = React.useCallback(\n (state: Partial<FormState<TFieldValues>> = {}) => {\n if (!isUnMount.current) {\n formStateRef.current = {\n ...formStateRef.current,\n ...state,\n };\n setFormState(formStateRef.current);\n }\n },\n [],\n );\n\n const updateIsValidating = () =>\n readFormStateRef.current.isValidating &&\n updateFormState({\n isValidating: true,\n });\n\n const shouldRenderBaseOnError = React.useCallback(\n (\n name: InternalFieldName<TFieldValues>,\n error: FieldError | undefined,\n shouldRender: boolean | null = false,\n state: {\n dirtyFields?: FieldNamesMarkedBoolean<TFieldValues>;\n isDirty?: boolean;\n touched?: FieldNamesMarkedBoolean<TFieldValues>;\n } = {},\n isValid?: boolean,\n ): boolean | void => {\n let shouldReRender =\n shouldRender ||\n isErrorStateChanged<TFieldValues>({\n errors: formStateRef.current.errors,\n error,\n name,\n validFields: validFieldsRef.current,\n fieldsWithValidation: fieldsWithValidationRef.current,\n });\n const previousError = get(formStateRef.current.errors, name);\n\n if (error) {\n unset(validFieldsRef.current, name);\n shouldReRender =\n shouldReRender ||\n !previousError ||\n !deepEqual(previousError, error, true);\n set(formStateRef.current.errors, name, error);\n } else {\n if (get(fieldsWithValidationRef.current, name) || resolverRef.current) {\n set(validFieldsRef.current, name, true);\n shouldReRender = shouldReRender || previousError;\n }\n\n unset(formStateRef.current.errors, name);\n }\n\n if (\n (shouldReRender && !isNullOrUndefined(shouldRender)) ||\n !isEmptyObject(state) ||\n readFormStateRef.current.isValidating\n ) {\n updateFormState({\n ...state,\n ...(resolverRef.current ? { isValid: !!isValid } : {}),\n isValidating: false,\n });\n }\n },\n [],\n );\n\n const setFieldValue = React.useCallback(\n (name: FieldName<TFieldValues>, rawValue: SetFieldValue<TFieldValues>) => {\n const { ref, options } = fieldsRef.current[name] as Field;\n const value =\n isWeb && isHTMLElement(ref) && isNullOrUndefined(rawValue)\n ? ''\n : rawValue;\n\n if (isRadioInput(ref)) {\n (options || []).forEach(\n ({ ref: radioRef }: { ref: HTMLInputElement }) =>\n (radioRef.checked = radioRef.value === value),\n );\n } else if (isFileInput(ref) && !isString(value)) {\n ref.files = value as FileList;\n } else if (isMultipleSelect(ref)) {\n [...ref.options].forEach(\n (selectRef) =>\n (selectRef.selected = (value as string[]).includes(\n selectRef.value,\n )),\n );\n } else if (isCheckBoxInput(ref) && options) {\n options.length > 1\n ? options.forEach(\n ({ ref: checkboxRef }) =>\n (checkboxRef.checked = Array.isArray(value)\n ? !!(value as []).find(\n (data: string) => data === checkboxRef.value,\n )\n : value === checkboxRef.value),\n )\n : (options[0].ref.checked = !!value);\n } else {\n ref.value = value;\n }\n },\n [],\n );\n\n const isFormDirty = React.useCallback(\n (name?: string, data?: unknown[]): boolean => {\n if (readFormStateRef.current.isDirty) {\n const formValues = getValues();\n\n name && data && set(formValues, name, data);\n\n return !deepEqual(formValues, defaultValuesRef.current);\n }\n\n return false;\n },\n [],\n );\n\n const updateAndGetDirtyState = React.useCallback(\n (\n name: InternalFieldName<TFieldValues>,\n shouldRender = true,\n ): Partial<\n Pick<FormState<TFieldValues>, 'dirtyFields' | 'isDirty' | 'touched'>\n > => {\n if (\n readFormStateRef.current.isDirty ||\n readFormStateRef.current.dirtyFields\n ) {\n const isFieldDirty = !deepEqual(\n get(defaultValuesRef.current, name),\n getFieldValue(fieldsRef, name, shallowFieldsStateRef),\n );\n const isDirtyFieldExist = get(formStateRef.current.dirtyFields, name);\n const previousIsDirty = formStateRef.current.isDirty;\n\n isFieldDirty\n ? set(formStateRef.current.dirtyFields, name, true)\n : unset(formStateRef.current.dirtyFields, name);\n\n const state = {\n isDirty: isFormDirty(),\n dirtyFields: formStateRef.current.dirtyFields,\n };\n\n const isChanged =\n (readFormStateRef.current.isDirty &&\n previousIsDirty !== state.isDirty) ||\n (readFormStateRef.current.dirtyFields &&\n isDirtyFieldExist !== get(formStateRef.current.dirtyFields, name));\n\n isChanged && shouldRender && updateFormState(state);\n\n return isChanged ? state : {};\n }\n\n return {};\n },\n [],\n );\n\n const executeValidation = React.useCallback(\n async (\n name: InternalFieldName<TFieldValues>,\n skipReRender?: boolean | null,\n ): Promise<boolean> => {\n if (process.env.NODE_ENV !== 'production') {\n if (!fieldsRef.current[name]) {\n console.warn('📋 Field is missing with `name` attribute: ', name);\n return false;\n }\n }\n\n const error = (\n await validateField<TFieldValues>(\n fieldsRef,\n isValidateAllFieldCriteria,\n fieldsRef.current[name] as Field,\n shallowFieldsStateRef,\n )\n )[name];\n\n shouldRenderBaseOnError(name, error, skipReRender);\n\n return isUndefined(error);\n },\n [shouldRenderBaseOnError, isValidateAllFieldCriteria],\n );\n\n const executeSchemaOrResolverValidation = React.useCallback(\n async (\n names:\n | InternalFieldName<TFieldValues>\n | InternalFieldName<TFieldValues>[],\n ) => {\n const { errors } = await resolverRef.current!(\n getValues(),\n contextRef.current,\n isValidateAllFieldCriteria,\n );\n const previousFormIsValid = formStateRef.current.isValid;\n\n if (Array.isArray(names)) {\n const isInputsValid = names\n .map((name) => {\n const error = get(errors, name);\n\n error\n ? set(formStateRef.current.errors, name, error)\n : unset(formStateRef.current.errors, name);\n\n return !error;\n })\n .every(Boolean);\n\n updateFormState({\n isValid: isEmptyObject(errors),\n isValidating: false,\n });\n\n return isInputsValid;\n } else {\n const error = get(errors, names);\n\n shouldRenderBaseOnError(\n names,\n error,\n previousFormIsValid !== isEmptyObject(errors),\n {},\n isEmptyObject(errors),\n );\n\n return !error;\n }\n },\n [shouldRenderBaseOnError, isValidateAllFieldCriteria],\n );\n\n const trigger = React.useCallback(\n async (\n name?: FieldName<TFieldValues> | FieldName<TFieldValues>[],\n ): Promise<boolean> => {\n const fields = name || Object.keys(fieldsRef.current);\n\n updateIsValidating();\n\n if (resolverRef.current) {\n return executeSchemaOrResolverValidation(fields);\n }\n\n if (Array.isArray(fields)) {\n !name && (formStateRef.current.errors = {});\n const result = await Promise.all(\n fields.map(async (data) => await executeValidation(data, null)),\n );\n updateFormState({\n isValidating: false,\n });\n return result.every(Boolean);\n }\n\n return await executeValidation(fields);\n },\n [executeSchemaOrResolverValidation, executeValidation],\n );\n\n const setInternalValues = React.useCallback(\n (\n name: FieldName<TFieldValues>,\n value: SetFieldValue<TFieldValues>,\n { shouldDirty, shouldValidate }: SetValueConfig,\n ) => {\n const data = {};\n set(data, name, value);\n\n for (const fieldName of getPath(name, value)) {\n if (fieldsRef.current[fieldName]) {\n setFieldValue(fieldName, get(data, fieldName));\n shouldDirty && updateAndGetDirtyState(fieldName);\n shouldValidate && trigger(fieldName as FieldName<TFieldValues>);\n }\n }\n },\n [trigger, setFieldValue, updateAndGetDirtyState],\n );\n\n const setInternalValue = React.useCallback(\n (\n name: FieldName<TFieldValues>,\n value: SetFieldValue<TFieldValues>,\n config: SetValueConfig,\n ) => {\n !shouldUnregister &&\n !isPrimitive(value) &&\n set(\n shallowFieldsStateRef.current,\n name,\n Array.isArray(value) ? [...value] : { ...value },\n );\n\n if (fieldsRef.current[name]) {\n setFieldValue(name, value);\n config.shouldDirty && updateAndGetDirtyState(name);\n config.shouldValidate && trigger(name as any);\n } else if (!isPrimitive(value)) {\n setInternalValues(name, value, config);\n\n if (fieldArrayNamesRef.current.has(name)) {\n const parentName = getNodeParentName(name) || name;\n set(fieldArrayDefaultValuesRef.current, name, value);\n\n resetFieldArrayFunctionRef.current[parentName]({\n [parentName]: get(fieldArrayDefaultValuesRef.current, parentName),\n } as UnpackNestedValue<DeepPartial<TFieldValues>>);\n\n if (\n (readFormStateRef.current.isDirty ||\n readFormStateRef.current.dirtyFields) &&\n config.shouldDirty\n ) {\n set(\n formStateRef.current.dirtyFields,\n name,\n setFieldArrayDirtyFields(\n value,\n get(defaultValuesRef.current, name, []),\n get(formStateRef.current.dirtyFields, name, []),\n ),\n );\n\n updateFormState({\n isDirty: !deepEqual(\n { ...getValues(), [name]: value },\n defaultValuesRef.current,\n ),\n });\n }\n }\n }\n\n !shouldUnregister && set(shallowFieldsStateRef.current, name, value);\n },\n [updateAndGetDirtyState, setFieldValue, setInternalValues],\n );\n\n const isFieldWatched = <T extends FieldName<TFieldValues>>(name: T) =>\n isWatchAllRef.current ||\n watchFieldsRef.current.has(name) ||\n watchFieldsRef.current.has((name.match(/\\w+/) || [])[0]);\n\n const renderWatchedInputs = <T extends FieldName<FieldValues>>(\n name: T,\n ): boolean => {\n let found = true;\n\n if (!isEmptyObject(useWatchFieldsRef.current)) {\n for (const key in useWatchFieldsRef.current) {\n if (\n !name ||\n !useWatchFieldsRef.current[key].size ||\n useWatchFieldsRef.current[key].has(name) ||\n useWatchFieldsRef.current[key].has(getNodeParentName(name))\n ) {\n useWatchRenderFunctionsRef.current[key]();\n found = false;\n }\n }\n }\n\n return found;\n };\n\n function setValue(\n name: FieldName<TFieldValues>,\n value: SetFieldValue<TFieldValues>,\n config?: SetValueConfig,\n ): void {\n setInternalValue(name, value, config || {});\n isFieldWatched(name) && updateFormState();\n renderWatchedInputs(name);\n }\n\n handleChangeRef.current = handleChangeRef.current\n ? handleChangeRef.current\n : async ({ type, target }: Event): Promise<void | boolean> => {\n let name = (target as Ref)!.name;\n const field = fieldsRef.current[name];\n let error;\n let isValid;\n\n if (field) {\n const isBlurEvent = type === EVENTS.BLUR;\n const shouldSkipValidation = skipValidation({\n isBlurEvent,\n isReValidateOnChange,\n isReValidateOnBlur,\n isTouched: !!get(formStateRef.current.touched, name),\n isSubmitted: formStateRef.current.isSubmitted,\n ...modeRef.current,\n });\n let state = updateAndGetDirtyState(name, false);\n let shouldRender =\n !isEmptyObject(state) ||\n (!isBlurEvent && isFieldWatched(name as FieldName<TFieldValues>));\n\n if (\n isBlurEvent &&\n !get(formStateRef.current.touched, name) &&\n readFormStateRef.current.touched\n ) {\n set(formStateRef.current.touched, name, true);\n state = {\n ...state,\n touched: formStateRef.current.touched,\n };\n }\n\n if (!shouldUnregister && isCheckBoxInput(target as Ref)) {\n set(\n shallowFieldsStateRef.current,\n name,\n getFieldValue(fieldsRef, name),\n );\n }\n\n if (shouldSkipValidation) {\n !isBlurEvent && renderWatchedInputs(name);\n return (\n (!isEmptyObject(state) ||\n (shouldRender && isEmptyObject(state))) &&\n updateFormState(state)\n );\n }\n\n updateIsValidating();\n\n if (resolverRef.current) {\n const { errors } = await resolverRef.current(\n getValues(),\n contextRef.current,\n isValidateAllFieldCriteria,\n );\n const previousFormIsValid = formStateRef.current.isValid;\n error = get(errors, name);\n\n if (\n isCheckBoxInput(target as Ref) &&\n !error &&\n resolverRef.current\n ) {\n const parentNodeName = getNodeParentName(name);\n const currentError = get(errors, parentNodeName, {});\n currentError.type &&\n currentError.message &&\n (error = currentError);\n\n if (\n parentNodeName &&\n (currentError ||\n get(formStateRef.current.errors, parentNodeName))\n ) {\n name = parentNodeName;\n }\n }\n\n isValid = isEmptyObject(errors);\n\n previousFormIsValid !== isValid && (shouldRender = true);\n } else {\n error = (\n await validateField<TFieldValues>(\n fieldsRef,\n isValidateAllFieldCriteria,\n field,\n shallowFieldsStateRef,\n )\n )[name];\n }\n\n !isBlurEvent && renderWatchedInputs(name);\n shouldRenderBaseOnError(name, error, shouldRender, state, isValid);\n }\n };\n\n function setFieldArrayDefaultValues<T extends FieldValues>(data: T): T {\n if (!shouldUnregister) {\n let copy = cloneObject(data);\n\n for (const value of fieldArrayNamesRef.current) {\n if (isKey(value) && !copy[value]) {\n copy = {\n ...copy,\n [value]: [],\n };\n }\n }\n\n return copy;\n }\n return data;\n }\n\n function getValues(): UnpackNestedValue<TFieldValues>;\n function getValues<TFieldName extends string, TFieldValue extends unknown>(\n name: TFieldName,\n ): TFieldName extends keyof TFieldValues\n ? UnpackNestedValue<TFieldValues>[TFieldName]\n : TFieldValue;\n function getValues<TFieldName extends keyof TFieldValues>(\n names: TFieldName[],\n ): UnpackNestedValue<Pick<TFieldValues, TFieldName>>;\n function getValues(payload?: string | string[]): unknown {\n if (isString(payload)) {\n return getFieldValue(fieldsRef, payload, shallowFieldsStateRef);\n }\n\n if (Array.isArray(payload)) {\n const data = {};\n\n for (const name of payload) {\n set(data, name, getFieldValue(fieldsRef, name, shallowFieldsStateRef));\n }\n\n return data;\n }\n\n return setFieldArrayDefaultValues(\n getFieldsValues(\n fieldsRef,\n cloneObject(shallowFieldsStateRef.current),\n shouldUnregister,\n ),\n );\n }\n\n const validateResolver = React.useCallback(\n async (values = {}) => {\n const newDefaultValues = isEmptyObject(fieldsRef.current)\n ? defaultValuesRef.current\n : {};\n\n const { errors } =\n (await resolverRef.current!(\n {\n ...newDefaultValues,\n ...getValues(),\n ...values,\n },\n contextRef.current,\n isValidateAllFieldCriteria,\n )) || {};\n const isValid = isEmptyObject(errors);\n\n formStateRef.current.isValid !== isValid &&\n updateFormState({\n isValid,\n });\n },\n [isValidateAllFieldCriteria],\n );\n\n const removeFieldEventListener = React.useCallback(\n (field: Field, forceDelete?: boolean) => {\n findRemovedFieldAndRemoveListener(\n fieldsRef,\n handleChangeRef.current!,\n field,\n shallowFieldsStateRef,\n shouldUnregister,\n forceDelete,\n );\n\n if (shouldUnregister) {\n unset(validFieldsRef.current, field.ref.name);\n unset(fieldsWithValidationRef.current, field.ref.name);\n }\n },\n [shouldUnregister],\n );\n\n const updateWatchedValue = React.useCallback((name: string) => {\n if (isWatchAllRef.current) {\n updateFormState();\n } else {\n for (const watchField of watchFieldsRef.current) {\n if (watchField.startsWith(name)) {\n updateFormState();\n break;\n }\n }\n\n renderWatchedInputs(name);\n }\n }, []);\n\n const removeFieldEventListenerAndRef = React.useCallback(\n (field?: Field, forceDelete?: boolean) => {\n if (field) {\n removeFieldEventListener(field, forceDelete);\n\n if (shouldUnregister && !compact(field.options || []).length) {\n unset(formStateRef.current.errors, field.ref.name);\n set(formStateRef.current.dirtyFields, field.ref.name, true);\n\n updateFormState({\n isDirty: isFormDirty(),\n });\n\n readFormStateRef.current.isValid &&\n resolverRef.current &&\n validateResolver();\n updateWatchedValue(field.ref.name);\n }\n }\n },\n [validateResolver, removeFieldEventListener],\n );\n\n function clearErrors(\n name?: FieldName<TFieldValues> | FieldName<TFieldValues>[],\n ): void {\n name &&\n (Array.isArray(name) ? name : [name]).forEach((inputName) =>\n fieldsRef.current[inputName] && isKey(inputName)\n ? delete formStateRef.current.errors[inputName]\n : unset(formStateRef.current.errors, inputName),\n );\n\n updateFormState({\n errors: name ? formStateRef.current.errors : {},\n });\n }\n\n function setError(name: FieldName<TFieldValues>, error: ErrorOption) {\n const ref = (fieldsRef.current[name] || {})!.ref;\n\n set(formStateRef.current.errors, name, {\n ...error,\n ref,\n });\n\n updateFormState({\n isValid: false,\n });\n\n error.shouldFocus && ref && ref.focus && ref.focus();\n }\n\n const watchInternal = React.useCallback(\n <T>(fieldNames?: string | string[], defaultValue?: T, watchId?: string) => {\n const watchFields = watchId\n ? useWatchFieldsRef.current[watchId]\n : watchFieldsRef.current;\n let fieldValues = getFieldsValues<TFieldValues>(\n fieldsRef,\n cloneObject(shallowFieldsStateRef.current),\n shouldUnregister,\n false,\n fieldNames,\n );\n\n if (isString(fieldNames)) {\n const parentNodeName = getNodeParentName(fieldNames) || fieldNames;\n\n if (fieldArrayNamesRef.current.has(parentNodeName)) {\n fieldValues = {\n ...fieldArrayValuesRef.current,\n ...fieldValues,\n };\n }\n\n return assignWatchFields<TFieldValues>(\n fieldValues,\n fieldNames,\n watchFields,\n isUndefined(get(defaultValuesRef.current, fieldNames))\n ? defaultValue\n : get(defaultValuesRef.current, fieldNames),\n true,\n );\n }\n\n const combinedDefaultValues = isUndefined(defaultValue)\n ? defaultValuesRef.current\n : defaultValue;\n\n if (Array.isArray(fieldNames)) {\n return fieldNames.reduce(\n (previous, name) => ({\n ...previous,\n [name]: assignWatchFields<TFieldValues>(\n fieldValues,\n name,\n watchFields,\n combinedDefaultValues as UnpackNestedValue<\n DeepPartial<TFieldValues>\n >,\n ),\n }),\n {},\n );\n }\n\n isWatchAllRef.current = isUndefined(watchId);\n\n return transformToNestObject(\n (!isEmptyObject(fieldValues) && fieldValues) ||\n (combinedDefaultValues as FieldValues),\n );\n },\n [],\n );\n\n function watch(): UnpackNestedValue<TFieldValues>;\n function watch<\n TFieldName extends string,\n TFieldValue extends TFieldValues[TFieldName]\n >(\n name?: TFieldName,\n defaultValue?: UnpackNestedValue<LiteralToPrimitive<TFieldValue>>,\n ): UnpackNestedValue<LiteralToPrimitive<TFieldValue>>;\n function watch<TFieldName extends keyof TFieldValues>(\n names: TFieldName[],\n defaultValues?: UnpackNestedValue<\n DeepPartial<Pick<TFieldValues, TFieldName>>\n >,\n ): UnpackNestedValue<Pick<TFieldValues, TFieldName>>;\n function watch(\n names: string[],\n defaultValues?: UnpackNestedValue<DeepPartial<TFieldValues>>,\n ): UnpackNestedValue<DeepPartial<TFieldValues>>;\n function watch(\n fieldNames?: string | string[] | undefined,\n defaultValue?: unknown,\n ): unknown {\n return watchInternal(fieldNames, defaultValue);\n }\n\n function unregister(\n name: FieldName<TFieldValues> | FieldName<TFieldValues>[],\n ): void {\n for (const fieldName of Array.isArray(name) ? name : [name]) {\n removeFieldEventListenerAndRef(fieldsRef.current[fieldName], true);\n }\n }\n\n function registerFieldRef<TFieldElement extends FieldElement<TFieldValues>>(\n ref: TFieldElement & Ref,\n options: RegisterOptions | null = {},\n ): ((name: InternalFieldName<TFieldValues>) => void) | void {\n if (process.env.NODE_ENV !== 'production') {\n if (!ref.name) {\n return console.warn(\n '📋 Field is missing `name` attribute',\n ref,\n `https://react-hook-form.com/api#useForm`,\n );\n }\n\n if (\n fieldArrayNamesRef.current.has(ref.name.split(/\\[\\d+\\]$/)[0]) &&\n !RegExp(\n `^${ref.name.split(/\\[\\d+\\]$/)[0]}[\\\\d+].\\\\w+`\n .replace(/\\[/g, '\\\\[')\n .replace(/\\]/g, '\\\\]'),\n ).test(ref.name)\n ) {\n return console.warn(\n '📋 `name` prop should be in object shape: name=\"test[index].name\"',\n ref,\n 'https://react-hook-form.com/api#useFieldArray',\n );\n }\n }\n\n const { name, type, value } = ref;\n const fieldRefAndValidationOptions = {\n ref,\n ...options,\n };\n const fields = fieldsRef.current;\n const isRadioOrCheckbox = isRadioOrCheckboxFunction(ref);\n const isFieldArray = isNameInFieldArray(fieldArrayNamesRef.current, name);\n const compareRef = (currentRef: Ref) =>\n isWeb && (!isHTMLElement(ref) || currentRef === ref);\n let field = fields[name] as Field;\n let isEmptyDefaultValue = true;\n let defaultValue;\n\n if (\n field &&\n (isRadioOrCheckbox\n ? Array.isArray(field.options) &&\n compact(field.options).find((option) => {\n return value === option.ref.value && compareRef(option.ref);\n })\n : compareRef(field.ref))\n ) {\n fields[name] = {\n ...field,\n ...options,\n };\n return;\n }\n\n if (type) {\n field = isRadioOrCheckbox\n ? {\n options: [\n ...compact((field && field.options) || []),\n {\n ref,\n } as RadioOrCheckboxOption,\n ],\n ref: { type, name },\n ...options,\n }\n : {\n ...fieldRefAndValidationOptions,\n };\n } else {\n field = fieldRefAndValidationOptions;\n }\n\n fields[name] = field;\n\n const isEmptyUnmountFields = isUndefined(\n get(shallowFieldsStateRef.current, name),\n );\n\n if (!isEmptyObject(defaultValuesRef.current) || !isEmptyUnmountFields) {\n defaultValue = get(\n isEmptyUnmountFields\n ? defaultValuesRef.current\n : shallowFieldsStateRef.current,\n name,\n );\n isEmptyDefaultValue = isUndefined(defaultValue);\n\n if (!isEmptyDefaultValue && !isFieldArray) {\n setFieldValue(name as FieldName<TFieldValues>, defaultValue);\n }\n }\n\n if (!isEmptyObject(options)) {\n set(fieldsWithValidationRef.current, name, true);\n\n if (!isOnSubmit && readFormStateRef.current.isValid) {\n validateField(\n fieldsRef,\n isValidateAllFieldCriteria,\n field,\n shallowFieldsStateRef,\n ).then((error: FieldErrors) => {\n const previousFormIsValid = formStateRef.current.isValid;\n\n isEmptyObject(error)\n ? set(validFieldsRef.current, name, true)\n : unset(validFieldsRef.current, name);\n\n previousFormIsValid !== isEmptyObject(error) && updateFormState();\n });\n }\n }\n\n if (shouldUnregister && !(isFieldArray && isEmptyDefaultValue)) {\n !isFieldArray && unset(formStateRef.current.dirtyFields, name);\n }\n\n if (type) {\n attachEventListeners(\n isRadioOrCheckbox && field.options\n ? field.options[field.options.length - 1]\n : field,\n isRadioOrCheckbox || isSelectInput(ref),\n handleChangeRef.current,\n );\n }\n }\n\n function register<TFieldElement extends FieldElement<TFieldValues>>(\n options?: RegisterOptions,\n ): (ref: (TFieldElement & Ref) | null) => void;\n function register(\n name: FieldName<TFieldValues>,\n options?: RegisterOptions,\n ): void;\n function register<TFieldElement extends FieldElement<TFieldValues>>(\n ref: (TFieldElement & Ref) | null,\n options?: RegisterOptions,\n ): void;\n function register<TFieldElement extends FieldElement<TFieldValues>>(\n refOrRegisterOptions?:\n | FieldName<TFieldValues>\n | RegisterOptions\n | (TFieldElement & Ref)\n | null,\n options?: RegisterOptions,\n ): ((ref: (TFieldElement & Ref) | null) => void) | void {\n if (!isWindowUndefined) {\n if (isString(refOrRegisterOptions)) {\n registerFieldRef({ name: refOrRegisterOptions }, options);\n } else if (\n isObject(refOrRegisterOptions) &&\n 'name' in refOrRegisterOptions\n ) {\n registerFieldRef(refOrRegisterOptions, options);\n } else {\n return (ref: (TFieldElement & Ref) | null) =>\n ref && registerFieldRef(ref, refOrRegisterOptions);\n }\n }\n }\n\n const handleSubmit = React.useCallback(\n <TSubmitFieldValues extends FieldValues = TFieldValues>(\n onValid: SubmitHandler<TSubmitFieldValues>,\n onInvalid?: SubmitErrorHandler<TFieldValues>,\n ) => async (e?: React.BaseSyntheticEvent): Promise<void> => {\n if (e && e.preventDefault) {\n e.preventDefault();\n e.persist();\n }\n let fieldErrors: FieldErrors<TFieldValues> = {};\n let fieldValues = setFieldArrayDefaultValues(\n getFieldsValues(\n fieldsRef,\n cloneObject(shallowFieldsStateRef.current),\n shouldUnregister,\n true,\n ),\n );\n\n readFormStateRef.current.isSubmitting &&\n updateFormState({\n isSubmitting: true,\n });\n\n try {\n if (resolverRef.current) {\n const { errors, values } = await resolverRef.current(\n fieldValues,\n contextRef.current,\n isValidateAllFieldCriteria,\n );\n formStateRef.current.errors = fieldErrors = errors;\n fieldValues = values;\n } else {\n for (const field of Object.values(fieldsRef.current)) {\n if (field) {\n const { name } = field.ref;\n\n const fieldError = await validateField(\n fieldsRef,\n isValidateAllFieldCriteria,\n field,\n shallowFieldsStateRef,\n );\n\n if (fieldError[name]) {\n set(fieldErrors, name, fieldError[name]);\n unset(validFieldsRef.current, name);\n } else if (get(fieldsWithValidationRef.current, name)) {\n unset(formStateRef.current.errors, name);\n set(validFieldsRef.current, name, true);\n }\n }\n }\n }\n\n if (\n isEmptyObject(fieldErrors) &&\n Object.keys(formStateRef.current.errors).every(\n (name) => name in fieldsRef.current,\n )\n ) {\n updateFormState({\n errors: {},\n isSubmitting: true,\n });\n await onValid(fieldValues, e);\n } else {\n formStateRef.current.errors = {\n ...formStateRef.current.errors,\n ...fieldErrors,\n };\n onInvalid && (await onInvalid(formStateRef.current.errors, e));\n shouldFocusError &&\n focusOnErrorField(fieldsRef.current, formStateRef.current.errors);\n }\n } finally {\n formStateRef.current.isSubmitting = false;\n updateFormState({\n isSubmitted: true,\n isSubmitting: false,\n isSubmitSuccessful: isEmptyObject(formStateRef.current.errors),\n submitCount: formStateRef.current.submitCount + 1,\n });\n }\n },\n [shouldFocusError, isValidateAllFieldCriteria],\n );\n\n const resetRefs = ({\n errors,\n isDirty,\n isSubmitted,\n touched,\n isValid,\n submitCount,\n dirtyFields,\n }: OmitResetState) => {\n if (!isValid) {\n validFieldsRef.current = {};\n fieldsWithValidationRef.current = {};\n }\n\n fieldArrayDefaultValuesRef.current = {};\n watchFieldsRef.current = new Set();\n isWatchAllRef.current = false;\n\n updateFormState({\n submitCount: submitCount ? formStateRef.current.submitCount : 0,\n isDirty: isDirty ? formStateRef.current.isDirty : false,\n isSubmitted: isSubmitted ? formStateRef.current.isSubmitted : false,\n isValid: isValid ? formStateRef.current.isValid : false,\n dirtyFields: dirtyFields ? formStateRef.current.dirtyFields : {},\n touched: touched ? formStateRef.current.touched : {},\n errors: errors ? formStateRef.current.errors : {},\n isSubmitting: false,\n isSubmitSuccessful: false,\n });\n };\n\n const reset = (\n values?: DefaultValues<TFieldValues>,\n omitResetState: OmitResetState = {},\n ): void => {\n if (isWeb) {\n for (const field of Object.values(fieldsRef.current)) {\n if (field) {\n const { ref, options } = field;\n const inputRef =\n isRadioOrCheckboxFunction(ref) && Array.isArray(options)\n ? options[0].ref\n : ref;\n\n if (isHTMLElement(inputRef)) {\n try {\n inputRef.closest('form')!.reset();\n break;\n } catch {}\n }\n }\n }\n }\n\n fieldsRef.current = {};\n defaultValuesRef.current = { ...(values || defaultValuesRef.current) };\n values && renderWatchedInputs('');\n\n Object.values(resetFieldArrayFunctionRef.current).forEach(\n (resetFieldArray) => isFunction(resetFieldArray) && resetFieldArray(),\n );\n\n shallowFieldsStateRef.current = shouldUnregister\n ? {}\n : cloneObject(values || defaultValuesRef.current);\n\n resetRefs(omitResetState);\n };\n\n React.useEffect(() => {\n resolver && readFormStateRef.current.isValid && validateResolver();\n observerRef.current =\n observerRef.current || !isWeb\n ? observerRef.current\n : onDomRemove(fieldsRef, removeFieldEventListenerAndRef);\n }, [removeFieldEventListenerAndRef, defaultValuesRef.current]);\n\n React.useEffect(\n () => () => {\n observerRef.current && observerRef.current.disconnect();\n isUnMount.current = true;\n\n if (process.env.NODE_ENV !== 'production') {\n return;\n }\n\n Object.values(fieldsRef.current).forEach((field) =>\n removeFieldEventListenerAndRef(field, true),\n );\n },\n [],\n );\n\n if (!resolver && readFormStateRef.current.isValid) {\n formState.isValid =\n deepEqual(validFieldsRef.current, fieldsWithValidationRef.current) &&\n isEmptyObject(formStateRef.current.errors);\n }\n\n const commonProps = {\n trigger,\n setValue: React.useCallback(setValue, [setInternalValue, trigger]),\n getValues: React.useCallback(getValues, []),\n register: React.useCallback(register, [defaultValuesRef.current]),\n unregister: React.useCallback(unregister, []),\n formState: isProxyEnabled\n ? new Proxy(formState, {\n get: (obj, prop: keyof FormStateProxy) => {\n if (process.env.NODE_ENV !== 'production') {\n if (prop === 'isValid' && isOnSubmit) {\n console.warn(\n '📋 `formState.isValid` is applicable with `onTouched`, `onChange` or `onBlur` mode. https://react-hook-form.com/api#formState',\n );\n }\n }\n\n if (prop in obj) {\n readFormStateRef.current[prop] = true;\n return obj[prop];\n }\n\n return undefined;\n },\n })\n : formState,\n };\n\n const control = React.useMemo(\n () => ({\n isFormDirty,\n updateWatchedValue,\n shouldUnregister,\n updateFormState,\n removeFieldEventListener,\n watchInternal,\n mode: modeRef.current,\n reValidateMode: {\n isReValidateOnBlur,\n isReValidateOnChange,\n },\n validateResolver: resolver ? validateResolver : undefined,\n fieldsRef,\n resetFieldArrayFunctionRef,\n useWatchFieldsRef,\n useWatchRenderFunctionsRef,\n fieldArrayDefaultValuesRef,\n validFieldsRef,\n fieldsWithValidationRef,\n fieldArrayNamesRef,\n readFormStateRef,\n formStateRef,\n defaultValuesRef,\n shallowFieldsStateRef,\n fieldArrayValuesRef,\n ...commonProps,\n }),\n [\n defaultValuesRef.current,\n updateWatchedValue,\n shouldUnregister,\n removeFieldEventListener,\n watchInternal,\n ],\n );\n\n return {\n watch,\n control,\n handleSubmit,\n reset: React.useCallback(reset, []),\n clearErrors: React.useCallback(clearErrors, []),\n setError: React.useCallback(setError, []),\n errors: formState.errors,\n ...commonProps,\n };\n}\n","import * as React from 'react';\nimport { UseFormMethods, FieldValues, FormProviderProps } from './types';\n\nconst FormContext = React.createContext<UseFormMethods | null>(null);\n\nFormContext.displayName = 'RHFContext';\n\nexport const useFormContext = <\n TFieldValues extends FieldValues\n>(): UseFormMethods<TFieldValues> =>\n React.useContext(FormContext) as UseFormMethods<TFieldValues>;\n\nexport const FormProvider = <TFieldValues extends FieldValues>({\n children,\n ...props\n}: FormProviderProps<TFieldValues>) => (\n <FormContext.Provider value={{ ...props } as UseFormMethods}>\n {children}\n </FormContext.Provider>\n);\n","import { UNDEFINED } from '../constants';\n\nexport default () => {\n const d =\n typeof performance === UNDEFINED ? Date.now() : performance.now() * 1000;\n\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16 + d) % 16 | 0;\n\n return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);\n });\n};\n","import isUndefined from './isUndefined';\nimport compact from './compact';\n\nfunction removeAtIndexes<T>(data: T[], indexes: number[]): T[] {\n let i = 0;\n const temp = [...data];\n\n for (const index of indexes) {\n temp.splice(index - i, 1);\n i++;\n }\n\n return compact(temp).length ? temp : [];\n}\n\nexport default <T>(data: T[], index?: number | number[]): T[] =>\n isUndefined(index)\n ? []\n : removeAtIndexes(\n data,\n (Array.isArray(index) ? index : [index]).sort((a, b) => a - b),\n );\n","import isUndefined from './isUndefined';\n\nexport default <T>(\n data: (T | undefined)[],\n from: number,\n to: number,\n): (T | undefined)[] => {\n if (Array.isArray(data)) {\n if (isUndefined(data[to])) {\n data[to] = undefined;\n }\n data.splice(to, 0, data.splice(from, 1)[0]);\n return data;\n }\n\n return [];\n};\n","export default <T>(data: T[], indexA: number, indexB: number): void => {\n const temp = [data[indexB], data[indexA]];\n data[indexA] = temp[0];\n data[indexB] = temp[1];\n};\n","export default function prepend<T>(data: T[]): (T | undefined)[];\nexport default function prepend<T>(data: T[], value: T | T[]): T[];\nexport default function prepend<T>(\n data: T[],\n value?: T | T[],\n): (T | undefined)[] {\n return [...(Array.isArray(value) ? value : [value || undefined]), ...data];\n}\n","export default function insert<T>(data: T[], index: number): (T | undefined)[];\nexport default function insert<T>(\n data: T[],\n index: number,\n value: T | T[],\n): T[];\nexport default function insert<T>(\n data: T[],\n index: number,\n value?: T | T[],\n): (T | undefined)[] {\n return [\n ...data.slice(0, index),\n ...(Array.isArray(value) ? value : [value || undefined]),\n ...data.slice(index),\n ];\n}\n","export default <T>(value: T | T[]): undefined[] | undefined =>\n Array.isArray(value) ? Array(value.length).fill(undefined) : undefined;\n","import isObject from './isObject';\n\nexport default <T>(value: T) =>\n ((Array.isArray(value) ? value : [value]) as T[]).map((data) => {\n if (isObject(data)) {\n const object: Record<string, boolean> = {};\n\n for (const key in data) {\n object[key] = true;\n }\n\n return object;\n }\n\n return true;\n });\n","import * as React from 'react';\nimport { useFormContext } from './useFormContext';\nimport setFieldArrayDirtyFields from './logic/setFieldArrayDirtyFields';\nimport { isMatchFieldArrayName } from './logic/isNameInFieldArray';\nimport generateId from './logic/generateId';\nimport getFieldArrayParentName from './logic/getNodeParentName';\nimport get from './utils/get';\nimport set from './utils/set';\nimport removeArrayAt from './utils/remove';\nimport unset from './utils/unset';\nimport moveArrayAt from './utils/move';\nimport swapArrayAt from './utils/swap';\nimport prependAt from './utils/prepend';\nimport insertAt from './utils/insert';\nimport fillEmptyArray from './utils/fillEmptyArray';\nimport fillBooleanArray from './utils/fillBooleanArray';\nimport compact from './utils/compact';\nimport cloneObject from './utils/cloneObject';\nimport {\n Field,\n FieldValues,\n UseFieldArrayOptions,\n Control,\n ArrayField,\n UnpackNestedValue,\n DeepPartial,\n UseFieldArrayMethods,\n} from './types';\n\nconst mapIds = <\n TFieldArrayValues extends FieldValues = FieldValues,\n TKeyName extends string = 'id'\n>(\n values: Partial<TFieldArrayValues>[] = [],\n keyName: TKeyName,\n skipWarn?: boolean,\n): Partial<ArrayField<TFieldArrayValues, TKeyName>>[] => {\n if (process.env.NODE_ENV !== 'production') {\n if (!skipWarn) {\n for (const value of values) {\n if (typeof value === 'object') {\n if (keyName in value) {\n console.warn(\n `📋 useFieldArray fieldValues contain the keyName \\`${keyName}\\` which is reserved for use by useFieldArray. https://react-hook-form.com/api#useFieldArray`,\n );\n\n break;\n }\n } else {\n console.warn(\n `📋 useFieldArray input's name should be in object shape instead of flat array. https://react-hook-form.com/api#useFieldArray`,\n );\n\n break;\n }\n }\n }\n }\n\n return values.map((value: Partial<TFieldArrayValues>) => ({\n [keyName]: value[keyName] || generateId(),\n ...value,\n }));\n};\n\nexport const useFieldArray = <\n TFieldArrayValues extends FieldValues = FieldValues,\n TKeyName extends string = 'id',\n TControl extends Control = Control\n>({\n control,\n name,\n keyName = 'id' as TKeyName,\n}: UseFieldArrayOptions<TKeyName, TControl>): UseFieldArrayMethods<\n TFieldArrayValues,\n TKeyName\n> => {\n const methods = useFormContext();\n\n if (process.env.NODE_ENV !== 'production') {\n if (!control && !methods) {\n throw new Error(\n '📋 useFieldArray is missing `control` prop. https://react-hook-form.com/api#useFieldArray',\n );\n }\n }\n\n const focusIndexRef = React.useRef(-1);\n const isUnMount = React.useRef(false);\n const {\n isFormDirty,\n updateWatchedValue,\n resetFieldArrayFunctionRef,\n fieldArrayNamesRef,\n fieldsRef,\n defaultValuesRef,\n removeFieldEventListener,\n formStateRef,\n shallowFieldsStateRef,\n updateFormState,\n readFormStateRef,\n validFieldsRef,\n fieldsWithValidationRef,\n fieldArrayDefaultValuesRef,\n validateResolver,\n getValues,\n shouldUnregister,\n fieldArrayValuesRef,\n } = control || methods.control;\n\n const getDefaultValues = <T>(values: T) =>\n get(shouldUnregister ? values : shallowFieldsStateRef.current, name, []);\n\n const fieldArrayParentName = getFieldArrayParentName(name);\n const memoizedDefaultValues = React.useRef<Partial<TFieldArrayValues>[]>([\n ...(get(fieldArrayDefaultValuesRef.current, fieldArrayParentName)\n ? getDefaultValues(fieldArrayDefaultValuesRef.current)\n : getDefaultValues(defaultValuesRef.current)),\n ]);\n const [fields, setFields] = React.useState<\n Partial<ArrayField<TFieldArrayValues, TKeyName>>[]\n >(mapIds(memoizedDefaultValues.current, keyName));\n set(fieldArrayValuesRef.current, name, compact(fields));\n\n const omitKey = <T extends (Partial<TFieldArrayValues> | undefined)[]>(\n fields: T,\n ) => fields.map(({ [keyName]: omitted, ...rest } = {}) => rest);\n\n fieldArrayNamesRef.current.add(name);\n\n const getFieldArrayValue = React.useCallback(\n () => get(fieldArrayValuesRef.current, name, []),\n [name],\n );\n\n const getCurrentFieldsValues = () =>\n mapIds<TFieldArrayValues, TKeyName>(\n get(getValues(), name, getFieldArrayValue()).map(\n (item: Partial<TFieldArrayValues>, index: number) => ({\n ...getFieldArrayValue()[index],\n ...item,\n }),\n ),\n keyName,\n true,\n );\n\n fieldArrayNamesRef.current.add(name);\n\n if (\n fieldArrayParentName &&\n !get(fieldArrayDefaultValuesRef.current, fieldArrayParentName)\n ) {\n set(\n fieldArrayDefaultValuesRef.current,\n fieldArrayParentName,\n cloneObject(get(defaultValuesRef.current, fieldArrayParentName)),\n );\n }\n\n const setFieldAndValidState = (\n fieldsValues: Partial<ArrayField<TFieldArrayValues, TKeyName>>[],\n ) => {\n setFields(fieldsValues);\n set(fieldArrayValuesRef.current, name, fieldsValues);\n\n if (readFormStateRef.current.isValid && validateResolver) {\n const values = getValues();\n set(values, name, fieldsValues);\n validateResolver(values);\n }\n };\n\n const resetFields = () => {\n for (const key in fieldsRef.current) {\n if (isMatchFieldArrayName(key, name)) {\n removeFieldEventListener(fieldsRef.current[key] as Field, true);\n delete fieldsRef.current[key];\n }\n }\n };\n\n const cleanup = <T>(ref: T) =>\n !compact(get(ref, name, [])).length && unset(ref, name);\n\n const updateDirtyFieldsWithDefaultValues = <\n T extends (Partial<TFieldArrayValues> | undefined)[]\n >(\n updatedFieldArrayValues?: T,\n ) => {\n if (updatedFieldArrayValues) {\n set(\n formStateRef.current.dirtyFields,\n name,\n setFieldArrayDirtyFields(\n omitKey(updatedFieldArrayValues),\n get(defaultValuesRef.current, name, []),\n get(formStateRef.current.dirtyFields, name, []),\n ),\n );\n }\n };\n\n const batchStateUpdate = <\n T extends Function,\n K extends (Partial<TFieldArrayValues> | undefined)[]\n >(\n method: T,\n args: {\n argA?: unknown;\n argB?: unknown;\n argC?: unknown;\n argD?: unknown;\n },\n updatedFieldValues?: K,\n updatedFormValues: (Partial<TFieldArrayValues> | undefined)[] = [],\n shouldSet = true,\n shouldUpdateValid = false,\n ) => {\n if (get(shallowFieldsStateRef.current, name)) {\n const output = method(\n get(shallowFieldsStateRef.current, name),\n args.argA,\n args.argB,\n );\n shouldSet && set(shallowFieldsStateRef.current, name, output);\n }\n\n if (get(fieldArrayDefaultValuesRef.current, name)) {\n const output = method(\n get(fieldArrayDefaultValuesRef.current, name),\n args.argA,\n args.argB,\n );\n shouldSet && set(fieldArrayDefaultValuesRef.current, name, output);\n }\n\n if (Array.isArray(get(formStateRef.current.errors, name))) {\n const output = method(\n get(formStateRef.current.errors, name),\n args.argA,\n args.argB,\n );\n shouldSet && set(formStateRef.current.errors, name, output);\n cleanup(formStateRef.current.errors);\n }\n\n if (\n readFormStateRef.current.touched &&\n get(formStateRef.current.touched, name)\n ) {\n const output = method(\n get(formStateRef.current.touched, name),\n args.argA,\n args.argB,\n );\n shouldSet && set(formStateRef.current.touched, name, output);\n cleanup(formStateRef.current.touched);\n }\n\n if (\n readFormStateRef.current.dirtyFields ||\n readFormStateRef.current.isDirty\n ) {\n set(\n formStateRef.current.dirtyFields,\n name,\n setFieldArrayDirtyFields(\n omitKey(updatedFormValues),\n get(defaultValuesRef.current, name, []),\n get(formStateRef.current.dirtyFields, name, []),\n ),\n );\n updateDirtyFieldsWithDefaultValues(updatedFieldValues);\n cleanup(formStateRef.current.dirtyFields);\n }\n\n if (\n shouldUpdateValid &&\n readFormStateRef.current.isValid &&\n !validateResolver\n ) {\n set(\n validFieldsRef.current,\n name,\n method(get(validFieldsRef.current, name, []), args.argA),\n );\n cleanup(validFieldsRef.current);\n\n set(\n fieldsWithValidationRef.current,\n name,\n method(get(fieldsWithValidationRef.current, name, []), args.argA),\n );\n cleanup(fieldsWithValidationRef.current);\n }\n\n if (!isUnMount.current && readFormStateRef.current.isDirty) {\n updateFormState({\n isDirty: isFormDirty(name, omitKey(updatedFormValues)),\n });\n }\n };\n\n const append = (\n value: Partial<TFieldArrayValues> | Partial<TFieldArrayValues>[],\n shouldFocus = true,\n ) => {\n const appendValue = Array.isArray(value) ? value : [value];\n const updateFormValues = [\n ...getCurrentFieldsValues(),\n ...mapIds(appendValue, keyName),\n ];\n setFieldAndValidState(updateFormValues);\n\n if (\n readFormStateRef.current.dirtyFields ||\n readFormStateRef.current.isDirty\n ) {\n updateDirtyFieldsWithDefaultValues(updateFormValues);\n\n updateFormState({\n isDirty: true,\n dirtyFields: formStateRef.current.dirtyFields,\n });\n }\n\n !shouldUnregister &&\n set(shallowFieldsStateRef.current, name, [\n ...(get(shallowFieldsStateRef.current, name) || []),\n ...cloneObject(appendValue),\n ]);\n\n focusIndexRef.current = shouldFocus\n ? get(fieldArrayValuesRef.current, name).length - 1\n : -1;\n };\n\n const prepend = (\n value: Partial<TFieldArrayValues> | Partial<TFieldArrayValues>[],\n shouldFocus = true,\n ) => {\n const emptyArray = fillEmptyArray(value);\n const updatedFieldArrayValues = prependAt(\n getCurrentFieldsValues(),\n mapIds(Array.isArray(value) ? value : [value], keyName),\n );\n\n setFieldAndValidState(updatedFieldArrayValues);\n resetFields();\n batchStateUpdate(\n prependAt,\n {\n argA: emptyArray,\n argC: fillBooleanArray(value),\n },\n updatedFieldArrayValues,\n );\n focusIndexRef.current = shouldFocus ? 0 : -1;\n };\n\n const remove = (index?: number | number[]) => {\n const fieldValues = getCurrentFieldsValues();\n const updatedFieldValues: (\n | Partial<TFieldArrayValues>\n | undefined\n )[] = removeArrayAt(fieldValues, index);\n setFieldAndValidState(\n updatedFieldValues as Partial<ArrayField<TFieldArrayValues, TKeyName>>[],\n );\n resetFields();\n batchStateUpdate(\n removeArrayAt,\n {\n argA: index,\n argC: index,\n },\n updatedFieldValues,\n removeArrayAt(fieldValues, index),\n true,\n true,\n );\n };\n\n const insert = (\n index: number,\n value: Partial<TFieldArrayValues> | Partial<TFieldArrayValues>[],\n shouldFocus = true,\n ) => {\n const emptyArray = fillEmptyArray(value);\n const fieldValues = getCurrentFieldsValues();\n const updatedFieldArrayValues = insertAt(\n fieldValues,\n index,\n mapIds(Array.isArray(value) ? value : [value], keyName),\n );\n\n setFieldAndValidState(updatedFieldArrayValues);\n resetFields();\n batchStateUpdate(\n insertAt,\n {\n argA: index,\n argB: emptyArray,\n argC: index,\n argD: fillBooleanArray(value),\n },\n updatedFieldArrayValues,\n insertAt(fieldValues, index),\n );\n focusIndexRef.current = shouldFocus ? index : -1;\n };\n\n const swap = (indexA: number, indexB: number) => {\n const fieldValues = getCurrentFieldsValues();\n swapArrayAt(fieldValues, indexA, indexB);\n resetFields();\n setFieldAndValidState([...fieldValues]);\n batchStateUpdate(\n swapArrayAt,\n {\n argA: indexA,\n argB: indexB,\n argC: indexA,\n argD: indexB,\n },\n undefined,\n fieldValues,\n false,\n );\n };\n\n const move = (from: number, to: number) => {\n const fieldValues = getCurrentFieldsValues();\n moveArrayAt(fieldValues, from, to);\n resetFields();\n setFieldAndValidState([...fieldValues]);\n batchStateUpdate(\n moveArrayAt,\n {\n argA: from,\n argB: to,\n argC: from,\n argD: to,\n },\n undefined,\n fieldValues,\n false,\n );\n };\n\n React.useEffect(() => {\n if (process.env.NODE_ENV !== 'production') {\n if (!name) {\n console.warn(\n '📋 useFieldArray is missing `name` attribute. https://react-hook-form.com/api#useFieldArray',\n );\n }\n }\n\n const defaultValues = get(fieldArrayDefaultValuesRef.current, name);\n\n if (defaultValues && fields.length < defaultValues.length) {\n set(fieldArrayDefaultValuesRef.current, name, defaultValues.slice(1));\n }\n\n updateWatchedValue(name);\n\n if (focusIndexRef.current > -1) {\n for (const key in fieldsRef.current) {\n const field = fieldsRef.current[key];\n if (\n key.startsWith(`${name}[${focusIndexRef.current}]`) &&\n field!.ref.focus\n ) {\n field!.ref.focus();\n break;\n }\n }\n }\n\n focusIndexRef.current = -1;\n }, [fields, name]);\n\n React.useEffect(() => {\n const resetFunctions = resetFieldArrayFunctionRef.current;\n const fieldArrayNames = fieldArrayNamesRef.current;\n\n if (!getFieldArrayParentName(name)) {\n resetFunctions[name] = <TFieldValues>(\n data?: UnpackNestedValue<DeepPartial<TFieldValues>>,\n ) => {\n resetFields();\n !data && unset(fieldArrayDefaultValuesRef.current, name);\n unset(shallowFieldsStateRef.current, name);\n memoizedDefaultValues.current = get(\n data || defaultValuesRef.current,\n name,\n );\n if (!isUnMount.current) {\n setFields(mapIds(memoizedDefaultValues.current, keyName));\n }\n };\n }\n\n return () => {\n isUnMount.current = true;\n shouldUnregister && remove();\n resetFields();\n delete resetFunctions[name];\n unset(fieldArrayValuesRef.current, name);\n fieldArrayNames.delete(name);\n };\n }, []);\n\n return {\n swap: React.useCallback(swap, [name]),\n move: React.useCallback(move, [name]),\n prepend: React.useCallback(prepend, [name]),\n append: React.useCallback(append, [name]),\n remove: React.useCallback(remove, [name]),\n insert: React.useCallback(insert, [name]),\n fields: compact(fields),\n };\n};\n","import { useFormContext } from './useFormContext';\nimport isNameInFieldArray from './logic/isNameInFieldArray';\nimport isUndefined from './utils/isUndefined';\nimport get from './utils/get';\nimport * as React from 'react';\nimport isFunction from './utils/isFunction';\nimport skipValidation from './logic/skipValidation';\nimport getInputValue from './logic/getInputValue';\nimport set from './utils/set';\nimport {\n FieldValues,\n UseControllerOptions,\n UseControllerMethods,\n} from './types';\n\nexport function useController<TFieldValues extends FieldValues = FieldValues>({\n name,\n rules,\n defaultValue,\n control,\n onFocus,\n}: UseControllerOptions<TFieldValues>): UseControllerMethods<TFieldValues> {\n const methods = useFormContext<TFieldValues>();\n\n if (process.env.NODE_ENV !== 'production') {\n if (!control && !methods) {\n throw new Error(\n '📋 Controller is missing `control` prop. https://react-hook-form.com/api#Controller',\n );\n }\n }\n\n const {\n defaultValuesRef,\n setValue,\n register,\n unregister,\n trigger,\n mode,\n reValidateMode: { isReValidateOnBlur, isReValidateOnChange },\n formState,\n formStateRef: {\n current: { isSubmitted, touched, errors },\n },\n updateFormState,\n readFormStateRef,\n fieldsRef,\n fieldArrayNamesRef,\n shallowFieldsStateRef,\n } = control || methods.control;\n\n const isNotFieldArray = !isNameInFieldArray(fieldArrayNamesRef.current, name);\n const getInitialValue = () =>\n !isUndefined(get(shallowFieldsStateRef.current, name)) && isNotFieldArray\n ? get(shallowFieldsStateRef.current, name)\n : isUndefined(defaultValue)\n ? get(defaultValuesRef.current, name)\n : defaultValue;\n const [value, setInputStateValue] = React.useState(getInitialValue());\n const valueRef = React.useRef(value);\n const ref = React.useRef({\n focus: () => null,\n });\n const onFocusRef = React.useRef(\n onFocus ||\n (() => {\n if (isFunction(ref.current.focus)) {\n ref.current.focus();\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (!isFunction(ref.current.focus)) {\n console.warn(\n `📋 'ref' from Controller render prop must be attached to a React component or a DOM Element whose ref provides a 'focus()' method`,\n );\n }\n }\n }),\n );\n\n const shouldValidate = React.useCallback(\n (isBlurEvent?: boolean) =>\n !skipValidation({\n isBlurEvent,\n isReValidateOnBlur,\n isReValidateOnChange,\n isSubmitted,\n isTouched: !!get(touched, name),\n ...mode,\n }),\n [\n isReValidateOnBlur,\n isReValidateOnChange,\n isSubmitted,\n touched,\n name,\n mode,\n ],\n );\n\n const commonTask = React.useCallback(([event]: any[]) => {\n const data = getInputValue(event);\n setInputStateValue(data);\n valueRef.current = data;\n return data;\n }, []);\n\n const registerField = React.useCallback(\n (shouldUpdateValue?: boolean) => {\n if (process.env.NODE_ENV !== 'production') {\n if (!name) {\n return console.warn(\n '📋 Field is missing `name` prop. https://react-hook-form.com/api#Controller',\n );\n }\n }\n\n if (fieldsRef.current[name]) {\n fieldsRef.current[name] = {\n ref: fieldsRef.current[name]!.ref,\n ...rules,\n };\n } else {\n register(\n Object.defineProperties(\n {\n name,\n focus: onFocusRef.current,\n },\n {\n value: {\n set(data) {\n setInputStateValue(data);\n valueRef.current = data;\n },\n get() {\n return valueRef.current;\n },\n },\n },\n ),\n rules,\n );\n\n shouldUpdateValue = isUndefined(get(defaultValuesRef.current, name));\n }\n\n shouldUpdateValue &&\n isNotFieldArray &&\n setInputStateValue(getInitialValue());\n },\n [rules, name, register],\n );\n\n React.useEffect(() => () => unregister(name), [name]);\n\n React.useEffect(() => {\n if (process.env.NODE_ENV !== 'production') {\n if (isUndefined(value)) {\n console.warn(\n `📋 ${name} is missing in the 'defaultValue' prop of either its Controller (https://react-hook-form.com/api#Controller) or useForm (https://react-hook-form.com/api#useForm)`,\n );\n }\n\n if (!isNotFieldArray && isUndefined(defaultValue)) {\n console.warn(\n '📋 Controller is missing `defaultValue` prop when using `useFieldArray`. https://react-hook-form.com/api#Controller',\n );\n }\n }\n\n registerField();\n }, [registerField]);\n\n React.useEffect(() => {\n !fieldsRef.current[name] && registerField(true);\n });\n\n const onBlur = React.useCallback(() => {\n if (readFormStateRef.current.touched && !get(touched, name)) {\n set(touched, name, true);\n updateFormState({\n touched,\n });\n }\n\n shouldValidate(true) && trigger(name);\n }, [name, updateFormState, shouldValidate, trigger, readFormStateRef]);\n\n const onChange = React.useCallback(\n (...event: any[]) =>\n setValue(name, commonTask(event), {\n shouldValidate: shouldValidate(),\n shouldDirty: true,\n }),\n [setValue, name, shouldValidate],\n );\n\n return {\n field: {\n onChange,\n onBlur,\n name,\n value,\n ref,\n },\n meta: Object.defineProperties(\n {\n invalid: !!get(errors, name),\n },\n {\n isDirty: {\n get() {\n return !!get(formState.dirtyFields, name);\n },\n },\n isTouched: {\n get() {\n return !!get(formState.touched, name);\n },\n },\n },\n ),\n };\n}\n","import isUndefined from '../utils/isUndefined';\nimport isObject from '../utils/isObject';\nimport isPrimitive from '../utils/isPrimitive';\n\nexport default (event: any) =>\n isPrimitive(event) ||\n !isObject(event.target) ||\n (isObject(event.target) && !event.type)\n ? event\n : isUndefined(event.target.value)\n ? event.target.checked\n : event.target.value;\n","import * as React from 'react';\nimport { useController } from './useController';\nimport { ControllerProps, FieldValues } from './types';\n\ntype NativeInputs = 'input' | 'select' | 'textarea';\n\nconst Controller = <\n TAs extends React.ReactElement | React.ComponentType<any> | NativeInputs,\n TFieldValues extends FieldValues = FieldValues\n>(\n props: ControllerProps<TAs, TFieldValues>,\n) => {\n const { rules, as, render, defaultValue, control, onFocus, ...rest } = props;\n const { field, meta } = useController(props);\n\n const componentProps = {\n ...rest,\n ...field,\n };\n\n return as\n ? React.isValidElement(as)\n ? React.cloneElement(as, componentProps)\n : React.createElement(as as NativeInputs, componentProps as any)\n : render\n ? render(field, meta)\n : null;\n};\n\nexport { Controller };\n","import get from '../utils/get';\nimport isUndefined from '../utils/isUndefined';\nimport deepEqual from '../utils/deepEqual';\nimport {\n FieldValues,\n InternalFieldName,\n FieldErrors,\n FieldNamesMarkedBoolean,\n FieldError,\n} from '../types';\n\nexport default <TFieldValues extends FieldValues>({\n errors,\n name,\n error,\n validFields,\n fieldsWithValidation,\n}: {\n errors: FieldErrors<TFieldValues>;\n error: FieldError | undefined;\n name: InternalFieldName<TFieldValues>;\n validFields: FieldNamesMarkedBoolean<TFieldValues>;\n fieldsWithValidation: FieldNamesMarkedBoolean<TFieldValues>;\n}): boolean => {\n const isValid = isUndefined(error);\n const previousError = get(errors, name);\n\n return (\n (isValid && !!previousError) ||\n (!isValid && !deepEqual(previousError, error, true)) ||\n (isValid && get(fieldsWithValidation, name) && !get(validFields, name))\n );\n};\n","import isHTMLElement from '../utils/isHTMLElement';\nimport { EVENTS } from '../constants';\nimport { Field } from '../types';\n\nexport default function attachEventListeners(\n { ref }: Field,\n shouldAttachChangeEvent?: boolean,\n handleChange?: EventListenerOrEventListenerObject,\n): void {\n if (isHTMLElement(ref) && handleChange) {\n ref.addEventListener(\n shouldAttachChangeEvent ? EVENTS.CHANGE : EVENTS.INPUT,\n handleChange,\n );\n ref.addEventListener(EVENTS.BLUR, handleChange);\n }\n}\n","import { FieldElement } from '../types';\nimport { SELECT } from '../constants';\n\nexport default (element: FieldElement): element is HTMLSelectElement =>\n element.type === `${SELECT}-one`;\n","import get from '../utils/get';\nimport isUndefined from '../utils/isUndefined';\nimport { FieldErrors, FieldRefs } from '../types';\n\nexport default <TFieldValues>(\n fields: FieldRefs<TFieldValues>,\n fieldErrors: FieldErrors<TFieldValues>,\n) => {\n for (const key in fields) {\n if (get(fieldErrors, key)) {\n const field = fields[key];\n\n if (field) {\n if (field.ref.focus && isUndefined(field.ref.focus())) {\n break;\n } else if (field.options) {\n field.options[0].ref.focus();\n\n break;\n }\n }\n }\n }\n};\n","import * as React from 'react';\nimport { Field, FieldRefs } from '../types';\nimport isDetached from './isDetached';\n\nexport default function onDomRemove<TFieldValues>(\n fieldsRef: React.MutableRefObject<FieldRefs<TFieldValues>>,\n removeFieldEventListenerAndRef: (\n field: Field | undefined,\n forceDelete?: boolean,\n ) => void,\n): MutationObserver {\n const observer = new MutationObserver((): void => {\n for (const field of Object.values(fieldsRef.current)) {\n if (field && field.options) {\n for (const option of field.options) {\n if (option && option.ref && isDetached(option.ref)) {\n removeFieldEventListenerAndRef(field);\n }\n }\n } else if (field && isDetached(field.ref)) {\n removeFieldEventListenerAndRef(field);\n }\n }\n });\n\n observer.observe(window.document, {\n childList: true,\n subtree: true,\n });\n\n return observer;\n}\n","import * as React from 'react';\nimport { useFormContext } from './useFormContext';\nimport isUndefined from './utils/isUndefined';\nimport isString from './utils/isString';\nimport generateId from './logic/generateId';\nimport get from './utils/get';\nimport {\n DeepPartial,\n UseWatchOptions,\n FieldValues,\n UnpackNestedValue,\n Control,\n} from './types';\n\nexport function useWatch<TWatchFieldValues extends FieldValues>(props: {\n defaultValue?: UnpackNestedValue<DeepPartial<TWatchFieldValues>>;\n control?: Control;\n}): UnpackNestedValue<DeepPartial<TWatchFieldValues>>;\nexport function useWatch<TWatchFieldValue extends any>(props: {\n name: string;\n control?: Control;\n}): undefined | UnpackNestedValue<TWatchFieldValue>;\nexport function useWatch<TWatchFieldValue extends any>(props: {\n name: string;\n defaultValue: UnpackNestedValue<TWatchFieldValue>;\n control?: Control;\n}): UnpackNestedValue<TWatchFieldValue>;\nexport function useWatch<TWatchFieldValues extends FieldValues>(props: {\n name: string[];\n defaultValue?: UnpackNestedValue<DeepPartial<TWatchFieldValues>>;\n control?: Control;\n}): UnpackNestedValue<DeepPartial<TWatchFieldValues>>;\nexport function useWatch<TWatchFieldValues>({\n control,\n name,\n defaultValue,\n}: UseWatchOptions): TWatchFieldValues {\n const methods = useFormContext();\n\n if (process.env.NODE_ENV !== 'production') {\n if (!control && !methods) {\n throw new Error(\n '📋 useWatch is missing `control` prop. https://react-hook-form.com/api#useWatch',\n );\n }\n }\n\n const {\n useWatchFieldsRef,\n useWatchRenderFunctionsRef,\n watchInternal,\n defaultValuesRef,\n } = control || methods.control;\n const updateValue = React.useState<unknown>()[1];\n const idRef = React.useRef<string>();\n const defaultValueRef = React.useRef(defaultValue);\n\n React.useEffect(() => {\n if (process.env.NODE_ENV !== 'production') {\n if (name === '') {\n console.warn(\n '📋 useWatch is missing `name` attribute. https://react-hook-form.com/api#useWatch',\n );\n }\n }\n\n const id = (idRef.current = generateId());\n const watchFieldsHookRender = useWatchRenderFunctionsRef.current;\n const watchFieldsHook = useWatchFieldsRef.current;\n watchFieldsHook[id] = new Set();\n watchFieldsHookRender[id] = () => updateValue({});\n watchInternal(name, defaultValueRef.current, id);\n\n return () => {\n delete watchFieldsHook[id];\n delete watchFieldsHookRender[id];\n };\n }, [\n name,\n useWatchRenderFunctionsRef,\n useWatchFieldsRef,\n watchInternal,\n defaultValueRef,\n ]);\n\n return idRef.current\n ? watchInternal(name, defaultValueRef.current, idRef.current)\n : isUndefined(defaultValue)\n ? isString(name)\n ? get(defaultValuesRef.current, name)\n : Array.isArray(name)\n ? name.reduce(\n (previous, inputName) => ({\n ...previous,\n [inputName]: get(defaultValuesRef.current, inputName),\n }),\n {},\n )\n : defaultValuesRef.current\n : defaultValue;\n}\n"],"names":["value","HTMLElement","EVENTS","VALIDATION_MODE","UNDEFINED","INPUT_VALIDATION_RULES","isObjectType","isNullOrUndefined","Array","isArray","Date","test","filter","Boolean","input","compact","replace","split","set","object","path","index","tempPath","isKey","stringToPath","length","lastIndex","key","newValue","objValue","isObject","isNaN","data","val","undefined","obj","defaultValue","result","reduce","isUndefined","ref","validateWithStateUpdate","isHTMLElement","removeEventListener","defaultReturn","isValid","options","previous","option","checked","element","type","defaultResult","validResult","values","map","attributes","getFieldValue","fieldsRef","name","shallowFieldsStateRef","excludeDisabled","shouldKeepRawValue","field","current","disabled","valueAsNumber","valueAsDate","setValueAs","isFileInput","files","isRadioInput","getRadioValue","isMultipleSelect","selected","isCheckBox","getCheckboxValue","NaN","get","isDetached","nodeType","Node","DOCUMENT_NODE","parentNode","Object","keys","unset","updatePath","childObject","slice","baseGet","previousObjRef","k","objectRef","currentPaths","currentPathsLength","item","isEmptyObject","isBoolean","isSameRef","fieldValue","deepMerge","target","source","isPrimitive","targetValue","sourceValue","deepEqual","object1","object2","isErrorObject","React.isValidElement","keys1","keys2","val1","val2","setDirtyFields","defaultValues","dirtyFields","parentName","[object Object]","shallowFieldsState","shouldUnregister","search","output","isString","startsWith","find","transformToNestObject","RegExp","validationData","isRegex","message","getValidateError","isMessage","validateAllFieldCriteria","errors","types","async","required","maxLength","minLength","min","max","pattern","validate","error","isRadio","isCheckBoxInput","isRadioOrCheckbox","isEmpty","appendErrorsCurry","appendErrors","bind","getMinMaxMessage","exceedMax","maxLengthMessage","minLengthMessage","maxType","minType","getValueAndMessage","exceedMin","maxOutput","minOutput","valueDate","valueNumber","parseFloat","maxLengthOutput","minLengthOutput","patternValue","getFieldsValue","validateRef","isFunction","validateError","validationResult","validateFunction","entries","getPath","rootPath","paths","property","rootName","push","fieldValues","fieldName","watchFields","inputValue","isSingleField","add","forEach","isOnBlur","isOnChange","isOnTouch","isTouched","isReValidateOnBlur","isReValidateOnChange","isBlurEvent","isSubmitted","isOnAll","substring","indexOf","isMatchFieldArrayName","searchName","names","some","window","document","cloneObject","copy","isWeb","File","includes","constructor","getTime","Set","Map","mode","isOnSubmit","isWindowUndefined","isProxyEnabled","Proxy","FormContext","React.createContext","displayName","useFormContext","React.useContext","d","performance","now","c","r","Math","random","toString","indexes","i","temp","splice","removeAtIndexes","sort","a","b","from","to","indexA","indexB","prepend","insert","fill","mapIds","keyName","skipWarn","generateId","useController","rules","control","onFocus","methods","defaultValuesRef","setValue","register","unregister","trigger","reValidateMode","formState","formStateRef","touched","updateFormState","readFormStateRef","fieldArrayNamesRef","isNotFieldArray","isNameInFieldArray","getInitialValue","setInputStateValue","React.useState","valueRef","React.useRef","focus","onFocusRef","shouldValidate","React.useCallback","skipValidation","commonTask","event","getInputValue","registerField","shouldUpdateValue","defineProperties","React.useEffect","onBlur","onChange","shouldDirty","meta","invalid","isDirty","props","as","render","rest","componentProps","React.cloneElement","React.createElement","_a","children","Provider","focusIndexRef","isUnMount","isFormDirty","updateWatchedValue","resetFieldArrayFunctionRef","removeFieldEventListener","validFieldsRef","fieldsWithValidationRef","fieldArrayDefaultValuesRef","validateResolver","getValues","fieldArrayValuesRef","getDefaultValues","fieldArrayParentName","getFieldArrayParentName","memoizedDefaultValues","fields","setFields","omitKey","_b","getFieldArrayValue","getCurrentFieldsValues","setFieldAndValidState","fieldsValues","resetFields","cleanup","updateDirtyFieldsWithDefaultValues","updatedFieldArrayValues","setFieldArrayDirtyFields","batchStateUpdate","method","args","updatedFieldValues","updatedFormValues","shouldSet","shouldUpdateValid","argA","argB","remove","removeArrayAt","argC","resetFunctions","fieldArrayNames","delete","swap","swapArrayAt","argD","move","moveArrayAt","shouldFocus","emptyArray","fillEmptyArray","prependAt","fillBooleanArray","append","appendValue","updateFormValues","insertAt","resolver","context","shouldFocusError","criteriaMode","watchFieldsRef","useWatchFieldsRef","useWatchRenderFunctionsRef","isWatchAllRef","handleChangeRef","contextRef","resolverRef","modeRef","modeChecker","isValidateAllFieldCriteria","setFormState","isValidating","submitCount","isSubmitting","isSubmitSuccessful","observerRef","state","updateIsValidating","shouldRenderBaseOnError","shouldRender","shouldReRender","validFields","fieldsWithValidation","previousError","isErrorStateChanged","setFieldValue","rawValue","radioRef","selectRef","checkboxRef","formValues","updateAndGetDirtyState","isFieldDirty","isDirtyFieldExist","previousIsDirty","isChanged","executeValidation","skipReRender","validateField","executeSchemaOrResolverValidation","previousFormIsValid","isInputsValid","every","Promise","all","setInternalValues","setInternalValue","config","has","getNodeParentName","isFieldWatched","match","renderWatchedInputs","found","size","setFieldArrayDefaultValues","payload","getFieldsValues","shouldSkipValidation","parentNodeName","currentError","newDefaultValues","forceDelete","handleChange","fieldRef","removeAllEventListeners","findRemovedFieldAndRemoveListener","watchField","removeFieldEventListenerAndRef","watchInternal","fieldNames","watchId","assignWatchFields","combinedDefaultValues","registerFieldRef","fieldRefAndValidationOptions","isRadioOrCheckboxFunction","isFieldArray","compareRef","currentRef","isEmptyDefaultValue","isEmptyUnmountFields","then","shouldAttachChangeEvent","addEventListener","attachEventListeners","handleSubmit","onValid","onInvalid","e","preventDefault","persist","fieldErrors","fieldError","focusOnErrorField","observer","MutationObserver","observe","childList","subtree","onDomRemove","disconnect","commonProps","refOrRegisterOptions","prop","React.useMemo","watch","reset","omitResetState","inputRef","closest","resetFieldArray","resetRefs","clearErrors","inputName","setError","updateValue","idRef","defaultValueRef","id","watchFieldsHookRender","watchFieldsHook"],"mappings":"8RAAgBA,GACdA,aAAiBC,YCCZ,MAAMC,EACL,OADKA,EAEH,SAFGA,EAGJ,QAGIC,EACH,SADGA,EAED,WAFCA,EAGD,WAHCA,EAIA,YAJAA,EAKN,MAKMC,EAAY,YAEZC,EACN,MADMA,EAEN,MAFMA,EAGA,YAHAA,EAIA,YAJAA,EAKF,UALEA,EAMD,WANCA,EAOD,iBC3BIL,GAAuD,MAATA,ECEvD,MAAMM,EAAgBN,GAAoC,iBAAVA,QAErBA,IAC/BO,EAAkBP,KAClBQ,MAAMC,QAAQT,IACfM,EAAaN,MACXA,aAAiBU,QCRLV,GAAkB,QAAQW,KAAKX,KCA/BA,GAAiBA,EAAMY,OAAOC,WCE9BC,GACdC,EACED,EACGE,QAAQ,SAAU,IAClBA,QAAQ,MAAO,KACfA,QAAQ,MAAO,IACfC,MAAM,eCHWC,EACtBC,EACAC,EACApB,GAEA,IAAIqB,GAAS,EACb,MAAMC,EAAWC,EAAMH,GAAQ,CAACA,GAAQI,EAAaJ,GAC/CK,EAASH,EAASG,OAClBC,EAAYD,EAAS,EAE3B,OAASJ,EAAQI,GAAQ,CACvB,MAAME,EAAML,EAASD,GACrB,IAAIO,EAAW5B,EAEf,GAAIqB,IAAUK,EAAW,CACvB,MAAMG,EAAWV,EAAOQ,GACxBC,EACEE,EAASD,IAAarB,MAAMC,QAAQoB,GAChCA,EACCE,OAAOT,EAASD,EAAQ,IAEzB,GADA,GAGRF,EAAOQ,GAAOC,EACdT,EAASA,EAAOQ,GAElB,OAAOR,QC3BM,CAACa,EAAmBhC,EAA6B,MAC9D,IAAK,MAAM2B,KAAOK,EACfT,EAAMI,GAAqC3B,EAAM2B,GAAOK,EAAKL,GAAhDT,EAAIlB,EAAO2B,EAAKK,EAAKL,IAErC,OAAO3B,KCROiC,QAA2CC,IAARD,ICIpC,CAACE,EAAW,GAAIf,EAAcgB,KAC3C,MAAMC,EAAStB,EAAQK,EAAKH,MAAM,cAAcqB,OAC9C,CAACD,EAAQV,IAASpB,EAAkB8B,GAAUA,EAASA,EAAOV,GAC9DQ,GAGF,OAAOI,EAAYF,IAAWA,IAAWF,EACrCI,EAAYJ,EAAIf,IACdgB,EACAD,EAAIf,GACNiB,KCVS,CACbG,EACAC,KAEIC,EAAcF,IAAQA,EAAIG,sBAC5BH,EAAIG,oBAAoBzC,EAAcuC,GACtCD,EAAIG,oBAAoBzC,EAAeuC,GACvCD,EAAIG,oBAAoBzC,EAAauC,KCJzC,MAAMG,EAAkC,CACtCC,SAAS,EACT7C,MAAO,YAGO8C,GACdtC,MAAMC,QAAQqC,GACVA,EAAQR,OACN,CAACS,EAAUC,IACTA,GAAUA,EAAOR,IAAIS,QACjB,CACEJ,SAAS,EACT7C,MAAOgD,EAAOR,IAAIxC,OAEpB+C,EACNH,GAEFA,ICtBUM,GACG,UAAjBA,EAAQC,OCDMD,GACG,SAAjBA,EAAQC,OCDMD,GACG,aAAjBA,EAAQC,OCAMD,GACG,oBAAjBA,EAAQC,KCIV,MAAMC,EAAqC,CACzCpD,OAAO,EACP6C,SAAS,GAGLQ,EAAc,CAAErD,OAAO,EAAM6C,SAAS,SAE5BC,IACd,GAAItC,MAAMC,QAAQqC,GAAU,CAC1B,GAAIA,EAAQrB,OAAS,EAAG,CACtB,MAAM6B,EAASR,EACZlC,OAAQoC,GAAWA,GAAUA,EAAOR,IAAIS,SACxCM,IAAI,EAAGf,KAAOxC,MAAAA,MAAcA,GAC/B,MAAO,CAAEA,MAAOsD,EAAQT,UAAWS,EAAO7B,QAG5C,MAAMwB,QAAEA,EAAOjD,MAAEA,EAAKwD,WAAEA,GAAeV,EAAQ,GAAGN,IAElD,OAAOS,EACHO,IAAejB,EAAaiB,EAAmBxD,OAC7CuC,EAAYvC,IAAoB,KAAVA,EACpBqD,EACA,CAAErD,MAAOA,EAAO6C,SAAS,GAC3BQ,EACFD,EAGN,OAAOA,YCxBeK,EACtBC,EACAC,EACAC,EACAC,EACAC,GAEA,MAAMC,EAAQL,EAAUM,QAAQL,GAEhC,GAAII,EAAO,CACT,MACEvB,KAAKxC,MAAEA,EAAKiE,SAAEA,GAAUzB,IACxBA,EAAG0B,cACHA,EAAaC,YACbA,EAAWC,WACXA,GACEL,EAEJ,GAAIE,GAAYJ,EACd,OAGF,OAAIQ,EAAY7B,GACPA,EAAI8B,MAGTC,EAAa/B,GACRgC,EAAcT,EAAMjB,SAAS9C,MAGlCyE,EAAiBjC,ICxCvBM,EDyCkCN,EAAIM,QCvCtC,IAAIA,GACDlC,OAAO,EAAG8D,SAAAA,KAAwBA,GAClCnB,IAAI,EAAGvD,MAAAA,KAAoBA,IDwCxB2E,EAAWnC,GACNoC,EAAiBb,EAAMjB,SAAS9C,MAGlC8D,EACH9D,EACAkE,EACU,KAAVlE,EACE6E,KACC7E,EACHmE,EACC3B,EAAyB2B,YAC1BC,EACAA,EAAWpE,GACXA,EC3DO,IACb8C,ED6DA,GAAIc,EACF,OAAOkB,EAAIlB,EAAsBI,QAASL,YE7DtBoB,EAAW7B,GACjC,OAAKA,GAKDA,aAAmBjD,aACrBiD,EAAQ8B,WAAaC,KAAKC,eAKrBH,EAAW7B,EAAQiC,kBCXZnF,GACd8B,EAAS9B,KAAWoF,OAAOC,KAAKrF,GAAOyB,SCJzBzB,GAAsD,kBAAVA,WCkBpCsF,EAAMnE,EAAaC,GACzC,MAAMmE,EAAahE,EAAMH,GAAQ,CAACA,GAAQI,EAAaJ,GACjDoE,EACiB,GAArBD,EAAW9D,OAAcN,EAd7B,SAAiBA,EAAaoE,GAC5B,MAAM9D,EAAS8D,EAAWE,MAAM,GAAI,GAAGhE,OACvC,IAAIJ,EAAQ,EAEZ,KAAOA,EAAQI,GACbN,EAASoB,EAAYpB,GAAUE,IAAUF,EAAOoE,EAAWlE,MAG7D,OAAOF,EAM6BuE,CAAQvE,EAAQoE,GAC9C5D,EAAM4D,EAAWA,EAAW9D,OAAS,GAC3C,IAAIkE,EAEAH,UACKA,EAAY7D,GAGrB,IAAK,IAAIiE,EAAI,EAAGA,EAAIL,EAAWE,MAAM,GAAI,GAAGhE,OAAQmE,IAAK,CACvD,IACIC,EADAxE,GAAS,EAEb,MAAMyE,EAAeP,EAAWE,MAAM,IAAKG,EAAI,IACzCG,EAAqBD,EAAarE,OAAS,EAMjD,IAJImE,EAAI,IACND,EAAiBxE,KAGVE,EAAQyE,EAAarE,QAAQ,CACpC,MAAMuE,EAAOF,EAAazE,GAC1BwE,EAAYA,EAAYA,EAAUG,GAAQ7E,EAAO6E,GAG/CD,IAAuB1E,IACrBS,EAAS+D,IAAcI,EAAcJ,IACpCrF,MAAMC,QAAQoF,KACZA,EAAUjF,OACRoB,GACEF,EAASE,KAAUiE,EAAcjE,IAAUkE,EAAUlE,IACxDP,UAENkE,SAAwBA,EAAeK,UAAe7E,EAAO6E,IAG/DL,EAAiBE,GAIrB,OAAO1E,EC/CT,MAAMgF,EAAY,CAACC,EAAmB5D,IACpC4D,GAAcA,EAAW5D,MAAQA,QCTnBxC,GACdO,EAAkBP,KAAWM,EAAaN,YCF5BqG,EAGdC,EAAWC,GACX,GAAIC,EAAYF,IAAWE,EAAYD,GACrC,OAAOA,EAGT,IAAK,MAAM5E,KAAO4E,EAAQ,CACxB,MAAME,EAAcH,EAAO3E,GACrB+E,EAAcH,EAAO5E,GAE3B,IACE2E,EAAO3E,GACJG,EAAS2E,IAAgB3E,EAAS4E,IAClClG,MAAMC,QAAQgG,IAAgBjG,MAAMC,QAAQiG,GACzCL,EAAUI,EAAaC,GACvBA,EACN,WAGJ,OAAOJ,WCpBeK,EACtBC,EACAC,EACAC,GAEA,GACEN,EAAYI,IACZJ,EAAYK,IACZD,aAAmBlG,MACnBmG,aAAmBnG,KAEnB,OAAOkG,IAAYC,EAGrB,IAAKE,iBAAqBH,GAAU,CAClC,MAAMI,EAAQ5B,OAAOC,KAAKuB,GACpBK,EAAQ7B,OAAOC,KAAKwB,GAE1B,GAAIG,EAAMvF,SAAWwF,EAAMxF,OACzB,OAAO,EAGT,IAAK,MAAME,KAAOqF,EAAO,CACvB,MAAME,EAAON,EAAQjF,GAErB,IAAMmF,GAAyB,QAARnF,EAAgB,CACrC,MAAMwF,EAAON,EAAQlF,GAErB,IACGG,EAASoF,IAAS1G,MAAMC,QAAQyG,MAChCpF,EAASqF,IAAS3G,MAAMC,QAAQ0G,KAC5BR,EAAUO,EAAMC,EAAML,GACvBI,IAASC,EAEb,OAAO,IAMf,OAAO,ECvCT,SAASC,EAKP9D,EACA+D,EACAC,EACAnC,EACAoC,GAEA,IAAIlG,GAAS,EAEb,OAASA,EAAQiC,EAAO7B,QAAQ,CAC9B,IAAK,MAAME,KAAO2B,EAAOjC,GACnBb,MAAMC,QAAQ6C,EAAOjC,GAAOM,MAC7B2F,EAAYjG,KAAWiG,EAAYjG,GAAS,IAC7CiG,EAAYjG,GAAOM,GAAO,GAC1ByF,EACE9D,EAAOjC,GAAOM,GACdmD,EAAIuC,EAAchG,IAAU,GAAIM,EAAK,IACrC2F,EAAYjG,GAAOM,GACnB2F,EAAYjG,GACZM,IAGFgF,EAAU7B,EAAIuC,EAAchG,IAAU,GAAIM,GAAM2B,EAAOjC,GAAOM,IAC1DT,EAAIoG,EAAYjG,IAAU,GAAIM,GAC7B2F,EAAYjG,kCACRiG,EAAYjG,KACfmG,CAAC7F,IAAM,IAKjBwD,IACGmC,EAAY7F,eACN0D,EAAWoC,GAGtB,OAAOD,QAGM,CACbhE,EACA+D,EACAC,IAEAjB,EACEe,EAAe9D,EAAQ+D,EAAeC,EAAY7B,MAAM,EAAGnC,EAAO7B,SAClE2F,EAAeC,EAAe/D,EAAQgE,EAAY7B,MAAM,EAAGnC,EAAO7B,YCvDtDzB,GAAqD,iBAAVA,ICQ5C,CACb0D,EACA+D,EACAC,EACA7D,EACA8D,KAKA,MAAMC,EAAS,GAEf,IAAK,MAAMjE,KAAQD,EAAUM,SAEzBzB,EAAYoF,KACXE,EAASF,GACNhE,EAAKmE,WAAWH,GAChBnH,MAAMC,QAAQkH,IAAWA,EAAOI,KAAM/F,GAAS2B,EAAKmE,WAAW9F,QAEnE4F,EAAOjE,GAA2CF,EAChDC,EACAC,OACAzB,EACA2B,IAKN,OAAO6D,EACHM,EAAsBJ,GACtBvB,EAAUoB,EAAoBO,EAAsBJ,OCtC1C5H,GAAoCA,aAAiBiI,SCIrDC,GACdpG,EAASoG,KAAoBC,EAAQD,GACjCA,EACA,CACElI,MAAOkI,EACPE,QAAS,OCTDpI,GACG,mBAAVA,KCGOA,GACd6H,EAAS7H,IAAU+G,iBAAqB/G,YCDlBqI,GACtBhG,EACAG,EACAW,EAAO,YAEP,GAAImF,GAAUjG,IAAY6D,EAAU7D,KAAYA,EAC9C,MAAO,CACLc,KAAAA,EACAiF,QAASE,GAAUjG,GAAUA,EAAS,GACtCG,IAAAA,UCPS,CACbmB,EACA4E,EACAC,EACArF,EACAiF,IAEAG,iCAESC,EAAO7E,KACV8E,qCACMD,EAAO7E,IAAS6E,EAAO7E,GAAO8E,MAAQD,EAAO7E,GAAO8E,MAAQ,KAChEjB,CAACrE,GAAOiF,IAAW,MAGvB,MCOSM,MACbhF,EACA6E,GAEE/F,IAAAA,EACAA,KAAOxC,MAAAA,GACP8C,QAAAA,EACA6F,SAAAA,EACAC,UAAAA,EACAC,UAAAA,EACAC,IAAAA,EACAC,IAAAA,EACAC,QAAAA,EACAC,SAAAA,GAEFrF,KAEA,MAAMD,EAAwCnB,EAAImB,KAC5CuF,EAA2C,GAC3CC,EAAU5E,EAAa/B,GACvBmC,EAAayE,EAAgB5G,GAC7B6G,EAAoBF,GAAWxE,EAC/B2E,EAAoB,KAAVtJ,EACVuJ,EAAoBC,GAAaC,KACrC,KACA9F,EACA4E,EACAW,GAEIQ,EAAmB,CACvBC,EACAC,EACAC,EACAC,EAAUzJ,EACV0J,EAAU1J,KAEV,MAAM+H,EAAUuB,EAAYC,EAAmBC,EAC/CX,EAAMvF,kBACJR,KAAMwG,EAAYG,EAAUC,EAC5B3B,QAAAA,EACA5F,IAAAA,GAEI+G,EADAI,EACkBG,EACAC,EADS3B,KAKnC,GACEO,KACGQ,IAAYxE,IAAe2E,GAAW/I,EAAkBP,KACxDkG,EAAUlG,KAAWA,GACrB2E,IAAeC,EAAiB9B,GAASD,SACzCsG,IAAY3E,EAAc1B,GAASD,SACtC,CACA,MAAM7C,MAAEA,EAAKoI,QAAEA,GAAYE,GAAUK,GACjC,CAAE3I,QAAS2I,EAAUP,QAASO,GAC9BqB,EAAmBrB,GAEvB,GAAI3I,IACFkJ,EAAMvF,kBACJR,KAAM9C,EACN+H,QAAAA,EACA5F,IAAK6G,IACE3F,EAAUM,QAAQL,GAAgBb,SAAW,IAAI,IAAM,IAAIN,IAC9DA,GACD+G,EAAkBlJ,EAAiC+H,KAEnDG,GACH,OAAOW,EAKb,KAAM3I,EAAkBuI,IAASvI,EAAkBwI,IAAmB,KAAV/I,GAAc,CACxE,IAAI2J,EACAM,EACJ,MAAMC,EAAYF,EAAmBjB,GAC/BoB,EAAYH,EAAmBlB,GAErC,GAAK/G,MAAM/B,GASJ,CACL,MAAMoK,EACH5H,EAAyB2B,aAAe,IAAIzD,KAAKV,GAChD6H,EAASqC,EAAUlK,SACrB2J,EAAYS,EAAY,IAAI1J,KAAKwJ,EAAUlK,QAEzC6H,EAASsC,EAAUnK,SACrBiK,EAAYG,EAAY,IAAI1J,KAAKyJ,EAAUnK,YAhB5B,CACjB,MAAMqK,EACH7H,EAAyB0B,eAAiBoG,WAAWtK,GACnDO,EAAkB2J,EAAUlK,SAC/B2J,EAAYU,EAAcH,EAAUlK,OAEjCO,EAAkB4J,EAAUnK,SAC/BiK,EAAYI,EAAcF,EAAUnK,OAaxC,IAAI2J,GAAaM,KACfP,IACIC,EACFO,EAAU9B,QACV+B,EAAU/B,QACV/H,EACAA,IAEGkI,GACH,OAAOW,EAKb,GAAIrB,EAAS7H,KAAWsJ,IAAYV,GAAaC,GAAY,CAC3D,MAAM0B,EAAkBP,EAAmBpB,GACrC4B,EAAkBR,EAAmBnB,GACrCc,GACHpJ,EAAkBgK,EAAgBvK,QACnCA,EAAMyB,OAAS8I,EAAgBvK,MAC3BiK,GACH1J,EAAkBiK,EAAgBxK,QACnCA,EAAMyB,OAAS+I,EAAgBxK,MAEjC,IAAI2J,GAAaM,KACfP,EACEC,EACAY,EAAgBnC,QAChBoC,EAAgBpC,UAEbG,GACH,OAAOW,EAKb,GAAIrB,EAAS7H,IAAUgJ,IAAYM,EAAS,CAC1C,MAAQtJ,MAAOyK,EAAYrC,QAAEA,GAAY4B,EAAmBhB,GAE5D,GAAIb,EAAQsC,KAAkBA,EAAa9J,KAAKX,KAC9CkJ,EAAMvF,kBACJR,KAAM9C,EACN+H,QAAAA,EACA5F,IAAAA,GACG+G,EAAkBlJ,EAAgC+H,KAElDG,GACH,OAAOW,EAKb,GAAID,EAAU,CACZ,MAAM7C,EAAasE,EACjBhH,EACAC,EACAC,GACA,GACA,GAEI+G,EAActB,GAAqBvG,EAAUA,EAAQ,GAAGN,IAAMA,EAEpE,GAAIoI,GAAW3B,GAAW,CACxB,MACM4B,EAAgBxC,SADDY,EAAS7C,GACiBuE,GAE/C,GAAIE,IACF3B,EAAMvF,kCACDkH,GACAtB,EACDlJ,EACAwK,EAAczC,WAGbG,GACH,OAAOW,OAGN,GAAIpH,EAASmH,GAAW,CAC7B,IAAI6B,EAAmB,GACvB,IAAK,MAAOnJ,EAAKoJ,KAAqB3F,OAAO4F,QAAQ/B,GAAW,CAC9D,IAAKhD,EAAc6E,KAAsBvC,EACvC,MAGF,MACMsC,EAAgBxC,SADO0C,EAAiB3E,GAG5CuE,EACAhJ,GAGEkJ,IACFC,iCACKD,GACAtB,EAAkB5H,EAAKkJ,EAAczC,UAGtCG,IACFW,EAAMvF,GAAQmH,IAKpB,IAAK7E,EAAc6E,KACjB5B,EAAMvF,kBACJnB,IAAKmI,GACFG,IAEAvC,GACH,OAAOW,GAMf,OAAOA,GC/OF,MAAM+B,GAAU,CACrBC,EACA5H,EACA6H,EAAmC,MAEnC,IAAK,MAAMC,KAAY9H,EAAQ,CAC7B,MAAM+H,EAAYH,GACfpJ,EAASwB,GACN,IAAI8H,EACJ,IAAIA,MAEV5E,EAAYlD,EAAO8H,IACfD,EAAMG,KAAKD,GACXJ,GAAQI,EAAU/H,EAAO8H,GAAWD,GAG1C,OAAOA,UCPM,CACbI,EACAC,EACAC,EACAC,EACAC,KAKA,IAAI3L,OAAQkC,EAYZ,OAVAuJ,EAAYG,IAAIJ,GAEXvF,EAAcsF,KACjBvL,EAAQ8E,EAAIyG,EAAaC,IAErB1J,EAAS9B,IAAUQ,MAAMC,QAAQT,KACnCiL,GAAQO,EAAWxL,GAAO6L,QAASlI,GAAS8H,EAAYG,IAAIjI,KAIzDpB,EAAYvC,GACf2L,EACED,EACA5G,EAAI4G,EAAYF,GAClBxL,MCvCS,EACb8L,SAAAA,EACAC,WAAAA,EACAC,UAAAA,EACAC,UAAAA,EACAC,mBAAAA,EACAC,qBAAAA,EACAC,YAAAA,EACAC,YAAAA,EACAC,QAAAA,MAYIA,KAEQD,GAAeL,IAChBC,GAAaG,IACbC,EAAcH,EAAqBJ,IACpCM,IACCC,EAAcF,EAAuBJ,IACvCK,MC5BKzI,GAAiBA,EAAK4I,UAAU,EAAG5I,EAAK6I,QAAQ,MCEzD,MAAMC,GAAwB,CAAC9I,EAAc+I,IAClDzE,OACE,IAAIyE,aAAsB1L,QAAQ,MAAO,OAAOA,QAAQ,MAAO,QAC/DL,KAAKgD,UAEM,CACbgJ,EACAhJ,IACG,IAAIgJ,GAAOC,KAAM5I,GAAYyI,GAAsB9I,EAAMK,kBCRxC6I,SAAWzM,UAAoB0M,WAAa1M,WCE1C2M,GAA+B/K,SACrD,IAAIgL,EAEJ,GACExG,EAAYxE,IACXiL,KAAUjL,aAAgBkL,MAAQxK,EAAcV,IAEjD,OAAOA,EAGT,IACG,CAAC,MAAO,MAAO,SAAU,OAAQ,SAASmL,mBACxCnL,EAAgBoL,kCAAazJ,MAGhC,OAAO3B,EAGT,GAAIA,aAAgBtB,KAElB,OADAsM,EAAO,IAAItM,KAAKsB,EAAKqL,WACdL,EAGT,GAAIhL,aAAgBsL,IAAK,CACvBN,EAAO,IAAIM,IACX,IAAK,MAAMtH,KAAQhE,EACjBgL,EAAKpB,IAAI5F,GAEX,OAAOgH,EAGT,GAAIhL,aAAgBuL,IAAK,CACvBP,EAAO,IAAIO,IACX,IAAK,MAAM5L,KAAOK,EAAKqD,OACrB2H,EAAK9L,IAAIS,EAAKoL,GAAY/K,EAAK8C,IAAInD,KAErC,OAAOqL,EAGTA,EAAOxM,MAAMC,QAAQuB,GAAQ,GAAK,GAElC,IAAK,MAAML,KAAOK,EAChBgL,EAAKrL,GAAOoL,GAAY/K,EAAKL,IAG/B,OAAOqL,SC7CPQ,KAQAC,YAAaD,GAAQA,IAASrN,EAC9B2L,SAAU0B,IAASrN,EACnB4L,WAAYyB,IAASrN,EACrBmM,QAASkB,IAASrN,EAClB6L,UAAWwB,IAASrN,OCZNqC,GACd+B,EAAa/B,IAAQ4G,EAAgB5G,GCuEvC,MAAMkL,UAA2Bb,SAAWzM,EACtCuN,GAAiBV,GAAQ,UAAWJ,cAAgBe,QAAUxN,8UC1EpE,MAAMyN,GAAcC,gBAA2C,MAE/DD,GAAYE,YAAc,mBAEbC,GAAiB,IAG5BC,aAAiBJ,WCRJ,KACb,MAAMK,SACGC,cAAgB/N,EAAYM,KAAK0N,MAA4B,IAApBD,YAAYC,MAE9D,MAAO,uCAAuCpN,QAAQ,QAAUqN,IAC9D,MAAMC,GAAqB,GAAhBC,KAAKC,SAAgBN,GAAK,GAAK,EAE1C,OAAa,KAALG,EAAWC,EAAS,EAAJA,EAAW,GAAKG,SAAS,cCMtC,CAAIzM,EAAWX,IAC5BkB,EAAYlB,GACR,GAdN,SAA4BW,EAAW0M,GACrC,IAAIC,EAAI,EACR,MAAMC,EAAO,IAAI5M,GAEjB,IAAK,MAAMX,KAASqN,EAClBE,EAAKC,OAAOxN,EAAQsN,EAAG,GACvBA,IAGF,OAAO5N,EAAQ6N,GAAMnN,OAASmN,EAAO,GAMjCE,CACE9M,GACCxB,MAAMC,QAAQY,GAASA,EAAQ,CAACA,IAAQ0N,KAAK,CAACC,EAAGC,IAAMD,EAAIC,OClBrD,CACbjN,EACAkN,EACAC,IAEI3O,MAAMC,QAAQuB,IACZO,EAAYP,EAAKmN,MACnBnN,EAAKmN,QAAMjN,GAEbF,EAAK6M,OAAOM,EAAI,EAAGnN,EAAK6M,OAAOK,EAAM,GAAG,IACjClN,GAGF,MCfM,CAAIA,EAAWoN,EAAgBC,KAC5C,MAAMT,EAAO,CAAC5M,EAAKqN,GAASrN,EAAKoN,IACjCpN,EAAKoN,GAAUR,EAAK,GACpB5M,EAAKqN,GAAUT,EAAK,aCDEU,GACtBtN,EACAhC,GAEA,MAAO,IAAKQ,MAAMC,QAAQT,GAASA,EAAQ,CAACA,QAASkC,MAAgBF,YCA/CuN,GACtBvN,EACAX,EACArB,GAEA,MAAO,IACFgC,EAAKyD,MAAM,EAAGpE,MACbb,MAAMC,QAAQT,GAASA,EAAQ,CAACA,QAASkC,MAC1CF,EAAKyD,MAAMpE,WCdCrB,GACjBQ,MAAMC,QAAQT,GAASQ,MAAMR,EAAMyB,QAAQ+N,UAAKtN,QAAaA,KCC5ClC,IACfQ,MAAMC,QAAQT,GAASA,EAAQ,CAACA,IAAgBuD,IAAKvB,IACrD,GAAIF,EAASE,GAAO,CAClB,MAAMb,EAAkC,GAExC,IAAK,MAAMQ,KAAOK,EAChBb,EAAOQ,IAAO,EAGhB,OAAOR,EAGT,OAAO,ICeX,MAAMsO,GAAS,CAIbnM,EAAuC,GACvCoM,EACAC,IAwBOrM,EAAOC,IAAKvD,kBACjBwH,CAACkI,GAAU1P,EAAM0P,IAAYE,MAC1B5P,aC9CS6P,IAA8DlM,KAC5EA,EAAImM,MACJA,EAAK1N,aACLA,EAAY2N,QACZA,EAAOC,QACPA,IAEA,MAAMC,EAAUjC,MAUVkC,iBACJA,EAAgBC,SAChBA,EAAQC,SACRA,EAAQC,WACRA,EAAUC,QACVA,EAAO9C,KACPA,EACA+C,gBAAgBrE,mBAAEA,EAAkBC,qBAAEA,GAAsBqE,UAC5DA,EACAC,cACEzM,SAASqI,YAAEA,EAAWqE,QAAEA,EAAOlI,OAAEA,IAClCmI,gBACDA,EAAeC,iBACfA,EAAgBlN,UAChBA,EAASmN,mBACTA,EAAkBjN,sBAClBA,GACEmM,GAAWE,EAAQF,QAEjBe,GAAmBC,GAAmBF,EAAmB7M,QAASL,GAClEqN,EAAkB,KACrBzO,EAAYuC,EAAIlB,EAAsBI,QAASL,KAAUmN,EACtDhM,EAAIlB,EAAsBI,QAASL,GACnCpB,EAAYH,GACZ0C,EAAIoL,EAAiBlM,QAASL,GAC9BvB,GACCpC,EAAOiR,GAAsBC,WAAeF,KAC7CG,EAAWC,SAAapR,GACxBwC,EAAM4O,SAAa,CACvBC,MAAO,IAAM,OAETC,EAAaF,SACjBpB,SAEQpF,GAAWpI,EAAIwB,QAAQqN,QACzB7O,EAAIwB,QAAQqN,WAadE,EAAiBC,cACpBpF,IACEqF,kBACCrF,YAAAA,EACAF,mBAAAA,EACAC,qBAAAA,EACAE,YAAAA,EACAJ,YAAanH,EAAI4L,EAAS/M,IACvB6J,IAEP,CACEtB,EACAC,EACAE,EACAqE,EACA/M,EACA6J,IAIEkE,EAAaF,cAAkB,EAAEG,MACrC,MAAM3P,ECjGK,CAAC2P,GACdnL,EAAYmL,KACX7P,EAAS6P,EAAMrL,SACfxE,EAAS6P,EAAMrL,UAAYqL,EAAMxO,KAC9BwO,EACApP,EAAYoP,EAAMrL,OAAOtG,OACzB2R,EAAMrL,OAAOrD,QACb0O,EAAMrL,OAAOtG,MD0FF4R,CAAcD,GAG3B,OAFAV,EAAmBjP,GACnBmP,EAASnN,QAAUhC,EACZA,GACN,IAEG6P,EAAgBL,cACnBM,IASKpO,EAAUM,QAAQL,GACpBD,EAAUM,QAAQL,kBAChBnB,IAAKkB,EAAUM,QAAQL,GAAOnB,KAC3BsN,IAGLM,EACEhL,OAAO2M,iBACL,CACEpO,KAAAA,EACA0N,MAAOC,EAAWtN,SAEpB,CACEhE,MAAO,CACLwH,IAAIxF,GACFiP,EAAmBjP,GACnBmP,EAASnN,QAAUhC,GAErB8C,IAAG,IACMqM,EAASnN,WAKxB8L,GAGFgC,EAAoBvP,EAAYuC,EAAIoL,EAAiBlM,QAASL,KAGhEmO,GACEhB,GACAG,EAAmBD,MAEvB,CAAClB,EAAOnM,EAAMyM,IAGhB4B,YAAgB,IAAM,IAAM3B,EAAW1M,GAAO,CAACA,IAE/CqO,YAAgB,KAedH,KACC,CAACA,IAEJG,YAAgB,MACbtO,EAAUM,QAAQL,IAASkO,GAAc,KAG5C,MAAMI,EAAST,cAAkB,KAC3BZ,EAAiB5M,QAAQ0M,UAAY5L,EAAI4L,EAAS/M,KACpDzC,EAAIwP,EAAS/M,GAAM,GACnBgN,EAAgB,CACdD,QAAAA,KAIJa,GAAe,IAASjB,EAAQ3M,IAC/B,CAACA,EAAMgN,EAAiBY,EAAgBjB,EAASM,IAWpD,MAAO,CACL7M,MAAO,CACLmO,SAXaV,cACf,IAAIG,IACFxB,EAASxM,EAAM+N,EAAWC,GAAQ,CAChCJ,eAAgBA,IAChBY,aAAa,IAEjB,CAAChC,EAAUxM,EAAM4N,IAMfU,OAAAA,EACAtO,KAAAA,EACA3D,MAAAA,EACAwC,IAAAA,GAEF4P,KAAMhN,OAAO2M,iBACX,CACEM,UAAWvN,EAAI0D,EAAQ7E,IAEzB,CACE2O,QAAS,CACPxN,IAAG,MACQA,EAAI0L,EAAUlJ,YAAa3D,IAGxCsI,UAAW,CACTnH,IAAG,MACQA,EAAI0L,EAAUE,QAAS/M,oBEhN1C4O,IAEA,MAAMzC,MAAEA,EAAK0C,GAAEA,EAAEC,OAAEA,EAAMrQ,aAAEA,EAAY2N,QAAEA,EAAOC,QAAEA,GAAqBuC,EAATG,KAASH,EAAjE,6DACAxO,MAAEA,EAAKqO,KAAEA,GAASvC,GAAc0C,GAEhCI,iCACDD,GACA3O,GAGL,OAAOyO,EACHzL,iBAAqByL,GACnBI,eAAmBJ,EAAIG,GACvBE,gBAAoBL,EAAoBG,GAC1CF,EACAA,EAAO1O,EAAOqO,GACd,qBZdyDU,QAAAC,SAC7DA,KACGR,OAF0D,cAGxB,OACrCM,gBAAChF,GAAYmF,UAAShT,MAAOoF,iBAAKmN,IAC/BQ,2FSgDwB,EAK3BhD,QAAAA,EACApM,KAAAA,EACA+L,QAAAA,EAAU,SAKV,MAAMO,EAAUjC,KAUViF,EAAgB7B,UAAc,GAC9B8B,EAAY9B,UAAa,IACzB+B,YACJA,EAAWC,mBACXA,EAAkBC,2BAClBA,EAA0BxC,mBAC1BA,EAAkBnN,UAClBA,EAASwM,iBACTA,EAAgBoD,yBAChBA,EAAwB7C,aACxBA,EAAY7M,sBACZA,EAAqB+M,gBACrBA,EAAeC,iBACfA,EAAgB2C,eAChBA,EAAcC,wBACdA,EAAuBC,2BACvBA,EAA0BC,iBAC1BA,EAAgBC,UAChBA,EAASjM,iBACTA,EAAgBkM,oBAChBA,GACE7D,GAAWE,EAAQF,QAEjB8D,EAAuBvQ,GAC3BwB,EAAI4C,EAAmBpE,EAASM,EAAsBI,QAASL,EAAM,IAEjEmQ,EAAuBC,GAAwBpQ,GAC/CqQ,EAAwB5C,SAA2C,IACnEtM,EAAI2O,EAA2BzP,QAAS8P,GACxCD,EAAiBJ,EAA2BzP,SAC5C6P,EAAiB3D,EAAiBlM,YAEjCiQ,EAAQC,GAAahD,WAE1BzB,GAAOuE,EAAsBhQ,QAAS0L,IACxCxO,EAAI0S,EAAoB5P,QAASL,EAAM5C,EAAQkT,IAE/C,MAAME,EACJF,GACGA,EAAO1Q,IAAI,CAACuP,EAAkC,UAAhCsB,EAAC1E,OAAsC,YAAzC,+BAEjBmB,EAAmB7M,QAAQ4H,IAAIjI,GAE/B,MAAM0Q,EAAqB7C,cACzB,IAAM1M,EAAI8O,EAAoB5P,QAASL,EAAM,IAC7C,CAACA,IAGG2Q,EAAyB,IAC7B7E,GACE3K,EAAI6O,IAAahQ,EAAM0Q,KAAsB9Q,IAC3C,CAACyC,EAAkC3E,mCAC9BgT,IAAqBhT,IACrB2E,IAGP0J,GAIJmB,EAAmB7M,QAAQ4H,IAAIjI,GAG7BmQ,IACChP,EAAI2O,EAA2BzP,QAAS8P,IAEzC5S,EACEuS,EAA2BzP,QAC3B8P,EACA/G,GAAYjI,EAAIoL,EAAiBlM,QAAS8P,KAI9C,MAAMS,EACJC,IAKA,GAHAN,EAAUM,GACVtT,EAAI0S,EAAoB5P,QAASL,EAAM6Q,GAEnC5D,EAAiB5M,QAAQnB,SAAW6Q,EAAkB,CACxD,MAAMpQ,EAASqQ,IACfzS,EAAIoC,EAAQK,EAAM6Q,GAClBd,EAAiBpQ,KAIfmR,EAAc,KAClB,IAAK,MAAM9S,KAAO+B,EAAUM,QACtByI,GAAsB9K,EAAKgC,KAC7B2P,EAAyB5P,EAAUM,QAAQrC,IAAe,UACnD+B,EAAUM,QAAQrC,KAKzB+S,EAAclS,IACjBzB,EAAQ+D,EAAItC,EAAKmB,EAAM,KAAKlC,QAAU6D,EAAM9C,EAAKmB,GAE9CgR,EAGJC,IAEIA,GACF1T,EACEuP,EAAazM,QAAQsD,YACrB3D,EACAkR,EACEV,EAAQS,GACR9P,EAAIoL,EAAiBlM,QAASL,EAAM,IACpCmB,EAAI2L,EAAazM,QAAQsD,YAAa3D,EAAM,OAM9CmR,EAAmB,CAIvBC,EACAC,EAMAC,EACAC,EAAgE,GAChEC,GAAY,EACZC,GAAoB,KAEpB,GAAItQ,EAAIlB,EAAsBI,QAASL,GAAO,CAC5C,MAAMiE,EAASmN,EACbjQ,EAAIlB,EAAsBI,QAASL,GACnCqR,EAAKK,KACLL,EAAKM,MAEPH,GAAajU,EAAI0C,EAAsBI,QAASL,EAAMiE,GAGxD,GAAI9C,EAAI2O,EAA2BzP,QAASL,GAAO,CACjD,MAAMiE,EAASmN,EACbjQ,EAAI2O,EAA2BzP,QAASL,GACxCqR,EAAKK,KACLL,EAAKM,MAEPH,GAAajU,EAAIuS,EAA2BzP,QAASL,EAAMiE,GAG7D,GAAIpH,MAAMC,QAAQqE,EAAI2L,EAAazM,QAAQwE,OAAQ7E,IAAQ,CACzD,MAAMiE,EAASmN,EACbjQ,EAAI2L,EAAazM,QAAQwE,OAAQ7E,GACjCqR,EAAKK,KACLL,EAAKM,MAEPH,GAAajU,EAAIuP,EAAazM,QAAQwE,OAAQ7E,EAAMiE,GACpD8M,EAAQjE,EAAazM,QAAQwE,QAG/B,GACEoI,EAAiB5M,QAAQ0M,SACzB5L,EAAI2L,EAAazM,QAAQ0M,QAAS/M,GAClC,CACA,MAAMiE,EAASmN,EACbjQ,EAAI2L,EAAazM,QAAQ0M,QAAS/M,GAClCqR,EAAKK,KACLL,EAAKM,MAEPH,GAAajU,EAAIuP,EAAazM,QAAQ0M,QAAS/M,EAAMiE,GACrD8M,EAAQjE,EAAazM,QAAQ0M,UAI7BE,EAAiB5M,QAAQsD,aACzBsJ,EAAiB5M,QAAQsO,WAEzBpR,EACEuP,EAAazM,QAAQsD,YACrB3D,EACAkR,EACEV,EAAQe,GACRpQ,EAAIoL,EAAiBlM,QAASL,EAAM,IACpCmB,EAAI2L,EAAazM,QAAQsD,YAAa3D,EAAM,MAGhDgR,EAAmCM,GACnCP,EAAQjE,EAAazM,QAAQsD,cAI7B8N,GACAxE,EAAiB5M,QAAQnB,UACxB6Q,IAEDxS,EACEqS,EAAevP,QACfL,EACAoR,EAAOjQ,EAAIyO,EAAevP,QAASL,EAAM,IAAKqR,EAAKK,OAErDX,EAAQnB,EAAevP,SAEvB9C,EACEsS,EAAwBxP,QACxBL,EACAoR,EAAOjQ,EAAI0O,EAAwBxP,QAASL,EAAM,IAAKqR,EAAKK,OAE9DX,EAAQlB,EAAwBxP,WAG7BkP,EAAUlP,SAAW4M,EAAiB5M,QAAQsO,SACjD3B,EAAgB,CACd2B,QAASa,EAAYxP,EAAMwQ,EAAQe,OA8DnCK,EAAUlU,IACd,MAAMkK,EAAc+I,IACdW,EAGAO,GAAcjK,EAAalK,GACjCkT,EACEU,GAEFR,IACAK,EACEU,GACA,CACEH,KAAMhU,EACNoU,KAAMpU,GAER4T,EACAO,GAAcjK,EAAalK,IAC3B,GACA,IAuIJ,OAhEA2Q,YAAgB,KASd,MAAM3K,EAAgBvC,EAAI2O,EAA2BzP,QAASL,GAQ9D,GANI0D,GAAiB4M,EAAOxS,OAAS4F,EAAc5F,QACjDP,EAAIuS,EAA2BzP,QAASL,EAAM0D,EAAc5B,MAAM,IAGpE2N,EAAmBzP,GAEfsP,EAAcjP,SAAW,EAC3B,IAAK,MAAMrC,KAAO+B,EAAUM,QAAS,CACnC,MAAMD,EAAQL,EAAUM,QAAQrC,GAChC,GACEA,EAAImG,WAAW,GAAGnE,KAAQsP,EAAcjP,aACxCD,EAAOvB,IAAI6O,MACX,CACAtN,EAAOvB,IAAI6O,QACX,OAKN4B,EAAcjP,SAAW,GACxB,CAACiQ,EAAQtQ,IAEZqO,YAAgB,KACd,MAAM0D,EAAiBrC,EAA2BrP,QAC5C2R,EAAkB9E,EAAmB7M,QAmB3C,OAjBK+P,GAAwBpQ,KAC3B+R,EAAe/R,GACb3B,IAEAyS,KACCzS,GAAQsD,EAAMmO,EAA2BzP,QAASL,GACnD2B,EAAM1B,EAAsBI,QAASL,GACrCqQ,EAAsBhQ,QAAUc,EAC9B9C,GAAQkO,EAAiBlM,QACzBL,GAEGuP,EAAUlP,SACbkQ,EAAUzE,GAAOuE,EAAsBhQ,QAAS0L,MAK/C,KACLwD,EAAUlP,SAAU,EACpB0D,GAAoB6N,IACpBd,WACOiB,EAAe/R,GACtB2B,EAAMsO,EAAoB5P,QAASL,GACnCgS,EAAgBC,OAAOjS,KAExB,IAEI,CACLkS,KAAMrE,cAvGK,CAACpC,EAAgBC,KAC5B,MAAM9D,EAAc+I,IACpBwB,GAAYvK,EAAa6D,EAAQC,GACjCoF,IACAF,EAAsB,IAAIhJ,IAC1BuJ,EACEgB,GACA,CACET,KAAMjG,EACNkG,KAAMjG,EACNoG,KAAMrG,EACN2G,KAAM1G,QAERnN,EACAqJ,GACA,IAwF4B,CAAC5H,IAC/BqS,KAAMxE,cArFK,CAACtC,EAAcC,KAC1B,MAAM5D,EAAc+I,IACpB2B,GAAY1K,EAAa2D,EAAMC,GAC/BsF,IACAF,EAAsB,IAAIhJ,IAC1BuJ,EACEmB,GACA,CACEZ,KAAMnG,EACNoG,KAAMnG,EACNsG,KAAMvG,EACN6G,KAAM5G,QAERjN,EACAqJ,GACA,IAsE4B,CAAC5H,IAC/B2L,QAASkC,cApLK,CACdxR,EACAkW,GAAc,KAEd,MAAMC,EAAaC,GAAepW,GAC5B4U,EAA0ByB,GAC9B/B,IACA7E,GAAOjP,MAAMC,QAAQT,GAASA,EAAQ,CAACA,GAAQ0P,IAGjD6E,EAAsBK,GACtBH,IACAK,EACEuB,GACA,CACEhB,KAAMc,EACNV,KAAMa,GAAiBtW,IAEzB4U,GAEF3B,EAAcjP,QAAUkS,EAAc,GAAK,GAgKP,CAACvS,IACrC4S,OAAQ/E,cAvNK,CACbxR,EACAkW,GAAc,KAEd,MAAMM,EAAchW,MAAMC,QAAQT,GAASA,EAAQ,CAACA,GAC9CyW,EAAmB,IACpBnC,OACA7E,GAAO+G,EAAa9G,IAEzB6E,EAAsBkC,IAGpB7F,EAAiB5M,QAAQsD,aACzBsJ,EAAiB5M,QAAQsO,WAEzBqC,EAAmC8B,GAEnC9F,EAAgB,CACd2B,SAAS,EACThL,YAAamJ,EAAazM,QAAQsD,gBAIrCI,GACCxG,EAAI0C,EAAsBI,QAASL,EAAM,IACnCmB,EAAIlB,EAAsBI,QAASL,IAAS,MAC7CoJ,GAAYyJ,KAGnBvD,EAAcjP,QAAUkS,EACpBpR,EAAI8O,EAAoB5P,QAASL,GAAMlC,OAAS,GAC/C,GAwL6B,CAACkC,IACnC4R,OAAQ/D,cAAkB+D,EAAQ,CAAC5R,IACnC4L,OAAQiC,cAzIK,CACbnQ,EACArB,EACAkW,GAAc,KAEd,MAAMC,EAAaC,GAAepW,GAC5BuL,EAAc+I,IACdM,EAA0B8B,GAC9BnL,EACAlK,EACAoO,GAAOjP,MAAMC,QAAQT,GAASA,EAAQ,CAACA,GAAQ0P,IAGjD6E,EAAsBK,GACtBH,IACAK,EACE4B,GACA,CACErB,KAAMhU,EACNiU,KAAMa,EACNV,KAAMpU,EACN0U,KAAMO,GAAiBtW,IAEzB4U,EACA8B,GAASnL,EAAalK,IAExB4R,EAAcjP,QAAUkS,EAAc7U,GAAS,GA+Gb,CAACsC,IACnCsQ,OAAQlT,EAAQkT,yBVxblBzG,KACAA,EAAOrN,EAAwBoQ,eAC/BA,EAAiBpQ,EAAwBwW,SACzCA,EAAQC,QACRA,EAAOvP,cACPA,EAAgB,GAAiCwP,iBACjDA,GAAmB,EAAInP,iBACvBA,GAAmB,EAAIoP,aACvBA,GAC0C,IAC1C,MAAMpT,EAAY0N,SAAsC,IAClDqC,EAA6BrC,SAAsC,IACnEwC,EAAsBxC,SAAsC,IAC5D2F,EAAiB3F,SAA4C,IAAI9D,KACjE0J,EAAoB5F,SACxB,IAEI6F,EAA6B7F,SAAsC,IACnEoC,EAA0BpC,SAE9B,IACImC,EAAiBnC,SACrB,IAEIlB,EAAmBkB,SACvB/J,GAEI6L,EAAY9B,UAAa,GACzB8F,EAAgB9F,UAAa,GAC7B+F,EAAkB/F,WAClBxN,EAAwBwN,SAAa,IACrCiC,EAA6BjC,SAEjC,IACIgG,EAAahG,SAAawF,GAC1BS,GAAcjG,SAAauF,GAC3B9F,GAAqBO,SACzB,IAAI9D,KAEAgK,GAAUlG,SAAamG,GAAY/J,KACnCC,WAAEA,GAAUzB,UAAEA,IAAcsL,GAAQtT,QACpCwT,GAA6BV,IAAiB3W,GAC7CqQ,GAAWiH,IAAgBvG,WAAwC,CACxEoB,SAAS,EACToF,cAAc,EACdpQ,YAAa,GACb+E,aAAa,EACbsL,YAAa,EACbjH,QAAS,GACTkH,cAAc,EACdC,oBAAoB,EACpBhV,SAAU4K,GACVjF,OAAQ,KAEJoI,GAAmBQ,SAA4B,CACnDkB,SAAU3E,GACVrG,aAAcqG,GACd+C,SAAU/C,IAAkB3B,GAC5B0L,cAAe/J,GACfiK,cAAejK,GACf9K,SAAU8K,KAEN8C,GAAeW,SAAaZ,IAC5BsH,GAAc1G,YAElBtF,SAAUI,GACVH,WAAYI,IACViF,SAAamG,GAAYhH,IAAiBvM,QAE9CoT,EAAWpT,QAAU4S,EACrBS,GAAYrT,QAAU2S,EACtBlG,GAAazM,QAAUwM,GACvB5M,EAAsBI,QAAU0D,EAC5B,GACAzB,EAAcrC,EAAsBI,SACpC+I,GAAY1F,GACZzD,EAAsBI,QAE1B,MAAM2M,GAAkBa,cACtB,CAACuG,EAA0C,MACpC7E,EAAUlP,UACbyM,GAAazM,uCACRyM,GAAazM,SACb+T,GAELN,GAAahH,GAAazM,WAG9B,IAGIgU,GAAqB,IACzBpH,GAAiB5M,QAAQ0T,cACzB/G,GAAgB,CACd+G,cAAc,IAGZO,GAA0BzG,cAC9B,CACE7N,EACAuF,EACAgP,GAA+B,EAC/BH,EAII,GACJlV,KAEA,IAAIsV,EACFD,GcrLO,GACb1P,OAAAA,EACA7E,KAAAA,EACAuF,MAAAA,EACAkP,YAAAA,EACAC,qBAAAA,MAQA,MAAMxV,EAAUN,EAAY2G,GACtBoP,EAAgBxT,EAAI0D,EAAQ7E,GAElC,OACGd,KAAayV,IACZzV,IAAY8D,EAAU2R,EAAepP,GAAO,IAC7CrG,GAAWiC,EAAIuT,EAAsB1U,KAAUmB,EAAIsT,EAAazU,IdmK7D4U,CAAkC,CAChC/P,OAAQiI,GAAazM,QAAQwE,OAC7BU,MAAAA,EACAvF,KAAAA,EACAyU,YAAa7E,EAAevP,QAC5BqU,qBAAsB7E,EAAwBxP,UAElD,MAAMsU,EAAgBxT,EAAI2L,GAAazM,QAAQwE,OAAQ7E,GAEnDuF,GACF5D,EAAMiO,EAAevP,QAASL,GAC9BwU,EACEA,IACCG,IACA3R,EAAU2R,EAAepP,GAAO,GACnChI,EAAIuP,GAAazM,QAAQwE,OAAQ7E,EAAMuF,MAEnCpE,EAAI0O,EAAwBxP,QAASL,IAAS0T,GAAYrT,WAC5D9C,EAAIqS,EAAevP,QAASL,GAAM,GAClCwU,EAAiBA,GAAkBG,GAGrChT,EAAMmL,GAAazM,QAAQwE,OAAQ7E,KAIlCwU,IAAmB5X,EAAkB2X,KACrCjS,EAAc8R,IACfnH,GAAiB5M,QAAQ0T,eAEzB/G,gDACKoH,GACCV,GAAYrT,QAAU,CAAEnB,UAAWA,GAAY,KACnD6U,cAAc,MAIpB,IAGIc,GAAgBhH,cACpB,CAAC7N,EAA+B8U,KAC9B,MAAMjW,IAAEA,EAAGM,QAAEA,GAAYY,EAAUM,QAAQL,GACrC3D,EACJiN,IAASvK,EAAcF,IAAQjC,EAAkBkY,GAC7C,GACAA,EAEFlU,EAAa/B,IACdM,GAAW,IAAI+I,QACd,EAAGrJ,IAAKkW,KACLA,EAASzV,QAAUyV,EAAS1Y,QAAUA,GAElCqE,EAAY7B,KAASqF,EAAS7H,GACvCwC,EAAI8B,MAAQtE,EACHyE,EAAiBjC,GAC1B,IAAIA,EAAIM,SAAS+I,QACd8M,GACEA,EAAUjU,SAAY1E,EAAmBmN,SACxCwL,EAAU3Y,QAGPoJ,EAAgB5G,IAAQM,EACjCA,EAAQrB,OAAS,EACbqB,EAAQ+I,QACN,EAAGrJ,IAAKoW,KACLA,EAAY3V,QAAUzC,MAAMC,QAAQT,KAC9BA,EAAa+H,KACb/F,GAAiBA,IAAS4W,EAAY5Y,OAEzCA,IAAU4Y,EAAY5Y,OAE7B8C,EAAQ,GAAGN,IAAIS,UAAYjD,EAEhCwC,EAAIxC,MAAQA,GAGhB,IAGImT,GAAc3B,cAClB,CAAC7N,EAAe3B,KACd,GAAI4O,GAAiB5M,QAAQsO,QAAS,CACpC,MAAMuG,EAAalF,KAInB,OAFAhQ,GAAQ3B,GAAQd,EAAI2X,EAAYlV,EAAM3B,IAE9B2E,EAAUkS,EAAY3I,EAAiBlM,SAGjD,OAAO,GAET,IAGI8U,GAAyBtH,cAC7B,CACE7N,EACAuU,GAAe,KAIf,GACEtH,GAAiB5M,QAAQsO,SACzB1B,GAAiB5M,QAAQsD,YACzB,CACA,MAAMyR,GAAgBpS,EACpB7B,EAAIoL,EAAiBlM,QAASL,GAC9BF,EAAcC,EAAWC,EAAMC,IAE3BoV,EAAoBlU,EAAI2L,GAAazM,QAAQsD,YAAa3D,GAC1DsV,EAAkBxI,GAAazM,QAAQsO,QAE7CyG,EACI7X,EAAIuP,GAAazM,QAAQsD,YAAa3D,GAAM,GAC5C2B,EAAMmL,GAAazM,QAAQsD,YAAa3D,GAE5C,MAAMoU,EAAQ,CACZzF,QAASa,KACT7L,YAAamJ,GAAazM,QAAQsD,aAG9B4R,EACHtI,GAAiB5M,QAAQsO,SACxB2G,IAAoBlB,EAAMzF,SAC3B1B,GAAiB5M,QAAQsD,aACxB0R,IAAsBlU,EAAI2L,GAAazM,QAAQsD,YAAa3D,GAIhE,OAFAuV,GAAahB,GAAgBvH,GAAgBoH,GAEtCmB,EAAYnB,EAAQ,GAG7B,MAAO,IAET,IAGIoB,GAAoB3H,cACxB9I,MACE/E,EACAyV,KASA,MAAMlQ,SACEmQ,GACJ3V,EACA8T,GACA9T,EAAUM,QAAQL,GAClBC,IAEFD,GAIF,OAFAsU,GAAwBtU,EAAMuF,EAAOkQ,GAE9B7W,EAAY2G,IAErB,CAAC+O,GAAyBT,KAGtB8B,GAAoC9H,cACxC9I,MACEiE,IAIA,MAAMnE,OAAEA,SAAiB6O,GAAYrT,QACnC2P,KACAyD,EAAWpT,QACXwT,IAEI+B,EAAsB9I,GAAazM,QAAQnB,QAEjD,GAAIrC,MAAMC,QAAQkM,GAAQ,CACxB,MAAM6M,EAAgB7M,EACnBpJ,IAAKI,IACJ,MAAMuF,EAAQpE,EAAI0D,EAAQ7E,GAM1B,OAJAuF,EACIhI,EAAIuP,GAAazM,QAAQwE,OAAQ7E,EAAMuF,GACvC5D,EAAMmL,GAAazM,QAAQwE,OAAQ7E,IAE/BuF,IAETuQ,MAAM5Y,SAOT,OALA8P,GAAgB,CACd9N,QAASoD,EAAcuC,GACvBkP,cAAc,IAGT8B,EACF,CACL,MAAMtQ,EAAQpE,EAAI0D,EAAQmE,GAU1B,OARAsL,GACEtL,EACAzD,EACAqQ,IAAwBtT,EAAcuC,GACtC,GACAvC,EAAcuC,KAGRU,IAGZ,CAAC+O,GAAyBT,KAGtBlH,GAAUkB,cACd9I,MACE/E,IAEA,MAAMsQ,EAAStQ,GAAQyB,OAAOC,KAAK3B,EAAUM,SAI7C,GAFAgU,KAEIX,GAAYrT,QACd,OAAOsV,GAAkCrF,GAG3C,GAAIzT,MAAMC,QAAQwT,GAAS,EACxBtQ,IAAS8M,GAAazM,QAAQwE,OAAS,IACxC,MAAMnG,QAAeqX,QAAQC,IAC3B1F,EAAO1Q,IAAImF,MAAO1G,SAAemX,GAAkBnX,EAAM,QAK3D,OAHA2O,GAAgB,CACd+G,cAAc,IAETrV,EAAOoX,MAAM5Y,SAGtB,aAAasY,GAAkBlF,IAEjC,CAACqF,GAAmCH,KAGhCS,GAAoBpI,cACxB,CACE7N,EACA3D,GACEmS,YAAAA,EAAaZ,eAAAA,MAEf,MAAMvP,EAAO,GACbd,EAAIc,EAAM2B,EAAM3D,GAEhB,IAAK,MAAMwL,KAAaP,GAAQtH,EAAM3D,GAChC0D,EAAUM,QAAQwH,KACpBgN,GAAchN,EAAW1G,EAAI9C,EAAMwJ,IACnC2G,GAAe2G,GAAuBtN,GACtC+F,GAAkBjB,GAAQ9E,KAIhC,CAAC8E,GAASkI,GAAeM,KAGrBe,GAAmBrI,cACvB,CACE7N,EACA3D,EACA8Z,KAUA,IARCpS,IACElB,EAAYxG,IACbkB,EACE0C,EAAsBI,QACtBL,EACAnD,MAAMC,QAAQT,GAAS,IAAIA,oBAAcA,IAGzC0D,EAAUM,QAAQL,GACpB6U,GAAc7U,EAAM3D,GACpB8Z,EAAO3H,aAAe2G,GAAuBnV,GAC7CmW,EAAOvI,gBAAkBjB,GAAQ3M,QAC5B,IAAK6C,EAAYxG,KACtB4Z,GAAkBjW,EAAM3D,EAAO8Z,GAE3BjJ,GAAmB7M,QAAQ+V,IAAIpW,IAAO,CACxC,MAAM4D,EAAayS,GAAkBrW,IAASA,EAC9CzC,EAAIuS,EAA2BzP,QAASL,EAAM3D,GAE9CqT,EAA2BrP,QAAQuD,GAAY,CAC7CC,CAACD,GAAazC,EAAI2O,EAA2BzP,QAASuD,MAIrDqJ,GAAiB5M,QAAQsO,SACxB1B,GAAiB5M,QAAQsD,cAC3BwS,EAAO3H,cAEPjR,EACEuP,GAAazM,QAAQsD,YACrB3D,EACAkR,EACE7U,EACA8E,EAAIoL,EAAiBlM,QAASL,EAAM,IACpCmB,EAAI2L,GAAazM,QAAQsD,YAAa3D,EAAM,MAIhDgN,GAAgB,CACd2B,SAAU3L,iCACHgN,OAAanM,CAAC7D,GAAO3D,IAC1BkQ,EAAiBlM,aAO1B0D,GAAoBxG,EAAI0C,EAAsBI,QAASL,EAAM3D,IAEhE,CAAC8Y,GAAwBN,GAAeoB,KAGpCK,GAAqDtW,GACzDuT,EAAclT,SACd+S,EAAe/S,QAAQ+V,IAAIpW,IAC3BoT,EAAe/S,QAAQ+V,KAAKpW,EAAKuW,MAAM,QAAU,IAAI,IAEjDC,GACJxW,IAEA,IAAIyW,GAAQ,EAEZ,IAAKnU,EAAc+Q,EAAkBhT,SACnC,IAAK,MAAMrC,KAAOqV,EAAkBhT,QAE/BL,GACAqT,EAAkBhT,QAAQrC,GAAK0Y,OAChCrD,EAAkBhT,QAAQrC,GAAKoY,IAAIpW,KACnCqT,EAAkBhT,QAAQrC,GAAKoY,IAAIC,GAAkBrW,MAErDsT,EAA2BjT,QAAQrC,KACnCyY,GAAQ,GAKd,OAAOA,GAmHT,SAASE,GAAkDtY,GACzD,IAAK0F,EAAkB,CACrB,IAAIsF,EAAOD,GAAY/K,GAEvB,IAAK,MAAMhC,KAAS6Q,GAAmB7M,QACjCzC,EAAMvB,KAAWgN,EAAKhN,KACxBgN,iCACKA,IACHxF,CAACxH,GAAQ,MAKf,OAAOgN,EAET,OAAOhL,EAYT,SAAS2R,GAAU4G,GACjB,GAAI1S,EAAS0S,GACX,OAAO9W,EAAcC,EAAW6W,EAAS3W,GAG3C,GAAIpD,MAAMC,QAAQ8Z,GAAU,CAC1B,MAAMvY,EAAO,GAEb,IAAK,MAAM2B,KAAQ4W,EACjBrZ,EAAIc,EAAM2B,EAAMF,EAAcC,EAAWC,EAAMC,IAGjD,OAAO5B,EAGT,OAAOsY,GACLE,EACE9W,EACAqJ,GAAYnJ,EAAsBI,SAClC0D,IApJNyP,EAAgBnT,QAAUmT,EAAgBnT,QACtCmT,EAAgBnT,QAChB0E,OAASvF,KAAAA,EAAMmD,OAAAA,MACb,IAAI3C,EAAQ2C,EAAgB3C,KAC5B,MAAMI,EAAQL,EAAUM,QAAQL,GAChC,IAAIuF,EACArG,EAEJ,GAAIkB,EAAO,CACT,MAAMqI,EAAcjJ,IAASjD,EACvBua,EAAuBhJ,kBAC3BrF,YAAAA,EACAD,qBAAAA,GACAD,mBAAAA,GACAD,YAAanH,EAAI2L,GAAazM,QAAQ0M,QAAS/M,GAC/C0I,YAAaoE,GAAazM,QAAQqI,aAC/BiL,GAAQtT,UAEb,IAAI+T,EAAQe,GAAuBnV,GAAM,GACrCuU,GACDjS,EAAc8R,KACb3L,GAAe6N,GAAetW,GAsBlC,GAnBEyI,IACCtH,EAAI2L,GAAazM,QAAQ0M,QAAS/M,IACnCiN,GAAiB5M,QAAQ0M,UAEzBxP,EAAIuP,GAAazM,QAAQ0M,QAAS/M,GAAM,GACxCoU,iCACKA,IACHrH,QAASD,GAAazM,QAAQ0M,YAI7BhJ,GAAoB0B,EAAgB9C,IACvCpF,EACE0C,EAAsBI,QACtBL,EACAF,EAAcC,EAAWC,IAIzB8W,EAEF,OADCrO,GAAe+N,GAAoBxW,KAEhCsC,EAAc8R,IACbG,GAAgBjS,EAAc8R,KACjCpH,GAAgBoH,GAMpB,GAFAC,KAEIX,GAAYrT,QAAS,CACvB,MAAMwE,OAAEA,SAAiB6O,GAAYrT,QACnC2P,KACAyD,EAAWpT,QACXwT,IAEI+B,EAAsB9I,GAAazM,QAAQnB,QAGjD,GAFAqG,EAAQpE,EAAI0D,EAAQ7E,GAGlByF,EAAgB9C,KACf4C,GACDmO,GAAYrT,QACZ,CACA,MAAM0W,EAAiBV,GAAkBrW,GACnCgX,EAAe7V,EAAI0D,EAAQkS,EAAgB,IACjDC,EAAaxX,MACXwX,EAAavS,UACZc,EAAQyR,GAGTD,IACCC,GACC7V,EAAI2L,GAAazM,QAAQwE,OAAQkS,MAEnC/W,EAAO+W,GAIX7X,EAAUoD,EAAcuC,GAExB+Q,IAAwB1W,IAAYqV,GAAe,QAEnDhP,SACQmQ,GACJ3V,EACA8T,GACAzT,EACAH,IAEFD,IAGHyI,GAAe+N,GAAoBxW,GACpCsU,GAAwBtU,EAAMuF,EAAOgP,EAAcH,EAAOlV,KAuDlE,MAAM6Q,GAAmBlC,cACvB9I,MAAOpF,EAAS,MACd,MAAMsX,EAAmB3U,EAAcvC,EAAUM,SAC7CkM,EAAiBlM,QACjB,IAEEwE,OAAEA,SACC6O,GAAYrT,qDAEZ4W,GACAjH,MACArQ,GAEL8T,EAAWpT,QACXwT,KACI,GACF3U,EAAUoD,EAAcuC,GAE9BiI,GAAazM,QAAQnB,UAAYA,GAC/B8N,GAAgB,CACd9N,QAAAA,KAGN,CAAC2U,KAGGlE,GAA2B9B,cAC/B,CAACzN,EAAc8W,evB1sBjBnX,EACAoX,EACA/W,EACAH,EACA8D,EACAmT,GAEA,MAAMrY,IACJA,EACAA,KAAKmB,KAAEA,IACLI,EACEgX,EAAWrX,EAAUM,QAAQL,GAEnC,IAAK+D,EAAkB,CACrB,MAAM1H,EAAQyD,EAAcC,EAAWC,EAAMC,IAE5CrB,EAAYvC,IAAUkB,EAAI0C,EAAsBI,QAASL,EAAM3D,GAG7DwC,EAAIW,MAAS4X,EAKdxW,EAAa/B,IAAQ4G,EAAgB5G,GACnChC,MAAMC,QAAQsa,EAASjY,UAAYiY,EAASjY,QAAQrB,QACtDV,EAAQga,EAASjY,SAAS+I,QAAQ,CAAC7I,EAAS,GAAI3B,MAE3C0D,EAAW/B,EAAOR,MAAQ2D,EAAUnD,EAAQA,EAAOR,MACpDqY,KAEAG,EAAwBhY,EAAOR,IAAKsY,GACpCxV,EAAMyV,EAASjY,QAAS,IAAIzB,SAI5B0Z,EAASjY,UAAY/B,EAAQga,EAASjY,SAASrB,eAC1CiC,EAAUM,QAAQL,WAGpBD,EAAUM,QAAQL,IAEjBoB,EAAWvC,IAAQ2D,EAAU4U,EAAUvY,IAASqY,KAC1DG,EAAwBxY,EAAKsY,UAEtBpX,EAAUM,QAAQL,WAzBlBD,EAAUM,QAAQL,GuBurBvBsX,CACEvX,EACAyT,EAAgBnT,QAChBD,EACAH,EACA8D,EACAmT,GAGEnT,IACFpC,EAAMiO,EAAevP,QAASD,EAAMvB,IAAImB,MACxC2B,EAAMkO,EAAwBxP,QAASD,EAAMvB,IAAImB,QAGrD,CAAC+D,IAGG0L,GAAqB5B,cAAmB7N,IAC5C,GAAIuT,EAAclT,QAChB2M,SACK,CACL,IAAK,MAAMuK,KAAcnE,EAAe/S,QACtC,GAAIkX,EAAWpT,WAAWnE,GAAO,CAC/BgN,KACA,MAIJwJ,GAAoBxW,KAErB,IAEGwX,GAAiC3J,cACrC,CAACzN,EAAe8W,KACV9W,IACFuP,GAAyBvP,EAAO8W,GAE5BnT,IAAqB3G,EAAQgD,EAAMjB,SAAW,IAAIrB,SACpD6D,EAAMmL,GAAazM,QAAQwE,OAAQzE,EAAMvB,IAAImB,MAC7CzC,EAAIuP,GAAazM,QAAQsD,YAAavD,EAAMvB,IAAImB,MAAM,GAEtDgN,GAAgB,CACd2B,QAASa,OAGXvC,GAAiB5M,QAAQnB,SACvBwU,GAAYrT,SACZ0P,KACFN,GAAmBrP,EAAMvB,IAAImB,SAInC,CAAC+P,GAAkBJ,KAiCf8H,GAAgB5J,cACpB,CAAI6J,EAAgCjZ,EAAkBkZ,KACpD,MAAM7P,EAAc6P,EAChBtE,EAAkBhT,QAAQsX,GAC1BvE,EAAe/S,QACnB,IAAIuH,EAAciP,EAChB9W,EACAqJ,GAAYnJ,EAAsBI,SAClC0D,GACA,EACA2T,GAGF,GAAIxT,EAASwT,GAAa,CACxB,MAAMX,EAAiBV,GAAkBqB,IAAeA,EASxD,OAPIxK,GAAmB7M,QAAQ+V,IAAIW,KACjCnP,iCACKqI,EAAoB5P,SACpBuH,IAIAgQ,GACLhQ,EACA8P,EACA5P,EACAlJ,EAAYuC,EAAIoL,EAAiBlM,QAASqX,IACtCjZ,EACA0C,EAAIoL,EAAiBlM,QAASqX,IAClC,GAIJ,MAAMG,EAAwBjZ,EAAYH,GACtC8N,EAAiBlM,QACjB5B,EAEJ,OAAI5B,MAAMC,QAAQ4a,GACTA,EAAW/Y,OAChB,CAACS,EAAUY,mCACNZ,IACHyE,CAAC7D,GAAO4X,GACNhQ,EACA5H,EACA8H,EACA+P,KAKJ,KAIJtE,EAAclT,QAAUzB,EAAY+Y,GAE7BtT,GACH/B,EAAcsF,IAAgBA,GAC7BiQ,KAGP,IAoCF,SAASC,GACPjZ,EACAM,EAAkC,IA2BlC,MAAMa,KAAEA,EAAIR,KAAEA,EAAInD,MAAEA,GAAUwC,EACxBkZ,iBACJlZ,IAAAA,GACGM,GAECmR,EAASvQ,EAAUM,QACnBqF,EAAoBsS,GAA0BnZ,GAC9CoZ,EAAe7K,GAAmBF,GAAmB7M,QAASL,GAC9DkY,EAAcC,GAClB7O,MAAWvK,EAAcF,IAAQsZ,IAAetZ,GAClD,IAEIJ,EAFA2B,EAAQkQ,EAAOtQ,GACfoY,GAAsB,EAG1B,GACEhY,IACCsF,EACG7I,MAAMC,QAAQsD,EAAMjB,UACpB/B,EAAQgD,EAAMjB,SAASiF,KAAM/E,GACpBhD,IAAUgD,EAAOR,IAAIxC,OAAS6b,EAAW7Y,EAAOR,MAEzDqZ,EAAW9X,EAAMvB,MAMrB,YAJAyR,EAAOtQ,kCACFI,GACAjB,IAMLiB,EADEZ,EACMkG,iBAEFvG,QAAS,IACJ/B,EAASgD,GAASA,EAAMjB,SAAY,IACvC,CACEN,IAAAA,IAGJA,IAAK,CAAEW,KAAAA,EAAMQ,KAAAA,IACVb,oBAGA4Y,GAGDA,EAGVzH,EAAOtQ,GAAQI,EAEf,MAAMiY,EAAuBzZ,EAC3BuC,EAAIlB,EAAsBI,QAASL,IAGhCsC,EAAciK,EAAiBlM,UAAagY,IAC/C5Z,EAAe0C,EACbkX,EACI9L,EAAiBlM,QACjBJ,EAAsBI,QAC1BL,GAEFoY,EAAsBxZ,EAAYH,GAE7B2Z,GAAwBH,GAC3BpD,GAAc7U,EAAiCvB,IAI9C6D,EAAcnD,KACjB5B,EAAIsS,EAAwBxP,QAASL,GAAM,IAEtC8J,IAAcmD,GAAiB5M,QAAQnB,SAC1CwW,GACE3V,EACA8T,GACAzT,EACAH,GACAqY,KAAM/S,IACN,MAAMqQ,EAAsB9I,GAAazM,QAAQnB,QAEjDoD,EAAciD,GACVhI,EAAIqS,EAAevP,QAASL,GAAM,GAClC2B,EAAMiO,EAAevP,QAASL,GAElC4V,IAAwBtT,EAAciD,IAAUyH,SAKlDjJ,GAAsBkU,GAAgBG,IACvCH,GAAgBtW,EAAMmL,GAAazM,QAAQsD,YAAa3D,GAGvDR,ae1gCNX,IAAEA,GACF0Z,EACApB,GAEIpY,EAAcF,IAAQsY,IACxBtY,EAAI2Z,iBACFD,EAA0Bhc,EAAgBA,EAC1C4a,GAEFtY,EAAI2Z,iBAAiBjc,EAAa4a,IfkgChCsB,CACE/S,GAAqBtF,EAAMjB,QACvBiB,EAAMjB,QAAQiB,EAAMjB,QAAQrB,OAAS,GACrCsC,EACJsF,GgBhhCW,ehBghCwB7G,EgBhhCjCW,KhBihCFgU,EAAgBnT,SAuCtB,MAAMqY,GAAe7K,cACnB,CACE8K,EACAC,IACG7T,MAAO8T,IACNA,GAAKA,EAAEC,iBACTD,EAAEC,iBACFD,EAAEE,WAEJ,IAAIC,EAAyC,GACzCpR,EAAc+O,GAChBE,EACE9W,EACAqJ,GAAYnJ,EAAsBI,SAClC0D,GACA,IAIJkJ,GAAiB5M,QAAQ4T,cACvBjH,GAAgB,CACdiH,cAAc,IAGlB,IACE,GAAIP,GAAYrT,QAAS,CACvB,MAAMwE,OAAEA,EAAMlF,OAAEA,SAAiB+T,GAAYrT,QAC3CuH,EACA6L,EAAWpT,QACXwT,IAEF/G,GAAazM,QAAQwE,OAASmU,EAAcnU,EAC5C+C,EAAcjI,OAEd,IAAK,MAAMS,KAASqB,OAAO9B,OAAOI,EAAUM,SAC1C,GAAID,EAAO,CACT,MAAMJ,KAAEA,GAASI,EAAMvB,IAEjBoa,QAAmBvD,GACvB3V,EACA8T,GACAzT,EACAH,GAGEgZ,EAAWjZ,IACbzC,EAAIyb,EAAahZ,EAAMiZ,EAAWjZ,IAClC2B,EAAMiO,EAAevP,QAASL,IACrBmB,EAAI0O,EAAwBxP,QAASL,KAC9C2B,EAAMmL,GAAazM,QAAQwE,OAAQ7E,GACnCzC,EAAIqS,EAAevP,QAASL,GAAM,IAOxCsC,EAAc0W,IACdvX,OAAOC,KAAKoL,GAAazM,QAAQwE,QAAQiR,MACtC9V,GAASA,KAAQD,EAAUM,UAG9B2M,GAAgB,CACdnI,OAAQ,GACRoP,cAAc,UAEV0E,EAAQ/Q,EAAaiR,KAE3B/L,GAAazM,QAAQwE,sCAChBiI,GAAazM,QAAQwE,QACrBmU,GAELJ,SAAoBA,EAAU9L,GAAazM,QAAQwE,OAAQgU,GAC3D3F,GiBjoCK,EACb5C,EACA0I,KAEA,IAAK,MAAMhb,KAAOsS,EAChB,GAAInP,EAAI6X,EAAahb,GAAM,CACzB,MAAMoC,EAAQkQ,EAAOtS,GAErB,GAAIoC,EAAO,CACT,GAAIA,EAAMvB,IAAI6O,OAAS9O,EAAYwB,EAAMvB,IAAI6O,SAC3C,MACK,GAAItN,EAAMjB,QAAS,CACxBiB,EAAMjB,QAAQ,GAAGN,IAAI6O,QAErB,UjBonCEwL,CAAkBnZ,EAAUM,QAASyM,GAAazM,QAAQwE,iBAG9DiI,GAAazM,QAAQ4T,cAAe,EACpCjH,GAAgB,CACdtE,aAAa,EACbuL,cAAc,EACdC,mBAAoB5R,EAAcwK,GAAazM,QAAQwE,QACvDmP,YAAalH,GAAazM,QAAQ2T,YAAc,MAItD,CAACd,EAAkBW,KAwErBxF,YAAgB,KACd2E,GAAY/F,GAAiB5M,QAAQnB,SAAW6Q,KAChDoE,GAAY9T,QACV8T,GAAY9T,UAAYiJ,GACpB6K,GAAY9T,iBkBztCpBN,EACAyX,GAKA,MAAM2B,EAAW,IAAIC,iBAAiB,KACpC,IAAK,MAAMhZ,KAASqB,OAAO9B,OAAOI,EAAUM,SAC1C,GAAID,GAASA,EAAMjB,QACjB,IAAK,MAAME,KAAUe,EAAMjB,QACrBE,GAAUA,EAAOR,KAAOuC,EAAW/B,EAAOR,MAC5C2Y,EAA+BpX,QAG1BA,GAASgB,EAAWhB,EAAMvB,MACnC2Y,EAA+BpX,KAUrC,OALA+Y,EAASE,QAAQnQ,OAAOC,SAAU,CAChCmQ,WAAW,EACXC,SAAS,IAGJJ,ElBisCCK,CAAYzZ,EAAWyX,KAC5B,CAACA,GAAgCjL,EAAiBlM,UAErDgO,YACE,IAAM,KACJ8F,GAAY9T,SAAW8T,GAAY9T,QAAQoZ,aAC3ClK,EAAUlP,SAAU,EAMpBoB,OAAO9B,OAAOI,EAAUM,SAAS6H,QAAS9H,GACxCoX,GAA+BpX,GAAO,KAG1C,KAGG4S,GAAY/F,GAAiB5M,QAAQnB,UACxC2N,GAAU3N,QACR8D,EAAU4M,EAAevP,QAASwP,EAAwBxP,UAC1DiC,EAAcwK,GAAazM,QAAQwE,SAGvC,MAAM6U,GAAc,CAClB/M,QAAAA,GACAH,SAAUqB,eA5tBZ,SACE7N,EACA3D,EACA8Z,GAEAD,GAAiBlW,EAAM3D,EAAO8Z,GAAU,IACxCG,GAAetW,IAASgN,KACxBwJ,GAAoBxW,KAqtBkB,CAACkW,GAAkBvJ,KACzDqD,UAAWnC,cAAkBmC,GAAW,IACxCvD,SAAUoB,eAvNZ,SACE8L,EAKAxa,GAEA,IAAK4K,GACH,GAAI7F,EAASyV,GACX7B,GAAiB,CAAE9X,KAAM2Z,GAAwBxa,OAC5C,CAAA,IACLhB,EAASwb,MACT,SAAUA,GAIV,OAAQ9a,GACNA,GAAOiZ,GAAiBjZ,EAAK8a,GAH/B7B,GAAiB6B,EAAsBxa,MAwML,CAACoN,EAAiBlM,UACxDqM,WAAYmB,eAjXd,SACE7N,GAEA,IAAK,MAAM6H,KAAahL,MAAMC,QAAQkD,GAAQA,EAAO,CAACA,GACpDwX,GAA+BzX,EAAUM,QAAQwH,IAAY,KA6WrB,IAC1CgF,UAAW7C,GACP,IAAIC,MAAM4C,GAAW,CACnB1L,IAAK,CAAC3C,EAAKob,KAST,GAAIA,KAAQpb,EAEV,OADAyO,GAAiB5M,QAAQuZ,IAAQ,EAC1Bpb,EAAIob,MAMjB/M,IAGAT,GAAUyN,UACd,mBACErK,YAAAA,GACAC,mBAAAA,GACA1L,iBAAAA,EACAiJ,gBAAAA,GACA2C,yBAAAA,GACA8H,cAAAA,GACA5N,KAAM8J,GAAQtT,QACduM,eAAgB,CACdrE,mBAAAA,GACAC,qBAAAA,IAEFuH,iBAAkBiD,EAAWjD,QAAmBxR,EAChDwB,UAAAA,EACA2P,2BAAAA,EACA2D,kBAAAA,EACAC,2BAAAA,EACAxD,2BAAAA,EACAF,eAAAA,EACAC,wBAAAA,EACA3C,mBAAAA,GACAD,iBAAAA,GACAH,aAAAA,GACAP,iBAAAA,EACAtM,sBAAAA,EACAgQ,oBAAAA,GACGyJ,IAEL,CACEnN,EAAiBlM,QACjBoP,GACA1L,EACA4L,GACA8H,KAIJ,sBACEqC,MAtbF,SACEpC,EACAjZ,GAEA,OAAOgZ,GAAcC,EAAYjZ,IAmbjC2N,QAAAA,GACAsM,aAAAA,GACAqB,MAAOlM,cA1IK,CACZlO,EACAqa,EAAiC,MAEjC,GAAI1Q,GACF,IAAK,MAAMlJ,KAASqB,OAAO9B,OAAOI,EAAUM,SAC1C,GAAID,EAAO,CACT,MAAMvB,IAAEA,EAAGM,QAAEA,GAAYiB,EACnB6Z,EACJjC,GAA0BnZ,IAAQhC,MAAMC,QAAQqC,GAC5CA,EAAQ,GAAGN,IACXA,EAEN,GAAIE,EAAckb,GAChB,IACEA,EAASC,QAAQ,QAASH,QAC1B,MACA,WAMVha,EAAUM,QAAU,GACpBkM,EAAiBlM,yBAAgBV,GAAU4M,EAAiBlM,SAC5DV,GAAU6W,GAAoB,IAE9B/U,OAAO9B,OAAO+P,EAA2BrP,SAAS6H,QAC/CiS,GAAoBlT,GAAWkT,IAAoBA,KAGtDla,EAAsBI,QAAU0D,EAC5B,GACAqF,GAAYzJ,GAAU4M,EAAiBlM,SAhE3B,GAChBwE,OAAAA,EACA8J,QAAAA,EACAjG,YAAAA,EACAqE,QAAAA,EACA7N,QAAAA,EACA8U,YAAAA,EACArQ,YAAAA,MAEKzE,IACH0Q,EAAevP,QAAU,GACzBwP,EAAwBxP,QAAU,IAGpCyP,EAA2BzP,QAAU,GACrC+S,EAAe/S,QAAU,IAAIsJ,IAC7B4J,EAAclT,SAAU,EAExB2M,GAAgB,CACdgH,YAAaA,EAAclH,GAAazM,QAAQ2T,YAAc,EAC9DrF,UAASA,GAAU7B,GAAazM,QAAQsO,QACxCjG,cAAaA,GAAcoE,GAAazM,QAAQqI,YAChDxJ,UAASA,GAAU4N,GAAazM,QAAQnB,QACxCyE,YAAaA,EAAcmJ,GAAazM,QAAQsD,YAAc,GAC9DoJ,QAASA,EAAUD,GAAazM,QAAQ0M,QAAU,GAClDlI,OAAQA,EAASiI,GAAazM,QAAQwE,OAAS,GAC/CoP,cAAc,EACdC,oBAAoB,KAuCtBkG,CAAUJ,IAuGsB,IAChCK,YAAaxM,eA3iBf,SACE7N,GAEAA,IACGnD,MAAMC,QAAQkD,GAAQA,EAAO,CAACA,IAAOkI,QAASoS,GAC7Cva,EAAUM,QAAQia,IAAc1c,EAAM0c,UAC3BxN,GAAazM,QAAQwE,OAAOyV,GACnC3Y,EAAMmL,GAAazM,QAAQwE,OAAQyV,IAG3CtN,GAAgB,CACdnI,OAAQ7E,EAAO8M,GAAazM,QAAQwE,OAAS,OAgiBH,IAC5C0V,SAAU1M,eA7hBZ,SAAkB7N,EAA+BuF,GAC/C,MAAM1G,GAAOkB,EAAUM,QAAQL,IAAS,IAAKnB,IAE7CtB,EAAIuP,GAAazM,QAAQwE,OAAQ7E,iCAC5BuF,IACH1G,IAAAA,KAGFmO,GAAgB,CACd9N,SAAS,IAGXqG,EAAMgN,aAAe1T,GAAOA,EAAI6O,OAAS7O,EAAI6O,UAihBP,IACtC7I,OAAQgI,GAAUhI,QACf6U,8CmBlyCqCtN,QAC1CA,EAAOpM,KACPA,EAAIvB,aACJA,IAEA,MAAM6N,EAAUjC,MAUVgJ,kBACJA,EAAiBC,2BACjBA,EAA0BmE,cAC1BA,EAAalL,iBACbA,GACEH,GAAWE,EAAQF,QACjBoO,EAAcjN,aAA0B,GACxCkN,EAAQhN,WACRiN,EAAkBjN,SAAahP,GA8BrC,OA5BA4P,YAAgB,KASd,MAAMsM,EAAMF,EAAMpa,QAAU4L,KACtB2O,EAAwBtH,EAA2BjT,QACnDwa,EAAkBxH,EAAkBhT,QAK1C,OAJAwa,EAAgBF,GAAM,IAAIhR,IAC1BiR,EAAsBD,GAAM,IAAMH,EAAY,IAC9C/C,EAAczX,EAAM0a,EAAgBra,QAASsa,GAEtC,YACEE,EAAgBF,UAChBC,EAAsBD,KAE9B,CACD3a,EACAsT,EACAD,EACAoE,EACAiD,IAGKD,EAAMpa,QACToX,EAAczX,EAAM0a,EAAgBra,QAASoa,EAAMpa,SACnDzB,EAAYH,GACZyF,EAASlE,GACPmB,EAAIoL,EAAiBlM,QAASL,GAC9BnD,MAAMC,QAAQkD,GACdA,EAAKrB,OACH,CAACS,EAAUkb,mCACNlb,IACHyE,CAACyW,GAAYnZ,EAAIoL,EAAiBlM,QAASia,KAE7C,IAEF/N,EAAiBlM,QACnB5B"}