v-money3 3.17.6 → 3.20.0

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/README.md CHANGED
@@ -1,4 +1,5 @@
1
1
  ![workflow](https://github.com/jonathanpmartins/v-money3/actions/workflows/main.yml/badge.svg)
2
+ [![TypeScript](https://img.shields.io/badge/%3C%2F%3E-TypeScript-%230074c1.svg)](http://www.typescriptlang.org/)
2
3
 
3
4
  # Money Mask for Vue 3
4
5
 
@@ -232,10 +233,11 @@ If you bind it directly you are just fine too:
232
233
  | masked | false | Boolean | false | If the component output should include the mask or not |
233
234
  | disable-negative | false | Boolean | false | Component does not allow negative values |
234
235
  | disabled | false | Boolean | false | Disable the inner input tag |
235
- | min | false | Number | Number.MIN_SAFE_INTEGER | The min value allowed |
236
- | max | false | Number | Number.MAX_SAFE_INTEGER | The max value allowed |
236
+ | min | false | Number | null | The min value allowed |
237
+ | max | false | Number | null | The max value allowed |
237
238
  | allow-blank | false | Boolean | false | If the field can start blank and be cleared out by user |
238
239
  | minimum-number-of-characters | false | Number | 0 | The minimum number of characters that the mask should show |
240
+ | should-round | false | Boolean | true | Should default values be rounded or sliced |
239
241
 
240
242
  ## Restricted Characters
241
243
 
@@ -254,14 +256,12 @@ Restricted inputs will be filter out of the final mask.
254
256
  A console warn with more information will be shown!
255
257
 
256
258
 
257
-
258
-
259
259
  ## Don't want to use a package manager?
260
260
 
261
261
  Use it directly in the browser!
262
262
 
263
263
  ```html
264
- <script src="https://unpkg.com/v-money3@3.17.6/dist/v-money3.umd.js"></script>
264
+ <script src="https://unpkg.com/v-money3@3.20.0/dist/v-money3.umd.js"></script>
265
265
  ```
266
266
 
267
267
  Take a look at issue [#15](https://github.com/jonathanpmartins/v-money3/issues/15#issuecomment-830988807) and also this [codesandbox](https://codesandbox.io/s/mystifying-paper-bpfyn?file=/index.html) working example.
@@ -1 +1 @@
1
- import{defineComponent as e,reactive as t,watch as n,computed as i,resolveDirective as o,withDirectives as r,openBlock as s,createElementBlock as a,mergeProps as l}from"vue";const u=["+","-"],d=["decimal","thousands","prefix","suffix"];class c{static between(e,t,n){return Math.max(e,Math.min(t,n))}static fixed(e){return c.between(0,e,1e3)}static numbersToCurrency(e,t){return e=e.padStart(t+1,"0"),0===t?e:`${e.slice(0,-t)}.${e.slice(-t)}`}static toStr(e){return e?e.toString():""}static onlyNumbers(e){return c.toStr(e).replace(/\D+/g,"")||"0"}static addThousandSeparator(e,t){return e.replace(/(\d)(?=(?:\d{3})+\b)/gm,`$1${t}`)}static joinIntegerAndDecimal(e,t,n){return t?e+n+t:e}static validateRestrictedInput(e,t){return u.includes(e)?(console.warn(`v-money3 "${t}" property don't accept "${e}" as a value.`),!1):!/\d/g.test(e)||(console.warn(`v-money3 "${t}" property don't accept "${e}" (any number) as a value.`),!1)}static validateRestrictedOptions(e){for(const t of d){if(!c.validateRestrictedInput(e[t],t))return!1}return!0}static filterRestrictedCharactersFromRestrictedOptions(e){for(const t of d)for(const n of u)e[t]=e[t].replaceAll(n,"");return e}static filterNumbersFromRestrictedOptions(e){for(const t of d)e[t]=e[t].replace(/\d+/g,"");return e}static filterOptRestrictions(e){return e=c.filterRestrictedCharactersFromRestrictedOptions(e),e=c.filterNumbersFromRestrictedOptions(e)}static guessFloatPrecision(e){return e.length-(e.indexOf(".")+1)}static removeLeadingZeros(e){return e.replace(/^(-?)0+(?!\.)(.+)/,"$1$2")}static isValidInteger(e){return/^-?[\d]+$/g.test(e)}static isValidFloat(e){return/^-?[\d]+(\.[\d]+)$/g.test(e)}static replaceAt(e,t,n){return t>e.length-1?e:e.substring(0,t)+n+e.substring(t+1)}static round(e,t){const n=t-c.guessFloatPrecision(e);if(n>=0)return e;let i=e.slice(0,n);const o=e.slice(n);if("."===i.charAt(i.length-1)&&(i=i.slice(0,-1)),parseInt(o.charAt(0),10)>=5){for(let e=i.length-1;e>=0;e-=1){const t=i.charAt(e);if("."!==t&&"-"!==t){const n=parseInt(t,10)+1;if(n<10)return c.replaceAt(i,e,n);i=c.replaceAt(i,e,"0")}}return`1${i}`}return i}static setCursor(e,t){const n=()=>{e.setSelectionRange(t,t)};e===document.activeElement&&(n(),setTimeout(n,1))}static event(e){const t=document.createEvent("Event");return t.initEvent(e,!0,!0),t}}var m={debug:!1,masked:!1,prefix:"",suffix:"",thousands:",",decimal:".",precision:2,disableNegative:!1,disabled:!1,min:null,max:null,allowBlank:!1,minimumNumberOfCharacters:0,modelModifiers:{number:!1}};class g extends c{constructor(e){super(),this.setNumber(e)}getNumber(){return this.number}getDecimalPrecision(){return this.decimal}setNumber(e){if(this.decimal=0,"bigint"==typeof e)this.number=e;else if("number"==typeof e)this.setupString(e.toString());else{if("string"!=typeof e)throw new Error(`BigNumber has received and invalid typeof: ${typeof e}. Only bigint, number and string are permitted.`);this.setupString(e)}}setupString(e){if(e=this.constructor.removeLeadingZeros(e),this.constructor.isValidInteger(e))this.number=BigInt(e);else{if(!this.constructor.isValidFloat(e))throw new Error(`BigNumber has received and invalid format for the constructor: ${e}`);this.decimal=this.constructor.guessFloatPrecision(e),this.number=BigInt(e.replace(".",""))}}toFixed(e=0,t=!0){let n=this.toString();const i=e-this.getDecimalPrecision();return i>0?(n.includes(".")||(n+="."),n.padEnd(n.length+i,"0")):i<0?t?this.constructor.round(n,e):n.slice(0,i):n}toString(){let e=this.number.toString();if(this.decimal){let t=!1;return"-"===e.charAt(0)&&(e=e.substring(1),t=!0),e=e.padStart(e.length+this.decimal,"0"),e=`${e.slice(0,-this.decimal)}.${e.slice(-this.decimal)}`,e=this.constructor.removeLeadingZeros(e),(t?"-":"")+e}return e}lessThan(e){const t=this.adjustComparisonNumbers(e);return t[0]<t[1]}biggerThan(e){const t=this.adjustComparisonNumbers(e);return t[0]>t[1]}isEqual(e){const t=this.adjustComparisonNumbers(e);return t[0]===t[1]}adjustComparisonNumbers(e){"BigNumber"!==e.constructor.name&&(e=new g(e));const t=this.getDecimalPrecision()-e.getDecimalPrecision();let n,i;return t>0?(n=this.getNumber(),i=e.getNumber()*10n**BigInt(t)):t<0?(n=this.getNumber()*10n**BigInt(-1*t),i=e.getNumber()):(n=this.getNumber(),i=e.getNumber()),[n,i]}}function p(e,t=m,n){t.debug&&console.log("utils format() - caller",n),t.debug&&console.log("utils format() - input1",e),null==e?e="":"number"==typeof e?e=e.toFixed(c.fixed(t.precision)):t.modelModifiers&&t.modelModifiers.number&&c.isValidInteger(e)&&(e=Number(e).toFixed(c.fixed(t.precision))),t.debug&&console.log("utils format() - input2",e);const i=t.disableNegative?"":e.indexOf("-")>=0?"-":"";let o=e.replace(t.prefix,"").replace(t.suffix,"");t.debug&&console.log("utils format() - filtered",o),!t.precision&&"."!==t.thousands&&g.isValidFloat(o)&&(o=g.round(o,0),t.debug&&console.log("utils format() - !opt.precision && isValidFloat()",o));const r=c.onlyNumbers(o);t.debug&&console.log("utils format() - numbers",r),t.debug&&console.log("utils format() - numbersToCurrency",i+c.numbersToCurrency(r,t.precision));const s=new g(i+c.numbersToCurrency(r,t.precision));t.debug&&console.log("utils format() - bigNumber1",s.toString()),t.max&&s.biggerThan(t.max)&&s.setNumber(t.max),t.min&&s.lessThan(t.min)&&s.setNumber(t.min);const a=s.toFixed(c.fixed(t.precision));if(t.debug&&console.log("utils format() - bigNumber2",s.toFixed(c.fixed(t.precision))),/^0(\.0+)?$/g.test(a)&&t.allowBlank)return"";const l=a.split("."),u=2===l.length?l[1].length:0;l[0]=l[0].padStart(t.minimumNumberOfCharacters-u,"0");let d=l[0];const p=l[1];d=c.addThousandSeparator(d,t.thousands);const f=t.prefix+c.joinIntegerAndDecimal(d,p,t.decimal)+t.suffix;return t.debug&&console.log("utils format() - output",f),f}function f(e,t=m,n){t.debug&&console.log("utils unformat() - caller",n),t.debug&&console.log("utils unformat() - input",e);const i=t.disableNegative?"":e.indexOf("-")>=0?"-":"",o=e.replace(t.prefix,"").replace(t.suffix,"");t.debug&&console.log("utils unformat() - filtered",o);const r=c.onlyNumbers(o);t.debug&&console.log("utils unformat() - numbers",r);const s=new g(i+c.numbersToCurrency(r,t.precision));t.debug&&console.log("utils unformat() - bigNumber1",r.toString()),t.max&&s.biggerThan(t.max)&&s.setNumber(t.max),t.min&&s.lessThan(t.min)&&s.setNumber(t.min);let a=s.toFixed(c.fixed(t.precision));return t.modelModifiers&&t.modelModifiers.number&&(a=parseFloat(a)),t.debug&&console.log("utils unformat() - output",a),a}let b=null;const v=(e,t)=>{if(b.debug&&console.log("directive setValue() - caller",t),!c.validateRestrictedOptions(b))return void(b.debug&&console.log("directive setValue() - validateRestrictedOptions() return false. Stopping here...",e.value));let n=e.value.length-e.selectionEnd;e.value=p(e.value,b,t),n=Math.max(n,b.suffix.length),n=e.value.length-n,n=Math.max(n,b.prefix.length),c.setCursor(e,n),e.dispatchEvent(c.event("change"))};var h={mounted(e,t){if(t.value){if(b=c.filterOptRestrictions({...m,...t.value}),b.debug&&console.log("directive mounted() - opt",b),"INPUT"!==e.tagName.toLocaleUpperCase()){const t=e.getElementsByTagName("input");1!==t.length||(e=t[0])}e.onkeydown=t=>{const n="Backspace"===t.code||"Delete"===t.code,i=e.value.length-e.selectionEnd==0;if(b.debug&&console.log("directive onkeydown() - el.value",e.value),b.debug&&console.log("directive onkeydown() - backspacePressed",n),b.debug&&console.log("directive onkeydown() - isAtEndPosition",i),b.allowBlank&&n&&i&&0===f(e.value,b)&&(b.debug&&console.log('directive onkeydown() - set el.value = ""',e.value),e.value="",e.dispatchEvent(c.event("change"))),b.debug&&console.log("directive onkeydown() - e.key",t.key),"+"===t.key){b.debug&&console.log("directive onkeydown() - unformat el.value",e.value);const t=f(e.value,b);t<0&&(e.value=-1*t)}},e.oninput=()=>{b.debug&&console.log("directive oninput()",e.value),/^[1-9]$/.test(e.value)&&(e.value=c.numbersToCurrency(e.value,c.fixed(b.precision)),b.debug&&console.log("directive oninput() - is 1-9",e.value)),v(e,"directive oninput")},b.debug&&console.log("directive mounted() - el.value",e.value),v(e,"directive mounted")}},updated(e,t){t.value&&(b=c.filterOptRestrictions({...m,...t.value}),b.debug&&console.log("directive updated() - el.value",e.value),b.debug&&console.log("directive updated() - opt",b),v(e,"directive updated"))},beforeUnmount(e){e.onkeydown=null,e.oninput=null,e.onfocus=null}};const y=e({inheritAttrs:!1,name:"Money3",props:{debug:{required:!1,type:Boolean,default:!1},id:{required:!1,type:[Number,String],default:0},modelValue:{required:!1,type:[Number,String,void 0,null],default:null},modelModifiers:{required:!1,type:Object,default:()=>({number:!1})},masked:{type:Boolean,default:!1},precision:{type:Number,default:()=>m.precision},decimal:{type:String,default:()=>m.decimal,validator:e=>c.validateRestrictedInput(e,"decimal")},thousands:{type:String,default:()=>m.thousands,validator:e=>c.validateRestrictedInput(e,"thousands")},prefix:{type:String,default:()=>m.prefix,validator:e=>c.validateRestrictedInput(e,"prefix")},suffix:{type:String,default:()=>m.suffix,validator:e=>c.validateRestrictedInput(e,"suffix")},disableNegative:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},max:{type:[String,Number],default:()=>m.max},min:{type:[String,Number],default:()=>m.min},allowBlank:{type:Boolean,default:()=>m.allowBlank},minimumNumberOfCharacters:{type:Number,default:()=>m.minimumNumberOfCharacters}},directives:{money3:h},setup(e,{emit:o,attrs:r}){e.debug&&console.log("component setup()",e);const s=e.modelModifiers&&e.modelModifiers.number?Number(e.modelValue).toFixed(c.fixed(e.precision)):e.modelValue,a=t({formattedValue:p(s,e,"component setup")});e.debug&&console.log("component setup() - data.formattedValue",a.formattedValue),n((()=>e.modelValue),(t=>{e.debug&&console.log("component watch() -> val",t);const n=p(t,c.filterOptRestrictions({...e}),"component watch");n!==a.formattedValue&&(e.debug&&console.log("component watch() changed -> formatted",n),a.formattedValue=n)}));let l=null;const u=i((()=>{const e={...r};return delete e["onUpdate:modelValue"],e}));return{data:a,listeners:u,change:function(t){e.debug&&console.log("component change() -> evt.target.value",t.target.value);const n=e.masked&&!e.modelModifiers.number?t.target.value:f(t.target.value,c.filterOptRestrictions({...e}),"component change");n!==l&&(l=n,e.debug&&console.log("component change() -> update:model-value",n),o("update:model-value",n))}}}}),x=["id","value","disabled"];y.render=function(e,t,n,i,u,d){const c=o("money3");return r((s(),a("input",l({type:"tel",id:e.id,value:e.data.formattedValue,disabled:e.disabled,onChange:t[0]||(t[0]=(...t)=>e.change&&e.change(...t))},e.listeners,{class:"v-money3"}),null,16,x)),[[c,{precision:e.precision,decimal:e.decimal,thousands:e.thousands,prefix:e.prefix,suffix:e.suffix,disableNegative:e.disableNegative,min:e.min,max:e.max,allowBlank:e.allowBlank,minimumNumberOfCharacters:e.minimumNumberOfCharacters,debug:e.debug,modelModifiers:e.modelModifiers}]])};const N={install:e=>{e.component("money3",y),e.directive("money3",h)}};export{y as Money,y as Money3,y as Money3Component,h as Money3Directive,h as VMoney,h as VMoney3,N as default,p as format,f as unformat};
1
+ var e=Object.defineProperty,t=(t,n,i)=>(((t,n,i)=>{n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[n]=i})(t,"symbol"!=typeof n?n+"":n,i),i);import{defineComponent as n,getCurrentInstance as i,toRefs as r,ref as u,watch as a,useAttrs as o,computed as l,resolveDirective as s,withDirectives as d,openBlock as c,createElementBlock as m,mergeProps as f,unref as p}from"vue";var v={debug:!1,masked:!1,prefix:"",suffix:"",thousands:",",decimal:".",precision:2,disableNegative:!1,disabled:!1,min:null,max:null,allowBlank:!1,minimumNumberOfCharacters:0,modelModifiers:{number:!1},shouldRound:!0};const g=["+","-"],b=["decimal","thousands","prefix","suffix"];function h(e){return Math.max(0,Math.min(e,1e3))}function y(e,t){return e=e.padStart(t+1,"0"),0===t?e:`${e.slice(0,-t)}.${e.slice(-t)}`}function x(e){return(e=e?e.toString():"").replace(/\D+/g,"")||"0"}function N(e,t){return g.includes(e)?(console.warn(`v-money3 "${t}" property don't accept "${e}" as a value.`),!1):!/\d/g.test(e)||(console.warn(`v-money3 "${t}" property don't accept "${e}" (any number) as a value.`),!1)}function w(e){for(const t of b){e[t]=e[t].replace(/\d+/g,"");for(const n of g)e[t]=e[t].replaceAll(n,"")}return e}function k(e){return e.length-(e.indexOf(".")+1)}function S(e){return e.replace(/^(-?)0+(?!\.)(.+)/,"$1$2")}function B(e){return/^-?[\d]+$/g.test(e)}function M(e){return/^-?[\d]+(\.[\d]+)$/g.test(e)}function $(e,t,n){return t>e.length-1?e:e.substring(0,t)+n+e.substring(t+1)}function C(e,t){const n=t-k(e);if(n>=0)return e;let i=e.slice(0,n);const r=e.slice(n);if("."===i.charAt(i.length-1)&&(i=i.slice(0,-1)),parseInt(r.charAt(0),10)>=5){for(let e=i.length-1;e>=0;e-=1){const t=i.charAt(e);if("."!==t&&"-"!==t){const n=parseInt(t,10)+1;if(n<10)return $(i,e,n);i=$(i,e,"0")}}return`1${i}`}return i}function F(e){return new Event(e,{bubbles:!0,cancelable:!1})}function O({debug:e=!1},...t){e&&console.log(...t)}class E{constructor(e){t(this,"number",0n),t(this,"decimal",0),this.setNumber(e)}getNumber(){return this.number}getDecimalPrecision(){return this.decimal}setNumber(e){this.decimal=0,"bigint"==typeof e?this.number=e:"number"==typeof e?this.setupString(e.toString()):this.setupString(e)}toFixed(e=0,t=!0){let n=this.toString();const i=e-this.getDecimalPrecision();return i>0?(n.includes(".")||(n+="."),n.padEnd(n.length+i,"0")):i<0?t?C(n,e):n.slice(0,i):n}toString(){let e=this.number.toString();if(this.decimal){let t=!1;return"-"===e.charAt(0)&&(e=e.substring(1),t=!0),e=e.padStart(e.length+this.decimal,"0"),e=`${e.slice(0,-this.decimal)}.${e.slice(-this.decimal)}`,e=S(e),(t?"-":"")+e}return e}lessThan(e){const[t,n]=this.adjustComparisonNumbers(e);return t<n}biggerThan(e){const[t,n]=this.adjustComparisonNumbers(e);return t>n}isEqual(e){const[t,n]=this.adjustComparisonNumbers(e);return t===n}setupString(e){if(B(e=S(e)))this.number=BigInt(e);else{if(!M(e))throw new Error(`BigNumber has received and invalid format for the constructor: ${e}`);this.decimal=k(e),this.number=BigInt(e.replace(".",""))}}adjustComparisonNumbers(e){let t;t="BigNumber"!==e.constructor.name?new E(e):e;const n=this.getDecimalPrecision()-t.getDecimalPrecision();let i=this.getNumber(),r=t.getNumber();return n>0?r=t.getNumber()*10n**BigInt(n):n<0&&(i=this.getNumber()*10n**BigInt(-1*n)),[i,r]}}function R(e,t=v,n=""){O(t,"utils format() - caller",n),O(t,"utils format() - input1",e),null==e?e="":"number"==typeof e?e=t.shouldRound?e.toFixed(h(t.precision)):e.toFixed(h(t.precision)+1).slice(0,-1):t.modelModifiers&&t.modelModifiers.number&&B(e)&&(e=Number(e).toFixed(h(t.precision))),O(t,"utils format() - input2",e);const i=t.disableNegative?"":e.indexOf("-")>=0?"-":"";let r=e.replace(t.prefix,"").replace(t.suffix,"");O(t,"utils format() - filtered",r),!t.precision&&"."!==t.thousands&&M(r)&&(r=C(r,0),O(t,"utils format() - !opt.precision && isValidFloat()",r));const u=x(r);O(t,"utils format() - numbers",u),O(t,"utils format() - numbersToCurrency",i+y(u,t.precision));const a=new E(i+y(u,t.precision));O(t,"utils format() - bigNumber1",a.toString()),t.max&&a.biggerThan(t.max)&&a.setNumber(t.max),t.min&&a.lessThan(t.min)&&a.setNumber(t.min);const o=a.toFixed(h(t.precision),t.shouldRound);if(O(t,"utils format() - bigNumber2",a.toFixed(h(t.precision))),/^0(\.0+)?$/g.test(o)&&t.allowBlank)return"";let[l,s]=o.split(".");const d=void 0!==s?s.length:0;l=l.padStart(t.minimumNumberOfCharacters-d,"0"),l=function(e,t){return e.replace(/(\d)(?=(?:\d{3})+\b)/gm,`$1${t}`)}(l,t.thousands);const c=t.prefix+function(e,t,n){return t?e+n+t:e}(l,s,t.decimal)+t.suffix;return O(t,"utils format() - output",c),c}function T(e,t=v,n=""){O(t,"utils unformat() - caller",n),O(t,"utils unformat() - input",e);const i=t.disableNegative?"":e.indexOf("-")>=0?"-":"",r=e.replace(t.prefix,"").replace(t.suffix,"");O(t,"utils unformat() - filtered",r);const u=x(r);O(t,"utils unformat() - numbers",u);const a=new E(i+y(u,t.precision));O(t,"utils unformat() - bigNumber1",u.toString()),t.max&&a.biggerThan(t.max)&&a.setNumber(t.max),t.min&&a.lessThan(t.min)&&a.setNumber(t.min);let o=a.toFixed(h(t.precision),t.shouldRound);return t.modelModifiers&&t.modelModifiers.number&&(o=parseFloat(o)),O(t,"utils unformat() - output",o),o}let V=v;const P=(e,t)=>{if(O(V,"directive setValue() - caller",t),!function(e){for(const t of b)if(!N(e[t],t))return!1;return!0}(V))return void O(V,"directive setValue() - validateRestrictedOptions() return false. Stopping here...",e.value);let n=e.value.length-(e.selectionEnd||0);e.value=R(e.value,V,t),n=Math.max(n,V.suffix.length),n=e.value.length-n,n=Math.max(n,V.prefix.length),function(e,t){const n=()=>{e.setSelectionRange(t,t)};e===document.activeElement&&(n(),setTimeout(n,1))}(e,n),e.dispatchEvent(F("change"))};var A={mounted(e,t){if(t.value){if(V=w({...v,...t.value}),O(V,"directive mounted() - opt",V),"INPUT"!==e.tagName.toLocaleUpperCase()){const t=e.getElementsByTagName("input");1!==t.length||(e=t[0])}e.onkeydown=t=>{const n="Backspace"===t.code||"Delete"===t.code,i=e.value.length-(e.selectionEnd||0)==0;if(O(V,"directive onkeydown() - el.value",e.value),O(V,"directive onkeydown() - backspacePressed",n),O(V,"directive onkeydown() - isAtEndPosition",i),V.allowBlank&&n&&i&&0===T(e.value,V,"directive onkeydown allowBlank")&&(O(V,'directive onkeydown() - set el.value = ""',e.value),e.value="",e.dispatchEvent(F("change"))),O(V,"directive onkeydown() - e.key",t.key),"+"===t.key){O(V,"directive onkeydown() - unformat el.value",e.value);let t=T(e.value,V,"directive onkeydown +");"string"==typeof t&&(t=parseFloat(t)),t<0&&(e.value=String(-1*t))}},e.oninput=()=>{O(V,"directive oninput()",e.value),/^[1-9]$/.test(e.value)&&(e.value=y(e.value,h(V.precision)),O(V,"directive oninput() - is 1-9",e.value)),P(e,"directive oninput")},O(V,"directive mounted() - el.value",e.value),P(e,"directive mounted")}},updated(e,t){t.value&&(V=w({...v,...t.value}),O(V,"directive updated() - el.value",e.value),O(V,"directive updated() - opt",V),P(e,"directive updated"))},beforeUnmount(e){e.onkeydown=null,e.oninput=null,e.onfocus=null}};const I=["id","value","disabled"];const j=n({...{inheritAttrs:!1,name:"Money3",directives:{money3:A}},props:{debug:{required:!1,type:Boolean,default:!1},id:{required:!1,type:[Number,String],default:()=>{const e=i();return e?e.uid:null}},modelValue:{required:!0,type:[Number,String]},modelModifiers:{required:!1,type:Object,default:()=>({number:!1})},masked:{type:Boolean,default:!1},precision:{type:Number,default:()=>v.precision},decimal:{type:String,default:()=>v.decimal,validator:e=>N(e,"decimal")},thousands:{type:String,default:()=>v.thousands,validator:e=>N(e,"thousands")},prefix:{type:String,default:()=>v.prefix,validator:e=>N(e,"prefix")},suffix:{type:String,default:()=>v.suffix,validator:e=>N(e,"suffix")},disableNegative:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},max:{type:[Number,String],default:()=>v.max},min:{type:[Number,String],default:()=>v.min},allowBlank:{type:Boolean,default:()=>v.allowBlank},minimumNumberOfCharacters:{type:Number,default:()=>v.minimumNumberOfCharacters},shouldRound:{type:Boolean,default:()=>v.shouldRound}},emits:["update:model-value"],setup:function(e,{emit:t}){const n=e,{modelValue:i,modelModifiers:v,masked:g,precision:b,shouldRound:y}=r(n);O(n,"component setup()",n);let x=i.value;v.value&&v.value.number&&(x=y.value?Number(i.value).toFixed(h(b.value)):Number(i.value).toFixed(h(b.value)+1).slice(0,-1));const N=u(R(x,n,"component setup"));O(n,"component setup() - data.formattedValue",N.value),a(i,(function(e){O(n,"component watch() -> value",e);const t=R(e,w({...n}),"component watch");t!==N.value&&(O(n,"component watch() changed -> formatted",t),N.value=t)}));let k=null;function S(e){let i;O(n,"component change() -> evt.target.value",e.target.value),i=g.value&&!v.value.number?e.target.value:T(e.target.value,w({...n}),"component change"),i!==k&&(k=i,O(n,"component change() -> update:model-value",i),t("update:model-value",i))}const B=o(),M=l((()=>{const e={...B};return delete e["onUpdate:modelValue"],e}));return(e,t)=>{const i=s("money3");return d((c(),m("input",f({id:n.id},p(M),{type:"tel",class:"v-money3",value:N.value,disabled:n.disabled,onChange:S}),null,16,I)),[[i,{precision:p(b),decimal:n.decimal,thousands:n.thousands,prefix:n.prefix,suffix:n.suffix,disableNegative:n.disableNegative,min:n.min,max:n.max,allowBlank:n.allowBlank,minimumNumberOfCharacters:n.minimumNumberOfCharacters,debug:n.debug,modelModifiers:p(v),shouldRound:p(y)}]])}}});var D={install(e){e.component("money3",j),e.directive("money3",A)}};export{E as BigNumber,j as Money,j as Money3,j as Money3Component,A as Money3Directive,A as VMoney,A as VMoney3,D as default,R as format,T as unformat};
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("vue")):"function"==typeof define&&define.amd?define(["exports","vue"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["v-money3"]={},e.Vue)}(this,(function(e,t){"use strict";const n=["+","-"],i=["decimal","thousands","prefix","suffix"];class o{static between(e,t,n){return Math.max(e,Math.min(t,n))}static fixed(e){return o.between(0,e,1e3)}static numbersToCurrency(e,t){return e=e.padStart(t+1,"0"),0===t?e:`${e.slice(0,-t)}.${e.slice(-t)}`}static toStr(e){return e?e.toString():""}static onlyNumbers(e){return o.toStr(e).replace(/\D+/g,"")||"0"}static addThousandSeparator(e,t){return e.replace(/(\d)(?=(?:\d{3})+\b)/gm,`$1${t}`)}static joinIntegerAndDecimal(e,t,n){return t?e+n+t:e}static validateRestrictedInput(e,t){return n.includes(e)?(console.warn(`v-money3 "${t}" property don't accept "${e}" as a value.`),!1):!/\d/g.test(e)||(console.warn(`v-money3 "${t}" property don't accept "${e}" (any number) as a value.`),!1)}static validateRestrictedOptions(e){for(const t of i){if(!o.validateRestrictedInput(e[t],t))return!1}return!0}static filterRestrictedCharactersFromRestrictedOptions(e){for(const t of i)for(const i of n)e[t]=e[t].replaceAll(i,"");return e}static filterNumbersFromRestrictedOptions(e){for(const t of i)e[t]=e[t].replace(/\d+/g,"");return e}static filterOptRestrictions(e){return e=o.filterRestrictedCharactersFromRestrictedOptions(e),e=o.filterNumbersFromRestrictedOptions(e)}static guessFloatPrecision(e){return e.length-(e.indexOf(".")+1)}static removeLeadingZeros(e){return e.replace(/^(-?)0+(?!\.)(.+)/,"$1$2")}static isValidInteger(e){return/^-?[\d]+$/g.test(e)}static isValidFloat(e){return/^-?[\d]+(\.[\d]+)$/g.test(e)}static replaceAt(e,t,n){return t>e.length-1?e:e.substring(0,t)+n+e.substring(t+1)}static round(e,t){const n=t-o.guessFloatPrecision(e);if(n>=0)return e;let i=e.slice(0,n);const r=e.slice(n);if("."===i.charAt(i.length-1)&&(i=i.slice(0,-1)),parseInt(r.charAt(0),10)>=5){for(let e=i.length-1;e>=0;e-=1){const t=i.charAt(e);if("."!==t&&"-"!==t){const n=parseInt(t,10)+1;if(n<10)return o.replaceAt(i,e,n);i=o.replaceAt(i,e,"0")}}return`1${i}`}return i}static setCursor(e,t){const n=()=>{e.setSelectionRange(t,t)};e===document.activeElement&&(n(),setTimeout(n,1))}static event(e){const t=document.createEvent("Event");return t.initEvent(e,!0,!0),t}}var r={debug:!1,masked:!1,prefix:"",suffix:"",thousands:",",decimal:".",precision:2,disableNegative:!1,disabled:!1,min:null,max:null,allowBlank:!1,minimumNumberOfCharacters:0,modelModifiers:{number:!1}};class s extends o{constructor(e){super(),this.setNumber(e)}getNumber(){return this.number}getDecimalPrecision(){return this.decimal}setNumber(e){if(this.decimal=0,"bigint"==typeof e)this.number=e;else if("number"==typeof e)this.setupString(e.toString());else{if("string"!=typeof e)throw new Error(`BigNumber has received and invalid typeof: ${typeof e}. Only bigint, number and string are permitted.`);this.setupString(e)}}setupString(e){if(e=this.constructor.removeLeadingZeros(e),this.constructor.isValidInteger(e))this.number=BigInt(e);else{if(!this.constructor.isValidFloat(e))throw new Error(`BigNumber has received and invalid format for the constructor: ${e}`);this.decimal=this.constructor.guessFloatPrecision(e),this.number=BigInt(e.replace(".",""))}}toFixed(e=0,t=!0){let n=this.toString();const i=e-this.getDecimalPrecision();return i>0?(n.includes(".")||(n+="."),n.padEnd(n.length+i,"0")):i<0?t?this.constructor.round(n,e):n.slice(0,i):n}toString(){let e=this.number.toString();if(this.decimal){let t=!1;return"-"===e.charAt(0)&&(e=e.substring(1),t=!0),e=e.padStart(e.length+this.decimal,"0"),e=`${e.slice(0,-this.decimal)}.${e.slice(-this.decimal)}`,e=this.constructor.removeLeadingZeros(e),(t?"-":"")+e}return e}lessThan(e){const t=this.adjustComparisonNumbers(e);return t[0]<t[1]}biggerThan(e){const t=this.adjustComparisonNumbers(e);return t[0]>t[1]}isEqual(e){const t=this.adjustComparisonNumbers(e);return t[0]===t[1]}adjustComparisonNumbers(e){"BigNumber"!==e.constructor.name&&(e=new s(e));const t=this.getDecimalPrecision()-e.getDecimalPrecision();let n,i;return t>0?(n=this.getNumber(),i=e.getNumber()*10n**BigInt(t)):t<0?(n=this.getNumber()*10n**BigInt(-1*t),i=e.getNumber()):(n=this.getNumber(),i=e.getNumber()),[n,i]}}function l(e,t=r,n){t.debug&&console.log("utils format() - caller",n),t.debug&&console.log("utils format() - input1",e),null==e?e="":"number"==typeof e?e=e.toFixed(o.fixed(t.precision)):t.modelModifiers&&t.modelModifiers.number&&o.isValidInteger(e)&&(e=Number(e).toFixed(o.fixed(t.precision))),t.debug&&console.log("utils format() - input2",e);const i=t.disableNegative?"":e.indexOf("-")>=0?"-":"";let l=e.replace(t.prefix,"").replace(t.suffix,"");t.debug&&console.log("utils format() - filtered",l),!t.precision&&"."!==t.thousands&&s.isValidFloat(l)&&(l=s.round(l,0),t.debug&&console.log("utils format() - !opt.precision && isValidFloat()",l));const a=o.onlyNumbers(l);t.debug&&console.log("utils format() - numbers",a),t.debug&&console.log("utils format() - numbersToCurrency",i+o.numbersToCurrency(a,t.precision));const u=new s(i+o.numbersToCurrency(a,t.precision));t.debug&&console.log("utils format() - bigNumber1",u.toString()),t.max&&u.biggerThan(t.max)&&u.setNumber(t.max),t.min&&u.lessThan(t.min)&&u.setNumber(t.min);const d=u.toFixed(o.fixed(t.precision));if(t.debug&&console.log("utils format() - bigNumber2",u.toFixed(o.fixed(t.precision))),/^0(\.0+)?$/g.test(d)&&t.allowBlank)return"";const c=d.split("."),m=2===c.length?c[1].length:0;c[0]=c[0].padStart(t.minimumNumberOfCharacters-m,"0");let g=c[0];const f=c[1];g=o.addThousandSeparator(g,t.thousands);const p=t.prefix+o.joinIntegerAndDecimal(g,f,t.decimal)+t.suffix;return t.debug&&console.log("utils format() - output",p),p}function a(e,t=r,n){t.debug&&console.log("utils unformat() - caller",n),t.debug&&console.log("utils unformat() - input",e);const i=t.disableNegative?"":e.indexOf("-")>=0?"-":"",l=e.replace(t.prefix,"").replace(t.suffix,"");t.debug&&console.log("utils unformat() - filtered",l);const a=o.onlyNumbers(l);t.debug&&console.log("utils unformat() - numbers",a);const u=new s(i+o.numbersToCurrency(a,t.precision));t.debug&&console.log("utils unformat() - bigNumber1",a.toString()),t.max&&u.biggerThan(t.max)&&u.setNumber(t.max),t.min&&u.lessThan(t.min)&&u.setNumber(t.min);let d=u.toFixed(o.fixed(t.precision));return t.modelModifiers&&t.modelModifiers.number&&(d=parseFloat(d)),t.debug&&console.log("utils unformat() - output",d),d}let u=null;const d=(e,t)=>{if(u.debug&&console.log("directive setValue() - caller",t),!o.validateRestrictedOptions(u))return void(u.debug&&console.log("directive setValue() - validateRestrictedOptions() return false. Stopping here...",e.value));let n=e.value.length-e.selectionEnd;e.value=l(e.value,u,t),n=Math.max(n,u.suffix.length),n=e.value.length-n,n=Math.max(n,u.prefix.length),o.setCursor(e,n),e.dispatchEvent(o.event("change"))};var c={mounted(e,t){if(t.value){if(u=o.filterOptRestrictions({...r,...t.value}),u.debug&&console.log("directive mounted() - opt",u),"INPUT"!==e.tagName.toLocaleUpperCase()){const t=e.getElementsByTagName("input");1!==t.length||(e=t[0])}e.onkeydown=t=>{const n="Backspace"===t.code||"Delete"===t.code,i=e.value.length-e.selectionEnd==0;if(u.debug&&console.log("directive onkeydown() - el.value",e.value),u.debug&&console.log("directive onkeydown() - backspacePressed",n),u.debug&&console.log("directive onkeydown() - isAtEndPosition",i),u.allowBlank&&n&&i&&0===a(e.value,u)&&(u.debug&&console.log('directive onkeydown() - set el.value = ""',e.value),e.value="",e.dispatchEvent(o.event("change"))),u.debug&&console.log("directive onkeydown() - e.key",t.key),"+"===t.key){u.debug&&console.log("directive onkeydown() - unformat el.value",e.value);const t=a(e.value,u);t<0&&(e.value=-1*t)}},e.oninput=()=>{u.debug&&console.log("directive oninput()",e.value),/^[1-9]$/.test(e.value)&&(e.value=o.numbersToCurrency(e.value,o.fixed(u.precision)),u.debug&&console.log("directive oninput() - is 1-9",e.value)),d(e,"directive oninput")},u.debug&&console.log("directive mounted() - el.value",e.value),d(e,"directive mounted")}},updated(e,t){t.value&&(u=o.filterOptRestrictions({...r,...t.value}),u.debug&&console.log("directive updated() - el.value",e.value),u.debug&&console.log("directive updated() - opt",u),d(e,"directive updated"))},beforeUnmount(e){e.onkeydown=null,e.oninput=null,e.onfocus=null}};const m=t.defineComponent({inheritAttrs:!1,name:"Money3",props:{debug:{required:!1,type:Boolean,default:!1},id:{required:!1,type:[Number,String],default:0},modelValue:{required:!1,type:[Number,String,void 0,null],default:null},modelModifiers:{required:!1,type:Object,default:()=>({number:!1})},masked:{type:Boolean,default:!1},precision:{type:Number,default:()=>r.precision},decimal:{type:String,default:()=>r.decimal,validator:e=>o.validateRestrictedInput(e,"decimal")},thousands:{type:String,default:()=>r.thousands,validator:e=>o.validateRestrictedInput(e,"thousands")},prefix:{type:String,default:()=>r.prefix,validator:e=>o.validateRestrictedInput(e,"prefix")},suffix:{type:String,default:()=>r.suffix,validator:e=>o.validateRestrictedInput(e,"suffix")},disableNegative:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},max:{type:[String,Number],default:()=>r.max},min:{type:[String,Number],default:()=>r.min},allowBlank:{type:Boolean,default:()=>r.allowBlank},minimumNumberOfCharacters:{type:Number,default:()=>r.minimumNumberOfCharacters}},directives:{money3:c},setup(e,{emit:n,attrs:i}){e.debug&&console.log("component setup()",e);const r=e.modelModifiers&&e.modelModifiers.number?Number(e.modelValue).toFixed(o.fixed(e.precision)):e.modelValue,s=t.reactive({formattedValue:l(r,e,"component setup")});e.debug&&console.log("component setup() - data.formattedValue",s.formattedValue),t.watch((()=>e.modelValue),(t=>{e.debug&&console.log("component watch() -> val",t);const n=l(t,o.filterOptRestrictions({...e}),"component watch");n!==s.formattedValue&&(e.debug&&console.log("component watch() changed -> formatted",n),s.formattedValue=n)}));let u=null;const d=t.computed((()=>{const e={...i};return delete e["onUpdate:modelValue"],e}));return{data:s,listeners:d,change:function(t){e.debug&&console.log("component change() -> evt.target.value",t.target.value);const i=e.masked&&!e.modelModifiers.number?t.target.value:a(t.target.value,o.filterOptRestrictions({...e}),"component change");i!==u&&(u=i,e.debug&&console.log("component change() -> update:model-value",i),n("update:model-value",i))}}}}),g=["id","value","disabled"];m.render=function(e,n,i,o,r,s){const l=t.resolveDirective("money3");return t.withDirectives((t.openBlock(),t.createElementBlock("input",t.mergeProps({type:"tel",id:e.id,value:e.data.formattedValue,disabled:e.disabled,onChange:n[0]||(n[0]=(...t)=>e.change&&e.change(...t))},e.listeners,{class:"v-money3"}),null,16,g)),[[l,{precision:e.precision,decimal:e.decimal,thousands:e.thousands,prefix:e.prefix,suffix:e.suffix,disableNegative:e.disableNegative,min:e.min,max:e.max,allowBlank:e.allowBlank,minimumNumberOfCharacters:e.minimumNumberOfCharacters,debug:e.debug,modelModifiers:e.modelModifiers}]])};const f={install:e=>{e.component("money3",m),e.directive("money3",c)}};e.Money=m,e.Money3=m,e.Money3Component=m,e.Money3Directive=c,e.VMoney=c,e.VMoney3=c,e.default=f,e.format=l,e.unformat=a,Object.defineProperty(e,"__esModule",{value:!0}),e[Symbol.toStringTag]="Module"}));
1
+ var __defProp=Object.defineProperty,__defNormalProp=(e,t,n)=>t in e?__defProp(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,__publicField=(e,t,n)=>(__defNormalProp(e,"symbol"!=typeof t?t+"":t,n),n);!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("vue")):"function"==typeof define&&define.amd?define(["exports","vue"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["v-money3"]={},e.Vue)}(this,(function(e,t){"use strict";var n={debug:!1,masked:!1,prefix:"",suffix:"",thousands:",",decimal:".",precision:2,disableNegative:!1,disabled:!1,min:null,max:null,allowBlank:!1,minimumNumberOfCharacters:0,modelModifiers:{number:!1},shouldRound:!0};const i=["+","-"],r=["decimal","thousands","prefix","suffix"];function o(e){return Math.max(0,Math.min(e,1e3))}function u(e,t){return e=e.padStart(t+1,"0"),0===t?e:`${e.slice(0,-t)}.${e.slice(-t)}`}function a(e){return(e=e?e.toString():"").replace(/\D+/g,"")||"0"}function l(e,t){return i.includes(e)?(console.warn(`v-money3 "${t}" property don't accept "${e}" as a value.`),!1):!/\d/g.test(e)||(console.warn(`v-money3 "${t}" property don't accept "${e}" (any number) as a value.`),!1)}function s(e){for(const t of r){e[t]=e[t].replace(/\d+/g,"");for(const n of i)e[t]=e[t].replaceAll(n,"")}return e}function d(e){return e.length-(e.indexOf(".")+1)}function c(e){return e.replace(/^(-?)0+(?!\.)(.+)/,"$1$2")}function m(e){return/^-?[\d]+$/g.test(e)}function f(e){return/^-?[\d]+(\.[\d]+)$/g.test(e)}function p(e,t,n){return t>e.length-1?e:e.substring(0,t)+n+e.substring(t+1)}function v(e,t){const n=t-d(e);if(n>=0)return e;let i=e.slice(0,n);const r=e.slice(n);if("."===i.charAt(i.length-1)&&(i=i.slice(0,-1)),parseInt(r.charAt(0),10)>=5){for(let e=i.length-1;e>=0;e-=1){const t=i.charAt(e);if("."!==t&&"-"!==t){const n=parseInt(t,10)+1;if(n<10)return p(i,e,n);i=p(i,e,"0")}}return`1${i}`}return i}function g(e){return new Event(e,{bubbles:!0,cancelable:!1})}function b({debug:e=!1},...t){e&&console.log(...t)}class h{constructor(e){__publicField(this,"number",0n),__publicField(this,"decimal",0),this.setNumber(e)}getNumber(){return this.number}getDecimalPrecision(){return this.decimal}setNumber(e){this.decimal=0,"bigint"==typeof e?this.number=e:"number"==typeof e?this.setupString(e.toString()):this.setupString(e)}toFixed(e=0,t=!0){let n=this.toString();const i=e-this.getDecimalPrecision();return i>0?(n.includes(".")||(n+="."),n.padEnd(n.length+i,"0")):i<0?t?v(n,e):n.slice(0,i):n}toString(){let e=this.number.toString();if(this.decimal){let t=!1;return"-"===e.charAt(0)&&(e=e.substring(1),t=!0),e=e.padStart(e.length+this.decimal,"0"),e=`${e.slice(0,-this.decimal)}.${e.slice(-this.decimal)}`,e=c(e),(t?"-":"")+e}return e}lessThan(e){const[t,n]=this.adjustComparisonNumbers(e);return t<n}biggerThan(e){const[t,n]=this.adjustComparisonNumbers(e);return t>n}isEqual(e){const[t,n]=this.adjustComparisonNumbers(e);return t===n}setupString(e){if(m(e=c(e)))this.number=BigInt(e);else{if(!f(e))throw new Error(`BigNumber has received and invalid format for the constructor: ${e}`);this.decimal=d(e),this.number=BigInt(e.replace(".",""))}}adjustComparisonNumbers(e){let t;t="BigNumber"!==e.constructor.name?new h(e):e;const n=this.getDecimalPrecision()-t.getDecimalPrecision();let i=this.getNumber(),r=t.getNumber();return n>0?r=t.getNumber()*10n**BigInt(n):n<0&&(i=this.getNumber()*10n**BigInt(-1*n)),[i,r]}}function y(e,t=n,i=""){b(t,"utils format() - caller",i),b(t,"utils format() - input1",e),null==e?e="":"number"==typeof e?e=t.shouldRound?e.toFixed(o(t.precision)):e.toFixed(o(t.precision)+1).slice(0,-1):t.modelModifiers&&t.modelModifiers.number&&m(e)&&(e=Number(e).toFixed(o(t.precision))),b(t,"utils format() - input2",e);const r=t.disableNegative?"":e.indexOf("-")>=0?"-":"";let l=e.replace(t.prefix,"").replace(t.suffix,"");b(t,"utils format() - filtered",l),!t.precision&&"."!==t.thousands&&f(l)&&(l=v(l,0),b(t,"utils format() - !opt.precision && isValidFloat()",l));const s=a(l);b(t,"utils format() - numbers",s),b(t,"utils format() - numbersToCurrency",r+u(s,t.precision));const d=new h(r+u(s,t.precision));b(t,"utils format() - bigNumber1",d.toString()),t.max&&d.biggerThan(t.max)&&d.setNumber(t.max),t.min&&d.lessThan(t.min)&&d.setNumber(t.min);const c=d.toFixed(o(t.precision),t.shouldRound);if(b(t,"utils format() - bigNumber2",d.toFixed(o(t.precision))),/^0(\.0+)?$/g.test(c)&&t.allowBlank)return"";let[p,g]=c.split(".");const y=void 0!==g?g.length:0;p=p.padStart(t.minimumNumberOfCharacters-y,"0"),p=function(e,t){return e.replace(/(\d)(?=(?:\d{3})+\b)/gm,`$1${t}`)}(p,t.thousands);const x=t.prefix+function(e,t,n){return t?e+n+t:e}(p,g,t.decimal)+t.suffix;return b(t,"utils format() - output",x),x}function x(e,t=n,i=""){b(t,"utils unformat() - caller",i),b(t,"utils unformat() - input",e);const r=t.disableNegative?"":e.indexOf("-")>=0?"-":"",l=e.replace(t.prefix,"").replace(t.suffix,"");b(t,"utils unformat() - filtered",l);const s=a(l);b(t,"utils unformat() - numbers",s);const d=new h(r+u(s,t.precision));b(t,"utils unformat() - bigNumber1",s.toString()),t.max&&d.biggerThan(t.max)&&d.setNumber(t.max),t.min&&d.lessThan(t.min)&&d.setNumber(t.min);let c=d.toFixed(o(t.precision),t.shouldRound);return t.modelModifiers&&t.modelModifiers.number&&(c=parseFloat(c)),b(t,"utils unformat() - output",c),c}let N=n;const w=(e,t)=>{if(b(N,"directive setValue() - caller",t),!function(e){for(const t of r)if(!l(e[t],t))return!1;return!0}(N))return void b(N,"directive setValue() - validateRestrictedOptions() return false. Stopping here...",e.value);let n=e.value.length-(e.selectionEnd||0);e.value=y(e.value,N,t),n=Math.max(n,N.suffix.length),n=e.value.length-n,n=Math.max(n,N.prefix.length),function(e,t){const n=()=>{e.setSelectionRange(t,t)};e===document.activeElement&&(n(),setTimeout(n,1))}(e,n),e.dispatchEvent(g("change"))};var k={mounted(e,t){if(t.value){if(N=s({...n,...t.value}),b(N,"directive mounted() - opt",N),"INPUT"!==e.tagName.toLocaleUpperCase()){const t=e.getElementsByTagName("input");1!==t.length||(e=t[0])}e.onkeydown=t=>{const n="Backspace"===t.code||"Delete"===t.code,i=e.value.length-(e.selectionEnd||0)==0;if(b(N,"directive onkeydown() - el.value",e.value),b(N,"directive onkeydown() - backspacePressed",n),b(N,"directive onkeydown() - isAtEndPosition",i),N.allowBlank&&n&&i&&0===x(e.value,N,"directive onkeydown allowBlank")&&(b(N,'directive onkeydown() - set el.value = ""',e.value),e.value="",e.dispatchEvent(g("change"))),b(N,"directive onkeydown() - e.key",t.key),"+"===t.key){b(N,"directive onkeydown() - unformat el.value",e.value);let t=x(e.value,N,"directive onkeydown +");"string"==typeof t&&(t=parseFloat(t)),t<0&&(e.value=String(-1*t))}},e.oninput=()=>{b(N,"directive oninput()",e.value),/^[1-9]$/.test(e.value)&&(e.value=u(e.value,o(N.precision)),b(N,"directive oninput() - is 1-9",e.value)),w(e,"directive oninput")},b(N,"directive mounted() - el.value",e.value),w(e,"directive mounted")}},updated(e,t){t.value&&(N=s({...n,...t.value}),b(N,"directive updated() - el.value",e.value),b(N,"directive updated() - opt",N),w(e,"directive updated"))},beforeUnmount(e){e.onkeydown=null,e.oninput=null,e.onfocus=null}};const S=["id","value","disabled"];const B={inheritAttrs:!1,name:"Money3",directives:{money3:k}},M=t.defineComponent({...B,props:{debug:{required:!1,type:Boolean,default:!1},id:{required:!1,type:[Number,String],default:()=>{const e=t.getCurrentInstance();return e?e.uid:null}},modelValue:{required:!0,type:[Number,String]},modelModifiers:{required:!1,type:Object,default:()=>({number:!1})},masked:{type:Boolean,default:!1},precision:{type:Number,default:()=>n.precision},decimal:{type:String,default:()=>n.decimal,validator:e=>l(e,"decimal")},thousands:{type:String,default:()=>n.thousands,validator:e=>l(e,"thousands")},prefix:{type:String,default:()=>n.prefix,validator:e=>l(e,"prefix")},suffix:{type:String,default:()=>n.suffix,validator:e=>l(e,"suffix")},disableNegative:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},max:{type:[Number,String],default:()=>n.max},min:{type:[Number,String],default:()=>n.min},allowBlank:{type:Boolean,default:()=>n.allowBlank},minimumNumberOfCharacters:{type:Number,default:()=>n.minimumNumberOfCharacters},shouldRound:{type:Boolean,default:()=>n.shouldRound}},emits:["update:model-value"],setup:function(e,{emit:n}){const i=e,{modelValue:r,modelModifiers:u,masked:a,precision:l,shouldRound:d}=t.toRefs(i);b(i,"component setup()",i);let c=r.value;u.value&&u.value.number&&(c=d.value?Number(r.value).toFixed(o(l.value)):Number(r.value).toFixed(o(l.value)+1).slice(0,-1));const m=t.ref(y(c,i,"component setup"));b(i,"component setup() - data.formattedValue",m.value),t.watch(r,(function(e){b(i,"component watch() -> value",e);const t=y(e,s({...i}),"component watch");t!==m.value&&(b(i,"component watch() changed -> formatted",t),m.value=t)}));let f=null;function p(e){let t;b(i,"component change() -> evt.target.value",e.target.value),t=a.value&&!u.value.number?e.target.value:x(e.target.value,s({...i}),"component change"),t!==f&&(f=t,b(i,"component change() -> update:model-value",t),n("update:model-value",t))}const v=t.useAttrs(),g=t.computed((()=>{const e={...v};return delete e["onUpdate:modelValue"],e}));return(e,n)=>{const r=t.resolveDirective("money3");return t.withDirectives((t.openBlock(),t.createElementBlock("input",t.mergeProps({id:i.id},t.unref(g),{type:"tel",class:"v-money3",value:m.value,disabled:i.disabled,onChange:p}),null,16,S)),[[r,{precision:t.unref(l),decimal:i.decimal,thousands:i.thousands,prefix:i.prefix,suffix:i.suffix,disableNegative:i.disableNegative,min:i.min,max:i.max,allowBlank:i.allowBlank,minimumNumberOfCharacters:i.minimumNumberOfCharacters,debug:i.debug,modelModifiers:t.unref(u),shouldRound:t.unref(d)}]])}}});var $={install(e){e.component("money3",M),e.directive("money3",k)}};e.BigNumber=h,e.Money=M,e.Money3=M,e.Money3Component=M,e.Money3Directive=k,e.VMoney=k,e.VMoney3=k,e.default=$,e.format=y,e.unformat=x,Object.defineProperty(e,"__esModule",{value:!0}),e[Symbol.toStringTag]="Module"}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "v-money3",
3
- "version": "3.17.6",
3
+ "version": "3.20.0",
4
4
  "description": "Vue3 currency input/directive mask",
5
5
  "main": "./dist/v-money3.umd.js",
6
6
  "module": "./dist/v-money3.es.js",
@@ -11,7 +11,7 @@
11
11
  }
12
12
  },
13
13
  "scripts": {
14
- "lint": "./node_modules/node/bin/node ./node_modules/eslint/bin/eslint.js --ext .js,.vue ./",
14
+ "lint": "./node_modules/node/bin/node ./node_modules/eslint/bin/eslint.js --ext .ts,.vue ./src",
15
15
  "serve": "./node_modules/node/bin/node ./node_modules/vite/bin/vite.js --host=localhost --port=3000 --open --force",
16
16
  "build": "./node_modules/node/bin/node ./node_modules/vite/bin/vite.js build",
17
17
  "test": "./node_modules/node/bin/node ./node_modules/jest/bin/jest.js",
@@ -44,21 +44,27 @@
44
44
  },
45
45
  "devDependencies": {
46
46
  "@babel/plugin-transform-runtime": "^7.15.0",
47
- "@babel/preset-env": "^7.15.4",
48
- "@vitejs/plugin-vue": "^1.6.1",
49
- "@vue/compiler-sfc": "^3.2.9",
50
- "@vue/test-utils": "^2.0.0-rc.14",
47
+ "@babel/preset-env": "^7.15.6",
48
+ "@types/jest": "27.0.2",
49
+ "@types/jest-environment-puppeteer": "4.4.1",
50
+ "@types/puppeteer": "5.4.4",
51
+ "@typescript-eslint/eslint-plugin": "^4.31.2",
52
+ "@typescript-eslint/parser": "^4.31.2",
53
+ "@vitejs/plugin-vue": "^1.9.2",
54
+ "@vue/compiler-sfc": "^3.2.19",
55
+ "@vue/test-utils": "^2.0.0-rc.15",
51
56
  "babel-jest": "^26.6.3",
52
57
  "eslint": "^7.32.0",
53
58
  "eslint-config-airbnb-base": "^14.2.1",
59
+ "eslint-config-airbnb-typescript": "^14.0.0",
54
60
  "eslint-plugin-import": "^2.24.2",
55
- "eslint-plugin-vue": "^7.17.0",
61
+ "eslint-plugin-vue": "^7.18.0",
56
62
  "jest": "^26.6.3",
57
63
  "jest-puppeteer": "^5.0.4",
58
- "node": "^16.6.1",
64
+ "node": "^16.9.1",
59
65
  "ts-jest": "^26.5.6",
60
- "vite": "^2.5.4",
61
- "vue": "^3.2.9",
66
+ "vite": "^2.5.10",
67
+ "vue": "^3.2.19",
62
68
  "vue-jest": "^5.0.0-alpha.10"
63
69
  }
64
70
  }