react-hook-form 7.31.2 → 7.32.1

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 (45) hide show
  1. package/README.md +4 -2
  2. package/dist/index.cjs.js +1 -1
  3. package/dist/index.cjs.js.map +1 -1
  4. package/dist/index.esm.mjs +28 -24
  5. package/dist/index.esm.mjs.map +1 -1
  6. package/dist/index.umd.js +1 -1
  7. package/dist/index.umd.js.map +1 -1
  8. package/dist/logic/focusFieldBy.d.ts +2 -2
  9. package/dist/logic/focusFieldBy.d.ts.map +1 -1
  10. package/dist/logic/generateWatchOutput.d.ts +1 -1
  11. package/dist/logic/generateWatchOutput.d.ts.map +1 -1
  12. package/dist/logic/getCheckboxValue.d.ts +1 -1
  13. package/dist/logic/getCheckboxValue.d.ts.map +1 -1
  14. package/dist/logic/getFieldValueAs.d.ts.map +1 -1
  15. package/dist/logic/getProxyFormState.d.ts +2 -2
  16. package/dist/logic/getProxyFormState.d.ts.map +1 -1
  17. package/dist/logic/getRadioValue.d.ts +1 -1
  18. package/dist/logic/getRadioValue.d.ts.map +1 -1
  19. package/dist/logic/getResolverOptions.d.ts +2 -2
  20. package/dist/logic/getResolverOptions.d.ts.map +1 -1
  21. package/dist/logic/getRuleValue.d.ts +1 -1
  22. package/dist/logic/getRuleValue.d.ts.map +1 -1
  23. package/dist/logic/getValueAndMessage.d.ts +1 -1
  24. package/dist/logic/getValueAndMessage.d.ts.map +1 -1
  25. package/dist/logic/isWatched.d.ts +1 -1
  26. package/dist/logic/isWatched.d.ts.map +1 -1
  27. package/dist/logic/shouldRenderFormState.d.ts +1 -1
  28. package/dist/logic/shouldRenderFormState.d.ts.map +1 -1
  29. package/dist/logic/shouldSubscribeByName.d.ts +1 -1
  30. package/dist/logic/shouldSubscribeByName.d.ts.map +1 -1
  31. package/dist/logic/validateField.d.ts +1 -1
  32. package/dist/logic/validateField.d.ts.map +1 -1
  33. package/dist/types/fieldArray.d.ts +5 -5
  34. package/dist/types/fieldArray.d.ts.map +1 -1
  35. package/dist/types/form.d.ts +13 -13
  36. package/dist/types/form.d.ts.map +1 -1
  37. package/dist/types/resolvers.d.ts +1 -1
  38. package/dist/types/resolvers.d.ts.map +1 -1
  39. package/dist/utils/cloneObject.d.ts.map +1 -1
  40. package/dist/utils/getValidationModes.d.ts +2 -1
  41. package/dist/utils/getValidationModes.d.ts.map +1 -1
  42. package/dist/utils/isHTMLElement.d.ts.map +1 -1
  43. package/dist/utils/remove.d.ts +1 -1
  44. package/dist/utils/remove.d.ts.map +1 -1
  45. package/package.json +14 -13
@@ -558,6 +558,10 @@ function append(data, value) {
558
558
  return [...data, ...convertToArrayPayload(value)];
559
559
  }
560
560
 
561
+ var isWeb = typeof window !== 'undefined' &&
562
+ typeof window.HTMLElement !== 'undefined' &&
563
+ typeof document !== 'undefined';
564
+
561
565
  function cloneObject(data) {
562
566
  let copy;
563
567
  const isArray = Array.isArray(data);
@@ -567,16 +571,15 @@ function cloneObject(data) {
567
571
  else if (data instanceof Set) {
568
572
  copy = new Set(data);
569
573
  }
570
- else if (globalThis.Blob && data instanceof Blob) {
571
- copy = data;
572
- }
573
- else if (globalThis.FileList && data instanceof FileList) {
574
- copy = data;
575
- }
576
- else if (isArray || isObject(data)) {
574
+ else if (!(isWeb && (data instanceof Blob || data instanceof FileList)) &&
575
+ (isArray || isObject(data))) {
577
576
  copy = isArray ? [] : {};
578
577
  for (const key in data) {
579
- copy[key] = isFunction(data[key]) ? data[key] : cloneObject(data[key]);
578
+ if (isFunction(data[key])) {
579
+ copy = data;
580
+ break;
581
+ }
582
+ copy[key] = cloneObject(data[key]);
580
583
  }
581
584
  }
582
585
  else {
@@ -939,7 +942,11 @@ var isBoolean = (value) => typeof value === 'boolean';
939
942
 
940
943
  var isFileInput = (element) => element.type === 'file';
941
944
 
942
- var isHTMLElement = (value) => value instanceof HTMLElement;
945
+ var isHTMLElement = (value) => {
946
+ const owner = value ? value.ownerDocument : 0;
947
+ const ElementClass = owner && owner.defaultView ? owner.defaultView.HTMLElement : HTMLElement;
948
+ return value instanceof ElementClass;
949
+ };
943
950
 
944
951
  var isMultipleSelect = (element) => element.type === `select-multiple`;
945
952
 
@@ -947,10 +954,6 @@ var isRadioInput = (element) => element.type === 'radio';
947
954
 
948
955
  var isRadioOrCheckbox = (ref) => isRadioInput(ref) || isCheckBoxInput(ref);
949
956
 
950
- var isWeb = typeof window !== 'undefined' &&
951
- typeof window.HTMLElement !== 'undefined' &&
952
- typeof document !== 'undefined';
953
-
954
957
  var live = (ref) => isHTMLElement(ref) && ref.isConnected;
955
958
 
956
959
  function markFieldsDirty(data, fields = {}) {
@@ -1022,7 +1025,7 @@ var getCheckboxValue = (options) => {
1022
1025
  var getFieldValueAs = (value, { valueAsNumber, valueAsDate, setValueAs }) => isUndefined(value)
1023
1026
  ? value
1024
1027
  : valueAsNumber
1025
- ? value === ''
1028
+ ? value === '' || isNullOrUndefined(value)
1026
1029
  ? NaN
1027
1030
  : +value
1028
1031
  : valueAsDate && isString(value)
@@ -1222,7 +1225,7 @@ var validateField = async (field, inputValue, validateAllFieldCriteria, shouldUs
1222
1225
  let exceedMin;
1223
1226
  const maxOutput = getValueAndMessage(max);
1224
1227
  const minOutput = getValueAndMessage(min);
1225
- if (!isNaN(inputValue)) {
1228
+ if (!isNullOrUndefined(inputValue) && !isNaN(inputValue)) {
1226
1229
  const valueNumber = ref.valueAsNumber || +inputValue;
1227
1230
  if (!isNullOrUndefined(maxOutput.value)) {
1228
1231
  exceedMax = valueNumber > maxOutput.value;
@@ -1383,9 +1386,9 @@ function createFormControl(props = {}) {
1383
1386
  const validationModeBeforeSubmit = getValidationModes(_options.mode);
1384
1387
  const validationModeAfterSubmit = getValidationModes(_options.reValidateMode);
1385
1388
  const shouldDisplayAllAssociatedErrors = _options.criteriaMode === VALIDATION_MODE.all;
1386
- const debounce = (callback, wait) => (...args) => {
1389
+ const debounce = (callback) => (wait) => {
1387
1390
  clearTimeout(timer);
1388
- timer = window.setTimeout(() => callback(...args), wait);
1391
+ timer = window.setTimeout(callback, wait);
1389
1392
  };
1390
1393
  const _updateValid = async (shouldSkipRender) => {
1391
1394
  let isValid = false;
@@ -1485,24 +1488,24 @@ function createFormControl(props = {}) {
1485
1488
  isFieldDirty && shouldRender && _subjects.state.next(output);
1486
1489
  return isFieldDirty ? output : {};
1487
1490
  };
1488
- const shouldRenderByError = async (shouldSkipRender, name, isValid, error, fieldState) => {
1491
+ const shouldRenderByError = async (name, isValid, error, fieldState) => {
1489
1492
  const previousFieldError = get(_formState.errors, name);
1490
1493
  const shouldUpdateValid = _proxyFormState.isValid && _formState.isValid !== isValid;
1491
1494
  if (props.delayError && error) {
1492
1495
  delayErrorCallback =
1493
- delayErrorCallback || debounce(updateErrors, props.delayError);
1494
- delayErrorCallback(name, error);
1496
+ delayErrorCallback || debounce(() => updateErrors(name, error));
1497
+ delayErrorCallback(props.delayError);
1495
1498
  }
1496
1499
  else {
1497
1500
  clearTimeout(timer);
1501
+ delayErrorCallback = null;
1498
1502
  error
1499
1503
  ? set(_formState.errors, name, error)
1500
1504
  : unset(_formState.errors, name);
1501
1505
  }
1502
- if (((error ? !deepEqual(previousFieldError, error) : previousFieldError) ||
1506
+ if ((error ? !deepEqual(previousFieldError, error) : previousFieldError) ||
1503
1507
  !isEmptyObject(fieldState) ||
1504
- shouldUpdateValid) &&
1505
- !shouldSkipRender) {
1508
+ shouldUpdateValid) {
1506
1509
  const updatedFormState = {
1507
1510
  ...fieldState,
1508
1511
  ...(shouldUpdateValid ? { isValid } : {}),
@@ -1704,6 +1707,7 @@ function createFormControl(props = {}) {
1704
1707
  set(_formValues, name, fieldValue);
1705
1708
  if (isBlurEvent) {
1706
1709
  field._f.onBlur && field._f.onBlur(event);
1710
+ delayErrorCallback && delayErrorCallback(0);
1707
1711
  }
1708
1712
  else if (field._f.onChange) {
1709
1713
  field._f.onChange(event);
@@ -1738,7 +1742,7 @@ function createFormControl(props = {}) {
1738
1742
  }
1739
1743
  field._f.deps &&
1740
1744
  trigger(field._f.deps);
1741
- shouldRenderByError(false, name, isValid, error, fieldState);
1745
+ shouldRenderByError(name, isValid, error, fieldState);
1742
1746
  }
1743
1747
  };
1744
1748
  const trigger = async (name, options = {}) => {