ku4web-components 6.4.84 → 6.4.88

Sign up to get free protection for your applications and to get access to all the features.
Files changed (279) hide show
  1. package/angular/index.js +1 -1
  2. package/angular/index.mjs +1 -1
  3. package/dist/cjs/index-57e2cfa5.js +10 -0
  4. package/dist/cjs/{index-a7b6d98c.js → index-845c56d4.js} +1 -1
  5. package/dist/cjs/ku4-carousel-controls.cjs.entry.js +3 -3
  6. package/dist/cjs/ku4-carousel-slide.cjs.entry.js +1 -1
  7. package/dist/cjs/ku4-carousel.cjs.entry.js +3 -3
  8. package/dist/cjs/ku4-col.cjs.entry.js +1 -1
  9. package/dist/cjs/ku4-drawer.cjs.entry.js +1 -1
  10. package/dist/cjs/ku4-feature.cjs.entry.js +2 -2
  11. package/dist/cjs/ku4-focus-trap.cjs.entry.js +37 -37
  12. package/dist/cjs/ku4-form.cjs.entry.js +3 -3
  13. package/dist/cjs/ku4-grid.cjs.entry.js +1 -1
  14. package/dist/cjs/ku4-label.cjs.entry.js +2 -2
  15. package/dist/cjs/ku4-mask.cjs.entry.js +3 -3
  16. package/dist/cjs/ku4-modal.cjs.entry.js +9 -4
  17. package/dist/cjs/ku4-panel.cjs.entry.js +1 -1
  18. package/dist/cjs/ku4-preview.cjs.entry.js +14 -43
  19. package/dist/cjs/ku4-tab-list.cjs.entry.js +4 -4
  20. package/dist/cjs/ku4-tab-panel.cjs.entry.js +3 -3
  21. package/dist/cjs/ku4-tab.cjs.entry.js +3 -3
  22. package/dist/cjs/ku4-table.cjs.entry.js +1 -1
  23. package/dist/cjs/ku4-tooltip.cjs.entry.js +2 -2
  24. package/dist/cjs/ku4-validation.cjs.entry.js +2 -2
  25. package/dist/cjs/ku4web-components.cjs.js +8 -103
  26. package/dist/cjs/loader.cjs.js +3 -19
  27. package/dist/cjs/{shadow-css-78860e39.js → shadow-css-546083ef.js} +1 -1
  28. package/dist/esm/{index-81a98b72.js → index-45c399b0.js} +1 -1
  29. package/dist/esm/index-f9890388.js +3 -0
  30. package/dist/esm/ku4-carousel-controls.entry.js +3 -3
  31. package/dist/esm/ku4-carousel-slide.entry.js +1 -1
  32. package/dist/esm/ku4-carousel.entry.js +3 -3
  33. package/dist/esm/ku4-col.entry.js +1 -1
  34. package/dist/esm/ku4-drawer.entry.js +1 -1
  35. package/dist/esm/ku4-feature.entry.js +2 -2
  36. package/dist/esm/ku4-focus-trap.entry.js +14 -14
  37. package/dist/esm/ku4-form.entry.js +3 -3
  38. package/dist/esm/ku4-grid.entry.js +1 -1
  39. package/dist/esm/ku4-label.entry.js +2 -2
  40. package/dist/esm/ku4-mask.entry.js +3 -3
  41. package/dist/esm/ku4-modal.entry.js +9 -4
  42. package/dist/esm/ku4-panel.entry.js +1 -1
  43. package/dist/esm/ku4-preview.entry.js +5 -34
  44. package/dist/esm/ku4-tab-list.entry.js +4 -4
  45. package/dist/esm/ku4-tab-panel.entry.js +3 -3
  46. package/dist/esm/ku4-tab.entry.js +3 -3
  47. package/dist/esm/ku4-table.entry.js +1 -1
  48. package/dist/esm/ku4-tooltip.entry.js +2 -2
  49. package/dist/esm/ku4-validation.entry.js +2 -2
  50. package/dist/esm/ku4web-components.js +8 -103
  51. package/dist/esm/loader.js +3 -19
  52. package/dist/esm/polyfills/css-shim.js +1 -1
  53. package/dist/{ku4web-components/shadow-css-4d56fa31.js → esm/shadow-css-dfa0587f.js} +1 -1
  54. package/dist/esm-es5/{index-81a98b72.js → index-45c399b0.js} +1 -1
  55. package/dist/esm-es5/{index-316624d1.js → index-f9890388.js} +1 -1
  56. package/dist/esm-es5/ku4-carousel-controls.entry.js +1 -1
  57. package/dist/esm-es5/ku4-carousel-slide.entry.js +1 -1
  58. package/dist/esm-es5/ku4-carousel.entry.js +1 -1
  59. package/dist/esm-es5/ku4-col.entry.js +1 -1
  60. package/dist/esm-es5/ku4-drawer.entry.js +1 -1
  61. package/dist/esm-es5/ku4-feature.entry.js +1 -1
  62. package/dist/esm-es5/ku4-focus-trap.entry.js +1 -1
  63. package/dist/esm-es5/ku4-form.entry.js +1 -1
  64. package/dist/esm-es5/ku4-grid.entry.js +1 -1
  65. package/dist/esm-es5/ku4-label.entry.js +1 -1
  66. package/dist/esm-es5/ku4-mask.entry.js +1 -1
  67. package/dist/esm-es5/ku4-modal.entry.js +1 -1
  68. package/dist/esm-es5/ku4-panel.entry.js +1 -1
  69. package/dist/esm-es5/ku4-preview.entry.js +1 -1
  70. package/dist/esm-es5/ku4-tab-list.entry.js +1 -1
  71. package/dist/esm-es5/ku4-tab-panel.entry.js +1 -1
  72. package/dist/esm-es5/ku4-tab.entry.js +1 -1
  73. package/dist/esm-es5/ku4-table.entry.js +1 -1
  74. package/dist/esm-es5/ku4-tooltip.entry.js +1 -1
  75. package/dist/esm-es5/ku4-validation.entry.js +1 -1
  76. package/dist/esm-es5/ku4web-components.js +1 -1
  77. package/dist/esm-es5/loader.js +1 -1
  78. package/dist/esm-es5/{shadow-css-4d56fa31.js → shadow-css-dfa0587f.js} +0 -0
  79. package/dist/index.js +1 -1
  80. package/dist/ku4web-components/index.esm.js +0 -1
  81. package/dist/ku4web-components/ku4web-components.css +1 -299
  82. package/dist/ku4web-components/ku4web-components.esm.js +1 -129
  83. package/dist/ku4web-components/ku4web-components.js +1 -1
  84. package/dist/ku4web-components/{p-6a5a7d81.entry.js → p-005353c6.entry.js} +1 -1
  85. package/dist/ku4web-components/{p-66b8247f.entry.js → p-09f09ad6.entry.js} +1 -1
  86. package/dist/ku4web-components/{p-6b9e3523.system.entry.js → p-09f10910.system.entry.js} +1 -1
  87. package/dist/ku4web-components/p-11652204.entry.js +1 -0
  88. package/dist/ku4web-components/{p-c96a424d.entry.js → p-1380f375.entry.js} +1 -1
  89. package/dist/ku4web-components/p-16f6027a.js +1 -0
  90. package/dist/ku4web-components/{p-8427534d.system.entry.js → p-1cdd4c7f.system.entry.js} +1 -1
  91. package/dist/ku4web-components/{p-61214088.entry.js → p-1fbc37de.entry.js} +1 -1
  92. package/dist/ku4web-components/{p-96b69344.entry.js → p-20d3e65d.entry.js} +1 -1
  93. package/dist/ku4web-components/{p-6cfd9011.system.entry.js → p-24bf4b99.system.entry.js} +1 -1
  94. package/dist/ku4web-components/p-2da41fcc.entry.js +1 -0
  95. package/dist/ku4web-components/p-371ff218.entry.js +1 -0
  96. package/dist/ku4web-components/{p-7bfc256a.system.entry.js → p-3b70ff65.system.entry.js} +1 -1
  97. package/dist/ku4web-components/{p-e6b3a708.js → p-42dd73f2.js} +1 -1
  98. package/dist/ku4web-components/{p-0f03feb6.system.entry.js → p-4d4d3cc4.system.entry.js} +1 -1
  99. package/dist/ku4web-components/{p-073cefec.system.entry.js → p-53605e68.system.entry.js} +1 -1
  100. package/dist/ku4web-components/{p-91aa94d4.system.entry.js → p-5a6bad52.system.entry.js} +1 -1
  101. package/dist/ku4web-components/{p-881e100a.js → p-5e796581.js} +0 -0
  102. package/dist/ku4web-components/{p-10198308.system.entry.js → p-689b87db.system.entry.js} +1 -1
  103. package/dist/ku4web-components/p-6dad23e0.entry.js +1 -0
  104. package/dist/ku4web-components/{p-f3aedfdb.system.entry.js → p-72066e9d.system.entry.js} +1 -1
  105. package/dist/ku4web-components/{p-f3fbe1e6.entry.js → p-72219668.entry.js} +1 -1
  106. package/dist/ku4web-components/{p-2b3bb150.system.entry.js → p-774dbc9e.system.entry.js} +1 -1
  107. package/dist/ku4web-components/{p-96eccb13.system.entry.js → p-782336cd.system.entry.js} +1 -1
  108. package/dist/ku4web-components/{p-96ec7b4f.system.js → p-829fb4ce.system.js} +1 -1
  109. package/dist/ku4web-components/{p-9d241b2a.entry.js → p-8583d382.entry.js} +1 -1
  110. package/dist/ku4web-components/{p-99854682.system.entry.js → p-895853ef.system.entry.js} +1 -1
  111. package/dist/ku4web-components/{p-fbf3ad1e.system.js → p-8b2d8a2a.system.js} +0 -0
  112. package/dist/ku4web-components/{p-ecf7b1be.system.entry.js → p-97d806d2.system.entry.js} +1 -1
  113. package/dist/ku4web-components/{p-288482da.system.entry.js → p-9ba0f967.system.entry.js} +1 -1
  114. package/dist/ku4web-components/{p-bd251367.entry.js → p-a0dc0327.entry.js} +1 -1
  115. package/dist/ku4web-components/{p-6a40ccaa.entry.js → p-a5f54bc0.entry.js} +1 -1
  116. package/dist/ku4web-components/{p-d848909c.system.entry.js → p-a61f7c42.system.entry.js} +1 -1
  117. package/dist/ku4web-components/{p-47dc2714.entry.js → p-abcf4c43.entry.js} +1 -1
  118. package/dist/ku4web-components/{p-7ed66688.system.entry.js → p-b02eb970.system.entry.js} +1 -1
  119. package/dist/ku4web-components/{p-9bf34cc7.system.entry.js → p-bd83ef31.system.entry.js} +1 -1
  120. package/dist/ku4web-components/{p-c4479d3b.system.entry.js → p-d57468ab.system.entry.js} +1 -1
  121. package/dist/ku4web-components/p-d66b1c43.system.js +1 -0
  122. package/dist/ku4web-components/{p-579ff41b.system.entry.js → p-e550fd09.system.entry.js} +1 -1
  123. package/dist/ku4web-components/{p-3f2a008c.entry.js → p-e8d5dcce.entry.js} +1 -1
  124. package/dist/ku4web-components/p-eace33d2.system.entry.js +1 -0
  125. package/dist/ku4web-components/{p-320e2fe0.entry.js → p-ecf06d64.entry.js} +1 -1
  126. package/dist/ku4web-components/{p-5eadf115.entry.js → p-edfa2aea.entry.js} +1 -1
  127. package/dist/ku4web-components/{p-c798faf2.entry.js → p-f2a603c3.entry.js} +1 -1
  128. package/dist/ku4web-components/p-f6b9d36e.entry.js +1 -0
  129. package/dist/ku4web-components/{p-a352f533.system.js → p-f8a2bf9b.system.js} +1 -1
  130. package/dist/ku4web-components/{p-3f147a02.entry.js → p-fd6bcdde.entry.js} +1 -1
  131. package/dist/types/components/ku4-modal/ku4-modal.d.ts +5 -0
  132. package/dist/types/components.d.ts +10 -2
  133. package/package.json +31 -31
  134. package/react/index.js +1 -1
  135. package/react/index.mjs +1 -1
  136. package/vue/index.js +1 -1
  137. package/vue/index.mjs +1 -1
  138. package/vue3/index.js +1 -1
  139. package/vue3/index.mjs +1 -1
  140. package/dist/cjs/app-globals-3a1e7e63.js +0 -5
  141. package/dist/cjs/css-shim-6ca600c2.js +0 -6
  142. package/dist/cjs/dom-8d415461.js +0 -75
  143. package/dist/cjs/index-517c4086.js +0 -14
  144. package/dist/cjs/index-a530dbc9.js +0 -10
  145. package/dist/cjs/index-c904eb3a.js +0 -10
  146. package/dist/cjs/index-ca4336bd.js +0 -3093
  147. package/dist/cjs/uid-8ec2f63e.js +0 -11
  148. package/dist/collection/capabilities/a11y/aria.js +0 -26
  149. package/dist/collection/capabilities/angular/index.js +0 -24
  150. package/dist/collection/capabilities/decorators/deprecated.js +0 -20
  151. package/dist/collection/capabilities/decorators/index.js +0 -3
  152. package/dist/collection/capabilities/decorators/memoize.js +0 -7
  153. package/dist/collection/capabilities/dom/isFocusable.js +0 -7
  154. package/dist/collection/capabilities/dom/queryFocusable.js +0 -2
  155. package/dist/collection/capabilities/identity/uid.js +0 -6
  156. package/dist/collection/capabilities/mask/index.js +0 -5
  157. package/dist/collection/capabilities/mask/patterns/date.js +0 -40
  158. package/dist/collection/capabilities/mask/patterns/index.js +0 -7
  159. package/dist/collection/capabilities/react/index.js +0 -25
  160. package/dist/collection/capabilities/testing/html.js +0 -14
  161. package/dist/collection/capabilities/testing/styles.js +0 -14
  162. package/dist/collection/capabilities/vue/index.js +0 -28
  163. package/dist/collection/capabilities/vue3/index.js +0 -26
  164. package/dist/collection/collection-manifest.json +0 -31
  165. package/dist/collection/components/ku4-carousel/ku4-carousel.css +0 -221
  166. package/dist/collection/components/ku4-carousel/ku4-carousel.js +0 -369
  167. package/dist/collection/components/ku4-carousel-controls/ku4-carousel-controls.css +0 -32
  168. package/dist/collection/components/ku4-carousel-controls/ku4-carousel-controls.js +0 -112
  169. package/dist/collection/components/ku4-carousel-slide/ku4-carousel-slide.css +0 -3
  170. package/dist/collection/components/ku4-carousel-slide/ku4-carousel-slide.js +0 -159
  171. package/dist/collection/components/ku4-col/ku4-col.css +0 -601
  172. package/dist/collection/components/ku4-col/ku4-col.js +0 -288
  173. package/dist/collection/components/ku4-drawer/ku4-drawer.css +0 -56
  174. package/dist/collection/components/ku4-drawer/ku4-drawer.js +0 -163
  175. package/dist/collection/components/ku4-feature/ku4-feature.js +0 -70
  176. package/dist/collection/components/ku4-focus-trap/ku4-focus-trap.css +0 -3
  177. package/dist/collection/components/ku4-focus-trap/ku4-focus-trap.js +0 -441
  178. package/dist/collection/components/ku4-form/ku4-form.js +0 -225
  179. package/dist/collection/components/ku4-grid/ku4-grid.css +0 -751
  180. package/dist/collection/components/ku4-grid/ku4-grid.js +0 -408
  181. package/dist/collection/components/ku4-label/ku4-label.css +0 -36
  182. package/dist/collection/components/ku4-label/ku4-label.js +0 -115
  183. package/dist/collection/components/ku4-mask/ku4-mask.css +0 -3
  184. package/dist/collection/components/ku4-mask/ku4-mask.js +0 -458
  185. package/dist/collection/components/ku4-modal/ku4-modal.css +0 -85
  186. package/dist/collection/components/ku4-modal/ku4-modal.js +0 -208
  187. package/dist/collection/components/ku4-panel/ku4-panel.css +0 -14
  188. package/dist/collection/components/ku4-panel/ku4-panel.js +0 -119
  189. package/dist/collection/components/ku4-preview/ku4-preview.css +0 -23
  190. package/dist/collection/components/ku4-preview/ku4-preview.js +0 -266
  191. package/dist/collection/components/ku4-tab/ku4-tab.css +0 -82
  192. package/dist/collection/components/ku4-tab/ku4-tab.js +0 -191
  193. package/dist/collection/components/ku4-tab-list/ku4-tab-list.css +0 -6
  194. package/dist/collection/components/ku4-tab-list/ku4-tab-list.js +0 -118
  195. package/dist/collection/components/ku4-tab-panel/ku4-tab-panel.css +0 -26
  196. package/dist/collection/components/ku4-tab-panel/ku4-tab-panel.js +0 -166
  197. package/dist/collection/components/ku4-table/ku4-table.css +0 -116
  198. package/dist/collection/components/ku4-table/ku4-table.js +0 -120
  199. package/dist/collection/components/ku4-tooltip/ku4-tooltip.css +0 -56
  200. package/dist/collection/components/ku4-tooltip/ku4-tooltip.js +0 -274
  201. package/dist/collection/components/ku4-validation/ku4-validation.css +0 -19
  202. package/dist/collection/components/ku4-validation/ku4-validation.js +0 -364
  203. package/dist/collection/components/ku4-validation/validate.js +0 -14
  204. package/dist/collection/index.js +0 -1
  205. package/dist/collection/security.js +0 -27
  206. package/dist/esm/app-globals-0f993ce5.js +0 -3
  207. package/dist/esm/css-shim-e6dd2538.js +0 -4
  208. package/dist/esm/dom-7fc649b0.js +0 -73
  209. package/dist/esm/index-135dacad.js +0 -3
  210. package/dist/esm/index-316624d1.js +0 -3
  211. package/dist/esm/index-7fe386de.js +0 -3057
  212. package/dist/esm/index-7ff6e718.js +0 -3
  213. package/dist/esm/shadow-css-4d56fa31.js +0 -388
  214. package/dist/esm/uid-a7ff854d.js +0 -9
  215. package/dist/ku4web-components/app-globals-0f993ce5.js +0 -3
  216. package/dist/ku4web-components/app-globals-497eb362.system.js +0 -1
  217. package/dist/ku4web-components/css-shim-b6eec689.system.js +0 -1
  218. package/dist/ku4web-components/css-shim-e6dd2538.js +0 -4
  219. package/dist/ku4web-components/dom-7fc649b0.js +0 -73
  220. package/dist/ku4web-components/dom-88962da0.system.js +0 -21
  221. package/dist/ku4web-components/index-135dacad.js +0 -3
  222. package/dist/ku4web-components/index-5029fd1f.system.js +0 -1
  223. package/dist/ku4web-components/index-7d482e8a.system.js +0 -1
  224. package/dist/ku4web-components/index-7fe386de.js +0 -3057
  225. package/dist/ku4web-components/index-7ff6e718.js +0 -3
  226. package/dist/ku4web-components/index-dcd9a8a7.system.js +0 -1
  227. package/dist/ku4web-components/index.system.js +0 -1
  228. package/dist/ku4web-components/ku4-carousel-controls.entry.js +0 -89
  229. package/dist/ku4web-components/ku4-carousel-controls.system.entry.js +0 -1
  230. package/dist/ku4web-components/ku4-carousel-slide.entry.js +0 -47
  231. package/dist/ku4web-components/ku4-carousel-slide.system.entry.js +0 -1
  232. package/dist/ku4web-components/ku4-carousel.entry.js +0 -175
  233. package/dist/ku4web-components/ku4-carousel.system.entry.js +0 -1
  234. package/dist/ku4web-components/ku4-col.entry.js +0 -75
  235. package/dist/ku4web-components/ku4-col.system.entry.js +0 -1
  236. package/dist/ku4web-components/ku4-drawer.entry.js +0 -35
  237. package/dist/ku4web-components/ku4-drawer.system.entry.js +0 -1
  238. package/dist/ku4web-components/ku4-feature.entry.js +0 -29
  239. package/dist/ku4web-components/ku4-feature.system.entry.js +0 -1
  240. package/dist/ku4web-components/ku4-focus-trap.entry.js +0 -323
  241. package/dist/ku4web-components/ku4-focus-trap.system.entry.js +0 -1
  242. package/dist/ku4web-components/ku4-form.entry.js +0 -112
  243. package/dist/ku4web-components/ku4-form.system.entry.js +0 -1
  244. package/dist/ku4web-components/ku4-grid.entry.js +0 -108
  245. package/dist/ku4web-components/ku4-grid.system.entry.js +0 -1
  246. package/dist/ku4web-components/ku4-label.entry.js +0 -70
  247. package/dist/ku4web-components/ku4-label.system.entry.js +0 -1
  248. package/dist/ku4web-components/ku4-mask.entry.js +0 -342
  249. package/dist/ku4web-components/ku4-mask.system.entry.js +0 -1
  250. package/dist/ku4web-components/ku4-modal.entry.js +0 -75
  251. package/dist/ku4web-components/ku4-modal.system.entry.js +0 -1
  252. package/dist/ku4web-components/ku4-panel.entry.js +0 -49
  253. package/dist/ku4web-components/ku4-panel.system.entry.js +0 -1
  254. package/dist/ku4web-components/ku4-preview.entry.js +0 -128
  255. package/dist/ku4web-components/ku4-preview.system.entry.js +0 -1
  256. package/dist/ku4web-components/ku4-tab-list.entry.js +0 -76
  257. package/dist/ku4web-components/ku4-tab-list.system.entry.js +0 -1
  258. package/dist/ku4web-components/ku4-tab-panel.entry.js +0 -72
  259. package/dist/ku4web-components/ku4-tab-panel.system.entry.js +0 -1
  260. package/dist/ku4web-components/ku4-tab.entry.js +0 -63
  261. package/dist/ku4web-components/ku4-tab.system.entry.js +0 -1
  262. package/dist/ku4web-components/ku4-table.entry.js +0 -79
  263. package/dist/ku4web-components/ku4-table.system.entry.js +0 -1
  264. package/dist/ku4web-components/ku4-tooltip.entry.js +0 -120
  265. package/dist/ku4web-components/ku4-tooltip.system.entry.js +0 -1
  266. package/dist/ku4web-components/ku4-validation.entry.js +0 -162
  267. package/dist/ku4web-components/ku4-validation.system.entry.js +0 -1
  268. package/dist/ku4web-components/ku4web-components.system.js +0 -1
  269. package/dist/ku4web-components/p-0f77bef9.system.js +0 -1
  270. package/dist/ku4web-components/p-171182e4.entry.js +0 -1
  271. package/dist/ku4web-components/p-7e69d158.entry.js +0 -1
  272. package/dist/ku4web-components/p-9da3612f.entry.js +0 -1
  273. package/dist/ku4web-components/p-b3c3b463.entry.js +0 -1
  274. package/dist/ku4web-components/p-b3c3d932.entry.js +0 -1
  275. package/dist/ku4web-components/p-ba9edd72.js +0 -1
  276. package/dist/ku4web-components/p-e356b3c1.system.entry.js +0 -1
  277. package/dist/ku4web-components/shadow-css-d0426811.system.js +0 -13
  278. package/dist/ku4web-components/uid-3373ce49.system.js +0 -1
  279. package/dist/ku4web-components/uid-a7ff854d.js +0 -9
@@ -1,441 +0,0 @@
1
- import { Component, Prop, Method, Watch, Element, h } from '@stencil/core';
2
- import { Assert, deduplicate } from 'ku4es-kernel';
3
- import { Event, Key } from 'ku4es-ui-kernel';
4
- import { ariaHidden } from '../../capabilities/a11y/aria';
5
- import isFocusable from '../../capabilities/dom/isFocusable';
6
- import { queryTabbable, queryFocusable } from '../../capabilities/dom/queryFocusable';
7
- const { tab } = Key;
8
- const tabShift = Key.tab.shift;
9
- const tabAlt = Key.tab.alt;
10
- const tabAltShift = Key.tab.alt.shift;
11
- /**
12
- * @description ku4-focus-trap
13
- */
14
- export class Ku4FocusTrap {
15
- constructor() {
16
- this.iframes = [];
17
- /**
18
- * Focus trap will be active when true.
19
- */
20
- this.active = false;
21
- this.handleKeyDown = this.handleKeyDown.bind(this);
22
- this.handleKeyUp = this.handleKeyUp.bind(this);
23
- this.handleMouse = this.handleMouse.bind(this);
24
- }
25
- activeHandler(value) {
26
- value ? this.handleActivate() : this.handleDeactivate();
27
- }
28
- /**
29
- * Activate focus trap
30
- * @param {Element} [element] - Element to return focus to when trap is deactivated.
31
- */
32
- async activate(element) {
33
- this.lastActiveElement = element || document.querySelector(this.return || null);
34
- this.active = true;
35
- }
36
- /**
37
- * Deactivate focus trap.
38
- */
39
- async deactivate() {
40
- this.active = false;
41
- }
42
- handleActivate() {
43
- this.lastActiveElement = this.lastActiveElement || document.activeElement;
44
- if (this.lastActiveElement && this.lastActiveElement.blur) {
45
- this.lastActiveElement.blur();
46
- }
47
- this.addEventListeners(this.elements);
48
- ariaHidden(this.outerElements, true);
49
- window.requestAnimationFrame(() => {
50
- const element = (document.querySelector(this.initial || null) ||
51
- this.focusableElements[0] ||
52
- this.trapElements[0]);
53
- element.blur();
54
- element.focus();
55
- this.activateTraps();
56
- });
57
- }
58
- handleDeactivate() {
59
- this.removeEventListeners(this.elements);
60
- this.deactivateTraps();
61
- ariaHidden(this.outerElements);
62
- if (this.lastActiveElement && this.lastActiveElement.focus) {
63
- this.lastActiveElement.focus();
64
- }
65
- this.lastActiveElement = null;
66
- }
67
- // Handles keydown and mutes the event if it occurs on a focusable
68
- // item that is in the focus trap. This allows this block to force
69
- // the decision as to who will get next focus and not let that
70
- // decisioning fall out to the browser.
71
- handleKeyDown(e) {
72
- if ((tabShift.didFire(e) || tabAltShift.didFire(e))) {
73
- try {
74
- if (this.iframes.length > 0 && (this.trapElements[1] === e.target ||
75
- !Assert.isNull(e.target.getAttribute('ku4-focus-wrap')) ||
76
- this.iframes.some(iframe => iframe.contains(e.target)))) {
77
- return;
78
- }
79
- if (this.trapElements[0] === e.target) {
80
- this.trapElements[1].focus();
81
- return Event.mute(e);
82
- }
83
- const nextIndex = this.focusableElements.indexOf(e.target) - 1;
84
- const next = nextIndex < 0 ? this.focusableElements.length - 1 : nextIndex;
85
- this.focusableElements[next].focus();
86
- return Event.mute(e);
87
- }
88
- catch (e) {
89
- return Event.mute(e);
90
- }
91
- }
92
- if ((tab.didFire(e) || tabAlt.didFire(e))) {
93
- try {
94
- if (this.iframes.length > 0 && (this.trapElements[0] === e.target ||
95
- !Assert.isNull(e.target.getAttribute('ku4-focus-wrap')) ||
96
- this.iframes.some(iframe => iframe.contains(e.target)))) {
97
- return;
98
- }
99
- if (this.trapElements[1] === e.target) {
100
- this.trapElements[0].focus();
101
- return Event.mute(e);
102
- }
103
- const nextIndex = this.focusableElements.indexOf(e.target) + 1;
104
- const next = nextIndex >= this.focusableElements.length ? 0 : nextIndex;
105
- this.focusableElements[next].focus();
106
- return Event.mute(e);
107
- }
108
- catch (e) {
109
- return Event.mute(e);
110
- }
111
- }
112
- }
113
- // Handles keyup and mutes the event if it occurs on a focusable
114
- // item that is in the focus trap. This allows for us to determine
115
- // if we need to move to the next focusable if the key is released
116
- // on one of the trapElements (the two dynamically created wrapper
117
- // elements that create the trap);
118
- handleKeyUp(e) {
119
- const index = this.trapElements.indexOf(e.target);
120
- if (index === 0 && (tabShift.didFire(e) || tabAltShift.didFire(e))) {
121
- const element = this.focusableElements[this.focusableElements.length - 1] || this.trapElements[1];
122
- element.focus();
123
- return Event.mute(e);
124
- }
125
- if (index === 1 && (tab.didFire(e) || tabAlt.didFire(e))) {
126
- const element = this.focusableElements[0] || this.trapElements[0];
127
- element.focus();
128
- return Event.mute(e);
129
- }
130
- }
131
- // Prevents all mouse activity on any elements that are not focusable
132
- // inside of the active trap.
133
- handleMouse(e) {
134
- if (!this.elements.some(element => element === e.target)) {
135
- Event.mute(e);
136
- }
137
- }
138
- addEventListeners(elements) {
139
- elements.forEach(element => element.addEventListener('keydown', this.handleKeyDown, { passive: true }));
140
- elements.forEach(element => element.addEventListener('keyup', this.handleKeyUp, { passive: true }));
141
- window.addEventListener('click', this.handleMouse, { passive: true });
142
- window.addEventListener('mousedown', this.handleMouse, { passive: true });
143
- window.addEventListener('mouseup', this.handleMouse, { passive: true });
144
- window.addEventListener('touchstart', this.handleMouse, { passive: true });
145
- }
146
- removeEventListeners(elements) {
147
- elements.forEach(element => element.removeEventListener('keydown', this.handleKeyDown, true));
148
- elements.forEach(element => element.removeEventListener('keyup', this.handleKeyUp, true));
149
- window.removeEventListener('click', this.handleMouse, true);
150
- window.removeEventListener('mousedown', this.handleMouse, true);
151
- window.removeEventListener('mouseup', this.handleMouse, true);
152
- window.addEventListener('touchstart', this.handleMouse, true);
153
- }
154
- activateTraps() {
155
- this.setTraps(0);
156
- }
157
- deactivateTraps() {
158
- this.setTraps(-1);
159
- }
160
- setTraps(value) {
161
- [].slice.call(this.host.querySelectorAll('[ku4-focus-trap], [ku4-focus-wrap]'))
162
- .forEach(element => element.setAttribute('tabindex', value));
163
- }
164
- wrap(element) {
165
- const fragment = document.createDocumentFragment();
166
- fragment.appendChild(this.createWrapTag());
167
- fragment.appendChild(element.cloneNode());
168
- fragment.appendChild(this.createWrapTag());
169
- element.parentNode.replaceChild(fragment, element);
170
- }
171
- createTrapTag() {
172
- return this.createTag('ku4-focus-trap');
173
- }
174
- createWrapTag() {
175
- return this.createTag('ku4-focus-wrap');
176
- }
177
- createTag(type) {
178
- const trap = document.createElement('button');
179
- trap.setAttribute(type, '');
180
- trap.setAttribute('tabindex', '0');
181
- trap.setAttribute('aria-hidden', 'true');
182
- trap.style.position = 'static';
183
- trap.style.display = 'block';
184
- trap.style.width = '0';
185
- trap.style.height = '0';
186
- trap.style.margin = '0';
187
- trap.style.padding = '0';
188
- trap.style.border = 'none';
189
- trap.style.outline = 'none';
190
- return trap;
191
- }
192
- initialize() {
193
- // All elements in this focus-trap
194
- const innerElements = [].slice.call(this.host.querySelectorAll('*'));
195
- // May need to break this out as it is really included for the mouse events
196
- // e.g. for an overlay on a modal to make that clickable that is make it
197
- // so this does not include it for muting the mouse events. This component
198
- // is very powerful in shutting everything down and needs to allow for
199
- // the ability to let items be clickable.
200
- const inclusions = [].slice.call(document.querySelectorAll(this.include || null) || []);
201
- // May need to break this out as it is really here to explicitly exclude items from
202
- // being read out by screen readers. That is make them hidden so that screen
203
- // readers get the same treatment as regular users.
204
- const exclusions = [].slice.call(document.querySelectorAll(this.exclude) || []);
205
- let shadowExclusions = [];
206
- (this.excludeShadow || '').split(',').forEach((selector) => {
207
- if (Assert.isNullOrEmpty(selector)) {
208
- return;
209
- }
210
- try {
211
- const parts = selector.trim().replace(/\s/, '|').split('|');
212
- const shadowElements = document.querySelector(parts[0]).shadowRoot.querySelectorAll(parts[1]);
213
- shadowExclusions = shadowExclusions.concat([].slice.call(shadowElements || []));
214
- }
215
- catch (e) {
216
- // eslint-disable-next-line no-console
217
- console.error('Invalid shadow selector', selector);
218
- }
219
- });
220
- // Get all of the iframes as we cannot reach into them to find
221
- // their focusable elements. We can only focus on the trap elements
222
- // that wrap it
223
- this.iframes = [].slice.call(this.host.querySelectorAll('iframe') || []);
224
- this.iframes.forEach(iframe => this.wrap(iframe));
225
- // Set element in this trap deduplicating any that may have been duplicated
226
- // with careless user inclusions.
227
- this.elements = deduplicate([...queryTabbable(this.host), ...inclusions]);
228
- // Get the focusable elements. This may be overkill as we really only need
229
- // to know the first and last focusable. If that is the case, we may be
230
- // able to just use the first and last `this.element` it is still not clear.
231
- this.focusableElements = this.elements
232
- .reduce((acc, value) => {
233
- if (isFocusable(value) && !this.trapElements.includes(value)) {
234
- acc.push(value);
235
- }
236
- return acc;
237
- }, []);
238
- /**
239
- * We can not currently do this this way because MSEdge
240
- * is reordering querySelectorAll items such that they
241
- * not selecting in DOM order. If/when we dump support
242
- * for MSEdge (non Chromium) or it fixes support we
243
- * can move to this more efficient way. Until then, we
244
- * need to use the && condition .includes in the
245
- * `reduce` above. It will be more efficient to do it
246
- * the below way when we can.
247
- */
248
- // this.focusableElements.shift();
249
- // this.focusableElements.pop();
250
- //This may need to be defied more specifically as a11y as it is needed
251
- //for the screen reader capabilities and may be interfering with
252
- //regular usage.
253
- this.outerElements = [...queryFocusable(document.body), ...exclusions, ...shadowExclusions]
254
- .filter(element => !(element === this.host ||
255
- innerElements.includes(element) ||
256
- inclusions.includes(element)));
257
- }
258
- componentDidLoad() {
259
- const trapStart = this.createTrapTag();
260
- const trapEnd = this.createTrapTag();
261
- this.trapElements = [trapStart, trapEnd];
262
- this.host.insertBefore(trapStart, this.host.firstChild);
263
- this.host.appendChild(trapEnd);
264
- this.initialize();
265
- if (this.active) {
266
- this.handleActivate();
267
- }
268
- else {
269
- this.handleDeactivate();
270
- }
271
- }
272
- disconnectedCallback() {
273
- if (this.active) {
274
- this.handleDeactivate();
275
- }
276
- }
277
- render() {
278
- return h("slot", null);
279
- }
280
- static get is() { return "ku4-focus-trap"; }
281
- static get encapsulation() { return "shadow"; }
282
- static get originalStyleUrls() { return {
283
- "$": ["ku4-focus-trap.scss"]
284
- }; }
285
- static get styleUrls() { return {
286
- "$": ["ku4-focus-trap.css"]
287
- }; }
288
- static get properties() { return {
289
- "active": {
290
- "type": "boolean",
291
- "mutable": true,
292
- "complexType": {
293
- "original": "boolean",
294
- "resolved": "boolean",
295
- "references": {}
296
- },
297
- "required": false,
298
- "optional": false,
299
- "docs": {
300
- "tags": [],
301
- "text": "Focus trap will be active when true."
302
- },
303
- "attribute": "active",
304
- "reflect": true,
305
- "defaultValue": "false"
306
- },
307
- "include": {
308
- "type": "string",
309
- "mutable": false,
310
- "complexType": {
311
- "original": "string",
312
- "resolved": "string",
313
- "references": {}
314
- },
315
- "required": false,
316
- "optional": false,
317
- "docs": {
318
- "tags": [],
319
- "text": "A querySelector of elements to include in the trap that\nare not children of this focus trap. This can be useful\nfor specific situations such as modal overlays."
320
- },
321
- "attribute": "include",
322
- "reflect": false
323
- },
324
- "exclude": {
325
- "type": "string",
326
- "mutable": false,
327
- "complexType": {
328
- "original": "string",
329
- "resolved": "string",
330
- "references": {}
331
- },
332
- "required": false,
333
- "optional": false,
334
- "docs": {
335
- "tags": [],
336
- "text": "A querySelector of elements to explicitly exclude. This\ncan be useful for greedy accessibility apis and screen\nreader fallover. Pass a comma delimited string of multiple\nselectors to target multiple exclusions."
337
- },
338
- "attribute": "exclude",
339
- "reflect": false
340
- },
341
- "excludeShadow": {
342
- "type": "string",
343
- "mutable": false,
344
- "complexType": {
345
- "original": "string",
346
- "resolved": "string",
347
- "references": {}
348
- },
349
- "required": false,
350
- "optional": false,
351
- "docs": {
352
- "tags": [],
353
- "text": "A querySelector of shadow elements to explicitly exclude. This\ncan be useful for greedy accessibility apis and screen\nreader fallover. Pass a comma delimited string of multiple\nselectors to target multiple exclusions. Pass selectors that\nstarts with the target components host lightDom element\nE.g. `'ku4-carousel .next, ku4-carousel .prev'` will explicitly\nexclude the target ku4-carousel next and previous buttons from\nbeing navigable by greedy accessibility tools, i.e. VoiceOver."
354
- },
355
- "attribute": "exclude-shadow",
356
- "reflect": false
357
- },
358
- "initial": {
359
- "type": "string",
360
- "mutable": false,
361
- "complexType": {
362
- "original": "string",
363
- "resolved": "string",
364
- "references": {}
365
- },
366
- "required": false,
367
- "optional": false,
368
- "docs": {
369
- "tags": [],
370
- "text": "A querySelector of element to initially focus"
371
- },
372
- "attribute": "initial",
373
- "reflect": false
374
- },
375
- "return": {
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 querySelector of element to return focus to"
388
- },
389
- "attribute": "return",
390
- "reflect": false
391
- }
392
- }; }
393
- static get methods() { return {
394
- "activate": {
395
- "complexType": {
396
- "signature": "(element?: any) => Promise<void>",
397
- "parameters": [{
398
- "tags": [{
399
- "name": "param",
400
- "text": "element - Element to return focus to when trap is deactivated."
401
- }],
402
- "text": "- Element to return focus to when trap is deactivated."
403
- }],
404
- "references": {
405
- "Promise": {
406
- "location": "global"
407
- }
408
- },
409
- "return": "Promise<void>"
410
- },
411
- "docs": {
412
- "text": "Activate focus trap",
413
- "tags": [{
414
- "name": "param",
415
- "text": "element - Element to return focus to when trap is deactivated."
416
- }]
417
- }
418
- },
419
- "deactivate": {
420
- "complexType": {
421
- "signature": "() => Promise<void>",
422
- "parameters": [],
423
- "references": {
424
- "Promise": {
425
- "location": "global"
426
- }
427
- },
428
- "return": "Promise<void>"
429
- },
430
- "docs": {
431
- "text": "Deactivate focus trap.",
432
- "tags": []
433
- }
434
- }
435
- }; }
436
- static get elementRef() { return "host"; }
437
- static get watchers() { return [{
438
- "propName": "active",
439
- "methodName": "activeHandler"
440
- }]; }
441
- }
@@ -1,225 +0,0 @@
1
- import { Component, Method, Element, h, Prop } from '@stencil/core';
2
- import { Assert } from 'ku4es-kernel';
3
- import { form } from 'ku4es-ui-kernel';
4
- /**
5
- * @description ku4-form
6
- */
7
- export class Ku4Form {
8
- constructor() {
9
- this.validate = this.validate.bind(this);
10
- this.handleReset = this.handleReset.bind(this);
11
- }
12
- /**
13
- * Returns a list of the names of all of the fields
14
- * associated with this form.
15
- */
16
- async listFieldNames() {
17
- return form.readFieldNames(this.form);
18
- }
19
- /**
20
- * Validates this form. This method is automatically called
21
- * internally on submit of the form only allowing a successful
22
- * submit if the form is valid.
23
- */
24
- async validate() {
25
- const { fields } = this;
26
- const methods = fields.map(field => field.validate());
27
- this.isValid = await Promise.all(methods).then(values => !values.some(v => v === false));
28
- this.invalid = !this.isValid;
29
- return this.isValid;
30
- }
31
- /**
32
- * A string of the name of the field to invalidate
33
- * @param {string} name
34
- */
35
- async invalidate(name) {
36
- if (Assert.isArray(name)) {
37
- name.forEach((name) => {
38
- const field = this.fields.find(field => field.for === name);
39
- if (field) {
40
- field.invalid = true;
41
- }
42
- });
43
- }
44
- else {
45
- const field = this.fields.find(field => field.for === name);
46
- if (field) {
47
- field.invalid = true;
48
- }
49
- }
50
- this.invalid = true;
51
- return this;
52
- }
53
- /**
54
- * Reads data from the associated form
55
- */
56
- async read() {
57
- return form.read(this.form);
58
- }
59
- /**
60
- * Writes data to the associated form
61
- */
62
- async write(data) {
63
- form.write(this.form, data);
64
- Object.keys(data).forEach((name) => {
65
- try {
66
- this.form.querySelector(`[name="${name}"]`)
67
- .dispatchEvent(new Event('change'));
68
- }
69
- catch (e) {
70
- /* Fail silently */
71
- }
72
- });
73
- return this;
74
- }
75
- get form() {
76
- return this.host.querySelector('form');
77
- }
78
- get fields() {
79
- return [].slice.call(this.form.querySelectorAll('ku4-validation'));
80
- }
81
- handleReset() {
82
- this.isValid = true;
83
- this.invalid = !this.isValid;
84
- }
85
- componentWillLoad() {
86
- const { form } = this;
87
- if (Assert.exists(form)) {
88
- const onsubmit = form.onsubmit || (() => { });
89
- form.onsubmit = (e) => {
90
- e.preventDefault();
91
- this.validate()
92
- .then(valid => valid && onsubmit.call(form, e))
93
- .then(returnValue => !Assert.isFalse(returnValue) && form.submit());
94
- return false;
95
- };
96
- form.addEventListener('reset', this.handleReset);
97
- this.fields.forEach(field => field.addEventListener('validated', this.validate));
98
- }
99
- }
100
- disconnectedCallback() {
101
- const { form } = this;
102
- if (Assert.exists(form)) {
103
- form.removeEventListener('reset', this.handleReset);
104
- this.fields.forEach(field => field.removeEventListener('validated', this.validate));
105
- }
106
- }
107
- render() {
108
- return h("slot", null);
109
- }
110
- static get is() { return "ku4-form"; }
111
- static get properties() { return {
112
- "invalid": {
113
- "type": "boolean",
114
- "mutable": true,
115
- "complexType": {
116
- "original": "boolean",
117
- "resolved": "boolean",
118
- "references": {}
119
- },
120
- "required": false,
121
- "optional": false,
122
- "docs": {
123
- "tags": [],
124
- "text": "Set to true to display as invalid"
125
- },
126
- "attribute": "invalid",
127
- "reflect": true
128
- }
129
- }; }
130
- static get methods() { return {
131
- "listFieldNames": {
132
- "complexType": {
133
- "signature": "() => Promise<any>",
134
- "parameters": [],
135
- "references": {
136
- "Promise": {
137
- "location": "global"
138
- }
139
- },
140
- "return": "Promise<any>"
141
- },
142
- "docs": {
143
- "text": "Returns a list of the names of all of the fields\nassociated with this form.",
144
- "tags": []
145
- }
146
- },
147
- "validate": {
148
- "complexType": {
149
- "signature": "() => Promise<any>",
150
- "parameters": [],
151
- "references": {
152
- "Promise": {
153
- "location": "global"
154
- }
155
- },
156
- "return": "Promise<any>"
157
- },
158
- "docs": {
159
- "text": "Validates this form. This method is automatically called\ninternally on submit of the form only allowing a successful\nsubmit if the form is valid.",
160
- "tags": []
161
- }
162
- },
163
- "invalidate": {
164
- "complexType": {
165
- "signature": "(name: any) => Promise<this>",
166
- "parameters": [{
167
- "tags": [{
168
- "name": "param",
169
- "text": "name"
170
- }],
171
- "text": ""
172
- }],
173
- "references": {
174
- "Promise": {
175
- "location": "global"
176
- }
177
- },
178
- "return": "Promise<this>"
179
- },
180
- "docs": {
181
- "text": "A string of the name of the field to invalidate",
182
- "tags": [{
183
- "name": "param",
184
- "text": "name"
185
- }]
186
- }
187
- },
188
- "read": {
189
- "complexType": {
190
- "signature": "() => Promise<any>",
191
- "parameters": [],
192
- "references": {
193
- "Promise": {
194
- "location": "global"
195
- }
196
- },
197
- "return": "Promise<any>"
198
- },
199
- "docs": {
200
- "text": "Reads data from the associated form",
201
- "tags": []
202
- }
203
- },
204
- "write": {
205
- "complexType": {
206
- "signature": "(data: any) => Promise<this>",
207
- "parameters": [{
208
- "tags": [],
209
- "text": ""
210
- }],
211
- "references": {
212
- "Promise": {
213
- "location": "global"
214
- }
215
- },
216
- "return": "Promise<this>"
217
- },
218
- "docs": {
219
- "text": "Writes data to the associated form",
220
- "tags": []
221
- }
222
- }
223
- }; }
224
- static get elementRef() { return "host"; }
225
- }