2
0
mirror of https://github.com/tenrok/maska.git synced 2026-05-24 14:04:08 +03:00
Files
maska/docs/v3/hooks.md
T
Alexander Shabunevich c659a3d585 docs: updated docs for v3
2024-05-29 22:36:46 +03:00

117 lines
2.1 KiB
Markdown

# Hooks & Events
## Hooks
Use hooks to transform masking value:
- `preProcess` hook is called before the mask processing
- `postProcess` hook is called after the mask processing, but before the input's value is set
For example, you can use it to check for a maximum length of a masked string:
```js
new MaskInput("input", {
postProcess: (value: string) => value.slice(0, 5)
})
```
## Events
You can subscribe to `maska` event that fires after each mask processing.
Event will contain `detail` property with a given structure:
<!-- tabs:start -->
### **Description**
- `masked`: masked value
- `unmasked`: unmasked value
- `completed`: flag that current mask is completed
### **Types**
```typescript
interface MaskaDetail {
masked: string
unmasked: string
completed: boolean
}
```
<!-- tabs:end -->
```js
const onMaska = (event: CustomEvent<MaskaDetail>) => {
console.log({
masked: event.detail.masked,
unmasked: event.detail.unmasked,
completed: event.detail.completed
})
}
```
<!-- tabs:start -->
## **Vanilla JS**
```js
document.querySelector("input").addEventListener("maska", onMaska)
```
## **Vue**
```vue
<input v-maska data-maska="#-#" @maska="onMaska" />
```
## **Alpine**
```html
<input x-maska data-maska="#-#" x-on:maska="onMaska" />
```
## **Svelte**
```svelte
<input use:maska data-maska="#-#" on:maska={onMaska} />
```
<!-- tabs:end -->
Alternatively, you can pass a callback function directly using the `onMaska` option:
<!-- tabs:start -->
### **Vanilla JS**
```js
new MaskInput("input", {
onMaska: (detail: MaskaDetail) => console.log(detail.completed)
})
```
### **Vue**
```vue
<script setup lang="ts">
const options = {
onMaska: (detail: MaskaDetail) => console.log(detail.completed)
}
</script>
<template>
<input v-maska="options">
</template>
```
### **Alpine**
```html
<div x-data="{ options: { onMaska: (detail) => console.log(detail.completed) }}">
<input x-maska="options">
</div>
```
### **Svelte**
```svelte
<script lang="ts">
const options = {
onMaska: (detail: MaskaDetail) => console.log(detail.completed)
}
</script>
<input use:maska={options}>
```
<!-- tabs:end -->