@mekari/pixel3-mask 0.1.0
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/chunk-5TJYDLDA.mjs +22 -0
- package/dist/chunk-GPEHQJAT.mjs +138 -0
- package/dist/chunk-MAURZ3LV.mjs +62 -0
- package/dist/chunk-SPWFCSFT.mjs +43 -0
- package/dist/chunk-T4KAZ3CC.mjs +49 -0
- package/dist/chunk-VYPKVKAE.mjs +12 -0
- package/dist/chunk-YR2EYYGF.mjs +196 -0
- package/dist/directive.d.mts +9 -0
- package/dist/directive.d.ts +9 -0
- package/dist/directive.js +490 -0
- package/dist/directive.mjs +12 -0
- package/dist/index.d.mts +11 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +503 -0
- package/dist/index.mjs +29 -0
- package/dist/input.d.mts +33 -0
- package/dist/input.d.ts +33 -0
- package/dist/input.js +451 -0
- package/dist/input.mjs +11 -0
- package/dist/mask.d.mts +31 -0
- package/dist/mask.d.ts +31 -0
- package/dist/mask.js +272 -0
- package/dist/mask.mjs +9 -0
- package/dist/metafile-cjs.json +1 -0
- package/dist/metafile-esm.json +1 -0
- package/dist/number.d.mts +6 -0
- package/dist/number.d.ts +6 -0
- package/dist/number.js +64 -0
- package/dist/number.mjs +7 -0
- package/dist/parser.d.mts +6 -0
- package/dist/parser.d.ts +6 -0
- package/dist/parser.js +83 -0
- package/dist/parser.mjs +7 -0
- package/dist/tokens.d.mts +11 -0
- package/dist/tokens.d.ts +11 -0
- package/dist/tokens.js +46 -0
- package/dist/tokens.mjs +7 -0
- package/package.json +42 -0
|
@@ -0,0 +1,490 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
7
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
+
var __publicField = (obj, key, value) => {
|
|
22
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
23
|
+
return value;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
// src/directive.ts
|
|
27
|
+
var directive_exports = {};
|
|
28
|
+
__export(directive_exports, {
|
|
29
|
+
vMask: () => vMask
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(directive_exports);
|
|
32
|
+
|
|
33
|
+
// src/tokens.ts
|
|
34
|
+
var tokens = {
|
|
35
|
+
"#": {
|
|
36
|
+
pattern: /[0-9]/
|
|
37
|
+
},
|
|
38
|
+
"S": {
|
|
39
|
+
pattern: /[a-zA-Z]/
|
|
40
|
+
},
|
|
41
|
+
"X": {
|
|
42
|
+
pattern: /[a-zA-Z0-9]/
|
|
43
|
+
},
|
|
44
|
+
"A": {
|
|
45
|
+
pattern: /[A-Z]/
|
|
46
|
+
},
|
|
47
|
+
"a": {
|
|
48
|
+
pattern: /[a-z]/
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
// src/number.ts
|
|
53
|
+
var prepare = /* @__PURE__ */ __name((input, group, decimal) => input.replaceAll(group, "").replace(decimal, ".").replace("..", ".").replace(/[^.\d]/g, ""), "prepare");
|
|
54
|
+
var createFormatter = /* @__PURE__ */ __name((min, max, opts) => {
|
|
55
|
+
var _a, _b;
|
|
56
|
+
return new Intl.NumberFormat((_b = (_a = opts.number) == null ? void 0 : _a.locale) != null ? _b : "en", {
|
|
57
|
+
minimumFractionDigits: min,
|
|
58
|
+
maximumFractionDigits: max,
|
|
59
|
+
roundingMode: "trunc"
|
|
60
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
61
|
+
});
|
|
62
|
+
}, "createFormatter");
|
|
63
|
+
var processNumber = /* @__PURE__ */ __name((value, masked = true, opts) => {
|
|
64
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
65
|
+
const sign = ((_a = opts.number) == null ? void 0 : _a.unsigned) !== true && value.startsWith("-") ? "-" : "";
|
|
66
|
+
const fraction = (_c = (_b = opts.number) == null ? void 0 : _b.fraction) != null ? _c : 0;
|
|
67
|
+
let formatter = createFormatter(0, fraction, opts);
|
|
68
|
+
const parts = formatter.formatToParts(1000.12);
|
|
69
|
+
const group = (_e = (_d = parts.find((part) => part.type === "group")) == null ? void 0 : _d.value) != null ? _e : " ";
|
|
70
|
+
const decimal = (_g = (_f = parts.find((part) => part.type === "decimal")) == null ? void 0 : _f.value) != null ? _g : ".";
|
|
71
|
+
const float = prepare(value, group, decimal);
|
|
72
|
+
if (Number.isNaN(parseFloat(float)))
|
|
73
|
+
return sign;
|
|
74
|
+
const floatParts = float.split(".");
|
|
75
|
+
if (floatParts[1] != null && floatParts[1].length >= 1) {
|
|
76
|
+
const min = floatParts[1].length <= fraction ? floatParts[1].length : fraction;
|
|
77
|
+
formatter = createFormatter(min, fraction, opts);
|
|
78
|
+
}
|
|
79
|
+
let result = formatter.format(parseFloat(float));
|
|
80
|
+
if (!masked) {
|
|
81
|
+
result = prepare(result, group, decimal);
|
|
82
|
+
} else if (fraction > 0 && float.endsWith(".") && !float.slice(0, -1).includes(".")) {
|
|
83
|
+
result += decimal;
|
|
84
|
+
}
|
|
85
|
+
return sign + result;
|
|
86
|
+
}, "processNumber");
|
|
87
|
+
|
|
88
|
+
// src/mask.ts
|
|
89
|
+
var _Mask = class _Mask {
|
|
90
|
+
constructor(defaults = {}) {
|
|
91
|
+
__publicField(this, "opts", {});
|
|
92
|
+
__publicField(this, "memo", /* @__PURE__ */ new Map());
|
|
93
|
+
var _a;
|
|
94
|
+
const opts = {
|
|
95
|
+
...defaults
|
|
96
|
+
};
|
|
97
|
+
if (opts.tokens != null) {
|
|
98
|
+
opts.tokens = opts.tokensReplace ? {
|
|
99
|
+
...opts.tokens
|
|
100
|
+
} : {
|
|
101
|
+
...tokens,
|
|
102
|
+
...opts.tokens
|
|
103
|
+
};
|
|
104
|
+
for (const token of Object.values(opts.tokens)) {
|
|
105
|
+
if (typeof token.pattern === "string") {
|
|
106
|
+
token.pattern = new RegExp(token.pattern);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
} else {
|
|
110
|
+
opts.tokens = tokens;
|
|
111
|
+
}
|
|
112
|
+
if (Array.isArray(opts.mask)) {
|
|
113
|
+
if (opts.mask.length > 1) {
|
|
114
|
+
opts.mask = [...opts.mask].sort((a, b) => a.length - b.length);
|
|
115
|
+
} else {
|
|
116
|
+
opts.mask = (_a = opts.mask[0]) != null ? _a : "";
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (opts.mask === "") {
|
|
120
|
+
opts.mask = null;
|
|
121
|
+
}
|
|
122
|
+
this.opts = opts;
|
|
123
|
+
}
|
|
124
|
+
masked(value) {
|
|
125
|
+
return this.process(String(value), this.findMask(String(value)));
|
|
126
|
+
}
|
|
127
|
+
unmasked(value) {
|
|
128
|
+
return this.process(String(value), this.findMask(String(value)), false);
|
|
129
|
+
}
|
|
130
|
+
isEager() {
|
|
131
|
+
return this.opts.eager === true;
|
|
132
|
+
}
|
|
133
|
+
isReversed() {
|
|
134
|
+
return this.opts.reversed === true;
|
|
135
|
+
}
|
|
136
|
+
completed(value) {
|
|
137
|
+
const mask = this.findMask(String(value));
|
|
138
|
+
if (this.opts.mask == null || mask == null)
|
|
139
|
+
return false;
|
|
140
|
+
const length = this.process(String(value), mask).length;
|
|
141
|
+
if (typeof this.opts.mask === "string") {
|
|
142
|
+
return length >= this.opts.mask.length;
|
|
143
|
+
}
|
|
144
|
+
return length >= mask.length;
|
|
145
|
+
}
|
|
146
|
+
findMask(value) {
|
|
147
|
+
var _a, _b;
|
|
148
|
+
const mask = this.opts.mask;
|
|
149
|
+
if (mask == null) {
|
|
150
|
+
return null;
|
|
151
|
+
} else if (typeof mask === "string") {
|
|
152
|
+
return mask;
|
|
153
|
+
} else if (typeof mask === "function") {
|
|
154
|
+
return mask(value);
|
|
155
|
+
}
|
|
156
|
+
const l = this.process(value, (_a = mask.slice(-1).pop()) != null ? _a : "", false);
|
|
157
|
+
return (_b = mask.find((el) => this.process(value, el, false).length >= l.length)) != null ? _b : "";
|
|
158
|
+
}
|
|
159
|
+
escapeMask(maskRaw) {
|
|
160
|
+
const chars = [];
|
|
161
|
+
const escaped = [];
|
|
162
|
+
maskRaw.split("").forEach((ch, i) => {
|
|
163
|
+
if (ch === "!" && maskRaw[i - 1] !== "!") {
|
|
164
|
+
escaped.push(i - escaped.length);
|
|
165
|
+
} else {
|
|
166
|
+
chars.push(ch);
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
return {
|
|
170
|
+
mask: chars.join(""),
|
|
171
|
+
escaped
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
process(value, maskRaw, masked = true) {
|
|
175
|
+
if (this.opts.number != null)
|
|
176
|
+
return processNumber(value, masked, this.opts);
|
|
177
|
+
if (maskRaw == null)
|
|
178
|
+
return value;
|
|
179
|
+
const memoKey = `v=${value},mr=${maskRaw},m=${masked ? 1 : 0}`;
|
|
180
|
+
if (this.memo.has(memoKey))
|
|
181
|
+
return this.memo.get(memoKey);
|
|
182
|
+
const {
|
|
183
|
+
mask,
|
|
184
|
+
escaped
|
|
185
|
+
} = this.escapeMask(maskRaw);
|
|
186
|
+
const result = [];
|
|
187
|
+
const tokens2 = this.opts.tokens != null ? this.opts.tokens : {};
|
|
188
|
+
const offset = this.isReversed() ? -1 : 1;
|
|
189
|
+
const method = this.isReversed() ? "unshift" : "push";
|
|
190
|
+
const lastMaskChar = this.isReversed() ? 0 : mask.length - 1;
|
|
191
|
+
const check = this.isReversed() ? () => m > -1 && v > -1 : () => m < mask.length && v < value.length;
|
|
192
|
+
const notLastMaskChar = /* @__PURE__ */ __name((m2) => !this.isReversed() && m2 <= lastMaskChar || this.isReversed() && m2 >= lastMaskChar, "notLastMaskChar");
|
|
193
|
+
let lastRawMaskChar;
|
|
194
|
+
let repeatedPos = -1;
|
|
195
|
+
let m = this.isReversed() ? mask.length - 1 : 0;
|
|
196
|
+
let v = this.isReversed() ? value.length - 1 : 0;
|
|
197
|
+
let multipleMatched = false;
|
|
198
|
+
while (check()) {
|
|
199
|
+
const maskChar = mask.charAt(m);
|
|
200
|
+
const token = tokens2[maskChar];
|
|
201
|
+
const valueChar = (token == null ? void 0 : token.transform) != null ? token.transform(value.charAt(v)) : value.charAt(v);
|
|
202
|
+
if (!escaped.includes(m) && token != null) {
|
|
203
|
+
if (valueChar.match(token.pattern) != null) {
|
|
204
|
+
result[method](valueChar);
|
|
205
|
+
if (token.repeated) {
|
|
206
|
+
if (repeatedPos === -1) {
|
|
207
|
+
repeatedPos = m;
|
|
208
|
+
} else if (m === lastMaskChar && m !== repeatedPos) {
|
|
209
|
+
m = repeatedPos - offset;
|
|
210
|
+
}
|
|
211
|
+
if (lastMaskChar === repeatedPos) {
|
|
212
|
+
m -= offset;
|
|
213
|
+
}
|
|
214
|
+
} else if (token.multiple) {
|
|
215
|
+
multipleMatched = true;
|
|
216
|
+
m -= offset;
|
|
217
|
+
}
|
|
218
|
+
m += offset;
|
|
219
|
+
} else if (token.multiple) {
|
|
220
|
+
if (multipleMatched) {
|
|
221
|
+
m += offset;
|
|
222
|
+
v -= offset;
|
|
223
|
+
multipleMatched = false;
|
|
224
|
+
} else {
|
|
225
|
+
}
|
|
226
|
+
} else if (valueChar === lastRawMaskChar) {
|
|
227
|
+
lastRawMaskChar = void 0;
|
|
228
|
+
} else if (token.optional) {
|
|
229
|
+
m += offset;
|
|
230
|
+
v -= offset;
|
|
231
|
+
} else {
|
|
232
|
+
}
|
|
233
|
+
v += offset;
|
|
234
|
+
} else {
|
|
235
|
+
if (masked && !this.isEager()) {
|
|
236
|
+
result[method](maskChar);
|
|
237
|
+
}
|
|
238
|
+
if (valueChar === maskChar && !this.isEager()) {
|
|
239
|
+
v += offset;
|
|
240
|
+
} else {
|
|
241
|
+
lastRawMaskChar = maskChar;
|
|
242
|
+
}
|
|
243
|
+
if (!this.isEager()) {
|
|
244
|
+
m += offset;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
if (this.isEager()) {
|
|
248
|
+
while (notLastMaskChar(m) && (tokens2[mask.charAt(m)] == null || escaped.includes(m))) {
|
|
249
|
+
if (masked) {
|
|
250
|
+
result[method](mask.charAt(m));
|
|
251
|
+
if (value.charAt(v) === mask.charAt(m)) {
|
|
252
|
+
m += offset;
|
|
253
|
+
v += offset;
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
} else if (mask.charAt(m) === value.charAt(v)) {
|
|
257
|
+
v += offset;
|
|
258
|
+
}
|
|
259
|
+
m += offset;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
this.memo.set(memoKey, result.join(""));
|
|
264
|
+
return this.memo.get(memoKey);
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
__name(_Mask, "Mask");
|
|
268
|
+
var Mask = _Mask;
|
|
269
|
+
|
|
270
|
+
// src/parser.ts
|
|
271
|
+
var parseJson = /* @__PURE__ */ __name((value) => JSON.parse(value.replaceAll("'", '"')), "parseJson");
|
|
272
|
+
var parseInput = /* @__PURE__ */ __name((input, defaults = {}) => {
|
|
273
|
+
const opts = {
|
|
274
|
+
...defaults
|
|
275
|
+
};
|
|
276
|
+
if (input.dataset.maska != null && input.dataset.maska !== "") {
|
|
277
|
+
opts.mask = parseMask(input.dataset.maska);
|
|
278
|
+
}
|
|
279
|
+
if (input.dataset.maskaEager != null) {
|
|
280
|
+
opts.eager = parseBool(input.dataset.maskaEager);
|
|
281
|
+
}
|
|
282
|
+
if (input.dataset.maskaReversed != null) {
|
|
283
|
+
opts.reversed = parseBool(input.dataset.maskaReversed);
|
|
284
|
+
}
|
|
285
|
+
if (input.dataset.maskaTokensReplace != null) {
|
|
286
|
+
opts.tokensReplace = parseBool(input.dataset.maskaTokensReplace);
|
|
287
|
+
}
|
|
288
|
+
if (input.dataset.maskaTokens != null) {
|
|
289
|
+
opts.tokens = parseTokens(input.dataset.maskaTokens);
|
|
290
|
+
}
|
|
291
|
+
const number = {};
|
|
292
|
+
if (input.dataset.maskaNumberLocale != null) {
|
|
293
|
+
number.locale = input.dataset.maskaNumberLocale;
|
|
294
|
+
}
|
|
295
|
+
if (input.dataset.maskaNumberFraction != null) {
|
|
296
|
+
number.fraction = parseInt(input.dataset.maskaNumberFraction);
|
|
297
|
+
}
|
|
298
|
+
if (input.dataset.maskaNumberUnsigned != null) {
|
|
299
|
+
number.unsigned = parseBool(input.dataset.maskaNumberUnsigned);
|
|
300
|
+
}
|
|
301
|
+
if (input.dataset.maskaNumber != null || Object.values(number).length > 0) {
|
|
302
|
+
opts.number = number;
|
|
303
|
+
}
|
|
304
|
+
return opts;
|
|
305
|
+
}, "parseInput");
|
|
306
|
+
var parseBool = /* @__PURE__ */ __name((value) => value !== "" ? Boolean(JSON.parse(value)) : true, "parseBool");
|
|
307
|
+
var parseMask = /* @__PURE__ */ __name((value) => value.startsWith("[") && value.endsWith("]") ? parseJson(value) : value, "parseMask");
|
|
308
|
+
var parseTokens = /* @__PURE__ */ __name((value) => {
|
|
309
|
+
if (value.startsWith("{") && value.endsWith("}")) {
|
|
310
|
+
return parseJson(value);
|
|
311
|
+
}
|
|
312
|
+
const tokens2 = {};
|
|
313
|
+
value.split("|").forEach((token) => {
|
|
314
|
+
const parts = token.split(":");
|
|
315
|
+
tokens2[parts[0]] = {
|
|
316
|
+
pattern: new RegExp(parts[1]),
|
|
317
|
+
optional: parts[2] === "optional",
|
|
318
|
+
multiple: parts[2] === "multiple",
|
|
319
|
+
repeated: parts[2] === "repeated"
|
|
320
|
+
};
|
|
321
|
+
});
|
|
322
|
+
return tokens2;
|
|
323
|
+
}, "parseTokens");
|
|
324
|
+
|
|
325
|
+
// src/input.ts
|
|
326
|
+
var _MaskInput = class _MaskInput {
|
|
327
|
+
constructor(target, options = {}) {
|
|
328
|
+
this.options = options;
|
|
329
|
+
__publicField(this, "items", /* @__PURE__ */ new Map());
|
|
330
|
+
__publicField(this, "eventAbortController");
|
|
331
|
+
__publicField(this, "onInput", /* @__PURE__ */ __name((e) => {
|
|
332
|
+
if (e instanceof CustomEvent && e.type === "input" && !e.isTrusted && !e.bubbles) {
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
const input = e.target;
|
|
336
|
+
const mask = this.items.get(input);
|
|
337
|
+
const isDelete = "inputType" in e && e.inputType.startsWith("delete");
|
|
338
|
+
const isEager = mask.isEager();
|
|
339
|
+
const value = isDelete && isEager && mask.unmasked(input.value) === "" ? "" : input.value;
|
|
340
|
+
this.fixCursor(input, isDelete, () => this.setValue(input, value));
|
|
341
|
+
}, "onInput"));
|
|
342
|
+
this.eventAbortController = new AbortController();
|
|
343
|
+
this.init(this.getInputs(target));
|
|
344
|
+
}
|
|
345
|
+
update(options = {}) {
|
|
346
|
+
this.options = {
|
|
347
|
+
...options
|
|
348
|
+
};
|
|
349
|
+
this.init(Array.from(this.items.keys()));
|
|
350
|
+
}
|
|
351
|
+
updateValue(input) {
|
|
352
|
+
if (input.value !== "" && input.value !== this.processInput(input).masked) {
|
|
353
|
+
this.setValue(input, input.value);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
destroy() {
|
|
357
|
+
this.eventAbortController.abort();
|
|
358
|
+
this.items.clear();
|
|
359
|
+
}
|
|
360
|
+
init(inputs) {
|
|
361
|
+
const defaults = this.getOptions(this.options);
|
|
362
|
+
for (const input of inputs) {
|
|
363
|
+
if (!this.items.has(input)) {
|
|
364
|
+
const {
|
|
365
|
+
signal
|
|
366
|
+
} = this.eventAbortController;
|
|
367
|
+
input.addEventListener("input", this.onInput, {
|
|
368
|
+
capture: true,
|
|
369
|
+
signal
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
const mask = new Mask(parseInput(input, defaults));
|
|
373
|
+
this.items.set(input, mask);
|
|
374
|
+
queueMicrotask(() => this.updateValue(input));
|
|
375
|
+
if (input.selectionStart === null && mask.isEager()) {
|
|
376
|
+
console.warn("Mask: input of `%s` type is not supported", input.type);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
getInputs(target) {
|
|
381
|
+
if (typeof target === "string") {
|
|
382
|
+
return Array.from(document.querySelectorAll(target));
|
|
383
|
+
}
|
|
384
|
+
return "length" in target ? Array.from(target) : [target];
|
|
385
|
+
}
|
|
386
|
+
getOptions(options) {
|
|
387
|
+
const {
|
|
388
|
+
onUpdate,
|
|
389
|
+
preProcess,
|
|
390
|
+
postProcess,
|
|
391
|
+
...opts
|
|
392
|
+
} = options;
|
|
393
|
+
return opts;
|
|
394
|
+
}
|
|
395
|
+
fixCursor(input, isDelete, closure) {
|
|
396
|
+
const pos = input.selectionStart;
|
|
397
|
+
const value = input.value;
|
|
398
|
+
closure();
|
|
399
|
+
if (pos === null || pos === value.length && !isDelete)
|
|
400
|
+
return;
|
|
401
|
+
const valueNew = input.value;
|
|
402
|
+
const leftPart = value.slice(0, pos);
|
|
403
|
+
const leftPartNew = valueNew.slice(0, pos);
|
|
404
|
+
const unmasked = this.processInput(input, leftPart).unmasked;
|
|
405
|
+
const unmaskedNew = this.processInput(input, leftPartNew).unmasked;
|
|
406
|
+
let posFixed = pos;
|
|
407
|
+
if (leftPart !== leftPartNew) {
|
|
408
|
+
posFixed += isDelete ? valueNew.length - value.length : unmasked.length - unmaskedNew.length;
|
|
409
|
+
}
|
|
410
|
+
input.setSelectionRange(posFixed, posFixed);
|
|
411
|
+
}
|
|
412
|
+
setValue(input, value) {
|
|
413
|
+
const detail = this.processInput(input, value);
|
|
414
|
+
input.value = detail.masked;
|
|
415
|
+
if (this.options.onUpdate != null) {
|
|
416
|
+
if (Array.isArray(this.options.onUpdate)) {
|
|
417
|
+
this.options.onUpdate.forEach((f) => f(detail));
|
|
418
|
+
} else {
|
|
419
|
+
this.options.onUpdate(detail);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
input.dispatchEvent(new CustomEvent("maska", {
|
|
423
|
+
detail
|
|
424
|
+
}));
|
|
425
|
+
input.dispatchEvent(new CustomEvent("input", {
|
|
426
|
+
detail: detail.masked
|
|
427
|
+
}));
|
|
428
|
+
}
|
|
429
|
+
processInput(input, value) {
|
|
430
|
+
const mask = this.items.get(input);
|
|
431
|
+
let valueNew = value != null ? value : input.value;
|
|
432
|
+
if (this.options.preProcess != null) {
|
|
433
|
+
valueNew = this.options.preProcess(valueNew);
|
|
434
|
+
}
|
|
435
|
+
let masked = mask.masked(valueNew);
|
|
436
|
+
if (this.options.postProcess != null) {
|
|
437
|
+
masked = this.options.postProcess(masked);
|
|
438
|
+
}
|
|
439
|
+
return {
|
|
440
|
+
masked,
|
|
441
|
+
unmasked: mask.unmasked(valueNew),
|
|
442
|
+
completed: mask.completed(valueNew)
|
|
443
|
+
};
|
|
444
|
+
}
|
|
445
|
+
};
|
|
446
|
+
__name(_MaskInput, "MaskInput");
|
|
447
|
+
var MaskInput = _MaskInput;
|
|
448
|
+
|
|
449
|
+
// src/directive.ts
|
|
450
|
+
var masks = /* @__PURE__ */ new WeakMap();
|
|
451
|
+
var setArg = /* @__PURE__ */ __name((binding, value) => {
|
|
452
|
+
if (binding.arg == null || binding.instance == null)
|
|
453
|
+
return;
|
|
454
|
+
const isComposition = "setup" in binding.instance.$.type;
|
|
455
|
+
if (binding.arg in binding.instance) {
|
|
456
|
+
binding.instance[binding.arg] = value;
|
|
457
|
+
} else if (isComposition) {
|
|
458
|
+
console.warn("Mask: please expose `%s` using defineExpose", binding.arg);
|
|
459
|
+
}
|
|
460
|
+
}, "setArg");
|
|
461
|
+
var vMask = /* @__PURE__ */ __name((el, binding) => {
|
|
462
|
+
var _a;
|
|
463
|
+
const input = el instanceof HTMLInputElement ? el : el.querySelector("input");
|
|
464
|
+
if (input == null || (input == null ? void 0 : input.type) === "file")
|
|
465
|
+
return;
|
|
466
|
+
let opts = {};
|
|
467
|
+
if (binding.value != null) {
|
|
468
|
+
opts = typeof binding.value === "string" ? {
|
|
469
|
+
mask: binding.value
|
|
470
|
+
} : {
|
|
471
|
+
...binding.value
|
|
472
|
+
};
|
|
473
|
+
}
|
|
474
|
+
if (binding.arg != null) {
|
|
475
|
+
const updateArg = /* @__PURE__ */ __name((detail) => {
|
|
476
|
+
const value = binding.modifiers.unmasked ? detail.unmasked : binding.modifiers.completed ? detail.completed : detail.masked;
|
|
477
|
+
setArg(binding, value);
|
|
478
|
+
}, "updateArg");
|
|
479
|
+
opts.onUpdate = opts.onUpdate == null ? updateArg : Array.isArray(opts.onUpdate) ? [...opts.onUpdate, updateArg] : [opts.onUpdate, updateArg];
|
|
480
|
+
}
|
|
481
|
+
if (masks.has(input)) {
|
|
482
|
+
(_a = masks.get(input)) == null ? void 0 : _a.update(opts);
|
|
483
|
+
} else {
|
|
484
|
+
masks.set(input, new MaskInput(input, opts));
|
|
485
|
+
}
|
|
486
|
+
}, "vMask");
|
|
487
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
488
|
+
0 && (module.exports = {
|
|
489
|
+
vMask
|
|
490
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import {
|
|
2
|
+
vMask
|
|
3
|
+
} from "./chunk-T4KAZ3CC.mjs";
|
|
4
|
+
import "./chunk-GPEHQJAT.mjs";
|
|
5
|
+
import "./chunk-YR2EYYGF.mjs";
|
|
6
|
+
import "./chunk-SPWFCSFT.mjs";
|
|
7
|
+
import "./chunk-MAURZ3LV.mjs";
|
|
8
|
+
import "./chunk-5TJYDLDA.mjs";
|
|
9
|
+
import "./chunk-VYPKVKAE.mjs";
|
|
10
|
+
export {
|
|
11
|
+
vMask
|
|
12
|
+
};
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { MaskOptions } from './mask.mjs';
|
|
2
|
+
export { Mask, MaskType } from './mask.mjs';
|
|
3
|
+
import { MaskInputOptions } from './input.mjs';
|
|
4
|
+
export { MaskDetail, MaskInput } from './input.mjs';
|
|
5
|
+
export { MaskTokens, tokens } from './tokens.mjs';
|
|
6
|
+
export { vMask } from './directive.mjs';
|
|
7
|
+
import 'vue';
|
|
8
|
+
|
|
9
|
+
declare const defineMaskOptions: (options: MaskOptions | MaskInputOptions) => MaskOptions | MaskInputOptions;
|
|
10
|
+
|
|
11
|
+
export { MaskInputOptions, MaskOptions, defineMaskOptions };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { MaskOptions } from './mask.js';
|
|
2
|
+
export { Mask, MaskType } from './mask.js';
|
|
3
|
+
import { MaskInputOptions } from './input.js';
|
|
4
|
+
export { MaskDetail, MaskInput } from './input.js';
|
|
5
|
+
export { MaskTokens, tokens } from './tokens.js';
|
|
6
|
+
export { vMask } from './directive.js';
|
|
7
|
+
import 'vue';
|
|
8
|
+
|
|
9
|
+
declare const defineMaskOptions: (options: MaskOptions | MaskInputOptions) => MaskOptions | MaskInputOptions;
|
|
10
|
+
|
|
11
|
+
export { MaskInputOptions, MaskOptions, defineMaskOptions };
|