@handcrafted-market/vue3-numeric
Version:
Input field component to display currency value based on vue-numeric.
2 lines (1 loc) • 6.17 kB
JavaScript
(function(n,g){typeof exports=="object"&&typeof module!="undefined"?module.exports=g(require("vue")):typeof define=="function"&&define.amd?define(["vue"],g):(n=typeof globalThis!="undefined"?globalThis:n||self,n["vue3-numeric"]=g(n.Vue))})(this,function(n){"use strict";function g(r,e){return e={exports:{}},r(e,e.exports),e.exports}var v={symbol:"$",format:"%s%v",decimal:".",thousand:",",precision:2,grouping:3,stripZeros:!1,fallback:0};function q(r){var e=arguments.length<=1||arguments[1]===void 0?v.decimal:arguments[1],t=arguments.length<=2||arguments[2]===void 0?v.fallback:arguments[2];if(Array.isArray(r))return r.map(function(d){return q(d,e,t)});if(typeof r=="number")return r;var l=new RegExp("[^0-9-(-)-"+e+"]",["g"]),o=(""+r).replace(l,"").replace(e,".").replace(/\(([-]*\d*[^)]?\d+)\)/g,"-$1").replace(/\((.*)\)/,""),c=(o.match(/-/g)||2).length%2,s=parseFloat(o.replace(/-/g,"")),u=s*(c?-1:1);return isNaN(u)?t:u}function k(r,e){return r=Math.round(Math.abs(r)),isNaN(r)?e:r}function N(r,e){e=k(e,v.precision);var t=Math.pow(10,e);return(Math.round((r+1e-8)*t)/t).toFixed(e)}var h=g(function(r){var e=Object.prototype.hasOwnProperty,t=Object.prototype.propertyIsEnumerable;function l(o){if(o==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(o)}r.exports=Object.assign||function(o,c){for(var s,u=l(o),d,m=1;m<arguments.length;m++){s=Object(arguments[m]);for(var x in s)e.call(s,x)&&(u[x]=s[x]);if(Object.getOwnPropertySymbols){d=Object.getOwnPropertySymbols(s);for(var i=0;i<d.length;i++)t.call(s,d[i])&&(u[d[i]]=s[d[i]])}}return u}}),E=h&&typeof h=="object"&&"default"in h?h.default:h;function A(r,e){var t=r.split(e),l=t[0],o=t[1].replace(/0+$/,"");return o.length>0?l+e+o:l}function T(r){var e=arguments.length<=1||arguments[1]===void 0?{}:arguments[1];if(Array.isArray(r))return r.map(function(s){return T(s,e)});e=E({},v,e);var t=r<0?"-":"",l=parseInt(N(Math.abs(r),e.precision),10)+"",o=l.length>3?l.length%3:0,c=t+(o?l.substr(0,o)+e.thousand:"")+l.substr(o).replace(/(\d{3})(?=\d)/g,"$1"+e.thousand)+(e.precision>0?e.decimal+N(Math.abs(r),e.precision).split(".")[1]:"");return e.stripZeros?A(c,e.decimal):c}var S=g(function(r){var e=String.prototype.valueOf,t=function(u){try{return e.call(u),!0}catch{return!1}},l=Object.prototype.toString,o="[object String]",c=typeof Symbol=="function"&&typeof Symbol.toStringTag=="symbol";r.exports=function(u){return typeof u=="string"?!0:typeof u!="object"?!1:c?t(u):l.call(u)===o}}),B=S&&typeof S=="object"&&"default"in S?S.default:S;function P(r){return B(r)&&r.match("%v")?{pos:r,neg:r.replace("-","").replace("%v","-%v"),zero:r}:r}function w(r){var e=arguments.length<=1||arguments[1]===void 0?{}:arguments[1];if(Array.isArray(r))return r.map(function(o){return w(o,e)});e=E({},v,e);var t=P(e.format),l=void 0;return r>0?l=t.pos:r<0?l=t.neg:l=t.zero,l.replace("%s",e.symbol).replace("%v",T(Math.abs(r),e))}const F=["placeholder","disabled"];return{props:{currency:{type:String,default:"",required:!1},max:{type:Number,default:Number.MAX_SAFE_INTEGER||9007199254740991,required:!1},min:{type:Number,default:Number.MIN_SAFE_INTEGER||-9007199254740991,required:!1},minus:{type:Boolean,default:!1,required:!1},placeholder:{type:String,default:"",required:!1},emptyValue:{type:[Number,String],default:"",required:!1},precision:{type:Number,default:0,required:!1},separator:{type:String,default:",",required:!1},thousandSeparator:{default:void 0,required:!1,type:String},decimalSeparator:{default:void 0,required:!1,type:String},outputType:{required:!1,type:String,default:"Number"},modelValue:{type:[Number,String],default:0,required:!0},readOnly:{type:Boolean,default:!1,required:!1},readOnlyClass:{type:String,default:"",required:!1},disabled:{type:Boolean,default:!1,required:!1},currencySymbolPosition:{type:String,default:"prefix",required:!1},currencySymbolSpacing:{type:Boolean,default:!0,required:!1}},emits:["change","blur","focus","update:modelValue"],setup(r,{emit:e}){const t=r,{readOnly:l,separator:o,currency:c,precision:s}=n.toRefs(t),u=n.ref(""),d=n.ref(null),m=n.ref(null),x=n.computed(()=>M(u.value)),i=n.computed(()=>M(t.modelValue)),j=n.computed(()=>typeof t.decimalSeparator!="undefined"?t.decimalSeparator:o.value===","?".":","),I=n.computed(()=>typeof t.thousandSeparator!="undefined"?t.thousandSeparator:o.value==="."?".":o.value==="space"?" ":","),_=n.computed(()=>{let a="%v %s",f="%s %v";return c.value?(t.currencySymbolSpacing===!1&&(a="%v%s",f="%s%v"),t.currencySymbolPosition==="suffix"?a:f):"%v"});n.watch(i,(a,f)=>{d.value!==document.activeElement&&(u.value=y(a))}),n.watch(l,async(a,f)=>{f===!1&&a===!0&&(await n.nextTick(),m.className=t.readOnlyClass)}),n.watch(o,(a,f)=>{b(i.value),u.value=y(i.value)}),n.watch(c,(a,f)=>{b(i.value),u.value=y(i.value)}),n.watch(s,(a,f)=>{b(i.value),u.value=y(i.value)}),n.onMounted(()=>{(i.value||Z())&&(b(i.value),u.value=y(i.value),setTimeout(()=>{b(i.value),u.value=y(i.value)},500)),l.value&&(m.className=t.readOnlyClass)});function C(a){e("change",a)}function R(a){e("blur",a),u.value=y(i.value)}function $(a){e("focus",a),i.value===0?u.value=null:u.value=w(i.value,{symbol:"",format:"%v",thousand:"",decimal:j.value,precision:Number(s.value)})}function H(){b(x.value)}function b(a){a>=t.max&&O(t.max),a<=t.min&&O(t.min),a>t.min&&a<t.max&&O(a),!t.minus&&a<0&&(t.min>=0?O(t.min):O(0))}function O(a){const f=N(a,s.value),p=t.outputType.toLowerCase()==="string"?f:Number(f);e("update:modelValue",p)}function y(a){return w(a,{symbol:c.value,format:_.value,precision:Number(s.value),decimal:j.value,thousand:I.value})}function M(a){const f=typeof a=="string"&&a===""?t.emptyValue:a;return q(f,j.value)}function Z(){return i.value===0&&t.modelValue!==""}return(a,f)=>n.unref(l)?(n.openBlock(),n.createElementBlock("span",{key:1,ref:(p,V)=>{V.spanReadOnly=p,m.value=p}},n.toDisplayString(u.value),513)):n.withDirectives((n.openBlock(),n.createElementBlock("input",{key:0,ref:(p,V)=>{V.numeric=p,d.value=p},placeholder:r.placeholder,disabled:r.disabled,"onUpdate:modelValue":f[0]||(f[0]=p=>u.value=p),type:"tel",onBlur:R,onInput:H,onFocus:$,onChange:C},null,40,F)),[[n.vModelText,u.value]])}}});