react-hook-form 7.0.4 → 7.0.7
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.
- package/CHANGELOG.md +8 -3
- package/dist/index.cjs.js +2 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.esm.js +47 -49
- package/dist/index.esm.js.map +1 -1
- package/dist/index.umd.js +2 -0
- package/dist/index.umd.js.map +1 -0
- package/dist/types/form.d.ts +80 -2
- package/package.json +10 -11
- package/dist/__tests__/logic/appendErrors.test.d.ts +0 -1
- package/dist/__tests__/logic/focusFieldBy.test.d.ts +0 -1
- package/dist/__tests__/logic/generateId.test.d.ts +0 -1
- package/dist/__tests__/logic/getCheckboxValue.test.d.ts +0 -1
- package/dist/__tests__/logic/getControllerValue.test.d.ts +0 -1
- package/dist/__tests__/logic/getFieldValue.test.d.ts +0 -1
- package/dist/__tests__/logic/getFields.test.d.ts +0 -1
- package/dist/__tests__/logic/getFieldsValues.test.d.ts +0 -1
- package/dist/__tests__/logic/getMultipleSelectValue.test.d.ts +0 -1
- package/dist/__tests__/logic/getNodeParentName.test.d.ts +0 -1
- package/dist/__tests__/logic/getRadioValue.test.d.ts +0 -1
- package/dist/__tests__/logic/getValidateError.test.d.ts +0 -1
- package/dist/__tests__/logic/getValueAndMessage.test.d.ts +0 -1
- package/dist/__tests__/logic/isErrorStateChanged.test.d.ts +0 -1
- package/dist/__tests__/logic/isNameInFieldArray.test.d.ts +0 -1
- package/dist/__tests__/logic/setFieldArrayDirtyFields.test.d.ts +0 -1
- package/dist/__tests__/logic/skipValidation.test.d.ts +0 -1
- package/dist/__tests__/logic/validateField.test.d.ts +0 -1
- package/dist/__tests__/useFieldArray/append.test.d.ts +0 -1
- package/dist/__tests__/useFieldArray/focus.test.d.ts +0 -1
- package/dist/__tests__/useFieldArray/insert.test.d.ts +0 -1
- package/dist/__tests__/useFieldArray/move.test.d.ts +0 -1
- package/dist/__tests__/useFieldArray/prepend.test.d.ts +0 -1
- package/dist/__tests__/useFieldArray/remove.test.d.ts +0 -1
- package/dist/__tests__/useFieldArray/swap.test.d.ts +0 -1
- package/dist/__tests__/useForm/clearErrors.test.d.ts +0 -1
- package/dist/__tests__/useForm/formState.test.d.ts +0 -1
- package/dist/__tests__/useForm/getValues.test.d.ts +0 -1
- package/dist/__tests__/useForm/handleSubmit.test.d.ts +0 -1
- package/dist/__tests__/useForm/register.test.d.ts +0 -1
- package/dist/__tests__/useForm/reset.test.d.ts +0 -1
- package/dist/__tests__/useForm/setError.test.d.ts +0 -1
- package/dist/__tests__/useForm/setValue.test.d.ts +0 -1
- package/dist/__tests__/useForm/trigger.test.d.ts +0 -1
- package/dist/__tests__/useForm/unregister.test.d.ts +0 -1
- package/dist/__tests__/useForm/watch.test.d.ts +0 -1
- package/dist/__tests__/utils/Subject.test.d.ts +0 -1
- package/dist/__tests__/utils/compact.test.d.ts +0 -1
- package/dist/__tests__/utils/deepEqual.test.d.ts +0 -1
- package/dist/__tests__/utils/deepMerge.test.d.ts +0 -1
- package/dist/__tests__/utils/fillBooleanArray.test.d.ts +0 -1
- package/dist/__tests__/utils/fillEmptyArray.test.d.ts +0 -1
- package/dist/__tests__/utils/get.test.d.ts +0 -1
- package/dist/__tests__/utils/insert.test.d.ts +0 -1
- package/dist/__tests__/utils/isBoolean.test.d.ts +0 -1
- package/dist/__tests__/utils/isCheckBoxInput.test.d.ts +0 -1
- package/dist/__tests__/utils/isEmptyObject.test.d.ts +0 -1
- package/dist/__tests__/utils/isFileInput.test.d.ts +0 -1
- package/dist/__tests__/utils/isFunction.test.d.ts +0 -1
- package/dist/__tests__/utils/isHTMLElement.test.d.ts +0 -1
- package/dist/__tests__/utils/isKey.test.d.ts +0 -1
- package/dist/__tests__/utils/isMessage.test.d.ts +0 -1
- package/dist/__tests__/utils/isMultipleSelect.test.d.ts +0 -1
- package/dist/__tests__/utils/isNullOrUndefined.test.d.ts +0 -1
- package/dist/__tests__/utils/isObject.test.d.ts +0 -1
- package/dist/__tests__/utils/isPrimitive.test.d.ts +0 -1
- package/dist/__tests__/utils/isRadioInput.test.d.ts +0 -1
- package/dist/__tests__/utils/isRadioOrCheckbox.test.d.ts +0 -1
- package/dist/__tests__/utils/isRegex.test.d.ts +0 -1
- package/dist/__tests__/utils/isSelectInput.test.d.ts +0 -1
- package/dist/__tests__/utils/isString.test.d.ts +0 -1
- package/dist/__tests__/utils/isUndefined.test.d.ts +0 -1
- package/dist/__tests__/utils/move.test.d.ts +0 -1
- package/dist/__tests__/utils/omit.test.d.ts +0 -1
- package/dist/__tests__/utils/prepend.test.d.ts +0 -1
- package/dist/__tests__/utils/remove.test.d.ts +0 -1
- package/dist/__tests__/utils/set.test.d.ts +0 -1
- package/dist/__tests__/utils/stringToPath.test.d.ts +0 -1
- package/dist/__tests__/utils/swap.test.d.ts +0 -1
- package/dist/__tests__/utils/unset.test.d.ts +0 -1
- package/dist/__tests__/utils/validationModeChecker.test.d.ts +0 -1
- package/dist/index.cjs.development.js +0 -1676
- package/dist/index.cjs.development.js.map +0 -1
- package/dist/index.cjs.production.min.js +0 -2
- package/dist/index.cjs.production.min.js.map +0 -1
- package/dist/index.js +0 -8
- package/dist/index.umd.development.js +0 -1680
- package/dist/index.umd.development.js.map +0 -1
- package/dist/index.umd.production.min.js +0 -2
- package/dist/index.umd.production.min.js.map +0 -1
- package/dist/logic/isErrorStateChanged.d.ts +0 -9
package/CHANGELOG.md
CHANGED
@@ -1,10 +1,16 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [7.0.6] - 2021-04-12
|
4
|
+
|
5
|
+
### Changes
|
6
|
+
|
7
|
+
- `register` will retrieve `onChange`'s target value when component'ref is not a valid input element.
|
8
|
+
|
3
9
|
## [7.0.0-rc.7] - 2021-03-28
|
4
10
|
|
5
11
|
### Changes
|
6
12
|
|
7
|
-
- change type name from `RefCallbackHandler` to `UseFormRegisterReturn` for register callback's return
|
13
|
+
- change type name from `RefCallbackHandler` to `UseFormRegisterReturn` for register callback's return
|
8
14
|
|
9
15
|
## [7.0.0-rc.7] - 2021-03-23
|
10
16
|
|
@@ -28,10 +34,9 @@
|
|
28
34
|
|
29
35
|
### Changes
|
30
36
|
|
31
|
-
- typescript array index restriction removed.
|
37
|
+
- typescript array index restriction removed.
|
32
38
|
- `append`, `prepend` and `insert` will `register` inputs during each action at `useFieldArray`.
|
33
39
|
|
34
|
-
|
35
40
|
## [7.0.0-beta.11] - 2021-02-20
|
36
41
|
|
37
42
|
### Changes
|
@@ -0,0 +1,2 @@
|
|
1
|
+
"use strict";function e(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}Object.defineProperty(exports,"__esModule",{value:!0});var r=e(require("react")),t=e=>"checkbox"===e.type,n=e=>null==e;const s=e=>"object"==typeof e;var c=e=>!n(e)&&!Array.isArray(e)&&s(e)&&!(e instanceof Date),u=e=>e.substring(0,e.search(/.\d/))||e,i=e=>e.filter(Boolean),a=e=>void 0===e,l=(e={},r,t)=>{const s=i(r.split(/[,[\].]+?/)).reduce((e,r)=>n(e)?e:e[r],e);return a(s)||s===e?a(e[r])?t:e[r]:s};const o="blur",f="change",d="onBlur",b="onChange",y="onSubmit",g="onTouched",m="all",h="max",v="min",x="maxLength",p="minLength",A="pattern",O="required",j="validate";var k=(e,r)=>{const t=Object.assign({},e);return delete t[r],t};const V=r.createContext(null);V.displayName="RHFContext";const R=()=>r.useContext(V);var F=(e,r,t,n,s=!0)=>e?new Proxy(r,{get:(e,r)=>{if(r in e)return t.current[r]!==m&&(t.current[r]=!s||m),n&&(n.current[r]=!0),e[r]}}):r,S=e=>c(e)&&!Object.keys(e).length,w=(e,r,t)=>S(e)||Object.keys(e).length>=Object.keys(r).length||Object.keys(e).find(e=>r[e]===(!t||m)),_="undefined"!=typeof window&&void 0!==window.HTMLElement&&"undefined"!=typeof document;const C=_?"Proxy"in window:"undefined"!=typeof Proxy;function D(e){const t=R(),{formStateRef:n,formStateSubjectRef:s,readFormStateRef:c}=e&&e.control||t.control,[u,i]=r.useState(n.current),a=r.useRef({isDirty:!1,dirtyFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1});return r.useEffect(()=>{const e=s.current.subscribe({next:e=>{w(e,a.current)&&i(Object.assign(Object.assign({},n.current),e))}});return()=>e.unsubscribe()},[]),F(C,u,c,a,!1)}function E({name:e,rules:n,defaultValue:s,control:i}){const d=R(),{defaultValuesRef:b,register:y,fieldsRef:g,fieldArrayNamesRef:m,controllerSubjectRef:h}=i||d.control,{onChange:v,onBlur:x,ref:p}=y(e,n),[A,O]=r.useState(a(l(g.current,e)._f.value)||((e,r)=>[...e].some(e=>u(r)===e))(m.current,e)?a(s)?l(b.current,e):s:l(g.current,e)._f.value),j=D({control:i||d.control});return l(g.current,e)._f.value=A,r.useEffect(()=>{const r=h.current.subscribe({next:r=>(!r.name||e===r.name)&&O(l(r.values,e))});return p({target:A}),()=>r.unsubscribe()},[e]),{field:{onChange:r=>{const n=(e=>c(e)&&e.target?t(e.target)?e.target.checked:e.target.value:e)(r);O(n),v({target:{value:n,name:e},type:f})},onBlur:()=>{x({target:{name:e},type:o})},name:e,value:A,ref:p},formState:j,fieldState:Object.defineProperties({},{invalid:{get:()=>!!l(j.errors,e)},isDirty:{get:()=>!!l(j.dirtyFields,e)},isTouched:{get:()=>!!l(j.touchedFields,e)},error:{get:()=>l(j.errors,e)}})}}var B=(e,r,t,n,s)=>r?Object.assign(Object.assign({},t[e]),{types:Object.assign(Object.assign({},t[e]&&t[e].types?t[e].types:{}),{[n]:s||!0})}):{},N=e=>/^\w*$/.test(e),$=e=>i(e.replace(/["|']|\]/g,"").split(/\.|\[/));function M(e,r,t){let n=-1;const s=N(r)?[r]:$(r),u=s.length,i=u-1;for(;++n<u;){const r=s[n];let u=t;if(n!==i){const t=e[r];u=c(t)||Array.isArray(t)?t:isNaN(+s[n+1])?{}:[]}e[r]=u,e=e[r]}return e}const I=(e,r,t)=>{for(const n of t||Object.keys(e)){const t=l(e,n);if(t){const e=t._f,n=k(t,"_f");if(e&&r(e.name)){if(e.ref.focus&&a(e.ref.focus()))break;if(e.refs){e.refs[0].focus();break}}else c(n)&&I(n,r)}}},P=(e,r={current:{}},t={})=>{for(const n in e.current){const s=e.current[n];if(s){const e=s._f,c=k(s,"_f");M(t,n,e?e.ref.disabled||e.refs&&e.refs.every(e=>e.disabled)?void 0:e.value:Array.isArray(s)?[]:{}),c&&P({current:c},r,t[n])}}return Object.assign(Object.assign({},r.current),t)};var T=()=>{const e="undefined"==typeof performance?Date.now():1e3*performance.now();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,r=>{const t=(16*Math.random()+e)%16|0;return("x"==r?t:3&t|8).toString(16)})},W=(e=[],r)=>e.map(e=>Object.assign({[r]:e&&e[r]||T()},e)),L=e=>n(e)||!s(e);function q(e,t,n){if(L(e)||L(t)||e instanceof Date||t instanceof Date)return e===t;if(!r.isValidElement(e)){const r=Object.keys(e),s=Object.keys(t);if(r.length!==s.length)return!1;for(const s of r){const r=e[s];if(!n||"ref"!==s){const e=t[s];if((c(r)||Array.isArray(r))&&(c(e)||Array.isArray(e))?!q(r,e,n):r!==e)return!1}}}return!0}function H(e,r,t,n,s){let c=-1;for(;++c<e.length;){for(const n in e[c])Array.isArray(e[c][n])?(!t[c]&&(t[c]={}),t[c][n]=[],H(e[c][n],l(r[c]||{},n,[]),t[c][n],t[c],n)):q(l(r[c]||{},n),e[c][n])?M(t[c]||{},n):t[c]=Object.assign(Object.assign({},t[c]),{[n]:!0});n&&!t.length&&delete n[s]}return t}var z=(e,r,t)=>function e(r,t){if(L(r)||L(t))return t;for(const n in t){const s=r[n],u=t[n];try{r[n]=c(s)&&c(u)||Array.isArray(s)&&Array.isArray(u)?e(s,u):u}catch(e){}}return r}(H(e,r,t.slice(0,e.length)),H(r,e,t.slice(0,e.length)));function G(e,r){return[...e,...Array.isArray(r)?r:[r]]}var J=e=>Array.isArray(e)?Array(e.length).fill(void 0):void 0;function K(e,r,t){return[...e.slice(0,r),...Array.isArray(t)?t:[t],...e.slice(r)]}var Q=(e,r,t)=>Array.isArray(e)?(a(e[t])&&(e[t]=void 0),e.splice(t,0,e.splice(r,1)[0]),e):[];function U(e,r){return[...Array.isArray(r)?r:[r],...e]}var X=(e,r)=>a(r)?[]:function(e,r){let t=0;const n=[...e];for(const e of r)n.splice(e-t,1),t++;return i(n).length?n:[]}(e,(Array.isArray(r)?r:[r]).sort((e,r)=>e-r)),Y=(e,r,t)=>{e[r]=[e[t],e[t]=e[r]][0]},Z=e=>"boolean"==typeof e;function ee(e,r){const t=N(r)?[r]:$(r),n=1==t.length?e:function(e,r){const t=r.slice(0,-1).length;let n=0;for(;n<t;)e=a(e)?n++:e[r[n++]];return e}(e,t),s=t[t.length-1];let u;n&&delete n[s];for(let r=0;r<t.slice(0,-1).length;r++){let n,s=-1;const i=t.slice(0,-(r+1)),a=i.length-1;for(r>0&&(u=e);++s<i.length;){const r=i[s];n=n?n[r]:e[r],a===s&&(c(n)&&S(n)||Array.isArray(n)&&!n.filter(e=>c(e)&&!S(e)||Z(e)).length)&&(u?delete u[r]:delete e[r]),u=n}}return e}function re(e,r){const t={};for(const n of e){const e=l(r,n);e&&(N(n)?t[n]=e._f:M(t,n,e._f))}return t}var te=e=>"file"===e.type,ne=e=>"select-multiple"===e.type,se=e=>"radio"===e.type;const ce={value:!1,isValid:!1},ue={value:!0,isValid:!0};var ie=e=>{if(Array.isArray(e)){if(e.length>1){const r=e.filter(e=>e&&e.checked&&!e.disabled).map(e=>e.value);return{value:r,isValid:!!r.length}}return e[0].checked&&!e[0].disabled?e[0].attributes&&!a(e[0].attributes.value)?a(e[0].value)||""===e[0].value?ue:{value:e[0].value,isValid:!0}:ue:ce}return ce};const ae={isValid:!1,value:null};var le=e=>Array.isArray(e)?e.reduce((e,r)=>r&&r.checked&&!r.disabled?{isValid:!0,value:r.value}:e,ae):ae;function oe(e){if(e&&e._f){const n=e._f.ref;if(n.disabled)return;return te(n)?n.files:se(n)?le(e._f.refs).value:ne(n)?(r=n.options,[...r].filter(({selected:e})=>e).map(({value:e})=>e)):t(n)?ie(e._f.refs).value:((e,{valueAsNumber:r,valueAsDate:t,setValueAs:n})=>r?""===e?NaN:+e:t?new Date(e):n?n(e):e)(a(n.value)?e._f.ref.value:n.value,e._f)}var r}var fe=e=>"function"==typeof e,de=e=>"string"==typeof e,be=e=>de(e)||r.isValidElement(e),ye=e=>e instanceof RegExp;function ge(e,r,t="validate"){if(be(e)||Z(e)&&!e)return{type:t,message:be(e)?e:"",ref:r}}var me=e=>c(e)&&!ye(e)?e:{value:e,message:""},he=async({_f:{ref:e,refs:r,required:s,maxLength:u,minLength:i,min:a,max:l,pattern:o,validate:f,name:d,value:b,valueAsNumber:y}},g)=>{const m={},k=se(e),V=t(e),R=k||V,F=(y||te(e))&&!e.value||""===b||Array.isArray(b)&&!b.length,w=B.bind(null,d,g,m),_=(r,t,n,s=x,c=p)=>{const u=r?t:n;m[d]=Object.assign({type:r?s:c,message:u,ref:e},w(r?s:c,u))};if(s&&(!k&&!V&&(F||n(b))||Z(b)&&!b||V&&!ie(r).isValid||k&&!le(r).isValid)){const{value:t,message:n}=be(s)?{value:!!s,message:s}:me(s);if(t&&(m[d]=Object.assign({type:O,message:n,ref:R?(r||[])[0]||{}:e},w(O,n)),!g))return m}if(!(n(a)&&n(l)||""===b)){let r,t;const s=me(l),c=me(a);if(isNaN(b)){const n=e.valueAsDate||new Date(b);de(s.value)&&(r=n>new Date(s.value)),de(c.value)&&(t=n<new Date(c.value))}else{const u=e.valueAsNumber||parseFloat(b);n(s.value)||(r=u>s.value),n(c.value)||(t=u<c.value)}if((r||t)&&(_(!!r,s.message,c.message,h,v),!g))return m}if(de(b)&&!F&&(u||i)){const e=me(u),r=me(i),t=!n(e.value)&&b.length>e.value,s=!n(r.value)&&b.length<r.value;if((t||s)&&(_(t,e.message,r.message),!g))return m}if(de(b)&&o&&!F){const{value:r,message:t}=me(o);if(ye(r)&&!b.match(r)&&(m[d]=Object.assign({type:A,message:t,ref:e},w(A,t)),!g))return m}if(f){const t=R&&r?r[0]:e;if(fe(f)){const e=ge(await f(b),t);if(e&&(m[d]=Object.assign(Object.assign({},e),w(j,e.message)),!g))return m}else if(c(f)){let e={};for(const[r,n]of Object.entries(f)){if(!S(e)&&!g)break;const s=ge(await n(b),t,r);s&&(e=Object.assign(Object.assign({},s),w(r,s.message)),g&&(m[d]=e))}if(!S(e)&&(m[d]=Object.assign({ref:t},e),!g))return m}}return m},ve=e=>({isOnSubmit:!e||e===y,isOnBlur:e===d,isOnChange:e===b,isOnAll:e===m,isOnTouch:e===g}),xe=e=>e instanceof HTMLElement;class pe{constructor(){this.tearDowns=[]}add(e){this.tearDowns.push(e)}unsubscribe(){for(const e of this.tearDowns)e();this.tearDowns=[]}}class Ae{constructor(e,r){this.observer=e,this.closed=!1,r.add(()=>this.closed=!0)}next(e){this.closed||this.observer.next(e)}}class Oe{constructor(){this.observers=[]}next(e){for(const r of this.observers)r.next(e)}subscribe(e){const r=new pe,t=new Ae(e,r);return this.observers.push(t),r}unsubscribe(){this.observers=[]}}const je="undefined"==typeof window;exports.Controller=e=>e.render(E(e)),exports.FormProvider=e=>r.createElement(V.Provider,{value:k(e,"children")},e.children),exports.appendErrors=B,exports.get=l,exports.set=M,exports.useController=E,exports.useFieldArray=({control:e,name:t,keyName:n="id"})=>{const s=R(),c=r.useRef(""),{isWatchAllRef:o,watchFieldsRef:f,getFormIsDirty:d,watchSubjectRef:b,fieldArraySubjectRef:y,fieldArrayNamesRef:g,fieldsRef:m,defaultValuesRef:h,formStateRef:v,formStateSubjectRef:x,readFormStateRef:p,validFieldsRef:A,fieldsWithValidationRef:O,fieldArrayDefaultValuesRef:j}=e||s.control,[V,F]=r.useState(W(l(j.current,u(t))?l(j.current,t,[]):l(h.current,t,[]),n));M(j.current,t,[...V]),g.current.add(t);const S=e=>e.map(e=>k(e||{},n)),w=()=>{const e=l(P(m,h),t,[]);return W(l(j.current,t,[]).map((r,t)=>Object.assign(Object.assign({},r),e[t])),n)},_=(e,r)=>r?a(r.focusIndex)?r.focusName?r.focusName:r.shouldFocus?`${t}.${e}`:"":`${t}.${r.focusIndex}`:`${t}.${e}`,C=(e=[])=>F(W(e,n)),D=e=>!i(l(e,t,[])).length&&ee(e,t),E=(e,r,n=[],s=!0)=>{if(l(m.current,t)){const n=e(l(m.current,t),r.argA,r.argB);s&&M(m.current,t,n)}if(Array.isArray(l(v.current.errors,t))){const n=e(l(v.current.errors,t),r.argA,r.argB);s&&M(v.current.errors,t,n),D(v.current.errors)}if(p.current.touchedFields&&l(v.current.touchedFields,t)){const n=e(l(v.current.touchedFields,t),r.argA,r.argB);s&&M(v.current.touchedFields,t,n),D(v.current.touchedFields)}(p.current.dirtyFields||p.current.isDirty)&&(M(v.current.dirtyFields,t,z(S(n),l(h.current,t,[]),l(v.current.dirtyFields,t,[]))),(e=>{e&&M(v.current.dirtyFields,t,z(S(e),l(h.current,t,[]),l(v.current.dirtyFields,t,[])))})(n),D(v.current.dirtyFields)),p.current.isValid&&(M(A.current,t,e(l(A.current,t,[]),r.argA)),D(A.current),M(O.current,t,e(l(O.current,t,[]),r.argA)),D(O.current)),x.current.next({isDirty:d(t,S(n)),errors:v.current.errors,isValid:v.current.isValid})},B=(e,r=0,n="")=>e.forEach((e,s)=>!L(e)&&Object.entries(e).forEach(([e,c])=>{const u=`${n||t}.${n?s:r+s}.${e}`;Array.isArray(c)?B(c,s,u):M(m.current,u,{_f:{ref:{name:u},name:u,value:c}})}));return r.useEffect(()=>{if(o.current)x.current.next({});else for(const e of f.current)if(t.startsWith(e)){x.current.next({});break}b.current.next({name:t,value:l(P(m,h),t,[])}),c.current&&I(m.current,e=>e.startsWith(c.current)),c.current="",y.current.next({name:t,fields:S([...V])})},[V,t]),r.useEffect(()=>{const e=y.current.subscribe({next({name:e,fields:r,isReset:n}){n&&(ee(m.current,e||t),e?M(j.current,e,r):j.current=r,C(l(j.current,t)))}});return!l(m.current,t)&&M(m.current,t,[]),()=>{j.current=P(m),e.unsubscribe()}},[]),{swap:r.useCallback((e,r)=>{const t=w();Y(t,e,r),E(Y,{argA:e,argB:r},t,!1),C(t)},[t]),move:r.useCallback((e,r)=>{const t=w();Q(t,e,r),C(t),E(Q,{argA:e,argB:r},t,!1)},[t]),prepend:r.useCallback((e,r)=>{const t=Array.isArray(e)?e:[e],n=U(w(),t);C(n),E(U,{argA:J(e)},n),B(t),c.current=_(0,r)},[t]),append:r.useCallback((e,r)=>{const t=Array.isArray(e)?e:[e],n=G(w(),t),s=n.length-t.length;C(n),E(G,{argA:J(e)},n,!1),B(t,s),c.current=_(s,r)},[t]),remove:r.useCallback(e=>{const r=X(w(),e);(e=>{(Array.isArray(e)?e:[e]).forEach(e=>M(m.current,`${t}${a(e)?"":"."+e}`,a(e)?[]:void 0))})(e),C(r),E(X,{argA:e},r)},[t]),insert:r.useCallback((e,r,t)=>{const n=Array.isArray(r)?r:[r],s=K(w(),e,n);C(s),E(K,{argA:e,argB:J(r)},s),B(n,e),c.current=_(e,t)},[t]),fields:V}},exports.useForm=function({mode:e=y,reValidateMode:s=b,resolver:c,context:f,defaultValues:d={},shouldFocusError:g=!0,criteriaMode:h}={}){const v=r.useRef({}),x=r.useRef(new Set),p=r.useRef(new Oe),A=r.useRef(new Oe),O=r.useRef(new Oe),j=r.useRef(new Oe),V=r.useRef({}),R=r.useRef(new Set),D=r.useRef(!1),E=r.useRef({}),B=r.useRef({}),N=r.useRef(d),$=r.useRef(!1),T=r.useRef(f),W=r.useRef(c),L=r.useRef(new Set),H=ve(e),G=h===m,[J,K]=r.useState({isDirty:!1,isValidating:!1,dirtyFields:{},isSubmitted:!1,submitCount:0,touchedFields:{},isSubmitting:!1,isSubmitSuccessful:!1,isValid:!H.isOnSubmit,errors:{}}),Q=r.useRef({isDirty:!C,dirtyFields:!C,touchedFields:!C,isValidating:!C,isValid:!C,errors:!C}),U=r.useRef(J);T.current=f,W.current=c;const X=()=>U.current.isValid=q(B.current,E.current)&&S(U.current.errors),Y=r.useCallback((e,r,t=!1,s={},c,u)=>{const i=l(U.current.errors,e);let o=t||!q(i,r,!0)||Q.current.isValid&&a(r)&&l(E.current,e)&&!l(B.current,e);if(r?(ee(B.current,e),o=o||!i||!q(i,r,!0),M(U.current.errors,e,r)):((l(E.current,e)||W.current)&&(M(B.current,e,!0),o=o||i),ee(U.current.errors,e)),o&&!n(t)||!S(s)||u){const e=Object.assign(Object.assign({},s),{isValid:W.current?!!c:X(),errors:U.current.errors});U.current=Object.assign(Object.assign({},U.current),e),p.current.next(u?{}:e)}p.current.next({isValidating:!1})},[]),Z=r.useCallback((e,r,s={},c,u)=>{u&&Fe(e);const i=l(v.current,e,{})._f;if(i){const u=_&&xe(i.ref)&&n(r)?"":r;if(i.value=r,se(i.ref)?(i.refs||[]).forEach(e=>e.checked=e.value===u):te(i.ref)&&!de(u)?i.ref.files=u:ne(i.ref)?[...i.ref.options].forEach(e=>e.selected=u.includes(e.value)):t(i.ref)&&i.refs?i.refs.length>1?i.refs.forEach(e=>e.checked=Array.isArray(u)?!!u.find(r=>r===e.value):u===e.value):i.refs[0].checked=!!u:i.ref.value=u,c){const t=P(v);M(t,e,r),O.current.next({values:Object.assign(Object.assign({},N.current),t),name:e})}s.shouldDirty&&ue(e,u),s.shouldValidate&&be(e)}},[]),ce=r.useCallback((e,r)=>{if(Q.current.isDirty){const t=P(v);return e&&r&&M(t,e,r),!q(t,N.current)}return!1},[]),ue=r.useCallback((e,r,t=!0)=>{if(Q.current.isDirty||Q.current.dirtyFields){const n=!q(l(N.current,e),r),s=l(U.current.dirtyFields,e),c=U.current.isDirty;n?M(U.current.dirtyFields,e,!0):ee(U.current.dirtyFields,e),U.current.isDirty=ce();const u={isDirty:U.current.isDirty,dirtyFields:U.current.dirtyFields},i=Q.current.isDirty&&c!==u.isDirty||Q.current.dirtyFields&&s!==l(U.current.dirtyFields,e);return i&&t&&p.current.next(u),i?u:{}}return{}},[]),ie=r.useCallback(async(e,r)=>{const t=(await he(l(v.current,e),G))[e];return Y(e,t,r),a(t)},[G]),ae=r.useCallback(async(e,r=[])=>{const{errors:t}=await W.current(P(v,N),T.current,{criteriaMode:h,names:r,fields:re(x.current,v.current)});for(const r of e){const e=l(t,r);e?M(U.current.errors,r,e):ee(U.current.errors,r)}return t},[h]),le=async e=>{for(const r in e){const t=e[r];if(t){const e=t._f,r=k(t,"_f");if(e){const r=await he(t,G);r[e.name]?(M(U.current.errors,e.name,r[e.name]),ee(B.current,e.name)):l(E.current,e.name)&&(M(B.current,e.name,!0),ee(U.current.errors,e.name))}r&&await le(r)}}},be=r.useCallback(async e=>{const r=a(e)?Object.keys(v.current):Array.isArray(e)?e:[e];let t;p.current.next({isValidating:!0}),W.current?t=S(await ae(r,a(e)?void 0:r)):a(e)?await le(v.current):await Promise.all(r.map(async e=>await ie(e,null))),p.current.next({errors:U.current.errors,isValidating:!1,isValid:W.current?t:X()})},[ae,ie]),ye=r.useCallback((e,r,t)=>Object.entries(r).forEach(([r,n])=>{const s=`${e}.${r}`,c=l(v.current,s);c&&!c._f?ye(s,n,t):Z(s,n,t,!0,!c)}),[be]),ge=e=>$.current||R.current.has(e)||R.current.has((e.match(/\w+/)||[])[0]),me=(e,r,t)=>{let s;const c=l(v.current,e),u=l(N.current,e);return!c||S(N.current)&&a(c._f.value)||(s=a(c._f.value)?u:c._f.value,n(s)||Z(e,s)),(u||!u&&t)&&r&&!H.isOnSubmit&&c&&Q.current.isValid&&he(c,G).then(r=>{S(r)?M(B.current,e,!0):ee(B.current,e),U.current.isValid&&!S(r)&&K(Object.assign(Object.assign({},U.current),{isValid:X()}))}),s},pe=r.useCallback(async({type:e,target:r,target:{value:n,type:c}})=>{let i,f,d=r.name;const b=l(v.current,d);if(b){let y=c?oe(b):void 0;y=a(y)?n:y;const g=e===o,{isOnBlur:m,isOnChange:x}=ve(s),O=(({isOnBlur:e,isOnChange:r,isOnTouch:t,isTouched:n,isReValidateOnBlur:s,isReValidateOnChange:c,isBlurEvent:u,isSubmitted:i,isOnAll:a})=>!a&&(!i&&t?!(n||u):(i?s:e)?!u:!(i?c:r)||u))(Object.assign({isBlurEvent:g,isTouched:!!l(U.current.touchedFields,d),isSubmitted:U.current.isSubmitted,isReValidateOnBlur:m,isReValidateOnChange:x},H)),j=!g&&ge(d);a(y)||(b._f.value=y);const k=ue(d,b._f.value,!1);g&&!l(U.current.touchedFields,d)&&(M(U.current.touchedFields,d,!0),Q.current.touchedFields&&(k.touchedFields=U.current.touchedFields));let V=!S(k)||j;if(O)return!g&&A.current.next({name:d,type:e,value:y}),V&&p.current.next(j?{}:k);if(p.current.next({isValidating:!0}),W.current){const{errors:e}=await W.current(P(v,N),T.current,{criteriaMode:h,fields:re([d],v.current),names:[d]}),n=U.current.isValid;if(i=l(e,d),t(r)&&!i){const r=u(d),t=l(e,r,{});t.type&&t.message&&(i=t),(t||l(U.current.errors,r))&&(d=r)}f=S(e),n!==f&&(V=!0)}else i=(await he(b,G))[d];!g&&A.current.next({name:d,type:e,value:y}),Y(d,i,V,k,f,j)}},[]),Ae=e=>{const r=D.current?P(v,N):N.current;return a(e)?r:de(e)?l(r,e):e.map(e=>l(r,e))},ke=r.useCallback(async(e={})=>{const r=U.current.isValid;if(c){const{errors:r}=await W.current(Object.assign(Object.assign({},P(v,N)),e),T.current,{criteriaMode:h,fields:re(x.current,v.current)});U.current.isValid=S(r)}else X();r!==U.current.isValid&&p.current.next({isValid:U.current.isValid})},[h]),Ve=r.useCallback((e,r,t)=>{const n=Array.isArray(e),s=D.current?Ae():a(r)?N.current:n?r||{}:{[e]:r};if(a(e))return t&&($.current=!0),s;const c=[];for(const r of n?e:[e])t&&R.current.add(r),c.push(l(s,r));return n?c:c[0]},[]),Re=(e,r,n)=>{let s=l(v.current,e);if(s){const c=(e=>se(e)||t(e))(r);if(r===s._f.ref||_&&xe(s._f.ref)&&!xe(r)||c&&Array.isArray(s._f.refs)&&i(s._f.refs).find(e=>e===r))return;s={_f:c?Object.assign(Object.assign({},s._f),{refs:[...i(s._f.refs||[]).filter(e=>xe(e)&&document.contains(e)),r],ref:{type:r.type,name:e}}):Object.assign(Object.assign({},s._f),{ref:r})},M(v.current,e,s);const u=me(e,n,!0);(c&&Array.isArray(u)?!q(l(v.current,e)._f.value,u):a(l(v.current,e)._f.value))&&(l(v.current,e)._f.value=oe(l(v.current,e)))}},Fe=r.useCallback((e,r)=>{const t=!l(v.current,e);return M(v.current,e,{_f:Object.assign(Object.assign(Object.assign({},t?{ref:{name:e}}:Object.assign({ref:(l(v.current,e)._f||{}).ref},l(v.current,e)._f)),{name:e}),r)}),r&&M(E.current,e,!0),x.current.add(e),t&&me(e,r),je?{name:e}:{name:e,onChange:pe,onBlur:pe,ref:t=>t&&Re(e,t,r)}},[N.current]),Se=r.useCallback((e,r)=>async t=>{t&&t.preventDefault&&(t.preventDefault(),t.persist());let n=Object.assign(Object.assign({},N.current),P(v,N));p.current.next({isSubmitting:!0});try{if(W.current){const{errors:e,values:r}=await W.current(n,T.current,{criteriaMode:h,fields:re(x.current,v.current)});U.current.errors=e,n=r}else await le(v.current);S(U.current.errors)&&Object.keys(U.current.errors).every(e=>l(n,e))?(p.current.next({errors:{},isSubmitting:!0}),await e(n,t)):(r&&await r(U.current.errors,t),g&&I(v.current,e=>l(U.current.errors,e),x.current))}finally{U.current.isSubmitted=!0,p.current.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:S(U.current.errors),submitCount:U.current.submitCount+1,errors:U.current.errors})}},[g,G,h]),we=r.useCallback(({keepErrors:e,keepDirty:r,keepIsSubmitted:t,keepTouched:n,keepIsValid:s,keepSubmitCount:c})=>{s||(B.current={},E.current={}),R.current=new Set,$.current=!1,p.current.next({submitCount:c?U.current.submitCount:0,isDirty:!!r&&U.current.isDirty,isSubmitted:!!t&&U.current.isSubmitted,isValid:s?U.current.isValid:!H.isOnSubmit,dirtyFields:r?U.current.dirtyFields:{},touchedFields:n?U.current.touchedFields:{},errors:e?U.current.errors:{},isSubmitting:!1,isSubmitSuccessful:!1})},[]);return r.useEffect(()=>{D.current=!0;const e=p.current.subscribe({next(e={}){w(e,Q.current,!0)&&(U.current=Object.assign(Object.assign({},U.current),e),K(U.current))}}),r=j.current.subscribe({next(e){if(e.fields&&e.name&&Q.current.isValid){const r=P(v);M(r,e.name,e.fields),ke(r)}}});return W.current&&Q.current.isValid&&ke(),()=>{A.current.unsubscribe(),e.unsubscribe(),r.unsubscribe()}},[]),{control:r.useMemo(()=>({register:Fe,isWatchAllRef:$,watchFieldsRef:R,getFormIsDirty:ce,formStateSubjectRef:p,fieldArraySubjectRef:j,controllerSubjectRef:O,watchSubjectRef:A,watchInternal:Ve,fieldsRef:v,validFieldsRef:B,fieldsWithValidationRef:E,fieldArrayNamesRef:L,readFormStateRef:Q,formStateRef:U,defaultValuesRef:N,fieldArrayDefaultValuesRef:V}),[]),formState:F(C,J,Q),trigger:be,register:Fe,handleSubmit:Se,watch:r.useCallback((e,r)=>fe(e)?A.current.subscribe({next:t=>e(Ve(void 0,r),t)}):Ve(e,r,!0),[]),setValue:r.useCallback((e,r,t={})=>{D.current=!0;const n=l(v.current,e),s=L.current.has(e);s&&(j.current.next({fields:r,name:e,isReset:!0}),(Q.current.isDirty||Q.current.dirtyFields)&&t.shouldDirty&&(M(U.current.dirtyFields,e,z(r,l(N.current,e,[]),l(U.current.dirtyFields,e,[]))),p.current.next({dirtyFields:U.current.dirtyFields,isDirty:ce(e,r)})),!r.length&&M(v.current,e,[])&&M(V.current,e,[])),n&&!n._f||s?ye(e,r,s?{}:t):Z(e,r,t,!0,!n),ge(e)&&p.current.next({}),A.current.next({name:e,value:r})},[ye]),getValues:r.useCallback(Ae,[]),reset:r.useCallback((e,r={})=>{const t=e||N.current;if(_&&!r.keepValues)for(const e of Object.values(v.current))if(e&&e._f){const r=Array.isArray(e._f.refs)?e._f.refs[0]:e._f.ref;if(xe(r))try{r.closest("form").reset();break}catch(e){}}!r.keepDefaultValues&&(N.current=Object.assign({},t)),r.keepValues||(v.current={},O.current.next({values:Object.assign({},t)}),A.current.next({value:Object.assign({},t)}),j.current.next({fields:Object.assign({},t),isReset:!0})),we(r)},[]),clearErrors:r.useCallback(e=>{e&&(Array.isArray(e)?e:[e]).forEach(e=>ee(U.current.errors,e)),p.current.next({errors:e?U.current.errors:{}})},[]),unregister:r.useCallback((e,r={})=>{for(const t of e?Array.isArray(e)?e:[e]:Object.keys(x.current))x.current.delete(t),L.current.delete(t),l(v.current,t)&&(r.keepIsValid||(ee(E.current,t),ee(B.current,t)),!r.keepError&&ee(U.current.errors,t),!r.keepValue&&ee(v.current,t),!r.keepDirty&&ee(U.current.dirtyFields,t),!r.keepTouched&&ee(U.current.touchedFields,t),!r.keepDefaultValue&&ee(N.current,t),A.current.next({name:t}));p.current.next(Object.assign(Object.assign(Object.assign({},U.current),r.keepDirty?{isDirty:ce()}:{}),W.current?{}:{isValid:X()})),r.keepIsValid||ke()},[]),setError:r.useCallback((e,r,t)=>{const n=((l(v.current,e)||{_f:{}})._f||{}).ref;M(U.current.errors,e,Object.assign(Object.assign({},r),{ref:n})),p.current.next({errors:U.current.errors,isValid:!1}),t&&t.shouldFocus&&n&&n.focus&&n.focus()},[])}},exports.useFormContext=R,exports.useFormState=D,exports.useWatch=function(e){const{control:t,name:n,defaultValue:s}=e||{},c=R(),u=r.useRef(n);u.current=n;const{watchInternal:i,watchSubjectRef:l}=t||c.control,[o,f]=r.useState(a(s)?i(n):s);return r.useEffect(()=>{i(n);const e=l.current.subscribe({next:({name:e,value:r})=>(!u.current||!e||(Array.isArray(u.current)?u.current:[u.current]).some(r=>e&&r&&e.startsWith(r)))&&f(de(e)&&u.current===e&&!a(r)?r:i(u.current,s))});return()=>e.unsubscribe()},[]),o};
|
2
|
+
//# sourceMappingURL=index.cjs.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../src/utils/isCheckBoxInput.ts","../src/utils/isNullOrUndefined.ts","../src/utils/isObject.ts","../src/logic/getNodeParentName.ts","../src/utils/compact.ts","../src/utils/isUndefined.ts","../src/utils/get.ts","../src/constants.ts","../src/utils/omit.ts","../src/useFormContext.tsx","../src/logic/getProxyFormState.ts","../src/utils/isEmptyObject.ts","../src/logic/shouldRenderFormState.ts","../src/utils/isWeb.ts","../src/utils/isProxyEnabled.ts","../src/useFormState.ts","../src/useController.ts","../src/logic/isNameInFieldArray.ts","../src/logic/getControllerValue.ts","../src/logic/appendErrors.ts","../src/utils/isKey.ts","../src/utils/stringToPath.ts","../src/utils/set.ts","../src/logic/focusFieldBy.ts","../src/logic/getFieldsValues.ts","../src/logic/generateId.ts","../src/logic/mapId.ts","../src/utils/isPrimitive.ts","../src/utils/deepEqual.ts","../src/logic/setFieldArrayDirtyFields.ts","../src/utils/deepMerge.ts","../src/utils/append.ts","../src/utils/fillEmptyArray.ts","../src/utils/insert.ts","../src/utils/move.ts","../src/utils/prepend.ts","../src/utils/remove.ts","../src/utils/swap.ts","../src/utils/isBoolean.ts","../src/utils/unset.ts","../src/logic/getFields.ts","../src/utils/isFileInput.ts","../src/utils/isMultipleSelect.ts","../src/utils/isRadioInput.ts","../src/logic/getCheckboxValue.ts","../src/logic/getRadioValue.ts","../src/logic/getFieldValue.ts","../src/logic/getMultipleSelectValue.ts","../src/logic/getFieldValueAs.ts","../src/logic/skipValidation.ts","../src/utils/isFunction.ts","../src/utils/isString.ts","../src/utils/isMessage.ts","../src/utils/isRegex.ts","../src/logic/getValidateError.ts","../src/logic/getValueAndMessage.ts","../src/logic/validateField.ts","../src/utils/getValidationModes.ts","../src/utils/isHTMLElement.ts","../src/utils/Subject.ts","../src/useForm.ts","../src/controller.tsx","../src/useFieldArray.ts","../src/utils/isRadioOrCheckbox.ts","../src/useWatch.ts"],"sourcesContent":["import { FieldElement } from '../types';\n\nexport default (element: FieldElement): element is HTMLInputElement =>\n element.type === 'checkbox';\n","export default (value: unknown): value is null | undefined => value == null;\n","import isNullOrUndefined from './isNullOrUndefined';\n\nexport const isObjectType = (value: unknown) => typeof value === 'object';\n\nexport default <T extends object>(value: unknown): value is T =>\n !isNullOrUndefined(value) &&\n !Array.isArray(value) &&\n isObjectType(value) &&\n !(value instanceof Date);\n","export default (name: string) => name.substring(0, name.search(/.\\d/)) || name;\n","export default (value: any[]) => value.filter(Boolean);\n","export default (val: unknown): val is undefined => val === undefined;\n","import compact from './compact';\nimport isNullOrUndefined from './isNullOrUndefined';\nimport isUndefined from './isUndefined';\n\nexport default (obj: any = {}, path: string, defaultValue?: unknown) => {\n const result = compact(path.split(/[,[\\].]+?/)).reduce(\n (result, key) => (isNullOrUndefined(result) ? result : result[key]),\n obj,\n );\n\n return isUndefined(result) || result === obj\n ? isUndefined(obj[path])\n ? defaultValue\n : obj[path]\n : result;\n};\n","import { ValidationMode } from './types';\n\nexport const EVENTS = {\n BLUR: 'blur',\n CHANGE: 'change',\n};\n\nexport const VALIDATION_MODE: ValidationMode = {\n onBlur: 'onBlur',\n onChange: 'onChange',\n onSubmit: 'onSubmit',\n onTouched: 'onTouched',\n all: 'all',\n};\n\nexport const SELECT = 'select';\n\nexport const UNDEFINED = 'undefined';\n\nexport const INPUT_VALIDATION_RULES = {\n max: 'max',\n min: 'min',\n maxLength: 'maxLength',\n minLength: 'minLength',\n pattern: 'pattern',\n required: 'required',\n validate: 'validate',\n};\n","export default <Key extends string, T extends Record<Key, any>>(\n source: T,\n key: Key,\n): Omit<T, Key> => {\n const copy = { ...source };\n delete copy[key];\n\n return copy;\n};\n","import * as React from 'react';\n\nimport omit from './utils/omit';\nimport { FieldValues, FormProviderProps, UseFormReturn } from './types';\n\nconst FormContext = React.createContext<UseFormReturn | null>(null);\n\nFormContext.displayName = 'RHFContext';\n\nexport const useFormContext = <\n TFieldValues extends FieldValues\n>(): UseFormReturn<TFieldValues> =>\n (React.useContext(FormContext) as unknown) as UseFormReturn<TFieldValues>;\n\nexport const FormProvider = <TFieldValues extends FieldValues>(\n props: FormProviderProps<TFieldValues>,\n) => (\n <FormContext.Provider\n value={(omit(props, 'children') as unknown) as UseFormReturn}\n >\n {props.children}\n </FormContext.Provider>\n);\n","import * as React from 'react';\n\nimport { VALIDATION_MODE } from '../constants';\nimport { FormState, FormStateProxy, ReadFormState } from '../types';\n\nexport default <TFieldValues>(\n isProxyEnabled: boolean,\n formState: FormState<TFieldValues>,\n readFormStateRef: React.MutableRefObject<ReadFormState>,\n localReadFormStateRef?: React.MutableRefObject<ReadFormState>,\n isRoot = true,\n) =>\n isProxyEnabled\n ? new Proxy(formState, {\n get: (obj, prop: keyof FormStateProxy) => {\n if (prop in obj) {\n if (readFormStateRef.current[prop] !== VALIDATION_MODE.all) {\n readFormStateRef.current[prop] = isRoot\n ? VALIDATION_MODE.all\n : true;\n }\n localReadFormStateRef &&\n (localReadFormStateRef.current[prop] = true);\n return obj[prop];\n }\n\n return undefined;\n },\n })\n : formState;\n","import { EmptyObject } from '../types';\n\nimport isObject from './isObject';\n\nexport default (value: unknown): value is EmptyObject =>\n isObject(value) && !Object.keys(value).length;\n","import { VALIDATION_MODE } from '../constants';\nimport { ReadFormState } from '../types';\nimport isEmptyObject from '../utils/isEmptyObject';\n\nexport default <T, K extends ReadFormState>(\n formState: T,\n readFormStateRef: K,\n isRoot?: boolean,\n) =>\n isEmptyObject(formState) ||\n Object.keys(formState).length >= Object.keys(readFormStateRef).length ||\n Object.keys(formState).find(\n (key) =>\n readFormStateRef[key as keyof ReadFormState] ===\n (isRoot ? VALIDATION_MODE.all : true),\n );\n","import { UNDEFINED } from '../constants';\n\nexport default typeof window !== UNDEFINED &&\n typeof window.HTMLElement !== UNDEFINED &&\n typeof document !== UNDEFINED;\n","import { UNDEFINED } from '../constants';\n\nimport isWeb from './isWeb';\n\nconst isProxyEnabled = isWeb ? 'Proxy' in window : typeof Proxy !== UNDEFINED;\n\nexport default isProxyEnabled;\n","import * as React from 'react';\n\nimport getProxyFormState from './logic/getProxyFormState';\nimport shouldRenderFormState from './logic/shouldRenderFormState';\nimport isProxyEnabled from './utils/isProxyEnabled';\nimport {\n FieldValues,\n FormState,\n UseFormStateProps,\n UseFormStateReturn,\n} from './types';\nimport { useFormContext } from './useFormContext';\n\nfunction useFormState<TFieldValues extends FieldValues = FieldValues>(\n props?: UseFormStateProps<TFieldValues>,\n): UseFormStateReturn<TFieldValues> {\n const methods = useFormContext();\n const { formStateRef, formStateSubjectRef, readFormStateRef } =\n (props && props.control) || methods.control;\n\n const [formState, updateFormState] = React.useState(formStateRef.current);\n const readFormState = React.useRef({\n isDirty: false,\n dirtyFields: false,\n touchedFields: false,\n isValidating: false,\n isValid: false,\n errors: false,\n });\n\n React.useEffect(() => {\n const formStateSubscription = formStateSubjectRef.current.subscribe({\n next: (formState) => {\n shouldRenderFormState(formState, readFormState.current) &&\n updateFormState({\n ...formStateRef.current,\n ...formState,\n });\n },\n });\n\n return () => formStateSubscription.unsubscribe();\n }, []);\n\n return getProxyFormState<TFieldValues>(\n isProxyEnabled,\n formState as FormState<TFieldValues>,\n readFormStateRef,\n readFormState,\n false,\n );\n}\n\nexport { useFormState };\n","import * as React from 'react';\n\nimport getControllerValue from './logic/getControllerValue';\nimport isNameInFieldArray from './logic/isNameInFieldArray';\nimport get from './utils/get';\nimport isUndefined from './utils/isUndefined';\nimport { EVENTS } from './constants';\nimport {\n FieldPath,\n FieldValues,\n InternalFieldName,\n UseControllerProps,\n UseControllerReturn,\n} from './types';\nimport { useFormContext } from './useFormContext';\nimport { useFormState } from './useFormState';\n\nexport function useController<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>({\n name,\n rules,\n defaultValue,\n control,\n}: UseControllerProps<TFieldValues, TName>): UseControllerReturn<\n TFieldValues,\n TName\n> {\n const methods = useFormContext<TFieldValues>();\n const {\n defaultValuesRef,\n register,\n fieldsRef,\n fieldArrayNamesRef,\n controllerSubjectRef,\n } = control || methods.control;\n\n const { onChange, onBlur, ref } = register(name, rules);\n const [value, setInputStateValue] = React.useState(\n isUndefined(get(fieldsRef.current, name)._f.value) ||\n isNameInFieldArray(fieldArrayNamesRef.current, name)\n ? isUndefined(defaultValue)\n ? get(defaultValuesRef.current, name)\n : defaultValue\n : get(fieldsRef.current, name)._f.value,\n );\n const formState = useFormState({\n control: control || methods.control,\n });\n get(fieldsRef.current, name)._f.value = value;\n\n React.useEffect(() => {\n const controllerSubscription = controllerSubjectRef.current.subscribe({\n next: (data) =>\n (!data.name || name === data.name) &&\n setInputStateValue(get(data.values, name)),\n });\n\n (ref as (instance: any) => void)({\n target: value,\n });\n\n return () => controllerSubscription.unsubscribe();\n }, [name]);\n\n return {\n field: {\n onChange: (event: any) => {\n const value = getControllerValue(event);\n setInputStateValue(value);\n\n onChange({\n target: {\n value,\n name: name as InternalFieldName,\n },\n type: EVENTS.CHANGE,\n });\n },\n onBlur: () => {\n onBlur({\n target: {\n name: name as InternalFieldName,\n },\n type: EVENTS.BLUR,\n });\n },\n name,\n value,\n ref,\n },\n formState,\n fieldState: Object.defineProperties(\n {},\n {\n invalid: {\n get() {\n return !!get(formState.errors, name);\n },\n },\n isDirty: {\n get() {\n return !!get(formState.dirtyFields, name);\n },\n },\n isTouched: {\n get() {\n return !!get(formState.touchedFields, name);\n },\n },\n error: {\n get() {\n return get(formState.errors, name);\n },\n },\n },\n ),\n };\n}\n","import { InternalFieldName } from '../types';\n\nimport getNodeParentName from './getNodeParentName';\n\nexport default (names: Set<InternalFieldName>, name: InternalFieldName) =>\n [...names].some((current) => getNodeParentName(name) === current);\n","import isCheckBoxInput from '../utils/isCheckBoxInput';\nimport isObject from '../utils/isObject';\n\ntype Event = { target: any };\n\nexport default (event: unknown) =>\n isObject(event) && (event as Event).target\n ? isCheckBoxInput((event as Event).target)\n ? (event as Event).target.checked\n : (event as Event).target.value\n : event;\n","import {\n InternalFieldErrors,\n InternalFieldName,\n ValidateResult,\n} from '../types';\n\nexport default (\n name: InternalFieldName,\n validateAllFieldCriteria: boolean,\n errors: InternalFieldErrors,\n type: string,\n message: ValidateResult,\n) =>\n validateAllFieldCriteria\n ? {\n ...errors[name],\n types: {\n ...(errors[name] && errors[name]!.types ? errors[name]!.types : {}),\n [type]: message || true,\n },\n }\n : {};\n","export default (value: string) => /^\\w*$/.test(value);\n","import compact from './compact';\n\nexport default (input: string): string[] =>\n compact(input.replace(/[\"|']|\\]/g, '').split(/\\.|\\[/));\n","import { FieldValues } from '../types';\n\nimport isKey from './isKey';\nimport isObject from './isObject';\nimport stringToPath from './stringToPath';\n\nexport default function set(\n object: FieldValues,\n path: string,\n value?: unknown,\n) {\n let index = -1;\n const tempPath = isKey(path) ? [path] : stringToPath(path);\n const length = tempPath.length;\n const lastIndex = length - 1;\n\n while (++index < length) {\n const key = tempPath[index];\n let newValue = value;\n\n if (index !== lastIndex) {\n const objValue = object[key];\n newValue =\n isObject(objValue) || Array.isArray(objValue)\n ? objValue\n : !isNaN(+tempPath[index + 1])\n ? []\n : {};\n }\n object[key] = newValue;\n object = object[key];\n }\n return object;\n}\n","import { FieldRefs, InternalFieldName } from '../types';\nimport { get } from '../utils';\nimport isObject from '../utils/isObject';\nimport isUndefined from '../utils/isUndefined';\nimport omit from '../utils/omit';\n\nconst focusFieldBy = (\n fields: FieldRefs,\n callback: (name: string) => boolean,\n fieldsNames?: Set<InternalFieldName>,\n) => {\n for (const key of fieldsNames || Object.keys(fields)) {\n const field = get(fields, key);\n\n if (field) {\n const _f = field._f;\n const current = omit(field, '_f');\n\n if (_f && callback(_f.name)) {\n if (_f.ref.focus && isUndefined(_f.ref.focus())) {\n break;\n } else if (_f.refs) {\n _f.refs[0].focus();\n break;\n }\n } else if (isObject(current)) {\n focusFieldBy(current, callback);\n }\n }\n }\n};\n\nexport default focusFieldBy;\n","import * as React from 'react';\n\nimport { FieldRefs, FieldValues } from '../types';\nimport omit from '../utils/omit';\nimport set from '../utils/set';\n\nconst getFieldsValues = (\n fieldsRef: React.MutableRefObject<FieldRefs>,\n defaultValuesRef: React.MutableRefObject<FieldValues> = { current: {} },\n output: Record<string, any> = {},\n): any => {\n for (const name in fieldsRef.current) {\n const field = fieldsRef.current[name];\n\n if (field) {\n const _f = field._f;\n const current = omit(field, '_f');\n\n set(\n output,\n name,\n _f\n ? _f.ref.disabled || (_f.refs && _f.refs.every((ref) => ref.disabled))\n ? undefined\n : _f.value\n : Array.isArray(field)\n ? []\n : {},\n );\n\n if (current) {\n getFieldsValues(\n {\n current,\n },\n defaultValuesRef,\n output[name],\n );\n }\n }\n }\n\n return {\n ...defaultValuesRef.current,\n ...output,\n };\n};\n\nexport default getFieldsValues;\n","import { UNDEFINED } from '../constants';\n\nexport default () => {\n const d =\n typeof performance === UNDEFINED ? Date.now() : performance.now() * 1000;\n\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16 + d) % 16 | 0;\n\n return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);\n });\n};\n","import { FieldValues } from '../types';\n\nimport generateId from './generateId';\n\nexport default <\n TFieldArrayValues extends FieldValues = FieldValues,\n TKeyName extends string = 'id'\n>(\n values: Partial<TFieldArrayValues>[] = [],\n keyName: TKeyName,\n): any =>\n values.map((value: Partial<TFieldArrayValues>) => ({\n [keyName]: (value && value[keyName]) || generateId(),\n ...value,\n }));\n","import { Primitive } from '../types';\n\nimport isNullOrUndefined from './isNullOrUndefined';\nimport { isObjectType } from './isObject';\n\nexport default (value: unknown): value is Primitive =>\n isNullOrUndefined(value) || !isObjectType(value);\n","import * as React from 'react';\n\nimport isObject from '../utils/isObject';\n\nimport isPrimitive from './isPrimitive';\n\nexport default function deepEqual(\n object1: any,\n object2: any,\n isErrorObject?: boolean,\n) {\n if (\n isPrimitive(object1) ||\n isPrimitive(object2) ||\n object1 instanceof Date ||\n object2 instanceof Date\n ) {\n return object1 === object2;\n }\n\n if (!React.isValidElement(object1)) {\n const keys1 = Object.keys(object1);\n const keys2 = Object.keys(object2);\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n for (const key of keys1) {\n const val1 = object1[key];\n\n if (!(isErrorObject && key === 'ref')) {\n const val2 = object2[key];\n\n if (\n (isObject(val1) || Array.isArray(val1)) &&\n (isObject(val2) || Array.isArray(val2))\n ? !deepEqual(val1, val2, isErrorObject)\n : val1 !== val2\n ) {\n return false;\n }\n }\n }\n }\n\n return true;\n}\n","import { get } from '../utils';\nimport deepEqual from '../utils/deepEqual';\nimport { deepMerge } from '../utils/deepMerge';\nimport set from '../utils/set';\n\nfunction setDirtyFields<\n T extends Record<string, unknown>[],\n U extends Record<string, unknown>[],\n K extends Record<string, boolean | []>\n>(\n values: T,\n defaultValues: U,\n dirtyFields: Record<string, boolean | []>[],\n parentNode?: K,\n parentName?: keyof K,\n) {\n let index = -1;\n\n while (++index < values.length) {\n for (const key in values[index]) {\n if (Array.isArray(values[index][key])) {\n !dirtyFields[index] && (dirtyFields[index] = {});\n dirtyFields[index][key] = [];\n setDirtyFields(\n values[index][key] as T,\n get(defaultValues[index] || {}, key, []),\n dirtyFields[index][key] as [],\n dirtyFields[index],\n key,\n );\n } else {\n deepEqual(get(defaultValues[index] || {}, key), values[index][key])\n ? set(dirtyFields[index] || {}, key)\n : (dirtyFields[index] = {\n ...dirtyFields[index],\n [key]: true,\n });\n }\n }\n\n parentNode &&\n !dirtyFields.length &&\n delete parentNode[parentName as keyof K];\n }\n\n return dirtyFields;\n}\n\nexport default <T extends U, U extends Record<string, unknown>[]>(\n values: T,\n defaultValues: U,\n dirtyFields: Record<string, boolean | []>[],\n) =>\n deepMerge(\n setDirtyFields(values, defaultValues, dirtyFields.slice(0, values.length)),\n setDirtyFields(defaultValues, values, dirtyFields.slice(0, values.length)),\n );\n","import isObject from './isObject';\nimport isPrimitive from './isPrimitive';\n\nexport function deepMerge<\n T extends Record<keyof T, any>,\n U extends Record<keyof U, any>\n>(target: T, source: U): T & U {\n if (isPrimitive(target) || isPrimitive(source)) {\n return source;\n }\n\n for (const key in source) {\n const targetValue = target[key];\n const sourceValue = source[key];\n\n try {\n target[key] =\n (isObject(targetValue) && isObject(sourceValue)) ||\n (Array.isArray(targetValue) && Array.isArray(sourceValue))\n ? deepMerge(targetValue, sourceValue)\n : sourceValue;\n } catch {}\n }\n\n return target;\n}\n","export default function append<T>(data: T[], value: T | T[]): T[] {\n return [...data, ...(Array.isArray(value) ? value : [value])];\n}\n","export default <T>(value: T | T[]): undefined[] | undefined =>\n Array.isArray(value) ? Array(value.length).fill(undefined) : undefined;\n","export default function insert<T>(data: T[], index: number): (T | undefined)[];\nexport default function insert<T>(\n data: T[],\n index: number,\n value: T | T[],\n): T[];\nexport default function insert<T>(\n data: T[],\n index: number,\n value?: T | T[],\n): (T | undefined)[] {\n return [\n ...data.slice(0, index),\n ...(Array.isArray(value) ? value : [value]),\n ...data.slice(index),\n ];\n}\n","import isUndefined from './isUndefined';\n\nexport default <T>(\n data: (T | undefined)[],\n from: number,\n to: number,\n): (T | undefined)[] => {\n if (Array.isArray(data)) {\n if (isUndefined(data[to])) {\n data[to] = undefined;\n }\n data.splice(to, 0, data.splice(from, 1)[0]);\n return data;\n }\n\n return [];\n};\n","export default function prepend<T>(data: T[], value: T | T[]): T[] {\n return [...(Array.isArray(value) ? value : [value]), ...data];\n}\n","import compact from './compact';\nimport isUndefined from './isUndefined';\n\nfunction removeAtIndexes<T>(data: T[], indexes: number[]): T[] {\n let i = 0;\n const temp = [...data];\n\n for (const index of indexes) {\n temp.splice(index - i, 1);\n i++;\n }\n\n return compact(temp).length ? temp : [];\n}\n\nexport default <T>(data: T[], index?: number | number[]): T[] =>\n isUndefined(index)\n ? []\n : removeAtIndexes(\n data,\n (Array.isArray(index) ? index : [index]).sort((a, b) => a - b),\n );\n","export default <T>(data: T[], indexA: number, indexB: number): void => {\n data[indexA] = [data[indexB], (data[indexB] = data[indexA])][0];\n};\n","export default (value: unknown): value is boolean => typeof value === 'boolean';\n","import isBoolean from './isBoolean';\nimport isEmptyObject from './isEmptyObject';\nimport isKey from './isKey';\nimport isObject from './isObject';\nimport isUndefined from './isUndefined';\nimport stringToPath from './stringToPath';\n\nfunction baseGet(object: any, updatePath: (string | number)[]) {\n const length = updatePath.slice(0, -1).length;\n let index = 0;\n\n while (index < length) {\n object = isUndefined(object) ? index++ : object[updatePath[index++]];\n }\n\n return object;\n}\n\nexport default function unset(object: any, path: string) {\n const updatePath = isKey(path) ? [path] : stringToPath(path);\n const childObject =\n updatePath.length == 1 ? object : baseGet(object, updatePath);\n const key = updatePath[updatePath.length - 1];\n let previousObjRef;\n\n if (childObject) {\n delete childObject[key];\n }\n\n for (let k = 0; k < updatePath.slice(0, -1).length; k++) {\n let index = -1;\n let objectRef;\n const currentPaths = updatePath.slice(0, -(k + 1));\n const currentPathsLength = currentPaths.length - 1;\n\n if (k > 0) {\n previousObjRef = object;\n }\n\n while (++index < currentPaths.length) {\n const item = currentPaths[index];\n objectRef = objectRef ? objectRef[item] : object[item];\n\n if (\n currentPathsLength === index &&\n ((isObject(objectRef) && isEmptyObject(objectRef)) ||\n (Array.isArray(objectRef) &&\n !objectRef.filter(\n (data) =>\n (isObject(data) && !isEmptyObject(data)) || isBoolean(data),\n ).length))\n ) {\n previousObjRef ? delete previousObjRef[item] : delete object[item];\n }\n\n previousObjRef = objectRef;\n }\n }\n\n return object;\n}\n","import { Field, FieldRefs, InternalFieldName } from '../types';\nimport { get } from '../utils';\nimport isKey from '../utils/isKey';\nimport set from '../utils/set';\n\nexport default function getFields(\n fieldsNames: Set<InternalFieldName> | InternalFieldName[],\n fieldsRefs: FieldRefs,\n) {\n const currentFields: Record<InternalFieldName, Field['_f']> = {};\n\n for (const name of fieldsNames) {\n const field = get(fieldsRefs, name) as Field | undefined;\n\n if (field) {\n !isKey(name)\n ? set(currentFields, name, field._f)\n : (currentFields[name] = field._f);\n }\n }\n\n return currentFields;\n}\n","import { FieldElement } from '../types';\n\nexport default (element: FieldElement): element is HTMLInputElement =>\n element.type === 'file';\n","import { SELECT } from '../constants';\nimport { FieldElement } from '../types';\n\nexport default (element: FieldElement): element is HTMLSelectElement =>\n element.type === `${SELECT}-multiple`;\n","import { FieldElement } from '../types';\n\nexport default (element: FieldElement): element is HTMLInputElement =>\n element.type === 'radio';\n","import isUndefined from '../utils/isUndefined';\n\ntype CheckboxFieldResult = {\n isValid: boolean;\n value: string | string[] | boolean | undefined;\n};\n\nconst defaultResult: CheckboxFieldResult = {\n value: false,\n isValid: false,\n};\n\nconst validResult = { value: true, isValid: true };\n\nexport default (options?: HTMLInputElement[]): CheckboxFieldResult => {\n if (Array.isArray(options)) {\n if (options.length > 1) {\n const values = options\n .filter((option) => option && option.checked && !option.disabled)\n .map((option) => option.value);\n return { value: values, isValid: !!values.length };\n }\n\n return options[0].checked && !options[0].disabled\n ? // @ts-expect-error expected to work in the browser\n options[0].attributes && !isUndefined(options[0].attributes.value)\n ? isUndefined(options[0].value) || options[0].value === ''\n ? validResult\n : { value: options[0].value, isValid: true }\n : validResult\n : defaultResult;\n }\n\n return defaultResult;\n};\n","type RadioFieldResult = {\n isValid: boolean;\n value: number | string | null;\n};\n\nconst defaultReturn: RadioFieldResult = {\n isValid: false,\n value: null,\n};\n\nexport default (options?: HTMLInputElement[]): RadioFieldResult =>\n Array.isArray(options)\n ? options.reduce(\n (previous, option): RadioFieldResult =>\n option && option.checked && !option.disabled\n ? {\n isValid: true,\n value: option.value,\n }\n : previous,\n defaultReturn,\n )\n : defaultReturn;\n","import { Field } from '../types';\nimport isCheckBox from '../utils/isCheckBoxInput';\nimport isFileInput from '../utils/isFileInput';\nimport isMultipleSelect from '../utils/isMultipleSelect';\nimport isRadioInput from '../utils/isRadioInput';\nimport isUndefined from '../utils/isUndefined';\n\nimport getCheckboxValue from './getCheckboxValue';\nimport getFieldValueAs from './getFieldValueAs';\nimport getMultipleSelectValue from './getMultipleSelectValue';\nimport getRadioValue from './getRadioValue';\n\nexport default function getFieldValue(field?: Field) {\n if (field && field._f) {\n const ref = field._f.ref;\n\n if (ref.disabled) {\n return;\n }\n\n if (isFileInput(ref)) {\n return ref.files;\n }\n\n if (isRadioInput(ref)) {\n return getRadioValue(field._f.refs).value;\n }\n\n if (isMultipleSelect(ref)) {\n return getMultipleSelectValue(ref.options);\n }\n\n if (isCheckBox(ref)) {\n return getCheckboxValue(field._f.refs).value;\n }\n\n return getFieldValueAs(\n isUndefined(ref.value) ? field._f.ref.value : ref.value,\n field._f,\n );\n }\n}\n","export default (\n options: HTMLOptionElement[] | HTMLOptionsCollection,\n): string[] =>\n [...options]\n .filter(({ selected }): boolean => selected)\n .map(({ value }): string => value);\n","import { Field } from '../types';\n\nexport default (\n value: any,\n { valueAsNumber, valueAsDate, setValueAs }: Field['_f'],\n) =>\n valueAsNumber\n ? value === ''\n ? NaN\n : +value\n : valueAsDate\n ? new Date(value)\n : setValueAs\n ? setValueAs(value)\n : value;\n","export default ({\n isOnBlur,\n isOnChange,\n isOnTouch,\n isTouched,\n isReValidateOnBlur,\n isReValidateOnChange,\n isBlurEvent,\n isSubmitted,\n isOnAll,\n}: {\n isOnAll?: boolean;\n isOnBlur?: boolean;\n isOnChange?: boolean;\n isReValidateOnBlur?: boolean;\n isReValidateOnChange?: boolean;\n isBlurEvent?: boolean;\n isSubmitted?: boolean;\n isOnTouch?: boolean;\n isTouched?: boolean;\n}) => {\n if (isOnAll) {\n return false;\n } else if (!isSubmitted && isOnTouch) {\n return !(isTouched || isBlurEvent);\n } else if (isSubmitted ? isReValidateOnBlur : isOnBlur) {\n return !isBlurEvent;\n } else if (isSubmitted ? isReValidateOnChange : isOnChange) {\n return isBlurEvent;\n }\n return true;\n};\n","export default (value: unknown): value is Function =>\n typeof value === 'function';\n","export default (value: unknown): value is string => typeof value === 'string';\n","import * as React from 'react';\n\nimport { Message } from '../types';\nimport isString from '../utils/isString';\n\nexport default (value: unknown): value is Message =>\n isString(value) || React.isValidElement(value as JSX.Element);\n","export default (value: unknown): value is RegExp => value instanceof RegExp;\n","import { FieldError, Ref, ValidateResult } from '../types';\nimport isBoolean from '../utils/isBoolean';\nimport isMessage from '../utils/isMessage';\n\nexport default function getValidateError(\n result: ValidateResult,\n ref: Ref,\n type = 'validate',\n): FieldError | void {\n if (isMessage(result) || (isBoolean(result) && !result)) {\n return {\n type,\n message: isMessage(result) ? result : '',\n ref,\n };\n }\n}\n","import { ValidationRule } from '../types';\nimport isObject from '../utils/isObject';\nimport isRegex from '../utils/isRegex';\n\nexport default (validationData?: ValidationRule) =>\n isObject(validationData) && !isRegex(validationData)\n ? validationData\n : {\n value: validationData,\n message: '',\n };\n","import { INPUT_VALIDATION_RULES } from '../constants';\nimport { Field, FieldError, InternalFieldErrors, Message } from '../types';\nimport isBoolean from '../utils/isBoolean';\nimport isCheckBoxInput from '../utils/isCheckBoxInput';\nimport isEmptyObject from '../utils/isEmptyObject';\nimport isFileInput from '../utils/isFileInput';\nimport isFunction from '../utils/isFunction';\nimport isMessage from '../utils/isMessage';\nimport isNullOrUndefined from '../utils/isNullOrUndefined';\nimport isObject from '../utils/isObject';\nimport isRadioInput from '../utils/isRadioInput';\nimport isRegex from '../utils/isRegex';\nimport isString from '../utils/isString';\n\nimport appendErrors from './appendErrors';\nimport getCheckboxValue from './getCheckboxValue';\nimport getRadioValue from './getRadioValue';\nimport getValidateError from './getValidateError';\nimport getValueAndMessage from './getValueAndMessage';\n\nexport default async (\n {\n _f: {\n ref,\n refs,\n required,\n maxLength,\n minLength,\n min,\n max,\n pattern,\n validate,\n name,\n value: inputValue,\n valueAsNumber,\n },\n }: Field,\n validateAllFieldCriteria: boolean,\n): Promise<InternalFieldErrors> => {\n const error: InternalFieldErrors = {};\n const isRadio = isRadioInput(ref);\n const isCheckBox = isCheckBoxInput(ref);\n const isRadioOrCheckbox = isRadio || isCheckBox;\n const isEmpty =\n ((valueAsNumber || isFileInput(ref)) && !ref.value) ||\n inputValue === '' ||\n (Array.isArray(inputValue) && !inputValue.length);\n const appendErrorsCurry = appendErrors.bind(\n null,\n name,\n validateAllFieldCriteria,\n error,\n );\n const getMinMaxMessage = (\n exceedMax: boolean,\n maxLengthMessage: Message,\n minLengthMessage: Message,\n maxType = INPUT_VALIDATION_RULES.maxLength,\n minType = INPUT_VALIDATION_RULES.minLength,\n ) => {\n const message = exceedMax ? maxLengthMessage : minLengthMessage;\n error[name] = {\n type: exceedMax ? maxType : minType,\n message,\n ref,\n ...appendErrorsCurry(exceedMax ? maxType : minType, message),\n };\n };\n\n if (\n required &&\n ((!isRadio && !isCheckBox && (isEmpty || isNullOrUndefined(inputValue))) ||\n (isBoolean(inputValue) && !inputValue) ||\n (isCheckBox && !getCheckboxValue(refs).isValid) ||\n (isRadio && !getRadioValue(refs).isValid))\n ) {\n const { value, message } = isMessage(required)\n ? { value: !!required, message: required }\n : getValueAndMessage(required);\n\n if (value) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.required,\n message,\n ref: isRadioOrCheckbox ? (refs || [])[0] || {} : ref,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.required, message),\n };\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n }\n\n if (\n (!isNullOrUndefined(min) || !isNullOrUndefined(max)) &&\n inputValue !== ''\n ) {\n let exceedMax;\n let exceedMin;\n const maxOutput = getValueAndMessage(max);\n const minOutput = getValueAndMessage(min);\n\n if (!isNaN(inputValue)) {\n const valueNumber =\n (ref as HTMLInputElement).valueAsNumber || parseFloat(inputValue);\n if (!isNullOrUndefined(maxOutput.value)) {\n exceedMax = valueNumber > maxOutput.value;\n }\n if (!isNullOrUndefined(minOutput.value)) {\n exceedMin = valueNumber < minOutput.value;\n }\n } else {\n const valueDate =\n (ref as HTMLInputElement).valueAsDate || new Date(inputValue);\n if (isString(maxOutput.value)) {\n exceedMax = valueDate > new Date(maxOutput.value);\n }\n if (isString(minOutput.value)) {\n exceedMin = valueDate < new Date(minOutput.value);\n }\n }\n\n if (exceedMax || exceedMin) {\n getMinMaxMessage(\n !!exceedMax,\n maxOutput.message,\n minOutput.message,\n INPUT_VALIDATION_RULES.max,\n INPUT_VALIDATION_RULES.min,\n );\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n }\n\n if (isString(inputValue) && !isEmpty && (maxLength || minLength)) {\n const maxLengthOutput = getValueAndMessage(maxLength);\n const minLengthOutput = getValueAndMessage(minLength);\n const exceedMax =\n !isNullOrUndefined(maxLengthOutput.value) &&\n inputValue.length > maxLengthOutput.value;\n const exceedMin =\n !isNullOrUndefined(minLengthOutput.value) &&\n inputValue.length < minLengthOutput.value;\n\n if (exceedMax || exceedMin) {\n getMinMaxMessage(\n exceedMax,\n maxLengthOutput.message,\n minLengthOutput.message,\n );\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n }\n\n if (isString(inputValue) && pattern && !isEmpty) {\n const { value: patternValue, message } = getValueAndMessage(pattern);\n\n if (isRegex(patternValue) && !inputValue.match(patternValue)) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.pattern,\n message,\n ref,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.pattern, message),\n };\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n }\n\n if (validate) {\n const validateRef = isRadioOrCheckbox && refs ? refs[0] : ref;\n\n if (isFunction(validate)) {\n const result = await validate(inputValue);\n const validateError = getValidateError(result, validateRef);\n\n if (validateError) {\n error[name] = {\n ...validateError,\n ...appendErrorsCurry(\n INPUT_VALIDATION_RULES.validate,\n validateError.message,\n ),\n };\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n } else if (isObject(validate)) {\n let validationResult = {} as FieldError;\n for (const [key, validateFunction] of Object.entries(validate)) {\n if (!isEmptyObject(validationResult) && !validateAllFieldCriteria) {\n break;\n }\n\n const validateResult = await validateFunction(inputValue);\n const validateError = getValidateError(\n validateResult,\n validateRef,\n key,\n );\n\n if (validateError) {\n validationResult = {\n ...validateError,\n ...appendErrorsCurry(key, validateError.message),\n };\n\n if (validateAllFieldCriteria) {\n error[name] = validationResult;\n }\n }\n }\n\n if (!isEmptyObject(validationResult)) {\n error[name] = {\n ref: validateRef,\n ...validationResult,\n };\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n }\n }\n\n return error;\n};\n","import { VALIDATION_MODE } from '../constants';\nimport { Mode } from '../types';\n\nexport default (\n mode?: Mode,\n): {\n isOnSubmit: boolean;\n isOnBlur: boolean;\n isOnChange: boolean;\n isOnAll: boolean;\n isOnTouch: boolean;\n} => ({\n isOnSubmit: !mode || mode === VALIDATION_MODE.onSubmit,\n isOnBlur: mode === VALIDATION_MODE.onBlur,\n isOnChange: mode === VALIDATION_MODE.onChange,\n isOnAll: mode === VALIDATION_MODE.all,\n isOnTouch: mode === VALIDATION_MODE.onTouched,\n});\n","export default (value: any): value is HTMLElement =>\n value instanceof HTMLElement;\n","export type Observer<T> = {\n next: (value: T) => void;\n};\n\ntype TearDown = () => void;\n\nexport type SubjectType<T> = {\n next: (value: T) => void;\n subscribe: (\n value: Observer<T>,\n ) => {\n unsubscribe: TearDown;\n };\n};\n\nexport class Subscription {\n private tearDowns: TearDown[] = [];\n\n add(tearDown: TearDown) {\n this.tearDowns.push(tearDown);\n }\n\n unsubscribe() {\n for (const teardown of this.tearDowns) {\n teardown();\n }\n this.tearDowns = [];\n }\n}\n\nclass Subscriber<T> implements Observer<T> {\n closed = false;\n\n constructor(private observer: Observer<T>, subscription: Subscription) {\n subscription.add(() => (this.closed = true));\n }\n\n next(value: T) {\n if (!this.closed) {\n this.observer.next(value);\n }\n }\n}\n\nexport default class Subject<T> {\n observers: Observer<T>[];\n\n constructor() {\n this.observers = [];\n }\n\n next(value: T) {\n for (const observer of this.observers) {\n observer.next(value);\n }\n }\n\n subscribe(observer: Observer<T>) {\n const subscription = new Subscription();\n const subscriber = new Subscriber(observer, subscription);\n this.observers.push(subscriber);\n\n return subscription;\n }\n\n unsubscribe() {\n this.observers = [];\n }\n}\n","import * as React from 'react';\n\nimport focusFieldBy from './logic/focusFieldBy';\nimport getFields from './logic/getFields';\nimport getFieldsValues from './logic/getFieldsValues';\nimport getFieldValue from './logic/getFieldValue';\nimport getNodeParentName from './logic/getNodeParentName';\nimport getProxyFormState from './logic/getProxyFormState';\nimport setFieldArrayDirtyFields from './logic/setFieldArrayDirtyFields';\nimport shouldRenderFormState from './logic/shouldRenderFormState';\nimport skipValidation from './logic/skipValidation';\nimport validateField from './logic/validateField';\nimport compact from './utils/compact';\nimport deepEqual from './utils/deepEqual';\nimport get from './utils/get';\nimport getValidationModes from './utils/getValidationModes';\nimport isCheckBoxInput from './utils/isCheckBoxInput';\nimport isEmptyObject from './utils/isEmptyObject';\nimport isFileInput from './utils/isFileInput';\nimport isFunction from './utils/isFunction';\nimport isHTMLElement from './utils/isHTMLElement';\nimport isMultipleSelect from './utils/isMultipleSelect';\nimport isNullOrUndefined from './utils/isNullOrUndefined';\nimport isProxyEnabled from './utils/isProxyEnabled';\nimport isRadioInput from './utils/isRadioInput';\nimport isRadioOrCheckboxFunction from './utils/isRadioOrCheckbox';\nimport isString from './utils/isString';\nimport isUndefined from './utils/isUndefined';\nimport isWeb from './utils/isWeb';\nimport omit from './utils/omit';\nimport set from './utils/set';\nimport Subject from './utils/Subject';\nimport unset from './utils/unset';\nimport { EVENTS, UNDEFINED, VALIDATION_MODE } from './constants';\nimport {\n ChangeHandler,\n DeepPartial,\n DefaultValues,\n EventType,\n Field,\n FieldArrayDefaultValues,\n FieldError,\n FieldName,\n FieldNamesMarkedBoolean,\n FieldPath,\n FieldRefs,\n FieldValues,\n FormState,\n GetFormIsDirty,\n InternalFieldName,\n InternalNameSet,\n KeepStateOptions,\n Path,\n PathValue,\n ReadFormState,\n Ref,\n RegisterOptions,\n SetFieldValue,\n SetValueConfig,\n UnpackNestedValue,\n UseFormClearErrors,\n UseFormGetValues,\n UseFormHandleSubmit,\n UseFormProps,\n UseFormRegister,\n UseFormRegisterReturn,\n UseFormReset,\n UseFormReturn,\n UseFormSetError,\n UseFormSetValue,\n UseFormTrigger,\n UseFormUnregister,\n UseFormWatch,\n WatchInternal,\n WatchObserver,\n} from './types';\n\nconst isWindowUndefined = typeof window === UNDEFINED;\n\nexport function useForm<\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object\n>({\n mode = VALIDATION_MODE.onSubmit,\n reValidateMode = VALIDATION_MODE.onChange,\n resolver,\n context,\n defaultValues = {} as DefaultValues<TFieldValues>,\n shouldFocusError = true,\n criteriaMode,\n}: UseFormProps<TFieldValues, TContext> = {}): UseFormReturn<TFieldValues> {\n const fieldsRef = React.useRef<FieldRefs>({});\n const fieldsNamesRef = React.useRef<Set<InternalFieldName>>(new Set());\n const formStateSubjectRef = React.useRef(\n new Subject<Partial<FormState<TFieldValues>>>(),\n );\n const watchSubjectRef = React.useRef(\n new Subject<{\n name?: InternalFieldName;\n type?: EventType;\n value?: unknown;\n }>(),\n );\n const controllerSubjectRef = React.useRef(\n new Subject<{\n name?: InternalFieldName;\n values: DefaultValues<TFieldValues>;\n }>(),\n );\n const fieldArraySubjectRef = React.useRef(\n new Subject<{\n name?: InternalFieldName;\n fields: any;\n isReset?: boolean;\n }>(),\n );\n const fieldArrayDefaultValuesRef = React.useRef<FieldArrayDefaultValues>({});\n const watchFieldsRef = React.useRef<InternalNameSet>(new Set());\n const isMountedRef = React.useRef(false);\n const fieldsWithValidationRef = React.useRef<\n FieldNamesMarkedBoolean<TFieldValues>\n >({});\n const validFieldsRef = React.useRef<FieldNamesMarkedBoolean<TFieldValues>>(\n {},\n );\n const defaultValuesRef = React.useRef<DefaultValues<TFieldValues>>(\n defaultValues,\n );\n const isWatchAllRef = React.useRef(false);\n const contextRef = React.useRef(context);\n const resolverRef = React.useRef(resolver);\n const fieldArrayNamesRef = React.useRef<InternalNameSet>(new Set());\n const validationMode = getValidationModes(mode);\n const isValidateAllFieldCriteria = criteriaMode === VALIDATION_MODE.all;\n const [formState, setFormState] = React.useState<FormState<TFieldValues>>({\n isDirty: false,\n isValidating: false,\n dirtyFields: {},\n isSubmitted: false,\n submitCount: 0,\n touchedFields: {},\n isSubmitting: false,\n isSubmitSuccessful: false,\n isValid: !validationMode.isOnSubmit,\n errors: {},\n });\n const readFormStateRef = React.useRef<ReadFormState>({\n isDirty: !isProxyEnabled,\n dirtyFields: !isProxyEnabled,\n touchedFields: !isProxyEnabled,\n isValidating: !isProxyEnabled,\n isValid: !isProxyEnabled,\n errors: !isProxyEnabled,\n });\n const formStateRef = React.useRef(formState);\n\n contextRef.current = context;\n resolverRef.current = resolver;\n\n const getIsValid = () =>\n (formStateRef.current.isValid =\n deepEqual(validFieldsRef.current, fieldsWithValidationRef.current) &&\n isEmptyObject(formStateRef.current.errors));\n\n const shouldRenderBaseOnError = React.useCallback(\n (\n name: InternalFieldName,\n error?: FieldError,\n shouldRender: boolean | null = false,\n state: {\n dirty?: FieldNamesMarkedBoolean<TFieldValues>;\n isDirty?: boolean;\n touched?: FieldNamesMarkedBoolean<TFieldValues>;\n } = {},\n isValid?: boolean,\n isWatched?: boolean,\n ): boolean | void => {\n const previousError = get(formStateRef.current.errors, name);\n\n let shouldReRender =\n shouldRender ||\n !deepEqual(previousError, error, true) ||\n (readFormStateRef.current.isValid &&\n isUndefined(error) &&\n get(fieldsWithValidationRef.current, name) &&\n !get(validFieldsRef.current, name));\n\n if (error) {\n unset(validFieldsRef.current, name);\n shouldReRender =\n shouldReRender ||\n !previousError ||\n !deepEqual(previousError, error, true);\n set(formStateRef.current.errors, name, error);\n } else {\n if (get(fieldsWithValidationRef.current, name) || resolverRef.current) {\n set(validFieldsRef.current, name, true);\n shouldReRender = shouldReRender || previousError;\n }\n\n unset(formStateRef.current.errors, name);\n }\n\n if (\n (shouldReRender && !isNullOrUndefined(shouldRender)) ||\n !isEmptyObject(state) ||\n isWatched\n ) {\n const updatedFormState = {\n ...state,\n isValid: resolverRef.current ? !!isValid : getIsValid(),\n errors: formStateRef.current.errors,\n };\n\n formStateRef.current = {\n ...formStateRef.current,\n ...updatedFormState,\n };\n\n formStateSubjectRef.current.next(isWatched ? {} : updatedFormState);\n }\n\n formStateSubjectRef.current.next({\n isValidating: false,\n });\n },\n [],\n );\n\n const setFieldValue = React.useCallback(\n (\n name: InternalFieldName,\n rawValue: SetFieldValue<TFieldValues>,\n options: SetValueConfig = {},\n shouldRender?: boolean,\n shouldRegister?: boolean,\n ) => {\n shouldRegister && register(name as Path<TFieldValues>);\n const _f = get(fieldsRef.current, name, {})._f as Field['_f'];\n\n if (_f) {\n const value =\n isWeb && isHTMLElement(_f.ref) && isNullOrUndefined(rawValue)\n ? ''\n : rawValue;\n _f.value = rawValue;\n\n if (isRadioInput(_f.ref)) {\n (_f.refs || []).forEach(\n (radioRef: HTMLInputElement) =>\n (radioRef.checked = radioRef.value === value),\n );\n } else if (isFileInput(_f.ref) && !isString(value)) {\n _f.ref.files = value as FileList;\n } else if (isMultipleSelect(_f.ref)) {\n [..._f.ref.options].forEach(\n (selectRef) =>\n (selectRef.selected = (value as string[]).includes(\n selectRef.value,\n )),\n );\n } else if (isCheckBoxInput(_f.ref) && _f.refs) {\n _f.refs.length > 1\n ? _f.refs.forEach(\n (checkboxRef) =>\n (checkboxRef.checked = Array.isArray(value)\n ? !!(value as []).find(\n (data: string) => data === checkboxRef.value,\n )\n : value === checkboxRef.value),\n )\n : (_f.refs[0].checked = !!value);\n } else {\n _f.ref.value = value;\n }\n\n if (shouldRender) {\n const values = getFieldsValues(fieldsRef);\n set(values, name, rawValue);\n controllerSubjectRef.current.next({\n values: {\n ...defaultValuesRef.current,\n ...values,\n } as DefaultValues<TFieldValues>,\n name,\n });\n }\n\n options.shouldDirty && updateAndGetDirtyState(name, value);\n options.shouldValidate && trigger(name as Path<TFieldValues>);\n }\n },\n [],\n );\n\n const getFormIsDirty: GetFormIsDirty = React.useCallback((name, data) => {\n if (readFormStateRef.current.isDirty) {\n const formValues = getFieldsValues(fieldsRef);\n\n name && data && set(formValues, name, data);\n\n return !deepEqual(formValues, defaultValuesRef.current);\n }\n\n return false;\n }, []);\n\n const updateAndGetDirtyState = React.useCallback(\n (\n name: InternalFieldName,\n inputValue: unknown,\n shouldRender = true,\n ): Partial<\n Pick<FormState<TFieldValues>, 'dirtyFields' | 'isDirty' | 'touchedFields'>\n > => {\n if (\n readFormStateRef.current.isDirty ||\n readFormStateRef.current.dirtyFields\n ) {\n const isFieldDirty = !deepEqual(\n get(defaultValuesRef.current, name),\n inputValue,\n );\n const isDirtyFieldExist = get(formStateRef.current.dirtyFields, name);\n const previousIsDirty = formStateRef.current.isDirty;\n\n isFieldDirty\n ? set(formStateRef.current.dirtyFields, name, true)\n : unset(formStateRef.current.dirtyFields, name);\n\n formStateRef.current.isDirty = getFormIsDirty();\n\n const state = {\n isDirty: formStateRef.current.isDirty,\n dirtyFields: formStateRef.current.dirtyFields,\n };\n\n const isChanged =\n (readFormStateRef.current.isDirty &&\n previousIsDirty !== state.isDirty) ||\n (readFormStateRef.current.dirtyFields &&\n isDirtyFieldExist !== get(formStateRef.current.dirtyFields, name));\n\n isChanged && shouldRender && formStateSubjectRef.current.next(state);\n\n return isChanged ? state : {};\n }\n\n return {};\n },\n [],\n );\n\n const executeValidation = React.useCallback(\n async (\n name: InternalFieldName,\n skipReRender?: boolean | null,\n ): Promise<boolean> => {\n const error = (\n await validateField(\n get(fieldsRef.current, name) as Field,\n isValidateAllFieldCriteria,\n )\n )[name];\n\n shouldRenderBaseOnError(name, error, skipReRender);\n\n return isUndefined(error);\n },\n [isValidateAllFieldCriteria],\n );\n\n const executeSchemaOrResolverValidation = React.useCallback(\n async (\n names: InternalFieldName[],\n currentNames: FieldName<TFieldValues>[] = [],\n ) => {\n const { errors } = await resolverRef.current!(\n getFieldsValues(fieldsRef, defaultValuesRef),\n contextRef.current,\n {\n criteriaMode,\n names: currentNames,\n fields: getFields(fieldsNamesRef.current, fieldsRef.current),\n },\n );\n\n for (const name of names) {\n const error = get(errors, name);\n error\n ? set(formStateRef.current.errors, name, error)\n : unset(formStateRef.current.errors, name);\n }\n\n return errors;\n },\n [criteriaMode],\n );\n\n const validateForm = async (fieldsRef: FieldRefs) => {\n for (const name in fieldsRef) {\n const field = fieldsRef[name];\n\n if (field) {\n const _f = field._f;\n const current = omit(field, '_f');\n\n if (_f) {\n const fieldError = await validateField(\n field,\n isValidateAllFieldCriteria,\n );\n\n if (fieldError[_f.name]) {\n set(formStateRef.current.errors, _f.name, fieldError[_f.name]);\n unset(validFieldsRef.current, _f.name);\n } else if (get(fieldsWithValidationRef.current, _f.name)) {\n set(validFieldsRef.current, _f.name, true);\n unset(formStateRef.current.errors, _f.name);\n }\n }\n\n current && (await validateForm(current));\n }\n }\n };\n\n const trigger: UseFormTrigger<TFieldValues> = React.useCallback(\n async (name) => {\n const fields = isUndefined(name)\n ? Object.keys(fieldsRef.current)\n : Array.isArray(name)\n ? name\n : [name];\n let isValid;\n\n formStateSubjectRef.current.next({\n isValidating: true,\n });\n\n if (resolverRef.current) {\n isValid = isEmptyObject(\n await executeSchemaOrResolverValidation(\n fields,\n isUndefined(name)\n ? undefined\n : (fields as FieldName<TFieldValues>[]),\n ),\n );\n } else {\n isUndefined(name)\n ? await validateForm(fieldsRef.current)\n : await Promise.all(\n fields.map(async (data) => await executeValidation(data, null)),\n );\n }\n\n formStateSubjectRef.current.next({\n errors: formStateRef.current.errors,\n isValidating: false,\n isValid: resolverRef.current ? isValid : getIsValid(),\n });\n },\n [executeSchemaOrResolverValidation, executeValidation],\n );\n\n const setInternalValues = React.useCallback(\n (\n name: FieldPath<TFieldValues>,\n value: UnpackNestedValue<\n PathValue<TFieldValues, FieldPath<TFieldValues>>\n >,\n options: SetValueConfig,\n ) =>\n Object.entries(value).forEach(([inputKey, inputValue]) => {\n const fieldName = `${name}.${inputKey}` as Path<TFieldValues>;\n const field = get(fieldsRef.current, fieldName);\n\n field && !field._f\n ? setInternalValues(\n fieldName,\n inputValue as SetFieldValue<TFieldValues>,\n options,\n )\n : setFieldValue(\n fieldName,\n inputValue as SetFieldValue<TFieldValues>,\n options,\n true,\n !field,\n );\n }),\n [trigger],\n );\n\n const isFieldWatched = (name: FieldPath<TFieldValues>) =>\n isWatchAllRef.current ||\n watchFieldsRef.current.has(name) ||\n watchFieldsRef.current.has((name.match(/\\w+/) || [])[0]);\n\n const updateValidAndValue = (\n name: InternalFieldName,\n options?: RegisterOptions,\n isWithinRefCallback?: boolean,\n ) => {\n let defaultValue;\n const field = get(fieldsRef.current, name) as Field;\n const useFormDefaultValue = get(defaultValuesRef.current, name);\n\n if (\n field &&\n (!isEmptyObject(defaultValuesRef.current) || !isUndefined(field._f.value))\n ) {\n defaultValue = isUndefined(field._f.value)\n ? useFormDefaultValue\n : field._f.value;\n\n if (!isNullOrUndefined(defaultValue)) {\n setFieldValue(name, defaultValue);\n }\n }\n\n if (\n (useFormDefaultValue || (!useFormDefaultValue && isWithinRefCallback)) &&\n options &&\n !validationMode.isOnSubmit &&\n field &&\n readFormStateRef.current.isValid\n ) {\n validateField(field, isValidateAllFieldCriteria).then((error) => {\n isEmptyObject(error)\n ? set(validFieldsRef.current, name, true)\n : unset(validFieldsRef.current, name);\n\n formStateRef.current.isValid &&\n !isEmptyObject(error) &&\n setFormState({ ...formStateRef.current, isValid: getIsValid() });\n });\n }\n\n return defaultValue;\n };\n\n const setValue: UseFormSetValue<TFieldValues> = (\n name,\n value,\n options = {},\n ) => {\n isMountedRef.current = true;\n const field = get(fieldsRef.current, name);\n const isFieldArray = fieldArrayNamesRef.current.has(name);\n\n if (isFieldArray) {\n fieldArraySubjectRef.current.next({\n fields: value,\n name,\n isReset: true,\n });\n\n if (\n (readFormStateRef.current.isDirty ||\n readFormStateRef.current.dirtyFields) &&\n options.shouldDirty\n ) {\n set(\n formStateRef.current.dirtyFields,\n name,\n setFieldArrayDirtyFields(\n value,\n get(defaultValuesRef.current, name, []),\n get(formStateRef.current.dirtyFields, name, []),\n ),\n );\n\n formStateSubjectRef.current.next({\n dirtyFields: formStateRef.current.dirtyFields,\n isDirty: getFormIsDirty(name, value),\n });\n }\n\n !(value as []).length &&\n set(fieldsRef.current, name, []) &&\n set(fieldArrayDefaultValuesRef.current, name, []);\n }\n\n (field && !field._f) || isFieldArray\n ? setInternalValues(name, value, isFieldArray ? {} : options)\n : setFieldValue(name, value, options, true, !field);\n\n isFieldWatched(name) && formStateSubjectRef.current.next({});\n watchSubjectRef.current.next({ name, value });\n };\n\n const handleChange: ChangeHandler = React.useCallback(\n async ({ type, target, target: { value, type: inputType } }) => {\n let name = (target as Ref)!.name;\n let error;\n let isValid;\n const field = get(fieldsRef.current, name) as Field;\n\n if (field) {\n let inputValue = inputType ? getFieldValue(field) : undefined;\n inputValue = isUndefined(inputValue) ? value : inputValue;\n\n const isBlurEvent = type === EVENTS.BLUR;\n const {\n isOnBlur: isReValidateOnBlur,\n isOnChange: isReValidateOnChange,\n } = getValidationModes(reValidateMode);\n const shouldSkipValidation = skipValidation({\n isBlurEvent,\n isTouched: !!get(formStateRef.current.touchedFields, name),\n isSubmitted: formStateRef.current.isSubmitted,\n isReValidateOnBlur,\n isReValidateOnChange,\n ...validationMode,\n });\n const isWatched =\n !isBlurEvent && isFieldWatched(name as FieldPath<TFieldValues>);\n\n if (!isUndefined(inputValue)) {\n field._f.value = inputValue;\n }\n\n const state = updateAndGetDirtyState(name, field._f.value, false);\n\n if (isBlurEvent && !get(formStateRef.current.touchedFields, name)) {\n set(formStateRef.current.touchedFields, name, true);\n readFormStateRef.current.touchedFields &&\n (state.touchedFields = formStateRef.current.touchedFields);\n }\n\n let shouldRender = !isEmptyObject(state) || isWatched;\n\n if (shouldSkipValidation) {\n !isBlurEvent &&\n watchSubjectRef.current.next({\n name,\n type,\n value: inputValue,\n });\n return (\n shouldRender &&\n formStateSubjectRef.current.next(isWatched ? {} : state)\n );\n }\n\n formStateSubjectRef.current.next({\n isValidating: true,\n });\n\n if (resolverRef.current) {\n const { errors } = await resolverRef.current(\n getFieldsValues(fieldsRef, defaultValuesRef),\n contextRef.current,\n {\n criteriaMode,\n fields: getFields([name], fieldsRef.current),\n names: [name as FieldName<TFieldValues>],\n },\n );\n const previousFormIsValid = formStateRef.current.isValid;\n error = get(errors, name);\n\n if (isCheckBoxInput(target as Ref) && !error) {\n const parentNodeName = getNodeParentName(name);\n const currentError = get(errors, parentNodeName, {});\n currentError.type && currentError.message && (error = currentError);\n\n if (\n currentError ||\n get(formStateRef.current.errors, parentNodeName)\n ) {\n name = parentNodeName;\n }\n }\n\n isValid = isEmptyObject(errors);\n\n previousFormIsValid !== isValid && (shouldRender = true);\n } else {\n error = (await validateField(field, isValidateAllFieldCriteria))[\n name\n ];\n }\n\n !isBlurEvent &&\n watchSubjectRef.current.next({\n name,\n type,\n value: inputValue,\n });\n shouldRenderBaseOnError(\n name,\n error,\n shouldRender,\n state,\n isValid,\n isWatched,\n );\n }\n },\n [],\n );\n\n const getValues: UseFormGetValues<TFieldValues> = (\n fieldNames?: FieldPath<TFieldValues> | FieldPath<TFieldValues>[],\n ) => {\n const values = isMountedRef.current\n ? getFieldsValues(fieldsRef, defaultValuesRef)\n : defaultValuesRef.current;\n\n return isUndefined(fieldNames)\n ? values\n : isString(fieldNames)\n ? get(values, fieldNames as InternalFieldName)\n : fieldNames.map((name) => get(values, name as InternalFieldName));\n };\n\n const updateIsValid = React.useCallback(\n async (values = {}) => {\n const previousIsValid = formStateRef.current.isValid;\n\n if (resolver) {\n const { errors } = await resolverRef.current!(\n {\n ...getFieldsValues(fieldsRef, defaultValuesRef),\n ...values,\n },\n contextRef.current,\n {\n criteriaMode,\n fields: getFields(fieldsNamesRef.current, fieldsRef.current),\n },\n );\n formStateRef.current.isValid = isEmptyObject(errors);\n } else {\n getIsValid();\n }\n\n previousIsValid !== formStateRef.current.isValid &&\n formStateSubjectRef.current.next({\n isValid: formStateRef.current.isValid,\n });\n },\n [criteriaMode],\n );\n\n const clearErrors: UseFormClearErrors<TFieldValues> = (name) => {\n name &&\n (Array.isArray(name) ? name : [name]).forEach((inputName) =>\n unset(formStateRef.current.errors, inputName),\n );\n\n formStateSubjectRef.current.next({\n errors: name ? formStateRef.current.errors : {},\n });\n };\n\n const setError: UseFormSetError<TFieldValues> = (name, error, options) => {\n const ref = (\n ((get(fieldsRef.current, name) as Field) || { _f: {} })._f || {}\n ).ref;\n\n set(formStateRef.current.errors, name, {\n ...error,\n ref,\n });\n\n formStateSubjectRef.current.next({\n errors: formStateRef.current.errors,\n isValid: false,\n });\n\n options && options.shouldFocus && ref && ref.focus && ref.focus();\n };\n\n const watchInternal: WatchInternal<TFieldValues> = React.useCallback(\n (fieldNames, defaultValue, isGlobal) => {\n const isArrayNames = Array.isArray(fieldNames);\n const fieldValues = isMountedRef.current\n ? getValues()\n : isUndefined(defaultValue)\n ? defaultValuesRef.current\n : isArrayNames\n ? defaultValue || {}\n : { [fieldNames as string]: defaultValue };\n\n if (isUndefined(fieldNames)) {\n isGlobal && (isWatchAllRef.current = true);\n return fieldValues;\n }\n\n const result = [];\n\n for (const fieldName of isArrayNames ? fieldNames : [fieldNames]) {\n isGlobal && watchFieldsRef.current.add(fieldName as string);\n result.push(get(fieldValues, fieldName as string));\n }\n\n return isArrayNames ? result : result[0];\n },\n [],\n );\n\n const watch: UseFormWatch<TFieldValues> = (\n fieldName?:\n | FieldPath<TFieldValues>\n | ReadonlyArray<FieldPath<TFieldValues>>\n | WatchObserver<TFieldValues>,\n defaultValue?: unknown,\n ) =>\n isFunction(fieldName)\n ? watchSubjectRef.current.subscribe({\n next: (info) =>\n fieldName(\n watchInternal(\n undefined,\n defaultValue as UnpackNestedValue<DeepPartial<TFieldValues>>,\n ) as UnpackNestedValue<TFieldValues>,\n info,\n ),\n })\n : watchInternal(\n fieldName as string | string[],\n defaultValue as UnpackNestedValue<DeepPartial<TFieldValues>>,\n true,\n );\n\n const unregister: UseFormUnregister<TFieldValues> = (name, options = {}) => {\n for (const inputName of name\n ? Array.isArray(name)\n ? name\n : [name]\n : Object.keys(fieldsNamesRef.current)) {\n fieldsNamesRef.current.delete(inputName);\n fieldArrayNamesRef.current.delete(inputName);\n\n if (get(fieldsRef.current, inputName) as Field) {\n if (!options.keepIsValid) {\n unset(fieldsWithValidationRef.current, inputName);\n unset(validFieldsRef.current, inputName);\n }\n !options.keepError && unset(formStateRef.current.errors, inputName);\n !options.keepValue && unset(fieldsRef.current, inputName);\n !options.keepDirty &&\n unset(formStateRef.current.dirtyFields, inputName);\n !options.keepTouched &&\n unset(formStateRef.current.touchedFields, inputName);\n !options.keepDefaultValue && unset(defaultValuesRef.current, inputName);\n\n watchSubjectRef.current.next({\n name: inputName,\n });\n }\n }\n\n formStateSubjectRef.current.next({\n ...formStateRef.current,\n ...(!options.keepDirty ? {} : { isDirty: getFormIsDirty() }),\n ...(resolverRef.current ? {} : { isValid: getIsValid() }),\n });\n\n if (!options.keepIsValid) {\n updateIsValid();\n }\n };\n\n const registerFieldRef = (\n name: InternalFieldName,\n ref: HTMLInputElement,\n options?: RegisterOptions,\n ): ((name: InternalFieldName) => void) | void => {\n let field = get(fieldsRef.current, name) as Field;\n\n if (field) {\n const isRadioOrCheckbox = isRadioOrCheckboxFunction(ref);\n\n if (\n ref === field._f.ref ||\n (isWeb && isHTMLElement(field._f.ref) && !isHTMLElement(ref)) ||\n (isRadioOrCheckbox &&\n Array.isArray(field._f.refs) &&\n compact(field._f.refs).find((option) => option === ref))\n ) {\n return;\n }\n\n field = {\n _f: isRadioOrCheckbox\n ? {\n ...field._f,\n refs: [\n ...compact(field._f.refs || []).filter(\n (ref) => isHTMLElement(ref) && document.contains(ref),\n ),\n ref,\n ],\n ref: { type: ref.type, name },\n }\n : {\n ...field._f,\n ref,\n },\n };\n\n set(fieldsRef.current, name, field);\n\n const defaultValue = updateValidAndValue(name, options, true);\n\n if (\n isRadioOrCheckbox && Array.isArray(defaultValue)\n ? !deepEqual(get(fieldsRef.current, name)._f.value, defaultValue)\n : isUndefined(get(fieldsRef.current, name)._f.value)\n ) {\n get(fieldsRef.current, name)._f.value = getFieldValue(\n get(fieldsRef.current, name),\n );\n }\n }\n };\n\n const register: UseFormRegister<TFieldValues> = React.useCallback(\n (name, options) => {\n const isInitialRegister = !get(fieldsRef.current, name);\n\n set(fieldsRef.current, name, {\n _f: {\n ...(isInitialRegister\n ? { ref: { name } }\n : {\n ref: (get(fieldsRef.current, name)._f || {}).ref,\n ...get(fieldsRef.current, name)._f,\n }),\n name,\n ...options,\n },\n });\n options && set(fieldsWithValidationRef.current, name, true);\n fieldsNamesRef.current.add(name);\n isInitialRegister && updateValidAndValue(name, options);\n\n return isWindowUndefined\n ? ({ name: name as InternalFieldName } as UseFormRegisterReturn)\n : {\n name,\n onChange: handleChange,\n onBlur: handleChange,\n ref: (ref: HTMLInputElement | null) =>\n ref && registerFieldRef(name, ref, options),\n };\n },\n [defaultValuesRef.current],\n );\n\n const handleSubmit: UseFormHandleSubmit<TFieldValues> = React.useCallback(\n (onValid, onInvalid) => async (e) => {\n if (e && e.preventDefault) {\n e.preventDefault();\n e.persist();\n }\n let fieldValues = {\n ...defaultValuesRef.current,\n ...getFieldsValues(fieldsRef, defaultValuesRef),\n };\n\n formStateSubjectRef.current.next({\n isSubmitting: true,\n });\n\n try {\n if (resolverRef.current) {\n const { errors, values } = await resolverRef.current(\n fieldValues,\n contextRef.current,\n {\n criteriaMode,\n fields: getFields(fieldsNamesRef.current, fieldsRef.current),\n },\n );\n formStateRef.current.errors = errors;\n fieldValues = values;\n } else {\n await validateForm(fieldsRef.current);\n }\n\n if (\n isEmptyObject(formStateRef.current.errors) &&\n Object.keys(formStateRef.current.errors).every((name) =>\n get(fieldValues, name),\n )\n ) {\n formStateSubjectRef.current.next({\n errors: {},\n isSubmitting: true,\n });\n await onValid(fieldValues, e);\n } else {\n onInvalid && (await onInvalid(formStateRef.current.errors, e));\n shouldFocusError &&\n focusFieldBy(\n fieldsRef.current,\n (key: string) => get(formStateRef.current.errors, key),\n fieldsNamesRef.current,\n );\n }\n } finally {\n formStateRef.current.isSubmitted = true;\n formStateSubjectRef.current.next({\n isSubmitted: true,\n isSubmitting: false,\n isSubmitSuccessful: isEmptyObject(formStateRef.current.errors),\n submitCount: formStateRef.current.submitCount + 1,\n errors: formStateRef.current.errors,\n });\n }\n },\n [shouldFocusError, isValidateAllFieldCriteria, criteriaMode],\n );\n\n const resetFromState = React.useCallback(\n ({\n keepErrors,\n keepDirty,\n keepIsSubmitted,\n keepTouched,\n keepIsValid,\n keepSubmitCount,\n }: KeepStateOptions) => {\n if (!keepIsValid) {\n validFieldsRef.current = {};\n fieldsWithValidationRef.current = {};\n }\n\n watchFieldsRef.current = new Set();\n isWatchAllRef.current = false;\n\n formStateSubjectRef.current.next({\n submitCount: keepSubmitCount ? formStateRef.current.submitCount : 0,\n isDirty: keepDirty ? formStateRef.current.isDirty : false,\n isSubmitted: keepIsSubmitted ? formStateRef.current.isSubmitted : false,\n isValid: keepIsValid\n ? formStateRef.current.isValid\n : !validationMode.isOnSubmit,\n dirtyFields: keepDirty ? formStateRef.current.dirtyFields : {},\n touchedFields: keepTouched ? formStateRef.current.touchedFields : {},\n errors: keepErrors ? formStateRef.current.errors : {},\n isSubmitting: false,\n isSubmitSuccessful: false,\n });\n },\n [],\n );\n\n const reset: UseFormReset<TFieldValues> = (values, keepStateOptions = {}) => {\n const updatedValues = values || defaultValuesRef.current;\n\n if (isWeb && !keepStateOptions.keepValues) {\n for (const field of Object.values(fieldsRef.current)) {\n if (field && field._f) {\n const inputRef = Array.isArray(field._f.refs)\n ? field._f.refs[0]\n : field._f.ref;\n\n if (isHTMLElement(inputRef)) {\n try {\n inputRef.closest('form')!.reset();\n break;\n } catch {}\n }\n }\n }\n }\n\n !keepStateOptions.keepDefaultValues &&\n (defaultValuesRef.current = { ...updatedValues });\n\n if (!keepStateOptions.keepValues) {\n fieldsRef.current = {};\n\n controllerSubjectRef.current.next({\n values: { ...updatedValues },\n });\n\n watchSubjectRef.current.next({\n value: { ...updatedValues },\n });\n\n fieldArraySubjectRef.current.next({\n fields: { ...updatedValues },\n isReset: true,\n });\n }\n\n resetFromState(keepStateOptions);\n };\n\n React.useEffect(() => {\n isMountedRef.current = true;\n const formStateSubscription = formStateSubjectRef.current.subscribe({\n next(formState: Partial<FormState<TFieldValues>> = {}) {\n if (shouldRenderFormState(formState, readFormStateRef.current, true)) {\n formStateRef.current = {\n ...formStateRef.current,\n ...formState,\n };\n setFormState(formStateRef.current);\n }\n },\n });\n\n const useFieldArraySubscription = fieldArraySubjectRef.current.subscribe({\n next(state) {\n if (state.fields && state.name && readFormStateRef.current.isValid) {\n const values = getFieldsValues(fieldsRef);\n set(values, state.name, state.fields);\n updateIsValid(values);\n }\n },\n });\n\n resolverRef.current && readFormStateRef.current.isValid && updateIsValid();\n\n return () => {\n watchSubjectRef.current.unsubscribe();\n formStateSubscription.unsubscribe();\n useFieldArraySubscription.unsubscribe();\n };\n }, []);\n\n return {\n control: React.useMemo(\n () => ({\n register,\n isWatchAllRef,\n watchFieldsRef,\n getFormIsDirty,\n formStateSubjectRef,\n fieldArraySubjectRef,\n controllerSubjectRef,\n watchSubjectRef,\n watchInternal,\n fieldsRef,\n validFieldsRef,\n fieldsWithValidationRef,\n fieldArrayNamesRef,\n readFormStateRef,\n formStateRef,\n defaultValuesRef,\n fieldArrayDefaultValuesRef,\n }),\n [],\n ),\n formState: getProxyFormState<TFieldValues>(\n isProxyEnabled,\n formState,\n readFormStateRef,\n ),\n trigger,\n register,\n handleSubmit,\n watch: React.useCallback(watch, []),\n setValue: React.useCallback(setValue, [setInternalValues]),\n getValues: React.useCallback(getValues, []),\n reset: React.useCallback(reset, []),\n clearErrors: React.useCallback(clearErrors, []),\n unregister: React.useCallback(unregister, []),\n setError: React.useCallback(setError, []),\n };\n}\n","import { ControllerProps, FieldPath, FieldValues } from './types';\nimport { useController } from './useController';\n\nconst Controller = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>(\n props: ControllerProps<TFieldValues, TName>,\n) => props.render(useController<TFieldValues, TName>(props));\n\nexport { Controller };\n","import * as React from 'react';\n\nimport focusFieldBy from './logic/focusFieldBy';\nimport getFieldsValues from './logic/getFieldsValues';\nimport getFieldArrayParentName from './logic/getNodeParentName';\nimport mapIds from './logic/mapId';\nimport setFieldArrayDirtyFields from './logic/setFieldArrayDirtyFields';\nimport appendAt from './utils/append';\nimport compact from './utils/compact';\nimport fillEmptyArray from './utils/fillEmptyArray';\nimport get from './utils/get';\nimport insertAt from './utils/insert';\nimport isPrimitive from './utils/isPrimitive';\nimport isUndefined from './utils/isUndefined';\nimport moveArrayAt from './utils/move';\nimport omit from './utils/omit';\nimport prependAt from './utils/prepend';\nimport removeArrayAt from './utils/remove';\nimport set from './utils/set';\nimport swapArrayAt from './utils/swap';\nimport unset from './utils/unset';\nimport {\n FieldArray,\n FieldArrayMethodProps,\n FieldArrayPath,\n FieldArrayWithId,\n FieldErrors,\n FieldValues,\n UseFieldArrayProps,\n UseFieldArrayReturn,\n} from './types';\nimport { useFormContext } from './useFormContext';\n\nexport const useFieldArray = <\n TFieldValues extends FieldValues = FieldValues,\n TFieldArrayName extends FieldArrayPath<TFieldValues> = FieldArrayPath<TFieldValues>,\n TKeyName extends string = 'id'\n>({\n control,\n name,\n keyName = 'id' as TKeyName,\n}: UseFieldArrayProps<\n TFieldValues,\n TFieldArrayName,\n TKeyName\n>): UseFieldArrayReturn<TFieldValues, TFieldArrayName, TKeyName> => {\n const methods = useFormContext();\n const focusNameRef = React.useRef('');\n const {\n isWatchAllRef,\n watchFieldsRef,\n getFormIsDirty,\n watchSubjectRef,\n fieldArraySubjectRef,\n fieldArrayNamesRef,\n fieldsRef,\n defaultValuesRef,\n formStateRef,\n formStateSubjectRef,\n readFormStateRef,\n validFieldsRef,\n fieldsWithValidationRef,\n fieldArrayDefaultValuesRef,\n } = control || methods.control;\n\n const [fields, setFields] = React.useState<\n Partial<FieldArrayWithId<TFieldValues, TFieldArrayName, TKeyName>>[]\n >(\n mapIds(\n get(fieldArrayDefaultValuesRef.current, getFieldArrayParentName(name))\n ? get(fieldArrayDefaultValuesRef.current, name, [])\n : get(defaultValuesRef.current, name, []),\n keyName,\n ),\n );\n\n set(fieldArrayDefaultValuesRef.current, name, [...fields]);\n fieldArrayNamesRef.current.add(name);\n\n const omitKey = <\n T extends Partial<\n FieldArrayWithId<TFieldValues, TFieldArrayName, TKeyName>\n >[]\n >(\n fields: T,\n ) =>\n fields.map((field) =>\n omit((field || {}) as Record<TKeyName, any>, keyName),\n );\n\n const getCurrentFieldsValues = () => {\n const values = get(getFieldsValues(fieldsRef, defaultValuesRef), name, []);\n\n return mapIds<TFieldValues, TKeyName>(\n get(fieldArrayDefaultValuesRef.current, name, []).map(\n (item: Partial<TFieldValues>, index: number) => ({\n ...item,\n ...values[index],\n }),\n ),\n keyName,\n );\n };\n\n const getFocusDetail = (\n index: number,\n options?: FieldArrayMethodProps,\n ): string =>\n options\n ? !isUndefined(options.focusIndex)\n ? `${name}.${options.focusIndex}`\n : options.focusName\n ? options.focusName\n : !options.shouldFocus\n ? ''\n : `${name}.${index}`\n : `${name}.${index}`;\n\n const resetFields = <T>(index?: T) =>\n (Array.isArray(index) ? index : [index]).forEach((currentIndex) =>\n set(\n fieldsRef.current,\n `${name}${isUndefined(currentIndex) ? '' : `.${currentIndex}`}`,\n isUndefined(currentIndex) ? [] : undefined,\n ),\n );\n\n const setFieldsAndNotify = (\n fieldsValues: Partial<FieldArray<TFieldValues, TFieldArrayName>>[] = [],\n ) => setFields(mapIds(fieldsValues, keyName));\n\n const cleanup = <T>(ref: T) =>\n !compact(get(ref, name, [])).length && unset(ref, name);\n\n const updateDirtyFieldsWithDefaultValues = <\n T extends Partial<\n FieldArrayWithId<TFieldValues, TFieldArrayName, TKeyName>\n >[]\n >(\n updatedFieldArrayValues?: T,\n ) =>\n updatedFieldArrayValues &&\n set(\n formStateRef.current.dirtyFields,\n name,\n setFieldArrayDirtyFields(\n omitKey(updatedFieldArrayValues),\n get(defaultValuesRef.current, name, []),\n get(formStateRef.current.dirtyFields, name, []),\n ),\n );\n\n const batchStateUpdate = <T extends Function>(\n method: T,\n args: {\n argA?: unknown;\n argB?: unknown;\n },\n updatedFieldArrayValues: Partial<\n FieldArrayWithId<TFieldValues, TFieldArrayName, TKeyName>\n >[] = [],\n shouldSet = true,\n ) => {\n if (get(fieldsRef.current, name)) {\n const output = method(get(fieldsRef.current, name), args.argA, args.argB);\n shouldSet && set(fieldsRef.current, name, output);\n }\n\n if (Array.isArray(get(formStateRef.current.errors, name))) {\n const output = method(\n get(formStateRef.current.errors, name),\n args.argA,\n args.argB,\n );\n shouldSet && set(formStateRef.current.errors, name, output);\n cleanup(formStateRef.current.errors);\n }\n\n if (\n readFormStateRef.current.touchedFields &&\n get(formStateRef.current.touchedFields, name)\n ) {\n const output = method(\n get(formStateRef.current.touchedFields, name),\n args.argA,\n args.argB,\n );\n shouldSet && set(formStateRef.current.touchedFields, name, output);\n cleanup(formStateRef.current.touchedFields);\n }\n\n if (\n readFormStateRef.current.dirtyFields ||\n readFormStateRef.current.isDirty\n ) {\n set(\n formStateRef.current.dirtyFields,\n name,\n setFieldArrayDirtyFields(\n omitKey(updatedFieldArrayValues),\n get(defaultValuesRef.current, name, []),\n get(formStateRef.current.dirtyFields, name, []),\n ),\n );\n updateDirtyFieldsWithDefaultValues(updatedFieldArrayValues);\n cleanup(formStateRef.current.dirtyFields);\n }\n\n if (readFormStateRef.current.isValid) {\n set(\n validFieldsRef.current,\n name,\n method(get(validFieldsRef.current, name, []), args.argA),\n );\n cleanup(validFieldsRef.current);\n\n set(\n fieldsWithValidationRef.current,\n name,\n method(get(fieldsWithValidationRef.current, name, []), args.argA),\n );\n cleanup(fieldsWithValidationRef.current);\n }\n\n formStateSubjectRef.current.next({\n isDirty: getFormIsDirty(name, omitKey(updatedFieldArrayValues)),\n errors: formStateRef.current.errors as FieldErrors<TFieldValues>,\n isValid: formStateRef.current.isValid,\n });\n };\n\n const registerFieldArray = <T extends Object[]>(\n values: T,\n index = 0,\n parentName = '',\n ) =>\n values.forEach(\n (appendValueItem, valueIndex) =>\n !isPrimitive(appendValueItem) &&\n Object.entries(appendValueItem).forEach(([key, value]) => {\n const inputName = `${parentName || name}.${\n parentName ? valueIndex : index + valueIndex\n }.${key}`;\n\n Array.isArray(value)\n ? registerFieldArray(value, valueIndex, inputName)\n : set(fieldsRef.current, inputName, {\n _f: {\n ref: {\n name: inputName,\n },\n name: inputName,\n value,\n },\n });\n }),\n );\n\n const append = (\n value:\n | Partial<FieldArray<TFieldValues, TFieldArrayName>>\n | Partial<FieldArray<TFieldValues, TFieldArrayName>>[],\n options?: FieldArrayMethodProps,\n ) => {\n const appendValue = Array.isArray(value) ? value : [value];\n const updatedFieldArrayValues = appendAt(\n getCurrentFieldsValues(),\n appendValue,\n );\n const currentIndex = updatedFieldArrayValues.length - appendValue.length;\n setFieldsAndNotify(updatedFieldArrayValues);\n batchStateUpdate(\n appendAt,\n {\n argA: fillEmptyArray(value),\n },\n updatedFieldArrayValues as Partial<\n FieldArrayWithId<TFieldValues, TFieldArrayName, TKeyName>\n >[],\n false,\n );\n registerFieldArray(appendValue, currentIndex);\n\n focusNameRef.current = getFocusDetail(currentIndex, options);\n };\n\n const prepend = (\n value:\n | Partial<FieldArray<TFieldValues, TFieldArrayName>>\n | Partial<FieldArray<TFieldValues, TFieldArrayName>>[],\n options?: FieldArrayMethodProps,\n ) => {\n const prependValue = Array.isArray(value) ? value : [value];\n const updatedFieldArrayValues = prependAt(\n getCurrentFieldsValues(),\n prependValue,\n );\n setFieldsAndNotify(updatedFieldArrayValues);\n batchStateUpdate(\n prependAt,\n {\n argA: fillEmptyArray(value),\n },\n updatedFieldArrayValues as Partial<\n FieldArrayWithId<TFieldValues, TFieldArrayName, TKeyName>\n >[],\n );\n registerFieldArray(prependValue);\n\n focusNameRef.current = getFocusDetail(0, options);\n };\n\n const remove = (index?: number | number[]) => {\n const updatedFieldArrayValues: Partial<\n FieldArrayWithId<TFieldValues, TFieldArrayName, TKeyName>\n >[] = removeArrayAt(getCurrentFieldsValues(), index);\n resetFields(index);\n setFieldsAndNotify(updatedFieldArrayValues);\n batchStateUpdate(\n removeArrayAt,\n {\n argA: index,\n },\n updatedFieldArrayValues,\n );\n };\n\n const insert = (\n index: number,\n value:\n | Partial<FieldArray<TFieldValues, TFieldArrayName>>\n | Partial<FieldArray<TFieldValues, TFieldArrayName>>[],\n options?: FieldArrayMethodProps,\n ) => {\n const insertValue = Array.isArray(value) ? value : [value];\n const updatedFieldArrayValues = insertAt(\n getCurrentFieldsValues(),\n index,\n insertValue,\n );\n setFieldsAndNotify(updatedFieldArrayValues);\n batchStateUpdate(\n insertAt,\n {\n argA: index,\n argB: fillEmptyArray(value),\n },\n updatedFieldArrayValues as Partial<\n FieldArrayWithId<TFieldValues, TFieldArrayName, TKeyName>\n >[],\n );\n registerFieldArray(insertValue, index);\n\n focusNameRef.current = getFocusDetail(index, options);\n };\n\n const swap = (indexA: number, indexB: number) => {\n const fieldValues = getCurrentFieldsValues();\n swapArrayAt(fieldValues, indexA, indexB);\n batchStateUpdate(\n swapArrayAt,\n {\n argA: indexA,\n argB: indexB,\n },\n fieldValues,\n false,\n );\n setFieldsAndNotify(fieldValues);\n };\n\n const move = (from: number, to: number) => {\n const fieldValues = getCurrentFieldsValues();\n moveArrayAt(fieldValues, from, to);\n setFieldsAndNotify(fieldValues);\n batchStateUpdate(\n moveArrayAt,\n {\n argA: from,\n argB: to,\n },\n fieldValues,\n false,\n );\n };\n\n React.useEffect(() => {\n if (isWatchAllRef.current) {\n formStateSubjectRef.current.next({});\n } else {\n for (const watchField of watchFieldsRef.current) {\n if (name.startsWith(watchField)) {\n formStateSubjectRef.current.next({});\n break;\n }\n }\n }\n\n watchSubjectRef.current.next({\n name,\n value: get(getFieldsValues(fieldsRef, defaultValuesRef), name, []),\n });\n\n focusNameRef.current &&\n focusFieldBy(fieldsRef.current, (key: string) =>\n key.startsWith(focusNameRef.current),\n );\n\n focusNameRef.current = '';\n\n fieldArraySubjectRef.current.next({\n name,\n fields: omitKey([...fields]),\n });\n }, [fields, name]);\n\n React.useEffect(() => {\n const fieldArraySubscription = fieldArraySubjectRef.current.subscribe({\n next({ name: inputFieldArrayName, fields, isReset }) {\n if (isReset) {\n unset(fieldsRef.current, inputFieldArrayName || name);\n\n inputFieldArrayName\n ? set(\n fieldArrayDefaultValuesRef.current,\n inputFieldArrayName,\n fields,\n )\n : (fieldArrayDefaultValuesRef.current = fields);\n\n setFieldsAndNotify(get(fieldArrayDefaultValuesRef.current, name));\n }\n },\n });\n !get(fieldsRef.current, name) && set(fieldsRef.current, name, []);\n\n return () => {\n fieldArrayDefaultValuesRef.current = getFieldsValues(fieldsRef);\n fieldArraySubscription.unsubscribe();\n };\n }, []);\n\n return {\n swap: React.useCallback(swap, [name]),\n move: React.useCallback(move, [name]),\n prepend: React.useCallback(prepend, [name]),\n append: React.useCallback(append, [name]),\n remove: React.useCallback(remove, [name]),\n insert: React.useCallback(insert, [name]),\n fields: fields as FieldArrayWithId<\n TFieldValues,\n TFieldArrayName,\n TKeyName\n >[],\n };\n};\n","import { FieldElement } from '../types';\n\nimport isCheckBoxInput from './isCheckBoxInput';\nimport isRadioInput from './isRadioInput';\n\nexport default (ref: FieldElement): ref is HTMLInputElement =>\n isRadioInput(ref) || isCheckBoxInput(ref);\n","import * as React from 'react';\n\nimport isString from './utils/isString';\nimport isUndefined from './utils/isUndefined';\nimport {\n Control,\n DeepPartial,\n FieldPath,\n FieldPathValue,\n FieldPathValues,\n FieldValues,\n InternalFieldName,\n UnpackNestedValue,\n UseWatchProps,\n} from './types';\nimport { useFormContext } from './useFormContext';\n\nexport function useWatch<\n TFieldValues extends FieldValues = FieldValues\n>(props: {\n defaultValue?: UnpackNestedValue<DeepPartial<TFieldValues>>;\n control?: Control<TFieldValues>;\n}): UnpackNestedValue<DeepPartial<TFieldValues>>;\nexport function useWatch<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>(props: {\n name: TName;\n defaultValue?: FieldPathValue<TFieldValues, TName>;\n control?: Control<TFieldValues>;\n}): FieldPathValue<TFieldValues, TName>;\nexport function useWatch<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues>[] = FieldPath<TFieldValues>[]\n>(props: {\n name: TName;\n defaultValue?: UnpackNestedValue<DeepPartial<TFieldValues>>;\n control?: Control<TFieldValues>;\n}): FieldPathValues<TFieldValues, TName>;\nexport function useWatch<TFieldValues>(props?: UseWatchProps<TFieldValues>) {\n const { control, name, defaultValue } = props || {};\n const methods = useFormContext();\n const nameRef = React.useRef(name);\n nameRef.current = name;\n\n const { watchInternal, watchSubjectRef } = control || methods.control;\n const [value, updateValue] = React.useState<unknown>(\n isUndefined(defaultValue)\n ? watchInternal(name as InternalFieldName)\n : defaultValue,\n );\n\n React.useEffect(() => {\n watchInternal(name as InternalFieldName);\n\n const watchSubscription = watchSubjectRef.current.subscribe({\n next: ({ name: inputName, value }) =>\n (!nameRef.current ||\n !inputName ||\n (Array.isArray(nameRef.current)\n ? nameRef.current\n : [nameRef.current]\n ).some(\n (fieldName) =>\n inputName &&\n fieldName &&\n inputName.startsWith(fieldName as InternalFieldName),\n )) &&\n updateValue(\n isString(inputName) &&\n nameRef.current === inputName &&\n !isUndefined(value)\n ? value\n : watchInternal(\n nameRef.current as string,\n defaultValue as UnpackNestedValue<DeepPartial<TFieldValues>>,\n ),\n ),\n });\n\n return () => watchSubscription.unsubscribe();\n }, []);\n\n return value;\n}\n"],"names":["element","type","value","isObjectType","isNullOrUndefined","Array","isArray","Date","name","substring","search","filter","Boolean","val","undefined","obj","path","defaultValue","result","compact","split","reduce","key","isUndefined","EVENTS","VALIDATION_MODE","INPUT_VALIDATION_RULES","source","copy","FormContext","React","createContext","displayName","useFormContext","useContext","isProxyEnabled","formState","readFormStateRef","localReadFormStateRef","isRoot","Proxy","get","prop","current","isObject","Object","keys","length","isEmptyObject","find","window","HTMLElement","document","isWeb","useFormState","props","methods","formStateRef","formStateSubjectRef","control","updateFormState","useState","readFormState","useRef","isDirty","dirtyFields","touchedFields","isValidating","isValid","errors","useEffect","formStateSubscription","subscribe","next","shouldRenderFormState","unsubscribe","getProxyFormState","useController","rules","defaultValuesRef","register","fieldsRef","fieldArrayNamesRef","controllerSubjectRef","onChange","onBlur","ref","setInputStateValue","_f","names","some","getNodeParentName","isNameInFieldArray","controllerSubscription","data","values","target","field","event","isCheckBoxInput","checked","getControllerValue","fieldState","defineProperties","invalid","isTouched","error","validateAllFieldCriteria","message","types","[object Object]","test","input","replace","set","object","index","tempPath","isKey","stringToPath","lastIndex","newValue","objValue","isNaN","focusFieldBy","fields","callback","fieldsNames","omit","focus","refs","getFieldsValues","output","disabled","every","d","performance","now","c","r","Math","random","toString","keyName","map","generateId","deepEqual","object1","object2","isErrorObject","isPrimitive","isValidElement","keys1","keys2","val1","val2","setDirtyFields","defaultValues","parentNode","parentName","deepMerge","targetValue","sourceValue","slice","append","fill","insert","from","to","splice","prepend","indexes","i","temp","removeAtIndexes","sort","a","b","indexA","indexB","unset","updatePath","childObject","baseGet","previousObjRef","k","objectRef","currentPaths","currentPathsLength","item","isBoolean","getFields","fieldsRefs","currentFields","defaultResult","validResult","options","option","attributes","defaultReturn","previous","getFieldValue","isFileInput","files","isRadioInput","getRadioValue","isMultipleSelect","selected","isCheckBox","getCheckboxValue","valueAsNumber","valueAsDate","setValueAs","NaN","getFieldValueAs","isString","RegExp","getValidateError","isMessage","validationData","isRegex","async","required","maxLength","minLength","min","max","pattern","validate","inputValue","isRadio","isRadioOrCheckbox","isEmpty","appendErrorsCurry","appendErrors","bind","getMinMaxMessage","exceedMax","maxLengthMessage","minLengthMessage","maxType","minType","getValueAndMessage","exceedMin","maxOutput","minOutput","valueDate","valueNumber","parseFloat","maxLengthOutput","minLengthOutput","patternValue","match","validateRef","isFunction","validateError","validationResult","validateFunction","entries","mode","isOnSubmit","isOnBlur","isOnChange","isOnAll","isOnTouch","Subscription","this","tearDown","tearDowns","push","teardown","Subscriber","observer","subscription","add","closed","Subject","observers","subscriber","isWindowUndefined","render","Provider","children","focusNameRef","isWatchAllRef","watchFieldsRef","getFormIsDirty","watchSubjectRef","fieldArraySubjectRef","validFieldsRef","fieldsWithValidationRef","fieldArrayDefaultValuesRef","setFields","mapIds","getFieldArrayParentName","omitKey","getCurrentFieldsValues","getFocusDetail","focusIndex","focusName","shouldFocus","setFieldsAndNotify","fieldsValues","cleanup","batchStateUpdate","method","args","updatedFieldArrayValues","shouldSet","argA","argB","setFieldArrayDirtyFields","updateDirtyFieldsWithDefaultValues","registerFieldArray","forEach","appendValueItem","valueIndex","inputName","watchField","startsWith","fieldArraySubscription","inputFieldArrayName","isReset","swap","useCallback","fieldValues","swapArrayAt","move","moveArrayAt","prependValue","prependAt","fillEmptyArray","appendValue","appendAt","currentIndex","remove","removeArrayAt","resetFields","insertValue","insertAt","reValidateMode","resolver","context","shouldFocusError","criteriaMode","fieldsNamesRef","Set","isMountedRef","contextRef","resolverRef","validationMode","getValidationModes","isValidateAllFieldCriteria","setFormState","isSubmitted","submitCount","isSubmitting","isSubmitSuccessful","getIsValid","shouldRenderBaseOnError","shouldRender","state","isWatched","previousError","shouldReRender","updatedFormState","setFieldValue","rawValue","shouldRegister","isHTMLElement","radioRef","selectRef","includes","checkboxRef","shouldDirty","updateAndGetDirtyState","shouldValidate","trigger","formValues","isFieldDirty","isDirtyFieldExist","previousIsDirty","isChanged","executeValidation","skipReRender","validateField","executeSchemaOrResolverValidation","currentNames","validateForm","fieldError","Promise","all","setInternalValues","inputKey","fieldName","isFieldWatched","has","updateValidAndValue","isWithinRefCallback","useFormDefaultValue","then","handleChange","inputType","isBlurEvent","isReValidateOnBlur","isReValidateOnChange","shouldSkipValidation","skipValidation","previousFormIsValid","parentNodeName","currentError","getValues","fieldNames","updateIsValid","previousIsValid","watchInternal","isGlobal","isArrayNames","registerFieldRef","isRadioOrCheckboxFunction","contains","isInitialRegister","handleSubmit","onValid","onInvalid","e","preventDefault","persist","resetFromState","keepErrors","keepDirty","keepIsSubmitted","keepTouched","keepIsValid","keepSubmitCount","useFieldArraySubscription","useMemo","watch","info","setValue","isFieldArray","reset","keepStateOptions","updatedValues","keepValues","inputRef","closest","keepDefaultValues","clearErrors","unregister","delete","keepError","keepValue","keepDefaultValue","setError","nameRef","updateValue","watchSubscription"],"mappings":"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"}
|