UNPKG

vuestic-ui

Version:
1 lines 3.48 kB
{"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;"}