ku4web-components 6.4.80 → 6.4.83

Sign up to get free protection for your applications and to get access to all the features.
Files changed (281) 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-6ca600c2.js +6 -0
  5. package/dist/cjs/dom-8d415461.js +75 -0
  6. package/dist/cjs/index-652a3cbf.js +14 -0
  7. package/dist/cjs/{index-1e13241e.js → index-a7b6d98c.js} +1 -1
  8. package/dist/cjs/index-c904eb3a.js +10 -0
  9. package/dist/cjs/index-ca4336bd.js +3093 -0
  10. package/dist/cjs/{index-da3ed39d.js → index-f78c109e.js} +1 -1
  11. package/dist/cjs/ku4-carousel-controls.cjs.entry.js +10 -4
  12. package/dist/cjs/ku4-carousel-slide.cjs.entry.js +1 -1
  13. package/dist/cjs/ku4-carousel.cjs.entry.js +14 -7
  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 +2 -2
  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 +103 -8
  32. package/dist/cjs/loader.cjs.js +19 -3
  33. package/dist/cjs/{shadow-css-8940f82d.js → shadow-css-78860e39.js} +1 -1
  34. package/dist/cjs/{uid-d6942c42.js → uid-97baaecc.js} +1 -1
  35. package/dist/cjs/uid-eb3bec28.js +11 -0
  36. package/dist/collection/capabilities/a11y/aria.js +26 -0
  37. package/dist/collection/capabilities/angular/index.js +24 -0
  38. package/dist/collection/capabilities/decorators/deprecated.js +20 -0
  39. package/dist/collection/capabilities/decorators/index.js +3 -0
  40. package/dist/collection/capabilities/decorators/memoize.js +7 -0
  41. package/dist/collection/capabilities/dom/isFocusable.js +7 -0
  42. package/dist/collection/capabilities/dom/queryFocusable.js +2 -0
  43. package/dist/collection/capabilities/identity/uid.js +6 -0
  44. package/dist/collection/capabilities/mask/index.js +5 -0
  45. package/dist/collection/capabilities/mask/patterns/date.js +40 -0
  46. package/dist/collection/capabilities/mask/patterns/index.js +7 -0
  47. package/dist/collection/capabilities/react/index.js +25 -0
  48. package/dist/collection/capabilities/testing/html.js +14 -0
  49. package/dist/collection/capabilities/testing/styles.js +14 -0
  50. package/dist/collection/capabilities/vue/index.js +28 -0
  51. package/dist/collection/capabilities/vue3/index.js +26 -0
  52. package/dist/collection/collection-manifest.json +31 -0
  53. package/dist/collection/components/ku4-carousel/ku4-carousel.css +221 -0
  54. package/dist/collection/components/ku4-carousel/ku4-carousel.js +369 -0
  55. package/dist/collection/components/ku4-carousel-controls/ku4-carousel-controls.css +32 -0
  56. package/dist/collection/components/ku4-carousel-controls/ku4-carousel-controls.js +112 -0
  57. package/dist/collection/components/ku4-carousel-slide/ku4-carousel-slide.css +3 -0
  58. package/dist/collection/components/ku4-carousel-slide/ku4-carousel-slide.js +159 -0
  59. package/dist/collection/components/ku4-col/ku4-col.css +601 -0
  60. package/dist/collection/components/ku4-col/ku4-col.js +288 -0
  61. package/dist/collection/components/ku4-drawer/ku4-drawer.css +56 -0
  62. package/dist/collection/components/ku4-drawer/ku4-drawer.js +163 -0
  63. package/dist/collection/components/ku4-feature/ku4-feature.js +70 -0
  64. package/dist/collection/components/ku4-focus-trap/ku4-focus-trap.css +3 -0
  65. package/dist/collection/components/ku4-focus-trap/ku4-focus-trap.js +441 -0
  66. package/dist/collection/components/ku4-form/ku4-form.js +225 -0
  67. package/dist/collection/components/ku4-grid/ku4-grid.css +751 -0
  68. package/dist/collection/components/ku4-grid/ku4-grid.js +408 -0
  69. package/dist/collection/components/ku4-label/ku4-label.css +36 -0
  70. package/dist/collection/components/ku4-label/ku4-label.js +115 -0
  71. package/dist/collection/components/ku4-mask/ku4-mask.css +3 -0
  72. package/dist/collection/components/ku4-mask/ku4-mask.js +458 -0
  73. package/dist/collection/components/ku4-modal/ku4-modal.css +85 -0
  74. package/dist/collection/components/ku4-modal/ku4-modal.js +208 -0
  75. package/dist/collection/components/ku4-panel/ku4-panel.css +14 -0
  76. package/dist/collection/components/ku4-panel/ku4-panel.js +119 -0
  77. package/dist/collection/components/ku4-preview/ku4-preview.css +23 -0
  78. package/dist/collection/components/ku4-preview/ku4-preview.js +266 -0
  79. package/dist/collection/components/ku4-tab/ku4-tab.css +82 -0
  80. package/dist/collection/components/ku4-tab/ku4-tab.js +191 -0
  81. package/dist/collection/components/ku4-tab-list/ku4-tab-list.css +6 -0
  82. package/dist/collection/components/ku4-tab-list/ku4-tab-list.js +118 -0
  83. package/dist/collection/components/ku4-tab-panel/ku4-tab-panel.css +26 -0
  84. package/dist/collection/components/ku4-tab-panel/ku4-tab-panel.js +166 -0
  85. package/dist/collection/components/ku4-table/ku4-table.css +116 -0
  86. package/dist/collection/components/ku4-table/ku4-table.js +120 -0
  87. package/dist/collection/components/ku4-tooltip/ku4-tooltip.css +56 -0
  88. package/dist/collection/components/ku4-tooltip/ku4-tooltip.js +274 -0
  89. package/dist/collection/components/ku4-validation/ku4-validation.css +19 -0
  90. package/dist/collection/components/ku4-validation/ku4-validation.js +364 -0
  91. package/dist/collection/components/ku4-validation/validate.js +14 -0
  92. package/dist/collection/index.js +1 -0
  93. package/dist/collection/security.js +27 -0
  94. package/dist/esm/app-globals-0f993ce5.js +3 -0
  95. package/dist/esm/css-shim-e6dd2538.js +4 -0
  96. package/dist/esm/dom-7fc649b0.js +73 -0
  97. package/dist/esm/index-3e1e5aa3.js +3 -0
  98. package/dist/esm/index-7fe386de.js +3057 -0
  99. package/dist/esm/index-7ff6e718.js +3 -0
  100. package/dist/esm/{index-9e3af5f4.js → index-81a98b72.js} +1 -1
  101. package/dist/esm/{index-20c3926d.js → index-bdb0771a.js} +1 -1
  102. package/dist/esm/ku4-carousel-controls.entry.js +10 -4
  103. package/dist/esm/ku4-carousel-slide.entry.js +1 -1
  104. package/dist/esm/ku4-carousel.entry.js +14 -7
  105. package/dist/esm/ku4-col.entry.js +1 -1
  106. package/dist/esm/ku4-drawer.entry.js +1 -1
  107. package/dist/esm/ku4-feature.entry.js +2 -2
  108. package/dist/esm/ku4-focus-trap.entry.js +3 -3
  109. package/dist/esm/ku4-form.entry.js +3 -3
  110. package/dist/esm/ku4-grid.entry.js +1 -1
  111. package/dist/esm/ku4-label.entry.js +2 -2
  112. package/dist/esm/ku4-mask.entry.js +2 -2
  113. package/dist/esm/ku4-modal.entry.js +3 -3
  114. package/dist/esm/ku4-panel.entry.js +1 -1
  115. package/dist/esm/ku4-preview.entry.js +34 -5
  116. package/dist/esm/ku4-tab-list.entry.js +4 -4
  117. package/dist/esm/ku4-tab-panel.entry.js +3 -3
  118. package/dist/esm/ku4-tab.entry.js +3 -3
  119. package/dist/esm/ku4-table.entry.js +1 -1
  120. package/dist/esm/ku4-tooltip.entry.js +2 -2
  121. package/dist/esm/ku4-validation.entry.js +2 -2
  122. package/dist/esm/ku4web-components.js +103 -8
  123. package/dist/esm/loader.js +19 -3
  124. package/dist/esm/{shadow-css-5d2d01ce.js → shadow-css-4d56fa31.js} +1 -1
  125. package/dist/esm/{uid-15f8c937.js → uid-1ec3509b.js} +1 -1
  126. package/dist/esm/uid-9dbd7ad0.js +9 -0
  127. package/dist/esm-es5/{index-9e3af5f4.js → index-81a98b72.js} +1 -1
  128. package/dist/esm-es5/{index-20c3926d.js → index-bdb0771a.js} +1 -1
  129. package/dist/esm-es5/ku4-carousel-controls.entry.js +1 -1
  130. package/dist/esm-es5/ku4-carousel-slide.entry.js +1 -1
  131. package/dist/esm-es5/ku4-carousel.entry.js +1 -1
  132. package/dist/esm-es5/ku4-col.entry.js +1 -1
  133. package/dist/esm-es5/ku4-drawer.entry.js +1 -1
  134. package/dist/esm-es5/ku4-feature.entry.js +1 -1
  135. package/dist/esm-es5/ku4-focus-trap.entry.js +1 -1
  136. package/dist/esm-es5/ku4-form.entry.js +1 -1
  137. package/dist/esm-es5/ku4-grid.entry.js +1 -1
  138. package/dist/esm-es5/ku4-label.entry.js +1 -1
  139. package/dist/esm-es5/ku4-mask.entry.js +1 -1
  140. package/dist/esm-es5/ku4-modal.entry.js +1 -1
  141. package/dist/esm-es5/ku4-panel.entry.js +1 -1
  142. package/dist/esm-es5/ku4-preview.entry.js +1 -1
  143. package/dist/esm-es5/ku4-tab-list.entry.js +1 -1
  144. package/dist/esm-es5/ku4-tab-panel.entry.js +1 -1
  145. package/dist/esm-es5/ku4-tab.entry.js +1 -1
  146. package/dist/esm-es5/ku4-table.entry.js +1 -1
  147. package/dist/esm-es5/ku4-tooltip.entry.js +1 -1
  148. package/dist/esm-es5/ku4-validation.entry.js +1 -1
  149. package/dist/esm-es5/ku4web-components.js +1 -1
  150. package/dist/esm-es5/loader.js +1 -1
  151. package/dist/esm-es5/{shadow-css-5d2d01ce.js → shadow-css-4d56fa31.js} +0 -0
  152. package/dist/esm-es5/uid-1ec3509b.js +1 -0
  153. package/dist/index.js +1 -1
  154. package/dist/ku4web-components/app-globals-0f993ce5.js +3 -0
  155. package/dist/ku4web-components/app-globals-497eb362.system.js +1 -0
  156. package/dist/ku4web-components/css-shim-b6eec689.system.js +1 -0
  157. package/dist/ku4web-components/css-shim-e6dd2538.js +4 -0
  158. package/dist/ku4web-components/dom-7fc649b0.js +73 -0
  159. package/dist/ku4web-components/dom-88962da0.system.js +21 -0
  160. package/dist/ku4web-components/index-380cbe3a.system.js +1 -0
  161. package/dist/ku4web-components/index-3e1e5aa3.js +3 -0
  162. package/dist/ku4web-components/index-5029fd1f.system.js +1 -0
  163. package/dist/ku4web-components/index-7d482e8a.system.js +1 -0
  164. package/dist/ku4web-components/index-7fe386de.js +3057 -0
  165. package/dist/ku4web-components/index-7ff6e718.js +3 -0
  166. package/dist/ku4web-components/index.esm.js +1 -0
  167. package/dist/ku4web-components/index.system.js +1 -0
  168. package/dist/ku4web-components/ku4-carousel-controls.entry.js +89 -0
  169. package/dist/ku4web-components/ku4-carousel-controls.system.entry.js +1 -0
  170. package/dist/ku4web-components/ku4-carousel-slide.entry.js +47 -0
  171. package/dist/ku4web-components/ku4-carousel-slide.system.entry.js +1 -0
  172. package/dist/ku4web-components/ku4-carousel.entry.js +175 -0
  173. package/dist/ku4web-components/ku4-carousel.system.entry.js +1 -0
  174. package/dist/ku4web-components/ku4-col.entry.js +75 -0
  175. package/dist/ku4web-components/ku4-col.system.entry.js +1 -0
  176. package/dist/ku4web-components/ku4-drawer.entry.js +35 -0
  177. package/dist/ku4web-components/ku4-drawer.system.entry.js +1 -0
  178. package/dist/ku4web-components/ku4-feature.entry.js +29 -0
  179. package/dist/ku4web-components/ku4-feature.system.entry.js +1 -0
  180. package/dist/ku4web-components/ku4-focus-trap.entry.js +323 -0
  181. package/dist/ku4web-components/ku4-focus-trap.system.entry.js +1 -0
  182. package/dist/ku4web-components/ku4-form.entry.js +112 -0
  183. package/dist/ku4web-components/ku4-form.system.entry.js +1 -0
  184. package/dist/ku4web-components/ku4-grid.entry.js +108 -0
  185. package/dist/ku4web-components/ku4-grid.system.entry.js +1 -0
  186. package/dist/ku4web-components/ku4-label.entry.js +70 -0
  187. package/dist/ku4web-components/ku4-label.system.entry.js +1 -0
  188. package/dist/ku4web-components/ku4-mask.entry.js +342 -0
  189. package/dist/ku4web-components/ku4-mask.system.entry.js +1 -0
  190. package/dist/ku4web-components/ku4-modal.entry.js +75 -0
  191. package/dist/ku4web-components/ku4-modal.system.entry.js +1 -0
  192. package/dist/ku4web-components/ku4-panel.entry.js +49 -0
  193. package/dist/ku4web-components/ku4-panel.system.entry.js +1 -0
  194. package/dist/ku4web-components/ku4-preview.entry.js +128 -0
  195. package/dist/ku4web-components/ku4-preview.system.entry.js +1 -0
  196. package/dist/ku4web-components/ku4-tab-list.entry.js +76 -0
  197. package/dist/ku4web-components/ku4-tab-list.system.entry.js +1 -0
  198. package/dist/ku4web-components/ku4-tab-panel.entry.js +72 -0
  199. package/dist/ku4web-components/ku4-tab-panel.system.entry.js +1 -0
  200. package/dist/ku4web-components/ku4-tab.entry.js +63 -0
  201. package/dist/ku4web-components/ku4-tab.system.entry.js +1 -0
  202. package/dist/ku4web-components/ku4-table.entry.js +79 -0
  203. package/dist/ku4web-components/ku4-table.system.entry.js +1 -0
  204. package/dist/ku4web-components/ku4-tooltip.entry.js +120 -0
  205. package/dist/ku4web-components/ku4-tooltip.system.entry.js +1 -0
  206. package/dist/ku4web-components/ku4-validation.entry.js +162 -0
  207. package/dist/ku4web-components/ku4-validation.system.entry.js +1 -0
  208. package/dist/ku4web-components/ku4web-components.css +299 -1
  209. package/dist/ku4web-components/ku4web-components.esm.js +129 -1
  210. package/dist/ku4web-components/ku4web-components.js +1 -1
  211. package/dist/ku4web-components/ku4web-components.system.js +1 -0
  212. package/dist/ku4web-components/{p-15ee8b8e.system.entry.js → p-02328d34.system.entry.js} +1 -1
  213. package/dist/ku4web-components/{p-01debe28.system.entry.js → p-050f184b.system.entry.js} +1 -1
  214. package/dist/ku4web-components/{p-8e2fca0b.system.entry.js → p-073cefec.system.entry.js} +1 -1
  215. package/dist/ku4web-components/{p-22eed87f.entry.js → p-097ba217.entry.js} +1 -1
  216. package/dist/ku4web-components/{p-f1cc1b2d.entry.js → p-0adeb8e4.entry.js} +1 -1
  217. package/dist/ku4web-components/{p-840704e4.entry.js → p-0ce97586.entry.js} +1 -1
  218. package/dist/ku4web-components/p-0f77bef9.system.js +1 -0
  219. package/dist/ku4web-components/{p-761b2cbc.system.entry.js → p-136e5a03.system.entry.js} +1 -1
  220. package/dist/ku4web-components/p-17d548db.js +1 -0
  221. package/dist/ku4web-components/{p-c1068ffa.js → p-189cde73.js} +1 -1
  222. package/dist/ku4web-components/{p-2f2d74dc.system.entry.js → p-1d5a1caf.system.entry.js} +1 -1
  223. package/dist/ku4web-components/{p-a5c7f5f7.system.entry.js → p-288482da.system.entry.js} +1 -1
  224. package/dist/ku4web-components/{p-0e010c10.system.entry.js → p-3a0d1ff7.system.entry.js} +1 -1
  225. package/dist/ku4web-components/{p-d360c64a.entry.js → p-3f147a02.entry.js} +1 -1
  226. package/dist/ku4web-components/{p-0f8708f8.entry.js → p-3f2a008c.entry.js} +1 -1
  227. package/dist/ku4web-components/{p-8faad87d.entry.js → p-3f4082d5.entry.js} +1 -1
  228. package/dist/ku4web-components/{p-7273db60.entry.js → p-49275772.entry.js} +1 -1
  229. package/dist/ku4web-components/{p-232787a5.system.entry.js → p-4bfca34b.system.entry.js} +1 -1
  230. package/dist/ku4web-components/{p-04948520.system.entry.js → p-524cef27.system.entry.js} +1 -1
  231. package/dist/ku4web-components/{p-67adc5b1.system.entry.js → p-52d815ab.system.entry.js} +1 -1
  232. package/dist/ku4web-components/{p-2edd35f8.system.entry.js → p-596beaad.system.entry.js} +1 -1
  233. package/dist/ku4web-components/{p-f06bf0ae.entry.js → p-5f9d0077.entry.js} +1 -1
  234. package/dist/ku4web-components/{p-660ebd19.entry.js → p-5fcea805.entry.js} +1 -1
  235. package/dist/ku4web-components/{p-adddaeef.entry.js → p-61214088.entry.js} +1 -1
  236. package/dist/ku4web-components/{p-d6ec34c3.entry.js → p-66b8247f.entry.js} +1 -1
  237. package/dist/ku4web-components/{p-9c0d71af.system.entry.js → p-6b9e3523.system.entry.js} +1 -1
  238. package/dist/ku4web-components/{p-02e342f7.system.entry.js → p-6cfd9011.system.entry.js} +1 -1
  239. package/dist/ku4web-components/{p-8d9eb18b.system.entry.js → p-7bfc256a.system.entry.js} +1 -1
  240. package/dist/ku4web-components/{p-77f1853c.entry.js → p-818caf0f.entry.js} +1 -1
  241. package/dist/ku4web-components/{p-3874127d.entry.js → p-8642aef5.entry.js} +1 -1
  242. package/dist/ku4web-components/{p-f6455ab3.js → p-881e100a.js} +0 -0
  243. package/dist/ku4web-components/{p-19a8c0f6.system.entry.js → p-95698618.system.entry.js} +1 -1
  244. package/dist/ku4web-components/{p-f0b1c07c.system.js → p-96ec7b4f.system.js} +1 -1
  245. package/dist/ku4web-components/{p-ce6eddc3.system.entry.js → p-a0d0c99e.system.entry.js} +1 -1
  246. package/dist/ku4web-components/{p-b4488a7d.system.entry.js → p-acb43765.system.entry.js} +1 -1
  247. package/dist/ku4web-components/{p-c19fd841.entry.js → p-b47bb3d0.entry.js} +1 -1
  248. package/dist/ku4web-components/{p-0785fc39.system.js → p-c3293202.system.js} +1 -1
  249. package/dist/ku4web-components/{p-eb6882c8.entry.js → p-c798faf2.entry.js} +1 -1
  250. package/dist/ku4web-components/{p-3c182b2f.entry.js → p-cd0d0b40.entry.js} +1 -1
  251. package/dist/ku4web-components/p-cd4cdcbb.entry.js +1 -0
  252. package/dist/ku4web-components/{p-8f480cb5.system.entry.js → p-d848909c.system.entry.js} +1 -1
  253. package/dist/ku4web-components/{p-90c37394.entry.js → p-d8868855.entry.js} +1 -1
  254. package/dist/ku4web-components/p-db3040f3.system.js +1 -0
  255. package/dist/ku4web-components/{p-2aac6c90.js → p-e6b3a708.js} +1 -1
  256. package/dist/ku4web-components/{p-c50540ec.system.entry.js → p-ea4b32de.system.entry.js} +1 -1
  257. package/dist/ku4web-components/{p-e4ff1c36.entry.js → p-f3fbe1e6.entry.js} +1 -1
  258. package/dist/ku4web-components/p-f64c1f55.entry.js +1 -0
  259. package/dist/ku4web-components/{p-71d57b8b.system.js → p-fbf3ad1e.system.js} +0 -0
  260. package/dist/ku4web-components/{p-0eb73a0f.system.entry.js → p-fc0c3bf4.system.entry.js} +1 -1
  261. package/dist/ku4web-components/shadow-css-4d56fa31.js +388 -0
  262. package/dist/ku4web-components/shadow-css-d0426811.system.js +13 -0
  263. package/dist/ku4web-components/uid-9dbd7ad0.js +9 -0
  264. package/dist/ku4web-components/uid-fb867945.system.js +1 -0
  265. package/dist/types/components/ku4-carousel/ku4-carousel.d.ts +3 -2
  266. package/dist/types/components/ku4-carousel-controls/ku4-carousel-controls.d.ts +1 -0
  267. package/dist/types/components/ku4-carousel-slide/ku4-carousel-slide.d.ts +6 -0
  268. package/dist/types/components.d.ts +10 -2
  269. package/package.json +15 -15
  270. package/react/index.js +1 -1
  271. package/react/index.mjs +1 -1
  272. package/vue/index.js +1 -1
  273. package/vue/index.mjs +1 -1
  274. package/vue3/index.js +1 -1
  275. package/vue3/index.mjs +1 -1
  276. package/dist/esm-es5/uid-15f8c937.js +0 -1
  277. package/dist/ku4web-components/p-7a47027b.entry.js +0 -1
  278. package/dist/ku4web-components/p-b590da20.entry.js +0 -1
  279. package/dist/ku4web-components/p-be7890a1.system.js +0 -1
  280. package/dist/ku4web-components/p-cbbb4b1b.js +0 -1
  281. package/dist/ku4web-components/p-eb58b04b.system.js +0 -1
@@ -0,0 +1,458 @@
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(input.value, 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 data = rawData.replace(new RegExp(banned, 'g'), '');
174
+ if (Assert.isNullOrEmpty(data)) {
175
+ this.value = previousValue;
176
+ input.setSelectionRange(selectionStart, selectionStart);
177
+ return;
178
+ }
179
+ if (!banned || !banned.test(data)) {
180
+ let nextValue = previousValue;
181
+ if (selectionStart < selectionEnd) {
182
+ const startValue = reverseCharIndexes.find(v => v <= selectionStart - 1);
183
+ const endValue = reverseCharIndexes.find(v => v <= selectionEnd - 1);
184
+ const startInsertIndex = charIndexes.findIndex(v => v === startValue);
185
+ const endInsertIndex = charIndexes.findIndex(v => v === endValue);
186
+ const unmasked = string.unmask(previousValue, template, char);
187
+ const newValue = unmasked.substring(0, startInsertIndex + 1) + unmasked.substring(endInsertIndex + 1, previousValue.length);
188
+ nextValue = string.mask(newValue, template, char);
189
+ }
190
+ const charIndex = charIndexes.find(v => v >= selectionStart);
191
+ const insertIndex = charIndexes.findIndex(v => v === charIndex);
192
+ const unmasked = string.unmask(nextValue, template, char);
193
+ nextValue = unmasked.substring(0, insertIndex) + data + unmasked.substring(insertIndex, previousValue.length);
194
+ this.value = string.mask(nextValue, template, char);
195
+ const index = charIndexes[insertIndex + data.length] || this.value.search(chars) || this.value.length;
196
+ input.setSelectionRange(index, index);
197
+ }
198
+ });
199
+ this.value = previousValue;
200
+ input.setSelectionRange(selectionStart, selectionStart);
201
+ return;
202
+ }
203
+ catch (e) {
204
+ this.value = previousValue;
205
+ input.setSelectionRange(selectionStart, selectionStart);
206
+ return;
207
+ }
208
+ }
209
+ if (e.inputType === 'deleteContentBackward' || e.inputType === 'deleteByCut') {
210
+ const startValue = reverseCharIndexes.find(v => v <= selectionStart - 1);
211
+ const endValue = reverseCharIndexes.find(v => v <= selectionEnd - 1);
212
+ const startInsertIndex = charIndexes.findIndex(v => v === startValue);
213
+ const endInsertIndex = charIndexes.findIndex(v => v === endValue);
214
+ const unmasked = string.unmask(previousValue, template, char);
215
+ if (startInsertIndex < endInsertIndex) {
216
+ const newValue = unmasked.substring(0, startInsertIndex + 1) + unmasked.substring(endInsertIndex + 1, previousValue.length);
217
+ this.value = string.mask(newValue, template, char);
218
+ newValue && startInsertIndex > -1
219
+ ? input.setSelectionRange(previousCharIndex + 1, previousCharIndex + 1)
220
+ : input.setSelectionRange(previousCharIndex, previousCharIndex);
221
+ }
222
+ else {
223
+ const newValue = unmasked.substring(0, startInsertIndex) + unmasked.substring(endInsertIndex + 1, previousValue.length);
224
+ this.value = string.mask(newValue, template, char);
225
+ input.setSelectionRange(previousCharIndex, previousCharIndex);
226
+ }
227
+ return;
228
+ }
229
+ if (e.inputType === 'deleteContentForward') {
230
+ const charIndex = charIndexes.find(v => v >= selectionStart);
231
+ const insertIndex = charIndexes.findIndex(v => v === charIndex);
232
+ const unmasked = string.unmask(previousValue, template, char);
233
+ const newValue = unmasked.substring(0, insertIndex) + unmasked.substring(insertIndex + 1, previousValue.length);
234
+ this.value = string.mask(newValue, template, char);
235
+ input.setSelectionRange(selectionStart, selectionStart);
236
+ return;
237
+ }
238
+ //Abort if auxiliary key is pressed.
239
+ if (e.altKey || e.ctrlKey || e.metaKey) {
240
+ return;
241
+ }
242
+ //Abort if disallowed character
243
+ if (!e.data) {
244
+ if (e.type === 'input' && !e.inputType) {
245
+ const { value } = e.target;
246
+ const charIndex = charIndexes.find(v => v >= selectionStart);
247
+ const insertIndex = charIndexes.findIndex(v => v === charIndex);
248
+ const unmasked = string.unmask(value, template, char);
249
+ const allowed = value.replace(new RegExp(banned, 'g'), '');
250
+ const nextValue = unmasked.substring(0, insertIndex) + allowed;
251
+ const index = charIndexes.find(v => v > charIndex);
252
+ this.value = string.mask(nextValue, template, char);
253
+ const patternIndex = charIndexes.findIndex(v => v >= index);
254
+ const validationIndex = patternIndex < 0 ? charIndexes.length - 1 : patternIndex - 1;
255
+ this.validate(nextValue, patterns[validationIndex]);
256
+ }
257
+ else {
258
+ this.value = previousValue;
259
+ input.setSelectionRange(selectionStart, selectionStart);
260
+ }
261
+ return;
262
+ }
263
+ //Append
264
+ if (chars.test(previousValue.charAt(selectionStart)) ||
265
+ selectionStart === template.length) {
266
+ const unmasked = string.unmask(previousValue, template, char);
267
+ this.value = string.mask(unmasked + e.data, template, char);
268
+ const charIndex = this.value.search(chars);
269
+ const index = charIndex < 0 ? template.length : charIndex;
270
+ input.setSelectionRange(index, index);
271
+ const patternIndex = charIndexes.findIndex(v => v >= index);
272
+ const validationIndex = patternIndex < 0 ? charIndexes.length - 1 : patternIndex - 1;
273
+ this.validate(e.data, patterns[validationIndex]);
274
+ }
275
+ //Insert
276
+ else {
277
+ let nextValue = previousValue;
278
+ if (selectionStart < selectionEnd) {
279
+ const startValue = reverseCharIndexes.find(v => v <= selectionStart - 1);
280
+ const endValue = reverseCharIndexes.find(v => v <= selectionEnd - 1);
281
+ const startInsertIndex = charIndexes.findIndex(v => v === startValue);
282
+ const endInsertIndex = charIndexes.findIndex(v => v === endValue);
283
+ const unmasked = string.unmask(previousValue, template, char);
284
+ const newValue = unmasked.substring(0, startInsertIndex + 1) + unmasked.substring(endInsertIndex + 1, previousValue.length);
285
+ nextValue = string.mask(newValue, template, char);
286
+ }
287
+ const charIndex = charIndexes.find(v => v >= selectionStart);
288
+ const insertIndex = charIndexes.findIndex(v => v === charIndex);
289
+ const unmasked = string.unmask(nextValue, template, char);
290
+ nextValue = unmasked.substring(0, insertIndex) + e.data + unmasked.substring(insertIndex, previousValue.length);
291
+ const index = charIndexes.find(v => v > charIndex);
292
+ this.value = string.mask(nextValue, template, char);
293
+ input.setSelectionRange(index, index);
294
+ const patternIndex = charIndexes.findIndex(v => v >= index);
295
+ const validationIndex = patternIndex < 0 ? charIndexes.length - 1 : patternIndex - 1;
296
+ this.validate(e.data, patterns[validationIndex]);
297
+ }
298
+ }
299
+ validate(data, pattern) {
300
+ const { previousValue, input, value, selectionStart } = this;
301
+ if (Assert.exists(pattern) &&
302
+ !(pattern.test(data) || (/\(\?[!<=]/.test(pattern.toString()) && pattern.test(value)))) {
303
+ this.value = previousValue;
304
+ input.setSelectionRange(selectionStart, selectionStart);
305
+ }
306
+ }
307
+ componentWillLoad() {
308
+ this.input = document.getElementById(this.for);
309
+ if (Assert.exists(this.input)) {
310
+ this.input.addEventListener('focus', this.handleFocus);
311
+ this.input.addEventListener('blur', this.handleBlur);
312
+ this.input.addEventListener('keydown', this.handleKeyDown);
313
+ this.input.addEventListener('input', this.handleInput);
314
+ this.input.addEventListener('ku4-mask-input', this.handleInput);
315
+ this.input.addEventListener('touchstart', this.handleTouchStart, { passive: true });
316
+ }
317
+ else {
318
+ // eslint-disable-next-line no-console
319
+ console.error('ku4-mask must have a valid `for` referencing target field `id`.');
320
+ }
321
+ }
322
+ disconnectedCallback() {
323
+ if (this.input && this.input.removeEventListener) {
324
+ this.input.removeEventListener('focus', this.handleFocus);
325
+ this.input.removeEventListener('blur', this.handleBlur);
326
+ this.input.removeEventListener('keydown', this.handleKeyDown);
327
+ this.input.removeEventListener('input', this.handleInput);
328
+ this.input.removeEventListener('touchstart', this.handleTouchStart);
329
+ }
330
+ }
331
+ render() {
332
+ return h("slot", null);
333
+ }
334
+ static get is() { return "ku4-mask"; }
335
+ static get encapsulation() { return "shadow"; }
336
+ static get originalStyleUrls() { return {
337
+ "$": ["ku4-mask.scss"]
338
+ }; }
339
+ static get styleUrls() { return {
340
+ "$": ["ku4-mask.css"]
341
+ }; }
342
+ static get properties() { return {
343
+ "for": {
344
+ "type": "string",
345
+ "mutable": false,
346
+ "complexType": {
347
+ "original": "string",
348
+ "resolved": "string",
349
+ "references": {}
350
+ },
351
+ "required": false,
352
+ "optional": false,
353
+ "docs": {
354
+ "tags": [],
355
+ "text": "Mask for input having id of value"
356
+ },
357
+ "attribute": "for",
358
+ "reflect": false
359
+ },
360
+ "template": {
361
+ "type": "string",
362
+ "mutable": false,
363
+ "complexType": {
364
+ "original": "string",
365
+ "resolved": "string",
366
+ "references": {}
367
+ },
368
+ "required": false,
369
+ "optional": false,
370
+ "docs": {
371
+ "tags": [],
372
+ "text": "Mask template"
373
+ },
374
+ "attribute": "template",
375
+ "reflect": false,
376
+ "defaultValue": "''"
377
+ },
378
+ "ban": {
379
+ "type": "string",
380
+ "mutable": false,
381
+ "complexType": {
382
+ "original": "string",
383
+ "resolved": "string",
384
+ "references": {}
385
+ },
386
+ "required": false,
387
+ "optional": false,
388
+ "docs": {
389
+ "tags": [],
390
+ "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."
391
+ },
392
+ "attribute": "ban",
393
+ "reflect": false,
394
+ "defaultValue": "''"
395
+ },
396
+ "pattern": {
397
+ "type": "string",
398
+ "mutable": false,
399
+ "complexType": {
400
+ "original": "string",
401
+ "resolved": "string",
402
+ "references": {}
403
+ },
404
+ "required": false,
405
+ "optional": false,
406
+ "docs": {
407
+ "tags": [],
408
+ "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."
409
+ },
410
+ "attribute": "pattern",
411
+ "reflect": false,
412
+ "defaultValue": "''"
413
+ },
414
+ "char": {
415
+ "type": "string",
416
+ "mutable": false,
417
+ "complexType": {
418
+ "original": "string",
419
+ "resolved": "string",
420
+ "references": {}
421
+ },
422
+ "required": false,
423
+ "optional": false,
424
+ "docs": {
425
+ "tags": [],
426
+ "text": "Mask Character"
427
+ },
428
+ "attribute": "char",
429
+ "reflect": false,
430
+ "defaultValue": "'_'"
431
+ },
432
+ "hidden": {
433
+ "type": "boolean",
434
+ "mutable": false,
435
+ "complexType": {
436
+ "original": "boolean",
437
+ "resolved": "boolean",
438
+ "references": {}
439
+ },
440
+ "required": false,
441
+ "optional": false,
442
+ "docs": {
443
+ "tags": [],
444
+ "text": "Hide mask"
445
+ },
446
+ "attribute": "hidden",
447
+ "reflect": false,
448
+ "defaultValue": "false"
449
+ }
450
+ }; }
451
+ static get watchers() { return [{
452
+ "propName": "template",
453
+ "methodName": "templateHandler"
454
+ }, {
455
+ "propName": "char",
456
+ "methodName": "charHandler"
457
+ }]; }
458
+ }
@@ -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
+ }