@watermarkinsights/ripple 5.7.0-8 → 5.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (383) hide show
  1. package/dist/cjs/{chartFunctions-d2a1f4c7.js → chartFunctions-995023b1.js} +3 -3
  2. package/dist/cjs/{functions-5ac8a62f.js → functions-e24249e6.js} +7 -104
  3. package/dist/{esm/app-globals-0f27630e.js → cjs/global-eddf4e56.js} +2 -7
  4. package/dist/cjs/index-e86c28b6.js +2649 -0
  5. package/dist/cjs/{intl-57d1cfd1.js → intl-5aeba788.js} +1 -1
  6. package/dist/cjs/loader.cjs.js +4 -5
  7. package/dist/cjs/priv-calendar.cjs.entry.js +5 -6
  8. package/dist/cjs/priv-chart-popover.cjs.entry.js +5 -6
  9. package/dist/cjs/priv-navigator-button.cjs.entry.js +3 -4
  10. package/dist/cjs/priv-navigator-item.cjs.entry.js +3 -4
  11. package/dist/cjs/priv-option-list.cjs.entry.js +21 -7
  12. package/dist/cjs/ripple.cjs.js +12 -13
  13. package/dist/cjs/wm-action-menu_2.cjs.entry.js +6 -8
  14. package/dist/cjs/wm-button.cjs.entry.js +4 -5
  15. package/dist/cjs/wm-chart-slice.cjs.entry.js +1 -1
  16. package/dist/cjs/wm-chart.cjs.entry.js +6 -7
  17. package/dist/cjs/wm-date-range.cjs.entry.js +8 -9
  18. package/dist/cjs/wm-datepicker.cjs.entry.js +8 -9
  19. package/dist/cjs/wm-file-list.cjs.entry.js +3 -4
  20. package/dist/cjs/wm-file.cjs.entry.js +4 -5
  21. package/dist/cjs/wm-input.cjs.entry.js +5 -6
  22. package/dist/cjs/wm-line-chart.cjs.entry.js +14 -15
  23. package/dist/cjs/wm-modal-pss_3.cjs.entry.js +28 -30
  24. package/dist/cjs/wm-modal_3.cjs.entry.js +10 -13
  25. package/dist/cjs/wm-navigation_3.cjs.entry.js +10 -13
  26. package/dist/cjs/wm-navigator.cjs.entry.js +3 -4
  27. package/dist/cjs/wm-nested-select.cjs.entry.js +29 -21
  28. package/dist/cjs/wm-optgroup.cjs.entry.js +4 -5
  29. package/dist/cjs/wm-option_2.cjs.entry.js +9 -11
  30. package/dist/cjs/wm-pagination.cjs.entry.js +4 -5
  31. package/dist/cjs/wm-progress-indicator_3.cjs.entry.js +7 -9
  32. package/dist/cjs/wm-search.cjs.entry.js +6 -7
  33. package/dist/cjs/wm-snackbar.cjs.entry.js +6 -7
  34. package/dist/cjs/wm-tab-item_3.cjs.entry.js +8 -11
  35. package/dist/cjs/wm-tag-input.cjs.entry.js +7 -8
  36. package/dist/cjs/wm-tag-option.cjs.entry.js +2 -2
  37. package/dist/cjs/wm-textarea.cjs.entry.js +5 -6
  38. package/dist/cjs/wm-timepicker.cjs.entry.js +5 -6
  39. package/dist/cjs/wm-toggletip.cjs.entry.js +5 -6
  40. package/dist/cjs/wm-uploader.cjs.entry.js +6 -7
  41. package/dist/cjs/wm-wrapper.cjs.entry.js +1 -1
  42. package/dist/collection/collection-manifest.json +2 -2
  43. package/dist/collection/components/charts/chartFunctions.js +1 -1
  44. package/dist/collection/components/charts/chartFunctions.spec.js +16 -0
  45. package/dist/collection/components/charts/priv-chart-popover/priv-chart-popover.e2e.js +81 -0
  46. package/dist/collection/components/charts/priv-chart-popover/priv-chart-popover.js +2 -2
  47. package/dist/collection/components/charts/screenshots.e2e.js +96 -0
  48. package/dist/collection/components/charts/wm-chart/wm-chart.e2e.js +213 -0
  49. package/dist/collection/components/charts/wm-chart/wm-chart.js +1 -1
  50. package/dist/collection/components/charts/wm-chart/wm-chart.spec.js +37 -0
  51. package/dist/collection/components/charts/wm-line-chart/wm-line-chart.e2e.js +176 -0
  52. package/dist/collection/components/charts/wm-line-chart/wm-line-chart.js +9 -9
  53. package/dist/collection/components/charts/wm-line-chart/wm-line-chart.spec.js +163 -0
  54. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-indicator.js +1 -1
  55. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-monitor.e2e.js +69 -0
  56. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-monitor.js +1 -1
  57. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-monitor.spec.js +79 -0
  58. package/dist/collection/components/datepickers/priv-calendar/priv-calendar.js +2 -2
  59. package/dist/collection/components/datepickers/priv-calendar/priv-calendar.spec.js +89 -0
  60. package/dist/collection/components/datepickers/wm-date-range.e2e.js +443 -0
  61. package/dist/collection/components/datepickers/wm-date-range.js +13 -17
  62. package/dist/collection/components/datepickers/wm-date-range.spec.js +22 -0
  63. package/dist/collection/components/datepickers/wm-datepicker.e2e.js +382 -0
  64. package/dist/collection/components/datepickers/wm-datepicker.js +13 -17
  65. package/dist/collection/components/datepickers/wm-datepicker.spec.js +21 -0
  66. package/dist/collection/components/selects/priv-option-list/priv-option-list.css +26 -6
  67. package/dist/collection/components/selects/priv-option-list/priv-option-list.js +21 -8
  68. package/dist/collection/components/selects/wm-nested-select/wm-nested-select.css +5 -5
  69. package/dist/collection/components/selects/wm-nested-select/wm-nested-select.js +26 -16
  70. package/dist/collection/components/selects/wm-optgroup/wm-optgroup.js +1 -1
  71. package/dist/collection/components/selects/wm-option/wm-option.e2e.js +22 -0
  72. package/dist/collection/components/selects/wm-option/wm-option.js +1 -1
  73. package/dist/collection/components/selects/wm-option/wm-option.spec.js +63 -0
  74. package/dist/collection/components/selects/wm-select/wm-select.css +3 -3
  75. package/dist/collection/components/selects/wm-select/wm-select.e2e.js +521 -0
  76. package/dist/collection/components/selects/wm-select/wm-select.js +2 -2
  77. package/dist/collection/components/selects/wm-select/wm-select.spec.js +271 -0
  78. package/dist/collection/components/wm-action-menu/wm-action-menu.e2e.js +200 -0
  79. package/dist/collection/components/wm-action-menu/wm-action-menu.js +1 -1
  80. package/dist/collection/components/wm-action-menu/wm-action-menu.spec.js +48 -0
  81. package/dist/collection/components/wm-button/wm-button.e2e.js +55 -0
  82. package/dist/collection/components/wm-button/wm-button.js +1 -1
  83. package/dist/collection/components/wm-button/wm-button.spec.js +74 -0
  84. package/dist/collection/components/wm-file/wm-file.js +1 -1
  85. package/dist/collection/components/wm-file/wm-file.spec.js +194 -0
  86. package/dist/collection/components/wm-file-list/wm-file-list.js +1 -1
  87. package/dist/collection/components/wm-file-list/wm-file-list.spec.js +69 -0
  88. package/dist/collection/components/wm-input/wm-input.e2e.js +32 -0
  89. package/dist/collection/components/wm-input/wm-input.js +1 -1
  90. package/dist/collection/components/wm-input/wm-input.spec.js +173 -0
  91. package/dist/collection/components/wm-menuitem/wm-menuitem.e2e.js +23 -0
  92. package/dist/collection/components/wm-menuitem/wm-menuitem.js +1 -1
  93. package/dist/collection/components/wm-menuitem/wm-menuitem.spec.js +54 -0
  94. package/dist/collection/components/wm-modal/wm-modal-footer.js +1 -1
  95. package/dist/collection/components/wm-modal/wm-modal-footer.spec.js +11 -0
  96. package/dist/collection/components/wm-modal/wm-modal-header.js +1 -1
  97. package/dist/collection/components/wm-modal/wm-modal-header.spec.js +8 -0
  98. package/dist/collection/components/wm-modal/wm-modal.e2e.js +104 -0
  99. package/dist/collection/components/wm-modal/wm-modal.js +2 -2
  100. package/dist/collection/components/wm-modal/wm-modal.spec.js +30 -0
  101. package/dist/collection/components/wm-modal-pss/wm-modal-pss-footer.css +12 -0
  102. package/dist/collection/components/wm-modal-pss/wm-modal-pss-footer.js +2 -2
  103. package/dist/collection/components/wm-modal-pss/wm-modal-pss-header.css +12 -0
  104. package/dist/collection/components/wm-modal-pss/wm-modal-pss-header.js +3 -2
  105. package/dist/collection/components/wm-modal-pss/wm-modal-pss.css +16 -2
  106. package/dist/collection/components/wm-modal-pss/wm-modal-pss.js +14 -13
  107. package/dist/collection/components/wm-navigation/wm-navigation-hamburger.js +1 -1
  108. package/dist/collection/components/wm-navigation/wm-navigation-item.js +1 -1
  109. package/dist/collection/components/wm-navigation/wm-navigation.e2e.js +102 -0
  110. package/dist/collection/components/wm-navigation/wm-navigation.js +2 -2
  111. package/dist/collection/components/wm-navigation/wm-navigation.spec.js +91 -0
  112. package/dist/collection/components/wm-navigator/priv-navigator-button/priv-navigator-button.e2e.js +50 -0
  113. package/dist/collection/components/wm-navigator/priv-navigator-button/priv-navigator-button.js +1 -1
  114. package/dist/collection/components/wm-navigator/priv-navigator-item/priv-navigator-item.js +1 -1
  115. package/dist/collection/components/wm-navigator/wm-navigator.e2e.js +209 -0
  116. package/dist/collection/components/wm-navigator/wm-navigator.spec.js +177 -0
  117. package/dist/collection/components/wm-pagination/wm-pagination.e2e.js +312 -0
  118. package/dist/collection/components/wm-pagination/wm-pagination.js +1 -1
  119. package/dist/collection/components/wm-search/wm-search.e2e.js +76 -0
  120. package/dist/collection/components/wm-search/wm-search.js +4 -5
  121. package/dist/collection/components/wm-search/wm-search.spec.js +71 -0
  122. package/dist/collection/components/wm-snackbar/wm-snackbar.e2e.js +112 -0
  123. package/dist/collection/components/wm-snackbar/wm-snackbar.js +2 -2
  124. package/dist/collection/components/wm-snackbar/wm-snackbar.spec.js +9 -0
  125. package/dist/collection/components/wm-tabs/wm-tab-item/wm-tab-item.js +1 -1
  126. package/dist/collection/components/wm-tabs/wm-tab-list/wm-tab-list.js +1 -1
  127. package/dist/collection/components/wm-tabs/wm-tab-panel/wm-tab-panel.js +1 -1
  128. package/dist/collection/components/wm-tabs/wm-tabs.e2e.js +91 -0
  129. package/dist/collection/components/wm-tabs/wm-tabs.spec.js +12 -0
  130. package/dist/collection/components/wm-tag-input/wm-tag-input.e2e.js +204 -0
  131. package/dist/collection/components/wm-tag-input/wm-tag-input.js +3 -3
  132. package/dist/collection/components/wm-tag-input/wm-tag-input.spec.js +195 -0
  133. package/dist/collection/components/wm-textarea/wm-textarea.e2e.js +41 -0
  134. package/dist/collection/components/wm-textarea/wm-textarea.js +1 -1
  135. package/dist/collection/components/wm-textarea/wm-textarea.spec.js +79 -0
  136. package/dist/collection/components/wm-timepicker/wm-timepicker.e2e.js +163 -0
  137. package/dist/collection/components/wm-timepicker/wm-timepicker.js +8 -11
  138. package/dist/collection/components/wm-timepicker/wm-timepicker.spec.js +147 -0
  139. package/dist/collection/components/wm-toggletip/wm-toggletip.e2e.js +69 -0
  140. package/dist/collection/components/wm-toggletip/wm-toggletip.js +2 -2
  141. package/dist/collection/components/wm-toggletip/wm-toggletip.spec.js +21 -0
  142. package/dist/collection/components/wm-uploader/wm-uploader.e2e.js +70 -0
  143. package/dist/collection/components/wm-uploader/wm-uploader.js +2 -2
  144. package/dist/collection/components/wm-uploader/wm-uploader.spec.js +234 -0
  145. package/dist/collection/dev/pss-modal.js +8 -0
  146. package/dist/collection/dev/scripts.js +12 -15
  147. package/dist/collection/global/functions.spec.js +126 -0
  148. package/dist/collection/lang/lang.spec.js +20 -0
  149. package/dist/esm/{chartFunctions-6666ced3.js → chartFunctions-34f19953.js} +3 -3
  150. package/dist/esm/{functions-03966124.js → functions-8800c690.js} +8 -105
  151. package/dist/{cjs/app-globals-1f689ab3.js → esm/global-e7316cfe.js} +1 -10
  152. package/dist/esm/index-558b5a82.js +2618 -0
  153. package/dist/esm/{intl-2fa0087c.js → intl-b110ca8d.js} +1 -1
  154. package/dist/esm/loader.js +5 -6
  155. package/dist/esm/priv-calendar.entry.js +5 -6
  156. package/dist/esm/priv-chart-popover.entry.js +5 -6
  157. package/dist/esm/priv-navigator-button.entry.js +3 -4
  158. package/dist/esm/priv-navigator-item.entry.js +3 -4
  159. package/dist/esm/priv-option-list.entry.js +21 -7
  160. package/dist/esm/ripple.js +13 -14
  161. package/dist/esm/wm-action-menu_2.entry.js +6 -8
  162. package/dist/esm/wm-button.entry.js +4 -5
  163. package/dist/esm/wm-chart-slice.entry.js +1 -1
  164. package/dist/esm/wm-chart.entry.js +6 -7
  165. package/dist/esm/wm-date-range.entry.js +8 -9
  166. package/dist/esm/wm-datepicker.entry.js +8 -9
  167. package/dist/esm/wm-file-list.entry.js +3 -4
  168. package/dist/esm/wm-file.entry.js +4 -5
  169. package/dist/esm/wm-input.entry.js +5 -6
  170. package/dist/esm/wm-line-chart.entry.js +14 -15
  171. package/dist/esm/wm-modal-pss_3.entry.js +26 -28
  172. package/dist/esm/wm-modal_3.entry.js +10 -13
  173. package/dist/esm/wm-navigation_3.entry.js +10 -13
  174. package/dist/esm/wm-navigator.entry.js +3 -4
  175. package/dist/esm/wm-nested-select.entry.js +29 -21
  176. package/dist/esm/wm-optgroup.entry.js +4 -5
  177. package/dist/esm/wm-option_2.entry.js +9 -11
  178. package/dist/esm/wm-pagination.entry.js +4 -5
  179. package/dist/esm/wm-progress-indicator_3.entry.js +7 -9
  180. package/dist/esm/wm-search.entry.js +6 -7
  181. package/dist/esm/wm-snackbar.entry.js +6 -7
  182. package/dist/esm/wm-tab-item_3.entry.js +8 -11
  183. package/dist/esm/wm-tag-input.entry.js +7 -8
  184. package/dist/esm/wm-tag-option.entry.js +2 -2
  185. package/dist/esm/wm-textarea.entry.js +5 -6
  186. package/dist/esm/wm-timepicker.entry.js +5 -6
  187. package/dist/esm/wm-toggletip.entry.js +5 -6
  188. package/dist/esm/wm-uploader.entry.js +6 -7
  189. package/dist/esm/wm-wrapper.entry.js +1 -1
  190. package/dist/esm-es5/{chartFunctions-6666ced3.js → chartFunctions-34f19953.js} +1 -1
  191. package/dist/esm-es5/functions-8800c690.js +1 -0
  192. package/dist/esm-es5/global-e7316cfe.js +1 -0
  193. package/dist/esm-es5/index-558b5a82.js +1 -0
  194. package/dist/esm-es5/{intl-2fa0087c.js → intl-b110ca8d.js} +1 -1
  195. package/dist/esm-es5/loader.js +1 -1
  196. package/dist/esm-es5/priv-calendar.entry.js +1 -1
  197. package/dist/esm-es5/priv-chart-popover.entry.js +1 -1
  198. package/dist/esm-es5/priv-navigator-button.entry.js +1 -1
  199. package/dist/esm-es5/priv-navigator-item.entry.js +1 -1
  200. package/dist/esm-es5/priv-option-list.entry.js +1 -1
  201. package/dist/esm-es5/ripple.js +1 -1
  202. package/dist/esm-es5/wm-action-menu_2.entry.js +1 -1
  203. package/dist/esm-es5/wm-button.entry.js +1 -1
  204. package/dist/esm-es5/wm-chart-slice.entry.js +1 -1
  205. package/dist/esm-es5/wm-chart.entry.js +1 -1
  206. package/dist/esm-es5/wm-date-range.entry.js +1 -1
  207. package/dist/esm-es5/wm-datepicker.entry.js +1 -1
  208. package/dist/esm-es5/wm-file-list.entry.js +1 -1
  209. package/dist/esm-es5/wm-file.entry.js +1 -1
  210. package/dist/esm-es5/wm-input.entry.js +1 -1
  211. package/dist/esm-es5/wm-line-chart.entry.js +1 -1
  212. package/dist/esm-es5/wm-modal-pss_3.entry.js +1 -1
  213. package/dist/esm-es5/wm-modal_3.entry.js +1 -1
  214. package/dist/esm-es5/wm-navigation_3.entry.js +1 -1
  215. package/dist/esm-es5/wm-navigator.entry.js +1 -1
  216. package/dist/esm-es5/wm-nested-select.entry.js +1 -1
  217. package/dist/esm-es5/wm-optgroup.entry.js +1 -1
  218. package/dist/esm-es5/wm-option_2.entry.js +1 -1
  219. package/dist/esm-es5/wm-pagination.entry.js +1 -1
  220. package/dist/esm-es5/wm-progress-indicator_3.entry.js +1 -1
  221. package/dist/esm-es5/wm-search.entry.js +1 -1
  222. package/dist/esm-es5/wm-snackbar.entry.js +1 -1
  223. package/dist/esm-es5/wm-tab-item_3.entry.js +1 -1
  224. package/dist/esm-es5/wm-tag-input.entry.js +1 -1
  225. package/dist/esm-es5/wm-tag-option.entry.js +1 -1
  226. package/dist/esm-es5/wm-textarea.entry.js +1 -1
  227. package/dist/esm-es5/wm-timepicker.entry.js +1 -1
  228. package/dist/esm-es5/wm-toggletip.entry.js +1 -1
  229. package/dist/esm-es5/wm-uploader.entry.js +1 -1
  230. package/dist/esm-es5/wm-wrapper.entry.js +1 -1
  231. package/dist/loader/cdn.js +2 -1
  232. package/dist/loader/index.cjs.js +2 -1
  233. package/dist/loader/index.d.ts +0 -3
  234. package/dist/loader/index.es2017.js +2 -1
  235. package/dist/loader/index.js +2 -1
  236. package/dist/ripple/p-021ff5fa.system.entry.js +1 -0
  237. package/dist/ripple/{p-b4e4479b.js → p-02dc1562.js} +1 -1
  238. package/dist/ripple/{p-e2910f91.system.entry.js → p-037bf5c7.system.entry.js} +1 -1
  239. package/dist/ripple/p-04d5e7d7.entry.js +1 -0
  240. package/dist/ripple/p-0eea8fd3.system.entry.js +1 -0
  241. package/dist/ripple/p-0faf7ef9.system.entry.js +1 -0
  242. package/dist/ripple/p-10745cf2.system.js +1 -0
  243. package/dist/ripple/{p-b47aa85a.entry.js → p-13cc92e7.entry.js} +1 -1
  244. package/dist/ripple/p-1618709f.entry.js +1 -0
  245. package/dist/ripple/p-1c7201d1.entry.js +1 -0
  246. package/dist/ripple/{p-6bb9402a.system.entry.js → p-2520d947.system.entry.js} +1 -1
  247. package/dist/ripple/p-29f41fea.system.entry.js +1 -0
  248. package/dist/ripple/p-2c028fe2.entry.js +1 -0
  249. package/dist/ripple/{p-236ee735.system.entry.js → p-2f565d7a.system.entry.js} +1 -1
  250. package/dist/ripple/p-311923b2.system.entry.js +1 -0
  251. package/dist/ripple/p-31b587a3.entry.js +1 -0
  252. package/dist/ripple/p-3212fd0e.entry.js +1 -0
  253. package/dist/ripple/{p-823d7b4e.system.entry.js → p-32bf3f5b.system.entry.js} +1 -1
  254. package/dist/ripple/p-34d80f95.entry.js +1 -0
  255. package/dist/ripple/p-37649315.entry.js +1 -0
  256. package/dist/ripple/p-38509918.system.entry.js +1 -0
  257. package/dist/ripple/p-3aca84d7.entry.js +1 -0
  258. package/dist/ripple/p-3bb1f795.system.entry.js +1 -0
  259. package/dist/ripple/{p-094883e1.system.js → p-4378b6b9.system.js} +1 -1
  260. package/dist/ripple/p-43b03ad8.system.entry.js +1 -0
  261. package/dist/ripple/{p-664dc79d.system.entry.js → p-4743176d.system.entry.js} +1 -1
  262. package/dist/ripple/{p-13b1d775.entry.js → p-48e09589.entry.js} +1 -1
  263. package/dist/ripple/{p-4fa245d4.system.entry.js → p-4c5606da.system.entry.js} +1 -1
  264. package/dist/ripple/p-5360487b.js +1 -0
  265. package/dist/ripple/p-54d7688a.entry.js +1 -0
  266. package/dist/ripple/p-568c595f.js +2 -0
  267. package/dist/ripple/{p-785fda3d.js → p-5943c8b1.js} +1 -1
  268. package/dist/ripple/p-5ea1c7a6.entry.js +1 -0
  269. package/dist/ripple/p-5eb02aa9.system.entry.js +1 -0
  270. package/dist/ripple/p-6025efee.system.entry.js +1 -0
  271. package/dist/ripple/{p-043901ab.system.entry.js → p-65d26233.system.entry.js} +1 -1
  272. package/dist/ripple/p-6692b5a6.entry.js +1 -0
  273. package/dist/ripple/{p-60206085.system.entry.js → p-6a4c59e0.system.entry.js} +1 -1
  274. package/dist/ripple/{p-524f0531.entry.js → p-6ad695a5.entry.js} +1 -1
  275. package/dist/ripple/p-6d2122b9.entry.js +1 -0
  276. package/dist/ripple/p-6eb50cc3.system.entry.js +1 -0
  277. package/dist/ripple/p-72c22a55.entry.js +1 -0
  278. package/dist/ripple/{p-26e42263.system.entry.js → p-7906a797.system.entry.js} +1 -1
  279. package/dist/ripple/p-7b982ba8.system.entry.js +1 -0
  280. package/dist/ripple/p-7e4866c3.entry.js +1 -0
  281. package/dist/ripple/p-870cf4ef.entry.js +1 -0
  282. package/dist/ripple/{p-cd0cc88d.entry.js → p-88ebddd7.entry.js} +1 -1
  283. package/dist/ripple/p-8f217fb1.entry.js +1 -0
  284. package/dist/ripple/p-90261a03.system.entry.js +1 -0
  285. package/dist/ripple/p-902a54c5.entry.js +1 -0
  286. package/dist/ripple/p-9a2cf94c.system.entry.js +1 -0
  287. package/dist/ripple/p-9fccdac8.system.entry.js +1 -0
  288. package/dist/ripple/p-a4061c96.system.js +1 -0
  289. package/dist/ripple/p-ab8d78cc.system.js +2 -0
  290. package/dist/ripple/p-ade3d9a9.entry.js +1 -0
  291. package/dist/ripple/p-ae4c8481.system.entry.js +1 -0
  292. package/dist/ripple/{p-dba15615.entry.js → p-b01d022f.entry.js} +1 -1
  293. package/dist/ripple/p-b0e099f8.entry.js +1 -0
  294. package/dist/ripple/p-b19ea29e.entry.js +1 -0
  295. package/dist/ripple/{p-2c70503a.entry.js → p-b3114a58.entry.js} +1 -1
  296. package/dist/ripple/{p-da3e143d.entry.js → p-b976c84b.entry.js} +1 -1
  297. package/dist/ripple/p-c2657183.entry.js +1 -0
  298. package/dist/ripple/{p-0ba0c194.system.entry.js → p-c39a3951.system.entry.js} +1 -1
  299. package/dist/ripple/p-c885c7f9.entry.js +1 -0
  300. package/dist/ripple/p-c9543950.system.entry.js +1 -0
  301. package/dist/ripple/p-cbd2473d.system.entry.js +1 -0
  302. package/dist/ripple/p-cedfcf23.entry.js +1 -0
  303. package/dist/ripple/p-d824406e.system.entry.js +1 -0
  304. package/dist/ripple/p-dd26ae24.system.entry.js +1 -0
  305. package/dist/ripple/p-dd76bf0a.system.entry.js +1 -0
  306. package/dist/ripple/p-e28671cd.system.entry.js +1 -0
  307. package/dist/ripple/{p-4b29da45.entry.js → p-e4ff7200.entry.js} +1 -1
  308. package/dist/ripple/p-e53b6f7c.entry.js +1 -0
  309. package/dist/ripple/p-eca78c2b.js +1 -0
  310. package/dist/ripple/p-edd87140.system.js +1 -0
  311. package/dist/ripple/{p-b8a3612c.system.js → p-ee31c799.system.js} +1 -1
  312. package/dist/ripple/{p-9511f0c3.entry.js → p-f05e38b1.entry.js} +1 -1
  313. package/dist/ripple/p-f367f027.system.entry.js +1 -0
  314. package/dist/ripple/{p-f573e60c.system.entry.js → p-f9d26f8b.system.entry.js} +1 -1
  315. package/dist/ripple/ripple.esm.js +1 -1
  316. package/dist/ripple/ripple.js +1 -1
  317. package/dist/types/components/selects/priv-option-list/priv-option-list.d.ts +1 -0
  318. package/dist/types/components/selects/wm-nested-select/wm-nested-select.d.ts +3 -0
  319. package/dist/types/components/wm-modal-pss/wm-modal-pss-footer.d.ts +1 -1
  320. package/dist/types/components/wm-modal-pss/wm-modal-pss-header.d.ts +1 -1
  321. package/dist/types/components/wm-modal-pss/wm-modal-pss.d.ts +1 -1
  322. package/dist/types/stencil-public-runtime.d.ts +10 -3
  323. package/package.json +1 -1
  324. package/dist/cjs/index-788526f5.js +0 -1859
  325. package/dist/esm/index-130e07bb.js +0 -1828
  326. package/dist/esm-es5/app-globals-0f27630e.js +0 -1
  327. package/dist/esm-es5/functions-03966124.js +0 -1
  328. package/dist/esm-es5/index-130e07bb.js +0 -1
  329. package/dist/ripple/p-04c5af17.entry.js +0 -1
  330. package/dist/ripple/p-1073ab75.system.entry.js +0 -1
  331. package/dist/ripple/p-1344f4d2.entry.js +0 -1
  332. package/dist/ripple/p-202cc2fe.system.js +0 -1
  333. package/dist/ripple/p-2261e8d4.entry.js +0 -1
  334. package/dist/ripple/p-2300c07b.entry.js +0 -1
  335. package/dist/ripple/p-2716532e.system.entry.js +0 -1
  336. package/dist/ripple/p-2903ce15.system.entry.js +0 -1
  337. package/dist/ripple/p-30f148a7.entry.js +0 -1
  338. package/dist/ripple/p-39484b51.system.entry.js +0 -1
  339. package/dist/ripple/p-3e7e6493.system.entry.js +0 -1
  340. package/dist/ripple/p-4fae07d6.entry.js +0 -1
  341. package/dist/ripple/p-563f37e8.entry.js +0 -1
  342. package/dist/ripple/p-5a2431e1.system.entry.js +0 -1
  343. package/dist/ripple/p-60cb3adc.entry.js +0 -1
  344. package/dist/ripple/p-618b27e6.entry.js +0 -1
  345. package/dist/ripple/p-62bb8827.system.entry.js +0 -1
  346. package/dist/ripple/p-695391a9.system.entry.js +0 -1
  347. package/dist/ripple/p-6d9acebc.system.entry.js +0 -1
  348. package/dist/ripple/p-7136efd0.entry.js +0 -1
  349. package/dist/ripple/p-79979fb1.entry.js +0 -1
  350. package/dist/ripple/p-7c2846e4.system.entry.js +0 -1
  351. package/dist/ripple/p-7f162296.system.entry.js +0 -1
  352. package/dist/ripple/p-7fba9e61.system.entry.js +0 -1
  353. package/dist/ripple/p-877d35f8.system.entry.js +0 -1
  354. package/dist/ripple/p-89a862ae.system.entry.js +0 -1
  355. package/dist/ripple/p-8ef8c943.system.entry.js +0 -1
  356. package/dist/ripple/p-9062cb9a.entry.js +0 -1
  357. package/dist/ripple/p-a6466fd1.entry.js +0 -1
  358. package/dist/ripple/p-ae2b2056.entry.js +0 -1
  359. package/dist/ripple/p-afa807a5.entry.js +0 -1
  360. package/dist/ripple/p-b5e7db7f.system.entry.js +0 -1
  361. package/dist/ripple/p-b8e97d05.system.js +0 -1
  362. package/dist/ripple/p-b9a8d85b.entry.js +0 -1
  363. package/dist/ripple/p-bbcc61cf.entry.js +0 -1
  364. package/dist/ripple/p-c0ccce22.system.entry.js +0 -1
  365. package/dist/ripple/p-c499cfaf.entry.js +0 -1
  366. package/dist/ripple/p-c61b29cd.system.entry.js +0 -1
  367. package/dist/ripple/p-c94976c8.system.entry.js +0 -1
  368. package/dist/ripple/p-cef8a45b.system.js +0 -2
  369. package/dist/ripple/p-d307a2d5.system.entry.js +0 -1
  370. package/dist/ripple/p-d9da0502.js +0 -2
  371. package/dist/ripple/p-dd23c135.entry.js +0 -1
  372. package/dist/ripple/p-ded71900.entry.js +0 -1
  373. package/dist/ripple/p-dfcf2302.system.js +0 -1
  374. package/dist/ripple/p-e4c40125.js +0 -1
  375. package/dist/ripple/p-e5f7fbe7.js +0 -1
  376. package/dist/ripple/p-eaf16578.system.entry.js +0 -1
  377. package/dist/ripple/p-ed2f0946.entry.js +0 -1
  378. package/dist/ripple/p-f78d5bc3.entry.js +0 -1
  379. package/dist/ripple/p-f9df9765.system.entry.js +0 -1
  380. package/dist/ripple/p-faae9ebb.entry.js +0 -1
  381. package/dist/ripple/p-fada6923.entry.js +0 -1
  382. package/dist/ripple/p-fe6522b9.entry.js +0 -1
  383. package/dist/ripple/p-ff74ec46.system.entry.js +0 -1
@@ -0,0 +1,54 @@
1
+ import { newSpecPage } from "@stencil/core/testing";
2
+ import { Menuitem } from "./wm-menuitem";
3
+ describe("wm-menuitem", () => {
4
+ it("builds", async () => {
5
+ const comp = await newSpecPage({
6
+ components: [Menuitem],
7
+ html: "<wm-menuitem><wm-menuitem>",
8
+ });
9
+ expect(comp.root).toMatchSnapshot();
10
+ });
11
+ it("handles disabled onClick function", async () => {
12
+ const page = await newSpecPage({
13
+ components: [Menuitem],
14
+ html: "<wm-menuitem><wm-menuitem>",
15
+ });
16
+ const menuItem = page.root;
17
+ const onClickFunc = () => console.log("Message");
18
+ menuItem.onclick = onClickFunc;
19
+ expect(menuItem.onclick).toEqual(onClickFunc);
20
+ menuItem.disabled = true;
21
+ expect(menuItem.onclick).toBe(null);
22
+ menuItem.disabled = false;
23
+ expect(menuItem.onclick).toEqual(onClickFunc);
24
+ });
25
+ it("renders description if prop is present", async () => {
26
+ const page = await newSpecPage({
27
+ components: [Menuitem],
28
+ html: "<wm-menuitem description='Description here'><wm-menuitem>",
29
+ });
30
+ const descriptionEl = page.root.shadowRoot.querySelector(".description");
31
+ expect(descriptionEl === null || descriptionEl === void 0 ? void 0 : descriptionEl.textContent).toBe("Description here");
32
+ });
33
+ describe("error throwing", () => {
34
+ it("throws error when description is over character limit", async () => {
35
+ const mockFunc = jest.fn();
36
+ console.error = mockFunc;
37
+ const description = "q".repeat(200);
38
+ await newSpecPage({
39
+ components: [Menuitem],
40
+ html: `<wm-menuitem description='${description}'></wm-menuitem>`,
41
+ });
42
+ expect(mockFunc).toHaveBeenCalledWith("wm-menuitem description is above the character limit of 100");
43
+ });
44
+ it("throws error when description and icon props are used simultaneously", async () => {
45
+ const mockFunc = jest.fn();
46
+ console.error = mockFunc;
47
+ await newSpecPage({
48
+ components: [Menuitem],
49
+ html: `<wm-menuitem description='Example description' icon="f3eb"></wm-menuitem>`,
50
+ });
51
+ expect(mockFunc).toHaveBeenCalledWith("wm-menuitems with descriptions do not support the use of icons");
52
+ });
53
+ });
54
+ });
@@ -30,7 +30,7 @@ export class ModalFooter {
30
30
  }
31
31
  }
32
32
  render() {
33
- return (h("div", { key: '38b6b1759d4bdb628259acbf229a1d634df2dbf5', class: `wm-wrapper ${this.infoText ? " footer-text" : ""}` }, h("div", { key: '4259692e664739723e3895e8ec8d00ef00ef79f0', class: "wm-info", "aria-live": "polite" }, this.infoText), h("div", { key: '6ffea66fdfd257e754a9012e9471848037e92a52', class: "wm-button-collection" }, this.secondaryText && (h("wm-button", { key: '679eef458298304564cd365f15c8253796158ed8', onClick: () => this.emitParentSecondaryEvent(), id: `wm-secondary-${this.uid}`, ref: (el) => (this.primaryActionDisabled ? (this.lastElement = el) : undefined) }, this.secondaryText)), h("wm-button", { key: 'a6e02b671dbfbacba79aa483b8d6ab8dc9232166', "button-type": this.deleteStyle ? "secondary" : "primary", "permanently-delete": this.deleteStyle, onClick: () => this.emitParentPrimaryEvent(), disabled: this.primaryActionDisabled, id: `wm-primary-${this.uid}`, ref: (el) => (!this.primaryActionDisabled ? (this.lastElement = el) : undefined) }, this.primaryText))));
33
+ return (h("div", { class: `wm-wrapper ${this.infoText ? " footer-text" : ""}` }, h("div", { class: "wm-info", "aria-live": "polite" }, this.infoText), h("div", { class: "wm-button-collection" }, this.secondaryText && (h("wm-button", { onClick: () => this.emitParentSecondaryEvent(), id: `wm-secondary-${this.uid}`, ref: (el) => (this.primaryActionDisabled ? (this.lastElement = el) : undefined) }, this.secondaryText)), h("wm-button", { "button-type": this.deleteStyle ? "secondary" : "primary", "permanently-delete": this.deleteStyle, onClick: () => this.emitParentPrimaryEvent(), disabled: this.primaryActionDisabled, id: `wm-primary-${this.uid}`, ref: (el) => (!this.primaryActionDisabled ? (this.lastElement = el) : undefined) }, this.primaryText))));
34
34
  }
35
35
  static get is() { return "wm-modal-footer"; }
36
36
  static get originalStyleUrls() {
@@ -0,0 +1,11 @@
1
+ import { ModalFooter } from "./wm-modal-footer";
2
+ describe("wm-modal-footer", () => {
3
+ it("has the right props", () => {
4
+ const modal = new ModalFooter();
5
+ expect(modal).toHaveProperty("secondaryText");
6
+ expect(modal).toHaveProperty("primaryText");
7
+ expect(modal).toHaveProperty("infoText");
8
+ expect(modal).toHaveProperty("primaryActionDisabled");
9
+ expect(modal).toHaveProperty("deleteStyle");
10
+ });
11
+ });
@@ -21,7 +21,7 @@ export class ModalHeader {
21
21
  parentModal.emitCloseEvent();
22
22
  }
23
23
  render() {
24
- return (h(Host, { key: 'f178a3e4b95a12286b3364efbebe22b3a389f24c' }, h("div", { key: '8a6589a653e28aa5eb926f50695fe129c57548d6', class: "wm-wrapper" }, h("div", { key: '33ca649393f628c8ab5160c5e11e208812dad450' }, h("h2", { key: 'e171bcaa0424e97401db3002bbc3ebaf9c66458d', class: "title", id: `wm-modal-heading-text-${this.uid}` }, this.heading, h("span", { key: 'aacf128010d3416ca788d2110240991dcf36fd17', class: "subtitle" }, this.subheading))), h("wm-button", { key: '1a7342cd0ed7aa024b52af067ec9ed33c7a63b04', "button-type": "navigational", icon: "f156", tooltip: globalMessages.close, "tooltip-position": "left", id: `wm-modal-close-${this.uid}`, ref: (el) => (this.closeButtonEl = el), onClick: () => this.emitParentCloseEvent() }))));
24
+ return (h(Host, null, h("div", { class: "wm-wrapper" }, h("div", null, h("h2", { class: "title", id: `wm-modal-heading-text-${this.uid}` }, this.heading, h("span", { class: "subtitle" }, this.subheading))), h("wm-button", { "button-type": "navigational", icon: "f156", tooltip: globalMessages.close, "tooltip-position": "left", id: `wm-modal-close-${this.uid}`, ref: (el) => (this.closeButtonEl = el), onClick: () => this.emitParentCloseEvent() }))));
25
25
  }
26
26
  static get is() { return "wm-modal-header"; }
27
27
  static get originalStyleUrls() {
@@ -0,0 +1,8 @@
1
+ import { ModalHeader } from "./wm-modal-header";
2
+ describe("wm-modal-header", () => {
3
+ it("has the right props", () => {
4
+ const modal = new ModalHeader();
5
+ expect(modal).toHaveProperty("heading");
6
+ expect(modal).toHaveProperty("subheading");
7
+ });
8
+ });
@@ -0,0 +1,104 @@
1
+ import { newE2EPage } from "@stencil/core/testing";
2
+ import { AxePuppeteer } from "@axe-core/puppeteer";
3
+ describe("wm-modal", () => {
4
+ let page, modal,
5
+ // overlay: any,
6
+ closeButton;
7
+ beforeEach(async () => {
8
+ page = await newE2EPage();
9
+ await page.setContent(`<html lang='en'><head><title>Page</title></head><body><main><h1>Title</h1>
10
+ <button onClick="showModal()" id="modal-trigger">Open Modal</button><wm-modal id="modal-test"><wm-modal-header heading="Modal Heading"></wm-modal-header><div>Modal Body</div><wm-modal-footer primary-text="Save" secondary-text="Discard"></wm-modal-footer></wm-modal><button>Filler</button></main></body><script>const dialog = document.getElementById("modal-test");
11
+
12
+ dialog.addEventListener("wmModalCloseTriggered", function() {
13
+ dialog.open = false;
14
+ });
15
+
16
+ dialog.addEventListener("wmModalSecondaryTriggered", function() {
17
+ dialog.open = false;
18
+ });
19
+
20
+ dialog.addEventListener("wmModalPrimaryTriggered", function() {
21
+ dialog.open = false;
22
+ });
23
+ function showModal() {
24
+ dialog.open = true;
25
+ }
26
+ </script></html>`);
27
+ modal = await page.find("wm-modal");
28
+ closeButton = await page.find("wm-button#wm-modal-close-modal-test >>> button");
29
+ });
30
+ it("passes Axe checks", async () => {
31
+ const results = await new AxePuppeteer(page).analyze();
32
+ expect(results.violations.length).toBe(0);
33
+ });
34
+ // RENDER
35
+ it("renders", async () => {
36
+ expect(modal).toHaveClass("hydrated");
37
+ });
38
+ // DISPLAY AND HIDE
39
+ it("emits the proper event when the close (X) button is clicked", async () => {
40
+ const eventSpy = await modal.spyOnEvent("wmModalCloseTriggered");
41
+ await page.keyboard.press("Tab");
42
+ await page.keyboard.press("Enter");
43
+ await page.waitForChanges();
44
+ expect(modal).toHaveAttribute("open");
45
+ closeButton.click();
46
+ await page.waitForChanges();
47
+ expect(eventSpy).toHaveReceivedEventTimes(1);
48
+ });
49
+ //ACCESSIBILITY
50
+ it("focuses the close button when the modal opens if no elementToFocus property is set", async () => {
51
+ await page.keyboard.press("Tab");
52
+ await page.keyboard.press("Enter"); // open popup
53
+ await page.waitForChanges();
54
+ const activeElId = await page.evaluate(() => document.activeElement.id);
55
+ expect(activeElId).toEqual("wm-modal-close-modal-test");
56
+ });
57
+ it("focuses the correct element when the elementToFocus property is set", async () => {
58
+ page = await newE2EPage();
59
+ //The elementToFocus prop isn't mutable, so "setProperty" doesn't work. Page content has to be reset.
60
+ await page.setContent(`<html lang='en'><head><title>Page</title></head><body><main><h1>Title</h1>
61
+ <button onClick="showModal()">Open Modal</button><wm-modal element-to-focus="modal-input" id="second-modal"><wm-modal-header heading="Modal Heading"></wm-modal-header><div>Modal Body<div><input id="modal-input"></input></div></div><wm-modal-footer></wm-modal-footer></wm-modal></main></body><script>const dialog = document.getElementById("second-modal");
62
+
63
+ dialog.addEventListener("wmModalCloseTriggered", function() {
64
+ dialog.open = false;
65
+ });
66
+
67
+ dialog.addEventListener("wmModalSecondaryTriggered", function() {
68
+ dialog.open = false;
69
+ });
70
+
71
+ dialog.addEventListener("wmModalPrimaryTriggered", function() {
72
+ dialog.open = false;
73
+ });
74
+
75
+ function showModal() {
76
+ dialog.open = true;
77
+ }
78
+ </script></html>`);
79
+ await page.waitForChanges();
80
+ await page.keyboard.press("Tab");
81
+ await page.keyboard.press("Enter");
82
+ await page.waitForChanges();
83
+ const activeElId = await page.evaluate(() => document.activeElement.id);
84
+ expect(activeElId).toEqual("modal-input");
85
+ });
86
+ it("returns focus to the triggering element when the modal closes", async () => {
87
+ await page.keyboard.press("Tab");
88
+ await page.keyboard.press("Enter");
89
+ await page.waitForChanges();
90
+ await page.keyboard.press("Enter");
91
+ await page.waitForChanges();
92
+ const activeElId = await page.evaluate(() => document.activeElement.id);
93
+ expect(activeElId).toEqual("modal-trigger");
94
+ });
95
+ it("closes the modal when escape key is pressed", async () => {
96
+ await page.keyboard.press("Tab");
97
+ await page.keyboard.press("Enter");
98
+ await page.waitForChanges();
99
+ expect(modal).toHaveAttribute("open");
100
+ await page.keyboard.press("Escape");
101
+ await page.waitForChanges();
102
+ expect(modal).not.toHaveAttribute("open");
103
+ });
104
+ });
@@ -108,11 +108,11 @@ export class Modal {
108
108
  }
109
109
  }
110
110
  render() {
111
- return (h("dialog", { key: '013cab28a1dba3a63ab8c350bfac543520254e63', class: `${"wm-" + this.modalType}`, ref: (el) => (this.dialogEl = el), onKeyDown: (ev) => this.handleKeyDown(ev) }, h("div", { key: '0bedae272d1154b61fbd7ebac59020d6c5b6b3b9', class: "tabtrap sr-only", tabindex: "0", onFocus: (ev) => {
111
+ return (h("dialog", { class: `${"wm-" + this.modalType}`, ref: (el) => (this.dialogEl = el), onKeyDown: (ev) => this.handleKeyDown(ev) }, h("div", { class: "tabtrap sr-only", tabindex: "0", onFocus: (ev) => {
112
112
  const focusedFromCloseButton = ev.relatedTarget && ev.relatedTarget == this.closeButtonEl;
113
113
  // no related target means we're coming from outside the page (browser chrome), and first element should be focused instead
114
114
  focusedFromCloseButton ? this.focusLastElement.emit() : this.focusFirstElement.emit();
115
- } }), !this.hasBrowserPopoverSupport && h("div", { key: '732a9e8edb3302a2d17dd9af6c8bf65ce73fc5d1', class: "wm-tooltip" }), h("slot", { key: '0ee3e5372886db1eb3f814d3f72d422771bbce27' }), h("div", { key: '197477a1dd69b1f5d2cb910fd01e1b3b247bafda', class: "tabtrap sr-only", tabindex: "0", onFocus: () => {
115
+ } }), !this.hasBrowserPopoverSupport && h("div", { class: "wm-tooltip" }), h("slot", null), h("div", { class: "tabtrap sr-only", tabindex: "0", onFocus: () => {
116
116
  this.focusFirstElement.emit();
117
117
  } })));
118
118
  }
@@ -0,0 +1,30 @@
1
+ import { newSpecPage } from "@stencil/core/testing";
2
+ jest.mock("../../global/functions");
3
+ import { Modal } from "./wm-modal";
4
+ import { ModalHeader } from "./wm-modal-header";
5
+ import { ModalFooter } from "./wm-modal-footer";
6
+ describe("wm-modal", () => {
7
+ it("builds", async () => {
8
+ const comp = await newSpecPage({
9
+ components: [Modal, ModalHeader, ModalFooter],
10
+ html: "<wm-modal open='false'><wm-modal-header heading='heading'></wm-modal-header><div>content</div><wm-modal-footer primary-text='primary-text'></wm-modal-footer></wm-modal>",
11
+ });
12
+ expect(comp.root).toMatchSnapshot();
13
+ });
14
+ it("watching open-- toggles the modal", () => {
15
+ //toggleModal
16
+ const component = new Modal();
17
+ const mockShowModal = (component.showModal = jest.fn());
18
+ const mockHideModal = (component.hideModal = jest.fn());
19
+ component.open = true;
20
+ component.toggleModal();
21
+ expect(mockShowModal).toHaveBeenCalledTimes(1);
22
+ expect(mockHideModal).toHaveBeenCalledTimes(0);
23
+ jest.resetAllMocks();
24
+ component.open = false;
25
+ component.toggleModal();
26
+ expect(mockShowModal).toHaveBeenCalledTimes(0);
27
+ expect(mockHideModal).toHaveBeenCalledTimes(1);
28
+ jest.resetAllMocks();
29
+ });
30
+ });
@@ -30,12 +30,24 @@
30
30
  (they can't be aligned on the baseline because of possible description text and error message)
31
31
  -------------------------------------- */
32
32
  wm-modal-pss-footer {
33
+ -webkit-border-radius: 0px 0px 5px 5px;
34
+ -moz-border-radius: 0px 0px 5px 5px;
35
+ -ms-border-radius: 0px 0px 5px 5px;
33
36
  border-radius: 0px 0px 5px 5px;
34
37
  margin-top: -1px;
35
38
  }
36
39
  wm-modal-pss-footer .wm-wrapper {
40
+ display: -webkit-box;
41
+ display: -webkit-flex;
42
+ display: -ms-flexbox;
37
43
  display: flex;
44
+ -webkit-box-pack: justify;
45
+ -ms-flex-pack: justify;
46
+ -webkit-justify-content: space-between;
38
47
  justify-content: space-between;
48
+ -webkit-box-align: center;
49
+ -webkit-align-items: center;
50
+ -ms-flex-align: center;
39
51
  align-items: center;
40
52
  }
41
53
  @media only screen and (max-width: 650px) {
@@ -1,5 +1,5 @@
1
1
  import { h } from "@stencil/core";
2
- export class ModalFooter {
2
+ export class ModalPssFooter {
3
3
  constructor() {
4
4
  this.secondaryText = "";
5
5
  this.primaryText = "";
@@ -27,7 +27,7 @@ export class ModalFooter {
27
27
  parentModal.emitSecondaryEvent();
28
28
  }
29
29
  render() {
30
- return (h("div", { key: '51a2d057d08fee9eb7cb20610b44b5bd9d3300a1', class: `wm-wrapper ${this.infoText ? " footer-text" : ""}` }, h("div", { key: '18b9805744abd577708add4f5c1d6bc0149927fb', class: "wm-info", "aria-live": "polite" }, this.infoText), h("div", { key: 'a449547065cb247a50f859ca5a4a82f070c06399', class: "wm-button-collection" }, this.secondaryText && (h("wm-button", { key: 'd1733ed5fe143f2e65433a667a40694fd5dbad43', onClick: () => this.emitParentSecondaryEvent(), id: `wm-secondary-${this.uid}`, ref: (el) => (this.primaryActionDisabled ? (this.lastElement = el) : null) }, this.secondaryText)), h("wm-button", { key: '2177e7af952bd16fa6cb4cf23dbf2acf18445ebc', "button-type": this.deleteStyle ? "secondary" : "primary", "permanently-delete": this.deleteStyle, onClick: () => this.emitParentPrimaryEvent(), disabled: this.primaryActionDisabled, id: `wm-primary-${this.uid}`, ref: (el) => (!this.primaryActionDisabled ? (this.lastElement = el) : null) }, this.primaryText))));
30
+ return (h("div", { class: `wm-wrapper ${this.infoText ? " footer-text" : ""}` }, h("div", { class: "wm-info", "aria-live": "polite" }, this.infoText), h("div", { class: "wm-button-collection" }, this.secondaryText && (h("wm-button", { onClick: () => this.emitParentSecondaryEvent(), id: `wm-secondary-${this.uid}`, ref: (el) => (this.primaryActionDisabled ? (this.lastElement = el) : null) }, this.secondaryText)), h("wm-button", { "button-type": this.deleteStyle ? "secondary" : "primary", "permanently-delete": this.deleteStyle, onClick: () => this.emitParentPrimaryEvent(), disabled: this.primaryActionDisabled, id: `wm-primary-${this.uid}`, ref: (el) => (!this.primaryActionDisabled ? (this.lastElement = el) : null) }, this.primaryText))));
31
31
  }
32
32
  static get is() { return "wm-modal-pss-footer"; }
33
33
  static get originalStyleUrls() {
@@ -30,12 +30,24 @@
30
30
  (they can't be aligned on the baseline because of possible description text and error message)
31
31
  -------------------------------------- */
32
32
  wm-modal-pss-header {
33
+ -webkit-border-radius: 5px 5px 0 0px;
34
+ -moz-border-radius: 5px 5px 0 0px;
35
+ -ms-border-radius: 5px 5px 0 0px;
33
36
  border-radius: 5px 5px 0 0px;
34
37
  margin-bottom: -1px;
35
38
  }
36
39
  wm-modal-pss-header .wm-wrapper {
40
+ display: -webkit-box;
41
+ display: -webkit-flex;
42
+ display: -ms-flexbox;
37
43
  display: flex;
44
+ -webkit-box-pack: justify;
45
+ -ms-flex-pack: justify;
46
+ -webkit-justify-content: space-between;
38
47
  justify-content: space-between;
48
+ -webkit-box-align: center;
49
+ -webkit-align-items: center;
50
+ -ms-flex-align: center;
39
51
  align-items: center;
40
52
  }
41
53
  wm-modal-pss-header .wm-wrapper .title {
@@ -1,5 +1,6 @@
1
1
  import { h, Host } from "@stencil/core";
2
- export class ModalHeader {
2
+ import { globalMessages } from "../../global/intl";
3
+ export class ModalPssHeader {
3
4
  constructor() {
4
5
  this.heading = "";
5
6
  this.subheading = "";
@@ -24,7 +25,7 @@ export class ModalHeader {
24
25
  // this.headingElement.focus();
25
26
  // }
26
27
  render() {
27
- return (h(Host, { key: '2b2dda4dcd73e99ead055334998d5ef97ea60df4' }, h("div", { key: '8a1f05da81b4663558e962f7b540fac35e2bbfa3', class: "wm-wrapper" }, h("div", { key: '2948adf911680be5ba5a4beb317ddd57303a9a15' }, h("h2", { key: 'f1068bac6d9692a6368f5662bbcde1aad83c3317', class: "title", id: `wm-modal-heading-text-${this.uid}` }, this.heading, h("span", { key: '9452c69404d41425a2bce3fbe15e457fc773a640', class: "subtitle" }, this.subheading))), h("wm-button", { key: '1961750a256f7ad40f8d06345994479b0e3ed541', "button-type": "navigational", icon: "f156", tooltip: "Close", "tooltip-position": "left", id: `wm-modal-close-${this.uid}`, ref: (el) => (this.closeButtonEl = el), onClick: () => this.emitParentCloseEvent() }))));
28
+ return (h(Host, null, h("div", { class: "wm-wrapper" }, h("div", null, h("h2", { class: "title", id: `wm-modal-heading-text-${this.uid}` }, this.heading, h("span", { class: "subtitle" }, this.subheading))), h("wm-button", { "button-type": "navigational", icon: "f156", tooltip: globalMessages.close, "tooltip-position": "left", id: `wm-modal-close-${this.uid}`, ref: (el) => (this.closeButtonEl = el), onClick: () => this.emitParentCloseEvent() }))));
28
29
  }
29
30
  static get is() { return "wm-modal-pss-header"; }
30
31
  static get originalStyleUrls() {
@@ -34,8 +34,17 @@ wm-modal-pss {
34
34
  --wmcolor-modal-border: var(--wmcolor-border);
35
35
  --wmcolor-modal-heading: var(--wmcolor-text);
36
36
  --wmcolor-modal-overlay: var(--wmcolor-overlay);
37
+ display: -webkit-box;
38
+ display: -webkit-flex;
39
+ display: -ms-flexbox;
37
40
  display: flex;
41
+ -webkit-box-pack: center;
42
+ -ms-flex-pack: center;
43
+ -webkit-justify-content: center;
38
44
  justify-content: center;
45
+ -webkit-box-align: center;
46
+ -webkit-align-items: center;
47
+ -ms-flex-align: center;
39
48
  align-items: center;
40
49
  flex-direction: column;
41
50
  position: fixed;
@@ -46,6 +55,8 @@ wm-modal-pss {
46
55
  width: 80vw;
47
56
  max-width: 750px;
48
57
  max-height: 80vh;
58
+ -webkit-box-shadow: 0px 11px 15px 0px rgba(0, 0, 0, 0.2), 0px 9px 46px 8px rgba(0, 0, 0, 0.12), 0px 24px 38px 3px rgba(0, 0, 0, 0.14);
59
+ -moz-box-shadow: 0px 11px 15px 0px rgba(0, 0, 0, 0.2), 0px 9px 46px 8px rgba(0, 0, 0, 0.12), 0px 24px 38px 3px rgba(0, 0, 0, 0.14);
49
60
  box-shadow: 0px 11px 15px 0px rgba(0, 0, 0, 0.2), 0px 9px 46px 8px rgba(0, 0, 0, 0.12), 0px 24px 38px 3px rgba(0, 0, 0, 0.14);
50
61
  }
51
62
  wm-modal-pss * {
@@ -61,7 +72,7 @@ wm-modal-pss > *:focus {
61
72
  }
62
73
  wm-modal-pss wm-modal-pss-header,
63
74
  wm-modal-pss wm-modal-pss-footer {
64
- padding: 20px 30px;
75
+ padding: 1.25rem 1.875rem;
65
76
  }
66
77
  wm-modal-pss wm-modal-pss-header {
67
78
  z-index: 2003;
@@ -96,7 +107,7 @@ wm-modal-pss.wm-modal wm-modal-pss-footer {
96
107
  }
97
108
  }
98
109
  wm-modal-pss.wm-dialog > :not(wm-modal-pss-header):not(wm-modal-pss-footer) {
99
- padding: 0 30px 20px 30px;
110
+ padding: 0 1.875rem 1.25rem 1.875rem;
100
111
  font-size: 0.875rem;
101
112
  border: none;
102
113
  }
@@ -112,6 +123,9 @@ wm-modal-pss .overlay {
112
123
  right: 1;
113
124
  transform: translate(0%, 0%);
114
125
  background-color: var(--wmcolor-modal-overlay);
126
+ -ms-transition: opacity 0.5s ease-out;
127
+ -webkit-transition: opacity 0.5s ease-out;
128
+ -moz-transition: opacity 0.5s ease-out;
115
129
  transition: opacity 0.5s ease-out;
116
130
  z-index: 2000;
117
131
  }
@@ -1,5 +1,7 @@
1
1
  import { h, Host } from "@stencil/core";
2
- export class Modal {
2
+ import { checkForActiveElInShadow } from "../../global/functions";
3
+ import { generateId } from "../../global/functions";
4
+ export class ModalPss {
3
5
  constructor() {
4
6
  this.bodyFocusListener = () => this.redirectFocusFromBody();
5
7
  this.open = false;
@@ -24,6 +26,12 @@ export class Modal {
24
26
  toggleModal() {
25
27
  this.open ? this.showModal() : this.hideModal();
26
28
  }
29
+ //The below not implemented in light of the fact that the app does often need to keep track of the modal's state itself so that it can update the data displayed in the body:
30
+ //App can also open modal by emitting wmShowModal event. Event needs to include the modal's unique id as the event detail, or else all modals on the page will open when wmShowModal event is dispatched.
31
+ // @Listen("wmShowModal", { target: "window" })
32
+ // doesEventMatchId(ev: CustomEvent) {
33
+ // ev.detail === this.uid && this.showModal();
34
+ // }
27
35
  handleClick(ev) {
28
36
  this.open && ev.target === this.overlayEl && this.focusOnOpenEl.focus();
29
37
  }
@@ -58,14 +66,13 @@ export class Modal {
58
66
  componentWillLoad() {
59
67
  if (this.elementToFocus === "primary" || this.elementToFocus === "secondary") {
60
68
  if (!this.el.id) {
61
- console.error("For accessibility purposes, you need to set the modal content wrapper's id to 'content-[id of wm-modal-pss]'.");
69
+ console.error("You are telling the modal to focus an element in the footer when it opens. That's fine! But when you do that, you also need to give the wm-modal-wrapper an ID and set the ID of the modal body to 'content-[id of wm-modal-wrapper]. This is for accessibility purposes.");
62
70
  }
63
71
  }
64
72
  this.el.focus = () => {
65
73
  this.focusOnOpenEl.focus();
66
74
  };
67
- const generatedId = "wmcl-" + Math.random().toString(36).substr(2, 10);
68
- this.uid = this.el.id ? this.el.id : generatedId;
75
+ this.uid = this.el.id ? this.el.id : generateId();
69
76
  }
70
77
  componentDidLoad() {
71
78
  if (this.open) {
@@ -96,13 +103,7 @@ export class Modal {
96
103
  this.focusOnCloseEl = elToFocus.parentElement;
97
104
  }
98
105
  else {
99
- let el;
100
- while (elToFocus && elToFocus.shadowRoot) {
101
- el = elToFocus.shadowRoot.activeElement;
102
- }
103
- if (el) {
104
- this.focusOnCloseEl = el;
105
- }
106
+ this.focusOnCloseEl = checkForActiveElInShadow(elToFocus);
106
107
  }
107
108
  }
108
109
  redirectFocusFromBody() {
@@ -111,9 +112,9 @@ export class Modal {
111
112
  }
112
113
  }
113
114
  render() {
114
- return (h(Host, { key: '85e48c3a6876e546014d2100b5cf575ae0aa4eb8', class: `${this.open ? "" : "hide "}${"wm-" + this.modalType}`, role: "dialog", "aria-describedby": `wm-modal-heading-text-${this.uid}`, "aria-modal": "true", tabindex: this.open ? 0 : null, onFocus: () => {
115
+ return (h(Host, { class: `${this.open ? "" : "hide "}${"wm-" + this.modalType}`, role: "dialog", "aria-describedby": `wm-modal-heading-text-${this.uid}`, "aria-modal": "true", tabindex: this.open ? 0 : null, onFocus: () => {
115
116
  this.focusLastElement.emit();
116
- } }, h("div", { key: 'cf58003fbfc9ea4a013c3689aa93f45dca5a0358', class: "overlay", ref: (el) => (this.overlayEl = el) }), h("div", { key: '59504e363659c2393c6b7f4a10f512485291b253', class: "sr-only", tabIndex: 0, onFocus: () => {
117
+ } }, h("div", { class: "overlay", ref: (el) => (this.overlayEl = el) }), h("div", { class: "sr-only", tabIndex: 0, onFocus: () => {
117
118
  this.focusFirstElement.emit();
118
119
  } })));
119
120
  }
@@ -34,7 +34,7 @@ export class NavigationHamburger {
34
34
  this.wmNavigationHamburgerClicked.emit();
35
35
  }
36
36
  render() {
37
- return (h(Host, { key: '64106288d26853ec6dced8c379e308910d0fc241', class: `hamburger ${this.open ? "nav-open" : "nav-closed"}` }, h("button", { key: 'f874ff163e409ae233521d4c089d8f28911fe051', "aria-expanded": this.open, "aria-label": this.showNavMessage, onMouseEnter: () => showTooltip("right", this.el, this.showNavMessage), onMouseLeave: () => hideTooltip(), onFocus: () => this.isTabbing && showTooltip("right", this.el, this.showNavMessage), onBlur: () => hideTooltip(), onClick: () => this.handleClick() }, h("span", { key: 'd85220650c6728633ca27259b5a370bbc7d47e02', class: "icon" }))));
37
+ return (h(Host, { class: `hamburger ${this.open ? "nav-open" : "nav-closed"}` }, h("button", { "aria-expanded": this.open, "aria-label": this.showNavMessage, onMouseEnter: () => showTooltip("right", this.el, this.showNavMessage), onMouseLeave: () => hideTooltip(), onFocus: () => this.isTabbing && showTooltip("right", this.el, this.showNavMessage), onBlur: () => hideTooltip(), onClick: () => this.handleClick() }, h("span", { class: "icon" }))));
38
38
  }
39
39
  static get is() { return "wm-navigation-hamburger"; }
40
40
  static get encapsulation() { return "shadow"; }
@@ -6,7 +6,7 @@ export class NavigationItem {
6
6
  this.active = undefined;
7
7
  }
8
8
  render() {
9
- return (h(Host, { key: 'c4420b1e4396ac065b3674f52b124c0d25359435', role: "listitem" }, h("a", { key: 'ffd82c5f726e982e4418c8bd335c3c151ac1fbfd', class: `link ${this.active ? "active" : ""}`, href: this.href, onClick: () => this.wmNavigationItemClicked.emit() }, h("div", { key: 'fe1a4418452356a9811359ded2aac74694f9a3d2', class: "icon", "aria-hidden": "true" }, h("slot", { key: '9690f8cbfb21a229493b9b7585ccdb3e90691aa1' })), h("div", { key: 'e134a8b4ca4df635c460b87e7a87cb3909737903', class: "text" }, this.text))));
9
+ return (h(Host, { role: "listitem" }, h("a", { class: `link ${this.active ? "active" : ""}`, href: this.href, onClick: () => this.wmNavigationItemClicked.emit() }, h("div", { class: "icon", "aria-hidden": "true" }, h("slot", null)), h("div", { class: "text" }, this.text))));
10
10
  }
11
11
  static get is() { return "wm-navigation-item"; }
12
12
  static get encapsulation() { return "shadow"; }
@@ -0,0 +1,102 @@
1
+ import { newE2EPage } from "@stencil/core/testing";
2
+ import { AxePuppeteer } from "@axe-core/puppeteer";
3
+ describe("wm-navigation", () => {
4
+ let page, nav, hamburger, items;
5
+ beforeEach(async () => {
6
+ page = await newE2EPage();
7
+ await page.setContent(`<html lang='en'><head><title>Page</title></head><body>
8
+ <wm-navigation-hamburger nav-id="mynav"></wm-navigation-hamburger>
9
+ <wm-navigation id="mynav">
10
+ <wm-navigation-item href="/home" text="Home" active>Home</wm-navigation-item>
11
+ <wm-navigation-item href="/things" text="Things">Things</wm-navigation-item>
12
+ </wm-navigation><main><h1>Title</h1><button>something tabbable here</button>
13
+ </main></body></html>`);
14
+ nav = await page.find("wm-navigation");
15
+ hamburger = await page.find("wm-navigation-hamburger");
16
+ items = await page.find("wm-navigation-item");
17
+ });
18
+ it("passes Axe checks", async () => {
19
+ const results = await new AxePuppeteer(page).analyze();
20
+ expect(results.violations.length).toBe(0);
21
+ });
22
+ it("renders the component", async () => {
23
+ expect(nav).not.toBeNull();
24
+ expect(hamburger).not.toBeNull();
25
+ expect(items).not.toBeNull();
26
+ });
27
+ it("traps focus when collapsible", async () => {
28
+ // small screen, trap focus
29
+ page.setViewport({ width: 1023, height: 800 });
30
+ page.waitForChanges();
31
+ await page.keyboard.press("Tab"); // focus on hamburger
32
+ await page.keyboard.press("Enter"); // open. focus on close btn
33
+ await page.waitForTimeout(250); // wait for animation to complete and focus to be called
34
+ await page.keyboard.press("Tab"); // focus on 1st nav item
35
+ await page.keyboard.press("Tab"); // focus on 2nd nav item
36
+ await page.keyboard.press("Tab"); // with trap focus we circle back within the nav (on close btn)
37
+ let activeEl = await page.evaluate(() => document.activeElement.tagName);
38
+ expect(activeEl).toEqual("WM-NAVIGATION");
39
+ });
40
+ it("doesn't trap focus when persistent", async () => {
41
+ // wide screen, no trap focus
42
+ page.setViewport({ width: 1024, height: 800 });
43
+ await page.waitForChanges(); // test fails randomly without this
44
+ await page.keyboard.press("Tab"); // focus on 1st nav item
45
+ await page.keyboard.press("Tab"); // focus on 2nd nav item
46
+ await page.keyboard.press("Tab"); // focus on the button in main
47
+ let activeEl = await page.evaluate(() => document.activeElement.tagName);
48
+ expect(activeEl).toEqual("BUTTON");
49
+ });
50
+ it("handles focus method when collapsible and closed", async () => {
51
+ page.setViewport({ width: 1023, height: 800 });
52
+ let activeEl = await page.evaluate(() => document.activeElement.tagName);
53
+ expect(activeEl).toEqual("BODY");
54
+ nav.focus();
55
+ activeEl = await page.evaluate(() => document.activeElement.tagName);
56
+ expect(activeEl).toEqual("WM-NAVIGATION-HAMBURGER");
57
+ });
58
+ it("handles focus method when collapsible and open", async () => {
59
+ page.setViewport({ width: 1023, height: 800 });
60
+ let activeEl = await page.evaluate(() => document.activeElement.tagName);
61
+ expect(activeEl).toEqual("BODY");
62
+ expect(nav.getAttribute("aria-expanded")).toBe("false");
63
+ hamburger.click();
64
+ await page.waitForChanges();
65
+ expect(nav.getAttribute("aria-expanded")).toBe("true");
66
+ nav.focus();
67
+ activeEl = await page.evaluate(() => document.activeElement.shadowRoot.activeElement.tagName);
68
+ expect(activeEl).toEqual("WM-BUTTON"); // the close button
69
+ });
70
+ it("handles focus method when persistent", async () => {
71
+ page.setViewport({ width: 1024, height: 800 });
72
+ let activeEl = await page.evaluate(() => document.activeElement.tagName);
73
+ expect(activeEl).toEqual("BODY");
74
+ expect(nav.getAttribute("aria-expanded")).toBeUndefined;
75
+ nav.focus();
76
+ expect(nav.getAttribute("aria-expanded")).toBeUndefined; // should still be undefined
77
+ activeEl = await page.evaluate(() => document.activeElement.shadowRoot.activeElement.textContent);
78
+ expect(activeEl).toEqual("Home"); // first item
79
+ });
80
+ it("is open on load if open prop is set to true", async () => {
81
+ page = await newE2EPage();
82
+ await page.setContent(`<html lang='en'><head><title>Page</title></head><body>
83
+ <wm-navigation-hamburger nav-id="mynav"></wm-navigation-hamburger>
84
+ <wm-navigation open id="mynav">
85
+ <wm-navigation-item href="/home" text="Home" active>Home</wm-navigation-item>
86
+ <wm-navigation-item href="/things" text="Things">Things</wm-navigation-item>
87
+ </wm-navigation><main><h1>Title</h1><button>something tabbable here</button>
88
+ </main></body></html>`);
89
+ await page.waitForTimeout(500);
90
+ const nav = await page.find("wm-navigation");
91
+ expect(nav.getAttribute("aria-expanded")).toBe("true");
92
+ });
93
+ it("programatically associates hamburger and nav and properly announces to SR", async () => {
94
+ const hamburgerAriaControls = hamburger.shadowRoot.querySelector("button").getAttribute("aria-controls");
95
+ const hamburgerAriaLabel = hamburger.shadowRoot.querySelector("button").getAttribute("aria-label");
96
+ const navAriaLabel = nav.getAttribute("aria-label");
97
+ expect(hamburgerAriaControls).toBe(nav.id);
98
+ expect(hamburgerAriaLabel).toBe("Show navigation");
99
+ expect(navAriaLabel).toBe("Main");
100
+ });
101
+ // when closed, focus returns to hamburger
102
+ });
@@ -96,9 +96,9 @@ export class Navigation {
96
96
  } }));
97
97
  }
98
98
  render() {
99
- return (h(Host, { key: '4b46f2057cf47f6f2857a8c2fbd0113fbaa3d71b', role: "navigation", "aria-expanded": this.ariaExpanded, "aria-label": this.mainNavigationMessage }, this.open ? this.renderOverlay() : "", this.isCollapsible && (h("div", { key: 'fe2e1586827cdbc1d0de1813ca15e5dbd42d99c0', class: "trapfocus", tabindex: this.open ? 0 : undefined, onFocus: () => this.focusLastItem() })), h("div", { key: 'a65d6897042cadf2a43d99535c18ec314b6e1c54', class: "tray" }, h("div", { key: 'ff0242631c40b374c750e6377449d751ccc88d4c', class: "toggle-wrapper" }, h("wm-button", { key: 'e76ca281e2df25b9ab4169ff0aa9689ca3f71cae', ref: (el) => (this.toggleEl = el), class: "toggle", "button-type": "navigational", icon: this.open ? "f156" : "f35c", "icon-size": "2rem", tooltip: this.open ? globalMessages.close : globalMessages.open, "tooltip-position": "right", tabIndex: this.open ? undefined : -1, onClick: () => {
99
+ return (h(Host, { role: "navigation", "aria-expanded": this.ariaExpanded, "aria-label": this.mainNavigationMessage }, this.open ? this.renderOverlay() : "", this.isCollapsible && (h("div", { class: "trapfocus", tabindex: this.open ? 0 : undefined, onFocus: () => this.focusLastItem() })), h("div", { class: "tray" }, h("div", { class: "toggle-wrapper" }, h("wm-button", { ref: (el) => (this.toggleEl = el), class: "toggle", "button-type": "navigational", icon: this.open ? "f156" : "f35c", "icon-size": "2rem", tooltip: this.open ? globalMessages.close : globalMessages.open, "tooltip-position": "right", tabIndex: this.open ? undefined : -1, onClick: () => {
100
100
  this.open = !this.open;
101
- } })), h("ul", { key: 'd056d10575ad4aa3deb5cf00011d3469860625e0', class: "navlist" }, h("slot", { key: '5b4be146205fec5ffbd44970e60d7aa4e00c7fc1' }))), this.isCollapsible && (h("div", { key: 'dbba46d2e9e1c70a65cc968560197a56097775fe', class: "trapfocus", tabindex: this.open ? 0 : undefined, onFocus: () => this.toggleEl.focus() }))));
101
+ } })), h("ul", { class: "navlist" }, h("slot", null))), this.isCollapsible && (h("div", { class: "trapfocus", tabindex: this.open ? 0 : undefined, onFocus: () => this.toggleEl.focus() }))));
102
102
  }
103
103
  static get is() { return "wm-navigation"; }
104
104
  static get encapsulation() { return "shadow"; }