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.
Files changed (259) hide show
  1. package/angular/index.js +1 -1
  2. package/angular/index.mjs +1 -1
  3. package/dist/cjs/app-globals-3a1e7e63.js +5 -0
  4. package/dist/cjs/css-shim-f1391d35.js +6 -0
  5. package/dist/cjs/dom-5345ed9a.js +75 -0
  6. package/dist/cjs/index-065185f8.js +3093 -0
  7. package/dist/cjs/index-16f16ed9.js +14 -0
  8. package/dist/cjs/index-1a439af7.js +14 -0
  9. package/dist/cjs/index-436596bf.js +10 -0
  10. package/dist/cjs/index-49d3746b.js +10 -0
  11. package/dist/cjs/ku4-carousel-controls.cjs.entry.js +2 -2
  12. package/dist/cjs/ku4-carousel-slide.cjs.entry.js +1 -1
  13. package/dist/cjs/ku4-carousel.cjs.entry.js +3 -3
  14. package/dist/cjs/ku4-col.cjs.entry.js +1 -1
  15. package/dist/cjs/ku4-drawer.cjs.entry.js +1 -1
  16. package/dist/cjs/ku4-feature.cjs.entry.js +2 -2
  17. package/dist/cjs/ku4-focus-trap.cjs.entry.js +26 -26
  18. package/dist/cjs/ku4-form.cjs.entry.js +3 -3
  19. package/dist/cjs/ku4-grid.cjs.entry.js +1 -1
  20. package/dist/cjs/ku4-label.cjs.entry.js +2 -2
  21. package/dist/cjs/ku4-mask.cjs.entry.js +3 -3
  22. package/dist/cjs/ku4-modal.cjs.entry.js +3 -3
  23. package/dist/cjs/ku4-panel.cjs.entry.js +1 -1
  24. package/dist/cjs/ku4-preview.cjs.entry.js +43 -14
  25. package/dist/cjs/ku4-tab-list.cjs.entry.js +4 -4
  26. package/dist/cjs/ku4-tab-panel.cjs.entry.js +3 -3
  27. package/dist/cjs/ku4-tab.cjs.entry.js +3 -3
  28. package/dist/cjs/ku4-table.cjs.entry.js +1 -1
  29. package/dist/cjs/ku4-tooltip.cjs.entry.js +2 -2
  30. package/dist/cjs/ku4-validation.cjs.entry.js +2 -2
  31. package/dist/cjs/ku4web-components.cjs.js +101 -6
  32. package/dist/cjs/loader.cjs.js +17 -1
  33. package/dist/cjs/{uid-d533dbb1.js → uid-7f3954c8.js} +1 -1
  34. package/dist/cjs/uid-a1348ea5.js +11 -0
  35. package/dist/collection/capabilities/a11y/aria.js +26 -0
  36. package/dist/collection/capabilities/angular/index.js +24 -0
  37. package/dist/collection/capabilities/decorators/deprecated.js +20 -0
  38. package/dist/collection/capabilities/decorators/index.js +3 -0
  39. package/dist/collection/capabilities/decorators/memoize.js +7 -0
  40. package/dist/collection/capabilities/dom/isFocusable.js +7 -0
  41. package/dist/collection/capabilities/dom/queryFocusable.js +2 -0
  42. package/dist/collection/capabilities/identity/uid.js +6 -0
  43. package/dist/collection/capabilities/mask/index.js +5 -0
  44. package/dist/collection/capabilities/mask/patterns/date.js +40 -0
  45. package/dist/collection/capabilities/mask/patterns/index.js +7 -0
  46. package/dist/collection/capabilities/react/index.js +25 -0
  47. package/dist/collection/capabilities/testing/html.js +14 -0
  48. package/dist/collection/capabilities/testing/styles.js +14 -0
  49. package/dist/collection/capabilities/vue/index.js +28 -0
  50. package/dist/collection/capabilities/vue3/index.js +26 -0
  51. package/dist/collection/collection-manifest.json +31 -0
  52. package/dist/collection/components/ku4-carousel/ku4-carousel.css +221 -0
  53. package/dist/collection/components/ku4-carousel/ku4-carousel.js +369 -0
  54. package/dist/collection/components/ku4-carousel-controls/ku4-carousel-controls.css +32 -0
  55. package/dist/collection/components/ku4-carousel-controls/ku4-carousel-controls.js +112 -0
  56. package/dist/collection/components/ku4-carousel-slide/ku4-carousel-slide.css +3 -0
  57. package/dist/collection/components/ku4-carousel-slide/ku4-carousel-slide.js +159 -0
  58. package/dist/collection/components/ku4-col/ku4-col.css +601 -0
  59. package/dist/collection/components/ku4-col/ku4-col.js +288 -0
  60. package/dist/collection/components/ku4-drawer/ku4-drawer.css +56 -0
  61. package/dist/collection/components/ku4-drawer/ku4-drawer.js +163 -0
  62. package/dist/collection/components/ku4-feature/ku4-feature.js +70 -0
  63. package/dist/collection/components/ku4-focus-trap/ku4-focus-trap.css +3 -0
  64. package/dist/collection/components/ku4-focus-trap/ku4-focus-trap.js +441 -0
  65. package/dist/collection/components/ku4-form/ku4-form.js +265 -0
  66. package/dist/collection/components/ku4-grid/ku4-grid.css +751 -0
  67. package/dist/collection/components/ku4-grid/ku4-grid.js +408 -0
  68. package/dist/collection/components/ku4-label/ku4-label.css +36 -0
  69. package/dist/collection/components/ku4-label/ku4-label.js +115 -0
  70. package/dist/collection/components/ku4-mask/ku4-mask.css +3 -0
  71. package/dist/collection/components/ku4-mask/ku4-mask.js +459 -0
  72. package/dist/collection/components/ku4-modal/ku4-modal.css +85 -0
  73. package/dist/collection/components/ku4-modal/ku4-modal.js +231 -0
  74. package/dist/collection/components/ku4-panel/ku4-panel.css +14 -0
  75. package/dist/collection/components/ku4-panel/ku4-panel.js +119 -0
  76. package/dist/collection/components/ku4-preview/ku4-preview.css +23 -0
  77. package/dist/collection/components/ku4-preview/ku4-preview.js +266 -0
  78. package/dist/collection/components/ku4-tab/ku4-tab.css +82 -0
  79. package/dist/collection/components/ku4-tab/ku4-tab.js +191 -0
  80. package/dist/collection/components/ku4-tab-list/ku4-tab-list.css +6 -0
  81. package/dist/collection/components/ku4-tab-list/ku4-tab-list.js +118 -0
  82. package/dist/collection/components/ku4-tab-panel/ku4-tab-panel.css +26 -0
  83. package/dist/collection/components/ku4-tab-panel/ku4-tab-panel.js +166 -0
  84. package/dist/collection/components/ku4-table/ku4-table.css +116 -0
  85. package/dist/collection/components/ku4-table/ku4-table.js +120 -0
  86. package/dist/collection/components/ku4-tooltip/ku4-tooltip.css +56 -0
  87. package/dist/collection/components/ku4-tooltip/ku4-tooltip.js +274 -0
  88. package/dist/collection/components/ku4-validation/ku4-validation.css +19 -0
  89. package/dist/collection/components/ku4-validation/ku4-validation.js +364 -0
  90. package/dist/collection/components/ku4-validation/validate.js +14 -0
  91. package/dist/collection/index.js +1 -0
  92. package/dist/collection/security.js +27 -0
  93. package/dist/esm/app-globals-0f993ce5.js +3 -0
  94. package/dist/esm/css-shim-10e6e2ae.js +4 -0
  95. package/dist/esm/dom-7cd9cf71.js +73 -0
  96. package/dist/esm/index-5448a818.js +3 -0
  97. package/dist/esm/index-6cfd87e4.js +3 -0
  98. package/dist/esm/index-77bdf1f1.js +3 -0
  99. package/dist/esm/index-a02dcfc8.js +3057 -0
  100. package/dist/esm/index-aa119486.js +3 -0
  101. package/dist/esm/ku4-carousel-controls.entry.js +2 -2
  102. package/dist/esm/ku4-carousel-slide.entry.js +1 -1
  103. package/dist/esm/ku4-carousel.entry.js +3 -3
  104. package/dist/esm/ku4-col.entry.js +1 -1
  105. package/dist/esm/ku4-drawer.entry.js +1 -1
  106. package/dist/esm/ku4-feature.entry.js +2 -2
  107. package/dist/esm/ku4-focus-trap.entry.js +3 -3
  108. package/dist/esm/ku4-form.entry.js +3 -3
  109. package/dist/esm/ku4-grid.entry.js +1 -1
  110. package/dist/esm/ku4-label.entry.js +2 -2
  111. package/dist/esm/ku4-mask.entry.js +3 -3
  112. package/dist/esm/ku4-modal.entry.js +3 -3
  113. package/dist/esm/ku4-panel.entry.js +1 -1
  114. package/dist/esm/ku4-preview.entry.js +34 -5
  115. package/dist/esm/ku4-tab-list.entry.js +4 -4
  116. package/dist/esm/ku4-tab-panel.entry.js +3 -3
  117. package/dist/esm/ku4-tab.entry.js +3 -3
  118. package/dist/esm/ku4-table.entry.js +1 -1
  119. package/dist/esm/ku4-tooltip.entry.js +2 -2
  120. package/dist/esm/ku4-validation.entry.js +2 -2
  121. package/dist/esm/ku4web-components.js +101 -6
  122. package/dist/esm/loader.js +17 -1
  123. package/dist/esm/uid-3716c2c4.js +9 -0
  124. package/dist/esm/{uid-fbebccfd.js → uid-d593801c.js} +1 -1
  125. package/dist/esm-es5/index-5448a818.js +1 -0
  126. package/dist/esm-es5/index-77bdf1f1.js +1 -0
  127. package/dist/esm-es5/ku4-carousel-controls.entry.js +1 -1
  128. package/dist/esm-es5/ku4-carousel.entry.js +1 -1
  129. package/dist/esm-es5/ku4-feature.entry.js +1 -1
  130. package/dist/esm-es5/ku4-focus-trap.entry.js +1 -1
  131. package/dist/esm-es5/ku4-form.entry.js +1 -1
  132. package/dist/esm-es5/ku4-label.entry.js +1 -1
  133. package/dist/esm-es5/ku4-mask.entry.js +1 -1
  134. package/dist/esm-es5/ku4-modal.entry.js +1 -1
  135. package/dist/esm-es5/ku4-preview.entry.js +1 -1
  136. package/dist/esm-es5/ku4-tab-list.entry.js +1 -1
  137. package/dist/esm-es5/ku4-tab-panel.entry.js +1 -1
  138. package/dist/esm-es5/ku4-tab.entry.js +1 -1
  139. package/dist/esm-es5/ku4-tooltip.entry.js +1 -1
  140. package/dist/esm-es5/ku4-validation.entry.js +1 -1
  141. package/dist/esm-es5/uid-d593801c.js +1 -0
  142. package/dist/index.js +1 -1
  143. package/dist/ku4web-components/app-globals-0f993ce5.js +3 -0
  144. package/dist/ku4web-components/app-globals-497eb362.system.js +1 -0
  145. package/dist/ku4web-components/css-shim-10e6e2ae.js +4 -0
  146. package/dist/ku4web-components/css-shim-c8dd4551.system.js +1 -0
  147. package/dist/ku4web-components/dom-67d1e45e.system.js +21 -0
  148. package/dist/ku4web-components/dom-7cd9cf71.js +73 -0
  149. package/dist/ku4web-components/index-1c93827a.system.js +1 -0
  150. package/dist/ku4web-components/index-29f2b09f.system.js +1 -0
  151. package/dist/ku4web-components/index-5d0cb00d.system.js +1 -0
  152. package/dist/ku4web-components/index-6cfd87e4.js +3 -0
  153. package/dist/ku4web-components/index-a02dcfc8.js +3057 -0
  154. package/dist/ku4web-components/index-aa119486.js +3 -0
  155. package/dist/ku4web-components/index.esm.js +1 -0
  156. package/dist/ku4web-components/index.system.js +1 -0
  157. package/dist/ku4web-components/ku4-carousel-controls.entry.js +89 -0
  158. package/dist/ku4web-components/ku4-carousel-controls.system.entry.js +1 -0
  159. package/dist/ku4web-components/ku4-carousel-slide.entry.js +47 -0
  160. package/dist/ku4web-components/ku4-carousel-slide.system.entry.js +1 -0
  161. package/dist/ku4web-components/ku4-carousel.entry.js +175 -0
  162. package/dist/ku4web-components/ku4-carousel.system.entry.js +1 -0
  163. package/dist/ku4web-components/ku4-col.entry.js +75 -0
  164. package/dist/ku4web-components/ku4-col.system.entry.js +1 -0
  165. package/dist/ku4web-components/ku4-drawer.entry.js +35 -0
  166. package/dist/ku4web-components/ku4-drawer.system.entry.js +1 -0
  167. package/dist/ku4web-components/ku4-feature.entry.js +29 -0
  168. package/dist/ku4web-components/ku4-feature.system.entry.js +1 -0
  169. package/dist/ku4web-components/ku4-focus-trap.entry.js +323 -0
  170. package/dist/ku4web-components/ku4-focus-trap.system.entry.js +1 -0
  171. package/dist/ku4web-components/ku4-form.entry.js +120 -0
  172. package/dist/ku4web-components/ku4-form.system.entry.js +1 -0
  173. package/dist/ku4web-components/ku4-grid.entry.js +108 -0
  174. package/dist/ku4web-components/ku4-grid.system.entry.js +1 -0
  175. package/dist/ku4web-components/ku4-label.entry.js +70 -0
  176. package/dist/ku4web-components/ku4-label.system.entry.js +1 -0
  177. package/dist/ku4web-components/ku4-mask.entry.js +343 -0
  178. package/dist/ku4web-components/ku4-mask.system.entry.js +1 -0
  179. package/dist/ku4web-components/ku4-modal.entry.js +80 -0
  180. package/dist/ku4web-components/ku4-modal.system.entry.js +1 -0
  181. package/dist/ku4web-components/ku4-panel.entry.js +49 -0
  182. package/dist/ku4web-components/ku4-panel.system.entry.js +1 -0
  183. package/dist/ku4web-components/ku4-preview.entry.js +128 -0
  184. package/dist/ku4web-components/ku4-preview.system.entry.js +1 -0
  185. package/dist/ku4web-components/ku4-tab-list.entry.js +76 -0
  186. package/dist/ku4web-components/ku4-tab-list.system.entry.js +1 -0
  187. package/dist/ku4web-components/ku4-tab-panel.entry.js +72 -0
  188. package/dist/ku4web-components/ku4-tab-panel.system.entry.js +1 -0
  189. package/dist/ku4web-components/ku4-tab.entry.js +63 -0
  190. package/dist/ku4web-components/ku4-tab.system.entry.js +1 -0
  191. package/dist/ku4web-components/ku4-table.entry.js +79 -0
  192. package/dist/ku4web-components/ku4-table.system.entry.js +1 -0
  193. package/dist/ku4web-components/ku4-tooltip.entry.js +120 -0
  194. package/dist/ku4web-components/ku4-tooltip.system.entry.js +1 -0
  195. package/dist/ku4web-components/ku4-validation.entry.js +162 -0
  196. package/dist/ku4web-components/ku4-validation.system.entry.js +1 -0
  197. package/dist/ku4web-components/ku4web-components.css +299 -1
  198. package/dist/ku4web-components/ku4web-components.esm.js +129 -1
  199. package/dist/ku4web-components/ku4web-components.js +1 -1
  200. package/dist/ku4web-components/ku4web-components.system.js +1 -0
  201. package/dist/ku4web-components/{p-c6a2f4ba.entry.js → p-046b3990.entry.js} +1 -1
  202. package/dist/ku4web-components/{p-018d598f.entry.js → p-0b777b57.entry.js} +1 -1
  203. package/dist/ku4web-components/p-0de744b1.system.js +1 -0
  204. package/dist/ku4web-components/{p-c760ec1e.system.entry.js → p-0f1646ca.system.entry.js} +1 -1
  205. package/dist/ku4web-components/p-14752b72.system.js +1 -0
  206. package/dist/ku4web-components/{p-5d39e051.system.entry.js → p-17c2a7ac.system.entry.js} +1 -1
  207. package/dist/ku4web-components/{p-536d6073.entry.js → p-1abe6f26.entry.js} +1 -1
  208. package/dist/ku4web-components/{p-7bac5d20.system.entry.js → p-1e19bc01.system.entry.js} +1 -1
  209. package/dist/ku4web-components/{p-dfc33643.system.entry.js → p-27647af0.system.entry.js} +1 -1
  210. package/dist/ku4web-components/p-2ee63f57.system.js +1 -1
  211. package/dist/ku4web-components/{p-973be48d.system.entry.js → p-3deab7f6.system.entry.js} +1 -1
  212. package/dist/ku4web-components/{p-23b35ab3.system.entry.js → p-4ecd9b1d.system.entry.js} +1 -1
  213. package/dist/ku4web-components/p-563d1517.system.js +1 -0
  214. package/dist/ku4web-components/p-5a54ccf4.js +1 -0
  215. package/dist/ku4web-components/{p-2681e152.system.entry.js → p-5e8921ef.system.entry.js} +1 -1
  216. package/dist/ku4web-components/{p-6459c75c.system.entry.js → p-6509d3e7.system.entry.js} +1 -1
  217. package/dist/ku4web-components/p-791e2dfc.js +1 -0
  218. package/dist/ku4web-components/{p-4a012d6d.entry.js → p-7b6ca6a8.entry.js} +1 -1
  219. package/dist/ku4web-components/{p-ec165afd.system.entry.js → p-7b93a362.system.entry.js} +1 -1
  220. package/dist/ku4web-components/{p-2faea8a9.system.entry.js → p-8173d389.system.entry.js} +1 -1
  221. package/dist/ku4web-components/{p-13c90d3d.system.entry.js → p-96033515.system.entry.js} +1 -1
  222. package/dist/ku4web-components/{p-e7d401cc.system.entry.js → p-9778d082.system.entry.js} +1 -1
  223. package/dist/ku4web-components/{p-09fb8c34.entry.js → p-9b01a63a.entry.js} +1 -1
  224. package/dist/ku4web-components/p-a110d244.js +1 -0
  225. package/dist/ku4web-components/{p-ff9db3e7.entry.js → p-ac7884f3.entry.js} +1 -1
  226. package/dist/ku4web-components/{p-27d5ad45.system.entry.js → p-ae7ce1fe.system.entry.js} +1 -1
  227. package/dist/ku4web-components/{p-be0d8b6a.entry.js → p-b1680ef4.entry.js} +1 -1
  228. package/dist/ku4web-components/{p-2f1425ac.entry.js → p-bb5410b5.entry.js} +1 -1
  229. package/dist/ku4web-components/{p-cbee5388.system.entry.js → p-bb698020.system.entry.js} +1 -1
  230. package/dist/ku4web-components/{p-eed33b36.entry.js → p-d42bd64d.entry.js} +1 -1
  231. package/dist/ku4web-components/{p-7a3871e3.entry.js → p-d4877fdf.entry.js} +1 -1
  232. package/dist/ku4web-components/{p-1ebea98a.entry.js → p-da8a8b83.entry.js} +1 -1
  233. package/dist/ku4web-components/{p-507093a6.entry.js → p-de3b2ba1.entry.js} +1 -1
  234. package/dist/ku4web-components/{p-f791cd06.entry.js → p-e11fbd79.entry.js} +1 -1
  235. package/dist/ku4web-components/{p-991d53c6.entry.js → p-ea1961f5.entry.js} +1 -1
  236. package/dist/ku4web-components/shadow-css-38a1326b.js +388 -0
  237. package/dist/ku4web-components/shadow-css-7fde17ac.system.js +13 -0
  238. package/dist/ku4web-components/uid-2ed9f227.system.js +1 -0
  239. package/dist/ku4web-components/uid-3716c2c4.js +9 -0
  240. package/package.json +5 -5
  241. package/react/index.js +1 -1
  242. package/react/index.mjs +1 -1
  243. package/vue/index.js +1 -1
  244. package/vue/index.mjs +1 -1
  245. package/vue3/index.js +1 -1
  246. package/vue3/index.mjs +1 -1
  247. package/dist/cjs/index-57e2cfa5.js +0 -10
  248. package/dist/cjs/index-b46d22c6.js +0 -14
  249. package/dist/esm/index-919b08e6.js +0 -3
  250. package/dist/esm/index-f9890388.js +0 -3
  251. package/dist/esm-es5/index-919b08e6.js +0 -1
  252. package/dist/esm-es5/index-f9890388.js +0 -1
  253. package/dist/esm-es5/uid-fbebccfd.js +0 -1
  254. package/dist/ku4web-components/p-16f6027a.js +0 -1
  255. package/dist/ku4web-components/p-50ea6684.js +0 -1
  256. package/dist/ku4web-components/p-c38c9cd1.system.js +0 -1
  257. package/dist/ku4web-components/p-cbb6fb91.js +0 -1
  258. package/dist/ku4web-components/p-e9770900.system.js +0 -1
  259. 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
+ }