@watermarkinsights/ripple 5.3.0-0 → 5.3.0-2

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 (363) hide show
  1. package/dist/cjs/{chartFunctions-9075d687.js → chartFunctions-246529c5.js} +3 -3
  2. package/dist/cjs/{functions-b73604c3.js → functions-be4156cf.js} +7 -104
  3. package/dist/{esm/app-globals-0c592c57.js → cjs/global-6b1a23e9.js} +2 -7
  4. package/dist/cjs/index-f8ef86de.js +2582 -0
  5. package/dist/cjs/{intl-b20d5420.js → intl-a13884e8.js} +1 -1
  6. package/dist/cjs/loader.cjs.js +3 -4
  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/ripple.cjs.js +11 -12
  12. package/dist/cjs/wm-action-menu_2.cjs.entry.js +6 -8
  13. package/dist/cjs/wm-button.cjs.entry.js +4 -5
  14. package/dist/cjs/wm-chart-slice.cjs.entry.js +1 -1
  15. package/dist/cjs/wm-chart.cjs.entry.js +6 -7
  16. package/dist/cjs/wm-date-range.cjs.entry.js +7 -8
  17. package/dist/cjs/wm-datepicker.cjs.entry.js +7 -8
  18. package/dist/cjs/wm-file-list.cjs.entry.js +3 -4
  19. package/dist/cjs/wm-file.cjs.entry.js +4 -5
  20. package/dist/cjs/wm-input.cjs.entry.js +5 -6
  21. package/dist/cjs/wm-line-chart.cjs.entry.js +14 -15
  22. package/dist/cjs/wm-modal-footer.cjs.entry.js +3 -4
  23. package/dist/cjs/wm-modal-header.cjs.entry.js +5 -6
  24. package/dist/cjs/wm-modal.cjs.entry.js +5 -6
  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-option_2.cjs.entry.js +8 -10
  28. package/dist/cjs/wm-pagination.cjs.entry.js +4 -5
  29. package/dist/cjs/wm-progress-indicator_3.cjs.entry.js +7 -9
  30. package/dist/cjs/wm-search.cjs.entry.js +6 -7
  31. package/dist/cjs/wm-snackbar.cjs.entry.js +69 -35
  32. package/dist/cjs/wm-tab-item_3.cjs.entry.js +8 -11
  33. package/dist/cjs/wm-tag-input.cjs.entry.js +7 -8
  34. package/dist/cjs/wm-tag-option.cjs.entry.js +2 -2
  35. package/dist/cjs/wm-textarea.cjs.entry.js +5 -6
  36. package/dist/cjs/wm-timepicker.cjs.entry.js +5 -6
  37. package/dist/cjs/wm-toggletip.cjs.entry.js +5 -6
  38. package/dist/cjs/wm-uploader.cjs.entry.js +6 -7
  39. package/dist/cjs/wm-wrapper.cjs.entry.js +1 -1
  40. package/dist/collection/collection-manifest.json +2 -2
  41. package/dist/collection/components/charts/chartFunctions.js +1 -1
  42. package/dist/collection/components/charts/chartFunctions.spec.js +16 -0
  43. package/dist/collection/components/charts/priv-chart-popover/priv-chart-popover.e2e.js +81 -0
  44. package/dist/collection/components/charts/priv-chart-popover/priv-chart-popover.js +2 -2
  45. package/dist/collection/components/charts/screenshots.e2e.js +96 -0
  46. package/dist/collection/components/charts/wm-chart/wm-chart.e2e.js +213 -0
  47. package/dist/collection/components/charts/wm-chart/wm-chart.js +1 -1
  48. package/dist/collection/components/charts/wm-chart/wm-chart.spec.js +37 -0
  49. package/dist/collection/components/charts/wm-line-chart/wm-line-chart.e2e.js +176 -0
  50. package/dist/collection/components/charts/wm-line-chart/wm-line-chart.js +9 -9
  51. package/dist/collection/components/charts/wm-line-chart/wm-line-chart.spec.js +163 -0
  52. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-indicator.js +1 -1
  53. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-monitor.e2e.js +69 -0
  54. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-monitor.js +1 -1
  55. package/dist/collection/components/charts/wm-progress-monitor/wm-progress-monitor.spec.js +79 -0
  56. package/dist/collection/components/datepickers/priv-calendar/priv-calendar.js +2 -2
  57. package/dist/collection/components/datepickers/priv-calendar/priv-calendar.spec.js +89 -0
  58. package/dist/collection/components/datepickers/wm-date-range.e2e.js +443 -0
  59. package/dist/collection/components/datepickers/wm-date-range.js +12 -16
  60. package/dist/collection/components/datepickers/wm-date-range.spec.js +22 -0
  61. package/dist/collection/components/datepickers/wm-datepicker.e2e.js +382 -0
  62. package/dist/collection/components/datepickers/wm-datepicker.js +12 -16
  63. package/dist/collection/components/datepickers/wm-datepicker.spec.js +21 -0
  64. package/dist/collection/components/wm-action-menu/wm-action-menu.e2e.js +200 -0
  65. package/dist/collection/components/wm-action-menu/wm-action-menu.js +1 -1
  66. package/dist/collection/components/wm-action-menu/wm-action-menu.spec.js +48 -0
  67. package/dist/collection/components/wm-button/wm-button.e2e.js +55 -0
  68. package/dist/collection/components/wm-button/wm-button.js +1 -1
  69. package/dist/collection/components/wm-button/wm-button.spec.js +74 -0
  70. package/dist/collection/components/wm-file/wm-file.js +1 -1
  71. package/dist/collection/components/wm-file/wm-file.spec.js +194 -0
  72. package/dist/collection/components/wm-file-list/wm-file-list.js +1 -1
  73. package/dist/collection/components/wm-file-list/wm-file-list.spec.js +69 -0
  74. package/dist/collection/components/wm-input/wm-input.e2e.js +32 -0
  75. package/dist/collection/components/wm-input/wm-input.js +1 -1
  76. package/dist/collection/components/wm-input/wm-input.spec.js +173 -0
  77. package/dist/collection/components/wm-menuitem/wm-menuitem.e2e.js +23 -0
  78. package/dist/collection/components/wm-menuitem/wm-menuitem.js +1 -1
  79. package/dist/collection/components/wm-menuitem/wm-menuitem.spec.js +54 -0
  80. package/dist/collection/components/wm-modal/wm-modal-footer.js +1 -1
  81. package/dist/collection/components/wm-modal/wm-modal-footer.spec.js +11 -0
  82. package/dist/collection/components/wm-modal/wm-modal-header.js +1 -1
  83. package/dist/collection/components/wm-modal/wm-modal-header.spec.js +8 -0
  84. package/dist/collection/components/wm-modal/wm-modal.e2e.js +104 -0
  85. package/dist/collection/components/wm-modal/wm-modal.js +2 -2
  86. package/dist/collection/components/wm-modal/wm-modal.spec.js +30 -0
  87. package/dist/collection/components/wm-navigation/wm-navigation-hamburger.js +1 -1
  88. package/dist/collection/components/wm-navigation/wm-navigation-item.js +1 -1
  89. package/dist/collection/components/wm-navigation/wm-navigation.e2e.js +102 -0
  90. package/dist/collection/components/wm-navigation/wm-navigation.js +2 -2
  91. package/dist/collection/components/wm-navigation/wm-navigation.spec.js +91 -0
  92. package/dist/collection/components/wm-navigator/priv-navigator-button/priv-navigator-button.e2e.js +50 -0
  93. package/dist/collection/components/wm-navigator/priv-navigator-button/priv-navigator-button.js +1 -1
  94. package/dist/collection/components/wm-navigator/priv-navigator-item/priv-navigator-item.js +1 -1
  95. package/dist/collection/components/wm-navigator/wm-navigator.e2e.js +209 -0
  96. package/dist/collection/components/wm-navigator/wm-navigator.spec.js +177 -0
  97. package/dist/collection/components/wm-option/wm-option.e2e.js +22 -0
  98. package/dist/collection/components/wm-option/wm-option.js +1 -1
  99. package/dist/collection/components/wm-option/wm-option.spec.js +63 -0
  100. package/dist/collection/components/wm-pagination/wm-pagination.e2e.js +312 -0
  101. package/dist/collection/components/wm-pagination/wm-pagination.js +1 -1
  102. package/dist/collection/components/wm-search/wm-search.e2e.js +76 -0
  103. package/dist/collection/components/wm-search/wm-search.js +4 -5
  104. package/dist/collection/components/wm-search/wm-search.spec.js +71 -0
  105. package/dist/collection/components/wm-select/wm-select.e2e.js +521 -0
  106. package/dist/collection/components/wm-select/wm-select.js +2 -2
  107. package/dist/collection/components/wm-select/wm-select.spec.js +271 -0
  108. package/dist/collection/components/wm-snackbar/wm-snackbar.css +69 -46
  109. package/dist/collection/components/wm-snackbar/wm-snackbar.e2e.js +112 -0
  110. package/dist/collection/components/wm-snackbar/wm-snackbar.js +66 -31
  111. package/dist/collection/components/wm-snackbar/wm-snackbar.spec.js +9 -0
  112. package/dist/collection/components/wm-tabs/wm-tab-item/wm-tab-item.js +1 -1
  113. package/dist/collection/components/wm-tabs/wm-tab-list/wm-tab-list.js +1 -1
  114. package/dist/collection/components/wm-tabs/wm-tab-panel/wm-tab-panel.js +1 -1
  115. package/dist/collection/components/wm-tabs/wm-tabs.e2e.js +91 -0
  116. package/dist/collection/components/wm-tabs/wm-tabs.spec.js +12 -0
  117. package/dist/collection/components/wm-tag-input/wm-tag-input.e2e.js +204 -0
  118. package/dist/collection/components/wm-tag-input/wm-tag-input.js +3 -3
  119. package/dist/collection/components/wm-tag-input/wm-tag-input.spec.js +195 -0
  120. package/dist/collection/components/wm-textarea/wm-textarea.e2e.js +41 -0
  121. package/dist/collection/components/wm-textarea/wm-textarea.js +1 -1
  122. package/dist/collection/components/wm-textarea/wm-textarea.spec.js +79 -0
  123. package/dist/collection/components/wm-timepicker/wm-timepicker.e2e.js +163 -0
  124. package/dist/collection/components/wm-timepicker/wm-timepicker.js +8 -11
  125. package/dist/collection/components/wm-timepicker/wm-timepicker.spec.js +147 -0
  126. package/dist/collection/components/wm-toggletip/wm-toggletip.e2e.js +69 -0
  127. package/dist/collection/components/wm-toggletip/wm-toggletip.js +2 -2
  128. package/dist/collection/components/wm-toggletip/wm-toggletip.spec.js +21 -0
  129. package/dist/collection/components/wm-uploader/wm-uploader.e2e.js +70 -0
  130. package/dist/collection/components/wm-uploader/wm-uploader.js +2 -2
  131. package/dist/collection/components/wm-uploader/wm-uploader.spec.js +234 -0
  132. package/dist/collection/dev/snackbar.js +48 -32
  133. package/dist/collection/global/functions.spec.js +126 -0
  134. package/dist/collection/lang/lang.spec.js +20 -0
  135. package/dist/esm/{chartFunctions-730742b7.js → chartFunctions-e2554a36.js} +3 -3
  136. package/dist/esm/{functions-eda88c5f.js → functions-f65dbb96.js} +8 -105
  137. package/dist/{cjs/app-globals-7025eb63.js → esm/global-b3bbb95e.js} +1 -10
  138. package/dist/esm/index-f164fbca.js +2552 -0
  139. package/dist/esm/{intl-de8432e2.js → intl-f7f77de7.js} +1 -1
  140. package/dist/esm/loader.js +4 -5
  141. package/dist/esm/polyfills/core-js.js +0 -0
  142. package/dist/esm/polyfills/dom.js +0 -0
  143. package/dist/esm/polyfills/es5-html-element.js +0 -0
  144. package/dist/esm/polyfills/index.js +0 -0
  145. package/dist/esm/polyfills/system.js +0 -0
  146. package/dist/esm/priv-calendar.entry.js +5 -6
  147. package/dist/esm/priv-chart-popover.entry.js +5 -6
  148. package/dist/esm/priv-navigator-button.entry.js +3 -4
  149. package/dist/esm/priv-navigator-item.entry.js +3 -4
  150. package/dist/esm/ripple.js +12 -13
  151. package/dist/esm/wm-action-menu_2.entry.js +6 -8
  152. package/dist/esm/wm-button.entry.js +4 -5
  153. package/dist/esm/wm-chart-slice.entry.js +1 -1
  154. package/dist/esm/wm-chart.entry.js +6 -7
  155. package/dist/esm/wm-date-range.entry.js +7 -8
  156. package/dist/esm/wm-datepicker.entry.js +7 -8
  157. package/dist/esm/wm-file-list.entry.js +3 -4
  158. package/dist/esm/wm-file.entry.js +4 -5
  159. package/dist/esm/wm-input.entry.js +5 -6
  160. package/dist/esm/wm-line-chart.entry.js +14 -15
  161. package/dist/esm/wm-modal-footer.entry.js +3 -4
  162. package/dist/esm/wm-modal-header.entry.js +5 -6
  163. package/dist/esm/wm-modal.entry.js +5 -6
  164. package/dist/esm/wm-navigation_3.entry.js +10 -13
  165. package/dist/esm/wm-navigator.entry.js +3 -4
  166. package/dist/esm/wm-option_2.entry.js +8 -10
  167. package/dist/esm/wm-pagination.entry.js +4 -5
  168. package/dist/esm/wm-progress-indicator_3.entry.js +7 -9
  169. package/dist/esm/wm-search.entry.js +6 -7
  170. package/dist/esm/wm-snackbar.entry.js +69 -35
  171. package/dist/esm/wm-tab-item_3.entry.js +8 -11
  172. package/dist/esm/wm-tag-input.entry.js +7 -8
  173. package/dist/esm/wm-tag-option.entry.js +2 -2
  174. package/dist/esm/wm-textarea.entry.js +5 -6
  175. package/dist/esm/wm-timepicker.entry.js +5 -6
  176. package/dist/esm/wm-toggletip.entry.js +5 -6
  177. package/dist/esm/wm-uploader.entry.js +6 -7
  178. package/dist/esm/wm-wrapper.entry.js +1 -1
  179. package/dist/esm-es5/{chartFunctions-730742b7.js → chartFunctions-e2554a36.js} +1 -1
  180. package/dist/esm-es5/functions-f65dbb96.js +1 -0
  181. package/dist/esm-es5/global-b3bbb95e.js +1 -0
  182. package/dist/esm-es5/index-f164fbca.js +1 -0
  183. package/dist/esm-es5/{intl-de8432e2.js → intl-f7f77de7.js} +1 -1
  184. package/dist/esm-es5/loader.js +1 -1
  185. package/dist/esm-es5/priv-calendar.entry.js +1 -1
  186. package/dist/esm-es5/priv-chart-popover.entry.js +1 -1
  187. package/dist/esm-es5/priv-navigator-button.entry.js +1 -1
  188. package/dist/esm-es5/priv-navigator-item.entry.js +1 -1
  189. package/dist/esm-es5/ripple.js +1 -1
  190. package/dist/esm-es5/wm-action-menu_2.entry.js +1 -1
  191. package/dist/esm-es5/wm-button.entry.js +1 -1
  192. package/dist/esm-es5/wm-chart-slice.entry.js +1 -1
  193. package/dist/esm-es5/wm-chart.entry.js +1 -1
  194. package/dist/esm-es5/wm-date-range.entry.js +1 -1
  195. package/dist/esm-es5/wm-datepicker.entry.js +1 -1
  196. package/dist/esm-es5/wm-file-list.entry.js +1 -1
  197. package/dist/esm-es5/wm-file.entry.js +1 -1
  198. package/dist/esm-es5/wm-input.entry.js +1 -1
  199. package/dist/esm-es5/wm-line-chart.entry.js +1 -1
  200. package/dist/esm-es5/wm-modal-footer.entry.js +1 -1
  201. package/dist/esm-es5/wm-modal-header.entry.js +1 -1
  202. package/dist/esm-es5/wm-modal.entry.js +1 -1
  203. package/dist/esm-es5/wm-navigation_3.entry.js +1 -1
  204. package/dist/esm-es5/wm-navigator.entry.js +1 -1
  205. package/dist/esm-es5/wm-option_2.entry.js +1 -1
  206. package/dist/esm-es5/wm-pagination.entry.js +1 -1
  207. package/dist/esm-es5/wm-progress-indicator_3.entry.js +1 -1
  208. package/dist/esm-es5/wm-search.entry.js +1 -1
  209. package/dist/esm-es5/wm-snackbar.entry.js +1 -1
  210. package/dist/esm-es5/wm-tab-item_3.entry.js +1 -1
  211. package/dist/esm-es5/wm-tag-input.entry.js +1 -1
  212. package/dist/esm-es5/wm-tag-option.entry.js +1 -1
  213. package/dist/esm-es5/wm-textarea.entry.js +1 -1
  214. package/dist/esm-es5/wm-timepicker.entry.js +1 -1
  215. package/dist/esm-es5/wm-toggletip.entry.js +1 -1
  216. package/dist/esm-es5/wm-uploader.entry.js +1 -1
  217. package/dist/esm-es5/wm-wrapper.entry.js +1 -1
  218. package/dist/loader/cdn.js +2 -1
  219. package/dist/loader/index.cjs.js +2 -1
  220. package/dist/loader/index.d.ts +0 -3
  221. package/dist/loader/index.es2017.js +2 -1
  222. package/dist/loader/index.js +2 -1
  223. package/dist/ripple/p-04bf6c89.entry.js +1 -0
  224. package/dist/ripple/{p-98e77431.entry.js → p-0b77b2a1.entry.js} +1 -1
  225. package/dist/ripple/p-0fe97e85.system.js +2 -0
  226. package/dist/ripple/p-109684b1.entry.js +1 -0
  227. package/dist/ripple/p-11383396.system.entry.js +1 -0
  228. package/dist/ripple/{p-7b5ac088.entry.js → p-19dec591.entry.js} +1 -1
  229. package/dist/ripple/p-1cb6b37e.entry.js +1 -0
  230. package/dist/ripple/p-2197287c.entry.js +1 -0
  231. package/dist/ripple/{p-5ab8174c.entry.js → p-22e6104e.entry.js} +1 -1
  232. package/dist/ripple/p-24d88d8d.system.entry.js +1 -0
  233. package/dist/ripple/{p-ff095cec.entry.js → p-25446670.entry.js} +1 -1
  234. package/dist/ripple/p-2bac4b4e.system.entry.js +1 -0
  235. package/dist/ripple/p-30a9ba6e.entry.js +1 -0
  236. package/dist/ripple/p-32cf6907.system.entry.js +1 -0
  237. package/dist/ripple/p-379fe53e.entry.js +1 -0
  238. package/dist/ripple/{p-4aae5688.entry.js → p-3a070f35.entry.js} +1 -1
  239. package/dist/ripple/{p-181068af.system.entry.js → p-3db9e0d8.system.entry.js} +1 -1
  240. package/dist/ripple/p-41e8a079.entry.js +1 -0
  241. package/dist/ripple/p-4272aa37.system.js +1 -0
  242. package/dist/ripple/p-45126063.system.entry.js +1 -0
  243. package/dist/ripple/{p-fd34619f.system.entry.js → p-48a6acfa.system.entry.js} +1 -1
  244. package/dist/ripple/p-4de51706.js +2 -0
  245. package/dist/ripple/{p-245f0080.entry.js → p-4e616347.entry.js} +1 -1
  246. package/dist/ripple/p-577ea283.system.entry.js +1 -0
  247. package/dist/ripple/p-5a04c222.entry.js +1 -0
  248. package/dist/ripple/{p-3036a712.js → p-5b2c1bd1.js} +1 -1
  249. package/dist/ripple/{p-e0929c38.system.js → p-5bbf7fdc.system.js} +1 -1
  250. package/dist/ripple/p-5dbad2ff.entry.js +1 -0
  251. package/dist/ripple/p-625aeeec.system.entry.js +1 -0
  252. package/dist/ripple/p-635f40b1.entry.js +1 -0
  253. package/dist/ripple/p-63fabfed.entry.js +1 -0
  254. package/dist/ripple/p-6dc3ee86.system.js +1 -0
  255. package/dist/ripple/p-7144d185.system.entry.js +1 -0
  256. package/dist/ripple/p-720b6ab0.entry.js +1 -0
  257. package/dist/ripple/p-7573a2fa.entry.js +1 -0
  258. package/dist/ripple/p-76d2dada.entry.js +1 -0
  259. package/dist/ripple/{p-0f117524.system.entry.js → p-780d4673.system.entry.js} +1 -1
  260. package/dist/ripple/p-79af9baf.entry.js +1 -0
  261. package/dist/ripple/{p-b6dcc6d8.system.entry.js → p-7a9ffbcb.system.entry.js} +1 -1
  262. package/dist/ripple/{p-f170963b.system.entry.js → p-7e56da2e.system.entry.js} +1 -1
  263. package/dist/ripple/p-7f4b4071.system.entry.js +1 -0
  264. package/dist/ripple/{p-a36f5e7d.system.entry.js → p-8081f931.system.entry.js} +1 -1
  265. package/dist/ripple/p-84926b89.system.entry.js +1 -0
  266. package/dist/ripple/p-88406560.system.entry.js +1 -0
  267. package/dist/ripple/{p-f95bc54b.entry.js → p-8f38dc86.entry.js} +1 -1
  268. package/dist/ripple/p-92c1ff36.system.entry.js +1 -0
  269. package/dist/ripple/{p-0e1523db.entry.js → p-98120733.entry.js} +1 -1
  270. package/dist/ripple/p-9c6d6b26.system.entry.js +1 -0
  271. package/dist/ripple/{p-e3a15de3.system.entry.js → p-9d8c2a52.system.entry.js} +1 -1
  272. package/dist/ripple/{p-47d993b9.system.entry.js → p-a99b05de.system.entry.js} +1 -1
  273. package/dist/ripple/{p-ce028b38.system.js → p-ae32eb8d.system.js} +1 -1
  274. package/dist/ripple/p-ae8ad491.entry.js +1 -0
  275. package/dist/ripple/p-b0579a2a.system.entry.js +1 -0
  276. package/dist/ripple/p-b0f14557.system.entry.js +1 -0
  277. package/dist/ripple/p-ba751ca4.js +1 -0
  278. package/dist/ripple/{p-39f4fca0.system.entry.js → p-bd27ded2.system.entry.js} +1 -1
  279. package/dist/ripple/p-c38f2a00.system.entry.js +1 -0
  280. package/dist/ripple/p-c51293e2.entry.js +1 -0
  281. package/dist/ripple/p-c717d895.entry.js +1 -0
  282. package/dist/ripple/p-c8873e0c.system.entry.js +1 -0
  283. package/dist/ripple/p-ca9d9447.system.entry.js +1 -0
  284. package/dist/ripple/p-cda6c77e.entry.js +1 -0
  285. package/dist/ripple/{p-ecd26b33.system.entry.js → p-ce5455a3.system.entry.js} +1 -1
  286. package/dist/ripple/p-d265a41e.entry.js +1 -0
  287. package/dist/ripple/p-d325a37b.entry.js +1 -0
  288. package/dist/ripple/p-d7c47dc0.system.entry.js +1 -0
  289. package/dist/ripple/p-d88d806e.js +1 -0
  290. package/dist/ripple/p-dcfdbd30.entry.js +1 -0
  291. package/dist/ripple/p-eb649319.system.js +1 -0
  292. package/dist/ripple/p-ef3fe609.system.entry.js +1 -0
  293. package/dist/ripple/p-f6f29a56.entry.js +1 -0
  294. package/dist/ripple/{p-96cc3c63.js → p-f79a6e32.js} +1 -1
  295. package/dist/ripple/p-f93858ad.system.entry.js +1 -0
  296. package/dist/ripple/p-fc7e5296.entry.js +1 -0
  297. package/dist/ripple/p-ff80aadd.system.entry.js +1 -0
  298. package/dist/ripple/ripple.esm.js +1 -1
  299. package/dist/ripple/ripple.js +1 -1
  300. package/dist/types/components/wm-snackbar/wm-snackbar.d.ts +6 -3
  301. package/dist/types/global/interfaces.d.ts +3 -0
  302. package/dist/types/stencil-public-runtime.d.ts +10 -3
  303. package/package.json +1 -1
  304. package/dist/cjs/index-3c3d6c9f.js +0 -1810
  305. package/dist/esm/index-0ed3ed7d.js +0 -1780
  306. package/dist/esm-es5/app-globals-0c592c57.js +0 -1
  307. package/dist/esm-es5/functions-eda88c5f.js +0 -1
  308. package/dist/esm-es5/index-0ed3ed7d.js +0 -1
  309. package/dist/ripple/p-0096e233.system.entry.js +0 -1
  310. package/dist/ripple/p-0ad27de3.system.entry.js +0 -1
  311. package/dist/ripple/p-0ccf9f96.entry.js +0 -1
  312. package/dist/ripple/p-0f7a85f4.entry.js +0 -1
  313. package/dist/ripple/p-13760c2c.entry.js +0 -1
  314. package/dist/ripple/p-14bab3fa.system.entry.js +0 -1
  315. package/dist/ripple/p-1e536698.js +0 -1
  316. package/dist/ripple/p-2c18b6d1.system.entry.js +0 -1
  317. package/dist/ripple/p-340b18ea.entry.js +0 -1
  318. package/dist/ripple/p-37c39a40.system.entry.js +0 -1
  319. package/dist/ripple/p-3f5e94e3.system.js +0 -1
  320. package/dist/ripple/p-48beea19.system.js +0 -1
  321. package/dist/ripple/p-4ea963f3.system.entry.js +0 -1
  322. package/dist/ripple/p-501d3115.entry.js +0 -1
  323. package/dist/ripple/p-527581c5.entry.js +0 -1
  324. package/dist/ripple/p-563b5820.entry.js +0 -1
  325. package/dist/ripple/p-57695dba.js +0 -2
  326. package/dist/ripple/p-5c6c325e.system.entry.js +0 -1
  327. package/dist/ripple/p-5f4c8d63.system.entry.js +0 -1
  328. package/dist/ripple/p-68e3e7c0.entry.js +0 -1
  329. package/dist/ripple/p-68fec757.system.entry.js +0 -1
  330. package/dist/ripple/p-6982bc34.entry.js +0 -1
  331. package/dist/ripple/p-6a793c40.system.entry.js +0 -1
  332. package/dist/ripple/p-6c31f0ad.system.entry.js +0 -1
  333. package/dist/ripple/p-6daf1bd3.system.entry.js +0 -1
  334. package/dist/ripple/p-6e406e8b.entry.js +0 -1
  335. package/dist/ripple/p-77210f26.entry.js +0 -1
  336. package/dist/ripple/p-7a844f5d.system.js +0 -2
  337. package/dist/ripple/p-7d5aaa73.system.entry.js +0 -1
  338. package/dist/ripple/p-80c92919.system.entry.js +0 -1
  339. package/dist/ripple/p-81fd2ed5.system.entry.js +0 -1
  340. package/dist/ripple/p-84d294d1.system.js +0 -1
  341. package/dist/ripple/p-85178a0d.entry.js +0 -1
  342. package/dist/ripple/p-8768ba4d.system.entry.js +0 -1
  343. package/dist/ripple/p-8af21b69.entry.js +0 -1
  344. package/dist/ripple/p-a30eef53.entry.js +0 -1
  345. package/dist/ripple/p-ad6c979f.entry.js +0 -1
  346. package/dist/ripple/p-af8c1cfa.entry.js +0 -1
  347. package/dist/ripple/p-b19be746.entry.js +0 -1
  348. package/dist/ripple/p-b483ec14.entry.js +0 -1
  349. package/dist/ripple/p-b4a34241.entry.js +0 -1
  350. package/dist/ripple/p-be28a95e.system.entry.js +0 -1
  351. package/dist/ripple/p-c6d970a4.entry.js +0 -1
  352. package/dist/ripple/p-dba63006.system.entry.js +0 -1
  353. package/dist/ripple/p-dbb37269.system.entry.js +0 -1
  354. package/dist/ripple/p-e19f8c43.js +0 -1
  355. package/dist/ripple/p-e3d66797.entry.js +0 -1
  356. package/dist/ripple/p-e64276f2.entry.js +0 -1
  357. package/dist/ripple/p-e9978b2f.entry.js +0 -1
  358. package/dist/ripple/p-ecbd3ea9.system.entry.js +0 -1
  359. package/dist/ripple/p-ee49cb03.entry.js +0 -1
  360. package/dist/ripple/p-f0fbb86b.system.entry.js +0 -1
  361. package/dist/ripple/p-f4f3bf9f.system.entry.js +0 -1
  362. package/dist/types/components/datepickers/priv-calendar/priv-calendar.d.ts +0 -72
  363. package/dist/types/components/datepickers/wm-date-range.d.ts +0 -68
@@ -0,0 +1,69 @@
1
+ import { newSpecPage } from "@stencil/core/testing";
2
+ import { FileList } from "./wm-file-list";
3
+ import { File } from "../wm-file/wm-file";
4
+ // mock ResizeObserver
5
+ global.ResizeObserver = jest.fn().mockImplementation(() => ({
6
+ observe: jest.fn(),
7
+ unobserve: jest.fn(),
8
+ disconnect: jest.fn(),
9
+ }));
10
+ describe("wm-file-list", () => {
11
+ let page;
12
+ async function createPageHelper() {
13
+ return await newSpecPage({
14
+ components: [FileList, File],
15
+ html: `<wm-file-list id="filelist1">
16
+ <wm-file id="file1" name="File retrieved from server" type="pdf" last-updated="1/28/2020 5:29 PM" file-actions="preview download"></wm-file>
17
+ <wm-file id="file2" name="Second file" type="jpeg" last-updated="2/14/2019 7:21 AM" file-actions="preview download"></wm-file>
18
+ </wm-file-list>`,
19
+ });
20
+ }
21
+ it("renders all files", async () => {
22
+ page = await createPageHelper();
23
+ await page.waitForChanges();
24
+ let fileEls = page.root.querySelectorAll("wm-file");
25
+ expect(fileEls.length).toBe(2);
26
+ expect(fileEls[0]).toEqualAttribute("id", "file1");
27
+ expect(fileEls[1]).toEqualAttribute("id", "file2");
28
+ });
29
+ it("passes on show-info to it's children wm-files", async () => {
30
+ page = await createPageHelper();
31
+ await page.waitForChanges();
32
+ // default (last-updated)
33
+ let fileEl = page.root.querySelector("wm-file");
34
+ expect(fileEl.showInfo).toBe("last-updated");
35
+ // size
36
+ page = await newSpecPage({
37
+ components: [FileList, File],
38
+ html: `<wm-file-list id="filelist1" show-info="size">
39
+ <wm-file id="file1" name="File retrieved from server" type="pdf" last-updated="1/28/2020 5:29 PM" file-actions="preview download"></wm-file>
40
+ <wm-file id="file2" name="Second file" type="jpeg" last-updated="2/14/2019 7:21 AM" file-actions="preview download"></wm-file>
41
+ </wm-file-list>`,
42
+ });
43
+ await page.waitForChanges();
44
+ fileEl = page.root.querySelector("wm-file");
45
+ expect(fileEl.showInfo).toBe("size");
46
+ // last-updated (specified)
47
+ page = await newSpecPage({
48
+ components: [FileList, File],
49
+ html: `<wm-file-list id="filelist1" show-info="last-updated">
50
+ <wm-file id="file1" name="File retrieved from server" type="pdf" last-updated="1/28/2020 5:29 PM" file-actions="preview download"></wm-file>
51
+ <wm-file id="file2" name="Second file" type="jpeg" last-updated="2/14/2019 7:21 AM" file-actions="preview download"></wm-file>
52
+ </wm-file-list>`,
53
+ });
54
+ await page.waitForChanges();
55
+ fileEl = page.root.querySelector("wm-file");
56
+ expect(fileEl.showInfo).toBe("last-updated");
57
+ // none
58
+ page = await newSpecPage({
59
+ components: [FileList, File],
60
+ html: `<wm-file-list id="filelist1" show-info="none">
61
+ <wm-file id="file1" name="File retrieved from server" type="pdf" last-updated="1/28/2020 5:29 PM" file-actions="preview download"></wm-file>
62
+ <wm-file id="file2" name="Second file" type="jpeg" last-updated="2/14/2019 7:21 AM" file-actions="preview download"></wm-file>
63
+ </wm-file-list>`,
64
+ });
65
+ await page.waitForChanges();
66
+ fileEl = page.root.querySelector("wm-file");
67
+ expect(fileEl.showInfo).toBe("none");
68
+ });
69
+ });
@@ -0,0 +1,32 @@
1
+ import AxePuppeteer from "@axe-core/puppeteer";
2
+ import { newE2EPage } from "@stencil/core/testing";
3
+ describe("wm-input", () => {
4
+ // ts throws erroneous warning about vars being unused...
5
+ // @ts-ignore
6
+ let page, el, inputField;
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
+ <wm-input label="input"></wm-input>
11
+ </main></body></html>`);
12
+ el = await page.find("wm-input");
13
+ inputField = await page.find("wm-input >>> input");
14
+ await page.waitForChanges();
15
+ });
16
+ it("passes Axe checks", async () => {
17
+ const results = await new AxePuppeteer(page).analyze();
18
+ expect(results.violations.length).toBe(0);
19
+ });
20
+ it("updates input value when changed programatically", async () => {
21
+ el.setProperty("value", "33245");
22
+ await page.waitForChanges();
23
+ const value = await el.getProperty("value");
24
+ expect(value).toBe("33245");
25
+ });
26
+ it("updates value prop when user types", async () => {
27
+ await inputField.type("example");
28
+ await page.waitForChanges();
29
+ const value = await el.getProperty("value");
30
+ expect(value).toBe("example");
31
+ });
32
+ });
@@ -101,7 +101,7 @@ export class Input {
101
101
  : `info error`;
102
102
  }
103
103
  render() {
104
- return (h("div", { key: 'b9598ed315d13b3f054d4155499dc00f6b8cc855', class: `wrapper label-${this.labelPosition} ${this.errorMessage ? "invalid" : ""}`, ref: (el) => (this.inputWrapperEl = el) }, h("div", { key: '90b5fe4c5b579e1a520179db171a1d68e4bb7a9c', class: "label-wrapper" }, h("label", { key: '03f832e30622f6fd32178fa95c327feb7ea6638a', htmlFor: "inputfield", class: "label" }, this.label, this.characterLimit && (h("span", { key: '73d65801ae9fa94b946306076bf3622a40d56527', class: "sr-only" }, " ", globalMessages.getCharacterLimit(this.characterLimit))), this.requiredField && (h("span", { key: '382a3b7293ba2f580ffd1f1e920bb392e872ce84', class: "required", "aria-hidden": "true" }, "*")))), h("div", { key: '2463e3168a84fcf47b624ba3507afaf7c47726da', class: "inner-wrapper" }, h("div", { key: '3f4cf72b7af8dd980e4d0f34a7337addca76d170', class: "text-after-wrapper" }, h("div", { key: '6e7812958b117361e821a48926eb6347b0158da4', class: `inputfield-wrapper ${this.isDisabled ? "disabled" : ""}`, style: this.getInputWidth() }, this.symbolBefore && (h("span", { key: '2839c13d5312ba38205d6d1aa82d3a9654d5f06c', class: "symbol", id: "symbol-before" }, this.symbolBefore)), h("input", { key: '741abc0a84608038a13f6432f28f02adc5dc4395', ref: (el) => (this.inputEl = el), id: "inputfield", disabled: this.isDisabled, "aria-describedby": this.descriptors(), onInput: (ev) => this.handleInput(ev), onKeyDown: (ev) => this.handleKeyDown(ev), onBlur: () => this.handleBlur(), onFocus: () => this.handleFocus(), placeholder: this.placeholder, autocomplete: "off", "aria-required": this.requiredField ? "true" : null, maxLength: this.characterLimit || undefined, type: this.type, step: this.step, max: this.max, min: this.min, value: this.el.value }), this.symbolAfter && (h("span", { key: '55ec76f3a809ca1491592875518c8e647843ac99', class: "symbol", id: "symbol-after" }, this.symbolAfter)), this.characterLimit && typeof this.characterLimit === "number" ? (h("div", { class: "character-count" }, this.charCount, "/", this.characterLimit)) : ("")), this.textAfter && (h("span", { key: '908591d6da6542bb2350aa7813429f451611734e', class: "text-after", id: "text-after" }, this.textAfter))), this.info && (h("div", { key: '5dbc627b5db96879daf8c2335f7ae3bb9517e767', id: "info", class: "info" }, this.info)), h("div", { key: 'df38dbf928f9990d5a9d2c6ddaba67d49686f6e4', id: "error", class: "error-message" }, this.errorMessage), h("div", { key: 'c08662f28c17c7eda3809fb73c2badecf8e42c49', class: "sr-only", "aria-live": "polite", "aria-atomic": "true", ref: (el) => (this.liveRegionEl = el) }, this.announcement))));
104
+ return (h("div", { class: `wrapper label-${this.labelPosition} ${this.errorMessage ? "invalid" : ""}`, ref: (el) => (this.inputWrapperEl = el) }, h("div", { class: "label-wrapper" }, h("label", { htmlFor: "inputfield", class: "label" }, this.label, this.characterLimit && (h("span", { class: "sr-only" }, " ", globalMessages.getCharacterLimit(this.characterLimit))), this.requiredField && (h("span", { class: "required", "aria-hidden": "true" }, "*")))), h("div", { class: "inner-wrapper" }, h("div", { class: "text-after-wrapper" }, h("div", { class: `inputfield-wrapper ${this.isDisabled ? "disabled" : ""}`, style: this.getInputWidth() }, this.symbolBefore && (h("span", { class: "symbol", id: "symbol-before" }, this.symbolBefore)), h("input", { ref: (el) => (this.inputEl = el), id: "inputfield", disabled: this.isDisabled, "aria-describedby": this.descriptors(), onInput: (ev) => this.handleInput(ev), onKeyDown: (ev) => this.handleKeyDown(ev), onBlur: () => this.handleBlur(), onFocus: () => this.handleFocus(), placeholder: this.placeholder, autocomplete: "off", "aria-required": this.requiredField ? "true" : null, maxLength: this.characterLimit || undefined, type: this.type, step: this.step, max: this.max, min: this.min, value: this.el.value }), this.symbolAfter && (h("span", { class: "symbol", id: "symbol-after" }, this.symbolAfter)), this.characterLimit && typeof this.characterLimit === "number" ? (h("div", { class: "character-count" }, this.charCount, "/", this.characterLimit)) : ("")), this.textAfter && (h("span", { class: "text-after", id: "text-after" }, this.textAfter))), this.info && (h("div", { id: "info", class: "info" }, this.info)), h("div", { id: "error", class: "error-message" }, this.errorMessage), h("div", { class: "sr-only", "aria-live": "polite", "aria-atomic": "true", ref: (el) => (this.liveRegionEl = el) }, this.announcement))));
105
105
  }
106
106
  static get is() { return "wm-input"; }
107
107
  static get encapsulation() { return "shadow"; }
@@ -0,0 +1,173 @@
1
+ import { newSpecPage } from "@stencil/core/testing";
2
+ import { Input } from "./wm-input";
3
+ describe("input", () => {
4
+ let page;
5
+ beforeEach(async () => {
6
+ page = await newSpecPage({
7
+ components: [Input],
8
+ html: "<wm-input label='input'></wm-input>",
9
+ });
10
+ });
11
+ it("has the right aria attributes", async () => {
12
+ let inputField = await page.root.shadowRoot.querySelector("input");
13
+ // input field is described by help text
14
+ expect(inputField).toEqualAttribute("aria-describedby", "info error");
15
+ });
16
+ it("inputfield is disabled when the prop is passed", async () => {
17
+ await page.setContent(`<wm-input label="input" disabled></wm-input>`);
18
+ let inputField = await page.root.shadowRoot.querySelector("input");
19
+ expect(inputField).toHaveAttribute("disabled");
20
+ });
21
+ it("handles keydown", () => {
22
+ // handleKeyDown
23
+ const component = new Input();
24
+ component.characterLimit = 10;
25
+ let event = { key: "", ctrlKey: false, metaKey: false, altKey: false };
26
+ let inputEl = document.createElement("input");
27
+ // @ts-ignore
28
+ component.inputEl = inputEl;
29
+ const mockAnnounce = (component.announce = jest.fn());
30
+ const mockGenerateCharacterLimiWarning = (component.generateCharacterLimitWarning = jest.fn());
31
+ function resetKeys() {
32
+ event.key = "";
33
+ event.ctrlKey = false;
34
+ event.metaKey = false;
35
+ event.altKey = false;
36
+ //@ts-ignore
37
+ component.inputEl.value = "";
38
+ }
39
+ // no modifiers, empty key
40
+ resetKeys();
41
+ component.handleKeyDown(event);
42
+ expect(mockAnnounce).toHaveBeenCalledTimes(0);
43
+ expect(mockGenerateCharacterLimiWarning).toHaveBeenCalledTimes(0);
44
+ jest.clearAllMocks();
45
+ // no modifiers, wrong key
46
+ resetKeys();
47
+ event.key = "ArrowDown";
48
+ component.handleKeyDown(event);
49
+ expect(mockAnnounce).toHaveBeenCalledTimes(0);
50
+ expect(mockGenerateCharacterLimiWarning).toHaveBeenCalledTimes(0);
51
+ jest.clearAllMocks();
52
+ // no modifiers, right key, not at limit
53
+ resetKeys();
54
+ event.key = "a";
55
+ component.handleKeyDown(event);
56
+ expect(mockAnnounce).toHaveBeenCalledTimes(0);
57
+ expect(mockGenerateCharacterLimiWarning).toHaveBeenCalledTimes(0);
58
+ jest.clearAllMocks();
59
+ // no modifiers, right key, at limit
60
+ resetKeys();
61
+ //@ts-ignore
62
+ component.inputEl.value = "1234567890";
63
+ event.key = "a";
64
+ component.handleKeyDown(event);
65
+ expect(mockAnnounce).toHaveBeenCalledTimes(1);
66
+ expect(mockGenerateCharacterLimiWarning).toHaveBeenCalledTimes(1);
67
+ jest.clearAllMocks();
68
+ // no modifiers, right key, above limit
69
+ resetKeys();
70
+ //@ts-ignore
71
+ component.inputEl.value = "12345678901234567890";
72
+ event.key = "a";
73
+ component.handleKeyDown(event);
74
+ expect(mockAnnounce).toHaveBeenCalledTimes(1);
75
+ expect(mockGenerateCharacterLimiWarning).toHaveBeenCalledTimes(1);
76
+ jest.clearAllMocks();
77
+ // ctrl modifier, right key, above limit
78
+ resetKeys();
79
+ //@ts-ignore
80
+ component.inputEl.value = "12345678901234567890";
81
+ event.key = "a";
82
+ event.ctrlKey = true;
83
+ component.handleKeyDown(event);
84
+ expect(mockAnnounce).toHaveBeenCalledTimes(0);
85
+ expect(mockGenerateCharacterLimiWarning).toHaveBeenCalledTimes(0);
86
+ jest.clearAllMocks();
87
+ // meta modifier, right key, above limit
88
+ resetKeys();
89
+ //@ts-ignore
90
+ component.inputEl.value = "12345678901234567890";
91
+ event.key = "a";
92
+ event.metaKey = true;
93
+ component.handleKeyDown(event);
94
+ expect(mockAnnounce).toHaveBeenCalledTimes(0);
95
+ expect(mockGenerateCharacterLimiWarning).toHaveBeenCalledTimes(0);
96
+ jest.clearAllMocks();
97
+ // alt modifier, right key, above limit
98
+ resetKeys();
99
+ //@ts-ignore
100
+ component.inputEl.value = "12345678901234567890";
101
+ event.key = "a";
102
+ event.altKey = true;
103
+ component.handleKeyDown(event);
104
+ expect(mockAnnounce).toHaveBeenCalledTimes(0);
105
+ expect(mockGenerateCharacterLimiWarning).toHaveBeenCalledTimes(0);
106
+ jest.clearAllMocks();
107
+ jest.restoreAllMocks();
108
+ });
109
+ it("handles input", () => {
110
+ // handleInput
111
+ const component = new Input();
112
+ let inputEl = {};
113
+ let event = { target: inputEl };
114
+ const mockAnnounce = (component.announce = jest.fn());
115
+ const mockGenerateCharacterLimitWarning = (component.generateCharacterLimitWarning = jest.fn(() => "announcement"));
116
+ inputEl.value = "fish";
117
+ event.target = inputEl;
118
+ //@ts-ignore
119
+ component.handleInput(event);
120
+ expect(component.value).toBe("fish");
121
+ expect(component.charCount).toBe(4);
122
+ expect(mockAnnounce).toHaveBeenCalledTimes(0);
123
+ expect(mockGenerateCharacterLimitWarning).toHaveBeenCalledTimes(0);
124
+ component.characterLimit = 10;
125
+ inputEl.value = "two fish";
126
+ event.target = inputEl;
127
+ //@ts-ignore
128
+ component.handleInput(event);
129
+ expect(component.value).toBe("two fish");
130
+ expect(component.charCount).toBe(8);
131
+ expect(mockAnnounce).toHaveBeenCalledTimes(1);
132
+ expect(mockAnnounce).toHaveBeenCalledWith("announcement");
133
+ expect(mockGenerateCharacterLimitWarning).toHaveBeenCalledTimes(1);
134
+ expect(mockGenerateCharacterLimitWarning).toHaveBeenCalledWith(8, 10);
135
+ jest.resetAllMocks();
136
+ });
137
+ it("updates classes on focus", () => {
138
+ const component = new Input();
139
+ const divEl = document.createElement("div");
140
+ //@ts-ignore
141
+ component.inputWrapperEl = divEl;
142
+ //@ts-ignore
143
+ expect(component.inputWrapperEl).not.toHaveClass("focus");
144
+ component.handleFocus();
145
+ //@ts-ignore
146
+ expect(component.inputWrapperEl).toHaveClass("focus");
147
+ });
148
+ it("updates the live region announcement", () => {
149
+ // announce
150
+ const component = new Input();
151
+ let divEl = document.createElement("div");
152
+ //@ts-ignore
153
+ component.liveRegionEl = divEl;
154
+ component.announce("Message");
155
+ expect(component.announcement).toBe("Message");
156
+ //@ts-ignore
157
+ component.liveRegionEl.textContent = "Message";
158
+ component.announce("Message");
159
+ expect(component.announcement).toBe("Message" + "\u00A0");
160
+ });
161
+ it("generates the appropriate character limit warning", () => {
162
+ // generateCharacterLimitWarning
163
+ const component = new Input();
164
+ expect(component.generateCharacterLimitWarning(0, 10)).toBe("0 of 10 characters entered.");
165
+ expect(component.generateCharacterLimitWarning(5, 8)).toBe("5 of 8 characters entered.");
166
+ expect(component.generateCharacterLimitWarning(8, 8)).toBe("8 of 8 characters entered. No additional characters will be entered.");
167
+ });
168
+ it("sets input to required", async () => {
169
+ await page.setContent(`<wm-input label='input' required-field='true'></wm-input>`);
170
+ const input = await page.root.shadowRoot.querySelector("input");
171
+ expect(input).toEqualAttribute("aria-required", "true");
172
+ });
173
+ });
@@ -0,0 +1,23 @@
1
+ import { newE2EPage } from "@stencil/core/testing";
2
+ describe("wm-menuitem", () => {
3
+ let page;
4
+ beforeEach(async () => {
5
+ page = await newE2EPage();
6
+ await page.setContent(`<html lang='en'><head><title>Page</title></head><body><main><h1>Title</h1>
7
+ <wm-action-menu id='menu' tooltip="menu name"><wm-menuitem id='first' disabled onClick='action()'>First action</wm-menuitem><wm-menuitem id='second'>Second action</wm-menuitem><wm-menuitem id='third'>Third action</wm-menuitem></wm-action-menu>
8
+ <script>function action() {document.getElementById('second').innerHTML = 'Changed text'}</script></main></body></html>`);
9
+ });
10
+ it("renders", async () => {
11
+ const element = await page.find("wm-menuitem");
12
+ expect(element).not.toBeNull();
13
+ });
14
+ it("prevents action on disabled item", async () => {
15
+ await page.keyboard.press("Tab");
16
+ await page.keyboard.press("Enter"); // open popup
17
+ await page.waitForChanges();
18
+ await page.keyboard.press("Enter");
19
+ await page.waitForChanges();
20
+ let changedMenuitem = await page.find("wm-menuitem#second");
21
+ expect(changedMenuitem.innerHTML).toEqual("Second action");
22
+ });
23
+ });
@@ -88,7 +88,7 @@ export class Menuitem {
88
88
  }
89
89
  }
90
90
  render() {
91
- return (h(Host, { key: '3976c5086e875303992f8d492b5e35a6634685b8', tabindex: -1, role: "menuitem", "aria-disabled": this.disabled ? "true" : null }, h("div", { key: 'f89220d2428b80ea543aa7727f1945cca2b3351d', class: "wrapper", "aria-disabled": this.disabled ? "true" : null }, h("span", { key: '21ac7d547e0a2ebc9bc285f3561278d373a70560', ref: (el) => (this.iconEl = el) }), this.el.textContent, this.description ? h("div", { class: "description" }, this.description) : "")));
91
+ return (h(Host, { tabindex: -1, role: "menuitem", "aria-disabled": this.disabled ? "true" : null }, h("div", { class: "wrapper", "aria-disabled": this.disabled ? "true" : null }, h("span", { ref: (el) => (this.iconEl = el) }), this.el.textContent, this.description ? h("div", { class: "description" }, this.description) : "")));
92
92
  }
93
93
  static get is() { return "wm-menuitem"; }
94
94
  static get encapsulation() { return "shadow"; }
@@ -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: '6a5fc998c2cb415c166bce85dc52d6e6e6e3a230', class: `wm-wrapper ${this.infoText ? " footer-text" : ""}` }, h("div", { key: '3b9447834530659308618cdcd0bfb78e6ae5ee07', class: "wm-info", "aria-live": "polite" }, this.infoText), h("div", { key: '1eba03d1acf2ff2ff063778d7c44586f0bb1cf4c', class: "wm-button-collection" }, this.secondaryText && (h("wm-button", { key: '804287ec369acc9f27f58cd3778b8bb28b0c45b1', onClick: () => this.emitParentSecondaryEvent(), id: `wm-secondary-${this.uid}`, ref: (el) => (this.primaryActionDisabled ? (this.lastElement = el) : undefined) }, this.secondaryText)), h("wm-button", { key: '15b323af0a56f8ef60d4d09432fb9354b35d2cee', "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: 'f5719a0f2056c801f776efdc8c4b2c7c414627d4' }, h("div", { key: 'e5695a8b2d36f4f62cc0662e28ca54c28a865921', class: "wm-wrapper" }, h("div", { key: 'a6854d72f3972eeaf13667f04c8ec87773c4dd65' }, h("h2", { key: '5c2f249dd7467787c6fe7a68810f12c709084121', class: "title", id: `wm-modal-heading-text-${this.uid}` }, this.heading, h("span", { key: 'f8bde096f7807b4989249a2f85ed34d3eebeb0a5', class: "subtitle" }, this.subheading))), h("wm-button", { key: 'be27899f16d1c740c5d4b918939ee4fac281dbfe', "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: '124097f92fff611f4f56f9ad3238517fd0dda19e', class: `${"wm-" + this.modalType}`, ref: (el) => (this.dialogEl = el), onKeyDown: (ev) => this.handleKeyDown(ev) }, h("div", { key: 'd367e02d045c1c563ff6c310ec158b8a7b4e0287', 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: 'b6905495813d6e12e2690331fd3a5212c0769ba3', class: "wm-tooltip" }), h("slot", { key: '2360294f11e3ba94727b17df927aa37aea6ecdb3' }), h("div", { key: '51d05952f3e1b145e943e44d245cf9ed31e7f07e', 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
+ });
@@ -34,7 +34,7 @@ export class NavigationHamburger {
34
34
  this.wmNavigationHamburgerClicked.emit();
35
35
  }
36
36
  render() {
37
- return (h(Host, { key: 'c35b1c8c6558c87923c15e7b74575420d6263c9f', class: `hamburger ${this.open ? "nav-open" : "nav-closed"}` }, h("button", { key: '723b8603c13abf75a32f1d688c626b64efd8b32e', "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: '51e767410bc8436af9a6d8e56ed53485cb8b0350', 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: '130176ebd99c30c1c764436948a854f216d68e37', role: "listitem" }, h("a", { key: '1bd91657782fafe9fbb80e1efa87d2293f9c0cba', class: `link ${this.active ? "active" : ""}`, href: this.href, onClick: () => this.wmNavigationItemClicked.emit() }, h("div", { key: '86bbd36f36f1559fd928880ce5cc916becab32bb', class: "icon", "aria-hidden": "true" }, h("slot", { key: 'd69b35303521eb558aba65dbd5846458f4c80641' })), h("div", { key: '22e322f554019928b41df9e6e56e8d83447de161', 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"; }