@helsenorge/designsystem-react 1.0.0-beta90 → 1.0.0-beta91

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.
Files changed (105) hide show
  1. package/Button-2be46c88.js +2 -0
  2. package/Button-2be46c88.js.map +1 -0
  3. package/Checkbox-0ba01292.js +2 -0
  4. package/Checkbox-0ba01292.js.map +1 -0
  5. package/Close-80751ae6.js +2 -0
  6. package/Close-80751ae6.js.map +1 -0
  7. package/FormGroup-9555dd73.js +2 -0
  8. package/FormGroup-9555dd73.js.map +1 -0
  9. package/Icon-9b4a8a2d.js +2 -0
  10. package/Icon-9b4a8a2d.js.map +1 -0
  11. package/Loader-3589bdb1.js +2 -0
  12. package/Loader-3589bdb1.js.map +1 -0
  13. package/Modal-e7d8aac4.js +2 -0
  14. package/Modal-e7d8aac4.js.map +1 -0
  15. package/RadioButton-84ca988e.js +2 -0
  16. package/RadioButton-84ca988e.js.map +1 -0
  17. package/Textarea-9c91191a.js +2 -0
  18. package/Textarea-9c91191a.js.map +1 -0
  19. package/Validation-1236e8ef.js +2 -0
  20. package/Validation-1236e8ef.js.map +1 -0
  21. package/components/AnchorLink/index.js +1 -1
  22. package/components/Avatar/index.js +1 -1
  23. package/components/Button/index.js +1 -1
  24. package/components/ButtonWithModal/componentdata.json +19 -0
  25. package/components/ButtonWithModal/index.js +1 -1
  26. package/components/Checkbox/Checkbox.d.ts +3 -3
  27. package/components/Checkbox/Checkbox.d.ts.map +1 -1
  28. package/components/Checkbox/componentdata.json +13 -7
  29. package/components/Checkbox/index.js +1 -1
  30. package/components/Close/index.js +1 -1
  31. package/components/ExpanderList/index.js +1 -1
  32. package/components/FormExample/FormExample.d.ts +7 -5
  33. package/components/FormExample/FormExample.d.ts.map +1 -1
  34. package/components/FormExample/componentdata.json +9 -3
  35. package/components/FormExample/index.js +1 -1
  36. package/components/FormExample/index.js.map +1 -1
  37. package/components/FormGroup/FormGroup.d.ts +5 -6
  38. package/components/FormGroup/FormGroup.d.ts.map +1 -1
  39. package/components/FormGroup/componentdata.json +32 -7
  40. package/components/FormGroup/index.js +1 -1
  41. package/components/FormGroup/styles.module.scss +12 -3
  42. package/components/Icons/AcupunctureBack.js +1 -1
  43. package/components/Icons/Icon.js +1 -1
  44. package/components/Icons/NoEye.js +1 -1
  45. package/components/Icons/SectionSign.js +1 -1
  46. package/components/Icons/SpeechBubble.js +1 -1
  47. package/components/Icons/SupportingPerson.js +1 -1
  48. package/components/Icons/Syringe.js +1 -1
  49. package/components/Icons/index.js +1 -1
  50. package/components/LinkList/index.js +1 -1
  51. package/components/Loader/Loader.d.ts +7 -1
  52. package/components/Loader/Loader.d.ts.map +1 -1
  53. package/components/Loader/componentdata.json +32 -1
  54. package/components/Loader/index.js +1 -1
  55. package/components/Loader/styles.module.scss +19 -4
  56. package/components/Modal/Modal.d.ts +4 -0
  57. package/components/Modal/Modal.d.ts.map +1 -1
  58. package/components/Modal/componentdata.json +21 -0
  59. package/components/Modal/index.js +1 -1
  60. package/components/Modal/styles.module.scss +0 -1
  61. package/components/NotificationPanel/index.js +1 -1
  62. package/components/RadioButton/RadioButton.d.ts +31 -0
  63. package/components/RadioButton/RadioButton.d.ts.map +1 -0
  64. package/components/RadioButton/componentdata.json +265 -0
  65. package/components/RadioButton/index.d.ts +3 -0
  66. package/components/RadioButton/index.d.ts.map +1 -0
  67. package/components/RadioButton/index.js +2 -0
  68. package/components/RadioButton/index.js.map +1 -0
  69. package/components/RadioButton/styles.module.scss +236 -0
  70. package/components/RadioButton/styles.module.scss.d.ts +23 -0
  71. package/components/Textarea/Textarea.d.ts +31 -0
  72. package/components/Textarea/Textarea.d.ts.map +1 -0
  73. package/components/Textarea/componentdata.json +527 -0
  74. package/components/Textarea/index.d.ts +3 -0
  75. package/components/Textarea/index.d.ts.map +1 -0
  76. package/components/Textarea/index.js +2 -0
  77. package/components/Textarea/index.js.map +1 -0
  78. package/components/Textarea/styles.module.scss +154 -0
  79. package/components/Textarea/styles.module.scss.d.ts +21 -0
  80. package/components/Tile/index.js +1 -1
  81. package/components/Validation/Validation.d.ts +2 -2
  82. package/components/Validation/Validation.d.ts.map +1 -1
  83. package/components/Validation/componentdata.json +3 -3
  84. package/components/Validation/index.js +1 -1
  85. package/constants-a4b0b501.js +2 -0
  86. package/constants-a4b0b501.js.map +1 -0
  87. package/constants.d.ts +29 -0
  88. package/constants.d.ts.map +1 -1
  89. package/package.json +1 -1
  90. package/Button-48132cc3.js +0 -2
  91. package/Button-48132cc3.js.map +0 -1
  92. package/Checkbox-46666e69.js +0 -2
  93. package/Checkbox-46666e69.js.map +0 -1
  94. package/Close-591125bb.js +0 -2
  95. package/Close-591125bb.js.map +0 -1
  96. package/FormGroup-56d60079.js +0 -2
  97. package/FormGroup-56d60079.js.map +0 -1
  98. package/Loader-6ff0d481.js +0 -2
  99. package/Loader-6ff0d481.js.map +0 -1
  100. package/Modal-145869ba.js +0 -2
  101. package/Modal-145869ba.js.map +0 -1
  102. package/Validation-372a97b9.js +0 -2
  103. package/Validation-372a97b9.js.map +0 -1
  104. package/constants-d919236e.js +0 -2
  105. package/constants-d919236e.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../node_modules/react-hook-form/dist/index.esm.js"],"sourcesContent":["import { isValidElement, useRef, useState, useCallback, useEffect, useMemo, createContext, useContext, createElement, cloneElement } from 'react';\n\nvar isHTMLElement = (value) => value instanceof HTMLElement;\n\nconst EVENTS = {\r\n BLUR: 'blur',\r\n CHANGE: 'change',\r\n INPUT: 'input',\r\n};\r\nconst VALIDATION_MODE = {\r\n onBlur: 'onBlur',\r\n onChange: 'onChange',\r\n onSubmit: 'onSubmit',\r\n onTouched: 'onTouched',\r\n all: 'all',\r\n};\r\nconst SELECT = 'select';\r\nconst UNDEFINED = 'undefined';\r\nconst INPUT_VALIDATION_RULES = {\r\n max: 'max',\r\n min: 'min',\r\n maxLength: 'maxLength',\r\n minLength: 'minLength',\r\n pattern: 'pattern',\r\n required: 'required',\r\n validate: 'validate',\r\n};\n\nfunction attachEventListeners({ ref }, shouldAttachChangeEvent, handleChange) {\r\n if (isHTMLElement(ref) && handleChange) {\r\n ref.addEventListener(shouldAttachChangeEvent ? EVENTS.CHANGE : EVENTS.INPUT, handleChange);\r\n ref.addEventListener(EVENTS.BLUR, handleChange);\r\n }\r\n}\n\nvar isNullOrUndefined = (value) => value == null;\n\nconst isObjectType = (value) => typeof value === 'object';\r\nvar isObject = (value) => !isNullOrUndefined(value) &&\r\n !Array.isArray(value) &&\r\n isObjectType(value) &&\r\n !(value instanceof Date);\n\nvar isKey = (value) => /^\\w*$/.test(value);\n\nvar compact = (value) => value.filter(Boolean);\n\nvar stringToPath = (input) => compact(input\r\n .replace(/[\"|']/g, '')\r\n .replace(/\\[/g, '.')\r\n .replace(/\\]/g, '')\r\n .split('.'));\n\nfunction set(object, path, value) {\r\n let index = -1;\r\n const tempPath = isKey(path) ? [path] : stringToPath(path);\r\n const length = tempPath.length;\r\n const lastIndex = length - 1;\r\n while (++index < length) {\r\n const key = tempPath[index];\r\n let newValue = value;\r\n if (index !== lastIndex) {\r\n const objValue = object[key];\r\n newValue =\r\n isObject(objValue) || Array.isArray(objValue)\r\n ? objValue\r\n : !isNaN(+tempPath[index + 1])\r\n ? []\r\n : {};\r\n }\r\n object[key] = newValue;\r\n object = object[key];\r\n }\r\n return object;\r\n}\n\nvar transformToNestObject = (data, value = {}) => {\r\n for (const key in data) {\r\n !isKey(key) ? set(value, key, data[key]) : (value[key] = data[key]);\r\n }\r\n return value;\r\n};\n\nvar isUndefined = (val) => val === undefined;\n\nvar get = (obj = {}, path, defaultValue) => {\r\n const result = compact(path.split(/[,[\\].]+?/)).reduce((result, key) => (isNullOrUndefined(result) ? result : result[key]), obj);\r\n return isUndefined(result) || result === obj\r\n ? isUndefined(obj[path])\r\n ? defaultValue\r\n : obj[path]\r\n : result;\r\n};\n\nvar focusOnErrorField = (fields, fieldErrors) => {\r\n for (const key in fields) {\r\n if (get(fieldErrors, key)) {\r\n const field = fields[key];\r\n if (field) {\r\n if (field.ref.focus && isUndefined(field.ref.focus())) {\r\n break;\r\n }\r\n else if (field.options) {\r\n field.options[0].ref.focus();\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n};\n\nvar removeAllEventListeners = (ref, validateWithStateUpdate) => {\r\n if (isHTMLElement(ref) && ref.removeEventListener) {\r\n ref.removeEventListener(EVENTS.INPUT, validateWithStateUpdate);\r\n ref.removeEventListener(EVENTS.CHANGE, validateWithStateUpdate);\r\n ref.removeEventListener(EVENTS.BLUR, validateWithStateUpdate);\r\n }\r\n};\n\nconst defaultReturn = {\r\n isValid: false,\r\n value: null,\r\n};\r\nvar getRadioValue = (options) => Array.isArray(options)\r\n ? options.reduce((previous, option) => option && option.ref.checked\r\n ? {\r\n isValid: true,\r\n value: option.ref.value,\r\n }\r\n : previous, defaultReturn)\r\n : defaultReturn;\n\nvar getMultipleSelectValue = (options) => [...options]\r\n .filter(({ selected }) => selected)\r\n .map(({ value }) => value);\n\nvar isRadioInput = (element) => element.type === 'radio';\n\nvar isFileInput = (element) => element.type === 'file';\n\nvar isCheckBoxInput = (element) => element.type === 'checkbox';\n\nvar isMultipleSelect = (element) => element.type === `${SELECT}-multiple`;\n\nconst defaultResult = {\r\n value: false,\r\n isValid: false,\r\n};\r\nconst validResult = { value: true, isValid: true };\r\nvar getCheckboxValue = (options) => {\r\n if (Array.isArray(options)) {\r\n if (options.length > 1) {\r\n const values = options\r\n .filter((option) => option && option.ref.checked)\r\n .map(({ ref: { value } }) => value);\r\n return { value: values, isValid: !!values.length };\r\n }\r\n const { checked, value, attributes } = options[0].ref;\r\n return checked\r\n ? attributes && !isUndefined(attributes.value)\r\n ? isUndefined(value) || value === ''\r\n ? validResult\r\n : { value: value, isValid: true }\r\n : validResult\r\n : defaultResult;\r\n }\r\n return defaultResult;\r\n};\n\nfunction getFieldValue(fieldsRef, name, shallowFieldsStateRef, excludeDisabled, shouldKeepRawValue) {\r\n const field = fieldsRef.current[name];\r\n if (field) {\r\n const { ref: { value, disabled }, ref, valueAsNumber, valueAsDate, setValueAs, } = field;\r\n if (disabled && excludeDisabled) {\r\n return;\r\n }\r\n if (isFileInput(ref)) {\r\n return ref.files;\r\n }\r\n if (isRadioInput(ref)) {\r\n return getRadioValue(field.options).value;\r\n }\r\n if (isMultipleSelect(ref)) {\r\n return getMultipleSelectValue(ref.options);\r\n }\r\n if (isCheckBoxInput(ref)) {\r\n return getCheckboxValue(field.options).value;\r\n }\r\n return shouldKeepRawValue\r\n ? value\r\n : valueAsNumber\r\n ? value === ''\r\n ? NaN\r\n : +value\r\n : valueAsDate\r\n ? ref.valueAsDate\r\n : setValueAs\r\n ? setValueAs(value)\r\n : value;\r\n }\r\n if (shallowFieldsStateRef) {\r\n return get(shallowFieldsStateRef.current, name);\r\n }\r\n}\n\nfunction isDetached(element) {\r\n if (!element) {\r\n return true;\r\n }\r\n if (!(element instanceof HTMLElement) ||\r\n element.nodeType === Node.DOCUMENT_NODE) {\r\n return false;\r\n }\r\n return isDetached(element.parentNode);\r\n}\n\nvar isEmptyObject = (value) => isObject(value) && !Object.keys(value).length;\n\nvar isBoolean = (value) => typeof value === 'boolean';\n\nfunction baseGet(object, updatePath) {\r\n const length = updatePath.slice(0, -1).length;\r\n let index = 0;\r\n while (index < length) {\r\n object = isUndefined(object) ? index++ : object[updatePath[index++]];\r\n }\r\n return object;\r\n}\r\nfunction unset(object, path) {\r\n const updatePath = isKey(path) ? [path] : stringToPath(path);\r\n const childObject = updatePath.length == 1 ? object : baseGet(object, updatePath);\r\n const key = updatePath[updatePath.length - 1];\r\n let previousObjRef;\r\n if (childObject) {\r\n delete childObject[key];\r\n }\r\n for (let k = 0; k < updatePath.slice(0, -1).length; k++) {\r\n let index = -1;\r\n let objectRef;\r\n const currentPaths = updatePath.slice(0, -(k + 1));\r\n const currentPathsLength = currentPaths.length - 1;\r\n if (k > 0) {\r\n previousObjRef = object;\r\n }\r\n while (++index < currentPaths.length) {\r\n const item = currentPaths[index];\r\n objectRef = objectRef ? objectRef[item] : object[item];\r\n if (currentPathsLength === index &&\r\n ((isObject(objectRef) && isEmptyObject(objectRef)) ||\r\n (Array.isArray(objectRef) &&\r\n !objectRef.filter((data) => (isObject(data) && !isEmptyObject(data)) || isBoolean(data)).length))) {\r\n previousObjRef ? delete previousObjRef[item] : delete object[item];\r\n }\r\n previousObjRef = objectRef;\r\n }\r\n }\r\n return object;\r\n}\n\nconst isSameRef = (fieldValue, ref) => fieldValue && fieldValue.ref === ref;\r\nfunction findRemovedFieldAndRemoveListener(fieldsRef, handleChange, field, shallowFieldsStateRef, shouldUnregister, forceDelete) {\r\n const { ref, ref: { name }, } = field;\r\n const fieldRef = fieldsRef.current[name];\r\n if (!shouldUnregister) {\r\n const value = getFieldValue(fieldsRef, name, shallowFieldsStateRef);\r\n !isUndefined(value) && set(shallowFieldsStateRef.current, name, value);\r\n }\r\n if (!ref.type || !fieldRef) {\r\n delete fieldsRef.current[name];\r\n return;\r\n }\r\n if (isRadioInput(ref) || isCheckBoxInput(ref)) {\r\n if (Array.isArray(fieldRef.options) && fieldRef.options.length) {\r\n compact(fieldRef.options).forEach((option = {}, index) => {\r\n if ((isDetached(option.ref) && isSameRef(option, option.ref)) ||\r\n forceDelete) {\r\n removeAllEventListeners(option.ref, handleChange);\r\n unset(fieldRef.options, `[${index}]`);\r\n }\r\n });\r\n if (fieldRef.options && !compact(fieldRef.options).length) {\r\n delete fieldsRef.current[name];\r\n }\r\n }\r\n else {\r\n delete fieldsRef.current[name];\r\n }\r\n }\r\n else if ((isDetached(ref) && isSameRef(fieldRef, ref)) || forceDelete) {\r\n removeAllEventListeners(ref, handleChange);\r\n delete fieldsRef.current[name];\r\n }\r\n}\n\nvar isPrimitive = (value) => isNullOrUndefined(value) || !isObjectType(value);\n\nfunction deepMerge(target, source) {\r\n if (isPrimitive(target) || isPrimitive(source)) {\r\n return source;\r\n }\r\n for (const key in source) {\r\n const targetValue = target[key];\r\n const sourceValue = source[key];\r\n try {\r\n target[key] =\r\n (isObject(targetValue) && isObject(sourceValue)) ||\r\n (Array.isArray(targetValue) && Array.isArray(sourceValue))\r\n ? deepMerge(targetValue, sourceValue)\r\n : sourceValue;\r\n }\r\n catch (_a) { }\r\n }\r\n return target;\r\n}\n\nfunction deepEqual(object1, object2, isErrorObject) {\r\n if (isPrimitive(object1) ||\r\n isPrimitive(object2) ||\r\n object1 instanceof Date ||\r\n object2 instanceof Date) {\r\n return object1 === object2;\r\n }\r\n if (!isValidElement(object1)) {\r\n const keys1 = Object.keys(object1);\r\n const keys2 = Object.keys(object2);\r\n if (keys1.length !== keys2.length) {\r\n return false;\r\n }\r\n for (const key of keys1) {\r\n const val1 = object1[key];\r\n if (!(isErrorObject && key === 'ref')) {\r\n const val2 = object2[key];\r\n if ((isObject(val1) || Array.isArray(val1)) &&\r\n (isObject(val2) || Array.isArray(val2))\r\n ? !deepEqual(val1, val2, isErrorObject)\r\n : val1 !== val2) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n}\n\nfunction setDirtyFields(values, defaultValues, dirtyFields, parentNode, parentName) {\r\n let index = -1;\r\n while (++index < values.length) {\r\n for (const key in values[index]) {\r\n if (Array.isArray(values[index][key])) {\r\n !dirtyFields[index] && (dirtyFields[index] = {});\r\n dirtyFields[index][key] = [];\r\n setDirtyFields(values[index][key], get(defaultValues[index] || {}, key, []), dirtyFields[index][key], dirtyFields[index], key);\r\n }\r\n else {\r\n deepEqual(get(defaultValues[index] || {}, key), values[index][key])\r\n ? set(dirtyFields[index] || {}, key)\r\n : (dirtyFields[index] = Object.assign(Object.assign({}, dirtyFields[index]), { [key]: true }));\r\n }\r\n }\r\n parentNode &&\r\n !dirtyFields.length &&\r\n delete parentNode[parentName];\r\n }\r\n return dirtyFields;\r\n}\r\nvar setFieldArrayDirtyFields = (values, defaultValues, dirtyFields) => deepMerge(setDirtyFields(values, defaultValues, dirtyFields.slice(0, values.length)), setDirtyFields(defaultValues, values, dirtyFields.slice(0, values.length)));\n\nvar isString = (value) => typeof value === 'string';\n\nvar getFieldsValues = (fieldsRef, shallowFieldsState, shouldUnregister, excludeDisabled, search) => {\r\n const output = {};\r\n for (const name in fieldsRef.current) {\r\n if (isUndefined(search) ||\r\n (isString(search)\r\n ? name.startsWith(search)\r\n : Array.isArray(search) && search.find((data) => name.startsWith(data)))) {\r\n output[name] = getFieldValue(fieldsRef, name, undefined, excludeDisabled);\r\n }\r\n }\r\n return shouldUnregister\r\n ? transformToNestObject(output)\r\n : deepMerge(shallowFieldsState, transformToNestObject(output));\r\n};\n\nvar isErrorStateChanged = ({ errors, name, error, validFields, fieldsWithValidation, }) => {\r\n const isValid = isUndefined(error);\r\n const previousError = get(errors, name);\r\n return ((isValid && !!previousError) ||\r\n (!isValid && !deepEqual(previousError, error, true)) ||\r\n (isValid && get(fieldsWithValidation, name) && !get(validFields, name)));\r\n};\n\nvar isRegex = (value) => value instanceof RegExp;\n\nvar getValueAndMessage = (validationData) => isObject(validationData) && !isRegex(validationData)\r\n ? validationData\r\n : {\r\n value: validationData,\r\n message: '',\r\n };\n\nvar isFunction = (value) => typeof value === 'function';\n\nvar isMessage = (value) => isString(value) || isValidElement(value);\n\nfunction getValidateError(result, ref, type = 'validate') {\r\n if (isMessage(result) || (isBoolean(result) && !result)) {\r\n return {\r\n type,\r\n message: isMessage(result) ? result : '',\r\n ref,\r\n };\r\n }\r\n}\n\nvar appendErrors = (name, validateAllFieldCriteria, errors, type, message) => validateAllFieldCriteria\r\n ? Object.assign(Object.assign({}, errors[name]), { types: Object.assign(Object.assign({}, (errors[name] && errors[name].types ? errors[name].types : {})), { [type]: message || true }) }) : {};\n\nvar validateField = async (fieldsRef, validateAllFieldCriteria, { ref, ref: { value }, options, required, maxLength, minLength, min, max, pattern, validate, }, shallowFieldsStateRef) => {\r\n const name = ref.name;\r\n const error = {};\r\n const isRadio = isRadioInput(ref);\r\n const isCheckBox = isCheckBoxInput(ref);\r\n const isRadioOrCheckbox = isRadio || isCheckBox;\r\n const isEmpty = value === '';\r\n const appendErrorsCurry = appendErrors.bind(null, name, validateAllFieldCriteria, error);\r\n const getMinMaxMessage = (exceedMax, maxLengthMessage, minLengthMessage, maxType = INPUT_VALIDATION_RULES.maxLength, minType = INPUT_VALIDATION_RULES.minLength) => {\r\n const message = exceedMax ? maxLengthMessage : minLengthMessage;\r\n error[name] = Object.assign({ type: exceedMax ? maxType : minType, message,\r\n ref }, (exceedMax\r\n ? appendErrorsCurry(maxType, message)\r\n : appendErrorsCurry(minType, message)));\r\n };\r\n if (required &&\r\n ((!isRadio && !isCheckBox && (isEmpty || isNullOrUndefined(value))) ||\r\n (isBoolean(value) && !value) ||\r\n (isCheckBox && !getCheckboxValue(options).isValid) ||\r\n (isRadio && !getRadioValue(options).isValid))) {\r\n const { value, message } = isMessage(required)\r\n ? { value: !!required, message: required }\r\n : getValueAndMessage(required);\r\n if (value) {\r\n error[name] = Object.assign({ type: INPUT_VALIDATION_RULES.required, message, ref: isRadioOrCheckbox\r\n ? ((fieldsRef.current[name].options || [])[0] || {}).ref\r\n : ref }, appendErrorsCurry(INPUT_VALIDATION_RULES.required, message));\r\n if (!validateAllFieldCriteria) {\r\n return error;\r\n }\r\n }\r\n }\r\n if ((!isNullOrUndefined(min) || !isNullOrUndefined(max)) && value !== '') {\r\n let exceedMax;\r\n let exceedMin;\r\n const maxOutput = getValueAndMessage(max);\r\n const minOutput = getValueAndMessage(min);\r\n if (!isNaN(value)) {\r\n const valueNumber = ref.valueAsNumber || parseFloat(value);\r\n if (!isNullOrUndefined(maxOutput.value)) {\r\n exceedMax = valueNumber > maxOutput.value;\r\n }\r\n if (!isNullOrUndefined(minOutput.value)) {\r\n exceedMin = valueNumber < minOutput.value;\r\n }\r\n }\r\n else {\r\n const valueDate = ref.valueAsDate || new Date(value);\r\n if (isString(maxOutput.value)) {\r\n exceedMax = valueDate > new Date(maxOutput.value);\r\n }\r\n if (isString(minOutput.value)) {\r\n exceedMin = valueDate < new Date(minOutput.value);\r\n }\r\n }\r\n if (exceedMax || exceedMin) {\r\n getMinMaxMessage(!!exceedMax, maxOutput.message, minOutput.message, INPUT_VALIDATION_RULES.max, INPUT_VALIDATION_RULES.min);\r\n if (!validateAllFieldCriteria) {\r\n return error;\r\n }\r\n }\r\n }\r\n if (isString(value) && !isEmpty && (maxLength || minLength)) {\r\n const maxLengthOutput = getValueAndMessage(maxLength);\r\n const minLengthOutput = getValueAndMessage(minLength);\r\n const exceedMax = !isNullOrUndefined(maxLengthOutput.value) &&\r\n value.length > maxLengthOutput.value;\r\n const exceedMin = !isNullOrUndefined(minLengthOutput.value) &&\r\n value.length < minLengthOutput.value;\r\n if (exceedMax || exceedMin) {\r\n getMinMaxMessage(exceedMax, maxLengthOutput.message, minLengthOutput.message);\r\n if (!validateAllFieldCriteria) {\r\n return error;\r\n }\r\n }\r\n }\r\n if (isString(value) && pattern && !isEmpty) {\r\n const { value: patternValue, message } = getValueAndMessage(pattern);\r\n if (isRegex(patternValue) && !patternValue.test(value)) {\r\n error[name] = Object.assign({ type: INPUT_VALIDATION_RULES.pattern, message,\r\n ref }, appendErrorsCurry(INPUT_VALIDATION_RULES.pattern, message));\r\n if (!validateAllFieldCriteria) {\r\n return error;\r\n }\r\n }\r\n }\r\n if (validate) {\r\n const fieldValue = getFieldValue(fieldsRef, name, shallowFieldsStateRef, false, true);\r\n const validateRef = isRadioOrCheckbox && options ? options[0].ref : ref;\r\n if (isFunction(validate)) {\r\n const result = await validate(fieldValue);\r\n const validateError = getValidateError(result, validateRef);\r\n if (validateError) {\r\n error[name] = Object.assign(Object.assign({}, validateError), appendErrorsCurry(INPUT_VALIDATION_RULES.validate, validateError.message));\r\n if (!validateAllFieldCriteria) {\r\n return error;\r\n }\r\n }\r\n }\r\n else if (isObject(validate)) {\r\n let validationResult = {};\r\n for (const [key, validateFunction] of Object.entries(validate)) {\r\n if (!isEmptyObject(validationResult) && !validateAllFieldCriteria) {\r\n break;\r\n }\r\n const validateResult = await validateFunction(fieldValue);\r\n const validateError = getValidateError(validateResult, validateRef, key);\r\n if (validateError) {\r\n validationResult = Object.assign(Object.assign({}, validateError), appendErrorsCurry(key, validateError.message));\r\n if (validateAllFieldCriteria) {\r\n error[name] = validationResult;\r\n }\r\n }\r\n }\r\n if (!isEmptyObject(validationResult)) {\r\n error[name] = Object.assign({ ref: validateRef }, validationResult);\r\n if (!validateAllFieldCriteria) {\r\n return error;\r\n }\r\n }\r\n }\r\n }\r\n return error;\r\n};\n\nconst getPath = (rootPath, values, paths = []) => {\r\n for (const property in values) {\r\n const rootName = (rootPath +\r\n (isObject(values)\r\n ? `.${property}`\r\n : `[${property}]`));\r\n isPrimitive(values[property])\r\n ? paths.push(rootName)\r\n : getPath(rootName, values[property], paths);\r\n }\r\n return paths;\r\n};\n\nvar assignWatchFields = (fieldValues, fieldName, watchFields, inputValue, isSingleField) => {\r\n let value = undefined;\r\n watchFields.add(fieldName);\r\n if (!isEmptyObject(fieldValues)) {\r\n value = get(fieldValues, fieldName);\r\n if (isObject(value) || Array.isArray(value)) {\r\n getPath(fieldName, value).forEach((name) => watchFields.add(name));\r\n }\r\n }\r\n return isUndefined(value)\r\n ? isSingleField\r\n ? inputValue\r\n : get(inputValue, fieldName)\r\n : value;\r\n};\n\nvar skipValidation = ({ isOnBlur, isOnChange, isOnTouch, isTouched, isReValidateOnBlur, isReValidateOnChange, isBlurEvent, isSubmitted, isOnAll, }) => {\r\n if (isOnAll) {\r\n return false;\r\n }\r\n else if (!isSubmitted && isOnTouch) {\r\n return !(isTouched || isBlurEvent);\r\n }\r\n else if (isSubmitted ? isReValidateOnBlur : isOnBlur) {\r\n return !isBlurEvent;\r\n }\r\n else if (isSubmitted ? isReValidateOnChange : isOnChange) {\r\n return isBlurEvent;\r\n }\r\n return true;\r\n};\n\nvar getFieldArrayParentName = (name) => name.substring(0, name.indexOf('['));\n\nconst isMatchFieldArrayName = (name, searchName) => RegExp(`^${searchName}([|.)\\\\d+`.replace(/\\[/g, '\\\\[').replace(/\\]/g, '\\\\]')).test(name);\r\nvar isNameInFieldArray = (names, name) => [...names].some((current) => isMatchFieldArrayName(name, current));\n\nvar isSelectInput = (element) => element.type === `${SELECT}-one`;\n\nfunction onDomRemove(fieldsRef, removeFieldEventListenerAndRef) {\r\n const observer = new MutationObserver(() => {\r\n for (const field of Object.values(fieldsRef.current)) {\r\n if (field && field.options) {\r\n for (const option of field.options) {\r\n if (option && option.ref && isDetached(option.ref)) {\r\n removeFieldEventListenerAndRef(field);\r\n }\r\n }\r\n }\r\n else if (field && isDetached(field.ref)) {\r\n removeFieldEventListenerAndRef(field);\r\n }\r\n }\r\n });\r\n observer.observe(window.document, {\r\n childList: true,\r\n subtree: true,\r\n });\r\n return observer;\r\n}\n\nvar isWeb = typeof window !== UNDEFINED && typeof document !== UNDEFINED;\n\nfunction cloneObject(data) {\r\n var _a;\r\n let copy;\r\n if (isPrimitive(data) ||\r\n (isWeb && (data instanceof File || isHTMLElement(data)))) {\r\n return data;\r\n }\r\n if (!['Set', 'Map', 'Object', 'Date', 'Array'].includes((_a = data.constructor) === null || _a === void 0 ? void 0 : _a.name)) {\r\n return data;\r\n }\r\n if (data instanceof Date) {\r\n copy = new Date(data.getTime());\r\n return copy;\r\n }\r\n if (data instanceof Set) {\r\n copy = new Set();\r\n for (const item of data) {\r\n copy.add(item);\r\n }\r\n return copy;\r\n }\r\n if (data instanceof Map) {\r\n copy = new Map();\r\n for (const key of data.keys()) {\r\n copy.set(key, cloneObject(data.get(key)));\r\n }\r\n return copy;\r\n }\r\n copy = Array.isArray(data) ? [] : {};\r\n for (const key in data) {\r\n copy[key] = cloneObject(data[key]);\r\n }\r\n return copy;\r\n}\n\nvar modeChecker = (mode) => ({\r\n isOnSubmit: !mode || mode === VALIDATION_MODE.onSubmit,\r\n isOnBlur: mode === VALIDATION_MODE.onBlur,\r\n isOnChange: mode === VALIDATION_MODE.onChange,\r\n isOnAll: mode === VALIDATION_MODE.all,\r\n isOnTouch: mode === VALIDATION_MODE.onTouched,\r\n});\n\nvar isRadioOrCheckboxFunction = (ref) => isRadioInput(ref) || isCheckBoxInput(ref);\n\nconst isWindowUndefined = typeof window === UNDEFINED;\r\nconst isProxyEnabled = isWeb ? 'Proxy' in window : typeof Proxy !== UNDEFINED;\r\nfunction useForm({ mode = VALIDATION_MODE.onSubmit, reValidateMode = VALIDATION_MODE.onChange, resolver, context, defaultValues = {}, shouldFocusError = true, shouldUnregister = true, criteriaMode, } = {}) {\r\n const fieldsRef = useRef({});\r\n const fieldArrayDefaultValuesRef = useRef({});\r\n const fieldArrayValuesRef = useRef({});\r\n const watchFieldsRef = useRef(new Set());\r\n const useWatchFieldsRef = useRef({});\r\n const useWatchRenderFunctionsRef = useRef({});\r\n const fieldsWithValidationRef = useRef({});\r\n const validFieldsRef = useRef({});\r\n const defaultValuesRef = useRef(defaultValues);\r\n const isUnMount = useRef(false);\r\n const isWatchAllRef = useRef(false);\r\n const handleChangeRef = useRef();\r\n const shallowFieldsStateRef = useRef({});\r\n const resetFieldArrayFunctionRef = useRef({});\r\n const contextRef = useRef(context);\r\n const resolverRef = useRef(resolver);\r\n const fieldArrayNamesRef = useRef(new Set());\r\n const modeRef = useRef(modeChecker(mode));\r\n const { isOnSubmit, isOnTouch } = modeRef.current;\r\n const isValidateAllFieldCriteria = criteriaMode === VALIDATION_MODE.all;\r\n const [formState, setFormState] = useState({\r\n isDirty: false,\r\n isValidating: false,\r\n dirtyFields: {},\r\n isSubmitted: false,\r\n submitCount: 0,\r\n touched: {},\r\n isSubmitting: false,\r\n isSubmitSuccessful: false,\r\n isValid: !isOnSubmit,\r\n errors: {},\r\n });\r\n const readFormStateRef = useRef({\r\n isDirty: !isProxyEnabled,\r\n dirtyFields: !isProxyEnabled,\r\n touched: !isProxyEnabled || isOnTouch,\r\n isValidating: !isProxyEnabled,\r\n isSubmitting: !isProxyEnabled,\r\n isValid: !isProxyEnabled,\r\n });\r\n const formStateRef = useRef(formState);\r\n const observerRef = useRef();\r\n const { isOnBlur: isReValidateOnBlur, isOnChange: isReValidateOnChange, } = useRef(modeChecker(reValidateMode)).current;\r\n contextRef.current = context;\r\n resolverRef.current = resolver;\r\n formStateRef.current = formState;\r\n shallowFieldsStateRef.current = shouldUnregister\r\n ? {}\r\n : isEmptyObject(shallowFieldsStateRef.current)\r\n ? cloneObject(defaultValues)\r\n : shallowFieldsStateRef.current;\r\n const updateFormState = useCallback((state = {}) => {\r\n if (!isUnMount.current) {\r\n formStateRef.current = Object.assign(Object.assign({}, formStateRef.current), state);\r\n setFormState(formStateRef.current);\r\n }\r\n }, []);\r\n const updateIsValidating = () => readFormStateRef.current.isValidating &&\r\n updateFormState({\r\n isValidating: true,\r\n });\r\n const shouldRenderBaseOnError = useCallback((name, error, shouldRender = false, state = {}, isValid) => {\r\n let shouldReRender = shouldRender ||\r\n isErrorStateChanged({\r\n errors: formStateRef.current.errors,\r\n error,\r\n name,\r\n validFields: validFieldsRef.current,\r\n fieldsWithValidation: fieldsWithValidationRef.current,\r\n });\r\n const previousError = get(formStateRef.current.errors, name);\r\n if (error) {\r\n unset(validFieldsRef.current, name);\r\n shouldReRender =\r\n shouldReRender ||\r\n !previousError ||\r\n !deepEqual(previousError, error, true);\r\n set(formStateRef.current.errors, name, error);\r\n }\r\n else {\r\n if (get(fieldsWithValidationRef.current, name) || resolverRef.current) {\r\n set(validFieldsRef.current, name, true);\r\n shouldReRender = shouldReRender || previousError;\r\n }\r\n unset(formStateRef.current.errors, name);\r\n }\r\n if ((shouldReRender && !isNullOrUndefined(shouldRender)) ||\r\n !isEmptyObject(state) ||\r\n readFormStateRef.current.isValidating) {\r\n updateFormState(Object.assign(Object.assign(Object.assign({}, state), (resolverRef.current ? { isValid: !!isValid } : {})), { isValidating: false }));\r\n }\r\n }, []);\r\n const setFieldValue = useCallback((name, rawValue) => {\r\n const { ref, options } = fieldsRef.current[name];\r\n const value = isWeb && isHTMLElement(ref) && isNullOrUndefined(rawValue)\r\n ? ''\r\n : rawValue;\r\n if (isRadioInput(ref)) {\r\n (options || []).forEach(({ ref: radioRef }) => (radioRef.checked = radioRef.value === value));\r\n }\r\n else if (isFileInput(ref) && !isString(value)) {\r\n ref.files = value;\r\n }\r\n else if (isMultipleSelect(ref)) {\r\n [...ref.options].forEach((selectRef) => (selectRef.selected = value.includes(selectRef.value)));\r\n }\r\n else if (isCheckBoxInput(ref) && options) {\r\n options.length > 1\r\n ? options.forEach(({ ref: checkboxRef }) => (checkboxRef.checked = Array.isArray(value)\r\n ? !!value.find((data) => data === checkboxRef.value)\r\n : value === checkboxRef.value))\r\n : (options[0].ref.checked = !!value);\r\n }\r\n else {\r\n ref.value = value;\r\n }\r\n }, []);\r\n const isFormDirty = useCallback((name, data) => {\r\n if (readFormStateRef.current.isDirty) {\r\n const formValues = getValues();\r\n name && data && set(formValues, name, data);\r\n return !deepEqual(formValues, defaultValuesRef.current);\r\n }\r\n return false;\r\n }, []);\r\n const updateAndGetDirtyState = useCallback((name, shouldRender = true) => {\r\n if (readFormStateRef.current.isDirty ||\r\n readFormStateRef.current.dirtyFields) {\r\n const isFieldDirty = !deepEqual(get(defaultValuesRef.current, name), getFieldValue(fieldsRef, name, shallowFieldsStateRef));\r\n const isDirtyFieldExist = get(formStateRef.current.dirtyFields, name);\r\n const previousIsDirty = formStateRef.current.isDirty;\r\n isFieldDirty\r\n ? set(formStateRef.current.dirtyFields, name, true)\r\n : unset(formStateRef.current.dirtyFields, name);\r\n const state = {\r\n isDirty: isFormDirty(),\r\n dirtyFields: formStateRef.current.dirtyFields,\r\n };\r\n const isChanged = (readFormStateRef.current.isDirty &&\r\n previousIsDirty !== state.isDirty) ||\r\n (readFormStateRef.current.dirtyFields &&\r\n isDirtyFieldExist !== get(formStateRef.current.dirtyFields, name));\r\n isChanged && shouldRender && updateFormState(state);\r\n return isChanged ? state : {};\r\n }\r\n return {};\r\n }, []);\r\n const executeValidation = useCallback(async (name, skipReRender) => {\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (!fieldsRef.current[name]) {\r\n console.warn('📋 Field is missing with `name` attribute: ', name);\r\n return false;\r\n }\r\n }\r\n const error = (await validateField(fieldsRef, isValidateAllFieldCriteria, fieldsRef.current[name], shallowFieldsStateRef))[name];\r\n shouldRenderBaseOnError(name, error, skipReRender);\r\n return isUndefined(error);\r\n }, [shouldRenderBaseOnError, isValidateAllFieldCriteria]);\r\n const executeSchemaOrResolverValidation = useCallback(async (names) => {\r\n const { errors } = await resolverRef.current(getValues(), contextRef.current, isValidateAllFieldCriteria);\r\n const previousFormIsValid = formStateRef.current.isValid;\r\n if (Array.isArray(names)) {\r\n const isInputsValid = names\r\n .map((name) => {\r\n const error = get(errors, name);\r\n error\r\n ? set(formStateRef.current.errors, name, error)\r\n : unset(formStateRef.current.errors, name);\r\n return !error;\r\n })\r\n .every(Boolean);\r\n updateFormState({\r\n isValid: isEmptyObject(errors),\r\n isValidating: false,\r\n });\r\n return isInputsValid;\r\n }\r\n else {\r\n const error = get(errors, names);\r\n shouldRenderBaseOnError(names, error, previousFormIsValid !== isEmptyObject(errors), {}, isEmptyObject(errors));\r\n return !error;\r\n }\r\n }, [shouldRenderBaseOnError, isValidateAllFieldCriteria]);\r\n const trigger = useCallback(async (name) => {\r\n const fields = name || Object.keys(fieldsRef.current);\r\n updateIsValidating();\r\n if (resolverRef.current) {\r\n return executeSchemaOrResolverValidation(fields);\r\n }\r\n if (Array.isArray(fields)) {\r\n !name && (formStateRef.current.errors = {});\r\n const result = await Promise.all(fields.map(async (data) => await executeValidation(data, null)));\r\n updateFormState({\r\n isValidating: false,\r\n });\r\n return result.every(Boolean);\r\n }\r\n return await executeValidation(fields);\r\n }, [executeSchemaOrResolverValidation, executeValidation]);\r\n const setInternalValues = useCallback((name, value, { shouldDirty, shouldValidate }) => {\r\n const data = {};\r\n set(data, name, value);\r\n for (const fieldName of getPath(name, value)) {\r\n if (fieldsRef.current[fieldName]) {\r\n setFieldValue(fieldName, get(data, fieldName));\r\n shouldDirty && updateAndGetDirtyState(fieldName);\r\n shouldValidate && trigger(fieldName);\r\n }\r\n }\r\n }, [trigger, setFieldValue, updateAndGetDirtyState]);\r\n const setInternalValue = useCallback((name, value, config) => {\r\n !shouldUnregister &&\r\n !isPrimitive(value) &&\r\n set(shallowFieldsStateRef.current, name, Array.isArray(value) ? [...value] : Object.assign({}, value));\r\n if (fieldsRef.current[name]) {\r\n setFieldValue(name, value);\r\n config.shouldDirty && updateAndGetDirtyState(name);\r\n config.shouldValidate && trigger(name);\r\n }\r\n else if (!isPrimitive(value)) {\r\n setInternalValues(name, value, config);\r\n if (fieldArrayNamesRef.current.has(name)) {\r\n const parentName = getFieldArrayParentName(name) || name;\r\n set(fieldArrayDefaultValuesRef.current, name, value);\r\n resetFieldArrayFunctionRef.current[parentName]({\r\n [parentName]: get(fieldArrayDefaultValuesRef.current, parentName),\r\n });\r\n if ((readFormStateRef.current.isDirty ||\r\n readFormStateRef.current.dirtyFields) &&\r\n config.shouldDirty) {\r\n set(formStateRef.current.dirtyFields, name, setFieldArrayDirtyFields(value, get(defaultValuesRef.current, name, []), get(formStateRef.current.dirtyFields, name, [])));\r\n updateFormState({\r\n isDirty: !deepEqual(Object.assign(Object.assign({}, getValues()), { [name]: value }), defaultValuesRef.current),\r\n });\r\n }\r\n }\r\n }\r\n !shouldUnregister && set(shallowFieldsStateRef.current, name, value);\r\n }, [updateAndGetDirtyState, setFieldValue, setInternalValues]);\r\n const isFieldWatched = (name) => isWatchAllRef.current ||\r\n watchFieldsRef.current.has(name) ||\r\n watchFieldsRef.current.has((name.match(/\\w+/) || [])[0]);\r\n const renderWatchedInputs = (name) => {\r\n let found = true;\r\n if (!isEmptyObject(useWatchFieldsRef.current)) {\r\n for (const key in useWatchFieldsRef.current) {\r\n if (!name ||\r\n !useWatchFieldsRef.current[key].size ||\r\n useWatchFieldsRef.current[key].has(name) ||\r\n useWatchFieldsRef.current[key].has(getFieldArrayParentName(name))) {\r\n useWatchRenderFunctionsRef.current[key]();\r\n found = false;\r\n }\r\n }\r\n }\r\n return found;\r\n };\r\n function setValue(name, value, config) {\r\n setInternalValue(name, value, config || {});\r\n isFieldWatched(name) && updateFormState();\r\n renderWatchedInputs(name);\r\n }\r\n handleChangeRef.current = handleChangeRef.current\r\n ? handleChangeRef.current\r\n : async ({ type, target }) => {\r\n let name = target.name;\r\n const field = fieldsRef.current[name];\r\n let error;\r\n let isValid;\r\n if (field) {\r\n const isBlurEvent = type === EVENTS.BLUR;\r\n const shouldSkipValidation = skipValidation(Object.assign({ isBlurEvent,\r\n isReValidateOnChange,\r\n isReValidateOnBlur, isTouched: !!get(formStateRef.current.touched, name), isSubmitted: formStateRef.current.isSubmitted }, modeRef.current));\r\n let state = updateAndGetDirtyState(name, false);\r\n let shouldRender = !isEmptyObject(state) ||\r\n (!isBlurEvent && isFieldWatched(name));\r\n if (isBlurEvent &&\r\n !get(formStateRef.current.touched, name) &&\r\n readFormStateRef.current.touched) {\r\n set(formStateRef.current.touched, name, true);\r\n state = Object.assign(Object.assign({}, state), { touched: formStateRef.current.touched });\r\n }\r\n if (!shouldUnregister && isCheckBoxInput(target)) {\r\n set(shallowFieldsStateRef.current, name, getFieldValue(fieldsRef, name));\r\n }\r\n if (shouldSkipValidation) {\r\n !isBlurEvent && renderWatchedInputs(name);\r\n return ((!isEmptyObject(state) ||\r\n (shouldRender && isEmptyObject(state))) &&\r\n updateFormState(state));\r\n }\r\n updateIsValidating();\r\n if (resolverRef.current) {\r\n const { errors } = await resolverRef.current(getValues(), contextRef.current, isValidateAllFieldCriteria);\r\n const previousFormIsValid = formStateRef.current.isValid;\r\n error = get(errors, name);\r\n if (isCheckBoxInput(target) &&\r\n !error &&\r\n resolverRef.current) {\r\n const parentNodeName = getFieldArrayParentName(name);\r\n const currentError = get(errors, parentNodeName, {});\r\n currentError.type &&\r\n currentError.message &&\r\n (error = currentError);\r\n if (parentNodeName &&\r\n (currentError ||\r\n get(formStateRef.current.errors, parentNodeName))) {\r\n name = parentNodeName;\r\n }\r\n }\r\n isValid = isEmptyObject(errors);\r\n previousFormIsValid !== isValid && (shouldRender = true);\r\n }\r\n else {\r\n error = (await validateField(fieldsRef, isValidateAllFieldCriteria, field, shallowFieldsStateRef))[name];\r\n }\r\n !isBlurEvent && renderWatchedInputs(name);\r\n shouldRenderBaseOnError(name, error, shouldRender, state, isValid);\r\n }\r\n };\r\n function setFieldArrayDefaultValues(data) {\r\n if (!shouldUnregister) {\r\n let copy = cloneObject(data);\r\n for (const value of fieldArrayNamesRef.current) {\r\n if (isKey(value) && !copy[value]) {\r\n copy = Object.assign(Object.assign({}, copy), { [value]: [] });\r\n }\r\n }\r\n return copy;\r\n }\r\n return data;\r\n }\r\n function getValues(payload) {\r\n if (isString(payload)) {\r\n return getFieldValue(fieldsRef, payload, shallowFieldsStateRef);\r\n }\r\n if (Array.isArray(payload)) {\r\n const data = {};\r\n for (const name of payload) {\r\n set(data, name, getFieldValue(fieldsRef, name, shallowFieldsStateRef));\r\n }\r\n return data;\r\n }\r\n return setFieldArrayDefaultValues(getFieldsValues(fieldsRef, cloneObject(shallowFieldsStateRef.current), shouldUnregister));\r\n }\r\n const validateResolver = useCallback(async (values = {}) => {\r\n const newDefaultValues = isEmptyObject(fieldsRef.current)\r\n ? defaultValuesRef.current\r\n : {};\r\n const { errors } = (await resolverRef.current(Object.assign(Object.assign(Object.assign({}, newDefaultValues), getValues()), values), contextRef.current, isValidateAllFieldCriteria)) || {};\r\n const isValid = isEmptyObject(errors);\r\n formStateRef.current.isValid !== isValid &&\r\n updateFormState({\r\n isValid,\r\n });\r\n }, [isValidateAllFieldCriteria]);\r\n const removeFieldEventListener = useCallback((field, forceDelete) => {\r\n findRemovedFieldAndRemoveListener(fieldsRef, handleChangeRef.current, field, shallowFieldsStateRef, shouldUnregister, forceDelete);\r\n if (shouldUnregister) {\r\n unset(validFieldsRef.current, field.ref.name);\r\n unset(fieldsWithValidationRef.current, field.ref.name);\r\n }\r\n }, [shouldUnregister]);\r\n const updateWatchedValue = useCallback((name) => {\r\n if (isWatchAllRef.current) {\r\n updateFormState();\r\n }\r\n else {\r\n for (const watchField of watchFieldsRef.current) {\r\n if (watchField.startsWith(name)) {\r\n updateFormState();\r\n break;\r\n }\r\n }\r\n renderWatchedInputs(name);\r\n }\r\n }, []);\r\n const removeFieldEventListenerAndRef = useCallback((field, forceDelete) => {\r\n if (field) {\r\n removeFieldEventListener(field, forceDelete);\r\n if (shouldUnregister && !compact(field.options || []).length) {\r\n unset(formStateRef.current.errors, field.ref.name);\r\n set(formStateRef.current.dirtyFields, field.ref.name, true);\r\n updateFormState({\r\n isDirty: isFormDirty(),\r\n });\r\n readFormStateRef.current.isValid &&\r\n resolverRef.current &&\r\n validateResolver();\r\n updateWatchedValue(field.ref.name);\r\n }\r\n }\r\n }, [validateResolver, removeFieldEventListener]);\r\n function clearErrors(name) {\r\n name &&\r\n (Array.isArray(name) ? name : [name]).forEach((inputName) => fieldsRef.current[inputName] && isKey(inputName)\r\n ? delete formStateRef.current.errors[inputName]\r\n : unset(formStateRef.current.errors, inputName));\r\n updateFormState({\r\n errors: name ? formStateRef.current.errors : {},\r\n });\r\n }\r\n function setError(name, error) {\r\n const ref = (fieldsRef.current[name] || {}).ref;\r\n set(formStateRef.current.errors, name, Object.assign(Object.assign({}, error), { ref }));\r\n updateFormState({\r\n isValid: false,\r\n });\r\n error.shouldFocus && ref && ref.focus && ref.focus();\r\n }\r\n const watchInternal = useCallback((fieldNames, defaultValue, watchId) => {\r\n const watchFields = watchId\r\n ? useWatchFieldsRef.current[watchId]\r\n : watchFieldsRef.current;\r\n let fieldValues = getFieldsValues(fieldsRef, cloneObject(shallowFieldsStateRef.current), shouldUnregister, false, fieldNames);\r\n if (isString(fieldNames)) {\r\n const parentNodeName = getFieldArrayParentName(fieldNames) || fieldNames;\r\n if (fieldArrayNamesRef.current.has(parentNodeName)) {\r\n fieldValues = Object.assign(Object.assign({}, fieldArrayValuesRef.current), fieldValues);\r\n }\r\n return assignWatchFields(fieldValues, fieldNames, watchFields, isUndefined(get(defaultValuesRef.current, fieldNames))\r\n ? defaultValue\r\n : get(defaultValuesRef.current, fieldNames), true);\r\n }\r\n const combinedDefaultValues = isUndefined(defaultValue)\r\n ? defaultValuesRef.current\r\n : defaultValue;\r\n if (Array.isArray(fieldNames)) {\r\n return fieldNames.reduce((previous, name) => (Object.assign(Object.assign({}, previous), { [name]: assignWatchFields(fieldValues, name, watchFields, combinedDefaultValues) })), {});\r\n }\r\n isWatchAllRef.current = isUndefined(watchId);\r\n return transformToNestObject((!isEmptyObject(fieldValues) && fieldValues) ||\r\n combinedDefaultValues);\r\n }, []);\r\n function watch(fieldNames, defaultValue) {\r\n return watchInternal(fieldNames, defaultValue);\r\n }\r\n function unregister(name) {\r\n for (const fieldName of Array.isArray(name) ? name : [name]) {\r\n removeFieldEventListenerAndRef(fieldsRef.current[fieldName], true);\r\n }\r\n }\r\n function registerFieldRef(ref, options = {}) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (!ref.name) {\r\n return console.warn('📋 Field is missing `name` attribute', ref, `https://react-hook-form.com/api#useForm`);\r\n }\r\n if (fieldArrayNamesRef.current.has(ref.name.split(/\\[\\d+\\]$/)[0]) &&\r\n !RegExp(`^${ref.name.split(/\\[\\d+\\]$/)[0]}[\\\\d+].\\\\w+`\r\n .replace(/\\[/g, '\\\\[')\r\n .replace(/\\]/g, '\\\\]')).test(ref.name)) {\r\n return console.warn('📋 `name` prop should be in object shape: name=\"test[index].name\"', ref, 'https://react-hook-form.com/api#useFieldArray');\r\n }\r\n }\r\n const { name, type, value } = ref;\r\n const fieldRefAndValidationOptions = Object.assign({ ref }, options);\r\n const fields = fieldsRef.current;\r\n const isRadioOrCheckbox = isRadioOrCheckboxFunction(ref);\r\n const isFieldArray = isNameInFieldArray(fieldArrayNamesRef.current, name);\r\n const compareRef = (currentRef) => isWeb && (!isHTMLElement(ref) || currentRef === ref);\r\n let field = fields[name];\r\n let isEmptyDefaultValue = true;\r\n let defaultValue;\r\n if (field &&\r\n (isRadioOrCheckbox\r\n ? Array.isArray(field.options) &&\r\n compact(field.options).find((option) => {\r\n return value === option.ref.value && compareRef(option.ref);\r\n })\r\n : compareRef(field.ref))) {\r\n fields[name] = Object.assign(Object.assign({}, field), options);\r\n return;\r\n }\r\n if (type) {\r\n field = isRadioOrCheckbox\r\n ? Object.assign({ options: [\r\n ...compact((field && field.options) || []),\r\n {\r\n ref,\r\n },\r\n ], ref: { type, name } }, options) : Object.assign({}, fieldRefAndValidationOptions);\r\n }\r\n else {\r\n field = fieldRefAndValidationOptions;\r\n }\r\n fields[name] = field;\r\n const isEmptyUnmountFields = isUndefined(get(shallowFieldsStateRef.current, name));\r\n if (!isEmptyObject(defaultValuesRef.current) || !isEmptyUnmountFields) {\r\n defaultValue = get(isEmptyUnmountFields\r\n ? defaultValuesRef.current\r\n : shallowFieldsStateRef.current, name);\r\n isEmptyDefaultValue = isUndefined(defaultValue);\r\n if (!isEmptyDefaultValue && !isFieldArray) {\r\n setFieldValue(name, defaultValue);\r\n }\r\n }\r\n if (!isEmptyObject(options)) {\r\n set(fieldsWithValidationRef.current, name, true);\r\n if (!isOnSubmit && readFormStateRef.current.isValid) {\r\n validateField(fieldsRef, isValidateAllFieldCriteria, field, shallowFieldsStateRef).then((error) => {\r\n const previousFormIsValid = formStateRef.current.isValid;\r\n isEmptyObject(error)\r\n ? set(validFieldsRef.current, name, true)\r\n : unset(validFieldsRef.current, name);\r\n previousFormIsValid !== isEmptyObject(error) && updateFormState();\r\n });\r\n }\r\n }\r\n if (shouldUnregister && !(isFieldArray && isEmptyDefaultValue)) {\r\n !isFieldArray && unset(formStateRef.current.dirtyFields, name);\r\n }\r\n if (type) {\r\n attachEventListeners(isRadioOrCheckbox && field.options\r\n ? field.options[field.options.length - 1]\r\n : field, isRadioOrCheckbox || isSelectInput(ref), handleChangeRef.current);\r\n }\r\n }\r\n function register(refOrRegisterOptions, options) {\r\n if (!isWindowUndefined) {\r\n if (isString(refOrRegisterOptions)) {\r\n registerFieldRef({ name: refOrRegisterOptions }, options);\r\n }\r\n else if (isObject(refOrRegisterOptions) &&\r\n 'name' in refOrRegisterOptions) {\r\n registerFieldRef(refOrRegisterOptions, options);\r\n }\r\n else {\r\n return (ref) => ref && registerFieldRef(ref, refOrRegisterOptions);\r\n }\r\n }\r\n }\r\n const handleSubmit = useCallback((onValid, onInvalid) => async (e) => {\r\n if (e && e.preventDefault) {\r\n e.preventDefault();\r\n e.persist();\r\n }\r\n let fieldErrors = {};\r\n let fieldValues = setFieldArrayDefaultValues(getFieldsValues(fieldsRef, cloneObject(shallowFieldsStateRef.current), shouldUnregister, true));\r\n readFormStateRef.current.isSubmitting &&\r\n updateFormState({\r\n isSubmitting: true,\r\n });\r\n try {\r\n if (resolverRef.current) {\r\n const { errors, values } = await resolverRef.current(fieldValues, contextRef.current, isValidateAllFieldCriteria);\r\n formStateRef.current.errors = fieldErrors = errors;\r\n fieldValues = values;\r\n }\r\n else {\r\n for (const field of Object.values(fieldsRef.current)) {\r\n if (field) {\r\n const { name } = field.ref;\r\n const fieldError = await validateField(fieldsRef, isValidateAllFieldCriteria, field, shallowFieldsStateRef);\r\n if (fieldError[name]) {\r\n set(fieldErrors, name, fieldError[name]);\r\n unset(validFieldsRef.current, name);\r\n }\r\n else if (get(fieldsWithValidationRef.current, name)) {\r\n unset(formStateRef.current.errors, name);\r\n set(validFieldsRef.current, name, true);\r\n }\r\n }\r\n }\r\n }\r\n if (isEmptyObject(fieldErrors) &&\r\n Object.keys(formStateRef.current.errors).every((name) => name in fieldsRef.current)) {\r\n updateFormState({\r\n errors: {},\r\n isSubmitting: true,\r\n });\r\n await onValid(fieldValues, e);\r\n }\r\n else {\r\n formStateRef.current.errors = Object.assign(Object.assign({}, formStateRef.current.errors), fieldErrors);\r\n onInvalid && (await onInvalid(formStateRef.current.errors, e));\r\n shouldFocusError &&\r\n focusOnErrorField(fieldsRef.current, formStateRef.current.errors);\r\n }\r\n }\r\n finally {\r\n formStateRef.current.isSubmitting = false;\r\n updateFormState({\r\n isSubmitted: true,\r\n isSubmitting: false,\r\n isSubmitSuccessful: isEmptyObject(formStateRef.current.errors),\r\n submitCount: formStateRef.current.submitCount + 1,\r\n });\r\n }\r\n }, [shouldFocusError, isValidateAllFieldCriteria]);\r\n const resetRefs = ({ errors, isDirty, isSubmitted, touched, isValid, submitCount, dirtyFields, }) => {\r\n if (!isValid) {\r\n validFieldsRef.current = {};\r\n fieldsWithValidationRef.current = {};\r\n }\r\n fieldArrayDefaultValuesRef.current = {};\r\n watchFieldsRef.current = new Set();\r\n isWatchAllRef.current = false;\r\n updateFormState({\r\n submitCount: submitCount ? formStateRef.current.submitCount : 0,\r\n isDirty: isDirty ? formStateRef.current.isDirty : false,\r\n isSubmitted: isSubmitted ? formStateRef.current.isSubmitted : false,\r\n isValid: isValid ? formStateRef.current.isValid : false,\r\n dirtyFields: dirtyFields ? formStateRef.current.dirtyFields : {},\r\n touched: touched ? formStateRef.current.touched : {},\r\n errors: errors ? formStateRef.current.errors : {},\r\n isSubmitting: false,\r\n isSubmitSuccessful: false,\r\n });\r\n };\r\n const reset = (values, omitResetState = {}) => {\r\n if (isWeb) {\r\n for (const field of Object.values(fieldsRef.current)) {\r\n if (field) {\r\n const { ref, options } = field;\r\n const inputRef = isRadioOrCheckboxFunction(ref) && Array.isArray(options)\r\n ? options[0].ref\r\n : ref;\r\n if (isHTMLElement(inputRef)) {\r\n try {\r\n inputRef.closest('form').reset();\r\n break;\r\n }\r\n catch (_a) { }\r\n }\r\n }\r\n }\r\n }\r\n fieldsRef.current = {};\r\n defaultValuesRef.current = Object.assign({}, (values || defaultValuesRef.current));\r\n values && renderWatchedInputs('');\r\n Object.values(resetFieldArrayFunctionRef.current).forEach((resetFieldArray) => isFunction(resetFieldArray) && resetFieldArray());\r\n shallowFieldsStateRef.current = shouldUnregister\r\n ? {}\r\n : cloneObject(values || defaultValuesRef.current);\r\n resetRefs(omitResetState);\r\n };\r\n useEffect(() => {\r\n resolver && readFormStateRef.current.isValid && validateResolver();\r\n observerRef.current =\r\n observerRef.current || !isWeb\r\n ? observerRef.current\r\n : onDomRemove(fieldsRef, removeFieldEventListenerAndRef);\r\n }, [removeFieldEventListenerAndRef, defaultValuesRef.current]);\r\n useEffect(() => () => {\r\n observerRef.current && observerRef.current.disconnect();\r\n isUnMount.current = true;\r\n if (process.env.NODE_ENV !== 'production') {\r\n return;\r\n }\r\n Object.values(fieldsRef.current).forEach((field) => removeFieldEventListenerAndRef(field, true));\r\n }, []);\r\n if (!resolver && readFormStateRef.current.isValid) {\r\n formState.isValid =\r\n deepEqual(validFieldsRef.current, fieldsWithValidationRef.current) &&\r\n isEmptyObject(formStateRef.current.errors);\r\n }\r\n const commonProps = {\r\n trigger,\r\n setValue: useCallback(setValue, [setInternalValue, trigger]),\r\n getValues: useCallback(getValues, []),\r\n register: useCallback(register, [defaultValuesRef.current]),\r\n unregister: useCallback(unregister, []),\r\n formState: isProxyEnabled\r\n ? new Proxy(formState, {\r\n get: (obj, prop) => {\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (prop === 'isValid' && isOnSubmit) {\r\n console.warn('📋 `formState.isValid` is applicable with `onTouched`, `onChange` or `onBlur` mode. https://react-hook-form.com/api#formState');\r\n }\r\n }\r\n if (prop in obj) {\r\n readFormStateRef.current[prop] = true;\r\n return obj[prop];\r\n }\r\n return undefined;\r\n },\r\n })\r\n : formState,\r\n };\r\n const control = useMemo(() => (Object.assign({ isFormDirty,\r\n updateWatchedValue,\r\n shouldUnregister,\r\n updateFormState,\r\n removeFieldEventListener,\r\n watchInternal, mode: modeRef.current, reValidateMode: {\r\n isReValidateOnBlur,\r\n isReValidateOnChange,\r\n }, validateResolver: resolver ? validateResolver : undefined, fieldsRef,\r\n resetFieldArrayFunctionRef,\r\n useWatchFieldsRef,\r\n useWatchRenderFunctionsRef,\r\n fieldArrayDefaultValuesRef,\r\n validFieldsRef,\r\n fieldsWithValidationRef,\r\n fieldArrayNamesRef,\r\n readFormStateRef,\r\n formStateRef,\r\n defaultValuesRef,\r\n shallowFieldsStateRef,\r\n fieldArrayValuesRef }, commonProps)), [\r\n defaultValuesRef.current,\r\n updateWatchedValue,\r\n shouldUnregister,\r\n removeFieldEventListener,\r\n watchInternal,\r\n ]);\r\n return Object.assign({ watch,\r\n control,\r\n handleSubmit, reset: useCallback(reset, []), clearErrors: useCallback(clearErrors, []), setError: useCallback(setError, []), errors: formState.errors }, commonProps);\r\n}\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\n\nconst FormContext = createContext(null);\r\nFormContext.displayName = 'RHFContext';\r\nconst useFormContext = () => useContext(FormContext);\r\nconst FormProvider = (_a) => {\r\n var { children } = _a, props = __rest(_a, [\"children\"]);\r\n return (createElement(FormContext.Provider, { value: Object.assign({}, props) }, children));\r\n};\n\nvar generateId = () => {\r\n const d = typeof performance === UNDEFINED ? Date.now() : performance.now() * 1000;\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\r\n const r = (Math.random() * 16 + d) % 16 | 0;\r\n return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);\r\n });\r\n};\n\nfunction removeAtIndexes(data, indexes) {\r\n let i = 0;\r\n const temp = [...data];\r\n for (const index of indexes) {\r\n temp.splice(index - i, 1);\r\n i++;\r\n }\r\n return compact(temp).length ? temp : [];\r\n}\r\nvar removeArrayAt = (data, index) => isUndefined(index)\r\n ? []\r\n : removeAtIndexes(data, (Array.isArray(index) ? index : [index]).sort((a, b) => a - b));\n\nvar moveArrayAt = (data, from, to) => {\r\n if (Array.isArray(data)) {\r\n if (isUndefined(data[to])) {\r\n data[to] = undefined;\r\n }\r\n data.splice(to, 0, data.splice(from, 1)[0]);\r\n return data;\r\n }\r\n return [];\r\n};\n\nvar swapArrayAt = (data, indexA, indexB) => {\r\n const temp = [data[indexB], data[indexA]];\r\n data[indexA] = temp[0];\r\n data[indexB] = temp[1];\r\n};\n\nfunction prepend(data, value) {\r\n return [...(Array.isArray(value) ? value : [value || undefined]), ...data];\r\n}\n\nfunction insert(data, index, value) {\r\n return [\r\n ...data.slice(0, index),\r\n ...(Array.isArray(value) ? value : [value || undefined]),\r\n ...data.slice(index),\r\n ];\r\n}\n\nvar fillEmptyArray = (value) => Array.isArray(value) ? Array(value.length).fill(undefined) : undefined;\n\nvar fillBooleanArray = (value) => (Array.isArray(value) ? value : [value]).map((data) => {\r\n if (isObject(data)) {\r\n const object = {};\r\n for (const key in data) {\r\n object[key] = true;\r\n }\r\n return object;\r\n }\r\n return true;\r\n});\n\nconst mapIds = (values = [], keyName, skipWarn) => {\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (!skipWarn) {\r\n for (const value of values) {\r\n if (typeof value === 'object') {\r\n if (keyName in value) {\r\n console.warn(`📋 useFieldArray fieldValues contain the keyName \\`${keyName}\\` which is reserved for use by useFieldArray. https://react-hook-form.com/api#useFieldArray`);\r\n break;\r\n }\r\n }\r\n else {\r\n console.warn(`📋 useFieldArray input's name should be in object shape instead of flat array. https://react-hook-form.com/api#useFieldArray`);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return values.map((value) => (Object.assign({ [keyName]: value[keyName] || generateId() }, value)));\r\n};\r\nconst useFieldArray = ({ control, name, keyName = 'id', }) => {\r\n const methods = useFormContext();\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (!control && !methods) {\r\n throw new Error('📋 useFieldArray is missing `control` prop. https://react-hook-form.com/api#useFieldArray');\r\n }\r\n }\r\n const focusIndexRef = useRef(-1);\r\n const isUnMount = useRef(false);\r\n const { isFormDirty, updateWatchedValue, resetFieldArrayFunctionRef, fieldArrayNamesRef, fieldsRef, defaultValuesRef, removeFieldEventListener, formStateRef, shallowFieldsStateRef, updateFormState, readFormStateRef, validFieldsRef, fieldsWithValidationRef, fieldArrayDefaultValuesRef, validateResolver, getValues, shouldUnregister, fieldArrayValuesRef, } = control || methods.control;\r\n const getDefaultValues = (values) => get(shouldUnregister ? values : shallowFieldsStateRef.current, name, []);\r\n const fieldArrayParentName = getFieldArrayParentName(name);\r\n const memoizedDefaultValues = useRef([\r\n ...(get(fieldArrayDefaultValuesRef.current, fieldArrayParentName)\r\n ? getDefaultValues(fieldArrayDefaultValuesRef.current)\r\n : getDefaultValues(defaultValuesRef.current)),\r\n ]);\r\n const [fields, setFields] = useState(mapIds(memoizedDefaultValues.current, keyName));\r\n set(fieldArrayValuesRef.current, name, compact(fields));\r\n const omitKey = (fields) => fields.map((_a = {}) => {\r\n var _b = keyName, omitted = _a[_b], rest = __rest(_a, [typeof _b === \"symbol\" ? _b : _b + \"\"]);\r\n return rest;\r\n });\r\n fieldArrayNamesRef.current.add(name);\r\n const getFieldArrayValue = useCallback(() => get(fieldArrayValuesRef.current, name, []), [name]);\r\n const getCurrentFieldsValues = () => mapIds(get(getValues(), name, getFieldArrayValue()).map((item, index) => (Object.assign(Object.assign({}, getFieldArrayValue()[index]), item))), keyName, true);\r\n fieldArrayNamesRef.current.add(name);\r\n if (fieldArrayParentName &&\r\n !get(fieldArrayDefaultValuesRef.current, fieldArrayParentName)) {\r\n set(fieldArrayDefaultValuesRef.current, fieldArrayParentName, cloneObject(get(defaultValuesRef.current, fieldArrayParentName)));\r\n }\r\n const setFieldAndValidState = (fieldsValues) => {\r\n setFields(fieldsValues);\r\n set(fieldArrayValuesRef.current, name, fieldsValues);\r\n if (readFormStateRef.current.isValid && validateResolver) {\r\n const values = getValues();\r\n set(values, name, fieldsValues);\r\n validateResolver(values);\r\n }\r\n };\r\n const resetFields = () => {\r\n for (const key in fieldsRef.current) {\r\n if (isMatchFieldArrayName(key, name)) {\r\n removeFieldEventListener(fieldsRef.current[key], true);\r\n delete fieldsRef.current[key];\r\n }\r\n }\r\n };\r\n const cleanup = (ref) => !compact(get(ref, name, [])).length && unset(ref, name);\r\n const updateDirtyFieldsWithDefaultValues = (updatedFieldArrayValues) => {\r\n if (updatedFieldArrayValues) {\r\n set(formStateRef.current.dirtyFields, name, setFieldArrayDirtyFields(omitKey(updatedFieldArrayValues), get(defaultValuesRef.current, name, []), get(formStateRef.current.dirtyFields, name, [])));\r\n }\r\n };\r\n const batchStateUpdate = (method, args, updatedFieldValues, updatedFormValues = [], shouldSet = true, shouldUpdateValid = false) => {\r\n if (get(shallowFieldsStateRef.current, name)) {\r\n const output = method(get(shallowFieldsStateRef.current, name), args.argA, args.argB);\r\n shouldSet && set(shallowFieldsStateRef.current, name, output);\r\n }\r\n if (get(fieldArrayDefaultValuesRef.current, name)) {\r\n const output = method(get(fieldArrayDefaultValuesRef.current, name), args.argA, args.argB);\r\n shouldSet && set(fieldArrayDefaultValuesRef.current, name, output);\r\n }\r\n if (Array.isArray(get(formStateRef.current.errors, name))) {\r\n const output = method(get(formStateRef.current.errors, name), args.argA, args.argB);\r\n shouldSet && set(formStateRef.current.errors, name, output);\r\n cleanup(formStateRef.current.errors);\r\n }\r\n if (readFormStateRef.current.touched &&\r\n get(formStateRef.current.touched, name)) {\r\n const output = method(get(formStateRef.current.touched, name), args.argA, args.argB);\r\n shouldSet && set(formStateRef.current.touched, name, output);\r\n cleanup(formStateRef.current.touched);\r\n }\r\n if (readFormStateRef.current.dirtyFields ||\r\n readFormStateRef.current.isDirty) {\r\n set(formStateRef.current.dirtyFields, name, setFieldArrayDirtyFields(omitKey(updatedFormValues), get(defaultValuesRef.current, name, []), get(formStateRef.current.dirtyFields, name, [])));\r\n updateDirtyFieldsWithDefaultValues(updatedFieldValues);\r\n cleanup(formStateRef.current.dirtyFields);\r\n }\r\n if (shouldUpdateValid &&\r\n readFormStateRef.current.isValid &&\r\n !validateResolver) {\r\n set(validFieldsRef.current, name, method(get(validFieldsRef.current, name, []), args.argA));\r\n cleanup(validFieldsRef.current);\r\n set(fieldsWithValidationRef.current, name, method(get(fieldsWithValidationRef.current, name, []), args.argA));\r\n cleanup(fieldsWithValidationRef.current);\r\n }\r\n if (!isUnMount.current && readFormStateRef.current.isDirty) {\r\n updateFormState({\r\n isDirty: isFormDirty(name, omitKey(updatedFormValues)),\r\n });\r\n }\r\n };\r\n const append = (value, shouldFocus = true) => {\r\n const appendValue = Array.isArray(value) ? value : [value];\r\n const updateFormValues = [\r\n ...getCurrentFieldsValues(),\r\n ...mapIds(appendValue, keyName),\r\n ];\r\n setFieldAndValidState(updateFormValues);\r\n if (readFormStateRef.current.dirtyFields ||\r\n readFormStateRef.current.isDirty) {\r\n updateDirtyFieldsWithDefaultValues(updateFormValues);\r\n updateFormState({\r\n isDirty: true,\r\n dirtyFields: formStateRef.current.dirtyFields,\r\n });\r\n }\r\n !shouldUnregister &&\r\n set(shallowFieldsStateRef.current, name, [\r\n ...(get(shallowFieldsStateRef.current, name) || []),\r\n ...cloneObject(appendValue),\r\n ]);\r\n focusIndexRef.current = shouldFocus\r\n ? get(fieldArrayValuesRef.current, name).length - 1\r\n : -1;\r\n };\r\n const prepend$1 = (value, shouldFocus = true) => {\r\n const emptyArray = fillEmptyArray(value);\r\n const updatedFieldArrayValues = prepend(getCurrentFieldsValues(), mapIds(Array.isArray(value) ? value : [value], keyName));\r\n setFieldAndValidState(updatedFieldArrayValues);\r\n resetFields();\r\n batchStateUpdate(prepend, {\r\n argA: emptyArray,\r\n argC: fillBooleanArray(value),\r\n }, updatedFieldArrayValues);\r\n focusIndexRef.current = shouldFocus ? 0 : -1;\r\n };\r\n const remove = (index) => {\r\n const fieldValues = getCurrentFieldsValues();\r\n const updatedFieldValues = removeArrayAt(fieldValues, index);\r\n setFieldAndValidState(updatedFieldValues);\r\n resetFields();\r\n batchStateUpdate(removeArrayAt, {\r\n argA: index,\r\n argC: index,\r\n }, updatedFieldValues, removeArrayAt(fieldValues, index), true, true);\r\n };\r\n const insert$1 = (index, value, shouldFocus = true) => {\r\n const emptyArray = fillEmptyArray(value);\r\n const fieldValues = getCurrentFieldsValues();\r\n const updatedFieldArrayValues = insert(fieldValues, index, mapIds(Array.isArray(value) ? value : [value], keyName));\r\n setFieldAndValidState(updatedFieldArrayValues);\r\n resetFields();\r\n batchStateUpdate(insert, {\r\n argA: index,\r\n argB: emptyArray,\r\n argC: index,\r\n argD: fillBooleanArray(value),\r\n }, updatedFieldArrayValues, insert(fieldValues, index));\r\n focusIndexRef.current = shouldFocus ? index : -1;\r\n };\r\n const swap = (indexA, indexB) => {\r\n const fieldValues = getCurrentFieldsValues();\r\n swapArrayAt(fieldValues, indexA, indexB);\r\n resetFields();\r\n setFieldAndValidState([...fieldValues]);\r\n batchStateUpdate(swapArrayAt, {\r\n argA: indexA,\r\n argB: indexB,\r\n argC: indexA,\r\n argD: indexB,\r\n }, undefined, fieldValues, false);\r\n };\r\n const move = (from, to) => {\r\n const fieldValues = getCurrentFieldsValues();\r\n moveArrayAt(fieldValues, from, to);\r\n resetFields();\r\n setFieldAndValidState([...fieldValues]);\r\n batchStateUpdate(moveArrayAt, {\r\n argA: from,\r\n argB: to,\r\n argC: from,\r\n argD: to,\r\n }, undefined, fieldValues, false);\r\n };\r\n useEffect(() => {\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (!name) {\r\n console.warn('📋 useFieldArray is missing `name` attribute. https://react-hook-form.com/api#useFieldArray');\r\n }\r\n }\r\n const defaultValues = get(fieldArrayDefaultValuesRef.current, name);\r\n if (defaultValues && fields.length < defaultValues.length) {\r\n set(fieldArrayDefaultValuesRef.current, name, defaultValues.slice(1));\r\n }\r\n updateWatchedValue(name);\r\n if (focusIndexRef.current > -1) {\r\n for (const key in fieldsRef.current) {\r\n const field = fieldsRef.current[key];\r\n if (key.startsWith(`${name}[${focusIndexRef.current}]`) &&\r\n field.ref.focus) {\r\n field.ref.focus();\r\n break;\r\n }\r\n }\r\n }\r\n focusIndexRef.current = -1;\r\n }, [fields, name]);\r\n useEffect(() => {\r\n const resetFunctions = resetFieldArrayFunctionRef.current;\r\n const fieldArrayNames = fieldArrayNamesRef.current;\r\n if (!getFieldArrayParentName(name)) {\r\n resetFunctions[name] = (data) => {\r\n resetFields();\r\n !data && unset(fieldArrayDefaultValuesRef.current, name);\r\n unset(shallowFieldsStateRef.current, name);\r\n memoizedDefaultValues.current = get(data || defaultValuesRef.current, name);\r\n if (!isUnMount.current) {\r\n setFields(mapIds(memoizedDefaultValues.current, keyName));\r\n }\r\n };\r\n }\r\n return () => {\r\n isUnMount.current = true;\r\n shouldUnregister && remove();\r\n resetFields();\r\n delete resetFunctions[name];\r\n unset(fieldArrayValuesRef.current, name);\r\n fieldArrayNames.delete(name);\r\n };\r\n }, []);\r\n return {\r\n swap: useCallback(swap, [name]),\r\n move: useCallback(move, [name]),\r\n prepend: useCallback(prepend$1, [name]),\r\n append: useCallback(append, [name]),\r\n remove: useCallback(remove, [name]),\r\n insert: useCallback(insert$1, [name]),\r\n fields: compact(fields),\r\n };\r\n};\n\nvar getInputValue = (event) => isPrimitive(event) ||\r\n !isObject(event.target) ||\r\n (isObject(event.target) && !event.type)\r\n ? event\r\n : isUndefined(event.target.value)\r\n ? event.target.checked\r\n : event.target.value;\n\nfunction useController({ name, rules, defaultValue, control, onFocus, }) {\r\n const methods = useFormContext();\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (!control && !methods) {\r\n throw new Error('📋 Controller is missing `control` prop. https://react-hook-form.com/api#Controller');\r\n }\r\n }\r\n const { defaultValuesRef, setValue, register, unregister, trigger, mode, reValidateMode: { isReValidateOnBlur, isReValidateOnChange }, formState, formStateRef: { current: { isSubmitted, touched, errors }, }, updateFormState, readFormStateRef, fieldsRef, fieldArrayNamesRef, shallowFieldsStateRef, } = control || methods.control;\r\n const isNotFieldArray = !isNameInFieldArray(fieldArrayNamesRef.current, name);\r\n const getInitialValue = () => !isUndefined(get(shallowFieldsStateRef.current, name)) && isNotFieldArray\r\n ? get(shallowFieldsStateRef.current, name)\r\n : isUndefined(defaultValue)\r\n ? get(defaultValuesRef.current, name)\r\n : defaultValue;\r\n const [value, setInputStateValue] = useState(getInitialValue());\r\n const valueRef = useRef(value);\r\n const ref = useRef({\r\n focus: () => null,\r\n });\r\n const onFocusRef = useRef(onFocus ||\r\n (() => {\r\n if (isFunction(ref.current.focus)) {\r\n ref.current.focus();\r\n }\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (!isFunction(ref.current.focus)) {\r\n console.warn(`📋 'ref' from Controller render prop must be attached to a React component or a DOM Element whose ref provides a 'focus()' method`);\r\n }\r\n }\r\n }));\r\n const shouldValidate = useCallback((isBlurEvent) => !skipValidation(Object.assign({ isBlurEvent,\r\n isReValidateOnBlur,\r\n isReValidateOnChange,\r\n isSubmitted, isTouched: !!get(touched, name) }, mode)), [\r\n isReValidateOnBlur,\r\n isReValidateOnChange,\r\n isSubmitted,\r\n touched,\r\n name,\r\n mode,\r\n ]);\r\n const commonTask = useCallback(([event]) => {\r\n const data = getInputValue(event);\r\n setInputStateValue(data);\r\n valueRef.current = data;\r\n return data;\r\n }, []);\r\n const registerField = useCallback((shouldUpdateValue) => {\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (!name) {\r\n return console.warn('📋 Field is missing `name` prop. https://react-hook-form.com/api#Controller');\r\n }\r\n }\r\n if (fieldsRef.current[name]) {\r\n fieldsRef.current[name] = Object.assign({ ref: fieldsRef.current[name].ref }, rules);\r\n }\r\n else {\r\n register(Object.defineProperties({\r\n name,\r\n focus: onFocusRef.current,\r\n }, {\r\n value: {\r\n set(data) {\r\n setInputStateValue(data);\r\n valueRef.current = data;\r\n },\r\n get() {\r\n return valueRef.current;\r\n },\r\n },\r\n }), rules);\r\n shouldUpdateValue = isUndefined(get(defaultValuesRef.current, name));\r\n }\r\n shouldUpdateValue &&\r\n isNotFieldArray &&\r\n setInputStateValue(getInitialValue());\r\n }, [rules, name, register]);\r\n useEffect(() => () => unregister(name), [name]);\r\n useEffect(() => {\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (isUndefined(value)) {\r\n console.warn(`📋 ${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)`);\r\n }\r\n if (!isNotFieldArray && isUndefined(defaultValue)) {\r\n console.warn('📋 Controller is missing `defaultValue` prop when using `useFieldArray`. https://react-hook-form.com/api#Controller');\r\n }\r\n }\r\n registerField();\r\n }, [registerField]);\r\n useEffect(() => {\r\n !fieldsRef.current[name] && registerField(true);\r\n });\r\n const onBlur = useCallback(() => {\r\n if (readFormStateRef.current.touched && !get(touched, name)) {\r\n set(touched, name, true);\r\n updateFormState({\r\n touched,\r\n });\r\n }\r\n shouldValidate(true) && trigger(name);\r\n }, [name, updateFormState, shouldValidate, trigger, readFormStateRef]);\r\n const onChange = useCallback((...event) => setValue(name, commonTask(event), {\r\n shouldValidate: shouldValidate(),\r\n shouldDirty: true,\r\n }), [setValue, name, shouldValidate]);\r\n return {\r\n field: {\r\n onChange,\r\n onBlur,\r\n name,\r\n value,\r\n ref,\r\n },\r\n meta: Object.defineProperties({\r\n invalid: !!get(errors, name),\r\n }, {\r\n isDirty: {\r\n get() {\r\n return !!get(formState.dirtyFields, name);\r\n },\r\n },\r\n isTouched: {\r\n get() {\r\n return !!get(formState.touched, name);\r\n },\r\n },\r\n }),\r\n };\r\n}\n\nfunction useWatch({ control, name, defaultValue, }) {\r\n const methods = useFormContext();\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (!control && !methods) {\r\n throw new Error('📋 useWatch is missing `control` prop. https://react-hook-form.com/api#useWatch');\r\n }\r\n }\r\n const { useWatchFieldsRef, useWatchRenderFunctionsRef, watchInternal, defaultValuesRef, } = control || methods.control;\r\n const updateValue = useState()[1];\r\n const idRef = useRef();\r\n const defaultValueRef = useRef(defaultValue);\r\n useEffect(() => {\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (name === '') {\r\n console.warn('📋 useWatch is missing `name` attribute. https://react-hook-form.com/api#useWatch');\r\n }\r\n }\r\n const id = (idRef.current = generateId());\r\n const watchFieldsHookRender = useWatchRenderFunctionsRef.current;\r\n const watchFieldsHook = useWatchFieldsRef.current;\r\n watchFieldsHook[id] = new Set();\r\n watchFieldsHookRender[id] = () => updateValue({});\r\n watchInternal(name, defaultValueRef.current, id);\r\n return () => {\r\n delete watchFieldsHook[id];\r\n delete watchFieldsHookRender[id];\r\n };\r\n }, [\r\n name,\r\n useWatchRenderFunctionsRef,\r\n useWatchFieldsRef,\r\n watchInternal,\r\n defaultValueRef,\r\n ]);\r\n return idRef.current\r\n ? watchInternal(name, defaultValueRef.current, idRef.current)\r\n : isUndefined(defaultValue)\r\n ? isString(name)\r\n ? get(defaultValuesRef.current, name)\r\n : Array.isArray(name)\r\n ? name.reduce((previous, inputName) => (Object.assign(Object.assign({}, previous), { [inputName]: get(defaultValuesRef.current, inputName) })), {})\r\n : defaultValuesRef.current\r\n : defaultValue;\r\n}\n\nconst Controller = (props) => {\r\n const { rules, as, render, defaultValue, control, onFocus } = props, rest = __rest(props, [\"rules\", \"as\", \"render\", \"defaultValue\", \"control\", \"onFocus\"]);\r\n const { field, meta } = useController(props);\r\n const componentProps = Object.assign(Object.assign({}, rest), field);\r\n return as\r\n ? isValidElement(as)\r\n ? cloneElement(as, componentProps)\r\n : createElement(as, componentProps)\r\n : render\r\n ? render(field, meta)\r\n : null;\r\n};\n\nexport { Controller, FormProvider, appendErrors, get, transformToNestObject, useController, useFieldArray, useForm, useFormContext, useWatch };\n//# sourceMappingURL=index.esm.js.map\n"],"names":["isHTMLElement","value","HTMLElement","EVENTS","VALIDATION_MODE","INPUT_VALIDATION_RULES","isNullOrUndefined","isObjectType","isObject","Array","isArray","Date","isKey","test","compact","filter","Boolean","stringToPath","input","replace","split","set","object","path","let","index","tempPath","length","lastIndex","const","key","newValue","objValue","isNaN","transformToNestObject","data","isUndefined","val","undefined","get","obj","defaultValue","result","reduce","removeAllEventListeners","ref","validateWithStateUpdate","removeEventListener","defaultReturn","isValid","getRadioValue","options","previous","option","checked","isRadioInput","element","type","isFileInput","isCheckBoxInput","isMultipleSelect","defaultResult","validResult","getCheckboxValue","values","map","attributes","getFieldValue","fieldsRef","name","shallowFieldsStateRef","excludeDisabled","shouldKeepRawValue","field","current","disabled","files","valueAsNumber","NaN","valueAsDate","setValueAs","isDetached","nodeType","Node","DOCUMENT_NODE","parentNode","isEmptyObject","Object","keys","isBoolean","unset","previousObjRef","updatePath","childObject","slice","baseGet","k","objectRef","currentPaths","currentPathsLength","item","isSameRef","fieldValue","isPrimitive","deepMerge","target","source","targetValue","sourceValue","_a","deepEqual","object1","object2","isErrorObject","isValidElement","keys1","keys2","val1","val2","setDirtyFields","defaultValues","dirtyFields","parentName","assign","isString","getFieldsValues","shallowFieldsState","shouldUnregister","search","output","startsWith","find","isRegex","RegExp","getValueAndMessage","validationData","message","isFunction","isMessage","getValidateError","appendErrors","validateAllFieldCriteria","errors","types","validateField","async","error","isRadio","isCheckBox","isRadioOrCheckbox","isEmpty","appendErrorsCurry","bind","getMinMaxMessage","exceedMax","maxLengthMessage","minLengthMessage","maxType","minType","required","min","max","exceedMin","maxOutput","minOutput","valueDate","valueNumber","parseFloat","maxLength","minLength","maxLengthOutput","minLengthOutput","pattern","patternValue","validate","validateRef","validateError","validationResult","entries","validateFunction","getPath","rootPath","paths","property","rootName","push","assignWatchFields","fieldValues","fieldName","watchFields","inputValue","isSingleField","add","forEach","getFieldArrayParentName","substring","indexOf","isNameInFieldArray","names","some","searchName","isMatchFieldArrayName","isWeb","window","document","cloneObject","copy","File","includes","constructor","getTime","Set","Map","modeChecker","mode","isOnSubmit","isOnBlur","isOnChange","isOnAll","isOnTouch","isRadioOrCheckboxFunction","isWindowUndefined","isProxyEnabled","Proxy","useForm","useRef","fieldArrayDefaultValuesRef","fieldArrayValuesRef","watchFieldsRef","useWatchFieldsRef","useWatchRenderFunctionsRef","fieldsWithValidationRef","validFieldsRef","defaultValuesRef","isUnMount","isWatchAllRef","handleChangeRef","resetFieldArrayFunctionRef","contextRef","context","resolverRef","resolver","fieldArrayNamesRef","modeRef","isValidateAllFieldCriteria","criteriaMode","useState","isDirty","isValidating","isSubmitted","submitCount","touched","isSubmitting","isSubmitSuccessful","readFormStateRef","formStateRef","formState","observerRef","reValidateMode","updateFormState","useCallback","state","setFormState","updateIsValidating","shouldRenderBaseOnError","shouldRender","shouldReRender","previousError","fieldsWithValidation","validFields","isErrorStateChanged","setFieldValue","rawValue","radioRef","selectRef","selected","checkboxRef","isFormDirty","formValues","getValues","updateAndGetDirtyState","isFieldDirty","isDirtyFieldExist","previousIsDirty","isChanged","executeValidation","skipReRender","process","env","NODE_ENV","console","warn","executeSchemaOrResolverValidation","previousFormIsValid","isInputsValid","every","trigger","fields","Promise","all","setInternalValues","shouldDirty","shouldValidate","setInternalValue","config","has","setFieldArrayDirtyFields","isFieldWatched","match","renderWatchedInputs","found","size","setFieldArrayDefaultValues","payload","isBlurEvent","shouldSkipValidation","isTouched","isReValidateOnBlur","isReValidateOnChange","skipValidation","parentNodeName","currentError","validateResolver","newDefaultValues","removeFieldEventListener","forceDelete","handleChange","fieldRef","findRemovedFieldAndRemoveListener","updateWatchedValue","removeFieldEventListenerAndRef","watchInternal","fieldNames","watchId","combinedDefaultValues","registerFieldRef","fieldRefAndValidationOptions","isFieldArray","compareRef","currentRef","isEmptyDefaultValue","isEmptyUnmountFields","then","shouldAttachChangeEvent","addEventListener","attachEventListeners","handleSubmit","onValid","onInvalid","e","preventDefault","persist","fieldErrors","fieldError","shouldFocusError","focus","focusOnErrorField","useEffect","observer","MutationObserver","observe","childList","subtree","onDomRemove","disconnect","commonProps","setValue","register","refOrRegisterOptions","unregister","prop","control","useMemo","reset","omitResetState","inputRef","closest","resetFieldArray","resetRefs","clearErrors","inputName","setError","shouldFocus","createContext","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../node_modules/react-hook-form/dist/index.esm.js"],"sourcesContent":["import { isValidElement, useRef, useState, useCallback, useEffect, useMemo, createContext, useContext, createElement, cloneElement } from 'react';\n\nvar isHTMLElement = (value) => value instanceof HTMLElement;\n\nconst EVENTS = {\r\n BLUR: 'blur',\r\n CHANGE: 'change',\r\n INPUT: 'input',\r\n};\r\nconst VALIDATION_MODE = {\r\n onBlur: 'onBlur',\r\n onChange: 'onChange',\r\n onSubmit: 'onSubmit',\r\n onTouched: 'onTouched',\r\n all: 'all',\r\n};\r\nconst SELECT = 'select';\r\nconst UNDEFINED = 'undefined';\r\nconst INPUT_VALIDATION_RULES = {\r\n max: 'max',\r\n min: 'min',\r\n maxLength: 'maxLength',\r\n minLength: 'minLength',\r\n pattern: 'pattern',\r\n required: 'required',\r\n validate: 'validate',\r\n};\n\nfunction attachEventListeners({ ref }, shouldAttachChangeEvent, handleChange) {\r\n if (isHTMLElement(ref) && handleChange) {\r\n ref.addEventListener(shouldAttachChangeEvent ? EVENTS.CHANGE : EVENTS.INPUT, handleChange);\r\n ref.addEventListener(EVENTS.BLUR, handleChange);\r\n }\r\n}\n\nvar isNullOrUndefined = (value) => value == null;\n\nconst isObjectType = (value) => typeof value === 'object';\r\nvar isObject = (value) => !isNullOrUndefined(value) &&\r\n !Array.isArray(value) &&\r\n isObjectType(value) &&\r\n !(value instanceof Date);\n\nvar isKey = (value) => /^\\w*$/.test(value);\n\nvar compact = (value) => value.filter(Boolean);\n\nvar stringToPath = (input) => compact(input\r\n .replace(/[\"|']/g, '')\r\n .replace(/\\[/g, '.')\r\n .replace(/\\]/g, '')\r\n .split('.'));\n\nfunction set(object, path, value) {\r\n let index = -1;\r\n const tempPath = isKey(path) ? [path] : stringToPath(path);\r\n const length = tempPath.length;\r\n const lastIndex = length - 1;\r\n while (++index < length) {\r\n const key = tempPath[index];\r\n let newValue = value;\r\n if (index !== lastIndex) {\r\n const objValue = object[key];\r\n newValue =\r\n isObject(objValue) || Array.isArray(objValue)\r\n ? objValue\r\n : !isNaN(+tempPath[index + 1])\r\n ? []\r\n : {};\r\n }\r\n object[key] = newValue;\r\n object = object[key];\r\n }\r\n return object;\r\n}\n\nvar transformToNestObject = (data, value = {}) => {\r\n for (const key in data) {\r\n !isKey(key) ? set(value, key, data[key]) : (value[key] = data[key]);\r\n }\r\n return value;\r\n};\n\nvar isUndefined = (val) => val === undefined;\n\nvar get = (obj = {}, path, defaultValue) => {\r\n const result = compact(path.split(/[,[\\].]+?/)).reduce((result, key) => (isNullOrUndefined(result) ? result : result[key]), obj);\r\n return isUndefined(result) || result === obj\r\n ? isUndefined(obj[path])\r\n ? defaultValue\r\n : obj[path]\r\n : result;\r\n};\n\nvar focusOnErrorField = (fields, fieldErrors) => {\r\n for (const key in fields) {\r\n if (get(fieldErrors, key)) {\r\n const field = fields[key];\r\n if (field) {\r\n if (field.ref.focus && isUndefined(field.ref.focus())) {\r\n break;\r\n }\r\n else if (field.options) {\r\n field.options[0].ref.focus();\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n};\n\nvar removeAllEventListeners = (ref, validateWithStateUpdate) => {\r\n if (isHTMLElement(ref) && ref.removeEventListener) {\r\n ref.removeEventListener(EVENTS.INPUT, validateWithStateUpdate);\r\n ref.removeEventListener(EVENTS.CHANGE, validateWithStateUpdate);\r\n ref.removeEventListener(EVENTS.BLUR, validateWithStateUpdate);\r\n }\r\n};\n\nconst defaultReturn = {\r\n isValid: false,\r\n value: null,\r\n};\r\nvar getRadioValue = (options) => Array.isArray(options)\r\n ? options.reduce((previous, option) => option && option.ref.checked\r\n ? {\r\n isValid: true,\r\n value: option.ref.value,\r\n }\r\n : previous, defaultReturn)\r\n : defaultReturn;\n\nvar getMultipleSelectValue = (options) => [...options]\r\n .filter(({ selected }) => selected)\r\n .map(({ value }) => value);\n\nvar isRadioInput = (element) => element.type === 'radio';\n\nvar isFileInput = (element) => element.type === 'file';\n\nvar isCheckBoxInput = (element) => element.type === 'checkbox';\n\nvar isMultipleSelect = (element) => element.type === `${SELECT}-multiple`;\n\nconst defaultResult = {\r\n value: false,\r\n isValid: false,\r\n};\r\nconst validResult = { value: true, isValid: true };\r\nvar getCheckboxValue = (options) => {\r\n if (Array.isArray(options)) {\r\n if (options.length > 1) {\r\n const values = options\r\n .filter((option) => option && option.ref.checked)\r\n .map(({ ref: { value } }) => value);\r\n return { value: values, isValid: !!values.length };\r\n }\r\n const { checked, value, attributes } = options[0].ref;\r\n return checked\r\n ? attributes && !isUndefined(attributes.value)\r\n ? isUndefined(value) || value === ''\r\n ? validResult\r\n : { value: value, isValid: true }\r\n : validResult\r\n : defaultResult;\r\n }\r\n return defaultResult;\r\n};\n\nfunction getFieldValue(fieldsRef, name, shallowFieldsStateRef, excludeDisabled, shouldKeepRawValue) {\r\n const field = fieldsRef.current[name];\r\n if (field) {\r\n const { ref: { value, disabled }, ref, valueAsNumber, valueAsDate, setValueAs, } = field;\r\n if (disabled && excludeDisabled) {\r\n return;\r\n }\r\n if (isFileInput(ref)) {\r\n return ref.files;\r\n }\r\n if (isRadioInput(ref)) {\r\n return getRadioValue(field.options).value;\r\n }\r\n if (isMultipleSelect(ref)) {\r\n return getMultipleSelectValue(ref.options);\r\n }\r\n if (isCheckBoxInput(ref)) {\r\n return getCheckboxValue(field.options).value;\r\n }\r\n return shouldKeepRawValue\r\n ? value\r\n : valueAsNumber\r\n ? value === ''\r\n ? NaN\r\n : +value\r\n : valueAsDate\r\n ? ref.valueAsDate\r\n : setValueAs\r\n ? setValueAs(value)\r\n : value;\r\n }\r\n if (shallowFieldsStateRef) {\r\n return get(shallowFieldsStateRef.current, name);\r\n }\r\n}\n\nfunction isDetached(element) {\r\n if (!element) {\r\n return true;\r\n }\r\n if (!(element instanceof HTMLElement) ||\r\n element.nodeType === Node.DOCUMENT_NODE) {\r\n return false;\r\n }\r\n return isDetached(element.parentNode);\r\n}\n\nvar isEmptyObject = (value) => isObject(value) && !Object.keys(value).length;\n\nvar isBoolean = (value) => typeof value === 'boolean';\n\nfunction baseGet(object, updatePath) {\r\n const length = updatePath.slice(0, -1).length;\r\n let index = 0;\r\n while (index < length) {\r\n object = isUndefined(object) ? index++ : object[updatePath[index++]];\r\n }\r\n return object;\r\n}\r\nfunction unset(object, path) {\r\n const updatePath = isKey(path) ? [path] : stringToPath(path);\r\n const childObject = updatePath.length == 1 ? object : baseGet(object, updatePath);\r\n const key = updatePath[updatePath.length - 1];\r\n let previousObjRef;\r\n if (childObject) {\r\n delete childObject[key];\r\n }\r\n for (let k = 0; k < updatePath.slice(0, -1).length; k++) {\r\n let index = -1;\r\n let objectRef;\r\n const currentPaths = updatePath.slice(0, -(k + 1));\r\n const currentPathsLength = currentPaths.length - 1;\r\n if (k > 0) {\r\n previousObjRef = object;\r\n }\r\n while (++index < currentPaths.length) {\r\n const item = currentPaths[index];\r\n objectRef = objectRef ? objectRef[item] : object[item];\r\n if (currentPathsLength === index &&\r\n ((isObject(objectRef) && isEmptyObject(objectRef)) ||\r\n (Array.isArray(objectRef) &&\r\n !objectRef.filter((data) => (isObject(data) && !isEmptyObject(data)) || isBoolean(data)).length))) {\r\n previousObjRef ? delete previousObjRef[item] : delete object[item];\r\n }\r\n previousObjRef = objectRef;\r\n }\r\n }\r\n return object;\r\n}\n\nconst isSameRef = (fieldValue, ref) => fieldValue && fieldValue.ref === ref;\r\nfunction findRemovedFieldAndRemoveListener(fieldsRef, handleChange, field, shallowFieldsStateRef, shouldUnregister, forceDelete) {\r\n const { ref, ref: { name }, } = field;\r\n const fieldRef = fieldsRef.current[name];\r\n if (!shouldUnregister) {\r\n const value = getFieldValue(fieldsRef, name, shallowFieldsStateRef);\r\n !isUndefined(value) && set(shallowFieldsStateRef.current, name, value);\r\n }\r\n if (!ref.type || !fieldRef) {\r\n delete fieldsRef.current[name];\r\n return;\r\n }\r\n if (isRadioInput(ref) || isCheckBoxInput(ref)) {\r\n if (Array.isArray(fieldRef.options) && fieldRef.options.length) {\r\n compact(fieldRef.options).forEach((option = {}, index) => {\r\n if ((isDetached(option.ref) && isSameRef(option, option.ref)) ||\r\n forceDelete) {\r\n removeAllEventListeners(option.ref, handleChange);\r\n unset(fieldRef.options, `[${index}]`);\r\n }\r\n });\r\n if (fieldRef.options && !compact(fieldRef.options).length) {\r\n delete fieldsRef.current[name];\r\n }\r\n }\r\n else {\r\n delete fieldsRef.current[name];\r\n }\r\n }\r\n else if ((isDetached(ref) && isSameRef(fieldRef, ref)) || forceDelete) {\r\n removeAllEventListeners(ref, handleChange);\r\n delete fieldsRef.current[name];\r\n }\r\n}\n\nvar isPrimitive = (value) => isNullOrUndefined(value) || !isObjectType(value);\n\nfunction deepMerge(target, source) {\r\n if (isPrimitive(target) || isPrimitive(source)) {\r\n return source;\r\n }\r\n for (const key in source) {\r\n const targetValue = target[key];\r\n const sourceValue = source[key];\r\n try {\r\n target[key] =\r\n (isObject(targetValue) && isObject(sourceValue)) ||\r\n (Array.isArray(targetValue) && Array.isArray(sourceValue))\r\n ? deepMerge(targetValue, sourceValue)\r\n : sourceValue;\r\n }\r\n catch (_a) { }\r\n }\r\n return target;\r\n}\n\nfunction deepEqual(object1, object2, isErrorObject) {\r\n if (isPrimitive(object1) ||\r\n isPrimitive(object2) ||\r\n object1 instanceof Date ||\r\n object2 instanceof Date) {\r\n return object1 === object2;\r\n }\r\n if (!isValidElement(object1)) {\r\n const keys1 = Object.keys(object1);\r\n const keys2 = Object.keys(object2);\r\n if (keys1.length !== keys2.length) {\r\n return false;\r\n }\r\n for (const key of keys1) {\r\n const val1 = object1[key];\r\n if (!(isErrorObject && key === 'ref')) {\r\n const val2 = object2[key];\r\n if ((isObject(val1) || Array.isArray(val1)) &&\r\n (isObject(val2) || Array.isArray(val2))\r\n ? !deepEqual(val1, val2, isErrorObject)\r\n : val1 !== val2) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n}\n\nfunction setDirtyFields(values, defaultValues, dirtyFields, parentNode, parentName) {\r\n let index = -1;\r\n while (++index < values.length) {\r\n for (const key in values[index]) {\r\n if (Array.isArray(values[index][key])) {\r\n !dirtyFields[index] && (dirtyFields[index] = {});\r\n dirtyFields[index][key] = [];\r\n setDirtyFields(values[index][key], get(defaultValues[index] || {}, key, []), dirtyFields[index][key], dirtyFields[index], key);\r\n }\r\n else {\r\n deepEqual(get(defaultValues[index] || {}, key), values[index][key])\r\n ? set(dirtyFields[index] || {}, key)\r\n : (dirtyFields[index] = Object.assign(Object.assign({}, dirtyFields[index]), { [key]: true }));\r\n }\r\n }\r\n parentNode &&\r\n !dirtyFields.length &&\r\n delete parentNode[parentName];\r\n }\r\n return dirtyFields;\r\n}\r\nvar setFieldArrayDirtyFields = (values, defaultValues, dirtyFields) => deepMerge(setDirtyFields(values, defaultValues, dirtyFields.slice(0, values.length)), setDirtyFields(defaultValues, values, dirtyFields.slice(0, values.length)));\n\nvar isString = (value) => typeof value === 'string';\n\nvar getFieldsValues = (fieldsRef, shallowFieldsState, shouldUnregister, excludeDisabled, search) => {\r\n const output = {};\r\n for (const name in fieldsRef.current) {\r\n if (isUndefined(search) ||\r\n (isString(search)\r\n ? name.startsWith(search)\r\n : Array.isArray(search) && search.find((data) => name.startsWith(data)))) {\r\n output[name] = getFieldValue(fieldsRef, name, undefined, excludeDisabled);\r\n }\r\n }\r\n return shouldUnregister\r\n ? transformToNestObject(output)\r\n : deepMerge(shallowFieldsState, transformToNestObject(output));\r\n};\n\nvar isErrorStateChanged = ({ errors, name, error, validFields, fieldsWithValidation, }) => {\r\n const isValid = isUndefined(error);\r\n const previousError = get(errors, name);\r\n return ((isValid && !!previousError) ||\r\n (!isValid && !deepEqual(previousError, error, true)) ||\r\n (isValid && get(fieldsWithValidation, name) && !get(validFields, name)));\r\n};\n\nvar isRegex = (value) => value instanceof RegExp;\n\nvar getValueAndMessage = (validationData) => isObject(validationData) && !isRegex(validationData)\r\n ? validationData\r\n : {\r\n value: validationData,\r\n message: '',\r\n };\n\nvar isFunction = (value) => typeof value === 'function';\n\nvar isMessage = (value) => isString(value) || isValidElement(value);\n\nfunction getValidateError(result, ref, type = 'validate') {\r\n if (isMessage(result) || (isBoolean(result) && !result)) {\r\n return {\r\n type,\r\n message: isMessage(result) ? result : '',\r\n ref,\r\n };\r\n }\r\n}\n\nvar appendErrors = (name, validateAllFieldCriteria, errors, type, message) => validateAllFieldCriteria\r\n ? Object.assign(Object.assign({}, errors[name]), { types: Object.assign(Object.assign({}, (errors[name] && errors[name].types ? errors[name].types : {})), { [type]: message || true }) }) : {};\n\nvar validateField = async (fieldsRef, validateAllFieldCriteria, { ref, ref: { value }, options, required, maxLength, minLength, min, max, pattern, validate, }, shallowFieldsStateRef) => {\r\n const name = ref.name;\r\n const error = {};\r\n const isRadio = isRadioInput(ref);\r\n const isCheckBox = isCheckBoxInput(ref);\r\n const isRadioOrCheckbox = isRadio || isCheckBox;\r\n const isEmpty = value === '';\r\n const appendErrorsCurry = appendErrors.bind(null, name, validateAllFieldCriteria, error);\r\n const getMinMaxMessage = (exceedMax, maxLengthMessage, minLengthMessage, maxType = INPUT_VALIDATION_RULES.maxLength, minType = INPUT_VALIDATION_RULES.minLength) => {\r\n const message = exceedMax ? maxLengthMessage : minLengthMessage;\r\n error[name] = Object.assign({ type: exceedMax ? maxType : minType, message,\r\n ref }, (exceedMax\r\n ? appendErrorsCurry(maxType, message)\r\n : appendErrorsCurry(minType, message)));\r\n };\r\n if (required &&\r\n ((!isRadio && !isCheckBox && (isEmpty || isNullOrUndefined(value))) ||\r\n (isBoolean(value) && !value) ||\r\n (isCheckBox && !getCheckboxValue(options).isValid) ||\r\n (isRadio && !getRadioValue(options).isValid))) {\r\n const { value, message } = isMessage(required)\r\n ? { value: !!required, message: required }\r\n : getValueAndMessage(required);\r\n if (value) {\r\n error[name] = Object.assign({ type: INPUT_VALIDATION_RULES.required, message, ref: isRadioOrCheckbox\r\n ? ((fieldsRef.current[name].options || [])[0] || {}).ref\r\n : ref }, appendErrorsCurry(INPUT_VALIDATION_RULES.required, message));\r\n if (!validateAllFieldCriteria) {\r\n return error;\r\n }\r\n }\r\n }\r\n if ((!isNullOrUndefined(min) || !isNullOrUndefined(max)) && value !== '') {\r\n let exceedMax;\r\n let exceedMin;\r\n const maxOutput = getValueAndMessage(max);\r\n const minOutput = getValueAndMessage(min);\r\n if (!isNaN(value)) {\r\n const valueNumber = ref.valueAsNumber || parseFloat(value);\r\n if (!isNullOrUndefined(maxOutput.value)) {\r\n exceedMax = valueNumber > maxOutput.value;\r\n }\r\n if (!isNullOrUndefined(minOutput.value)) {\r\n exceedMin = valueNumber < minOutput.value;\r\n }\r\n }\r\n else {\r\n const valueDate = ref.valueAsDate || new Date(value);\r\n if (isString(maxOutput.value)) {\r\n exceedMax = valueDate > new Date(maxOutput.value);\r\n }\r\n if (isString(minOutput.value)) {\r\n exceedMin = valueDate < new Date(minOutput.value);\r\n }\r\n }\r\n if (exceedMax || exceedMin) {\r\n getMinMaxMessage(!!exceedMax, maxOutput.message, minOutput.message, INPUT_VALIDATION_RULES.max, INPUT_VALIDATION_RULES.min);\r\n if (!validateAllFieldCriteria) {\r\n return error;\r\n }\r\n }\r\n }\r\n if (isString(value) && !isEmpty && (maxLength || minLength)) {\r\n const maxLengthOutput = getValueAndMessage(maxLength);\r\n const minLengthOutput = getValueAndMessage(minLength);\r\n const exceedMax = !isNullOrUndefined(maxLengthOutput.value) &&\r\n value.length > maxLengthOutput.value;\r\n const exceedMin = !isNullOrUndefined(minLengthOutput.value) &&\r\n value.length < minLengthOutput.value;\r\n if (exceedMax || exceedMin) {\r\n getMinMaxMessage(exceedMax, maxLengthOutput.message, minLengthOutput.message);\r\n if (!validateAllFieldCriteria) {\r\n return error;\r\n }\r\n }\r\n }\r\n if (isString(value) && pattern && !isEmpty) {\r\n const { value: patternValue, message } = getValueAndMessage(pattern);\r\n if (isRegex(patternValue) && !patternValue.test(value)) {\r\n error[name] = Object.assign({ type: INPUT_VALIDATION_RULES.pattern, message,\r\n ref }, appendErrorsCurry(INPUT_VALIDATION_RULES.pattern, message));\r\n if (!validateAllFieldCriteria) {\r\n return error;\r\n }\r\n }\r\n }\r\n if (validate) {\r\n const fieldValue = getFieldValue(fieldsRef, name, shallowFieldsStateRef, false, true);\r\n const validateRef = isRadioOrCheckbox && options ? options[0].ref : ref;\r\n if (isFunction(validate)) {\r\n const result = await validate(fieldValue);\r\n const validateError = getValidateError(result, validateRef);\r\n if (validateError) {\r\n error[name] = Object.assign(Object.assign({}, validateError), appendErrorsCurry(INPUT_VALIDATION_RULES.validate, validateError.message));\r\n if (!validateAllFieldCriteria) {\r\n return error;\r\n }\r\n }\r\n }\r\n else if (isObject(validate)) {\r\n let validationResult = {};\r\n for (const [key, validateFunction] of Object.entries(validate)) {\r\n if (!isEmptyObject(validationResult) && !validateAllFieldCriteria) {\r\n break;\r\n }\r\n const validateResult = await validateFunction(fieldValue);\r\n const validateError = getValidateError(validateResult, validateRef, key);\r\n if (validateError) {\r\n validationResult = Object.assign(Object.assign({}, validateError), appendErrorsCurry(key, validateError.message));\r\n if (validateAllFieldCriteria) {\r\n error[name] = validationResult;\r\n }\r\n }\r\n }\r\n if (!isEmptyObject(validationResult)) {\r\n error[name] = Object.assign({ ref: validateRef }, validationResult);\r\n if (!validateAllFieldCriteria) {\r\n return error;\r\n }\r\n }\r\n }\r\n }\r\n return error;\r\n};\n\nconst getPath = (rootPath, values, paths = []) => {\r\n for (const property in values) {\r\n const rootName = (rootPath +\r\n (isObject(values)\r\n ? `.${property}`\r\n : `[${property}]`));\r\n isPrimitive(values[property])\r\n ? paths.push(rootName)\r\n : getPath(rootName, values[property], paths);\r\n }\r\n return paths;\r\n};\n\nvar assignWatchFields = (fieldValues, fieldName, watchFields, inputValue, isSingleField) => {\r\n let value = undefined;\r\n watchFields.add(fieldName);\r\n if (!isEmptyObject(fieldValues)) {\r\n value = get(fieldValues, fieldName);\r\n if (isObject(value) || Array.isArray(value)) {\r\n getPath(fieldName, value).forEach((name) => watchFields.add(name));\r\n }\r\n }\r\n return isUndefined(value)\r\n ? isSingleField\r\n ? inputValue\r\n : get(inputValue, fieldName)\r\n : value;\r\n};\n\nvar skipValidation = ({ isOnBlur, isOnChange, isOnTouch, isTouched, isReValidateOnBlur, isReValidateOnChange, isBlurEvent, isSubmitted, isOnAll, }) => {\r\n if (isOnAll) {\r\n return false;\r\n }\r\n else if (!isSubmitted && isOnTouch) {\r\n return !(isTouched || isBlurEvent);\r\n }\r\n else if (isSubmitted ? isReValidateOnBlur : isOnBlur) {\r\n return !isBlurEvent;\r\n }\r\n else if (isSubmitted ? isReValidateOnChange : isOnChange) {\r\n return isBlurEvent;\r\n }\r\n return true;\r\n};\n\nvar getFieldArrayParentName = (name) => name.substring(0, name.indexOf('['));\n\nconst isMatchFieldArrayName = (name, searchName) => RegExp(`^${searchName}([|.)\\\\d+`.replace(/\\[/g, '\\\\[').replace(/\\]/g, '\\\\]')).test(name);\r\nvar isNameInFieldArray = (names, name) => [...names].some((current) => isMatchFieldArrayName(name, current));\n\nvar isSelectInput = (element) => element.type === `${SELECT}-one`;\n\nfunction onDomRemove(fieldsRef, removeFieldEventListenerAndRef) {\r\n const observer = new MutationObserver(() => {\r\n for (const field of Object.values(fieldsRef.current)) {\r\n if (field && field.options) {\r\n for (const option of field.options) {\r\n if (option && option.ref && isDetached(option.ref)) {\r\n removeFieldEventListenerAndRef(field);\r\n }\r\n }\r\n }\r\n else if (field && isDetached(field.ref)) {\r\n removeFieldEventListenerAndRef(field);\r\n }\r\n }\r\n });\r\n observer.observe(window.document, {\r\n childList: true,\r\n subtree: true,\r\n });\r\n return observer;\r\n}\n\nvar isWeb = typeof window !== UNDEFINED && typeof document !== UNDEFINED;\n\nfunction cloneObject(data) {\r\n var _a;\r\n let copy;\r\n if (isPrimitive(data) ||\r\n (isWeb && (data instanceof File || isHTMLElement(data)))) {\r\n return data;\r\n }\r\n if (!['Set', 'Map', 'Object', 'Date', 'Array'].includes((_a = data.constructor) === null || _a === void 0 ? void 0 : _a.name)) {\r\n return data;\r\n }\r\n if (data instanceof Date) {\r\n copy = new Date(data.getTime());\r\n return copy;\r\n }\r\n if (data instanceof Set) {\r\n copy = new Set();\r\n for (const item of data) {\r\n copy.add(item);\r\n }\r\n return copy;\r\n }\r\n if (data instanceof Map) {\r\n copy = new Map();\r\n for (const key of data.keys()) {\r\n copy.set(key, cloneObject(data.get(key)));\r\n }\r\n return copy;\r\n }\r\n copy = Array.isArray(data) ? [] : {};\r\n for (const key in data) {\r\n copy[key] = cloneObject(data[key]);\r\n }\r\n return copy;\r\n}\n\nvar modeChecker = (mode) => ({\r\n isOnSubmit: !mode || mode === VALIDATION_MODE.onSubmit,\r\n isOnBlur: mode === VALIDATION_MODE.onBlur,\r\n isOnChange: mode === VALIDATION_MODE.onChange,\r\n isOnAll: mode === VALIDATION_MODE.all,\r\n isOnTouch: mode === VALIDATION_MODE.onTouched,\r\n});\n\nvar isRadioOrCheckboxFunction = (ref) => isRadioInput(ref) || isCheckBoxInput(ref);\n\nconst isWindowUndefined = typeof window === UNDEFINED;\r\nconst isProxyEnabled = isWeb ? 'Proxy' in window : typeof Proxy !== UNDEFINED;\r\nfunction useForm({ mode = VALIDATION_MODE.onSubmit, reValidateMode = VALIDATION_MODE.onChange, resolver, context, defaultValues = {}, shouldFocusError = true, shouldUnregister = true, criteriaMode, } = {}) {\r\n const fieldsRef = useRef({});\r\n const fieldArrayDefaultValuesRef = useRef({});\r\n const fieldArrayValuesRef = useRef({});\r\n const watchFieldsRef = useRef(new Set());\r\n const useWatchFieldsRef = useRef({});\r\n const useWatchRenderFunctionsRef = useRef({});\r\n const fieldsWithValidationRef = useRef({});\r\n const validFieldsRef = useRef({});\r\n const defaultValuesRef = useRef(defaultValues);\r\n const isUnMount = useRef(false);\r\n const isWatchAllRef = useRef(false);\r\n const handleChangeRef = useRef();\r\n const shallowFieldsStateRef = useRef({});\r\n const resetFieldArrayFunctionRef = useRef({});\r\n const contextRef = useRef(context);\r\n const resolverRef = useRef(resolver);\r\n const fieldArrayNamesRef = useRef(new Set());\r\n const modeRef = useRef(modeChecker(mode));\r\n const { isOnSubmit, isOnTouch } = modeRef.current;\r\n const isValidateAllFieldCriteria = criteriaMode === VALIDATION_MODE.all;\r\n const [formState, setFormState] = useState({\r\n isDirty: false,\r\n isValidating: false,\r\n dirtyFields: {},\r\n isSubmitted: false,\r\n submitCount: 0,\r\n touched: {},\r\n isSubmitting: false,\r\n isSubmitSuccessful: false,\r\n isValid: !isOnSubmit,\r\n errors: {},\r\n });\r\n const readFormStateRef = useRef({\r\n isDirty: !isProxyEnabled,\r\n dirtyFields: !isProxyEnabled,\r\n touched: !isProxyEnabled || isOnTouch,\r\n isValidating: !isProxyEnabled,\r\n isSubmitting: !isProxyEnabled,\r\n isValid: !isProxyEnabled,\r\n });\r\n const formStateRef = useRef(formState);\r\n const observerRef = useRef();\r\n const { isOnBlur: isReValidateOnBlur, isOnChange: isReValidateOnChange, } = useRef(modeChecker(reValidateMode)).current;\r\n contextRef.current = context;\r\n resolverRef.current = resolver;\r\n formStateRef.current = formState;\r\n shallowFieldsStateRef.current = shouldUnregister\r\n ? {}\r\n : isEmptyObject(shallowFieldsStateRef.current)\r\n ? cloneObject(defaultValues)\r\n : shallowFieldsStateRef.current;\r\n const updateFormState = useCallback((state = {}) => {\r\n if (!isUnMount.current) {\r\n formStateRef.current = Object.assign(Object.assign({}, formStateRef.current), state);\r\n setFormState(formStateRef.current);\r\n }\r\n }, []);\r\n const updateIsValidating = () => readFormStateRef.current.isValidating &&\r\n updateFormState({\r\n isValidating: true,\r\n });\r\n const shouldRenderBaseOnError = useCallback((name, error, shouldRender = false, state = {}, isValid) => {\r\n let shouldReRender = shouldRender ||\r\n isErrorStateChanged({\r\n errors: formStateRef.current.errors,\r\n error,\r\n name,\r\n validFields: validFieldsRef.current,\r\n fieldsWithValidation: fieldsWithValidationRef.current,\r\n });\r\n const previousError = get(formStateRef.current.errors, name);\r\n if (error) {\r\n unset(validFieldsRef.current, name);\r\n shouldReRender =\r\n shouldReRender ||\r\n !previousError ||\r\n !deepEqual(previousError, error, true);\r\n set(formStateRef.current.errors, name, error);\r\n }\r\n else {\r\n if (get(fieldsWithValidationRef.current, name) || resolverRef.current) {\r\n set(validFieldsRef.current, name, true);\r\n shouldReRender = shouldReRender || previousError;\r\n }\r\n unset(formStateRef.current.errors, name);\r\n }\r\n if ((shouldReRender && !isNullOrUndefined(shouldRender)) ||\r\n !isEmptyObject(state) ||\r\n readFormStateRef.current.isValidating) {\r\n updateFormState(Object.assign(Object.assign(Object.assign({}, state), (resolverRef.current ? { isValid: !!isValid } : {})), { isValidating: false }));\r\n }\r\n }, []);\r\n const setFieldValue = useCallback((name, rawValue) => {\r\n const { ref, options } = fieldsRef.current[name];\r\n const value = isWeb && isHTMLElement(ref) && isNullOrUndefined(rawValue)\r\n ? ''\r\n : rawValue;\r\n if (isRadioInput(ref)) {\r\n (options || []).forEach(({ ref: radioRef }) => (radioRef.checked = radioRef.value === value));\r\n }\r\n else if (isFileInput(ref) && !isString(value)) {\r\n ref.files = value;\r\n }\r\n else if (isMultipleSelect(ref)) {\r\n [...ref.options].forEach((selectRef) => (selectRef.selected = value.includes(selectRef.value)));\r\n }\r\n else if (isCheckBoxInput(ref) && options) {\r\n options.length > 1\r\n ? options.forEach(({ ref: checkboxRef }) => (checkboxRef.checked = Array.isArray(value)\r\n ? !!value.find((data) => data === checkboxRef.value)\r\n : value === checkboxRef.value))\r\n : (options[0].ref.checked = !!value);\r\n }\r\n else {\r\n ref.value = value;\r\n }\r\n }, []);\r\n const isFormDirty = useCallback((name, data) => {\r\n if (readFormStateRef.current.isDirty) {\r\n const formValues = getValues();\r\n name && data && set(formValues, name, data);\r\n return !deepEqual(formValues, defaultValuesRef.current);\r\n }\r\n return false;\r\n }, []);\r\n const updateAndGetDirtyState = useCallback((name, shouldRender = true) => {\r\n if (readFormStateRef.current.isDirty ||\r\n readFormStateRef.current.dirtyFields) {\r\n const isFieldDirty = !deepEqual(get(defaultValuesRef.current, name), getFieldValue(fieldsRef, name, shallowFieldsStateRef));\r\n const isDirtyFieldExist = get(formStateRef.current.dirtyFields, name);\r\n const previousIsDirty = formStateRef.current.isDirty;\r\n isFieldDirty\r\n ? set(formStateRef.current.dirtyFields, name, true)\r\n : unset(formStateRef.current.dirtyFields, name);\r\n const state = {\r\n isDirty: isFormDirty(),\r\n dirtyFields: formStateRef.current.dirtyFields,\r\n };\r\n const isChanged = (readFormStateRef.current.isDirty &&\r\n previousIsDirty !== state.isDirty) ||\r\n (readFormStateRef.current.dirtyFields &&\r\n isDirtyFieldExist !== get(formStateRef.current.dirtyFields, name));\r\n isChanged && shouldRender && updateFormState(state);\r\n return isChanged ? state : {};\r\n }\r\n return {};\r\n }, []);\r\n const executeValidation = useCallback(async (name, skipReRender) => {\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (!fieldsRef.current[name]) {\r\n console.warn('📋 Field is missing with `name` attribute: ', name);\r\n return false;\r\n }\r\n }\r\n const error = (await validateField(fieldsRef, isValidateAllFieldCriteria, fieldsRef.current[name], shallowFieldsStateRef))[name];\r\n shouldRenderBaseOnError(name, error, skipReRender);\r\n return isUndefined(error);\r\n }, [shouldRenderBaseOnError, isValidateAllFieldCriteria]);\r\n const executeSchemaOrResolverValidation = useCallback(async (names) => {\r\n const { errors } = await resolverRef.current(getValues(), contextRef.current, isValidateAllFieldCriteria);\r\n const previousFormIsValid = formStateRef.current.isValid;\r\n if (Array.isArray(names)) {\r\n const isInputsValid = names\r\n .map((name) => {\r\n const error = get(errors, name);\r\n error\r\n ? set(formStateRef.current.errors, name, error)\r\n : unset(formStateRef.current.errors, name);\r\n return !error;\r\n })\r\n .every(Boolean);\r\n updateFormState({\r\n isValid: isEmptyObject(errors),\r\n isValidating: false,\r\n });\r\n return isInputsValid;\r\n }\r\n else {\r\n const error = get(errors, names);\r\n shouldRenderBaseOnError(names, error, previousFormIsValid !== isEmptyObject(errors), {}, isEmptyObject(errors));\r\n return !error;\r\n }\r\n }, [shouldRenderBaseOnError, isValidateAllFieldCriteria]);\r\n const trigger = useCallback(async (name) => {\r\n const fields = name || Object.keys(fieldsRef.current);\r\n updateIsValidating();\r\n if (resolverRef.current) {\r\n return executeSchemaOrResolverValidation(fields);\r\n }\r\n if (Array.isArray(fields)) {\r\n !name && (formStateRef.current.errors = {});\r\n const result = await Promise.all(fields.map(async (data) => await executeValidation(data, null)));\r\n updateFormState({\r\n isValidating: false,\r\n });\r\n return result.every(Boolean);\r\n }\r\n return await executeValidation(fields);\r\n }, [executeSchemaOrResolverValidation, executeValidation]);\r\n const setInternalValues = useCallback((name, value, { shouldDirty, shouldValidate }) => {\r\n const data = {};\r\n set(data, name, value);\r\n for (const fieldName of getPath(name, value)) {\r\n if (fieldsRef.current[fieldName]) {\r\n setFieldValue(fieldName, get(data, fieldName));\r\n shouldDirty && updateAndGetDirtyState(fieldName);\r\n shouldValidate && trigger(fieldName);\r\n }\r\n }\r\n }, [trigger, setFieldValue, updateAndGetDirtyState]);\r\n const setInternalValue = useCallback((name, value, config) => {\r\n !shouldUnregister &&\r\n !isPrimitive(value) &&\r\n set(shallowFieldsStateRef.current, name, Array.isArray(value) ? [...value] : Object.assign({}, value));\r\n if (fieldsRef.current[name]) {\r\n setFieldValue(name, value);\r\n config.shouldDirty && updateAndGetDirtyState(name);\r\n config.shouldValidate && trigger(name);\r\n }\r\n else if (!isPrimitive(value)) {\r\n setInternalValues(name, value, config);\r\n if (fieldArrayNamesRef.current.has(name)) {\r\n const parentName = getFieldArrayParentName(name) || name;\r\n set(fieldArrayDefaultValuesRef.current, name, value);\r\n resetFieldArrayFunctionRef.current[parentName]({\r\n [parentName]: get(fieldArrayDefaultValuesRef.current, parentName),\r\n });\r\n if ((readFormStateRef.current.isDirty ||\r\n readFormStateRef.current.dirtyFields) &&\r\n config.shouldDirty) {\r\n set(formStateRef.current.dirtyFields, name, setFieldArrayDirtyFields(value, get(defaultValuesRef.current, name, []), get(formStateRef.current.dirtyFields, name, [])));\r\n updateFormState({\r\n isDirty: !deepEqual(Object.assign(Object.assign({}, getValues()), { [name]: value }), defaultValuesRef.current),\r\n });\r\n }\r\n }\r\n }\r\n !shouldUnregister && set(shallowFieldsStateRef.current, name, value);\r\n }, [updateAndGetDirtyState, setFieldValue, setInternalValues]);\r\n const isFieldWatched = (name) => isWatchAllRef.current ||\r\n watchFieldsRef.current.has(name) ||\r\n watchFieldsRef.current.has((name.match(/\\w+/) || [])[0]);\r\n const renderWatchedInputs = (name) => {\r\n let found = true;\r\n if (!isEmptyObject(useWatchFieldsRef.current)) {\r\n for (const key in useWatchFieldsRef.current) {\r\n if (!name ||\r\n !useWatchFieldsRef.current[key].size ||\r\n useWatchFieldsRef.current[key].has(name) ||\r\n useWatchFieldsRef.current[key].has(getFieldArrayParentName(name))) {\r\n useWatchRenderFunctionsRef.current[key]();\r\n found = false;\r\n }\r\n }\r\n }\r\n return found;\r\n };\r\n function setValue(name, value, config) {\r\n setInternalValue(name, value, config || {});\r\n isFieldWatched(name) && updateFormState();\r\n renderWatchedInputs(name);\r\n }\r\n handleChangeRef.current = handleChangeRef.current\r\n ? handleChangeRef.current\r\n : async ({ type, target }) => {\r\n let name = target.name;\r\n const field = fieldsRef.current[name];\r\n let error;\r\n let isValid;\r\n if (field) {\r\n const isBlurEvent = type === EVENTS.BLUR;\r\n const shouldSkipValidation = skipValidation(Object.assign({ isBlurEvent,\r\n isReValidateOnChange,\r\n isReValidateOnBlur, isTouched: !!get(formStateRef.current.touched, name), isSubmitted: formStateRef.current.isSubmitted }, modeRef.current));\r\n let state = updateAndGetDirtyState(name, false);\r\n let shouldRender = !isEmptyObject(state) ||\r\n (!isBlurEvent && isFieldWatched(name));\r\n if (isBlurEvent &&\r\n !get(formStateRef.current.touched, name) &&\r\n readFormStateRef.current.touched) {\r\n set(formStateRef.current.touched, name, true);\r\n state = Object.assign(Object.assign({}, state), { touched: formStateRef.current.touched });\r\n }\r\n if (!shouldUnregister && isCheckBoxInput(target)) {\r\n set(shallowFieldsStateRef.current, name, getFieldValue(fieldsRef, name));\r\n }\r\n if (shouldSkipValidation) {\r\n !isBlurEvent && renderWatchedInputs(name);\r\n return ((!isEmptyObject(state) ||\r\n (shouldRender && isEmptyObject(state))) &&\r\n updateFormState(state));\r\n }\r\n updateIsValidating();\r\n if (resolverRef.current) {\r\n const { errors } = await resolverRef.current(getValues(), contextRef.current, isValidateAllFieldCriteria);\r\n const previousFormIsValid = formStateRef.current.isValid;\r\n error = get(errors, name);\r\n if (isCheckBoxInput(target) &&\r\n !error &&\r\n resolverRef.current) {\r\n const parentNodeName = getFieldArrayParentName(name);\r\n const currentError = get(errors, parentNodeName, {});\r\n currentError.type &&\r\n currentError.message &&\r\n (error = currentError);\r\n if (parentNodeName &&\r\n (currentError ||\r\n get(formStateRef.current.errors, parentNodeName))) {\r\n name = parentNodeName;\r\n }\r\n }\r\n isValid = isEmptyObject(errors);\r\n previousFormIsValid !== isValid && (shouldRender = true);\r\n }\r\n else {\r\n error = (await validateField(fieldsRef, isValidateAllFieldCriteria, field, shallowFieldsStateRef))[name];\r\n }\r\n !isBlurEvent && renderWatchedInputs(name);\r\n shouldRenderBaseOnError(name, error, shouldRender, state, isValid);\r\n }\r\n };\r\n function setFieldArrayDefaultValues(data) {\r\n if (!shouldUnregister) {\r\n let copy = cloneObject(data);\r\n for (const value of fieldArrayNamesRef.current) {\r\n if (isKey(value) && !copy[value]) {\r\n copy = Object.assign(Object.assign({}, copy), { [value]: [] });\r\n }\r\n }\r\n return copy;\r\n }\r\n return data;\r\n }\r\n function getValues(payload) {\r\n if (isString(payload)) {\r\n return getFieldValue(fieldsRef, payload, shallowFieldsStateRef);\r\n }\r\n if (Array.isArray(payload)) {\r\n const data = {};\r\n for (const name of payload) {\r\n set(data, name, getFieldValue(fieldsRef, name, shallowFieldsStateRef));\r\n }\r\n return data;\r\n }\r\n return setFieldArrayDefaultValues(getFieldsValues(fieldsRef, cloneObject(shallowFieldsStateRef.current), shouldUnregister));\r\n }\r\n const validateResolver = useCallback(async (values = {}) => {\r\n const newDefaultValues = isEmptyObject(fieldsRef.current)\r\n ? defaultValuesRef.current\r\n : {};\r\n const { errors } = (await resolverRef.current(Object.assign(Object.assign(Object.assign({}, newDefaultValues), getValues()), values), contextRef.current, isValidateAllFieldCriteria)) || {};\r\n const isValid = isEmptyObject(errors);\r\n formStateRef.current.isValid !== isValid &&\r\n updateFormState({\r\n isValid,\r\n });\r\n }, [isValidateAllFieldCriteria]);\r\n const removeFieldEventListener = useCallback((field, forceDelete) => {\r\n findRemovedFieldAndRemoveListener(fieldsRef, handleChangeRef.current, field, shallowFieldsStateRef, shouldUnregister, forceDelete);\r\n if (shouldUnregister) {\r\n unset(validFieldsRef.current, field.ref.name);\r\n unset(fieldsWithValidationRef.current, field.ref.name);\r\n }\r\n }, [shouldUnregister]);\r\n const updateWatchedValue = useCallback((name) => {\r\n if (isWatchAllRef.current) {\r\n updateFormState();\r\n }\r\n else {\r\n for (const watchField of watchFieldsRef.current) {\r\n if (watchField.startsWith(name)) {\r\n updateFormState();\r\n break;\r\n }\r\n }\r\n renderWatchedInputs(name);\r\n }\r\n }, []);\r\n const removeFieldEventListenerAndRef = useCallback((field, forceDelete) => {\r\n if (field) {\r\n removeFieldEventListener(field, forceDelete);\r\n if (shouldUnregister && !compact(field.options || []).length) {\r\n unset(formStateRef.current.errors, field.ref.name);\r\n set(formStateRef.current.dirtyFields, field.ref.name, true);\r\n updateFormState({\r\n isDirty: isFormDirty(),\r\n });\r\n readFormStateRef.current.isValid &&\r\n resolverRef.current &&\r\n validateResolver();\r\n updateWatchedValue(field.ref.name);\r\n }\r\n }\r\n }, [validateResolver, removeFieldEventListener]);\r\n function clearErrors(name) {\r\n name &&\r\n (Array.isArray(name) ? name : [name]).forEach((inputName) => fieldsRef.current[inputName] && isKey(inputName)\r\n ? delete formStateRef.current.errors[inputName]\r\n : unset(formStateRef.current.errors, inputName));\r\n updateFormState({\r\n errors: name ? formStateRef.current.errors : {},\r\n });\r\n }\r\n function setError(name, error) {\r\n const ref = (fieldsRef.current[name] || {}).ref;\r\n set(formStateRef.current.errors, name, Object.assign(Object.assign({}, error), { ref }));\r\n updateFormState({\r\n isValid: false,\r\n });\r\n error.shouldFocus && ref && ref.focus && ref.focus();\r\n }\r\n const watchInternal = useCallback((fieldNames, defaultValue, watchId) => {\r\n const watchFields = watchId\r\n ? useWatchFieldsRef.current[watchId]\r\n : watchFieldsRef.current;\r\n let fieldValues = getFieldsValues(fieldsRef, cloneObject(shallowFieldsStateRef.current), shouldUnregister, false, fieldNames);\r\n if (isString(fieldNames)) {\r\n const parentNodeName = getFieldArrayParentName(fieldNames) || fieldNames;\r\n if (fieldArrayNamesRef.current.has(parentNodeName)) {\r\n fieldValues = Object.assign(Object.assign({}, fieldArrayValuesRef.current), fieldValues);\r\n }\r\n return assignWatchFields(fieldValues, fieldNames, watchFields, isUndefined(get(defaultValuesRef.current, fieldNames))\r\n ? defaultValue\r\n : get(defaultValuesRef.current, fieldNames), true);\r\n }\r\n const combinedDefaultValues = isUndefined(defaultValue)\r\n ? defaultValuesRef.current\r\n : defaultValue;\r\n if (Array.isArray(fieldNames)) {\r\n return fieldNames.reduce((previous, name) => (Object.assign(Object.assign({}, previous), { [name]: assignWatchFields(fieldValues, name, watchFields, combinedDefaultValues) })), {});\r\n }\r\n isWatchAllRef.current = isUndefined(watchId);\r\n return transformToNestObject((!isEmptyObject(fieldValues) && fieldValues) ||\r\n combinedDefaultValues);\r\n }, []);\r\n function watch(fieldNames, defaultValue) {\r\n return watchInternal(fieldNames, defaultValue);\r\n }\r\n function unregister(name) {\r\n for (const fieldName of Array.isArray(name) ? name : [name]) {\r\n removeFieldEventListenerAndRef(fieldsRef.current[fieldName], true);\r\n }\r\n }\r\n function registerFieldRef(ref, options = {}) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (!ref.name) {\r\n return console.warn('📋 Field is missing `name` attribute', ref, `https://react-hook-form.com/api#useForm`);\r\n }\r\n if (fieldArrayNamesRef.current.has(ref.name.split(/\\[\\d+\\]$/)[0]) &&\r\n !RegExp(`^${ref.name.split(/\\[\\d+\\]$/)[0]}[\\\\d+].\\\\w+`\r\n .replace(/\\[/g, '\\\\[')\r\n .replace(/\\]/g, '\\\\]')).test(ref.name)) {\r\n return console.warn('📋 `name` prop should be in object shape: name=\"test[index].name\"', ref, 'https://react-hook-form.com/api#useFieldArray');\r\n }\r\n }\r\n const { name, type, value } = ref;\r\n const fieldRefAndValidationOptions = Object.assign({ ref }, options);\r\n const fields = fieldsRef.current;\r\n const isRadioOrCheckbox = isRadioOrCheckboxFunction(ref);\r\n const isFieldArray = isNameInFieldArray(fieldArrayNamesRef.current, name);\r\n const compareRef = (currentRef) => isWeb && (!isHTMLElement(ref) || currentRef === ref);\r\n let field = fields[name];\r\n let isEmptyDefaultValue = true;\r\n let defaultValue;\r\n if (field &&\r\n (isRadioOrCheckbox\r\n ? Array.isArray(field.options) &&\r\n compact(field.options).find((option) => {\r\n return value === option.ref.value && compareRef(option.ref);\r\n })\r\n : compareRef(field.ref))) {\r\n fields[name] = Object.assign(Object.assign({}, field), options);\r\n return;\r\n }\r\n if (type) {\r\n field = isRadioOrCheckbox\r\n ? Object.assign({ options: [\r\n ...compact((field && field.options) || []),\r\n {\r\n ref,\r\n },\r\n ], ref: { type, name } }, options) : Object.assign({}, fieldRefAndValidationOptions);\r\n }\r\n else {\r\n field = fieldRefAndValidationOptions;\r\n }\r\n fields[name] = field;\r\n const isEmptyUnmountFields = isUndefined(get(shallowFieldsStateRef.current, name));\r\n if (!isEmptyObject(defaultValuesRef.current) || !isEmptyUnmountFields) {\r\n defaultValue = get(isEmptyUnmountFields\r\n ? defaultValuesRef.current\r\n : shallowFieldsStateRef.current, name);\r\n isEmptyDefaultValue = isUndefined(defaultValue);\r\n if (!isEmptyDefaultValue && !isFieldArray) {\r\n setFieldValue(name, defaultValue);\r\n }\r\n }\r\n if (!isEmptyObject(options)) {\r\n set(fieldsWithValidationRef.current, name, true);\r\n if (!isOnSubmit && readFormStateRef.current.isValid) {\r\n validateField(fieldsRef, isValidateAllFieldCriteria, field, shallowFieldsStateRef).then((error) => {\r\n const previousFormIsValid = formStateRef.current.isValid;\r\n isEmptyObject(error)\r\n ? set(validFieldsRef.current, name, true)\r\n : unset(validFieldsRef.current, name);\r\n previousFormIsValid !== isEmptyObject(error) && updateFormState();\r\n });\r\n }\r\n }\r\n if (shouldUnregister && !(isFieldArray && isEmptyDefaultValue)) {\r\n !isFieldArray && unset(formStateRef.current.dirtyFields, name);\r\n }\r\n if (type) {\r\n attachEventListeners(isRadioOrCheckbox && field.options\r\n ? field.options[field.options.length - 1]\r\n : field, isRadioOrCheckbox || isSelectInput(ref), handleChangeRef.current);\r\n }\r\n }\r\n function register(refOrRegisterOptions, options) {\r\n if (!isWindowUndefined) {\r\n if (isString(refOrRegisterOptions)) {\r\n registerFieldRef({ name: refOrRegisterOptions }, options);\r\n }\r\n else if (isObject(refOrRegisterOptions) &&\r\n 'name' in refOrRegisterOptions) {\r\n registerFieldRef(refOrRegisterOptions, options);\r\n }\r\n else {\r\n return (ref) => ref && registerFieldRef(ref, refOrRegisterOptions);\r\n }\r\n }\r\n }\r\n const handleSubmit = useCallback((onValid, onInvalid) => async (e) => {\r\n if (e && e.preventDefault) {\r\n e.preventDefault();\r\n e.persist();\r\n }\r\n let fieldErrors = {};\r\n let fieldValues = setFieldArrayDefaultValues(getFieldsValues(fieldsRef, cloneObject(shallowFieldsStateRef.current), shouldUnregister, true));\r\n readFormStateRef.current.isSubmitting &&\r\n updateFormState({\r\n isSubmitting: true,\r\n });\r\n try {\r\n if (resolverRef.current) {\r\n const { errors, values } = await resolverRef.current(fieldValues, contextRef.current, isValidateAllFieldCriteria);\r\n formStateRef.current.errors = fieldErrors = errors;\r\n fieldValues = values;\r\n }\r\n else {\r\n for (const field of Object.values(fieldsRef.current)) {\r\n if (field) {\r\n const { name } = field.ref;\r\n const fieldError = await validateField(fieldsRef, isValidateAllFieldCriteria, field, shallowFieldsStateRef);\r\n if (fieldError[name]) {\r\n set(fieldErrors, name, fieldError[name]);\r\n unset(validFieldsRef.current, name);\r\n }\r\n else if (get(fieldsWithValidationRef.current, name)) {\r\n unset(formStateRef.current.errors, name);\r\n set(validFieldsRef.current, name, true);\r\n }\r\n }\r\n }\r\n }\r\n if (isEmptyObject(fieldErrors) &&\r\n Object.keys(formStateRef.current.errors).every((name) => name in fieldsRef.current)) {\r\n updateFormState({\r\n errors: {},\r\n isSubmitting: true,\r\n });\r\n await onValid(fieldValues, e);\r\n }\r\n else {\r\n formStateRef.current.errors = Object.assign(Object.assign({}, formStateRef.current.errors), fieldErrors);\r\n onInvalid && (await onInvalid(formStateRef.current.errors, e));\r\n shouldFocusError &&\r\n focusOnErrorField(fieldsRef.current, formStateRef.current.errors);\r\n }\r\n }\r\n finally {\r\n formStateRef.current.isSubmitting = false;\r\n updateFormState({\r\n isSubmitted: true,\r\n isSubmitting: false,\r\n isSubmitSuccessful: isEmptyObject(formStateRef.current.errors),\r\n submitCount: formStateRef.current.submitCount + 1,\r\n });\r\n }\r\n }, [shouldFocusError, isValidateAllFieldCriteria]);\r\n const resetRefs = ({ errors, isDirty, isSubmitted, touched, isValid, submitCount, dirtyFields, }) => {\r\n if (!isValid) {\r\n validFieldsRef.current = {};\r\n fieldsWithValidationRef.current = {};\r\n }\r\n fieldArrayDefaultValuesRef.current = {};\r\n watchFieldsRef.current = new Set();\r\n isWatchAllRef.current = false;\r\n updateFormState({\r\n submitCount: submitCount ? formStateRef.current.submitCount : 0,\r\n isDirty: isDirty ? formStateRef.current.isDirty : false,\r\n isSubmitted: isSubmitted ? formStateRef.current.isSubmitted : false,\r\n isValid: isValid ? formStateRef.current.isValid : false,\r\n dirtyFields: dirtyFields ? formStateRef.current.dirtyFields : {},\r\n touched: touched ? formStateRef.current.touched : {},\r\n errors: errors ? formStateRef.current.errors : {},\r\n isSubmitting: false,\r\n isSubmitSuccessful: false,\r\n });\r\n };\r\n const reset = (values, omitResetState = {}) => {\r\n if (isWeb) {\r\n for (const field of Object.values(fieldsRef.current)) {\r\n if (field) {\r\n const { ref, options } = field;\r\n const inputRef = isRadioOrCheckboxFunction(ref) && Array.isArray(options)\r\n ? options[0].ref\r\n : ref;\r\n if (isHTMLElement(inputRef)) {\r\n try {\r\n inputRef.closest('form').reset();\r\n break;\r\n }\r\n catch (_a) { }\r\n }\r\n }\r\n }\r\n }\r\n fieldsRef.current = {};\r\n defaultValuesRef.current = Object.assign({}, (values || defaultValuesRef.current));\r\n values && renderWatchedInputs('');\r\n Object.values(resetFieldArrayFunctionRef.current).forEach((resetFieldArray) => isFunction(resetFieldArray) && resetFieldArray());\r\n shallowFieldsStateRef.current = shouldUnregister\r\n ? {}\r\n : cloneObject(values || defaultValuesRef.current);\r\n resetRefs(omitResetState);\r\n };\r\n useEffect(() => {\r\n resolver && readFormStateRef.current.isValid && validateResolver();\r\n observerRef.current =\r\n observerRef.current || !isWeb\r\n ? observerRef.current\r\n : onDomRemove(fieldsRef, removeFieldEventListenerAndRef);\r\n }, [removeFieldEventListenerAndRef, defaultValuesRef.current]);\r\n useEffect(() => () => {\r\n observerRef.current && observerRef.current.disconnect();\r\n isUnMount.current = true;\r\n if (process.env.NODE_ENV !== 'production') {\r\n return;\r\n }\r\n Object.values(fieldsRef.current).forEach((field) => removeFieldEventListenerAndRef(field, true));\r\n }, []);\r\n if (!resolver && readFormStateRef.current.isValid) {\r\n formState.isValid =\r\n deepEqual(validFieldsRef.current, fieldsWithValidationRef.current) &&\r\n isEmptyObject(formStateRef.current.errors);\r\n }\r\n const commonProps = {\r\n trigger,\r\n setValue: useCallback(setValue, [setInternalValue, trigger]),\r\n getValues: useCallback(getValues, []),\r\n register: useCallback(register, [defaultValuesRef.current]),\r\n unregister: useCallback(unregister, []),\r\n formState: isProxyEnabled\r\n ? new Proxy(formState, {\r\n get: (obj, prop) => {\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (prop === 'isValid' && isOnSubmit) {\r\n console.warn('📋 `formState.isValid` is applicable with `onTouched`, `onChange` or `onBlur` mode. https://react-hook-form.com/api#formState');\r\n }\r\n }\r\n if (prop in obj) {\r\n readFormStateRef.current[prop] = true;\r\n return obj[prop];\r\n }\r\n return undefined;\r\n },\r\n })\r\n : formState,\r\n };\r\n const control = useMemo(() => (Object.assign({ isFormDirty,\r\n updateWatchedValue,\r\n shouldUnregister,\r\n updateFormState,\r\n removeFieldEventListener,\r\n watchInternal, mode: modeRef.current, reValidateMode: {\r\n isReValidateOnBlur,\r\n isReValidateOnChange,\r\n }, validateResolver: resolver ? validateResolver : undefined, fieldsRef,\r\n resetFieldArrayFunctionRef,\r\n useWatchFieldsRef,\r\n useWatchRenderFunctionsRef,\r\n fieldArrayDefaultValuesRef,\r\n validFieldsRef,\r\n fieldsWithValidationRef,\r\n fieldArrayNamesRef,\r\n readFormStateRef,\r\n formStateRef,\r\n defaultValuesRef,\r\n shallowFieldsStateRef,\r\n fieldArrayValuesRef }, commonProps)), [\r\n defaultValuesRef.current,\r\n updateWatchedValue,\r\n shouldUnregister,\r\n removeFieldEventListener,\r\n watchInternal,\r\n ]);\r\n return Object.assign({ watch,\r\n control,\r\n handleSubmit, reset: useCallback(reset, []), clearErrors: useCallback(clearErrors, []), setError: useCallback(setError, []), errors: formState.errors }, commonProps);\r\n}\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\n\nconst FormContext = createContext(null);\r\nFormContext.displayName = 'RHFContext';\r\nconst useFormContext = () => useContext(FormContext);\r\nconst FormProvider = (_a) => {\r\n var { children } = _a, props = __rest(_a, [\"children\"]);\r\n return (createElement(FormContext.Provider, { value: Object.assign({}, props) }, children));\r\n};\n\nvar generateId = () => {\r\n const d = typeof performance === UNDEFINED ? Date.now() : performance.now() * 1000;\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\r\n const r = (Math.random() * 16 + d) % 16 | 0;\r\n return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);\r\n });\r\n};\n\nfunction removeAtIndexes(data, indexes) {\r\n let i = 0;\r\n const temp = [...data];\r\n for (const index of indexes) {\r\n temp.splice(index - i, 1);\r\n i++;\r\n }\r\n return compact(temp).length ? temp : [];\r\n}\r\nvar removeArrayAt = (data, index) => isUndefined(index)\r\n ? []\r\n : removeAtIndexes(data, (Array.isArray(index) ? index : [index]).sort((a, b) => a - b));\n\nvar moveArrayAt = (data, from, to) => {\r\n if (Array.isArray(data)) {\r\n if (isUndefined(data[to])) {\r\n data[to] = undefined;\r\n }\r\n data.splice(to, 0, data.splice(from, 1)[0]);\r\n return data;\r\n }\r\n return [];\r\n};\n\nvar swapArrayAt = (data, indexA, indexB) => {\r\n const temp = [data[indexB], data[indexA]];\r\n data[indexA] = temp[0];\r\n data[indexB] = temp[1];\r\n};\n\nfunction prepend(data, value) {\r\n return [...(Array.isArray(value) ? value : [value || undefined]), ...data];\r\n}\n\nfunction insert(data, index, value) {\r\n return [\r\n ...data.slice(0, index),\r\n ...(Array.isArray(value) ? value : [value || undefined]),\r\n ...data.slice(index),\r\n ];\r\n}\n\nvar fillEmptyArray = (value) => Array.isArray(value) ? Array(value.length).fill(undefined) : undefined;\n\nvar fillBooleanArray = (value) => (Array.isArray(value) ? value : [value]).map((data) => {\r\n if (isObject(data)) {\r\n const object = {};\r\n for (const key in data) {\r\n object[key] = true;\r\n }\r\n return object;\r\n }\r\n return true;\r\n});\n\nconst mapIds = (values = [], keyName, skipWarn) => {\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (!skipWarn) {\r\n for (const value of values) {\r\n if (typeof value === 'object') {\r\n if (keyName in value) {\r\n console.warn(`📋 useFieldArray fieldValues contain the keyName \\`${keyName}\\` which is reserved for use by useFieldArray. https://react-hook-form.com/api#useFieldArray`);\r\n break;\r\n }\r\n }\r\n else {\r\n console.warn(`📋 useFieldArray input's name should be in object shape instead of flat array. https://react-hook-form.com/api#useFieldArray`);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return values.map((value) => (Object.assign({ [keyName]: value[keyName] || generateId() }, value)));\r\n};\r\nconst useFieldArray = ({ control, name, keyName = 'id', }) => {\r\n const methods = useFormContext();\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (!control && !methods) {\r\n throw new Error('📋 useFieldArray is missing `control` prop. https://react-hook-form.com/api#useFieldArray');\r\n }\r\n }\r\n const focusIndexRef = useRef(-1);\r\n const isUnMount = useRef(false);\r\n const { isFormDirty, updateWatchedValue, resetFieldArrayFunctionRef, fieldArrayNamesRef, fieldsRef, defaultValuesRef, removeFieldEventListener, formStateRef, shallowFieldsStateRef, updateFormState, readFormStateRef, validFieldsRef, fieldsWithValidationRef, fieldArrayDefaultValuesRef, validateResolver, getValues, shouldUnregister, fieldArrayValuesRef, } = control || methods.control;\r\n const getDefaultValues = (values) => get(shouldUnregister ? values : shallowFieldsStateRef.current, name, []);\r\n const fieldArrayParentName = getFieldArrayParentName(name);\r\n const memoizedDefaultValues = useRef([\r\n ...(get(fieldArrayDefaultValuesRef.current, fieldArrayParentName)\r\n ? getDefaultValues(fieldArrayDefaultValuesRef.current)\r\n : getDefaultValues(defaultValuesRef.current)),\r\n ]);\r\n const [fields, setFields] = useState(mapIds(memoizedDefaultValues.current, keyName));\r\n set(fieldArrayValuesRef.current, name, compact(fields));\r\n const omitKey = (fields) => fields.map((_a = {}) => {\r\n var _b = keyName, omitted = _a[_b], rest = __rest(_a, [typeof _b === \"symbol\" ? _b : _b + \"\"]);\r\n return rest;\r\n });\r\n fieldArrayNamesRef.current.add(name);\r\n const getFieldArrayValue = useCallback(() => get(fieldArrayValuesRef.current, name, []), [name]);\r\n const getCurrentFieldsValues = () => mapIds(get(getValues(), name, getFieldArrayValue()).map((item, index) => (Object.assign(Object.assign({}, getFieldArrayValue()[index]), item))), keyName, true);\r\n fieldArrayNamesRef.current.add(name);\r\n if (fieldArrayParentName &&\r\n !get(fieldArrayDefaultValuesRef.current, fieldArrayParentName)) {\r\n set(fieldArrayDefaultValuesRef.current, fieldArrayParentName, cloneObject(get(defaultValuesRef.current, fieldArrayParentName)));\r\n }\r\n const setFieldAndValidState = (fieldsValues) => {\r\n setFields(fieldsValues);\r\n set(fieldArrayValuesRef.current, name, fieldsValues);\r\n if (readFormStateRef.current.isValid && validateResolver) {\r\n const values = getValues();\r\n set(values, name, fieldsValues);\r\n validateResolver(values);\r\n }\r\n };\r\n const resetFields = () => {\r\n for (const key in fieldsRef.current) {\r\n if (isMatchFieldArrayName(key, name)) {\r\n removeFieldEventListener(fieldsRef.current[key], true);\r\n delete fieldsRef.current[key];\r\n }\r\n }\r\n };\r\n const cleanup = (ref) => !compact(get(ref, name, [])).length && unset(ref, name);\r\n const updateDirtyFieldsWithDefaultValues = (updatedFieldArrayValues) => {\r\n if (updatedFieldArrayValues) {\r\n set(formStateRef.current.dirtyFields, name, setFieldArrayDirtyFields(omitKey(updatedFieldArrayValues), get(defaultValuesRef.current, name, []), get(formStateRef.current.dirtyFields, name, [])));\r\n }\r\n };\r\n const batchStateUpdate = (method, args, updatedFieldValues, updatedFormValues = [], shouldSet = true, shouldUpdateValid = false) => {\r\n if (get(shallowFieldsStateRef.current, name)) {\r\n const output = method(get(shallowFieldsStateRef.current, name), args.argA, args.argB);\r\n shouldSet && set(shallowFieldsStateRef.current, name, output);\r\n }\r\n if (get(fieldArrayDefaultValuesRef.current, name)) {\r\n const output = method(get(fieldArrayDefaultValuesRef.current, name), args.argA, args.argB);\r\n shouldSet && set(fieldArrayDefaultValuesRef.current, name, output);\r\n }\r\n if (Array.isArray(get(formStateRef.current.errors, name))) {\r\n const output = method(get(formStateRef.current.errors, name), args.argA, args.argB);\r\n shouldSet && set(formStateRef.current.errors, name, output);\r\n cleanup(formStateRef.current.errors);\r\n }\r\n if (readFormStateRef.current.touched &&\r\n get(formStateRef.current.touched, name)) {\r\n const output = method(get(formStateRef.current.touched, name), args.argA, args.argB);\r\n shouldSet && set(formStateRef.current.touched, name, output);\r\n cleanup(formStateRef.current.touched);\r\n }\r\n if (readFormStateRef.current.dirtyFields ||\r\n readFormStateRef.current.isDirty) {\r\n set(formStateRef.current.dirtyFields, name, setFieldArrayDirtyFields(omitKey(updatedFormValues), get(defaultValuesRef.current, name, []), get(formStateRef.current.dirtyFields, name, [])));\r\n updateDirtyFieldsWithDefaultValues(updatedFieldValues);\r\n cleanup(formStateRef.current.dirtyFields);\r\n }\r\n if (shouldUpdateValid &&\r\n readFormStateRef.current.isValid &&\r\n !validateResolver) {\r\n set(validFieldsRef.current, name, method(get(validFieldsRef.current, name, []), args.argA));\r\n cleanup(validFieldsRef.current);\r\n set(fieldsWithValidationRef.current, name, method(get(fieldsWithValidationRef.current, name, []), args.argA));\r\n cleanup(fieldsWithValidationRef.current);\r\n }\r\n if (!isUnMount.current && readFormStateRef.current.isDirty) {\r\n updateFormState({\r\n isDirty: isFormDirty(name, omitKey(updatedFormValues)),\r\n });\r\n }\r\n };\r\n const append = (value, shouldFocus = true) => {\r\n const appendValue = Array.isArray(value) ? value : [value];\r\n const updateFormValues = [\r\n ...getCurrentFieldsValues(),\r\n ...mapIds(appendValue, keyName),\r\n ];\r\n setFieldAndValidState(updateFormValues);\r\n if (readFormStateRef.current.dirtyFields ||\r\n readFormStateRef.current.isDirty) {\r\n updateDirtyFieldsWithDefaultValues(updateFormValues);\r\n updateFormState({\r\n isDirty: true,\r\n dirtyFields: formStateRef.current.dirtyFields,\r\n });\r\n }\r\n !shouldUnregister &&\r\n set(shallowFieldsStateRef.current, name, [\r\n ...(get(shallowFieldsStateRef.current, name) || []),\r\n ...cloneObject(appendValue),\r\n ]);\r\n focusIndexRef.current = shouldFocus\r\n ? get(fieldArrayValuesRef.current, name).length - 1\r\n : -1;\r\n };\r\n const prepend$1 = (value, shouldFocus = true) => {\r\n const emptyArray = fillEmptyArray(value);\r\n const updatedFieldArrayValues = prepend(getCurrentFieldsValues(), mapIds(Array.isArray(value) ? value : [value], keyName));\r\n setFieldAndValidState(updatedFieldArrayValues);\r\n resetFields();\r\n batchStateUpdate(prepend, {\r\n argA: emptyArray,\r\n argC: fillBooleanArray(value),\r\n }, updatedFieldArrayValues);\r\n focusIndexRef.current = shouldFocus ? 0 : -1;\r\n };\r\n const remove = (index) => {\r\n const fieldValues = getCurrentFieldsValues();\r\n const updatedFieldValues = removeArrayAt(fieldValues, index);\r\n setFieldAndValidState(updatedFieldValues);\r\n resetFields();\r\n batchStateUpdate(removeArrayAt, {\r\n argA: index,\r\n argC: index,\r\n }, updatedFieldValues, removeArrayAt(fieldValues, index), true, true);\r\n };\r\n const insert$1 = (index, value, shouldFocus = true) => {\r\n const emptyArray = fillEmptyArray(value);\r\n const fieldValues = getCurrentFieldsValues();\r\n const updatedFieldArrayValues = insert(fieldValues, index, mapIds(Array.isArray(value) ? value : [value], keyName));\r\n setFieldAndValidState(updatedFieldArrayValues);\r\n resetFields();\r\n batchStateUpdate(insert, {\r\n argA: index,\r\n argB: emptyArray,\r\n argC: index,\r\n argD: fillBooleanArray(value),\r\n }, updatedFieldArrayValues, insert(fieldValues, index));\r\n focusIndexRef.current = shouldFocus ? index : -1;\r\n };\r\n const swap = (indexA, indexB) => {\r\n const fieldValues = getCurrentFieldsValues();\r\n swapArrayAt(fieldValues, indexA, indexB);\r\n resetFields();\r\n setFieldAndValidState([...fieldValues]);\r\n batchStateUpdate(swapArrayAt, {\r\n argA: indexA,\r\n argB: indexB,\r\n argC: indexA,\r\n argD: indexB,\r\n }, undefined, fieldValues, false);\r\n };\r\n const move = (from, to) => {\r\n const fieldValues = getCurrentFieldsValues();\r\n moveArrayAt(fieldValues, from, to);\r\n resetFields();\r\n setFieldAndValidState([...fieldValues]);\r\n batchStateUpdate(moveArrayAt, {\r\n argA: from,\r\n argB: to,\r\n argC: from,\r\n argD: to,\r\n }, undefined, fieldValues, false);\r\n };\r\n useEffect(() => {\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (!name) {\r\n console.warn('📋 useFieldArray is missing `name` attribute. https://react-hook-form.com/api#useFieldArray');\r\n }\r\n }\r\n const defaultValues = get(fieldArrayDefaultValuesRef.current, name);\r\n if (defaultValues && fields.length < defaultValues.length) {\r\n set(fieldArrayDefaultValuesRef.current, name, defaultValues.slice(1));\r\n }\r\n updateWatchedValue(name);\r\n if (focusIndexRef.current > -1) {\r\n for (const key in fieldsRef.current) {\r\n const field = fieldsRef.current[key];\r\n if (key.startsWith(`${name}[${focusIndexRef.current}]`) &&\r\n field.ref.focus) {\r\n field.ref.focus();\r\n break;\r\n }\r\n }\r\n }\r\n focusIndexRef.current = -1;\r\n }, [fields, name]);\r\n useEffect(() => {\r\n const resetFunctions = resetFieldArrayFunctionRef.current;\r\n const fieldArrayNames = fieldArrayNamesRef.current;\r\n if (!getFieldArrayParentName(name)) {\r\n resetFunctions[name] = (data) => {\r\n resetFields();\r\n !data && unset(fieldArrayDefaultValuesRef.current, name);\r\n unset(shallowFieldsStateRef.current, name);\r\n memoizedDefaultValues.current = get(data || defaultValuesRef.current, name);\r\n if (!isUnMount.current) {\r\n setFields(mapIds(memoizedDefaultValues.current, keyName));\r\n }\r\n };\r\n }\r\n return () => {\r\n isUnMount.current = true;\r\n shouldUnregister && remove();\r\n resetFields();\r\n delete resetFunctions[name];\r\n unset(fieldArrayValuesRef.current, name);\r\n fieldArrayNames.delete(name);\r\n };\r\n }, []);\r\n return {\r\n swap: useCallback(swap, [name]),\r\n move: useCallback(move, [name]),\r\n prepend: useCallback(prepend$1, [name]),\r\n append: useCallback(append, [name]),\r\n remove: useCallback(remove, [name]),\r\n insert: useCallback(insert$1, [name]),\r\n fields: compact(fields),\r\n };\r\n};\n\nvar getInputValue = (event) => isPrimitive(event) ||\r\n !isObject(event.target) ||\r\n (isObject(event.target) && !event.type)\r\n ? event\r\n : isUndefined(event.target.value)\r\n ? event.target.checked\r\n : event.target.value;\n\nfunction useController({ name, rules, defaultValue, control, onFocus, }) {\r\n const methods = useFormContext();\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (!control && !methods) {\r\n throw new Error('📋 Controller is missing `control` prop. https://react-hook-form.com/api#Controller');\r\n }\r\n }\r\n const { defaultValuesRef, setValue, register, unregister, trigger, mode, reValidateMode: { isReValidateOnBlur, isReValidateOnChange }, formState, formStateRef: { current: { isSubmitted, touched, errors }, }, updateFormState, readFormStateRef, fieldsRef, fieldArrayNamesRef, shallowFieldsStateRef, } = control || methods.control;\r\n const isNotFieldArray = !isNameInFieldArray(fieldArrayNamesRef.current, name);\r\n const getInitialValue = () => !isUndefined(get(shallowFieldsStateRef.current, name)) && isNotFieldArray\r\n ? get(shallowFieldsStateRef.current, name)\r\n : isUndefined(defaultValue)\r\n ? get(defaultValuesRef.current, name)\r\n : defaultValue;\r\n const [value, setInputStateValue] = useState(getInitialValue());\r\n const valueRef = useRef(value);\r\n const ref = useRef({\r\n focus: () => null,\r\n });\r\n const onFocusRef = useRef(onFocus ||\r\n (() => {\r\n if (isFunction(ref.current.focus)) {\r\n ref.current.focus();\r\n }\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (!isFunction(ref.current.focus)) {\r\n console.warn(`📋 'ref' from Controller render prop must be attached to a React component or a DOM Element whose ref provides a 'focus()' method`);\r\n }\r\n }\r\n }));\r\n const shouldValidate = useCallback((isBlurEvent) => !skipValidation(Object.assign({ isBlurEvent,\r\n isReValidateOnBlur,\r\n isReValidateOnChange,\r\n isSubmitted, isTouched: !!get(touched, name) }, mode)), [\r\n isReValidateOnBlur,\r\n isReValidateOnChange,\r\n isSubmitted,\r\n touched,\r\n name,\r\n mode,\r\n ]);\r\n const commonTask = useCallback(([event]) => {\r\n const data = getInputValue(event);\r\n setInputStateValue(data);\r\n valueRef.current = data;\r\n return data;\r\n }, []);\r\n const registerField = useCallback((shouldUpdateValue) => {\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (!name) {\r\n return console.warn('📋 Field is missing `name` prop. https://react-hook-form.com/api#Controller');\r\n }\r\n }\r\n if (fieldsRef.current[name]) {\r\n fieldsRef.current[name] = Object.assign({ ref: fieldsRef.current[name].ref }, rules);\r\n }\r\n else {\r\n register(Object.defineProperties({\r\n name,\r\n focus: onFocusRef.current,\r\n }, {\r\n value: {\r\n set(data) {\r\n setInputStateValue(data);\r\n valueRef.current = data;\r\n },\r\n get() {\r\n return valueRef.current;\r\n },\r\n },\r\n }), rules);\r\n shouldUpdateValue = isUndefined(get(defaultValuesRef.current, name));\r\n }\r\n shouldUpdateValue &&\r\n isNotFieldArray &&\r\n setInputStateValue(getInitialValue());\r\n }, [rules, name, register]);\r\n useEffect(() => () => unregister(name), [name]);\r\n useEffect(() => {\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (isUndefined(value)) {\r\n console.warn(`📋 ${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)`);\r\n }\r\n if (!isNotFieldArray && isUndefined(defaultValue)) {\r\n console.warn('📋 Controller is missing `defaultValue` prop when using `useFieldArray`. https://react-hook-form.com/api#Controller');\r\n }\r\n }\r\n registerField();\r\n }, [registerField]);\r\n useEffect(() => {\r\n !fieldsRef.current[name] && registerField(true);\r\n });\r\n const onBlur = useCallback(() => {\r\n if (readFormStateRef.current.touched && !get(touched, name)) {\r\n set(touched, name, true);\r\n updateFormState({\r\n touched,\r\n });\r\n }\r\n shouldValidate(true) && trigger(name);\r\n }, [name, updateFormState, shouldValidate, trigger, readFormStateRef]);\r\n const onChange = useCallback((...event) => setValue(name, commonTask(event), {\r\n shouldValidate: shouldValidate(),\r\n shouldDirty: true,\r\n }), [setValue, name, shouldValidate]);\r\n return {\r\n field: {\r\n onChange,\r\n onBlur,\r\n name,\r\n value,\r\n ref,\r\n },\r\n meta: Object.defineProperties({\r\n invalid: !!get(errors, name),\r\n }, {\r\n isDirty: {\r\n get() {\r\n return !!get(formState.dirtyFields, name);\r\n },\r\n },\r\n isTouched: {\r\n get() {\r\n return !!get(formState.touched, name);\r\n },\r\n },\r\n }),\r\n };\r\n}\n\nfunction useWatch({ control, name, defaultValue, }) {\r\n const methods = useFormContext();\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (!control && !methods) {\r\n throw new Error('📋 useWatch is missing `control` prop. https://react-hook-form.com/api#useWatch');\r\n }\r\n }\r\n const { useWatchFieldsRef, useWatchRenderFunctionsRef, watchInternal, defaultValuesRef, } = control || methods.control;\r\n const updateValue = useState()[1];\r\n const idRef = useRef();\r\n const defaultValueRef = useRef(defaultValue);\r\n useEffect(() => {\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (name === '') {\r\n console.warn('📋 useWatch is missing `name` attribute. https://react-hook-form.com/api#useWatch');\r\n }\r\n }\r\n const id = (idRef.current = generateId());\r\n const watchFieldsHookRender = useWatchRenderFunctionsRef.current;\r\n const watchFieldsHook = useWatchFieldsRef.current;\r\n watchFieldsHook[id] = new Set();\r\n watchFieldsHookRender[id] = () => updateValue({});\r\n watchInternal(name, defaultValueRef.current, id);\r\n return () => {\r\n delete watchFieldsHook[id];\r\n delete watchFieldsHookRender[id];\r\n };\r\n }, [\r\n name,\r\n useWatchRenderFunctionsRef,\r\n useWatchFieldsRef,\r\n watchInternal,\r\n defaultValueRef,\r\n ]);\r\n return idRef.current\r\n ? watchInternal(name, defaultValueRef.current, idRef.current)\r\n : isUndefined(defaultValue)\r\n ? isString(name)\r\n ? get(defaultValuesRef.current, name)\r\n : Array.isArray(name)\r\n ? name.reduce((previous, inputName) => (Object.assign(Object.assign({}, previous), { [inputName]: get(defaultValuesRef.current, inputName) })), {})\r\n : defaultValuesRef.current\r\n : defaultValue;\r\n}\n\nconst Controller = (props) => {\r\n const { rules, as, render, defaultValue, control, onFocus } = props, rest = __rest(props, [\"rules\", \"as\", \"render\", \"defaultValue\", \"control\", \"onFocus\"]);\r\n const { field, meta } = useController(props);\r\n const componentProps = Object.assign(Object.assign({}, rest), field);\r\n return as\r\n ? isValidElement(as)\r\n ? cloneElement(as, componentProps)\r\n : createElement(as, componentProps)\r\n : render\r\n ? render(field, meta)\r\n : null;\r\n};\n\nexport { Controller, FormProvider, appendErrors, get, transformToNestObject, useController, useFieldArray, useForm, useFormContext, useWatch };\n//# sourceMappingURL=index.esm.js.map\n"],"names":["isHTMLElement","value","HTMLElement","EVENTS","VALIDATION_MODE","INPUT_VALIDATION_RULES","isNullOrUndefined","isObjectType","isObject","Array","isArray","Date","isKey","test","compact","filter","Boolean","stringToPath","input","replace","split","set","object","path","let","index","tempPath","length","lastIndex","const","key","newValue","objValue","isNaN","transformToNestObject","data","isUndefined","val","undefined","get","obj","defaultValue","result","reduce","removeAllEventListeners","ref","validateWithStateUpdate","removeEventListener","defaultReturn","isValid","getRadioValue","options","previous","option","checked","isRadioInput","element","type","isFileInput","isCheckBoxInput","isMultipleSelect","defaultResult","validResult","getCheckboxValue","values","map","attributes","getFieldValue","fieldsRef","name","shallowFieldsStateRef","excludeDisabled","shouldKeepRawValue","field","current","disabled","files","valueAsNumber","NaN","valueAsDate","setValueAs","isDetached","nodeType","Node","DOCUMENT_NODE","parentNode","isEmptyObject","Object","keys","isBoolean","unset","previousObjRef","updatePath","childObject","slice","baseGet","k","objectRef","currentPaths","currentPathsLength","item","isSameRef","fieldValue","isPrimitive","deepMerge","target","source","targetValue","sourceValue","_a","deepEqual","object1","object2","isErrorObject","isValidElement","keys1","keys2","val1","val2","setDirtyFields","defaultValues","dirtyFields","parentName","assign","isString","getFieldsValues","shallowFieldsState","shouldUnregister","search","output","startsWith","find","isRegex","RegExp","getValueAndMessage","validationData","message","isFunction","isMessage","getValidateError","appendErrors","validateAllFieldCriteria","errors","types","validateField","async","error","isRadio","isCheckBox","isRadioOrCheckbox","isEmpty","appendErrorsCurry","bind","getMinMaxMessage","exceedMax","maxLengthMessage","minLengthMessage","maxType","minType","required","min","max","exceedMin","maxOutput","minOutput","valueDate","valueNumber","parseFloat","maxLength","minLength","maxLengthOutput","minLengthOutput","pattern","patternValue","validate","validateRef","validateError","validationResult","entries","validateFunction","getPath","rootPath","paths","property","rootName","push","assignWatchFields","fieldValues","fieldName","watchFields","inputValue","isSingleField","add","forEach","getFieldArrayParentName","substring","indexOf","isNameInFieldArray","names","some","searchName","isMatchFieldArrayName","isWeb","window","document","cloneObject","copy","File","includes","constructor","getTime","Set","Map","modeChecker","mode","isOnSubmit","isOnBlur","isOnChange","isOnAll","isOnTouch","isRadioOrCheckboxFunction","isWindowUndefined","isProxyEnabled","Proxy","useForm","useRef","fieldArrayDefaultValuesRef","fieldArrayValuesRef","watchFieldsRef","useWatchFieldsRef","useWatchRenderFunctionsRef","fieldsWithValidationRef","validFieldsRef","defaultValuesRef","isUnMount","isWatchAllRef","handleChangeRef","resetFieldArrayFunctionRef","contextRef","context","resolverRef","resolver","fieldArrayNamesRef","modeRef","isValidateAllFieldCriteria","criteriaMode","useState","isDirty","isValidating","isSubmitted","submitCount","touched","isSubmitting","isSubmitSuccessful","readFormStateRef","formStateRef","formState","observerRef","reValidateMode","updateFormState","useCallback","state","setFormState","updateIsValidating","shouldRenderBaseOnError","shouldRender","shouldReRender","previousError","fieldsWithValidation","validFields","isErrorStateChanged","setFieldValue","rawValue","radioRef","selectRef","selected","checkboxRef","isFormDirty","formValues","getValues","updateAndGetDirtyState","isFieldDirty","isDirtyFieldExist","previousIsDirty","isChanged","executeValidation","skipReRender","process","env","NODE_ENV","console","warn","executeSchemaOrResolverValidation","previousFormIsValid","isInputsValid","every","trigger","fields","Promise","all","setInternalValues","shouldDirty","shouldValidate","setInternalValue","config","has","setFieldArrayDirtyFields","isFieldWatched","match","renderWatchedInputs","found","size","setFieldArrayDefaultValues","payload","isBlurEvent","shouldSkipValidation","isTouched","isReValidateOnBlur","isReValidateOnChange","skipValidation","parentNodeName","currentError","validateResolver","newDefaultValues","removeFieldEventListener","forceDelete","handleChange","fieldRef","findRemovedFieldAndRemoveListener","updateWatchedValue","removeFieldEventListenerAndRef","watchInternal","fieldNames","watchId","combinedDefaultValues","registerFieldRef","fieldRefAndValidationOptions","isFieldArray","compareRef","currentRef","isEmptyDefaultValue","isEmptyUnmountFields","then","shouldAttachChangeEvent","addEventListener","attachEventListeners","handleSubmit","onValid","onInvalid","e","preventDefault","persist","fieldErrors","fieldError","shouldFocusError","focus","focusOnErrorField","useEffect","observer","MutationObserver","observe","childList","subtree","onDomRemove","disconnect","commonProps","setValue","register","refOrRegisterOptions","unregister","prop","control","useMemo","reset","omitResetState","inputRef","closest","resetFieldArray","resetRefs","clearErrors","inputName","setError","shouldFocus","createContext","displayName"],"mappings":"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"}