@azure-net/kit 0.8.7 → 0.8.9
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/dist/core/ui/index.d.ts
CHANGED
package/dist/core/ui/index.js
CHANGED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type TokenSettings = {
|
|
2
|
+
pattern?: RegExp;
|
|
3
|
+
escape?: boolean;
|
|
4
|
+
transform?: (v: string) => string;
|
|
5
|
+
};
|
|
6
|
+
export type Tokens = Record<string, TokenSettings>;
|
|
7
|
+
export declare class Mask {
|
|
8
|
+
static tokens: Tokens;
|
|
9
|
+
static dynamicMask(maskIt: typeof Mask.maskIt, masks: string[], tokens: Tokens): (value: string, masked?: boolean) => string;
|
|
10
|
+
static maskIt(value: string, mask: string | undefined, masked: boolean | undefined, tokens: Tokens): string;
|
|
11
|
+
static masker(value: string, mask: string | undefined, masked: boolean | undefined, tokens: Tokens): string;
|
|
12
|
+
}
|
|
13
|
+
export declare const masked: (el: HTMLInputElement, mask?: string, tokens?: Tokens) => void;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
export class Mask {
|
|
2
|
+
static tokens = {
|
|
3
|
+
X: { pattern: /[0-9a-zA-Z]/ },
|
|
4
|
+
S: { pattern: /[a-zA-Z]/ },
|
|
5
|
+
A: { pattern: /[a-zA-Z]/, transform: (v) => v.toLocaleUpperCase() },
|
|
6
|
+
a: { pattern: /[a-zA-Z]/, transform: (v) => v.toLocaleLowerCase() },
|
|
7
|
+
'#': { pattern: /\d/ },
|
|
8
|
+
'!': { escape: true }
|
|
9
|
+
};
|
|
10
|
+
static dynamicMask(maskIt, masks, tokens) {
|
|
11
|
+
masks = masks.sort((a, b) => a.length - b.length);
|
|
12
|
+
return function (value, masked = true) {
|
|
13
|
+
let i = 0;
|
|
14
|
+
while (i < masks.length) {
|
|
15
|
+
const currentMask = masks[i];
|
|
16
|
+
i++;
|
|
17
|
+
const nextMask = masks[i];
|
|
18
|
+
if (!(nextMask && maskIt(value, nextMask, true, tokens).length > currentMask.length)) {
|
|
19
|
+
return maskIt(value, currentMask, masked, tokens);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return '';
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
static maskIt(value, mask = undefined, masked = true, tokens) {
|
|
26
|
+
value = value || '';
|
|
27
|
+
mask = mask || '';
|
|
28
|
+
let iMask = 0;
|
|
29
|
+
let iValue = 0;
|
|
30
|
+
let output = '';
|
|
31
|
+
while (iMask < mask.length && iValue < value.length) {
|
|
32
|
+
let cMask = mask[iMask];
|
|
33
|
+
const masker = tokens[cMask];
|
|
34
|
+
const cValue = value[iValue];
|
|
35
|
+
if (masker && !masker.escape) {
|
|
36
|
+
if (masker.pattern?.test(cValue)) {
|
|
37
|
+
output += masker.transform ? masker.transform(cValue) : cValue;
|
|
38
|
+
iMask++;
|
|
39
|
+
}
|
|
40
|
+
iValue++;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
if (masker && masker.escape) {
|
|
44
|
+
iMask++;
|
|
45
|
+
cMask = mask[iMask];
|
|
46
|
+
}
|
|
47
|
+
if (masked)
|
|
48
|
+
output += cMask;
|
|
49
|
+
if (cValue === cMask)
|
|
50
|
+
iValue++;
|
|
51
|
+
iMask++;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
let restOutput = '';
|
|
55
|
+
while (iMask < mask.length && masked) {
|
|
56
|
+
const cMask = mask[iMask];
|
|
57
|
+
if (tokens[cMask]) {
|
|
58
|
+
restOutput = '';
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
restOutput += cMask;
|
|
62
|
+
iMask++;
|
|
63
|
+
}
|
|
64
|
+
return output + restOutput;
|
|
65
|
+
}
|
|
66
|
+
static masker(value, mask = undefined, masked = true, tokens) {
|
|
67
|
+
return Array.isArray(mask) ? this.dynamicMask(Mask.maskIt, mask, tokens)(value, masked) : this.maskIt(value, mask, masked, tokens);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
export const masked = (el, mask, tokens) => {
|
|
71
|
+
const config = {
|
|
72
|
+
mask,
|
|
73
|
+
tokens: tokens ? { ...Mask.tokens, ...tokens } : Mask.tokens
|
|
74
|
+
};
|
|
75
|
+
if (el.tagName.toLocaleUpperCase() !== 'INPUT') {
|
|
76
|
+
const els = el.getElementsByTagName('input');
|
|
77
|
+
if (els.length !== 1) {
|
|
78
|
+
throw new Error('mask requires 1 input, found ' + els.length);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
el = els[0];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (config.mask) {
|
|
85
|
+
el.oninput = function (evt) {
|
|
86
|
+
if (!evt.isTrusted)
|
|
87
|
+
return;
|
|
88
|
+
let position = el.selectionEnd;
|
|
89
|
+
if (position) {
|
|
90
|
+
const digit = el.value[position - 1];
|
|
91
|
+
el.value = Mask.masker(el.value, config.mask, true, config.tokens);
|
|
92
|
+
while (position < el.value.length && el.value.charAt(position - 1) !== digit) {
|
|
93
|
+
position++;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (el === document.activeElement) {
|
|
97
|
+
el.setSelectionRange(position, position);
|
|
98
|
+
setTimeout(function () {
|
|
99
|
+
el.setSelectionRange(position, position);
|
|
100
|
+
}, 0);
|
|
101
|
+
}
|
|
102
|
+
el.dispatchEvent(new Event('input'));
|
|
103
|
+
};
|
|
104
|
+
const newDisplay = Mask.masker(el.value, config.mask, true, config.tokens);
|
|
105
|
+
if (newDisplay !== el.value) {
|
|
106
|
+
el.value = newDisplay;
|
|
107
|
+
el.dispatchEvent(new Event('input'));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Mask.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Mask.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@azure-net/kit",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.9",
|
|
4
4
|
"files": [
|
|
5
5
|
"dist",
|
|
6
6
|
"!dist/**/*.test.*",
|
|
@@ -59,7 +59,8 @@
|
|
|
59
59
|
}
|
|
60
60
|
},
|
|
61
61
|
"peerDependencies": {
|
|
62
|
-
"svelte": "
|
|
62
|
+
"svelte": ">=5.0.0",
|
|
63
|
+
"@sveltejs/kit": ">=2.16.0"
|
|
63
64
|
},
|
|
64
65
|
"devDependencies": {
|
|
65
66
|
"@eslint/compat": "^1.2.5",
|