{"version":3,"file":"numeral.mjs","sources":["../../../../../../src/composables/useInputMask/masks/numeral.ts"],"sourcesContent":["import { StringWithAutocomplete } from '../../../utils/types/prop-type'\nimport { Mask, MaskToken } from '../mask'\nimport { createRegexMask, RegexToken } from './regex'\n\ntype NumeralToken = RegexToken & { isDecimal?: boolean}\n\nexport const createNumeralMask = (options: {\n  decimal?: boolean,\n  decimalChar?: StringWithAutocomplete<'.' | ','>,\n} = {}): Mask<NumeralToken> => {\n  const intMask = createRegexMask(/(\\d{3} )*(\\d{3})/, { reverse: true })\n\n  const { decimal = true, decimalChar = '.' } = options\n\n  const decimalRegex = new RegExp(`[.|,|${decimalChar}]`, 'g')\n\n  if (!decimal) {\n    return intMask\n  }\n\n  const decimalMask = createRegexMask(/(\\d{3} )*(\\d{3})/, { reverse: false })\n\n  return {\n    format: (text: string) => {\n      const foundDecimal = text.match(decimalRegex)\n\n      if (!foundDecimal) {\n        return intMask.format(text)\n      }\n\n      const [int = '', decimal = '', ...rest] = text.split(foundDecimal[0])\n\n      const intResult = intMask.format(int)\n      const decimalResult = decimalMask.format(decimal + rest.join(''))\n\n      return {\n        text: intResult.text + decimalChar + decimalResult.text,\n        tokens: [...intResult.tokens, { type: 'char', static: false, expect: decimalChar, isDecimal: true }, ...decimalResult.tokens] as NumeralToken[],\n      }\n    },\n    handleCursor (selectionStart, selectionEnd, oldTokens, newTokens, data) {\n      const decimalIndex = newTokens.findIndex((token) => token.isDecimal)\n\n      if (decimalIndex === -1) {\n        return intMask.handleCursor(selectionStart, selectionEnd, oldTokens, newTokens, data)\n      }\n\n      if (selectionStart.position < decimalIndex) {\n        intMask.handleCursor(selectionStart, selectionEnd, oldTokens, newTokens, data)\n      } else {\n        decimalMask.handleCursor(selectionStart, selectionEnd, oldTokens, newTokens, data)\n      }\n    },\n    unformat: (text: string, tokens: MaskToken[]) => {\n      const [int = 0, decimal = 0] = text.replace(/ /g, '').split(decimalChar)\n\n      return parseFloat(int + '.' + decimal).toString()\n    },\n  }\n}\n"],"names":["decimal"],"mappings":";AAMO,MAAM,oBAAoB,CAAC,UAG9B,OAA2B;AAC7B,QAAM,UAAU,gBAAgB,oBAAoB,EAAE,SAAS,MAAM;AAErE,QAAM,EAAE,UAAU,MAAM,cAAc,QAAQ;AAE9C,QAAM,eAAe,IAAI,OAAO,QAAQ,WAAW,KAAK,GAAG;AAE3D,MAAI,CAAC,SAAS;AACL,WAAA;AAAA,EACT;AAEA,QAAM,cAAc,gBAAgB,oBAAoB,EAAE,SAAS,OAAO;AAEnE,SAAA;AAAA,IACL,QAAQ,CAAC,SAAiB;AAClB,YAAA,eAAe,KAAK,MAAM,YAAY;AAE5C,UAAI,CAAC,cAAc;AACV,eAAA,QAAQ,OAAO,IAAI;AAAA,MAC5B;AAEA,YAAM,CAAC,MAAM,IAAIA,WAAU,IAAI,GAAG,IAAI,IAAI,KAAK,MAAM,aAAa,CAAC,CAAC;AAE9D,YAAA,YAAY,QAAQ,OAAO,GAAG;AACpC,YAAM,gBAAgB,YAAY,OAAOA,WAAU,KAAK,KAAK,EAAE,CAAC;AAEzD,aAAA;AAAA,QACL,MAAM,UAAU,OAAO,cAAc,cAAc;AAAA,QACnD,QAAQ,CAAC,GAAG,UAAU,QAAQ,EAAE,MAAM,QAAQ,QAAQ,OAAO,QAAQ,aAAa,WAAW,QAAQ,GAAG,cAAc,MAAM;AAAA,MAAA;AAAA,IAEhI;AAAA,IACA,aAAc,gBAAgB,cAAc,WAAW,WAAW,MAAM;AACtE,YAAM,eAAe,UAAU,UAAU,CAAC,UAAU,MAAM,SAAS;AAEnE,UAAI,iBAAiB,IAAI;AACvB,eAAO,QAAQ,aAAa,gBAAgB,cAAc,WAAW,WAAW,IAAI;AAAA,MACtF;AAEI,UAAA,eAAe,WAAW,cAAc;AAC1C,gBAAQ,aAAa,gBAAgB,cAAc,WAAW,WAAW,IAAI;AAAA,MAAA,OACxE;AACL,oBAAY,aAAa,gBAAgB,cAAc,WAAW,WAAW,IAAI;AAAA,MACnF;AAAA,IACF;AAAA,IACA,UAAU,CAAC,MAAc,WAAwB;AAC/C,YAAM,CAAC,MAAM,GAAGA,WAAU,CAAC,IAAI,KAAK,QAAQ,MAAM,EAAE,EAAE,MAAM,WAAW;AAEvE,aAAO,WAAW,MAAM,MAAMA,QAAO,EAAE,SAAS;AAAA,IAClD;AAAA,EAAA;AAEJ;"}