v-mask
Version:
Tiny input mask library for Vue.js based on text-mask-core (~5kb) exposed as directive. No dependencies
31 lines (27 loc) • 1 kB
JavaScript
// eslint-disable-next-line import/no-extraneous-dependencies
import conformToMask from 'text-mask-core/src/conformToMask';
import { isString } from './utils';
import parseMask from './utils/parseMask';
import extendMaskReplacers from './utils/extendMaskReplacers';
/**
* Create the Vue filter
* @param {Object} filterOptions
* @param {MaskReplaces} filterOptions.placeholders
*/
export function createFilter(filterOptions = {}) {
const instanceMaskReplacers = extendMaskReplacers(
filterOptions && filterOptions.placeholders,
);
/**
* Vue filter definition
* @param {string|number} value
* @param {string|Array.<string|RegExp>|Function|null} inputMask
*/
return (value, inputMask) => {
if (!isString(value) && !Number.isFinite(value)) return value;
const mask = parseMask(inputMask, instanceMaskReplacers);
const { conformedValue } = conformToMask(`${value}`, mask, { guide: false });
return conformedValue;
};
}
export default createFilter();