@vuetify/nightly 3.8.9-dev.2025-06-13 → 3.8.9-master.2025-06-12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -45
- package/dist/json/attributes.json +3714 -4110
- package/dist/json/importMap-labs.json +24 -28
- package/dist/json/importMap.json +154 -154
- package/dist/json/tags.json +2 -106
- package/dist/json/web-types.json +6783 -8232
- package/dist/vuetify-labs.cjs +177 -730
- package/dist/vuetify-labs.css +4085 -4128
- package/dist/vuetify-labs.d.ts +2938 -10254
- package/dist/vuetify-labs.esm.js +178 -731
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +177 -730
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +166 -478
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +3607 -3650
- package/dist/vuetify.d.ts +2085 -2782
- package/dist/vuetify.esm.js +167 -479
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +166 -478
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +1229 -1251
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAlert/VAlert.css +1 -6
- package/lib/components/VAlert/VAlert.d.ts +0 -35
- package/lib/components/VAlert/VAlert.js +10 -15
- package/lib/components/VAlert/VAlert.js.map +1 -1
- package/lib/components/VAlert/VAlert.sass +1 -7
- package/lib/components/VAppBar/VAppBar.d.ts +3 -15
- package/lib/components/VAppBar/VAppBarNavIcon.d.ts +10 -20
- package/lib/components/VAutocomplete/VAutocomplete.d.ts +110 -175
- package/lib/components/VAutocomplete/VAutocomplete.js +3 -21
- package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
- package/lib/components/VBadge/VBadge.d.ts +0 -60
- package/lib/components/VBadge/VBadge.js +2 -7
- package/lib/components/VBadge/VBadge.js.map +1 -1
- package/lib/components/VBtn/VBtn.d.ts +10 -20
- package/lib/components/VBtnGroup/VBtnGroup.css +7 -30
- package/lib/components/VBtnGroup/VBtnGroup.d.ts +32 -58
- package/lib/components/VBtnGroup/VBtnGroup.js +3 -7
- package/lib/components/VBtnGroup/VBtnGroup.js.map +1 -1
- package/lib/components/VBtnGroup/VBtnGroup.sass +17 -44
- package/lib/components/VBtnToggle/VBtnToggle.d.ts +0 -25
- package/lib/components/VCard/VCard.d.ts +10 -20
- package/lib/components/VCheckbox/VCheckbox.d.ts +13 -23
- package/lib/components/VCheckbox/VCheckboxBtn.d.ts +10 -20
- package/lib/components/VChip/VChip.d.ts +10 -20
- package/lib/components/VChipGroup/VChipGroup.d.ts +0 -10
- package/lib/components/VCombobox/VCombobox.d.ts +110 -175
- package/lib/components/VCombobox/VCombobox.js +3 -22
- package/lib/components/VCombobox/VCombobox.js.map +1 -1
- package/lib/components/VDataTable/VDataTable.d.ts +0 -60
- package/lib/components/VDataTable/VDataTableHeaders.d.ts +0 -13
- package/lib/components/VDataTable/VDataTableHeaders.js +2 -4
- package/lib/components/VDataTable/VDataTableHeaders.js.map +1 -1
- package/lib/components/VDataTable/VDataTableServer.d.ts +0 -42
- package/lib/components/VDataTable/VDataTableVirtual.d.ts +0 -42
- package/lib/components/VDatePicker/VDatePicker.d.ts +5 -80
- package/lib/components/VDatePicker/VDatePicker.js +4 -10
- package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
- package/lib/components/VDatePicker/VDatePickerMonth.d.ts +0 -10
- package/lib/components/VDatePicker/VDatePickerMonth.js +1 -1
- package/lib/components/VDatePicker/VDatePickerMonth.js.map +1 -1
- package/lib/components/VExpansionPanel/VExpansionPanel.d.ts +10 -20
- package/lib/components/VExpansionPanel/VExpansionPanelTitle.d.ts +10 -20
- package/lib/components/VExpansionPanel/VExpansionPanels.d.ts +10 -20
- package/lib/components/VFab/VFab.d.ts +10 -20
- package/lib/components/VField/VField.d.ts +3 -3
- package/lib/components/VFileInput/VFileInput.d.ts +15 -15
- package/lib/components/VInfiniteScroll/VInfiniteScroll.d.ts +3 -9
- package/lib/components/VInfiniteScroll/VInfiniteScroll.js +0 -29
- package/lib/components/VInfiniteScroll/VInfiniteScroll.js.map +1 -1
- package/lib/components/VInput/VInput.d.ts +4 -4
- package/lib/components/VKbd/VKbd.css +2 -13
- package/lib/components/VKbd/VKbd.sass +1 -2
- package/lib/components/VKbd/_variables.scss +1 -12
- package/lib/components/VKbd/index.d.ts +95 -1
- package/lib/components/VKbd/index.js +4 -1
- package/lib/components/VKbd/index.js.map +1 -1
- package/lib/components/VList/VList.d.ts +0 -13
- package/lib/components/VList/VList.js +1 -4
- package/lib/components/VList/VList.js.map +1 -1
- package/lib/components/VList/VListChildren.js.map +1 -1
- package/lib/components/VList/VListItem.css +2 -0
- package/lib/components/VList/VListItem.d.ts +10 -23
- package/lib/components/VList/VListItem.js +3 -7
- package/lib/components/VList/VListItem.js.map +1 -1
- package/lib/components/VList/VListItem.sass +2 -0
- package/lib/components/VList/_variables.scss +1 -0
- package/lib/components/VList/list.d.ts +2 -9
- package/lib/components/VList/list.js +0 -7
- package/lib/components/VList/list.js.map +1 -1
- package/lib/components/VMenu/VMenu.d.ts +0 -13
- package/lib/components/VMenu/VMenu.js +1 -2
- package/lib/components/VMenu/VMenu.js.map +1 -1
- package/lib/components/VNumberInput/VNumberInput.d.ts +89 -114
- package/lib/components/VNumberInput/VNumberInput.js +20 -43
- package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
- package/lib/components/VOtpInput/VOtpInput.js +1 -2
- package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
- package/lib/components/VOverlay/VOverlay.css +1 -1
- package/lib/components/VOverlay/_variables.scss +1 -1
- package/lib/components/VRadio/VRadio.d.ts +10 -20
- package/lib/components/VRadioGroup/VRadioGroup.d.ts +13 -23
- package/lib/components/VRangeSlider/VRangeSlider.d.ts +3 -3
- package/lib/components/VSelect/VSelect.d.ts +118 -204
- package/lib/components/VSelect/VSelect.js +3 -21
- package/lib/components/VSelect/VSelect.js.map +1 -1
- package/lib/components/VSelectionControl/VSelectionControl.d.ts +10 -20
- package/lib/components/VSelectionControlGroup/VSelectionControlGroup.d.ts +14 -28
- package/lib/components/VSlideGroup/VSlideGroup.d.ts +0 -10
- package/lib/components/VSlideGroup/VSlideGroup.js +1 -2
- package/lib/components/VSlideGroup/VSlideGroup.js.map +1 -1
- package/lib/components/VSlider/VSlider.d.ts +3 -3
- package/lib/components/VSlider/VSliderThumb.d.ts +10 -20
- package/lib/components/VSpeedDial/VSpeedDial.css +1 -1
- package/lib/components/VSpeedDial/VSpeedDial.d.ts +0 -13
- package/lib/components/VSpeedDial/VSpeedDial.sass +3 -1
- package/lib/components/VStepper/VStepperItem.d.ts +14 -28
- package/lib/components/VSwitch/VSwitch.d.ts +13 -23
- package/lib/components/VTable/VTable.css +0 -6
- package/lib/components/VTable/VTable.d.ts +24 -55
- package/lib/components/VTable/VTable.js +2 -9
- package/lib/components/VTable/VTable.js.map +1 -1
- package/lib/components/VTable/VTable.sass +0 -14
- package/lib/components/VTable/_variables.scss +0 -1
- package/lib/components/VTabs/VTab.d.ts +28 -56
- package/lib/components/VTabs/VTabs.d.ts +0 -10
- package/lib/components/VTextField/VTextField.d.ts +27 -27
- package/lib/components/VTextarea/VTextarea.d.ts +15 -15
- package/lib/components/VToolbar/VToolbar.d.ts +3 -15
- package/lib/components/VToolbar/VToolbar.js +3 -6
- package/lib/components/VToolbar/VToolbar.js.map +1 -1
- package/lib/composables/calendar.d.ts +0 -6
- package/lib/composables/calendar.js +1 -2
- package/lib/composables/calendar.js.map +1 -1
- package/lib/composables/date/DateAdapter.d.ts +3 -3
- package/lib/composables/date/DateAdapter.js.map +1 -1
- package/lib/composables/date/adapters/vuetify.d.ts +1 -1
- package/lib/composables/date/adapters/vuetify.js +4 -4
- package/lib/composables/date/adapters/vuetify.js.map +1 -1
- package/lib/composables/date/date.d.ts +3 -3
- package/lib/composables/date/index.d.ts +0 -1
- package/lib/composables/date/index.js +0 -1
- package/lib/composables/date/index.js.map +1 -1
- package/lib/composables/filter.js +0 -3
- package/lib/composables/filter.js.map +1 -1
- package/lib/composables/locale.d.ts +1 -5
- package/lib/composables/locale.js.map +1 -1
- package/lib/composables/theme.d.ts +1 -6
- package/lib/composables/theme.js +29 -97
- package/lib/composables/theme.js.map +1 -1
- package/lib/composables/virtual.js +1 -6
- package/lib/composables/virtual.js.map +1 -1
- package/lib/directives/ripple/index.d.ts +1 -2
- package/lib/directives/ripple/index.js +7 -12
- package/lib/directives/ripple/index.js.map +1 -1
- package/lib/entry-bundler.d.ts +3 -4
- package/lib/entry-bundler.js +1 -1
- package/lib/entry-bundler.js.map +1 -1
- package/lib/framework.d.ts +64 -83
- package/lib/framework.js +1 -1
- package/lib/framework.js.map +1 -1
- package/lib/labs/VCalendar/VCalendar.d.ts +0 -10
- package/lib/labs/VColorInput/VColorInput.d.ts +3 -3
- package/lib/labs/VDateInput/VDateInput.d.ts +87 -97
- package/lib/labs/VFileUpload/VFileUpload.d.ts +3 -3
- package/lib/labs/VFileUpload/VFileUploadItem.d.ts +10 -20
- package/lib/labs/VIconBtn/VIconBtn.d.ts +29 -29
- package/lib/labs/VIconBtn/VIconBtn.js +11 -7
- package/lib/labs/VIconBtn/VIconBtn.js.map +1 -1
- package/lib/labs/VStepperVertical/VStepperVertical.d.ts +10 -20
- package/lib/labs/VStepperVertical/VStepperVerticalItem.d.ts +10 -20
- package/lib/labs/VTreeview/VTreeview.d.ts +0 -13
- package/lib/labs/VTreeview/VTreeviewItem.d.ts +10 -20
- package/lib/labs/components.d.ts +0 -1
- package/lib/labs/components.js +0 -1
- package/lib/labs/components.js.map +1 -1
- package/lib/labs/entry-bundler.d.ts +3 -4
- package/lib/locale/adapters/vue-i18n.js +1 -6
- package/lib/locale/adapters/vue-i18n.js.map +1 -1
- package/lib/locale/adapters/vuetify.js +1 -7
- package/lib/locale/adapters/vuetify.js.map +1 -1
- package/lib/util/globals.d.ts +0 -1
- package/lib/util/globals.js +0 -1
- package/lib/util/globals.js.map +1 -1
- package/lib/util/helpers.d.ts +1 -2
- package/lib/util/helpers.js +7 -12
- package/lib/util/helpers.js.map +1 -1
- package/package.json +1 -3
- package/lib/components/VKbd/VKbd.d.ts +0 -221
- package/lib/components/VKbd/VKbd.js +0 -55
- package/lib/components/VKbd/VKbd.js.map +0 -1
- package/lib/composables/date/adapters/string.d.ts +0 -54
- package/lib/composables/date/adapters/string.js +0 -153
- package/lib/composables/date/adapters/string.js.map +0 -1
- package/lib/composables/iconSizes.d.ts +0 -28
- package/lib/composables/iconSizes.js +0 -23
- package/lib/composables/iconSizes.js.map +0 -1
- package/lib/composables/mask.d.ts +0 -38
- package/lib/composables/mask.js +0 -183
- package/lib/composables/mask.js.map +0 -1
- package/lib/labs/VMaskInput/VMaskInput.d.ts +0 -6993
- package/lib/labs/VMaskInput/VMaskInput.js +0 -67
- package/lib/labs/VMaskInput/VMaskInput.js.map +0 -1
- package/lib/labs/VMaskInput/index.d.ts +0 -1
- package/lib/labs/VMaskInput/index.js +0 -2
- package/lib/labs/VMaskInput/index.js.map +0 -1
package/lib/composables/mask.js
DELETED
@@ -1,183 +0,0 @@
|
|
1
|
-
// Utilities
|
2
|
-
import { computed, shallowRef } from 'vue';
|
3
|
-
import { isObject, propsFactory } from "../util/index.js"; // Types
|
4
|
-
export const makeMaskProps = propsFactory({
|
5
|
-
mask: [String, Object],
|
6
|
-
returnMaskedValue: Boolean
|
7
|
-
}, 'mask');
|
8
|
-
export const defaultDelimiters = /[-!$%^&*()_+|~=`{}[\]:";'<>?,./\\ ]/;
|
9
|
-
const presets = {
|
10
|
-
'credit-card': '#### - #### - #### - ####',
|
11
|
-
date: '##/##/####',
|
12
|
-
'date-time': '##/##/#### ##:##',
|
13
|
-
'iso-date': '####-##-##',
|
14
|
-
'iso-date-time': '####-##-## ##:##',
|
15
|
-
phone: '(###) ### - ####',
|
16
|
-
social: '###-##-####',
|
17
|
-
time: '##:##',
|
18
|
-
'time-with-seconds': '##:##:##'
|
19
|
-
};
|
20
|
-
export function isMaskDelimiter(char) {
|
21
|
-
return char ? defaultDelimiters.test(char) : false;
|
22
|
-
}
|
23
|
-
const defaultTokens = {
|
24
|
-
'#': {
|
25
|
-
pattern: /[0-9]/
|
26
|
-
},
|
27
|
-
A: {
|
28
|
-
pattern: /[A-Z]/i,
|
29
|
-
convert: v => v.toUpperCase()
|
30
|
-
},
|
31
|
-
a: {
|
32
|
-
pattern: /[a-z]/i,
|
33
|
-
convert: v => v.toLowerCase()
|
34
|
-
},
|
35
|
-
N: {
|
36
|
-
pattern: /[0-9A-Z]/i,
|
37
|
-
convert: v => v.toUpperCase()
|
38
|
-
},
|
39
|
-
n: {
|
40
|
-
pattern: /[0-9a-z]/i,
|
41
|
-
convert: v => v.toLowerCase()
|
42
|
-
},
|
43
|
-
X: {
|
44
|
-
pattern: defaultDelimiters
|
45
|
-
}
|
46
|
-
};
|
47
|
-
export function useMask(props, inputRef) {
|
48
|
-
const mask = computed(() => {
|
49
|
-
if (typeof props.mask === 'string') {
|
50
|
-
if (props.mask in presets) return presets[props.mask];
|
51
|
-
return props.mask;
|
52
|
-
}
|
53
|
-
return props.mask?.mask ?? '';
|
54
|
-
});
|
55
|
-
const tokens = computed(() => {
|
56
|
-
return {
|
57
|
-
...defaultTokens,
|
58
|
-
...(isObject(props.mask) ? props.mask.tokens : null)
|
59
|
-
};
|
60
|
-
});
|
61
|
-
const selection = shallowRef(0);
|
62
|
-
const lazySelection = shallowRef(0);
|
63
|
-
function isMask(char) {
|
64
|
-
return char in tokens.value;
|
65
|
-
}
|
66
|
-
function maskValidates(mask, char) {
|
67
|
-
if (char == null || !isMask(mask)) return false;
|
68
|
-
const item = tokens.value[mask];
|
69
|
-
if (item.pattern) return item.pattern.test(char);
|
70
|
-
return item.test(char);
|
71
|
-
}
|
72
|
-
function convert(mask, char) {
|
73
|
-
const item = tokens.value[mask];
|
74
|
-
return item.convert ? item.convert(char) : char;
|
75
|
-
}
|
76
|
-
function maskText(text) {
|
77
|
-
const trimmedText = text?.trim().replace(/\s+/g, ' ');
|
78
|
-
if (trimmedText == null) return '';
|
79
|
-
if (!mask.value.length || !trimmedText.length) return trimmedText;
|
80
|
-
let textIndex = 0;
|
81
|
-
let maskIndex = 0;
|
82
|
-
let newText = '';
|
83
|
-
while (maskIndex < mask.value.length) {
|
84
|
-
const mchar = mask.value[maskIndex];
|
85
|
-
const tchar = trimmedText[textIndex];
|
86
|
-
|
87
|
-
// Escaped character in mask, the next mask character is inserted
|
88
|
-
if (mchar === '\\') {
|
89
|
-
newText += mask.value[maskIndex + 1];
|
90
|
-
maskIndex += 2;
|
91
|
-
continue;
|
92
|
-
}
|
93
|
-
if (!isMask(mchar)) {
|
94
|
-
newText += mchar;
|
95
|
-
if (tchar === mchar) {
|
96
|
-
textIndex++;
|
97
|
-
}
|
98
|
-
} else if (maskValidates(mchar, tchar)) {
|
99
|
-
newText += convert(mchar, tchar);
|
100
|
-
textIndex++;
|
101
|
-
} else {
|
102
|
-
break;
|
103
|
-
}
|
104
|
-
maskIndex++;
|
105
|
-
}
|
106
|
-
return newText;
|
107
|
-
}
|
108
|
-
function unmaskText(text) {
|
109
|
-
if (text == null) return null;
|
110
|
-
if (!mask.value.length || !text.length) return text;
|
111
|
-
let textIndex = 0;
|
112
|
-
let maskIndex = 0;
|
113
|
-
let newText = '';
|
114
|
-
while (true) {
|
115
|
-
const mchar = mask.value[maskIndex];
|
116
|
-
const tchar = text[textIndex];
|
117
|
-
if (tchar == null) break;
|
118
|
-
if (mchar == null) {
|
119
|
-
newText += tchar;
|
120
|
-
textIndex++;
|
121
|
-
continue;
|
122
|
-
}
|
123
|
-
|
124
|
-
// Escaped character in mask, skip the next input character
|
125
|
-
if (mchar === '\\') {
|
126
|
-
if (tchar === mask.value[maskIndex + 1]) {
|
127
|
-
textIndex++;
|
128
|
-
}
|
129
|
-
maskIndex += 2;
|
130
|
-
continue;
|
131
|
-
}
|
132
|
-
if (maskValidates(mchar, tchar)) {
|
133
|
-
// masked char
|
134
|
-
newText += tchar;
|
135
|
-
textIndex++;
|
136
|
-
maskIndex++;
|
137
|
-
continue;
|
138
|
-
} else if (mchar !== tchar) {
|
139
|
-
// input doesn't match mask, skip forward until it does
|
140
|
-
while (true) {
|
141
|
-
const mchar = mask.value[maskIndex++];
|
142
|
-
if (mchar == null || maskValidates(mchar, tchar)) break;
|
143
|
-
}
|
144
|
-
continue;
|
145
|
-
}
|
146
|
-
textIndex++;
|
147
|
-
maskIndex++;
|
148
|
-
}
|
149
|
-
return newText;
|
150
|
-
}
|
151
|
-
function setCaretPosition(newSelection) {
|
152
|
-
selection.value = newSelection;
|
153
|
-
inputRef.value && inputRef.value.setSelectionRange(selection.value, selection.value);
|
154
|
-
}
|
155
|
-
function resetSelections() {
|
156
|
-
if (!inputRef.value?.selectionEnd) return;
|
157
|
-
selection.value = inputRef.value.selectionEnd;
|
158
|
-
lazySelection.value = 0;
|
159
|
-
for (let index = 0; index < selection.value; index++) {
|
160
|
-
isMaskDelimiter(inputRef.value.value[index]) || lazySelection.value++;
|
161
|
-
}
|
162
|
-
}
|
163
|
-
function updateRange() {
|
164
|
-
if (!inputRef.value) return;
|
165
|
-
resetSelections();
|
166
|
-
let selection = 0;
|
167
|
-
const newValue = inputRef.value.value;
|
168
|
-
if (newValue) {
|
169
|
-
for (let index = 0; index < newValue.length; index++) {
|
170
|
-
if (lazySelection.value <= 0) break;
|
171
|
-
isMaskDelimiter(newValue[index]) || lazySelection.value--;
|
172
|
-
selection++;
|
173
|
-
}
|
174
|
-
}
|
175
|
-
setCaretPosition(selection);
|
176
|
-
}
|
177
|
-
return {
|
178
|
-
updateRange,
|
179
|
-
maskText,
|
180
|
-
unmaskText
|
181
|
-
};
|
182
|
-
}
|
183
|
-
//# sourceMappingURL=mask.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"mask.js","names":["computed","shallowRef","isObject","propsFactory","makeMaskProps","mask","String","Object","returnMaskedValue","Boolean","defaultDelimiters","presets","date","phone","social","time","isMaskDelimiter","char","test","defaultTokens","pattern","A","convert","v","toUpperCase","a","toLowerCase","N","n","X","useMask","props","inputRef","tokens","selection","lazySelection","isMask","value","maskValidates","item","maskText","text","trimmedText","trim","replace","length","textIndex","maskIndex","newText","mchar","tchar","unmaskText","setCaretPosition","newSelection","setSelectionRange","resetSelections","selectionEnd","index","updateRange","newValue"],"sources":["../../src/composables/mask.ts"],"sourcesContent":["// Utilities\nimport { computed, shallowRef } from 'vue'\nimport { isObject, propsFactory } from '@/util'\n\n// Types\nimport type { PropType, Ref } from 'vue'\n\nexport interface MaskProps {\n mask: string | MaskOptions | undefined\n returnMaskedValue?: Boolean\n}\n\nexport interface MaskOptions {\n mask: string\n tokens: Record<string, MaskItem>\n}\n\nexport const makeMaskProps = propsFactory({\n mask: [String, Object] as PropType<string | MaskOptions>,\n returnMaskedValue: Boolean,\n}, 'mask')\n\nexport type MaskItem = {\n convert?: (char: string) => string\n} & ({\n pattern?: never\n test: (char: string) => boolean\n} | {\n pattern: RegExp\n test?: never\n})\n\nexport const defaultDelimiters = /[-!$%^&*()_+|~=`{}[\\]:\";'<>?,./\\\\ ]/\n\nconst presets: Record<string, string> = {\n 'credit-card': '#### - #### - #### - ####',\n date: '##/##/####',\n 'date-time': '##/##/#### ##:##',\n 'iso-date': '####-##-##',\n 'iso-date-time': '####-##-## ##:##',\n phone: '(###) ### - ####',\n social: '###-##-####',\n time: '##:##',\n 'time-with-seconds': '##:##:##',\n}\n\nexport function isMaskDelimiter (char: string): boolean {\n return char ? defaultDelimiters.test(char) : false\n}\n\nconst defaultTokens: Record<string, MaskItem> = {\n '#': {\n pattern: /[0-9]/,\n },\n A: {\n pattern: /[A-Z]/i,\n convert: v => v.toUpperCase(),\n },\n a: {\n pattern: /[a-z]/i,\n convert: v => v.toLowerCase(),\n },\n N: {\n pattern: /[0-9A-Z]/i,\n convert: v => v.toUpperCase(),\n },\n n: {\n pattern: /[0-9a-z]/i,\n convert: v => v.toLowerCase(),\n },\n X: {\n pattern: defaultDelimiters,\n },\n}\n\nexport function useMask (props: MaskProps, inputRef: Ref<HTMLInputElement | undefined>) {\n const mask = computed(() => {\n if (typeof props.mask === 'string') {\n if (props.mask in presets) return presets[props.mask]\n return props.mask\n }\n return props.mask?.mask ?? ''\n })\n const tokens = computed(() => {\n return {\n ...defaultTokens,\n ...(isObject(props.mask) ? props.mask.tokens : null),\n }\n })\n const selection = shallowRef(0)\n const lazySelection = shallowRef(0)\n\n function isMask (char: string): boolean {\n return char in tokens.value\n }\n\n function maskValidates (mask: string, char: string): boolean {\n if (char == null || !isMask(mask)) return false\n const item = tokens.value[mask]\n if (item.pattern) return item.pattern.test(char)\n return item.test(char)\n }\n\n function convert (mask: string, char: string): string {\n const item = tokens.value[mask]\n return item.convert ? item.convert(char) : char\n }\n\n function maskText (text: string | null | undefined): string {\n const trimmedText = text?.trim().replace(/\\s+/g, ' ')\n\n if (trimmedText == null) return ''\n\n if (!mask.value.length || !trimmedText.length) return trimmedText\n\n let textIndex = 0\n let maskIndex = 0\n let newText = ''\n\n while (maskIndex < mask.value.length) {\n const mchar = mask.value[maskIndex]\n const tchar = trimmedText[textIndex]\n\n // Escaped character in mask, the next mask character is inserted\n if (mchar === '\\\\') {\n newText += mask.value[maskIndex + 1]\n maskIndex += 2\n continue\n }\n\n if (!isMask(mchar)) {\n newText += mchar\n if (tchar === mchar) {\n textIndex++\n }\n } else if (maskValidates(mchar, tchar)) {\n newText += convert(mchar, tchar)\n textIndex++\n } else {\n break\n }\n\n maskIndex++\n }\n return newText\n }\n\n function unmaskText (text: string | null): string | null {\n if (text == null) return null\n\n if (!mask.value.length || !text.length) return text\n\n let textIndex = 0\n let maskIndex = 0\n let newText = ''\n\n while (true) {\n const mchar = mask.value[maskIndex]\n const tchar = text[textIndex]\n\n if (tchar == null) break\n\n if (mchar == null) {\n newText += tchar\n textIndex++\n continue\n }\n\n // Escaped character in mask, skip the next input character\n if (mchar === '\\\\') {\n if (tchar === mask.value[maskIndex + 1]) {\n textIndex++\n }\n maskIndex += 2\n continue\n }\n\n if (maskValidates(mchar, tchar)) {\n // masked char\n newText += tchar\n textIndex++\n maskIndex++\n continue\n } else if (mchar !== tchar) {\n // input doesn't match mask, skip forward until it does\n while (true) {\n const mchar = mask.value[maskIndex++]\n if (mchar == null || maskValidates(mchar, tchar)) break\n }\n continue\n }\n\n textIndex++\n maskIndex++\n }\n return newText\n }\n\n function setCaretPosition (newSelection: number) {\n selection.value = newSelection\n inputRef.value && inputRef.value.setSelectionRange(selection.value, selection.value)\n }\n\n function resetSelections () {\n if (!inputRef.value?.selectionEnd) return\n\n selection.value = inputRef.value.selectionEnd\n lazySelection.value = 0\n\n for (let index = 0; index < selection.value; index++) {\n isMaskDelimiter(inputRef.value.value[index]) || lazySelection.value++\n }\n }\n\n function updateRange () {\n if (!inputRef.value) return\n resetSelections()\n\n let selection = 0\n const newValue = inputRef.value.value\n\n if (newValue) {\n for (let index = 0; index < newValue.length; index++) {\n if (lazySelection.value <= 0) break\n isMaskDelimiter(newValue[index]) || lazySelection.value--\n selection++\n }\n }\n setCaretPosition(selection)\n }\n\n return {\n updateRange,\n maskText,\n unmaskText,\n }\n}\n"],"mappings":"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","ignoreList":[]}
|