ku4web-components 6.5.5 → 6.5.6
Sign up to get free protection for your applications and to get access to all the features.
- package/angular/index.js +1 -1
- package/angular/index.mjs +1 -1
- package/dist/cjs/app-globals-3a1e7e63.js +5 -0
- package/dist/cjs/css-shim-f1391d35.js +6 -0
- package/dist/cjs/dom-5345ed9a.js +75 -0
- package/dist/cjs/index-065185f8.js +3093 -0
- package/dist/cjs/index-16f16ed9.js +14 -0
- package/dist/cjs/index-1a439af7.js +14 -0
- package/dist/cjs/index-436596bf.js +10 -0
- package/dist/cjs/index-49d3746b.js +10 -0
- package/dist/cjs/ku4-carousel-controls.cjs.entry.js +2 -2
- package/dist/cjs/ku4-carousel-slide.cjs.entry.js +1 -1
- package/dist/cjs/ku4-carousel.cjs.entry.js +3 -3
- package/dist/cjs/ku4-col.cjs.entry.js +1 -1
- package/dist/cjs/ku4-drawer.cjs.entry.js +1 -1
- package/dist/cjs/ku4-feature.cjs.entry.js +2 -2
- package/dist/cjs/ku4-focus-trap.cjs.entry.js +26 -26
- package/dist/cjs/ku4-form.cjs.entry.js +3 -3
- package/dist/cjs/ku4-grid.cjs.entry.js +1 -1
- package/dist/cjs/ku4-label.cjs.entry.js +2 -2
- package/dist/cjs/ku4-mask.cjs.entry.js +3 -3
- package/dist/cjs/ku4-modal.cjs.entry.js +3 -3
- package/dist/cjs/ku4-panel.cjs.entry.js +1 -1
- package/dist/cjs/ku4-preview.cjs.entry.js +43 -14
- package/dist/cjs/ku4-tab-list.cjs.entry.js +4 -4
- package/dist/cjs/ku4-tab-panel.cjs.entry.js +3 -3
- package/dist/cjs/ku4-tab.cjs.entry.js +3 -3
- package/dist/cjs/ku4-table.cjs.entry.js +1 -1
- package/dist/cjs/ku4-tooltip.cjs.entry.js +2 -2
- package/dist/cjs/ku4-validation.cjs.entry.js +2 -2
- package/dist/cjs/ku4web-components.cjs.js +101 -6
- package/dist/cjs/loader.cjs.js +17 -1
- package/dist/cjs/{uid-d533dbb1.js → uid-7f3954c8.js} +1 -1
- package/dist/cjs/uid-a1348ea5.js +11 -0
- package/dist/collection/capabilities/a11y/aria.js +26 -0
- package/dist/collection/capabilities/angular/index.js +24 -0
- package/dist/collection/capabilities/decorators/deprecated.js +20 -0
- package/dist/collection/capabilities/decorators/index.js +3 -0
- package/dist/collection/capabilities/decorators/memoize.js +7 -0
- package/dist/collection/capabilities/dom/isFocusable.js +7 -0
- package/dist/collection/capabilities/dom/queryFocusable.js +2 -0
- package/dist/collection/capabilities/identity/uid.js +6 -0
- package/dist/collection/capabilities/mask/index.js +5 -0
- package/dist/collection/capabilities/mask/patterns/date.js +40 -0
- package/dist/collection/capabilities/mask/patterns/index.js +7 -0
- package/dist/collection/capabilities/react/index.js +25 -0
- package/dist/collection/capabilities/testing/html.js +14 -0
- package/dist/collection/capabilities/testing/styles.js +14 -0
- package/dist/collection/capabilities/vue/index.js +28 -0
- package/dist/collection/capabilities/vue3/index.js +26 -0
- package/dist/collection/collection-manifest.json +31 -0
- package/dist/collection/components/ku4-carousel/ku4-carousel.css +221 -0
- package/dist/collection/components/ku4-carousel/ku4-carousel.js +369 -0
- package/dist/collection/components/ku4-carousel-controls/ku4-carousel-controls.css +32 -0
- package/dist/collection/components/ku4-carousel-controls/ku4-carousel-controls.js +112 -0
- package/dist/collection/components/ku4-carousel-slide/ku4-carousel-slide.css +3 -0
- package/dist/collection/components/ku4-carousel-slide/ku4-carousel-slide.js +159 -0
- package/dist/collection/components/ku4-col/ku4-col.css +601 -0
- package/dist/collection/components/ku4-col/ku4-col.js +288 -0
- package/dist/collection/components/ku4-drawer/ku4-drawer.css +56 -0
- package/dist/collection/components/ku4-drawer/ku4-drawer.js +163 -0
- package/dist/collection/components/ku4-feature/ku4-feature.js +70 -0
- package/dist/collection/components/ku4-focus-trap/ku4-focus-trap.css +3 -0
- package/dist/collection/components/ku4-focus-trap/ku4-focus-trap.js +441 -0
- package/dist/collection/components/ku4-form/ku4-form.js +265 -0
- package/dist/collection/components/ku4-grid/ku4-grid.css +751 -0
- package/dist/collection/components/ku4-grid/ku4-grid.js +408 -0
- package/dist/collection/components/ku4-label/ku4-label.css +36 -0
- package/dist/collection/components/ku4-label/ku4-label.js +115 -0
- package/dist/collection/components/ku4-mask/ku4-mask.css +3 -0
- package/dist/collection/components/ku4-mask/ku4-mask.js +459 -0
- package/dist/collection/components/ku4-modal/ku4-modal.css +85 -0
- package/dist/collection/components/ku4-modal/ku4-modal.js +231 -0
- package/dist/collection/components/ku4-panel/ku4-panel.css +14 -0
- package/dist/collection/components/ku4-panel/ku4-panel.js +119 -0
- package/dist/collection/components/ku4-preview/ku4-preview.css +23 -0
- package/dist/collection/components/ku4-preview/ku4-preview.js +266 -0
- package/dist/collection/components/ku4-tab/ku4-tab.css +82 -0
- package/dist/collection/components/ku4-tab/ku4-tab.js +191 -0
- package/dist/collection/components/ku4-tab-list/ku4-tab-list.css +6 -0
- package/dist/collection/components/ku4-tab-list/ku4-tab-list.js +118 -0
- package/dist/collection/components/ku4-tab-panel/ku4-tab-panel.css +26 -0
- package/dist/collection/components/ku4-tab-panel/ku4-tab-panel.js +166 -0
- package/dist/collection/components/ku4-table/ku4-table.css +116 -0
- package/dist/collection/components/ku4-table/ku4-table.js +120 -0
- package/dist/collection/components/ku4-tooltip/ku4-tooltip.css +56 -0
- package/dist/collection/components/ku4-tooltip/ku4-tooltip.js +274 -0
- package/dist/collection/components/ku4-validation/ku4-validation.css +19 -0
- package/dist/collection/components/ku4-validation/ku4-validation.js +364 -0
- package/dist/collection/components/ku4-validation/validate.js +14 -0
- package/dist/collection/index.js +1 -0
- package/dist/collection/security.js +27 -0
- package/dist/esm/app-globals-0f993ce5.js +3 -0
- package/dist/esm/css-shim-10e6e2ae.js +4 -0
- package/dist/esm/dom-7cd9cf71.js +73 -0
- package/dist/esm/index-5448a818.js +3 -0
- package/dist/esm/index-6cfd87e4.js +3 -0
- package/dist/esm/index-77bdf1f1.js +3 -0
- package/dist/esm/index-a02dcfc8.js +3057 -0
- package/dist/esm/index-aa119486.js +3 -0
- package/dist/esm/ku4-carousel-controls.entry.js +2 -2
- package/dist/esm/ku4-carousel-slide.entry.js +1 -1
- package/dist/esm/ku4-carousel.entry.js +3 -3
- package/dist/esm/ku4-col.entry.js +1 -1
- package/dist/esm/ku4-drawer.entry.js +1 -1
- package/dist/esm/ku4-feature.entry.js +2 -2
- package/dist/esm/ku4-focus-trap.entry.js +3 -3
- package/dist/esm/ku4-form.entry.js +3 -3
- package/dist/esm/ku4-grid.entry.js +1 -1
- package/dist/esm/ku4-label.entry.js +2 -2
- package/dist/esm/ku4-mask.entry.js +3 -3
- package/dist/esm/ku4-modal.entry.js +3 -3
- package/dist/esm/ku4-panel.entry.js +1 -1
- package/dist/esm/ku4-preview.entry.js +34 -5
- package/dist/esm/ku4-tab-list.entry.js +4 -4
- package/dist/esm/ku4-tab-panel.entry.js +3 -3
- package/dist/esm/ku4-tab.entry.js +3 -3
- package/dist/esm/ku4-table.entry.js +1 -1
- package/dist/esm/ku4-tooltip.entry.js +2 -2
- package/dist/esm/ku4-validation.entry.js +2 -2
- package/dist/esm/ku4web-components.js +101 -6
- package/dist/esm/loader.js +17 -1
- package/dist/esm/uid-3716c2c4.js +9 -0
- package/dist/esm/{uid-fbebccfd.js → uid-d593801c.js} +1 -1
- package/dist/esm-es5/index-5448a818.js +1 -0
- package/dist/esm-es5/index-77bdf1f1.js +1 -0
- package/dist/esm-es5/ku4-carousel-controls.entry.js +1 -1
- package/dist/esm-es5/ku4-carousel.entry.js +1 -1
- package/dist/esm-es5/ku4-feature.entry.js +1 -1
- package/dist/esm-es5/ku4-focus-trap.entry.js +1 -1
- package/dist/esm-es5/ku4-form.entry.js +1 -1
- package/dist/esm-es5/ku4-label.entry.js +1 -1
- package/dist/esm-es5/ku4-mask.entry.js +1 -1
- package/dist/esm-es5/ku4-modal.entry.js +1 -1
- package/dist/esm-es5/ku4-preview.entry.js +1 -1
- package/dist/esm-es5/ku4-tab-list.entry.js +1 -1
- package/dist/esm-es5/ku4-tab-panel.entry.js +1 -1
- package/dist/esm-es5/ku4-tab.entry.js +1 -1
- package/dist/esm-es5/ku4-tooltip.entry.js +1 -1
- package/dist/esm-es5/ku4-validation.entry.js +1 -1
- package/dist/esm-es5/uid-d593801c.js +1 -0
- package/dist/index.js +1 -1
- package/dist/ku4web-components/app-globals-0f993ce5.js +3 -0
- package/dist/ku4web-components/app-globals-497eb362.system.js +1 -0
- package/dist/ku4web-components/css-shim-10e6e2ae.js +4 -0
- package/dist/ku4web-components/css-shim-c8dd4551.system.js +1 -0
- package/dist/ku4web-components/dom-67d1e45e.system.js +21 -0
- package/dist/ku4web-components/dom-7cd9cf71.js +73 -0
- package/dist/ku4web-components/index-1c93827a.system.js +1 -0
- package/dist/ku4web-components/index-29f2b09f.system.js +1 -0
- package/dist/ku4web-components/index-5d0cb00d.system.js +1 -0
- package/dist/ku4web-components/index-6cfd87e4.js +3 -0
- package/dist/ku4web-components/index-a02dcfc8.js +3057 -0
- package/dist/ku4web-components/index-aa119486.js +3 -0
- package/dist/ku4web-components/index.esm.js +1 -0
- package/dist/ku4web-components/index.system.js +1 -0
- package/dist/ku4web-components/ku4-carousel-controls.entry.js +89 -0
- package/dist/ku4web-components/ku4-carousel-controls.system.entry.js +1 -0
- package/dist/ku4web-components/ku4-carousel-slide.entry.js +47 -0
- package/dist/ku4web-components/ku4-carousel-slide.system.entry.js +1 -0
- package/dist/ku4web-components/ku4-carousel.entry.js +175 -0
- package/dist/ku4web-components/ku4-carousel.system.entry.js +1 -0
- package/dist/ku4web-components/ku4-col.entry.js +75 -0
- package/dist/ku4web-components/ku4-col.system.entry.js +1 -0
- package/dist/ku4web-components/ku4-drawer.entry.js +35 -0
- package/dist/ku4web-components/ku4-drawer.system.entry.js +1 -0
- package/dist/ku4web-components/ku4-feature.entry.js +29 -0
- package/dist/ku4web-components/ku4-feature.system.entry.js +1 -0
- package/dist/ku4web-components/ku4-focus-trap.entry.js +323 -0
- package/dist/ku4web-components/ku4-focus-trap.system.entry.js +1 -0
- package/dist/ku4web-components/ku4-form.entry.js +120 -0
- package/dist/ku4web-components/ku4-form.system.entry.js +1 -0
- package/dist/ku4web-components/ku4-grid.entry.js +108 -0
- package/dist/ku4web-components/ku4-grid.system.entry.js +1 -0
- package/dist/ku4web-components/ku4-label.entry.js +70 -0
- package/dist/ku4web-components/ku4-label.system.entry.js +1 -0
- package/dist/ku4web-components/ku4-mask.entry.js +343 -0
- package/dist/ku4web-components/ku4-mask.system.entry.js +1 -0
- package/dist/ku4web-components/ku4-modal.entry.js +80 -0
- package/dist/ku4web-components/ku4-modal.system.entry.js +1 -0
- package/dist/ku4web-components/ku4-panel.entry.js +49 -0
- package/dist/ku4web-components/ku4-panel.system.entry.js +1 -0
- package/dist/ku4web-components/ku4-preview.entry.js +128 -0
- package/dist/ku4web-components/ku4-preview.system.entry.js +1 -0
- package/dist/ku4web-components/ku4-tab-list.entry.js +76 -0
- package/dist/ku4web-components/ku4-tab-list.system.entry.js +1 -0
- package/dist/ku4web-components/ku4-tab-panel.entry.js +72 -0
- package/dist/ku4web-components/ku4-tab-panel.system.entry.js +1 -0
- package/dist/ku4web-components/ku4-tab.entry.js +63 -0
- package/dist/ku4web-components/ku4-tab.system.entry.js +1 -0
- package/dist/ku4web-components/ku4-table.entry.js +79 -0
- package/dist/ku4web-components/ku4-table.system.entry.js +1 -0
- package/dist/ku4web-components/ku4-tooltip.entry.js +120 -0
- package/dist/ku4web-components/ku4-tooltip.system.entry.js +1 -0
- package/dist/ku4web-components/ku4-validation.entry.js +162 -0
- package/dist/ku4web-components/ku4-validation.system.entry.js +1 -0
- package/dist/ku4web-components/ku4web-components.css +299 -1
- package/dist/ku4web-components/ku4web-components.esm.js +129 -1
- package/dist/ku4web-components/ku4web-components.js +1 -1
- package/dist/ku4web-components/ku4web-components.system.js +1 -0
- package/dist/ku4web-components/{p-c6a2f4ba.entry.js → p-046b3990.entry.js} +1 -1
- package/dist/ku4web-components/{p-018d598f.entry.js → p-0b777b57.entry.js} +1 -1
- package/dist/ku4web-components/p-0de744b1.system.js +1 -0
- package/dist/ku4web-components/{p-c760ec1e.system.entry.js → p-0f1646ca.system.entry.js} +1 -1
- package/dist/ku4web-components/p-14752b72.system.js +1 -0
- package/dist/ku4web-components/{p-5d39e051.system.entry.js → p-17c2a7ac.system.entry.js} +1 -1
- package/dist/ku4web-components/{p-536d6073.entry.js → p-1abe6f26.entry.js} +1 -1
- package/dist/ku4web-components/{p-7bac5d20.system.entry.js → p-1e19bc01.system.entry.js} +1 -1
- package/dist/ku4web-components/{p-dfc33643.system.entry.js → p-27647af0.system.entry.js} +1 -1
- package/dist/ku4web-components/p-2ee63f57.system.js +1 -1
- package/dist/ku4web-components/{p-973be48d.system.entry.js → p-3deab7f6.system.entry.js} +1 -1
- package/dist/ku4web-components/{p-23b35ab3.system.entry.js → p-4ecd9b1d.system.entry.js} +1 -1
- package/dist/ku4web-components/p-563d1517.system.js +1 -0
- package/dist/ku4web-components/p-5a54ccf4.js +1 -0
- package/dist/ku4web-components/{p-2681e152.system.entry.js → p-5e8921ef.system.entry.js} +1 -1
- package/dist/ku4web-components/{p-6459c75c.system.entry.js → p-6509d3e7.system.entry.js} +1 -1
- package/dist/ku4web-components/p-791e2dfc.js +1 -0
- package/dist/ku4web-components/{p-4a012d6d.entry.js → p-7b6ca6a8.entry.js} +1 -1
- package/dist/ku4web-components/{p-ec165afd.system.entry.js → p-7b93a362.system.entry.js} +1 -1
- package/dist/ku4web-components/{p-2faea8a9.system.entry.js → p-8173d389.system.entry.js} +1 -1
- package/dist/ku4web-components/{p-13c90d3d.system.entry.js → p-96033515.system.entry.js} +1 -1
- package/dist/ku4web-components/{p-e7d401cc.system.entry.js → p-9778d082.system.entry.js} +1 -1
- package/dist/ku4web-components/{p-09fb8c34.entry.js → p-9b01a63a.entry.js} +1 -1
- package/dist/ku4web-components/p-a110d244.js +1 -0
- package/dist/ku4web-components/{p-ff9db3e7.entry.js → p-ac7884f3.entry.js} +1 -1
- package/dist/ku4web-components/{p-27d5ad45.system.entry.js → p-ae7ce1fe.system.entry.js} +1 -1
- package/dist/ku4web-components/{p-be0d8b6a.entry.js → p-b1680ef4.entry.js} +1 -1
- package/dist/ku4web-components/{p-2f1425ac.entry.js → p-bb5410b5.entry.js} +1 -1
- package/dist/ku4web-components/{p-cbee5388.system.entry.js → p-bb698020.system.entry.js} +1 -1
- package/dist/ku4web-components/{p-eed33b36.entry.js → p-d42bd64d.entry.js} +1 -1
- package/dist/ku4web-components/{p-7a3871e3.entry.js → p-d4877fdf.entry.js} +1 -1
- package/dist/ku4web-components/{p-1ebea98a.entry.js → p-da8a8b83.entry.js} +1 -1
- package/dist/ku4web-components/{p-507093a6.entry.js → p-de3b2ba1.entry.js} +1 -1
- package/dist/ku4web-components/{p-f791cd06.entry.js → p-e11fbd79.entry.js} +1 -1
- package/dist/ku4web-components/{p-991d53c6.entry.js → p-ea1961f5.entry.js} +1 -1
- package/dist/ku4web-components/shadow-css-38a1326b.js +388 -0
- package/dist/ku4web-components/shadow-css-7fde17ac.system.js +13 -0
- package/dist/ku4web-components/uid-2ed9f227.system.js +1 -0
- package/dist/ku4web-components/uid-3716c2c4.js +9 -0
- package/package.json +5 -5
- package/react/index.js +1 -1
- package/react/index.mjs +1 -1
- package/vue/index.js +1 -1
- package/vue/index.mjs +1 -1
- package/vue3/index.js +1 -1
- package/vue3/index.mjs +1 -1
- package/dist/cjs/index-57e2cfa5.js +0 -10
- package/dist/cjs/index-b46d22c6.js +0 -14
- package/dist/esm/index-919b08e6.js +0 -3
- package/dist/esm/index-f9890388.js +0 -3
- package/dist/esm-es5/index-919b08e6.js +0 -1
- package/dist/esm-es5/index-f9890388.js +0 -1
- package/dist/esm-es5/uid-fbebccfd.js +0 -1
- package/dist/ku4web-components/p-16f6027a.js +0 -1
- package/dist/ku4web-components/p-50ea6684.js +0 -1
- package/dist/ku4web-components/p-c38c9cd1.system.js +0 -1
- package/dist/ku4web-components/p-cbb6fb91.js +0 -1
- package/dist/ku4web-components/p-e9770900.system.js +0 -1
- package/dist/ku4web-components/p-f8a2bf9b.system.js +0 -1
@@ -0,0 +1,459 @@
|
|
1
|
+
import { Component, Prop, Watch, h } from '@stencil/core';
|
2
|
+
import { Assert, string, wait } from 'ku4es-kernel';
|
3
|
+
/**
|
4
|
+
* @description ku4-mask
|
5
|
+
*/
|
6
|
+
export class Ku4Mask {
|
7
|
+
constructor() {
|
8
|
+
this.charIndexes = [];
|
9
|
+
this.reverseCharIndexes = [];
|
10
|
+
this.previousValue = '';
|
11
|
+
this.currentValue = '';
|
12
|
+
this.touchStart = false;
|
13
|
+
/**
|
14
|
+
* Mask template
|
15
|
+
*/
|
16
|
+
this.template = '';
|
17
|
+
/**
|
18
|
+
* A regex of characters to ban from
|
19
|
+
* entry. A user will not be able to input
|
20
|
+
* any character in this set of characters.
|
21
|
+
* E.g. ban="[()-]" will not allow a user to
|
22
|
+
* input (, ), or - into the target input.
|
23
|
+
*/
|
24
|
+
this.ban = '';
|
25
|
+
/**
|
26
|
+
* A test pattern for the mask to allow or
|
27
|
+
* disallow characters at targeted points
|
28
|
+
* in the input. The pattern is a character
|
29
|
+
* separated value of regular expressions
|
30
|
+
* where the first character denotes the
|
31
|
+
* character separator at each subsequent
|
32
|
+
* value is a regular expression for the
|
33
|
+
* character at that indicated index.
|
34
|
+
* E.g. `pattern=",[345],,,[^abc]"` would mean
|
35
|
+
* that "," is the separator and that the
|
36
|
+
* first character must be a 3, 4, or 5, and
|
37
|
+
* the fourth character cannot be an a, b or c.
|
38
|
+
*/
|
39
|
+
this.pattern = '';
|
40
|
+
/**
|
41
|
+
* Mask Character
|
42
|
+
*/
|
43
|
+
this.char = '_';
|
44
|
+
/**
|
45
|
+
* Hide mask
|
46
|
+
*/
|
47
|
+
this.hidden = false;
|
48
|
+
this.handleFocus = this.handleFocus.bind(this);
|
49
|
+
this.handleBlur = this.handleBlur.bind(this);
|
50
|
+
this.handleKeyDown = this.handleKeyDown.bind(this);
|
51
|
+
this.handleInput = this.handleInput.bind(this);
|
52
|
+
this.handleTouchStart = this.handleTouchStart.bind(this);
|
53
|
+
this.init();
|
54
|
+
}
|
55
|
+
init() {
|
56
|
+
this.chars = this.char && new RegExp(this.char);
|
57
|
+
this.banned = this.ban && new RegExp(this.ban);
|
58
|
+
const pattern = this.pattern.replace(/[\s\n]/gm, '');
|
59
|
+
this.patterns = pattern.substr(1).split(pattern[0]).map((v) => {
|
60
|
+
try {
|
61
|
+
return v && new RegExp(v) || null;
|
62
|
+
}
|
63
|
+
catch (e) {
|
64
|
+
/**
|
65
|
+
* TODO: Remove try/catch when Safari supports lookbehinds.
|
66
|
+
* Safari does not support lookbehinds and blows up everything
|
67
|
+
* because of this. This try catch allows all masking behaviour
|
68
|
+
* to continue to work except for patterns that include lookbehinds.
|
69
|
+
*/
|
70
|
+
}
|
71
|
+
});
|
72
|
+
this.charIndexes = this.template.split('')
|
73
|
+
.reduce((acc, char, i) => {
|
74
|
+
if (this.chars.test(char)) {
|
75
|
+
acc.push(i);
|
76
|
+
}
|
77
|
+
return acc;
|
78
|
+
}, []);
|
79
|
+
this.reverseCharIndexes = [...this.charIndexes].reverse();
|
80
|
+
return this;
|
81
|
+
}
|
82
|
+
templateHandler(newTemplate, oldTemplate) {
|
83
|
+
const { input, previousCharIndex, previousValue, currentValue, value, char } = this;
|
84
|
+
const previousLength = string.unmask(previousValue, oldTemplate, char).length;
|
85
|
+
const currentLength = string.unmask(currentValue, oldTemplate, char).length;
|
86
|
+
const nextIndex = previousLength < currentLength ? previousCharIndex + 1 : previousCharIndex;
|
87
|
+
this.init().value = string.mask(string.unmask(value, oldTemplate, char), newTemplate, char);
|
88
|
+
input.setSelectionRange(nextIndex, nextIndex);
|
89
|
+
}
|
90
|
+
charHandler(newChar, oldChar) {
|
91
|
+
const { value, template } = this;
|
92
|
+
this.init().value = string.mask(string.unmask(value, template, oldChar), template, newChar);
|
93
|
+
}
|
94
|
+
get previousCharIndex() {
|
95
|
+
return this.reverseCharIndexes.find(i => this.selectionStart > i) || this.charIndexes[0];
|
96
|
+
}
|
97
|
+
get value() {
|
98
|
+
return this.currentValue;
|
99
|
+
}
|
100
|
+
set value(value) {
|
101
|
+
const { chars, hidden, input } = this;
|
102
|
+
const indexOfChar = value.search(chars);
|
103
|
+
this.currentValue = value;
|
104
|
+
input.value = hidden && indexOfChar > -1 ? value.substring(0, indexOfChar) : value;
|
105
|
+
}
|
106
|
+
handleTouchStart() {
|
107
|
+
this.touchStart = true;
|
108
|
+
}
|
109
|
+
handleFocus() {
|
110
|
+
// Abort if the browser is IE11
|
111
|
+
// @ts-ignore - Leveraging documentMode to determine unsupported browser
|
112
|
+
if (window.document.documentMode) {
|
113
|
+
return;
|
114
|
+
}
|
115
|
+
const { input, template, char, chars, touchStart } = this;
|
116
|
+
const inputUnmasked = string.unmask(input.value, template, char);
|
117
|
+
const valueUnmasked = string.unmask(this.value, template, char);
|
118
|
+
this.value = inputUnmasked !== valueUnmasked
|
119
|
+
? string.mask(inputUnmasked, template, char)
|
120
|
+
: string.mask(valueUnmasked, template, char);
|
121
|
+
wait(0).then(() => {
|
122
|
+
const index = input.value.search(chars);
|
123
|
+
const selection = index < 0 ? input.value.length : index;
|
124
|
+
this.input.setSelectionRange(index < 0 && !touchStart ? 0 : selection, selection);
|
125
|
+
this.touchStart = false;
|
126
|
+
});
|
127
|
+
}
|
128
|
+
handleBlur() {
|
129
|
+
const { template, char } = this;
|
130
|
+
if (Assert.isEmpty(string.unmask(this.value, template, char))) {
|
131
|
+
this.value = '';
|
132
|
+
}
|
133
|
+
}
|
134
|
+
handleKeyDown(e) {
|
135
|
+
// Abort if the browser is IE11
|
136
|
+
// @ts-ignore - Leveraging documentMode to determine unsupported browser
|
137
|
+
if (window.document.documentMode) {
|
138
|
+
return;
|
139
|
+
}
|
140
|
+
const { banned, hidden, template, char } = this;
|
141
|
+
if (e.key &&
|
142
|
+
e.key.length === 1 &&
|
143
|
+
banned &&
|
144
|
+
(banned.test(e.key) &&
|
145
|
+
!(e.altKey || e.ctrlKey || e.metaKey))) {
|
146
|
+
e.preventDefault();
|
147
|
+
}
|
148
|
+
this.previousValue = hidden ? string.mask(string.unmask(e.target.value, template, char), template, char) : e.target.value;
|
149
|
+
this.selectionStart = e.target.selectionStart;
|
150
|
+
this.selectionEnd = e.target.selectionEnd;
|
151
|
+
}
|
152
|
+
handleInput(e) {
|
153
|
+
// Abort if the browser is IE11
|
154
|
+
// @ts-ignore - Leveraging documentMode to determine unsupported browser
|
155
|
+
if (window.document.documentMode) {
|
156
|
+
return;
|
157
|
+
}
|
158
|
+
const { input, template, char, chars, previousValue, banned, selectionStart, selectionEnd, previousCharIndex, patterns, charIndexes, reverseCharIndexes } = this;
|
159
|
+
if (!chars.test(this.previousValue) &&
|
160
|
+
!(e.type === 'input' && !e.inputType) &&
|
161
|
+
e.inputType !== 'insertFromPaste' &&
|
162
|
+
e.inputType !== 'deleteContentBackward' &&
|
163
|
+
e.inputType !== 'deleteContentForward' &&
|
164
|
+
e.inputType !== 'deleteByCut' &&
|
165
|
+
selectionStart === selectionEnd) {
|
166
|
+
this.value = previousValue;
|
167
|
+
return;
|
168
|
+
}
|
169
|
+
if (e.inputType === 'insertFromPaste') {
|
170
|
+
try {
|
171
|
+
navigator.clipboard.readText()
|
172
|
+
.then((rawData) => {
|
173
|
+
const unmask = string.unmask(rawData, template, char);
|
174
|
+
const data = unmask.replace(new RegExp(banned, 'g'), '');
|
175
|
+
if (Assert.isNullOrEmpty(data)) {
|
176
|
+
this.value = previousValue;
|
177
|
+
input.setSelectionRange(selectionStart, selectionStart);
|
178
|
+
return;
|
179
|
+
}
|
180
|
+
if (!banned || !banned.test(data)) {
|
181
|
+
let nextValue = previousValue;
|
182
|
+
if (selectionStart < selectionEnd) {
|
183
|
+
const startValue = reverseCharIndexes.find(v => v <= selectionStart - 1);
|
184
|
+
const endValue = reverseCharIndexes.find(v => v <= selectionEnd - 1);
|
185
|
+
const startInsertIndex = charIndexes.findIndex(v => v === startValue);
|
186
|
+
const endInsertIndex = charIndexes.findIndex(v => v === endValue);
|
187
|
+
const unmasked = string.unmask(previousValue, template, char);
|
188
|
+
const newValue = unmasked.substring(0, startInsertIndex + 1) + unmasked.substring(endInsertIndex + 1, previousValue.length);
|
189
|
+
nextValue = string.mask(newValue, template, char);
|
190
|
+
}
|
191
|
+
const charIndex = charIndexes.find(v => v >= selectionStart);
|
192
|
+
const insertIndex = charIndexes.findIndex(v => v === charIndex);
|
193
|
+
const unmasked = string.unmask(nextValue, template, char);
|
194
|
+
nextValue = unmasked.substring(0, insertIndex) + data + unmasked.substring(insertIndex, previousValue.length);
|
195
|
+
this.value = string.mask(nextValue, template, char);
|
196
|
+
const index = charIndexes[insertIndex + data.length] || this.value.search(chars) || this.value.length;
|
197
|
+
input.setSelectionRange(index, index);
|
198
|
+
}
|
199
|
+
});
|
200
|
+
this.value = previousValue;
|
201
|
+
input.setSelectionRange(selectionStart, selectionStart);
|
202
|
+
return;
|
203
|
+
}
|
204
|
+
catch (e) {
|
205
|
+
this.value = previousValue;
|
206
|
+
input.setSelectionRange(selectionStart, selectionStart);
|
207
|
+
return;
|
208
|
+
}
|
209
|
+
}
|
210
|
+
if (e.inputType === 'deleteContentBackward' || e.inputType === 'deleteByCut') {
|
211
|
+
const startValue = reverseCharIndexes.find(v => v <= selectionStart - 1);
|
212
|
+
const endValue = reverseCharIndexes.find(v => v <= selectionEnd - 1);
|
213
|
+
const startInsertIndex = charIndexes.findIndex(v => v === startValue);
|
214
|
+
const endInsertIndex = charIndexes.findIndex(v => v === endValue);
|
215
|
+
const unmasked = string.unmask(previousValue, template, char);
|
216
|
+
if (startInsertIndex < endInsertIndex) {
|
217
|
+
const newValue = unmasked.substring(0, startInsertIndex + 1) + unmasked.substring(endInsertIndex + 1, previousValue.length);
|
218
|
+
this.value = string.mask(newValue, template, char);
|
219
|
+
newValue && startInsertIndex > -1
|
220
|
+
? input.setSelectionRange(previousCharIndex + 1, previousCharIndex + 1)
|
221
|
+
: input.setSelectionRange(previousCharIndex, previousCharIndex);
|
222
|
+
}
|
223
|
+
else {
|
224
|
+
const newValue = unmasked.substring(0, startInsertIndex) + unmasked.substring(endInsertIndex + 1, previousValue.length);
|
225
|
+
this.value = string.mask(newValue, template, char);
|
226
|
+
input.setSelectionRange(previousCharIndex, previousCharIndex);
|
227
|
+
}
|
228
|
+
return;
|
229
|
+
}
|
230
|
+
if (e.inputType === 'deleteContentForward') {
|
231
|
+
const charIndex = charIndexes.find(v => v >= selectionStart);
|
232
|
+
const insertIndex = charIndexes.findIndex(v => v === charIndex);
|
233
|
+
const unmasked = string.unmask(previousValue, template, char);
|
234
|
+
const newValue = unmasked.substring(0, insertIndex) + unmasked.substring(insertIndex + 1, previousValue.length);
|
235
|
+
this.value = string.mask(newValue, template, char);
|
236
|
+
input.setSelectionRange(selectionStart, selectionStart);
|
237
|
+
return;
|
238
|
+
}
|
239
|
+
//Abort if auxiliary key is pressed.
|
240
|
+
if (e.altKey || e.ctrlKey || e.metaKey) {
|
241
|
+
return;
|
242
|
+
}
|
243
|
+
//Abort if disallowed character
|
244
|
+
if (!e.data) {
|
245
|
+
if (e.type === 'input' && !e.inputType) {
|
246
|
+
const { value } = e.target;
|
247
|
+
const charIndex = charIndexes.find(v => v >= selectionStart);
|
248
|
+
const insertIndex = charIndexes.findIndex(v => v === charIndex);
|
249
|
+
const unmasked = string.unmask(value, template, char);
|
250
|
+
const allowed = value.replace(new RegExp(banned, 'g'), '');
|
251
|
+
const nextValue = unmasked.substring(0, insertIndex) + allowed;
|
252
|
+
const index = charIndexes.find(v => v > charIndex);
|
253
|
+
const patternIndex = charIndexes.findIndex(v => v >= index);
|
254
|
+
const validationIndex = patternIndex < 0 ? charIndexes.length - 1 : patternIndex - 1;
|
255
|
+
this.value = string.mask(nextValue, template, char);
|
256
|
+
this.validate(nextValue, patterns[validationIndex]);
|
257
|
+
}
|
258
|
+
else {
|
259
|
+
this.value = previousValue;
|
260
|
+
input.setSelectionRange(selectionStart, selectionStart);
|
261
|
+
}
|
262
|
+
return;
|
263
|
+
}
|
264
|
+
//Append
|
265
|
+
if (chars.test(previousValue.charAt(selectionStart)) ||
|
266
|
+
selectionStart === template.length) {
|
267
|
+
const unmasked = string.unmask(previousValue, template, char);
|
268
|
+
this.value = string.mask(unmasked + e.data, template, char);
|
269
|
+
const charIndex = this.value.search(chars);
|
270
|
+
const index = charIndex < 0 ? template.length : charIndex;
|
271
|
+
input.setSelectionRange(index, index);
|
272
|
+
const patternIndex = charIndexes.findIndex(v => v >= index);
|
273
|
+
const validationIndex = patternIndex < 0 ? charIndexes.length - 1 : patternIndex - 1;
|
274
|
+
this.validate(e.data, patterns[validationIndex]);
|
275
|
+
}
|
276
|
+
//Insert
|
277
|
+
else {
|
278
|
+
let nextValue = previousValue;
|
279
|
+
if (selectionStart < selectionEnd) {
|
280
|
+
const startValue = reverseCharIndexes.find(v => v <= selectionStart - 1);
|
281
|
+
const endValue = reverseCharIndexes.find(v => v <= selectionEnd - 1);
|
282
|
+
const startInsertIndex = charIndexes.findIndex(v => v === startValue);
|
283
|
+
const endInsertIndex = charIndexes.findIndex(v => v === endValue);
|
284
|
+
const unmasked = string.unmask(previousValue, template, char);
|
285
|
+
const newValue = unmasked.substring(0, startInsertIndex + 1) + unmasked.substring(endInsertIndex + 1, previousValue.length);
|
286
|
+
nextValue = string.mask(newValue, template, char);
|
287
|
+
}
|
288
|
+
const charIndex = charIndexes.find(v => v >= selectionStart);
|
289
|
+
const insertIndex = charIndexes.findIndex(v => v === charIndex);
|
290
|
+
const unmasked = string.unmask(nextValue, template, char);
|
291
|
+
nextValue = unmasked.substring(0, insertIndex) + e.data + unmasked.substring(insertIndex, previousValue.length);
|
292
|
+
const index = charIndexes.find(v => v > charIndex);
|
293
|
+
this.value = string.mask(nextValue, template, char);
|
294
|
+
input.setSelectionRange(index, index);
|
295
|
+
const patternIndex = charIndexes.findIndex(v => v >= index);
|
296
|
+
const validationIndex = patternIndex < 0 ? charIndexes.length - 1 : patternIndex - 1;
|
297
|
+
this.validate(e.data, patterns[validationIndex]);
|
298
|
+
}
|
299
|
+
}
|
300
|
+
validate(data, pattern) {
|
301
|
+
const { previousValue, input, value, selectionStart } = this;
|
302
|
+
if (Assert.exists(pattern) &&
|
303
|
+
!(pattern.test(data) || (/\(\?[!<=]/.test(pattern.toString()) && pattern.test(value)))) {
|
304
|
+
this.value = previousValue;
|
305
|
+
input.setSelectionRange(selectionStart, selectionStart);
|
306
|
+
}
|
307
|
+
}
|
308
|
+
componentWillLoad() {
|
309
|
+
this.input = document.getElementById(this.for);
|
310
|
+
if (Assert.exists(this.input)) {
|
311
|
+
this.input.addEventListener('focus', this.handleFocus);
|
312
|
+
this.input.addEventListener('blur', this.handleBlur);
|
313
|
+
this.input.addEventListener('keydown', this.handleKeyDown);
|
314
|
+
this.input.addEventListener('input', this.handleInput);
|
315
|
+
this.input.addEventListener('ku4-mask-input', this.handleInput);
|
316
|
+
this.input.addEventListener('touchstart', this.handleTouchStart, { passive: true });
|
317
|
+
}
|
318
|
+
else {
|
319
|
+
// eslint-disable-next-line no-console
|
320
|
+
console.error('ku4-mask must have a valid `for` referencing target field `id`.');
|
321
|
+
}
|
322
|
+
}
|
323
|
+
disconnectedCallback() {
|
324
|
+
if (this.input && this.input.removeEventListener) {
|
325
|
+
this.input.removeEventListener('focus', this.handleFocus);
|
326
|
+
this.input.removeEventListener('blur', this.handleBlur);
|
327
|
+
this.input.removeEventListener('keydown', this.handleKeyDown);
|
328
|
+
this.input.removeEventListener('input', this.handleInput);
|
329
|
+
this.input.removeEventListener('touchstart', this.handleTouchStart);
|
330
|
+
}
|
331
|
+
}
|
332
|
+
render() {
|
333
|
+
return h("slot", null);
|
334
|
+
}
|
335
|
+
static get is() { return "ku4-mask"; }
|
336
|
+
static get encapsulation() { return "shadow"; }
|
337
|
+
static get originalStyleUrls() { return {
|
338
|
+
"$": ["ku4-mask.scss"]
|
339
|
+
}; }
|
340
|
+
static get styleUrls() { return {
|
341
|
+
"$": ["ku4-mask.css"]
|
342
|
+
}; }
|
343
|
+
static get properties() { return {
|
344
|
+
"for": {
|
345
|
+
"type": "string",
|
346
|
+
"mutable": false,
|
347
|
+
"complexType": {
|
348
|
+
"original": "string",
|
349
|
+
"resolved": "string",
|
350
|
+
"references": {}
|
351
|
+
},
|
352
|
+
"required": false,
|
353
|
+
"optional": false,
|
354
|
+
"docs": {
|
355
|
+
"tags": [],
|
356
|
+
"text": "Mask for input having id of value"
|
357
|
+
},
|
358
|
+
"attribute": "for",
|
359
|
+
"reflect": false
|
360
|
+
},
|
361
|
+
"template": {
|
362
|
+
"type": "string",
|
363
|
+
"mutable": false,
|
364
|
+
"complexType": {
|
365
|
+
"original": "string",
|
366
|
+
"resolved": "string",
|
367
|
+
"references": {}
|
368
|
+
},
|
369
|
+
"required": false,
|
370
|
+
"optional": false,
|
371
|
+
"docs": {
|
372
|
+
"tags": [],
|
373
|
+
"text": "Mask template"
|
374
|
+
},
|
375
|
+
"attribute": "template",
|
376
|
+
"reflect": false,
|
377
|
+
"defaultValue": "''"
|
378
|
+
},
|
379
|
+
"ban": {
|
380
|
+
"type": "string",
|
381
|
+
"mutable": false,
|
382
|
+
"complexType": {
|
383
|
+
"original": "string",
|
384
|
+
"resolved": "string",
|
385
|
+
"references": {}
|
386
|
+
},
|
387
|
+
"required": false,
|
388
|
+
"optional": false,
|
389
|
+
"docs": {
|
390
|
+
"tags": [],
|
391
|
+
"text": "A regex of characters to ban from\nentry. A user will not be able to input\nany character in this set of characters.\nE.g. ban=\"[()-]\" will not allow a user to\ninput (, ), or - into the target input."
|
392
|
+
},
|
393
|
+
"attribute": "ban",
|
394
|
+
"reflect": false,
|
395
|
+
"defaultValue": "''"
|
396
|
+
},
|
397
|
+
"pattern": {
|
398
|
+
"type": "string",
|
399
|
+
"mutable": false,
|
400
|
+
"complexType": {
|
401
|
+
"original": "string",
|
402
|
+
"resolved": "string",
|
403
|
+
"references": {}
|
404
|
+
},
|
405
|
+
"required": false,
|
406
|
+
"optional": false,
|
407
|
+
"docs": {
|
408
|
+
"tags": [],
|
409
|
+
"text": "A test pattern for the mask to allow or\ndisallow characters at targeted points\nin the input. The pattern is a character\nseparated value of regular expressions\nwhere the first character denotes the\ncharacter separator at each subsequent\nvalue is a regular expression for the\ncharacter at that indicated index.\nE.g. `pattern=\",[345],,,[^abc]\"` would mean\nthat \",\" is the separator and that the\nfirst character must be a 3, 4, or 5, and\nthe fourth character cannot be an a, b or c."
|
410
|
+
},
|
411
|
+
"attribute": "pattern",
|
412
|
+
"reflect": false,
|
413
|
+
"defaultValue": "''"
|
414
|
+
},
|
415
|
+
"char": {
|
416
|
+
"type": "string",
|
417
|
+
"mutable": false,
|
418
|
+
"complexType": {
|
419
|
+
"original": "string",
|
420
|
+
"resolved": "string",
|
421
|
+
"references": {}
|
422
|
+
},
|
423
|
+
"required": false,
|
424
|
+
"optional": false,
|
425
|
+
"docs": {
|
426
|
+
"tags": [],
|
427
|
+
"text": "Mask Character"
|
428
|
+
},
|
429
|
+
"attribute": "char",
|
430
|
+
"reflect": false,
|
431
|
+
"defaultValue": "'_'"
|
432
|
+
},
|
433
|
+
"hidden": {
|
434
|
+
"type": "boolean",
|
435
|
+
"mutable": false,
|
436
|
+
"complexType": {
|
437
|
+
"original": "boolean",
|
438
|
+
"resolved": "boolean",
|
439
|
+
"references": {}
|
440
|
+
},
|
441
|
+
"required": false,
|
442
|
+
"optional": false,
|
443
|
+
"docs": {
|
444
|
+
"tags": [],
|
445
|
+
"text": "Hide mask"
|
446
|
+
},
|
447
|
+
"attribute": "hidden",
|
448
|
+
"reflect": false,
|
449
|
+
"defaultValue": "false"
|
450
|
+
}
|
451
|
+
}; }
|
452
|
+
static get watchers() { return [{
|
453
|
+
"propName": "template",
|
454
|
+
"methodName": "templateHandler"
|
455
|
+
}, {
|
456
|
+
"propName": "char",
|
457
|
+
"methodName": "charHandler"
|
458
|
+
}]; }
|
459
|
+
}
|
@@ -0,0 +1,85 @@
|
|
1
|
+
@keyframes ku4-modal-content-enter {
|
2
|
+
0% {
|
3
|
+
transform: var(--ku4-modal-content-animation-start-transform, scale(0.5));
|
4
|
+
opacity: var(--ku4-modal-content-animation-start-opacity, 0);
|
5
|
+
}
|
6
|
+
50% {
|
7
|
+
transform: var(--ku4-modal-content-animation-mid-transform, scale(1.2));
|
8
|
+
opacity: var(--ku4-modal-content-animation-mid-opacity, 0.8);
|
9
|
+
}
|
10
|
+
100% {
|
11
|
+
transform: var(--ku4-modal-content-animation-end-transform, scale(1));
|
12
|
+
opacity: var(--ku4-modal-content-animation-end-opacity, 1);
|
13
|
+
}
|
14
|
+
}
|
15
|
+
@keyframes ku4-modal-overlay-enter {
|
16
|
+
0% {
|
17
|
+
transform: var(--ku4-modal-overlay-animation-start-transform, none);
|
18
|
+
opacity: var(--ku4-modal-overlay-animation-start-opacity, 0);
|
19
|
+
}
|
20
|
+
50% {
|
21
|
+
transform: var(--ku4-modal-overlay-animation-mid-transform, none);
|
22
|
+
opacity: var(--ku4-modal-overlay-animation-mid-opacity, 0.35);
|
23
|
+
}
|
24
|
+
100% {
|
25
|
+
transform: var(--ku4-modal-overlay-animation-end-transform, none);
|
26
|
+
opacity: var(--ku4-modal-overlay-animation-end-opacity, 0.4);
|
27
|
+
}
|
28
|
+
}
|
29
|
+
:host {
|
30
|
+
position: fixed;
|
31
|
+
display: none;
|
32
|
+
top: 0;
|
33
|
+
left: 0;
|
34
|
+
width: 100vw;
|
35
|
+
height: 100vh;
|
36
|
+
justify-content: center;
|
37
|
+
align-items: center;
|
38
|
+
background: transparent;
|
39
|
+
overflow: auto;
|
40
|
+
transform-style: var(--ku4-modal-transform-style, initial);
|
41
|
+
}
|
42
|
+
|
43
|
+
.ku4-modal-content {
|
44
|
+
position: relative;
|
45
|
+
top: 0;
|
46
|
+
left: 0;
|
47
|
+
}
|
48
|
+
|
49
|
+
.ku4-modal-overlay {
|
50
|
+
position: fixed;
|
51
|
+
display: flex;
|
52
|
+
top: 0;
|
53
|
+
left: 0;
|
54
|
+
width: 100%;
|
55
|
+
height: 100%;
|
56
|
+
opacity: 0;
|
57
|
+
background: var(--ku4-modal-overlay-background, #000);
|
58
|
+
}
|
59
|
+
|
60
|
+
:host([visible]) {
|
61
|
+
display: flex;
|
62
|
+
z-index: var(--ku4-modal-z-index, 5);
|
63
|
+
}
|
64
|
+
|
65
|
+
:host([visible]) .ku4-modal-content {
|
66
|
+
animation-name: ku4-modal-content-enter;
|
67
|
+
animation-duration: var(--ku4-modal-content-animation-duration, 0.4s);
|
68
|
+
animation-timing-function: var(--ku4-modal-content-animation-timing-function, ease);
|
69
|
+
transform: var(--ku4-modal-content-transform, none);
|
70
|
+
opacity: var(--ku4-modal-content-opacity, 1);
|
71
|
+
z-index: calc(var(--ku4-modal-z-index, 5) + 1);
|
72
|
+
}
|
73
|
+
|
74
|
+
:host([visible]) .ku4-modal-overlay {
|
75
|
+
animation-name: ku4-modal-overlay-enter;
|
76
|
+
animation-duration: var(--ku4-modal-overlay-animation-duration, 0.4s);
|
77
|
+
animation-timing-function: var(--ku4-modal-overlay-animation-timing-function, ease);
|
78
|
+
transform: var(--ku4-modal-overlay-transform, none);
|
79
|
+
opacity: var(--ku4-modal-overlay-opacity, 0.4);
|
80
|
+
z-index: calc(var(--ku4-modal-z-index, 5));
|
81
|
+
}
|
82
|
+
|
83
|
+
:host([visible=false]) {
|
84
|
+
display: none;
|
85
|
+
}
|