{"version":3,"sources":["jsdelivr-header.js","/npm/simple-mask-money@1.1.1/src/args.js","/npm/simple-mask-money@1.1.1/src/core.js","/npm/simple-mask-money@1.1.1/src/implanter.js","/npm/simple-mask-money@1.1.1/src/index.js"],"names":[],"mappings":"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","file":"/npm/simple-mask-money@1.1.1/lib/simple-mask-money.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/simple-mask-money@1.1.1/lib/simple-mask-money.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","module.exports = class Args {\n  constructor(args) {\n    this.allowNegative       = false;    \n    this.negativeSignAfter   = false;\n    this.decimalSeparator    = ',';\n    this.fixed               = true;\n    this.fractionDigits      = 2;\n    this.prefix              = '';\n    this.suffix              = '';\n    this.thousandsSeparator  = '.';\n    this.merge(args);\n  }\n\n  merge(args) {    \n    if (!args || typeof args !== 'object') return;\n\n    this.fixed               = typeof args.fixed === 'boolean' ? args.fixed : this.fixed;\n    this.allowNegative       = typeof args.allowNegative === 'boolean' ? args.allowNegative : this.allowNegative;    \n    this.negativeSignAfter   = typeof args.negativeSignAfter === 'boolean' ? args.negativeSignAfter : this.negativeSignAfter;\n\n    this.decimalSeparator    = args.decimalSeparator    || this.decimalSeparator;\n    this.fractionDigits      = args.fractionDigits      || this.fractionDigits;\n    this.prefix              = args.prefix              || args.preffix || this.prefix;\n    this.suffix              = args.suffix              || this.suffix;\n    this.thousandsSeparator  = args.thousandsSeparator  || this.thousandsSeparator;\n  }\n};\n","const Args = require('./args');\nmodule.exports = class Core {\n  constructor(args) {\n    this.args = new Args(args);\n  }\n\n  completer(size = 1) {\n    return this.args.fixed ? ''.padEnd(size, '0') : ''.padEnd(size, '_');\n  }\n\n  emptyOrInvalid() {\n    return `${this.completer()}${this.args.decimalSeparator}${this.completer(2)}`;\n  }\n\n  onlyNumber(value) {\n    let retorno = '';\n\n    for (let i = 0; i < value.length; i++) {\n      if (isFinite(value[i])) retorno += value[i];\n    }\n\n    return retorno;\n  }\n\n  addingPrefix(value) {\n    return `${this.args.prefix}${value}`;\n  }\n\n  removingPrefix(value) {\n    return value.replace(this.args.prefix, '');\n  }\n\n  addingSuffix(value) {\n    return `${value}${this.args.suffix}`;\n  }\n\n  removingSuffix(value) {\n    if (value.includes(this.args.suffix, value.length - this.args.fractionDigits)) {\n      value = value.replace(this.args.suffix, '');\n    } else {\n      value = value.substring(0, value.length - 1);\n    }\n    return value;\n  }\n\n  addingCompleterFromStart(value, completer) {\n    while (value.length < this.args.fractionDigits) {\n      value = `${completer}${value}`;\n    }\n    return value;\n  }\n\n  addingCompleterFromEnd(value, completer) {\n    while (value.length < this.args.fractionDigits) {\n      value = `${value}${completer}`;\n    }\n    return value;\n  }\n\n  removingCompleterFromStart(value, completer) {\n    while (value[0] === completer) {\n      value = value.replace(completer, '');\n    }\n    return value;\n  }\n\n  removingCompleterFromEnd(value, completer) {\n    while (value[value.length - 1] === completer) {\n      value = value.substring(0, value.length - 1);\n    }\n    return value;\n  }\n\n  addingAutoComplete(value) {\n    const n = `${value}${this.addingCompleterFromEnd('', '0')}`;\n    return n;\n  }\n\n  autoComplete(value) {\n    const regexp = new RegExp(`\\\\${this.args.decimalSeparator}`, 'g');\n    const array = value.match(regexp) || [];\n    if (array.length > 1) {\n      value = this.addingAutoComplete(value);\n    }\n    return value;\n  }\n\n  addingDecimalSeparator(value, completer, separator) {\n    let length = value.length - this.args.fractionDigits;\n\n    let regexpFraction;\n    let decimals = '$1';\n    let dezenas = completer;\n    let character = isFinite(completer) ? 'd' : 'w';\n\n    regexpFraction = `(\\\\${character}{${this.args.fractionDigits}})`;\n\n    if (length > 0) {\n      regexpFraction = `(\\\\${character}{${length}})${regexpFraction}`;\n      dezenas = decimals;\n      decimals = '$2';\n    }\n\n    return value.replace(\n      new RegExp(regexpFraction),\n      `${dezenas}${separator}${decimals}`\n    );\n  }\n\n  addingHundredsSeparator(value) {\n    let size = value.length - this.args.fractionDigits;\n    let hundreds = Math.ceil(size / 3);\n    let regexpHundreds = '(\\\\d)';\n\n    let replacement = `${this.args.decimalSeparator}$${hundreds + 1}`;\n\n    for (let i = hundreds; i !== 0; i--) {\n      if (size >= 3) {\n        regexpHundreds = `(\\\\d{3})${regexpHundreds}`;\n        size -= 3;\n      } else {\n        regexpHundreds = `(\\\\d{${size}})${regexpHundreds}`;\n      }\n\n      if (i > 1) {\n        replacement = `${this.args.thousandsSeparator}$${i}${replacement}`;\n      } else {\n        replacement = `$${i}${replacement}`;\n      }\n    }\n\n    return value.replace(new RegExp(regexpHundreds), replacement);\n  }\n\n  removeSeparator(value, separator) {\n    return value.replace(new RegExp(`\\\\${separator}`, 'g'), '');\n  }\n\n  formatDecimal(value, completer, separator) {\n    value = this.addingCompleterFromStart(value, completer);\n    value = this.addingDecimalSeparator(value, completer, separator);\n    return value;\n  }\n\n  textToNumber(input) {\n    let retorno = input.toString();\n    let completer = this.completer();\n\n    if (this.args.prefix) {\n      retorno = this.removingPrefix(retorno);\n    }\n\n    if (this.args.suffix) {\n      retorno = this.removingSuffix(retorno);\n    }\n\n    retorno = this.removeSeparator(retorno, this.args.thousandsSeparator);\n    retorno = this.removeSeparator(retorno, this.args.decimalSeparator);\n\n    retorno = this.onlyNumber(retorno);\n\n    retorno = this.removingCompleterFromStart(\n      retorno,\n      completer\n    );\n\n    return retorno || (this.args.fixed ? '0' : '');\n  }\n\n  numberToText(input) {\n    let retorno = this.emptyOrInvalid();\n\n    if (parseFloat(input) !== 'NaN') {\n      if (input.length <= this.args.fractionDigits) {\n        retorno = this.formatDecimal(\n          input,\n          this.completer(),\n          this.args.decimalSeparator\n        );\n      } else {\n        retorno = this.addingHundredsSeparator(input);\n      }\n    }\n\n    if (this.args.prefix) {\n      retorno = this.addingPrefix(retorno);\n    }\n    if (this.args.suffix) {\n      retorno = this.addingSuffix(retorno);\n    }\n\n    return retorno;\n  }\n};\n","module.exports = {\n  getCaretPosition(input) {\n    let position = -1;\n    if ('selectionStart' in input) {\n      position = input.selectionStart;\n    } else if (document.selection) {\n      input.focus();\n      const range = document.selection.createRange();\n      const length = document.selection.createRange().text.length;\n      range.moveStart('character', -input.value.length);\n      position = range.text.length - length;\n    }\n    return position;\n  },\n  setCaretPosition(input, index) {\n    if (input.setSelectionRange) {\n      input.focus();\n      input.setSelectionRange(index, index);\n    } else if (input.createTextRange) {\n      const range = input.createTextRange();\n      range.collapse(true);\n      range.moveEnd('character', index);\n      range.moveStart('character', index);\n      range.select();\n    }\n  },\n  indexMove(newValue, oldValue) {\n    let move;\n    switch (true) {\n      case oldValue.length < newValue.length:\n        move = - 1;\n        break;\n      case oldValue.length > newValue.length:\n        move = 1;\n        break;\n      default:\n        move = 0;\n        break;\n    }\n    return move;\n  }\n};\n","const Args = require('./args');\nconst Core = require('./core');\nconst implanter = require('./implanter');\n\nlet _args = new Args();\nlet _core = new Core(_args);\n\nmodule.exports = class SimpleMaskMoney {\n\n  constructor() {\n    _args = new Args();\n    _core = new Core(_args);\n    Object.defineProperty(this, 'args', {\n      get() {\n        return _args;\n      },\n      set(value) {\n        _args = new Args(value);\n        _core = new Core(_args);\n      }\n    });\n    this.formatToNumber = SimpleMaskMoney.formatToNumber;\n    this.format = SimpleMaskMoney.format;\n    this.setMask = SimpleMaskMoney.setMask;\n  }\n\n  static get args() {\n    return _args;\n  }\n\n  static set args(value) {\n    _args = new Args(value);\n    _core = new Core(_args);\n  }\n\n  static format(value) {\n    const negative = _args.allowNegative && value.indexOf('-') !== -1;    \n    const formatation = _core.numberToText(_core.textToNumber(value));\n\n    return `${!_args.negativeSignAfter && negative ? '-': ''}${formatation}${_args.negativeSignAfter && negative ? '-': ''}`;\n  }\n\n  static formatToNumber(input) {\n    let retorno = '0';\n    let value = _core.textToNumber(input);\n    const negative = _args.allowNegative && input.indexOf('-') !== -1;   \n    \n    if (negative) {\n      value.replace('-', '');\n    }\n\n    if (parseFloat(value) !== 'NaN') {\n      if (value.length <= _args.fractionDigits) {\n        value = _core.formatDecimal(value, '0', '.');\n      } else {\n        let lengthWithoutDecimals = value.length - _args.fractionDigits;\n        value = value.replace(\n          new RegExp(\n            `(\\\\d{${lengthWithoutDecimals}})(\\\\d{${_args.fractionDigits}})`\n          ),\n          '$1.$2'\n        );\n      }\n\n      retorno = value;\n    }\n      \n    return parseFloat(negative ? retorno * -1 : retorno);\n  }\n\n  static setMask(element, args) {\n    if (typeof document === 'undefined') throw 'This function only works on client side';\n\n    const input = typeof element == 'string' ? document.querySelector(element) : element;    \n\n    if (args) SimpleMaskMoney.args = args;\n\n    input.addEventListener('input', e => {\n      const oldValue = input.value;\n      const newValue = SimpleMaskMoney.format(oldValue);\n      const position = implanter.getCaretPosition(input);\n      const move = implanter.indexMove(newValue, oldValue);\n      \n      input.value = newValue;\n      input._value = newValue;\n      \n      implanter.setCaretPosition(input, position - move);\n\n      !(e instanceof Event) && input.dispatchEvent(new Event('input'));\n    });\n\n    input['formatToNumber'] = () => SimpleMaskMoney.formatToNumber(input.value);\n\n    return input;\n  }\n};\n"]}