@ui-toolkit/directives
Version:
Directives for Vue.
134 lines (95 loc) • 4.14 kB
Markdown
from 'vue';
import { mask } from '@ui-toolkit/directives';
const directives = { mask };
Object.keys(directives).forEach(key => {
Vue.directive(key, directives[key]);
});
```
may also be installed locally to a component
```js
import { mask } from '@ui-toolkit/directives';
export default {
directives: {
mask,
},
};
```
**A vue.js package that provides a directive to apply a mask to input tags**
A`"mask"`directive for Vue.js that sets the **masked** and **unmasked** value of an`"input"`component (eg the `"v-text-field"` component from vuetify)
- "v-model" will always contain the masked value, the directive may also set the unmasked value to a specified variable (see below)
- provides predefined masks (see below)
- allows setting custom tokens for flexibility
### Usage
there are two ways to set the variable used for the unmasked value. You can specify the variable name in a config object, or you can use an argument to name the variable.
config:
```vue
<input
v-model="expirationDate"
v-mask="{ mask: '##/##', unmaskedVar: 'unmaskedExpirationDate' }"
/>
```
Argument:
```vue
<input v-model="expirationDate" v-mask:unmaskedExpirationDate="'##/##'" />
```
in this example, unmaskedExpirationDate is a value in the data object of the component for the unmasked value to bind to.
more usage examples:
```vue
<v-text-field v-model="..." v-mask="{ mask: 'A##', unmaskedVar: 'myVar' }" />
<v-text-field v-model="..." v-mask="'A#'" />
<v-text-field v-mask:unmaskedVar="'A#'" />
<v-text-field v-model="..." v-mask.number="{ mask: '##', unmaskedVar: 'myVar' }" />
<v-text-field v-model="..." v-mask="{ mask: '##', unmaskedVar: 'myVar', number: true }" />
```
**v-mask** may be:
- a mask (string) made of "tokens" (listed below)
- the name of a predefined mask (from the ones listed below)
- an "object" with the following attributes:
- `mask`: same as above
- `unmaskedVar`: name of a variable defined in the "data" section of the component that will receive the "unmasked" text. It may be a structure (eg`"a.bc.d"`), but the first "level" must exists
- `nullIfEmpty` (Defaults to **false** ): Set `"unmaskedVar"` to null if the input value is empty.
- `number` (Defaults to **false**): Try to cast the valof of `"unmaskedVar"` to a numbe (see below)
- `tokens` (Defaults to the default ones below): An array of token objects that will replace the default ones. eg `tokens="[{ 'Y': {pattern: /[0-9]/ }]"`
- `'#': {pattern: /\d/}`
- `'X': {pattern: /[0-9a-zA-Z]/}`
- `'S': {pattern: /[a-zA-Z]/}`
- `'A': {pattern: /[a-zA-Z]/, transform: v => v.toLocaleUpperCase()}`
- `'a': {pattern: /[a-zA-Z]/, transform: v => v.toLocaleLowerCase()}`
- `'!': {escape: true}`
- `credit-card: '#### - #### - #### - ####'`
- `credit-card2: '#### #### #### ####'`
- `date: '##/##/####'`
- `date-iso: '####-##-##'`
- `date-with-time: '##/##/#### ##:##'`
- `phone: '(###) ###-####'`
- `phone2: '### ###-####'`
- `intlPhone: ['(###) ###-####', '+# (###) ###-####', '+## (###) ###-####', '+### (###) ###-####',]`
- `social: '###-##-####'`
- `time: '##:##'`
- `time-with-seconds: '##:##:##'`
- `postalcode-ca: 'A#A #A#'`
`.number`: The value set to`unmaskedVar`is typecast as a number. If the value cannot be parsed with parseFloat(), then the original value is returned.
### Dynamic Masks
You can use an array of masks, the value will default to the shortest matching mask.
```vue
<v-text-field v-model="..." v-mask="['####', '##-###', '#-####-#']" /> // 1234 -> 1234 //
12345 -> 12-345 // 123456 -> 1-2345-6
```
This package was forked from @titou10/v-mask.
Most of the credit goes to:
- [vuetify v1.5.x code](https://github.com/vuetifyjs/vuetify/blob/v1.5.18/packages/vuetify/src/util/mask.ts)
- [vue-the-mask](https://github.com/vuejs-tips/vue-the-mask)
- [RonaldJerez/vue-the-mask](https://github.com/RonaldJerez/vue-the-mask)
- [@titou10/v-mask](https://github.com/titou10titou10/v-mask)
```sh
npm i @ui-toolkit/directives
```
```js
import Vue