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