UNPKG

@ssibrahimbas/v-mask

Version:
57 lines (56 loc) 1.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useMask = void 0; const masker_1 = require("./masker"); const tokens_1 = require("./tokens"); const event = (name) => { return new CustomEvent(name, { bubbles: true, cancelable: true, composed: true, }); }; const useMask = (el, binding) => { if (!binding.value) return; let config = binding.value; if (Array.isArray(config) || typeof config === "string") { config = { mask: config, tokens: tokens_1.tokens, }; } if (el.tagName.toLocaleUpperCase() !== "INPUT") { const els = el.getElementsByTagName("input"); if (els.length !== 1) { throw new Error("v-mask directive requires 1 input, found " + els.length); } else { el = els[0]; } } el.oninput = function (evt) { if (!evt.isTrusted) return; let position = el.selectionEnd || 0; const digit = el.value[position - 1]; el.value = (0, masker_1.masker)(el.value, config.mask, config.tokens, true); while (position < el.value.length && el.value.charAt(position - 1) !== digit) { position++; } if (el === document.activeElement) { el.setSelectionRange(position, position); setTimeout(function () { el.setSelectionRange(position, position); }, 0); } el.dispatchEvent(event("input")); }; const newDisplay = (0, masker_1.masker)(el.value, config.mask, config.tokens, true); if (newDisplay !== el.value) { el.value = newDisplay; el.dispatchEvent(event("input")); } }; exports.useMask = useMask;