From c4f97199c250393372ffb41a7ddb665fa3727240 Mon Sep 17 00:00:00 2001 From: Adam Berecz Date: Tue, 19 Mar 2024 08:49:51 +0100 Subject: [PATCH] fix: reinit mask on reset/clear --- CHANGELOG.md | 12 ++++++------ dist/index.js | 2 +- dist/plugin.js | 2 +- package.json | 2 +- src/plugin.js | 2 ++ 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c995b1..68523e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,13 @@ -## v1.0.1 +## v1.0.3 -> `2024-03-05` +> `2024-03-19` -### 🎉 Feature -- Initial release +### 🐞 Bug Fixes +- Reinit mask on reset / clear -## v1.0.0 +## v1.0.0 - v1.0.2 -> `2024-02-29` +> `2024-03-05` ### 🎉 Feature - Initial release \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index a361d8c..42bcf7a 100644 --- a/dist/index.js +++ b/dist/index.js @@ -4,4 +4,4 @@ * Licensed under the MIT License */ -import e from"imask";import{toRefs as a,ref as l,computed as u,onMounted as t,watch as s,nextTick as v}from"vue";var n=n=>((e={},n=null)=>({apply:"TextElement",props:{mask:{required:!1,type:[String,Object,Array,Function]},unmask:{require:!1,type:Boolean,default:!1},allowIncomplete:{require:!1,type:Boolean,default:!1}},setup(o,i,r){const{mask:m,inputType:d,formatLoad:k,unmask:p,allowIncomplete:c}=a(o);if(!m.value)return r;const{nullValue:f,value:y,el$:h,path:b,form$:M,defaultValue:V,resetting:g,resetValidators:w,input:x}=r,A=l(null),E=l(y.value),I=l([]),O=l(!1),$=u((()=>"function"==typeof e?e(n):e)),j=u((()=>{let e="function"==typeof m.value?B(m.value):C(m.value);return $.value.definitions&&(e={...e,definitions:D({...$.value.definitions,...e.definitions})}),$.value.blocks&&(e={...e,blocks:D({...$.value.blocks,...e.blocks})}),e.definitions&&(e={...e,definitions:D(e.definitions)}),e.blocks&&(e={...e,blocks:D(e.blocks)}),e})),L=u({get:()=>E.value,set:e=>E.value=e}),q=u((()=>-1!==[void 0,null,""].indexOf(L.value))),C=e=>"string"==typeof e?{mask:F(e)}:e instanceof RegExp?{mask:e}:Array.isArray(e)?e.map(C):e&&"object"==typeof e?T(e):{mask:e},D=e=>Object.keys(e).reduce(((a,l)=>({...a,[l]:C(e[l])})),{}),T=e=>{let a={...e};return"number"===e.mask&&(a.mask=Number),"range"===e.mask&&(a.mask=n.MaskedRange),"enum"===e.mask&&(a.mask=n.MaskedEnum),"date"===e.mask&&(a.mask=Date),void 0!==e.placeholder&&(a.lazy=!a.placeholder),void 0===e.caseInsensitive||e.matchValue||(a.matchValue=R),e.dispatch&&(a.dispatch=(a,l)=>e.dispatch(a,l,h.value,M.value)),Array.isArray(e.mask)&&(a.mask=e.mask.map(C),a.dispatch||(e.mask.some((e=>e.startsWith))&&(a.dispatch=(e,a)=>{const l=(a.value+e).replace(/\D/g,"");return a.compiledMasks.find((e=>0===l.indexOf(e.startsWith)))}),e.element&&(a.dispatch=(a,l)=>{let u=M.value.el$(e.element)?.value;return l.compiledMasks.find((e=>e.when==u||!e.when))}))),e.blocks&&(a.blocks=Object.keys(e.blocks).reduce(((a,l)=>({...a,[l]:C(e.blocks[l])})),{})),a},B=e=>C(e(n)),F=e=>e.replace(/\\\\/g,"\\"),R=(e,a,l)=>n.MaskedEnum.DEFAULTS.matchValue(e.toLowerCase(),a.toLowerCase(),l),S=()=>"text"===d.value||(console.error(`Input mask only works with type="text" (found at: '${b.value}').`),!1),W=()=>{L.value=A.value.displayValue,c.value||A.value.masked.isComplete?y.value=p.value?A.value.masked.unmaskedValue:A.value.value:y.value=f.value},z=()=>{A.value&&A.value.destroy()},N=()=>{A.value&&z(),A.value=n(h.value.input,j.value),A.value.on("accept",(()=>{W()})),W(),I.value.map((e=>e())),j.value?.element&&I.value.push(s(u((()=>M.value.el$(j.value.element).value)),(()=>{O.value?O.value=!1:L.value=f.value,U()})))},U=()=>{v((()=>{N()}))};return t((()=>{S()&&N()})),s(d,(e=>{S()})),s(j,((e,a)=>{A.value&&N()}),{deep:!0}),{...r,Mask:A,destroyMask:z,initMask:N,syncMask:W,refreshMask:U,handleInput:()=>{},model:L,load:(e,a=!1)=>{O.value=!0,y.value=f.value;let l=a&&k.value?k.value(e,M.value):e;y.value=l,A.value&&(A.value[p.value?"unmaskedValue":"value"]=l)},update:e=>{O.value=!0,y.value=f.value,y.value=e,A.value&&(A.value[p.value?"unmaskedValue":"value"]=e)},clear:()=>{x.value.value="",L.value=f.value,y.value=f.value},reset:()=>{g.value=!0,x.value.value=V.value,L.value=V.value,y.value=V.value,w()},empty:q}}}))(n,e);export{n as default}; +import e from"imask";import{toRefs as a,ref as l,computed as u,onMounted as t,watch as s,nextTick as v}from"vue";var n=n=>((e={},n=null)=>({apply:"TextElement",props:{mask:{required:!1,type:[String,Object,Array,Function]},unmask:{require:!1,type:Boolean,default:!1},allowIncomplete:{require:!1,type:Boolean,default:!1}},setup(o,i,r){const{mask:m,inputType:d,formatLoad:k,unmask:p,allowIncomplete:c}=a(o);if(!m.value)return r;const{nullValue:f,value:y,el$:h,path:b,form$:M,defaultValue:V,resetting:g,resetValidators:w,input:x}=r,A=l(null),E=l(y.value),I=l([]),O=l(!1),$=u((()=>"function"==typeof e?e(n):e)),j=u((()=>{let e="function"==typeof m.value?B(m.value):C(m.value);return $.value.definitions&&(e={...e,definitions:D({...$.value.definitions,...e.definitions})}),$.value.blocks&&(e={...e,blocks:D({...$.value.blocks,...e.blocks})}),e.definitions&&(e={...e,definitions:D(e.definitions)}),e.blocks&&(e={...e,blocks:D(e.blocks)}),e})),L=u({get:()=>E.value,set:e=>E.value=e}),q=u((()=>-1!==[void 0,null,""].indexOf(L.value))),C=e=>"string"==typeof e?{mask:F(e)}:e instanceof RegExp?{mask:e}:Array.isArray(e)?e.map(C):e&&"object"==typeof e?T(e):{mask:e},D=e=>Object.keys(e).reduce(((a,l)=>({...a,[l]:C(e[l])})),{}),T=e=>{let a={...e};return"number"===e.mask&&(a.mask=Number),"range"===e.mask&&(a.mask=n.MaskedRange),"enum"===e.mask&&(a.mask=n.MaskedEnum),"date"===e.mask&&(a.mask=Date),void 0!==e.placeholder&&(a.lazy=!a.placeholder),void 0===e.caseInsensitive||e.matchValue||(a.matchValue=R),e.dispatch&&(a.dispatch=(a,l)=>e.dispatch(a,l,h.value,M.value)),Array.isArray(e.mask)&&(a.mask=e.mask.map(C),a.dispatch||(e.mask.some((e=>e.startsWith))&&(a.dispatch=(e,a)=>{const l=(a.value+e).replace(/\D/g,"");return a.compiledMasks.find((e=>0===l.indexOf(e.startsWith)))}),e.element&&(a.dispatch=(a,l)=>{let u=M.value.el$(e.element)?.value;return l.compiledMasks.find((e=>e.when==u||!e.when))}))),e.blocks&&(a.blocks=Object.keys(e.blocks).reduce(((a,l)=>({...a,[l]:C(e.blocks[l])})),{})),a},B=e=>C(e(n)),F=e=>e.replace(/\\\\/g,"\\"),R=(e,a,l)=>n.MaskedEnum.DEFAULTS.matchValue(e.toLowerCase(),a.toLowerCase(),l),S=()=>"text"===d.value||(console.error(`Input mask only works with type="text" (found at: '${b.value}').`),!1),W=()=>{L.value=A.value.displayValue,c.value||A.value.masked.isComplete?y.value=p.value?A.value.masked.unmaskedValue:A.value.value:y.value=f.value},z=()=>{A.value&&A.value.destroy()},N=()=>{A.value&&z(),A.value=n(h.value.input,j.value),A.value.on("accept",(()=>{W()})),W(),I.value.map((e=>e())),j.value?.element&&I.value.push(s(u((()=>M.value.el$(j.value.element).value)),(()=>{O.value?O.value=!1:L.value=f.value,U()})))},U=()=>{v((()=>{N()}))};return t((()=>{S()&&N()})),s(d,(e=>{S()})),s(j,((e,a)=>{A.value&&N()}),{deep:!0}),{...r,Mask:A,destroyMask:z,initMask:N,syncMask:W,refreshMask:U,handleInput:()=>{},model:L,load:(e,a=!1)=>{O.value=!0,y.value=f.value;let l=a&&k.value?k.value(e,M.value):e;y.value=l,A.value&&(A.value[p.value?"unmaskedValue":"value"]=l)},update:e=>{O.value=!0,y.value=f.value,y.value=e,A.value&&(A.value[p.value?"unmaskedValue":"value"]=e)},clear:()=>{x.value.value="",L.value=f.value,y.value=f.value,N()},reset:()=>{g.value=!0,x.value.value=V.value,L.value=V.value,y.value=V.value,w(),N()},empty:q}}}))(n,e);export{n as default}; diff --git a/dist/plugin.js b/dist/plugin.js index d796e40..49acecc 100644 --- a/dist/plugin.js +++ b/dist/plugin.js @@ -4,4 +4,4 @@ * Licensed under the MIT License */ -import{toRefs as e,ref as a,computed as l,onMounted as u,watch as t,nextTick as s}from"vue";var v=(v={},n=null)=>({apply:"TextElement",props:{mask:{required:!1,type:[String,Object,Array,Function]},unmask:{require:!1,type:Boolean,default:!1},allowIncomplete:{require:!1,type:Boolean,default:!1}},setup(o,i,r){const{mask:m,inputType:d,formatLoad:k,unmask:c,allowIncomplete:p}=e(o);if(!m.value)return r;const{nullValue:f,value:y,el$:h,path:b,form$:M,defaultValue:V,resetting:g,resetValidators:w,input:x}=r,A=a(null),E=a(y.value),I=a([]),O=a(!1),$=l((()=>"function"==typeof v?v(n):v)),j=l((()=>{let e="function"==typeof m.value?B(m.value):C(m.value);return $.value.definitions&&(e={...e,definitions:D({...$.value.definitions,...e.definitions})}),$.value.blocks&&(e={...e,blocks:D({...$.value.blocks,...e.blocks})}),e.definitions&&(e={...e,definitions:D(e.definitions)}),e.blocks&&(e={...e,blocks:D(e.blocks)}),e})),L=l({get:()=>E.value,set:e=>E.value=e}),q=l((()=>-1!==[void 0,null,""].indexOf(L.value))),C=e=>"string"==typeof e?{mask:F(e)}:e instanceof RegExp?{mask:e}:Array.isArray(e)?e.map(C):e&&"object"==typeof e?T(e):{mask:e},D=e=>Object.keys(e).reduce(((a,l)=>({...a,[l]:C(e[l])})),{}),T=e=>{let a={...e};return"number"===e.mask&&(a.mask=Number),"range"===e.mask&&(a.mask=n.MaskedRange),"enum"===e.mask&&(a.mask=n.MaskedEnum),"date"===e.mask&&(a.mask=Date),void 0!==e.placeholder&&(a.lazy=!a.placeholder),void 0===e.caseInsensitive||e.matchValue||(a.matchValue=R),e.dispatch&&(a.dispatch=(a,l)=>e.dispatch(a,l,h.value,M.value)),Array.isArray(e.mask)&&(a.mask=e.mask.map(C),a.dispatch||(e.mask.some((e=>e.startsWith))&&(a.dispatch=(e,a)=>{const l=(a.value+e).replace(/\D/g,"");return a.compiledMasks.find((e=>0===l.indexOf(e.startsWith)))}),e.element&&(a.dispatch=(a,l)=>{let u=M.value.el$(e.element)?.value;return l.compiledMasks.find((e=>e.when==u||!e.when))}))),e.blocks&&(a.blocks=Object.keys(e.blocks).reduce(((a,l)=>({...a,[l]:C(e.blocks[l])})),{})),a},B=e=>C(e(n)),F=e=>e.replace(/\\\\/g,"\\"),R=(e,a,l)=>n.MaskedEnum.DEFAULTS.matchValue(e.toLowerCase(),a.toLowerCase(),l),S=()=>"text"===d.value||(console.error(`Input mask only works with type="text" (found at: '${b.value}').`),!1),W=()=>{L.value=A.value.displayValue,p.value||A.value.masked.isComplete?y.value=c.value?A.value.masked.unmaskedValue:A.value.value:y.value=f.value},z=()=>{A.value&&A.value.destroy()},N=()=>{A.value&&z(),A.value=n(h.value.input,j.value),A.value.on("accept",(()=>{W()})),W(),I.value.map((e=>e())),j.value?.element&&I.value.push(t(l((()=>M.value.el$(j.value.element).value)),(()=>{O.value?O.value=!1:L.value=f.value,U()})))},U=()=>{s((()=>{N()}))};return u((()=>{S()&&N()})),t(d,(e=>{S()})),t(j,((e,a)=>{A.value&&N()}),{deep:!0}),{...r,Mask:A,destroyMask:z,initMask:N,syncMask:W,refreshMask:U,handleInput:()=>{},model:L,load:(e,a=!1)=>{O.value=!0,y.value=f.value;let l=a&&k.value?k.value(e,M.value):e;y.value=l,A.value&&(A.value[c.value?"unmaskedValue":"value"]=l)},update:e=>{O.value=!0,y.value=f.value,y.value=e,A.value&&(A.value[c.value?"unmaskedValue":"value"]=e)},clear:()=>{x.value.value="",L.value=f.value,y.value=f.value},reset:()=>{g.value=!0,x.value.value=V.value,L.value=V.value,y.value=V.value,w()},empty:q}}});export{v as default}; +import{toRefs as e,ref as a,computed as l,onMounted as u,watch as t,nextTick as s}from"vue";var v=(v={},n=null)=>({apply:"TextElement",props:{mask:{required:!1,type:[String,Object,Array,Function]},unmask:{require:!1,type:Boolean,default:!1},allowIncomplete:{require:!1,type:Boolean,default:!1}},setup(o,i,r){const{mask:m,inputType:d,formatLoad:k,unmask:c,allowIncomplete:p}=e(o);if(!m.value)return r;const{nullValue:f,value:y,el$:h,path:b,form$:M,defaultValue:V,resetting:g,resetValidators:w,input:x}=r,A=a(null),E=a(y.value),I=a([]),O=a(!1),$=l((()=>"function"==typeof v?v(n):v)),j=l((()=>{let e="function"==typeof m.value?B(m.value):C(m.value);return $.value.definitions&&(e={...e,definitions:D({...$.value.definitions,...e.definitions})}),$.value.blocks&&(e={...e,blocks:D({...$.value.blocks,...e.blocks})}),e.definitions&&(e={...e,definitions:D(e.definitions)}),e.blocks&&(e={...e,blocks:D(e.blocks)}),e})),L=l({get:()=>E.value,set:e=>E.value=e}),q=l((()=>-1!==[void 0,null,""].indexOf(L.value))),C=e=>"string"==typeof e?{mask:F(e)}:e instanceof RegExp?{mask:e}:Array.isArray(e)?e.map(C):e&&"object"==typeof e?T(e):{mask:e},D=e=>Object.keys(e).reduce(((a,l)=>({...a,[l]:C(e[l])})),{}),T=e=>{let a={...e};return"number"===e.mask&&(a.mask=Number),"range"===e.mask&&(a.mask=n.MaskedRange),"enum"===e.mask&&(a.mask=n.MaskedEnum),"date"===e.mask&&(a.mask=Date),void 0!==e.placeholder&&(a.lazy=!a.placeholder),void 0===e.caseInsensitive||e.matchValue||(a.matchValue=R),e.dispatch&&(a.dispatch=(a,l)=>e.dispatch(a,l,h.value,M.value)),Array.isArray(e.mask)&&(a.mask=e.mask.map(C),a.dispatch||(e.mask.some((e=>e.startsWith))&&(a.dispatch=(e,a)=>{const l=(a.value+e).replace(/\D/g,"");return a.compiledMasks.find((e=>0===l.indexOf(e.startsWith)))}),e.element&&(a.dispatch=(a,l)=>{let u=M.value.el$(e.element)?.value;return l.compiledMasks.find((e=>e.when==u||!e.when))}))),e.blocks&&(a.blocks=Object.keys(e.blocks).reduce(((a,l)=>({...a,[l]:C(e.blocks[l])})),{})),a},B=e=>C(e(n)),F=e=>e.replace(/\\\\/g,"\\"),R=(e,a,l)=>n.MaskedEnum.DEFAULTS.matchValue(e.toLowerCase(),a.toLowerCase(),l),S=()=>"text"===d.value||(console.error(`Input mask only works with type="text" (found at: '${b.value}').`),!1),W=()=>{L.value=A.value.displayValue,p.value||A.value.masked.isComplete?y.value=c.value?A.value.masked.unmaskedValue:A.value.value:y.value=f.value},z=()=>{A.value&&A.value.destroy()},N=()=>{A.value&&z(),A.value=n(h.value.input,j.value),A.value.on("accept",(()=>{W()})),W(),I.value.map((e=>e())),j.value?.element&&I.value.push(t(l((()=>M.value.el$(j.value.element).value)),(()=>{O.value?O.value=!1:L.value=f.value,U()})))},U=()=>{s((()=>{N()}))};return u((()=>{S()&&N()})),t(d,(e=>{S()})),t(j,((e,a)=>{A.value&&N()}),{deep:!0}),{...r,Mask:A,destroyMask:z,initMask:N,syncMask:W,refreshMask:U,handleInput:()=>{},model:L,load:(e,a=!1)=>{O.value=!0,y.value=f.value;let l=a&&k.value?k.value(e,M.value):e;y.value=l,A.value&&(A.value[c.value?"unmaskedValue":"value"]=l)},update:e=>{O.value=!0,y.value=f.value,y.value=e,A.value&&(A.value[c.value?"unmaskedValue":"value"]=e)},clear:()=>{x.value.value="",L.value=f.value,y.value=f.value,N()},reset:()=>{g.value=!0,x.value.value=V.value,L.value=V.value,y.value=V.value,w(),N()},empty:q}}});export{v as default}; diff --git a/package.json b/package.json index 798420c..42087c0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@vueform/plugin-mask", - "version": "1.0.2", + "version": "1.0.3", "description": "Official input mask plugin for Vueform.", "repository": "vueform/plugin-mask", "license": "MIT", diff --git a/src/plugin.js b/src/plugin.js index fc0ec45..0096be7 100644 --- a/src/plugin.js +++ b/src/plugin.js @@ -236,6 +236,7 @@ export default (options = {}, IMask = null) => ({ input.value.value = '' model.value = nullValue.value value.value = nullValue.value + initMask() } const reset = () => { @@ -244,6 +245,7 @@ export default (options = {}, IMask = null) => ({ model.value = defaultValue.value value.value = defaultValue.value resetValidators() + initMask() } const checkInputType = () => {