UNPKG

v-currency-field

Version:

Currency component for vuetify v-text-field

6 lines 17.4 kB
/*! * v-currency-field v3.1.1 * (c) 2020 Philipe Augusto <phiny1@gmail.com> * Released under the MIT License. */ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):(e=e||self,t(e.VCurrencyField={}))}(this,function(e){"use strict";function t(e){"@babel/helpers - typeof";return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function n(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),i.push.apply(i,n)}return i}function r(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?n(Object(r),!0).forEach(function(t){i(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function o(e,t){if(null==e)return{};var i,n,r={},o=Object.keys(e);for(n=0;n<o.length;n++)i=o[n],t.indexOf(i)>=0||(r[i]=e[i]);return r}function a(e,t){if(null==e)return{};var i,n,r=o(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)i=a[n],t.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}function u(e,t,i){var n=document.createEvent("CustomEvent");n.initCustomEvent(t,!0,!0,i),e.dispatchEvent(n)}function l(e,t,i,n,r,o,a,u,l,c){"boolean"!=typeof a&&(l=u,u=a,a=!1);var s="function"==typeof i?i.options:i;e&&e.render&&(s.render=e.render,s.staticRenderFns=e.staticRenderFns,s._compiled=!0,r&&(s.functional=!0)),n&&(s._scopeId=n);var m;if(o?(m=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),t&&t.call(this,l(e)),e&&e._registeredComponents&&e._registeredComponents.add(o)},s._ssrRegister=m):t&&(m=a?function(){t.call(this,c(this.$root.$options.shadowRoot))}:function(e){t.call(this,u(e))}),m)if(s.functional){var d=s.render;s.render=function(e,t){return m.call(t),d(e,t)}}else{var f=s.beforeCreate;s.beforeCreate=f?[].concat(f,m):[m]}return i}function c(e,t){t&&Object.keys(t).map(function(e){A[e]=t[e]}),e.component("v-currency-field",q)}var s=function(e,t,i){var n=document.createEvent("CustomEvent");n.initCustomEvent(t,!0,!0,i),e.dispatchEvent(n)},m=function(e,t){return s(e,"format",{value:t})},d=function(e,t,i){return t&&null!=e?Number(e.toFixed(i).split(".").join("")):e},f={locale:void 0,currency:"EUR",valueAsInteger:!1,distractionFree:!0,precision:void 0,autoDecimalMode:!1,valueRange:void 0,allowNegative:!0},p=function(e){var t=e.$ci,i=t.numberValue,n=t.currencyFormat,r=t.options;return d(i,r.valueAsInteger,n.maximumFractionDigits)},g=function(e,t){return u(e,"format",{value:t})},v=function(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")},h=function(e){return e.replace(/^0+(0$|[^0])/,"$1")},y=function(e,t){return(e.match(new RegExp(v(t),"g"))||[]).length},b=function(e,t){return e.substring(0,t.length)===t},x=function(e,t){return e.substring(0,e.indexOf(t))},F=function(e,t){return e.setSelectionRange(t,t)},S=function(e,t,i,n,r){var o=n.prefix,a=n.suffix,u=n.decimalSymbol,l=n.maximumFractionDigits,c=n.groupingSymbol,s=t.indexOf(u)+1,m=t.length-i;return Math.abs(e.length-t.length)>1&&i<=s?e.indexOf(u)+1:e.substr(i,1)===c&&y(e,c)===y(t,c)+1?e.length-m-1:(!r.autoDecimalMode&&0!==s&&i>s&&n.onlyDigits(t.substr(s)).length-1===l&&(m-=1),r.distractionFree.hideCurrencySymbol?e.length-m:Math.max(e.length-Math.max(m,a.length),0===o.length?0:o.length+1))},D=function(e,t,i,n){var r=n;return t.distractionFree.hideCurrencySymbol&&(r-=e.prefix.length),t.distractionFree.hideGroupingSymbol&&(r-=y(i.substring(0,n),e.groupingSymbol)),Math.max(0,r)},O=function e(i,n){if(i===n)return!0;if(!i||!n||"object"!==t(i)||"object"!==t(n))return!1;var r=Object.keys(i);return r.length===Object.keys(n).length&&(!!r.every(Object.prototype.hasOwnProperty.bind(n))&&r.every(function(t){return e(i[t],n[t])}))},V=[",",".","\u066b"],$=function(e){var i=e.currency,n=e.locale,r=e.precision,o=e.autoDecimalMode,a=e.valueAsInteger,u=new Intl.NumberFormat(n,"string"==typeof i?{currency:i,style:"currency"}:{minimumFractionDigits:1}),l=u.format(123456);this.locale=n,this.currency=i,this.digits=[0,1,2,3,4,5,6,7,8,9].map(function(e){return e.toLocaleString(n)}),this.decimalSymbol=y(l,this.digits[0])?l.substr(l.indexOf(this.digits[6])+1,1):void 0,this.groupingSymbol=l.substr(l.indexOf(this.digits[3])+1,1),this.minusSymbol=x(Number(-1).toLocaleString(n),this.digits[1]),void 0===this.decimalSymbol?this.minimumFractionDigits=this.maximumFractionDigits=0:"number"==typeof r?this.minimumFractionDigits=this.maximumFractionDigits=r:"object"!==t(r)||o||a?"string"==typeof i?(this.minimumFractionDigits=u.resolvedOptions().minimumFractionDigits,this.maximumFractionDigits=u.resolvedOptions().maximumFractionDigits):this.minimumFractionDigits=this.maximumFractionDigits=2:(this.minimumFractionDigits=r.min||0,this.maximumFractionDigits=void 0!==r.max?r.max:20),"string"==typeof i?(this.prefix=x(l,this.digits[1]),this.negativePrefix=x(u.format(-1),this.digits[1]),this.suffix=l.substring(l.lastIndexOf(this.decimalSymbol?this.digits[0]:this.digits[6])+1)):(this.prefix=(i||{}).prefix||"",this.negativePrefix=""+this.minusSymbol+this.prefix,this.suffix=(i||{}).suffix||"")};$.prototype.parse=function(e){var t=this.isNegative(e);e=this.normalizeDigits(e),e=this.stripCurrencySymbol(e),e=this.stripMinusSymbol(e);var i=this.decimalSymbol?"("+v(this.decimalSymbol)+"\\d*)?":"",n=e.match(new RegExp("^"+this.integerPattern()+i+"$"));return n?Number((t?"-":"")+this.onlyDigits(n[1])+"."+this.onlyDigits(n[3]||"")):null},$.prototype.format=function(e,t){return void 0===t&&(t={minimumFractionDigits:this.minimumFractionDigits,maximumFractionDigits:this.maximumFractionDigits}),"string"==typeof this.currency?e.toLocaleString(this.locale,Object.assign({},{style:"currency",currency:this.currency},t)):this.insertCurrencySymbol(Math.abs(e).toLocaleString(this.locale,t),e<0||0===e&&1/e<0)},$.prototype.integerPattern=function(){return"(0|[1-9]\\d{0,2}("+v(this.groupingSymbol)+"?\\d{3})*)"},$.prototype.toFraction=function(e){return""+this.digits[0]+this.decimalSymbol+this.onlyLocaleDigits(e.substr(1)).substr(0,this.maximumFractionDigits)},$.prototype.isFractionIncomplete=function(e){return!!this.normalizeDigits(e).match(new RegExp("^"+this.integerPattern()+v(this.decimalSymbol)+"$"))},$.prototype.isNegative=function(e){return b(e,this.negativePrefix)||b(e.replace("-",this.minusSymbol),this.minusSymbol)},$.prototype.insertCurrencySymbol=function(e,t){return""+(t?this.negativePrefix:this.prefix)+e+this.suffix},$.prototype.stripMinusSymbol=function(e){return e.replace("-",this.minusSymbol).replace(this.minusSymbol,"")},$.prototype.stripCurrencySymbol=function(e){return e.replace(this.negativePrefix,"").replace(this.prefix,"").replace(this.suffix,"")},$.prototype.normalizeDecimalSymbol=function(e,t){var i=this;return V.forEach(function(n){e=e.substr(0,t)+e.substr(t).replace(n,i.decimalSymbol)}),e},$.prototype.normalizeDigits=function(e){return"0"!==this.digits[0]&&this.digits.forEach(function(t,i){e=e.replace(new RegExp(t,"g"),i)}),e},$.prototype.onlyDigits=function(e){return this.normalizeDigits(e).replace(/\D+/g,"")},$.prototype.onlyLocaleDigits=function(e){return e.replace(new RegExp("[^"+this.digits.join("")+"]*","g"),"")};var w=function(e){this.numberFormat=e};w.prototype.conformToMask=function(e,t){var i=this;void 0===t&&(t="");var n=this.numberFormat.isNegative(e),r=e;r=this.numberFormat.stripCurrencySymbol(r),r=this.numberFormat.stripMinusSymbol(r);var o=function(e){if(""===e&&n&&t!==i.numberFormat.negativePrefix)return"";if(i.numberFormat.maximumFractionDigits>0){if(i.numberFormat.isFractionIncomplete(e))return e;if(b(e,i.numberFormat.decimalSymbol))return i.numberFormat.toFraction(e)}return null}(r);if(null!=o)return this.numberFormat.insertCurrencySymbol(o,n);var a=r.split(this.numberFormat.decimalSymbol),u=a[0],l=a.slice(1),c=h(this.numberFormat.onlyDigits(u)),s=this.numberFormat.onlyDigits(l.join("")).substr(0,this.numberFormat.maximumFractionDigits),m=l.length>0&&0===s.length,d=""===c&&n&&(t===e.slice(0,-1)||t!==this.numberFormat.negativePrefix);return m||d?t:c.match(/\d+/)?{numberValue:Number((n?"-":"")+c+"."+s),fractionDigits:s}:""};var j=function(e){this.numberFormat=e};j.prototype.conformToMask=function(e){if(""===e)return"";var t=this.numberFormat.isNegative(e),i=""===this.numberFormat.stripMinusSymbol(e)?-0:Number((t?"-":"")+h(this.numberFormat.onlyDigits(e)))/Math.pow(10,this.numberFormat.minimumFractionDigits);return{numberValue:i,fractionDigits:i.toFixed(this.numberFormat.minimumFractionDigits).slice(-this.numberFormat.minimumFractionDigits)}};var M=Math.pow(2,53)-1,N=function(e,t,i){var n=i.$ci,r="input"===e.tagName.toLowerCase()?e:e.querySelector("input");if(!r)throw new Error("No input element found");var o=Object.assign({},n?n.GLOBAL_OPTIONS:f,t),a=o.distractionFree,u=o.autoDecimalMode,l=o.valueRange;"boolean"==typeof a&&(o.distractionFree={hideCurrencySymbol:a,hideNegligibleDecimalDigits:a,hideGroupingSymbol:a}),o.valueRange=l?{min:void 0!==l.min?Math.max(l.min,-M):-M,max:void 0!==l.max?Math.min(l.max,M):M}:{min:-M,max:M},u?(o.distractionFree.hideNegligibleDecimalDigits=!1,r.setAttribute("inputmode","numeric")):r.setAttribute("inputmode","decimal");var c=new $(o);return r.$ci=Object.assign({},r.$ci||{numberValue:null},{options:o,numberMask:o.autoDecimalMode?new j(c):new w(c),currencyFormat:c}),r},E=function(e,t){var i=e.$ci,n=i.numberValue,r=i.currencyFormat,o=i.options;n=d(n,o.valueAsInteger,r.maximumFractionDigits),u(e,t,{numberValue:n})},L=function(e,t,i){void 0===i&&(i=!1);var n=e.$ci,r=n.currencyFormat,o=n.options,a=o.valueRange,u=a.min,l=a.max;_(e,null!=t?r.format(function(){return Math.min(Math.max(t,u),l)}()):null),(t!==e.$ci.numberValue||i)&&E(e,"change")},C=function(e,i,n){if(null!=i){var r=e.$ci,o=r.focus,a=r.decimalSymbolInsertedAt,u=r.options,l=r.numberMask,c=r.currencyFormat,s=r.previousConformedValue,m=u.allowNegative,d=u.distractionFree;void 0!==a&&(i=c.normalizeDecimalSymbol(i,a),e.$ci.decimalSymbolInsertedAt=void 0);var f,p=l.conformToMask(i,s);if("object"===t(p)){var g=p.numberValue,v=p.fractionDigits,h=c.maximumFractionDigits,y=c.minimumFractionDigits;o&&(y=h),y=n?v.replace(/0+$/,"").length:Math.min(y,v.length),f=g>M?s:c.format(g,{useGrouping:!(o&&d.hideGroupingSymbol),minimumFractionDigits:y,maximumFractionDigits:h})}else f=p;m||(f=f.replace(c.negativePrefix,c.prefix)),o&&d.hideCurrencySymbol&&(f=f.replace(c.negativePrefix,c.minusSymbol).replace(c.prefix,"").replace(c.suffix,"")),e.value=f,e.$ci.numberValue=c.parse(e.value)}else e.value=e.$ci.numberValue=null;e.$ci.previousConformedValue=e.value},_=function(e,t,i){void 0===i&&(i=!1),C(e,t,i),E(e,"input")},P=function(e){e.addEventListener("input",function(t){if(!t.detail){var i=e.value,n=e.selectionStart,r=e.$ci,o=r.currencyFormat,a=r.options;_(e,i),e.$ci.focus&&F(e,S(e.value,i,n,o,a))}},{capture:!0}),e.addEventListener("keypress",function(t){V.includes(t.key)&&(e.$ci.decimalSymbolInsertedAt=e.selectionStart)}),e.addEventListener("format",function(t){var i=e.$ci,n=i.currencyFormat,r=i.options,o=i.numberValue,a=function(e){return r.valueAsInteger&&null!=e?e/Math.pow(10,n.maximumFractionDigits):e}(t.detail.value);o!==a&&L(e,a)}),e.addEventListener("focus",function(){e.$ci.focus=!0;var t=e.$ci.options.distractionFree,i=t.hideCurrencySymbol,n=t.hideGroupingSymbol,r=t.hideNegligibleDecimalDigits;(i||n||r)&&setTimeout(function(){var t=e.value,i=e.selectionStart,n=e.selectionEnd;t&&_(e,t,r),Math.abs(i-n)>0?e.setSelectionRange(0,e.value.length):F(e,D(e.$ci.currencyFormat,e.$ci.options,t,i))})}),e.addEventListener("blur",function(){e.$ci.focus=!1,null!=e.$ci.numberValue&&L(e,e.$ci.numberValue)}),e.addEventListener("change",function(t){t.detail||E(e,"change")})},I={bind:function(e,t,i){var n=t.value,r=i.context,o=N(e,n,r);P(o),g(o,o.$ci.currencyFormat.parse(o.value))},componentUpdated:function(e,t,i){var n=t.value,r=t.oldValue,o=i.context;if(!O(n,r)){var a=N(e,n,o);L(a,a.$ci.numberValue,!0)}}},R={render:function(e){var t=this;return e("input",{directives:[{name:"currency",value:this.options}],on:Object.assign({},this.$listeners,{change:function(e){e.detail&&t.$emit("change",e.detail.numberValue)},input:function(e){e.detail&&t.value!==e.detail.numberValue&&t.$emit("input",e.detail.numberValue)}})})},directives:{currency:I},name:"CurrencyInput",props:{value:{type:Number,default:null},locale:{type:String,default:void 0},currency:{type:[String,Object],default:void 0},distractionFree:{type:[Boolean,Object],default:void 0},precision:{type:[Number,Object],default:void 0},autoDecimalMode:{type:Boolean,default:void 0},valueAsInteger:{type:Boolean,default:void 0},valueRange:{type:Object,default:void 0},allowNegative:{type:Boolean,default:void 0}},mounted:function(){this.setValue(this.value)},computed:{options:function(){var e=this,t=Object.assign({},this.$ci?this.$ci.GLOBAL_OPTIONS:f);return Object.keys(f).forEach(function(i){void 0!==e[i]&&(t[i]=e[i])}),t}},watch:{value:"setValue"},methods:{setValue:function(e){g(this.$el,e)}}},k={install:function(e,t){void 0===t&&(t={});var i=t.componentName;void 0===i&&(i=R.name);var n=t.directiveName;void 0===n&&(n="currency");var r=t.globalOptions;void 0===r&&(r={}),e.component(i,R),e.directive(n,I),e.prototype.$ci={getValue:p,setValue:g,GLOBAL_OPTIONS:Object.assign({},f,r)}}};"undefined"!=typeof window&&window.Vue&&window.Vue.use(k);var A={locale:void 0,currency:void 0,decimalLength:2,autoDecimalMode:!0,min:null,max:null,defaultValue:0,valueAsInteger:!1,allowNegative:!0},T={name:"VCurrencyField",props:{value:{type:[Number,String],default:function(){return 0}},locale:{type:String,default:function(){return A.locale}},currency:{type:[String,Object],default:function(){return A.currency}},decimalLength:{type:[Number,Object],default:function(){return A.decimalLength}},autoDecimalMode:{type:Boolean,default:function(){return A.autoDecimalMode}},min:{type:Number,default:function(){return A.min}},max:{type:Number,default:function(){return A.max}},defaultValue:{type:Number,default:function(){return A.defaultValue}},valueAsInteger:{type:Boolean,default:function(){return A.valueAsInteger}},allowNegative:{type:Boolean,default:function(){return A.allowNegative}}},directives:{CurrencyDirective:I},data:function(){return{formattedValue:this.value}},mounted:function(){this.addListeners(this.$el.querySelector("input"))},computed:{attrs:function(){var e=this.$attrs;e.value;return a(e,["value"])},distractionFree:function(){return this.decimalLength>0&&!this.autoDecimalMode},decimalMode:function(){return this.decimalLength>0&&this.autoDecimalMode},valueRange:function(){return this.min||this.max?{min:this.min,max:this.max}:void 0}},watch:{value:"setValue"},methods:{addListeners:function(e){var t=this;e.addEventListener("change",function(e){e.detail&&t.$emit("change",e.detail.numberValue),null==t.value&&void 0==t.value&&null!==t.defaultValue&&void 0!==t.defaultValue&&t.setValue(t.valueAsInteger&&t.defaultValue?t.defaultValue*Math.pow(10,t.decimalLength):t.defaultValue)},{capture:!0}),e.addEventListener("input",function(e){e.detail&&t.value!==e.detail.numberValue&&t.$emit("input",e.detail.numberValue)},{capture:!0})},setValue:function(e){var t=this.$el.querySelector("input");m(t,e)},listeners:function(){var e=this,t=this.$listeners,i=(t.input,t.keyup);return r(r({},a(t,["input","keyup"])),{},{input:function(t){(e.$refs.textfield.isResetting||null==t)&&e.setValue(e.valueAsInteger&&e.defaultValue?e.defaultValue*Math.pow(10,e.decimalLength):e.defaultValue)},keyup:function(t){"-"!==t.key&&"+"!==t.key||(null!=e.value&&"-"===t.key&&e.value>=0&&e.setValue(-1*e.value),null!=e.value&&"+"===t.key&&e.value<=0&&e.setValue(-1*e.value)),i&&i()}})}}},B=l;const G=T;var z=function(){var e=this,t=e.$createElement;return(e._self._c||t)("v-text-field",e._g(e._b({directives:[{name:"currency-directive",rawName:"v-currency-directive",value:{currency:e.currency,locale:e.locale,distractionFree:e.distractionFree,precision:e.decimalLength,autoDecimalMode:e.decimalMode,valueRange:e.valueRange,allowNegative:e.allowNegative,valueAsInteger:e.valueAsInteger},expression:"{currency, locale, distractionFree, precision: decimalLength, autoDecimalMode: decimalMode, valueRange, allowNegative, valueAsInteger}"}],ref:"textfield",attrs:{type:"text"},scopedSlots:e._u([e._l(e.$slots,function(t,i){return{key:i,fn:function(){return[e._t(i)]},proxy:!0}})],null,!0),model:{value:e.formattedValue,callback:function(t){e.formattedValue=t},expression:"formattedValue"}},"v-text-field",e.attrs,!1),e.listeners()))},U=[];var q=B({render:z,staticRenderFns:U},void 0,G,void 0,!1,void 0,void 0,void 0);"undefined"!=typeof window&&window.Vue&&window.Vue.use(c),e.VCurrencyField=q,e.default=c,e.options=A,e.version="3.1.1",Object.defineProperty(e,"__esModule",{value:!0})});