ku4web-components 6.4.69 → 6.4.74

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.
Files changed (212) hide show
  1. package/dist/cjs/app-globals-3a1e7e63.js +5 -0
  2. package/dist/cjs/css-shim-3bfdba4f.js +6 -0
  3. package/dist/cjs/dom-8ac1ad03.js +75 -0
  4. package/dist/cjs/index-51b7a610.js +14 -0
  5. package/dist/cjs/index-6d979ba1.js +10 -0
  6. package/dist/cjs/index-a015c727.js +3067 -0
  7. package/dist/cjs/{index-e2a47c3c.js → index-c25cf44f.js} +1 -1
  8. package/dist/cjs/ku4-carousel-controls.cjs.entry.js +2 -2
  9. package/dist/cjs/ku4-carousel-slide.cjs.entry.js +1 -1
  10. package/dist/cjs/ku4-carousel.cjs.entry.js +4 -4
  11. package/dist/cjs/ku4-col.cjs.entry.js +1 -1
  12. package/dist/cjs/ku4-drawer.cjs.entry.js +1 -1
  13. package/dist/cjs/ku4-feature.cjs.entry.js +2 -2
  14. package/dist/cjs/ku4-focus-trap.cjs.entry.js +26 -26
  15. package/dist/cjs/ku4-form.cjs.entry.js +3 -3
  16. package/dist/cjs/ku4-grid.cjs.entry.js +1 -1
  17. package/dist/cjs/ku4-label.cjs.entry.js +2 -2
  18. package/dist/cjs/ku4-mask.cjs.entry.js +2 -2
  19. package/dist/cjs/ku4-modal.cjs.entry.js +3 -3
  20. package/dist/cjs/ku4-panel.cjs.entry.js +1 -1
  21. package/dist/cjs/ku4-preview.cjs.entry.js +43 -14
  22. package/dist/cjs/ku4-tab-list.cjs.entry.js +6 -6
  23. package/dist/cjs/ku4-tab-panel.cjs.entry.js +3 -3
  24. package/dist/cjs/ku4-tab.cjs.entry.js +3 -3
  25. package/dist/cjs/ku4-table.cjs.entry.js +1 -1
  26. package/dist/cjs/ku4-tooltip.cjs.entry.js +2 -2
  27. package/dist/cjs/ku4-validation.cjs.entry.js +2 -2
  28. package/dist/cjs/ku4web-components.cjs.js +98 -7
  29. package/dist/cjs/loader.cjs.js +18 -2
  30. package/dist/cjs/uid-3dd31175.js +11 -0
  31. package/dist/collection/capabilities/a11y/aria.js +26 -0
  32. package/dist/collection/capabilities/angular/index.js +24 -0
  33. package/dist/collection/capabilities/decorators/deprecated.js +20 -0
  34. package/dist/collection/capabilities/decorators/index.js +3 -0
  35. package/dist/collection/capabilities/decorators/memoize.js +7 -0
  36. package/dist/collection/capabilities/dom/isFocusable.js +7 -0
  37. package/dist/collection/capabilities/dom/queryFocusable.js +2 -0
  38. package/dist/collection/capabilities/identity/uid.js +6 -0
  39. package/dist/collection/capabilities/mask/index.js +5 -0
  40. package/dist/collection/capabilities/mask/patterns/date.js +40 -0
  41. package/dist/collection/capabilities/mask/patterns/index.js +7 -0
  42. package/dist/collection/capabilities/react/index.js +25 -0
  43. package/dist/collection/capabilities/testing/html.js +14 -0
  44. package/dist/collection/capabilities/testing/styles.js +14 -0
  45. package/dist/collection/capabilities/vue/index.js +28 -0
  46. package/dist/collection/capabilities/vue3/index.js +26 -0
  47. package/dist/collection/collection-manifest.json +31 -0
  48. package/dist/collection/components/ku4-carousel/ku4-carousel.css +221 -0
  49. package/dist/collection/components/ku4-carousel/ku4-carousel.js +360 -0
  50. package/dist/collection/components/ku4-carousel-controls/ku4-carousel-controls.css +32 -0
  51. package/dist/collection/components/ku4-carousel-controls/ku4-carousel-controls.js +106 -0
  52. package/dist/collection/components/ku4-carousel-slide/ku4-carousel-slide.css +3 -0
  53. package/dist/collection/components/ku4-carousel-slide/ku4-carousel-slide.js +140 -0
  54. package/dist/collection/components/ku4-col/ku4-col.css +601 -0
  55. package/dist/collection/components/ku4-col/ku4-col.js +288 -0
  56. package/dist/collection/components/ku4-drawer/ku4-drawer.css +56 -0
  57. package/dist/collection/components/ku4-drawer/ku4-drawer.js +163 -0
  58. package/dist/collection/components/ku4-feature/ku4-feature.js +70 -0
  59. package/dist/collection/components/ku4-focus-trap/ku4-focus-trap.css +3 -0
  60. package/dist/collection/components/ku4-focus-trap/ku4-focus-trap.js +441 -0
  61. package/dist/collection/components/ku4-form/ku4-form.js +202 -0
  62. package/dist/collection/components/ku4-grid/ku4-grid.css +751 -0
  63. package/dist/collection/components/ku4-grid/ku4-grid.js +408 -0
  64. package/dist/collection/components/ku4-label/ku4-label.css +36 -0
  65. package/dist/collection/components/ku4-label/ku4-label.js +115 -0
  66. package/dist/collection/components/ku4-mask/ku4-mask.css +3 -0
  67. package/dist/collection/components/ku4-mask/ku4-mask.js +437 -0
  68. package/dist/collection/components/ku4-modal/ku4-modal.css +85 -0
  69. package/dist/collection/components/ku4-modal/ku4-modal.js +186 -0
  70. package/dist/collection/components/ku4-panel/ku4-panel.css +14 -0
  71. package/dist/collection/components/ku4-panel/ku4-panel.js +119 -0
  72. package/dist/collection/components/ku4-preview/ku4-preview.css +23 -0
  73. package/dist/collection/components/ku4-preview/ku4-preview.js +266 -0
  74. package/dist/collection/components/ku4-tab/ku4-tab.css +82 -0
  75. package/dist/collection/components/ku4-tab/ku4-tab.js +191 -0
  76. package/dist/collection/components/ku4-tab-list/ku4-tab-list.css +6 -0
  77. package/dist/collection/components/ku4-tab-list/ku4-tab-list.js +118 -0
  78. package/dist/collection/components/ku4-tab-panel/ku4-tab-panel.css +26 -0
  79. package/dist/collection/components/ku4-tab-panel/ku4-tab-panel.js +166 -0
  80. package/dist/collection/components/ku4-table/ku4-table.css +116 -0
  81. package/dist/collection/components/ku4-table/ku4-table.js +120 -0
  82. package/dist/collection/components/ku4-tooltip/ku4-tooltip.css +56 -0
  83. package/dist/collection/components/ku4-tooltip/ku4-tooltip.js +274 -0
  84. package/dist/collection/components/ku4-validation/ku4-validation.css +19 -0
  85. package/dist/collection/components/ku4-validation/ku4-validation.js +364 -0
  86. package/dist/collection/components/ku4-validation/validate.js +14 -0
  87. package/dist/collection/index.js +1 -0
  88. package/dist/collection/security.js +27 -0
  89. package/dist/esm/app-globals-0f993ce5.js +3 -0
  90. package/dist/esm/css-shim-20dbffa5.js +4 -0
  91. package/dist/esm/dom-c5ed0ba5.js +73 -0
  92. package/dist/esm/{index-a39e08fb.js → index-12aee218.js} +1 -1
  93. package/dist/esm/index-40000e6d.js +3 -0
  94. package/dist/esm/index-80439f22.js +3031 -0
  95. package/dist/esm/index-89916128.js +3 -0
  96. package/dist/esm/ku4-carousel-controls.entry.js +2 -2
  97. package/dist/esm/ku4-carousel-slide.entry.js +1 -1
  98. package/dist/esm/ku4-carousel.entry.js +4 -4
  99. package/dist/esm/ku4-col.entry.js +1 -1
  100. package/dist/esm/ku4-drawer.entry.js +1 -1
  101. package/dist/esm/ku4-feature.entry.js +2 -2
  102. package/dist/esm/ku4-focus-trap.entry.js +3 -3
  103. package/dist/esm/ku4-form.entry.js +3 -3
  104. package/dist/esm/ku4-grid.entry.js +1 -1
  105. package/dist/esm/ku4-label.entry.js +2 -2
  106. package/dist/esm/ku4-mask.entry.js +2 -2
  107. package/dist/esm/ku4-modal.entry.js +3 -3
  108. package/dist/esm/ku4-panel.entry.js +1 -1
  109. package/dist/esm/ku4-preview.entry.js +35 -6
  110. package/dist/esm/ku4-tab-list.entry.js +6 -6
  111. package/dist/esm/ku4-tab-panel.entry.js +3 -3
  112. package/dist/esm/ku4-tab.entry.js +3 -3
  113. package/dist/esm/ku4-table.entry.js +1 -1
  114. package/dist/esm/ku4-tooltip.entry.js +2 -2
  115. package/dist/esm/ku4-validation.entry.js +2 -2
  116. package/dist/esm/ku4web-components.js +98 -7
  117. package/dist/esm/loader.js +18 -2
  118. package/dist/esm/uid-5355229f.js +9 -0
  119. package/dist/esm-es5/{index-a39e08fb.js → index-12aee218.js} +1 -1
  120. package/dist/esm-es5/ku4-carousel.entry.js +1 -1
  121. package/dist/esm-es5/ku4-focus-trap.entry.js +1 -1
  122. package/dist/esm-es5/ku4-form.entry.js +1 -1
  123. package/dist/esm-es5/ku4-modal.entry.js +1 -1
  124. package/dist/esm-es5/ku4-preview.entry.js +1 -1
  125. package/dist/esm-es5/ku4-tab-list.entry.js +1 -1
  126. package/dist/esm-es5/ku4web-components.js +1 -1
  127. package/dist/esm-es5/loader.js +1 -1
  128. package/dist/index.js +1 -1
  129. package/dist/ku4web-components/app-globals-0f993ce5.js +3 -0
  130. package/dist/ku4web-components/app-globals-497eb362.system.js +1 -0
  131. package/dist/ku4web-components/css-shim-20dbffa5.js +4 -0
  132. package/dist/ku4web-components/css-shim-856c55de.system.js +1 -0
  133. package/dist/ku4web-components/dom-938307ec.system.js +21 -0
  134. package/dist/ku4web-components/dom-c5ed0ba5.js +73 -0
  135. package/dist/ku4web-components/index-3127d7f7.system.js +1 -0
  136. package/dist/ku4web-components/index-40000e6d.js +3 -0
  137. package/dist/ku4web-components/index-79de9846.system.js +1 -0
  138. package/dist/ku4web-components/index-80439f22.js +3031 -0
  139. package/dist/ku4web-components/index-89916128.js +3 -0
  140. package/dist/ku4web-components/index-c39e9986.system.js +1 -0
  141. package/dist/ku4web-components/index.esm.js +1 -0
  142. package/dist/ku4web-components/index.system.js +1 -0
  143. package/dist/ku4web-components/ku4-carousel-controls.entry.js +83 -0
  144. package/dist/ku4web-components/ku4-carousel-controls.system.entry.js +1 -0
  145. package/dist/ku4web-components/ku4-carousel-slide.entry.js +47 -0
  146. package/dist/ku4web-components/ku4-carousel-slide.system.entry.js +1 -0
  147. package/dist/ku4web-components/ku4-carousel.entry.js +166 -0
  148. package/dist/ku4web-components/ku4-carousel.system.entry.js +1 -0
  149. package/dist/ku4web-components/ku4-col.entry.js +75 -0
  150. package/dist/ku4web-components/ku4-col.system.entry.js +1 -0
  151. package/dist/ku4web-components/ku4-drawer.entry.js +35 -0
  152. package/dist/ku4web-components/ku4-drawer.system.entry.js +1 -0
  153. package/dist/ku4web-components/ku4-feature.entry.js +29 -0
  154. package/dist/ku4web-components/ku4-feature.system.entry.js +1 -0
  155. package/dist/ku4web-components/ku4-focus-trap.entry.js +323 -0
  156. package/dist/ku4web-components/ku4-focus-trap.system.entry.js +1 -0
  157. package/dist/ku4web-components/ku4-form.entry.js +105 -0
  158. package/dist/ku4web-components/ku4-form.system.entry.js +1 -0
  159. package/dist/ku4web-components/ku4-grid.entry.js +108 -0
  160. package/dist/ku4web-components/ku4-grid.system.entry.js +1 -0
  161. package/dist/ku4web-components/ku4-label.entry.js +70 -0
  162. package/dist/ku4web-components/ku4-label.system.entry.js +1 -0
  163. package/dist/ku4web-components/ku4-mask.entry.js +321 -0
  164. package/dist/ku4web-components/ku4-mask.system.entry.js +1 -0
  165. package/dist/ku4web-components/ku4-modal.entry.js +71 -0
  166. package/dist/ku4web-components/ku4-modal.system.entry.js +1 -0
  167. package/dist/ku4web-components/ku4-panel.entry.js +49 -0
  168. package/dist/ku4web-components/ku4-panel.system.entry.js +1 -0
  169. package/dist/ku4web-components/ku4-preview.entry.js +128 -0
  170. package/dist/ku4web-components/ku4-preview.system.entry.js +1 -0
  171. package/dist/ku4web-components/ku4-tab-list.entry.js +76 -0
  172. package/dist/ku4web-components/ku4-tab-list.system.entry.js +1 -0
  173. package/dist/ku4web-components/ku4-tab-panel.entry.js +72 -0
  174. package/dist/ku4web-components/ku4-tab-panel.system.entry.js +1 -0
  175. package/dist/ku4web-components/ku4-tab.entry.js +63 -0
  176. package/dist/ku4web-components/ku4-tab.system.entry.js +1 -0
  177. package/dist/ku4web-components/ku4-table.entry.js +79 -0
  178. package/dist/ku4web-components/ku4-table.system.entry.js +1 -0
  179. package/dist/ku4web-components/ku4-tooltip.entry.js +120 -0
  180. package/dist/ku4web-components/ku4-tooltip.system.entry.js +1 -0
  181. package/dist/ku4web-components/ku4-validation.entry.js +162 -0
  182. package/dist/ku4web-components/ku4-validation.system.entry.js +1 -0
  183. package/dist/ku4web-components/ku4web-components.css +299 -1
  184. package/dist/ku4web-components/ku4web-components.esm.js +125 -1
  185. package/dist/ku4web-components/ku4web-components.js +1 -1
  186. package/dist/ku4web-components/ku4web-components.system.js +1 -0
  187. package/dist/ku4web-components/p-0e3f81f0.system.entry.js +1 -0
  188. package/dist/ku4web-components/p-2c017d37.system.js +1 -1
  189. package/dist/ku4web-components/{p-85ce378f.system.entry.js → p-2d668be8.system.entry.js} +1 -1
  190. package/dist/ku4web-components/{p-ebc796ca.entry.js → p-34e1be7b.entry.js} +1 -1
  191. package/dist/ku4web-components/{p-b313124a.entry.js → p-38a24a64.entry.js} +1 -1
  192. package/dist/ku4web-components/{p-08ec498e.js → p-3d59c1fe.js} +1 -1
  193. package/dist/ku4web-components/p-4b272a58.entry.js +1 -0
  194. package/dist/ku4web-components/{p-e1964f6b.system.entry.js → p-5cab8007.system.entry.js} +1 -1
  195. package/dist/ku4web-components/{p-43683726.system.entry.js → p-6f236a8a.system.entry.js} +1 -1
  196. package/dist/ku4web-components/{p-31fd55e7.system.entry.js → p-73d78335.system.entry.js} +1 -1
  197. package/dist/ku4web-components/{p-52147373.system.js → p-86284ed4.system.js} +1 -1
  198. package/dist/ku4web-components/{p-479439e6.entry.js → p-90a37025.entry.js} +1 -1
  199. package/dist/ku4web-components/{p-54c18ac5.system.entry.js → p-9b46e89b.system.entry.js} +1 -1
  200. package/dist/ku4web-components/{p-6e505024.entry.js → p-a2805805.entry.js} +1 -1
  201. package/dist/ku4web-components/p-f311c0be.entry.js +1 -0
  202. package/dist/ku4web-components/shadow-css-8c625855.js +388 -0
  203. package/dist/ku4web-components/shadow-css-d573707f.system.js +13 -0
  204. package/dist/ku4web-components/uid-5355229f.js +9 -0
  205. package/dist/ku4web-components/uid-93975202.system.js +1 -0
  206. package/dist/types/components/ku4-preview/ku4-preview.d.ts +5 -0
  207. package/dist/types/components/ku4-tab-list/ku4-tab-list.d.ts +2 -2
  208. package/dist/types/components.d.ts +8 -0
  209. package/package.json +20 -20
  210. package/dist/ku4web-components/p-05a75a47.entry.js +0 -1
  211. package/dist/ku4web-components/p-b625e0a4.entry.js +0 -1
  212. package/dist/ku4web-components/p-fd02ffa2.system.entry.js +0 -1
@@ -0,0 +1,437 @@
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
+ this.value = string.mask(string.unmask(this.value, template, char), template, char);
117
+ wait(0).then(() => {
118
+ const index = input.value.search(chars);
119
+ const selection = index < 0 ? input.value.length : index;
120
+ this.input.setSelectionRange(index < 0 && !touchStart ? 0 : selection, selection);
121
+ this.touchStart = false;
122
+ });
123
+ }
124
+ handleBlur() {
125
+ const { template, char } = this;
126
+ if (Assert.isEmpty(string.unmask(this.value, template, char))) {
127
+ this.value = '';
128
+ }
129
+ }
130
+ handleKeyDown(e) {
131
+ // Abort if the browser is IE11
132
+ // @ts-ignore - Leveraging documentMode to determine unsupported browser
133
+ if (window.document.documentMode) {
134
+ return;
135
+ }
136
+ const { banned, hidden, template, char } = this;
137
+ if (e.key &&
138
+ e.key.length === 1 &&
139
+ banned &&
140
+ (banned.test(e.key) &&
141
+ !(e.altKey || e.ctrlKey || e.metaKey))) {
142
+ e.preventDefault();
143
+ }
144
+ this.previousValue = hidden ? string.mask(string.unmask(e.target.value, template, char), template, char) : e.target.value;
145
+ this.selectionStart = e.target.selectionStart;
146
+ this.selectionEnd = e.target.selectionEnd;
147
+ }
148
+ handleInput(e) {
149
+ // Abort if the browser is IE11
150
+ // @ts-ignore - Leveraging documentMode to determine unsupported browser
151
+ if (window.document.documentMode) {
152
+ return;
153
+ }
154
+ const { input, template, char, chars, previousValue, banned, selectionStart, selectionEnd, previousCharIndex, patterns, charIndexes, reverseCharIndexes } = this;
155
+ if (!chars.test(this.previousValue) &&
156
+ e.inputType !== 'insertFromPaste' &&
157
+ e.inputType !== 'deleteContentBackward' &&
158
+ e.inputType !== 'deleteContentForward' &&
159
+ e.inputType !== 'deleteByCut' &&
160
+ selectionStart === selectionEnd) {
161
+ this.value = previousValue;
162
+ return;
163
+ }
164
+ if (e.inputType === 'insertFromPaste') {
165
+ try {
166
+ navigator.clipboard.readText()
167
+ .then((rawData) => {
168
+ const data = rawData.replace(new RegExp(banned, 'g'), '');
169
+ if (Assert.isNullOrEmpty(data)) {
170
+ this.value = previousValue;
171
+ input.setSelectionRange(selectionStart, selectionStart);
172
+ return;
173
+ }
174
+ if (!banned || !banned.test(data)) {
175
+ let nextValue = previousValue;
176
+ if (selectionStart < selectionEnd) {
177
+ const startValue = reverseCharIndexes.find(v => v <= selectionStart - 1);
178
+ const endValue = reverseCharIndexes.find(v => v <= selectionEnd - 1);
179
+ const startInsertIndex = charIndexes.findIndex(v => v === startValue);
180
+ const endInsertIndex = charIndexes.findIndex(v => v === endValue);
181
+ const unmasked = string.unmask(previousValue, template, char);
182
+ const newValue = unmasked.substring(0, startInsertIndex + 1) + unmasked.substring(endInsertIndex + 1, previousValue.length);
183
+ nextValue = string.mask(newValue, template, char);
184
+ }
185
+ const charIndex = charIndexes.find(v => v >= selectionStart);
186
+ const insertIndex = charIndexes.findIndex(v => v === charIndex);
187
+ const unmasked = string.unmask(nextValue, template, char);
188
+ nextValue = unmasked.substring(0, insertIndex) + data + unmasked.substring(insertIndex, previousValue.length);
189
+ this.value = string.mask(nextValue, template, char);
190
+ const index = charIndexes[insertIndex + data.length] || this.value.search(chars) || this.value.length;
191
+ input.setSelectionRange(index, index);
192
+ }
193
+ });
194
+ this.value = previousValue;
195
+ input.setSelectionRange(selectionStart, selectionStart);
196
+ return;
197
+ }
198
+ catch (e) {
199
+ this.value = previousValue;
200
+ input.setSelectionRange(selectionStart, selectionStart);
201
+ return;
202
+ }
203
+ }
204
+ if (e.inputType === 'deleteContentBackward' || e.inputType === 'deleteByCut') {
205
+ const startValue = reverseCharIndexes.find(v => v <= selectionStart - 1);
206
+ const endValue = reverseCharIndexes.find(v => v <= selectionEnd - 1);
207
+ const startInsertIndex = charIndexes.findIndex(v => v === startValue);
208
+ const endInsertIndex = charIndexes.findIndex(v => v === endValue);
209
+ const unmasked = string.unmask(previousValue, template, char);
210
+ if (startInsertIndex < endInsertIndex) {
211
+ const newValue = unmasked.substring(0, startInsertIndex + 1) + unmasked.substring(endInsertIndex + 1, previousValue.length);
212
+ this.value = string.mask(newValue, template, char);
213
+ newValue && startInsertIndex > -1
214
+ ? input.setSelectionRange(previousCharIndex + 1, previousCharIndex + 1)
215
+ : input.setSelectionRange(previousCharIndex, previousCharIndex);
216
+ }
217
+ else {
218
+ const newValue = unmasked.substring(0, startInsertIndex) + unmasked.substring(endInsertIndex + 1, previousValue.length);
219
+ this.value = string.mask(newValue, template, char);
220
+ input.setSelectionRange(previousCharIndex, previousCharIndex);
221
+ }
222
+ return;
223
+ }
224
+ if (e.inputType === 'deleteContentForward') {
225
+ const charIndex = charIndexes.find(v => v >= selectionStart);
226
+ const insertIndex = charIndexes.findIndex(v => v === charIndex);
227
+ const unmasked = string.unmask(previousValue, template, char);
228
+ const newValue = unmasked.substring(0, insertIndex) + unmasked.substring(insertIndex + 1, previousValue.length);
229
+ this.value = string.mask(newValue, template, char);
230
+ input.setSelectionRange(selectionStart, selectionStart);
231
+ return;
232
+ }
233
+ //Abort if auxiliary key is pressed.
234
+ if (e.altKey || e.ctrlKey || e.metaKey) {
235
+ return;
236
+ }
237
+ //Abort if disallowed character
238
+ if (!e.data) {
239
+ this.value = previousValue;
240
+ input.setSelectionRange(selectionStart, selectionStart);
241
+ return;
242
+ }
243
+ //Append
244
+ if (chars.test(previousValue.charAt(selectionStart)) ||
245
+ selectionStart === template.length) {
246
+ const unmasked = string.unmask(previousValue, template, char);
247
+ this.value = string.mask(unmasked + e.data, template, char);
248
+ const charIndex = this.value.search(chars);
249
+ const index = charIndex < 0 ? template.length : charIndex;
250
+ input.setSelectionRange(index, index);
251
+ const patternIndex = charIndexes.findIndex(v => v >= index);
252
+ const validationIndex = patternIndex < 0 ? charIndexes.length - 1 : patternIndex - 1;
253
+ this.validate(e.data, patterns[validationIndex]);
254
+ }
255
+ //Insert
256
+ else {
257
+ let nextValue = previousValue;
258
+ if (selectionStart < selectionEnd) {
259
+ const startValue = reverseCharIndexes.find(v => v <= selectionStart - 1);
260
+ const endValue = reverseCharIndexes.find(v => v <= selectionEnd - 1);
261
+ const startInsertIndex = charIndexes.findIndex(v => v === startValue);
262
+ const endInsertIndex = charIndexes.findIndex(v => v === endValue);
263
+ const unmasked = string.unmask(previousValue, template, char);
264
+ const newValue = unmasked.substring(0, startInsertIndex + 1) + unmasked.substring(endInsertIndex + 1, previousValue.length);
265
+ nextValue = string.mask(newValue, template, char);
266
+ }
267
+ const charIndex = charIndexes.find(v => v >= selectionStart);
268
+ const insertIndex = charIndexes.findIndex(v => v === charIndex);
269
+ const unmasked = string.unmask(nextValue, template, char);
270
+ nextValue = unmasked.substring(0, insertIndex) + e.data + unmasked.substring(insertIndex, previousValue.length);
271
+ const index = charIndexes.find(v => v > charIndex);
272
+ this.value = string.mask(nextValue, template, char);
273
+ input.setSelectionRange(index, index);
274
+ const patternIndex = charIndexes.findIndex(v => v >= index);
275
+ const validationIndex = patternIndex < 0 ? charIndexes.length - 1 : patternIndex - 1;
276
+ this.validate(e.data, patterns[validationIndex]);
277
+ }
278
+ }
279
+ validate(data, pattern) {
280
+ const { previousValue, input, value, selectionStart } = this;
281
+ if (Assert.exists(pattern) &&
282
+ !(pattern.test(data) || (/\(\?[!<=]/.test(pattern.toString()) && pattern.test(value)))) {
283
+ this.value = previousValue;
284
+ input.setSelectionRange(selectionStart, selectionStart);
285
+ }
286
+ }
287
+ componentWillLoad() {
288
+ this.input = document.getElementById(this.for);
289
+ if (Assert.exists(this.input)) {
290
+ this.input.addEventListener('focus', this.handleFocus);
291
+ this.input.addEventListener('blur', this.handleBlur);
292
+ this.input.addEventListener('keydown', this.handleKeyDown);
293
+ this.input.addEventListener('input', this.handleInput);
294
+ this.input.addEventListener('touchstart', this.handleTouchStart, { passive: true });
295
+ }
296
+ else {
297
+ // eslint-disable-next-line no-console
298
+ console.error('ku4-mask must have a valid `for` referencing target field `id`.');
299
+ }
300
+ }
301
+ disconnectedCallback() {
302
+ if (this.input && this.input.removeEventListener) {
303
+ this.input.removeEventListener('focus', this.handleFocus);
304
+ this.input.removeEventListener('blur', this.handleBlur);
305
+ this.input.removeEventListener('keydown', this.handleKeyDown);
306
+ this.input.removeEventListener('input', this.handleInput);
307
+ this.input.removeEventListener('touchstart', this.handleTouchStart);
308
+ }
309
+ }
310
+ render() {
311
+ return h("slot", null);
312
+ }
313
+ static get is() { return "ku4-mask"; }
314
+ static get encapsulation() { return "shadow"; }
315
+ static get originalStyleUrls() { return {
316
+ "$": ["ku4-mask.scss"]
317
+ }; }
318
+ static get styleUrls() { return {
319
+ "$": ["ku4-mask.css"]
320
+ }; }
321
+ static get properties() { return {
322
+ "for": {
323
+ "type": "string",
324
+ "mutable": false,
325
+ "complexType": {
326
+ "original": "string",
327
+ "resolved": "string",
328
+ "references": {}
329
+ },
330
+ "required": false,
331
+ "optional": false,
332
+ "docs": {
333
+ "tags": [],
334
+ "text": "Mask for input having id of value"
335
+ },
336
+ "attribute": "for",
337
+ "reflect": false
338
+ },
339
+ "template": {
340
+ "type": "string",
341
+ "mutable": false,
342
+ "complexType": {
343
+ "original": "string",
344
+ "resolved": "string",
345
+ "references": {}
346
+ },
347
+ "required": false,
348
+ "optional": false,
349
+ "docs": {
350
+ "tags": [],
351
+ "text": "Mask template"
352
+ },
353
+ "attribute": "template",
354
+ "reflect": false,
355
+ "defaultValue": "''"
356
+ },
357
+ "ban": {
358
+ "type": "string",
359
+ "mutable": false,
360
+ "complexType": {
361
+ "original": "string",
362
+ "resolved": "string",
363
+ "references": {}
364
+ },
365
+ "required": false,
366
+ "optional": false,
367
+ "docs": {
368
+ "tags": [],
369
+ "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."
370
+ },
371
+ "attribute": "ban",
372
+ "reflect": false,
373
+ "defaultValue": "''"
374
+ },
375
+ "pattern": {
376
+ "type": "string",
377
+ "mutable": false,
378
+ "complexType": {
379
+ "original": "string",
380
+ "resolved": "string",
381
+ "references": {}
382
+ },
383
+ "required": false,
384
+ "optional": false,
385
+ "docs": {
386
+ "tags": [],
387
+ "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."
388
+ },
389
+ "attribute": "pattern",
390
+ "reflect": false,
391
+ "defaultValue": "''"
392
+ },
393
+ "char": {
394
+ "type": "string",
395
+ "mutable": false,
396
+ "complexType": {
397
+ "original": "string",
398
+ "resolved": "string",
399
+ "references": {}
400
+ },
401
+ "required": false,
402
+ "optional": false,
403
+ "docs": {
404
+ "tags": [],
405
+ "text": "Mask Character"
406
+ },
407
+ "attribute": "char",
408
+ "reflect": false,
409
+ "defaultValue": "'_'"
410
+ },
411
+ "hidden": {
412
+ "type": "boolean",
413
+ "mutable": false,
414
+ "complexType": {
415
+ "original": "boolean",
416
+ "resolved": "boolean",
417
+ "references": {}
418
+ },
419
+ "required": false,
420
+ "optional": false,
421
+ "docs": {
422
+ "tags": [],
423
+ "text": "Hide mask"
424
+ },
425
+ "attribute": "hidden",
426
+ "reflect": false,
427
+ "defaultValue": "false"
428
+ }
429
+ }; }
430
+ static get watchers() { return [{
431
+ "propName": "template",
432
+ "methodName": "templateHandler"
433
+ }, {
434
+ "propName": "char",
435
+ "methodName": "charHandler"
436
+ }]; }
437
+ }
@@ -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
+ }