{"version":3,"sources":["webpack:///./src/components/UI/Form/InputNumeric.vue","webpack:///src/components/UI/Form/InputNumeric.vue","webpack:///./src/components/UI/Form/InputNumeric.vue?eeb2","webpack:///./src/components/UI/Form/InputNumeric.vue?1eb8","webpack:///./src/components/UI/Form/InputNumeric.vue?1b68"],"names":["render","_vm","this","_c","_self","staticClass","attrs","on","$event","preventKeyPress","type","indexOf","_k","keyCode","key","backPressEvent","keyup","blur","focus","input","change","pasteEvent","staticRenderFns","name","props","value","String","Number","default","isNumeric","Boolean","allowNegativeValue","data","cursorStartPos","kCode","watch","price","replace","$el","isNaN","substring","length","mounted","methods","e","$emit","returnEvent","target","eventType","trim","evt","preventDefault","which","cursorPos","getCursorPosition","startPos","priceLength","endPos","dotIndex","isRangeSelection","lastdigits","selectionStart","selectionEnd","component"],"mappings":"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","file":"js/chunk-0e63f661.js?id=389cb54fbf4065d8104e","sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('input',{staticClass:\"input\",attrs:{\"type\":\"text\",\"autocomplete\":\"none\"},on:{\"keypress\":function($event){return _vm.preventKeyPress($event)},\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"delete\",[8,46],$event.key,[\"Backspace\",\"Delete\",\"Del\"]))return null;return _vm.backPressEvent($event)},_vm.keyup],\"blur\":_vm.blur,\"focus\":_vm.focus,\"input\":_vm.input,\"change\":_vm.change,\"paste\":_vm.pasteEvent}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <input\n    class=\"input\"\n    type=\"text\"\n    autocomplete=\"none\"\n    @keypress=\"preventKeyPress($event)\"\n    @keyup.delete=\"backPressEvent($event)\"\n    @blur=\"blur\"\n    @keyup=\"keyup\"\n    @focus=\"focus\"\n    @input=\"input\"\n    @change=\"change\"\n    @paste=\"pasteEvent\"\n  />\n</template>\n\n<script>\n\nexport default {\n  name: 'InputNumeric',\n\n  props: {\n    value: {\n      type: [String, Number],\n      default: 0\n    },\n\n    isNumeric: {\n      type: Boolean,\n      default: false\n    },\n\n    allowNegativeValue: {\n      type: Boolean,\n      default: true\n    }\n  },\n\n  data() {\n    return {\n      cursorStartPos: 0,\n      kCode: 0\n    }\n  },\n\n  watch: {\n    value(price) {\n      price = String(price).replace(/,/g, '.')\n      if (Number(price) !== Number(this.$el.value.replace(/,/g, '.'))) {\n        // Prevent updating the input value if not need to\n        if (isNaN(price) || price === '-0' || price.substring(price.length - 1) === '.') {\n          return\n        }\n        this.$el.value = price\n      }\n    }\n  },\n\n  mounted() {\n    this.$el.value = String(this.value)\n  },\n\n  methods: {\n    /**\n     * Input events\n     */\n    focus(e) {\n      this.$emit('focus', e)\n    },\n    blur(e) {\n      this.cursorStartPos = 0\n      this.returnEvent('blur', e.target.value)\n    },\n    change(e) {\n      this.returnEvent('change', e.target.value)\n    },\n    keyup(e) {\n      this.returnEvent('keyup', e.target.value)\n    },\n    input(e) {\n      this.returnEvent('input', e.target.value)\n    },\n\n    // Emit event back\n    returnEvent(eventType, value, skipCheck = false) {\n      value = value.trim().replace(/,/g, '.')\n      if (value === '-' || value === '.') { return }\n      if (value === '-0') {\n        value = '0'\n      }\n      this.$emit(eventType, Number(value))\n    },\n\n    backPressEvent(evt) {\n    },\n\n    pasteEvent(evt) {\n      evt.preventDefault()\n      return false\n    },\n\n    // Prevent input other then numbers, comma and dot check\n    preventKeyPress(evt) {\n      let kCode = (evt.which) ? evt.which : evt.keyCode\n      this.kCode = kCode\n      let cursorPos = this.getCursorPosition()\n      this.cursorStartPos = cursorPos.startPos\n\n      // Stop event when key code is not numeric, minus or dot or comma number\n      if ((kCode !== 44 && kCode !== 45 && kCode !== 46) && kCode > 31 && (kCode < 48 || kCode > 57)) {\n        evt.preventDefault()\n        return false\n      }\n\n      let price = this.$el.value.replace(/,/g, '.')\n      let priceLength = price.length\n\n      /**\n       * Stop adding minus sign event when: \n       * - String already contains a minus sign\n       * - When cursor is not add the beginning of the string\n       * - When not the whole string is selected\n       */\n      if (kCode === 45 && (\n        this.allowNegativeValue === false\n        || price.indexOf('-') !== -1\n        || cursorPos.startPos !== 0\n        || ((cursorPos.endPos === priceLength) && cursorPos.startPos !== 0)\n      )) {\n        evt.preventDefault()\n        return false\n      }\n\n      /**\n       * Stop adding dot event when:\n       * - String already contains a dot\n       * - cursor is at the beginning of the string\n       * - cursor is at a postion in the string where more then 2 numbers follows\n       * - 2 decimals are added\n       */\n      let dotIndex = price.indexOf('.')\n      if (kCode === 44 || kCode === 46) {\n        // Prevent the event when the dot is inside the selection range\n        let isRangeSelection = cursorPos.startPos !== cursorPos.endPos\n        if (\n          this.isNumeric === true\n          || (dotIndex !== -1 && !(dotIndex >= cursorPos.startPos && dotIndex <= cursorPos.endPos))\n        ) {\n          evt.preventDefault()\n          return false\n        }\n\n        // String already contains a dot or cursor is at a postion in the string where more then 2 numbers follows\n        if (!isRangeSelection\n          && (dotIndex !== -1 || (cursorPos.startPos === 0 || priceLength > (cursorPos.startPos + 2)))\n        ) {\n          evt.preventDefault()\n          return false\n        }\n      }\n\n      // Stop event when adding more then two digits after the dot\n      let lastdigits = this.$el.value.substring(dotIndex + 1, this.$el.value.length)\n      if (dotIndex !== -1\n        && (lastdigits.length >= 2 && cursorPos.startPos > dotIndex)\n      ) {\n        evt.preventDefault()\n        return false\n      }\n\n      this.cursorStartPos = cursorPos.startPos + 1\n\n      return true\n    },\n\n    /**\n     * Get cursor position\n     */\n    getCursorPosition() {\n      this.$el.focus()\n      return {\n        startPos: this.$el.selectionStart,\n        endPos: this.$el.selectionEnd\n      }\n    },\n  },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n/* Chrome, Safari, Edge, Opera */\ninput::-webkit-outer-spin-button,\ninput::-webkit-inner-spin-button {\n  -webkit-appearance: none;\n  margin: 0;\n}\n\n/* Firefox */\ninput[type=\"number\"] {\n  -moz-appearance: textfield;\n}\n</style>","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InputNumeric.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InputNumeric.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./InputNumeric.vue?vue&type=template&id=6d71c596&scoped=true\"\nimport script from \"./InputNumeric.vue?vue&type=script&lang=js\"\nexport * from \"./InputNumeric.vue?vue&type=script&lang=js\"\nimport style0 from \"./InputNumeric.vue?vue&type=style&index=0&id=6d71c596&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"6d71c596\",\n  null\n  \n)\n\nexport default component.exports","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InputNumeric.vue?vue&type=style&index=0&id=6d71c596&prod&lang=scss&scoped=true\""],"sourceRoot":""}