@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,382 @@
1
+ import { newE2EPage } from "@stencil/core/testing";
2
+ import { AxePuppeteer } from "@axe-core/puppeteer";
3
+ describe("wm-datepicker", () => {
4
+ let page, component, input, btn, popup, popupTitleDay;
5
+ beforeEach(async () => {
6
+ page = await newE2EPage();
7
+ await page.setContent(`<html lang='en'><head><title>Page</title></head><body><main><h1>Title</h1>
8
+ <wm-datepicker id="dp" label="label"></wm-datepicker>
9
+ </main></body></html>`);
10
+ component = await page.find("wm-datepicker");
11
+ input = await page.find("wm-datepicker >>> input");
12
+ btn = await page.find("wm-datepicker >>> #toggle");
13
+ popup = await page.find("wm-datepicker >>> #popup");
14
+ popupTitleDay = await page.find("wm-datepicker >>> #popup-title-month");
15
+ // await page.keyboard.press("Tab");
16
+ // await page.waitForChanges();
17
+ });
18
+ it("passes Axe checks", async () => {
19
+ const results = await new AxePuppeteer(page).analyze();
20
+ expect(results.violations.length).toBe(0);
21
+ });
22
+ // TODO
23
+ // see https://dequeuniversity.com/checklists/web/form-validation-feedback
24
+ // for Dynamic Error Detection / Error messages
25
+ // see also role="alert"
26
+ /* INPUT */
27
+ // See datepicker-input.e2e.ts
28
+ /* BUTTON */
29
+ // Opening and closing the date picker
30
+ it("opens at today's date by default", async () => {
31
+ const popup = await page.find("wm-datepicker >>> .popup");
32
+ const today = new Date();
33
+ const year = today.getUTCFullYear();
34
+ const month = (today.getUTCMonth() + 1).toString().padStart(2, "0");
35
+ const day = today.getUTCDate().toString();
36
+ const dateTable = await popup.find("[role='grid']");
37
+ // await page.waitForChanges();
38
+ const selDate = await dateTable.find("[aria-selected='true']");
39
+ expect(selDate).toEqualAttribute("data-year", year);
40
+ expect(selDate).toEqualAttribute("data-month", month);
41
+ expect(selDate.textContent).toBe(day);
42
+ });
43
+ it("opens at the date in the input if there is one", async () => {
44
+ const input = await page.find("wm-datepicker >>> input");
45
+ const popup = await page.find("wm-datepicker >>> .popup");
46
+ await input.type("02/01/2030");
47
+ await component.setProperty("calendarDate", "2030-02-01");
48
+ await page.waitForChanges();
49
+ await page.keyboard.press("Tab");
50
+ await page.keyboard.press("Enter");
51
+ await page.waitForChanges();
52
+ const dateTable = await popup.find("[role='grid']");
53
+ const selDate = await dateTable.find("[aria-selected='true']");
54
+ expect(selDate).toEqualAttribute("data-year", "2030");
55
+ expect(selDate).toEqualAttribute("data-month", "02");
56
+ expect(selDate.textContent).toBe("1");
57
+ });
58
+ it("Closes the popup when user triggers the calendar button", async () => {
59
+ const popup = await page.find("wm-datepicker >>> .popup");
60
+ await page.keyboard.press("Tab"); // in input
61
+ await page.keyboard.press("Tab"); // on btn
62
+ await page.keyboard.press("Enter");
63
+ await page.waitForChanges();
64
+ expect(popup).toHaveClass("open");
65
+ await page.keyboard.press("Escape");
66
+ await page.waitForChanges();
67
+ expect(popup).not.toHaveClass("open");
68
+ });
69
+ /* POPUP */
70
+ it("closes the calendar popup when the user presses ESCAPE", async () => {
71
+ await input.type("02/03/2019");
72
+ await component.setProperty("calendarDate", "2019-02-03");
73
+ await page.waitForChanges();
74
+ await page.keyboard.press("Tab");
75
+ await page.keyboard.press("Enter");
76
+ await page.waitForChanges();
77
+ await page.keyboard.press("Escape");
78
+ await page.waitForChanges();
79
+ expect(popup).not.toHaveClass("open");
80
+ });
81
+ it("shows the next month on PAGE DOWN and shows the previous month on PAGE UP", async () => {
82
+ await input.type("02/03/2019");
83
+ await component.setProperty("calendarDate", "2019-02-03");
84
+ await page.waitForChanges();
85
+ await page.keyboard.press("Tab");
86
+ await page.keyboard.press("Enter");
87
+ await page.waitForChanges();
88
+ await page.keyboard.press("PageDown");
89
+ await page.waitForChanges();
90
+ expect(popupTitleDay.textContent).toBe("March 2019");
91
+ let activeElId = await page.evaluate(() => document.activeElement.shadowRoot.activeElement.id);
92
+ expect(activeElId).toEqual("cell-20190303");
93
+ await page.keyboard.press("PageUp");
94
+ await page.waitForChanges();
95
+ await page.keyboard.press("PageUp");
96
+ await page.waitForChanges();
97
+ await page.keyboard.press("PageUp");
98
+ await page.waitForChanges();
99
+ activeElId = await page.evaluate(() => document.activeElement.shadowRoot.activeElement.id);
100
+ expect(activeElId).toEqual("cell-20181203");
101
+ });
102
+ it("handles HOME and END keys", async () => {
103
+ await input.type("02/15/2020");
104
+ await component.setProperty("calendarDate", "2020-02-15");
105
+ await page.waitForChanges();
106
+ await page.keyboard.press("Tab");
107
+ await page.keyboard.press("Enter");
108
+ await page.waitForChanges();
109
+ await page.keyboard.press("Home");
110
+ await page.waitForChanges();
111
+ const firstDayOfMonth = await page.evaluate(() => document.activeElement.shadowRoot.activeElement.id);
112
+ expect(firstDayOfMonth).toEqual("cell-20200201");
113
+ await page.keyboard.press("End");
114
+ await page.waitForChanges();
115
+ const lastDayOfMonth = await page.evaluate(() => document.activeElement.shadowRoot.activeElement.id);
116
+ expect(lastDayOfMonth).toEqual("cell-20200229"); // 2020 is a leap year
117
+ });
118
+ it("navigates the calendar with keyboard (day view)", async () => {
119
+ // left/right: -1 / +1 in the row
120
+ // up/down
121
+ await input.type("08/15/2024");
122
+ await component.setProperty("calendarDate", "2024-08-15");
123
+ await page.keyboard.press("Tab"); // on the toggle popup btn
124
+ await page.waitForChanges();
125
+ await page.keyboard.press("Enter"); // open popup
126
+ await page.waitForChanges();
127
+ await page.keyboard.press("ArrowLeft");
128
+ await page.waitForChanges();
129
+ let focusedCell = await popup.find("[role='gridcell'][tabindex='0']");
130
+ await page.waitForChanges();
131
+ expect(focusedCell).toEqualAttribute("id", "cell-20240814");
132
+ await page.keyboard.press("ArrowUp");
133
+ await page.waitForChanges();
134
+ focusedCell = await popup.find("[role='gridcell'][tabindex='0']");
135
+ expect(focusedCell).toEqualAttribute("id", "cell-20240807");
136
+ await page.keyboard.press("ArrowRight");
137
+ await page.waitForChanges();
138
+ focusedCell = await popup.find("[role='gridcell'][tabindex='0']");
139
+ expect(focusedCell).toEqualAttribute("id", "cell-20240808");
140
+ await page.keyboard.press("ArrowDown");
141
+ await page.waitForChanges();
142
+ focusedCell = await popup.find("[role='gridcell'][tabindex='0']");
143
+ expect(focusedCell).toEqualAttribute("id", "cell-20240815");
144
+ });
145
+ it("navigates the calendar with keyboard (month view)", async () => {
146
+ await input.type("08/15/2024");
147
+ await component.setProperty("calendarDate", "2024-08-15");
148
+ await page.keyboard.press("Tab"); // on the toggle popup btn
149
+ await page.waitForChanges();
150
+ await page.keyboard.press("Enter"); // open popup
151
+ await page.keyboard.down("Shift");
152
+ await page.waitForChanges();
153
+ await page.keyboard.press("Tab"); // next btn
154
+ await page.waitForChanges();
155
+ await page.keyboard.press("Tab"); // popup-title (month + year)
156
+ await page.waitForChanges();
157
+ await page.keyboard.press("Enter");
158
+ await page.waitForChanges();
159
+ await page.keyboard.up("Shift");
160
+ await page.waitForChanges();
161
+ await page.keyboard.press("ArrowLeft");
162
+ await page.waitForChanges();
163
+ let focusedCell = await popup.find("[role='gridcell'][tabindex='0']");
164
+ await page.waitForChanges();
165
+ expect(focusedCell).toEqualAttribute("id", "month-6"); // month is july (7), 0-indexed
166
+ await page.keyboard.press("ArrowUp");
167
+ await page.waitForChanges();
168
+ focusedCell = await popup.find("[role='gridcell'][tabindex='0']");
169
+ expect(focusedCell).toEqualAttribute("id", "month-3");
170
+ await page.keyboard.press("ArrowRight");
171
+ await page.waitForChanges();
172
+ focusedCell = await popup.find("[role='gridcell'][tabindex='0']");
173
+ expect(focusedCell).toEqualAttribute("id", "month-4");
174
+ await page.keyboard.press("ArrowDown");
175
+ await page.waitForChanges();
176
+ focusedCell = await popup.find("[role='gridcell'][tabindex='0']");
177
+ expect(focusedCell).toEqualAttribute("id", "month-7");
178
+ });
179
+ // it("goes to the year view when the month name is clicked", async () => {
180
+ // // (i.e. allows selection of a month)
181
+ // });
182
+ it("goes to the previous/next month when the arrow button is triggered in day view", async () => {
183
+ await input.type("11/29/1999");
184
+ await component.setProperty("calendarDate", "1999-11-29");
185
+ await page.keyboard.press("Tab"); // on the toggle popup btn
186
+ await page.waitForChanges();
187
+ await page.keyboard.press("Enter"); // open popup
188
+ await page.waitForChanges();
189
+ await page.keyboard.down("Shift");
190
+ await page.waitForChanges();
191
+ await page.keyboard.press("Tab"); // next btn
192
+ await page.waitForChanges();
193
+ await page.keyboard.press("Tab"); // popup-title (month + year)
194
+ await page.waitForChanges();
195
+ await page.keyboard.press("Tab"); // prev btn
196
+ await page.waitForChanges();
197
+ await page.keyboard.up("Shift");
198
+ await page.waitForChanges();
199
+ await page.keyboard.press("Enter"); // press prev btn
200
+ await page.waitForChanges();
201
+ expect(popup).toHaveClasses(["open", "day-view"]);
202
+ expect(popupTitleDay.textContent).toBe("October 1999");
203
+ await page.keyboard.press("Tab"); // popup title btn
204
+ await page.keyboard.press("Tab"); // next btn
205
+ await page.keyboard.press("Enter"); // press next btn
206
+ await page.waitForChanges();
207
+ await page.keyboard.press("Enter"); // press next btn
208
+ await page.waitForChanges();
209
+ expect(popupTitleDay.textContent).toBe("December 1999");
210
+ });
211
+ it("goes to the previous/next year when the arrow button is clicked in month view", async () => {
212
+ await input.type("11/29/1999");
213
+ await component.setProperty("calendarDate", "1999-11-29");
214
+ await page.waitForChanges();
215
+ await page.keyboard.press("Tab"); // on the toggle popup btn
216
+ await page.waitForChanges();
217
+ await page.keyboard.press("Enter"); // open popup
218
+ await page.waitForChanges();
219
+ await page.keyboard.down("Shift");
220
+ await page.keyboard.press("Tab"); // next btn
221
+ await page.waitForChanges();
222
+ await page.keyboard.press("Tab"); // month view btn
223
+ await page.waitForChanges();
224
+ await page.keyboard.up("Shift");
225
+ await page.waitForChanges();
226
+ await page.keyboard.press("Enter"); // press month view btn
227
+ await page.waitForChanges();
228
+ expect(popup).toHaveClasses(["open", "month-view"]);
229
+ const title = await popup.find("#popup-title-year");
230
+ expect(title.textContent).toBe("1999");
231
+ await page.keyboard.down("Shift");
232
+ await page.keyboard.press("Tab"); // next btn
233
+ await page.keyboard.up("Shift");
234
+ await page.keyboard.press("Enter"); // press next btn
235
+ await page.waitForChanges();
236
+ expect(title.textContent).toBe("2000");
237
+ await page.keyboard.down("Shift");
238
+ await page.keyboard.press("Tab"); // year btn
239
+ await page.keyboard.down("Shift");
240
+ await page.keyboard.press("Tab"); // prev btn
241
+ await page.keyboard.up("Shift");
242
+ await page.keyboard.press("Enter"); // press prev btn
243
+ await page.waitForChanges();
244
+ expect(title.textContent).toBe("1999");
245
+ await page.keyboard.press("Enter"); // press prev btn
246
+ await page.waitForChanges();
247
+ await page.keyboard.press("Enter"); // press prev btn
248
+ await page.waitForChanges();
249
+ expect(title.textContent).toBe("1997");
250
+ });
251
+ it("has the aria attributes related to the popup", async () => {
252
+ // NB "If the element with the aria-expanded attribute controls the expansion of another grouping container
253
+ // that is not 'owned by' the element, the author SHOULD reference the container by using the aria-controls attribute."
254
+ // src: https://www.w3.org/TR/wai-aria-1.1/#aria-expanded
255
+ expect(btn).toHaveAttribute("aria-expanded");
256
+ // Not sure is aria-haspopup is necessary. If it is present the popup should have a role
257
+ // if that role is grid (the only role that seems to correspond) then the cells must have
258
+ // a role of gridcell
259
+ // https://www.w3.org/TR/wai-aria/#aria-haspopup
260
+ // expect(btn).toHaveAttribute("aria-haspopup");
261
+ //Removed aria-controls since the popup comes immediately after the aria-expanded controller:
262
+ //https://www.heydonworks.com/article/aria-controls-is-poop
263
+ });
264
+ it("toggles aria-expanded attribute", async () => {
265
+ expect(btn).toEqualAttribute("aria-expanded", "false");
266
+ await page.keyboard.press("Tab");
267
+ await page.keyboard.press("Tab");
268
+ await page.keyboard.press("Enter");
269
+ await page.waitForChanges();
270
+ expect(btn).toEqualAttribute("aria-expanded", "true");
271
+ });
272
+ it("properly fills the-label on table cells", async () => {
273
+ // screen reader should read "Thursday, May 10 2018" on focus
274
+ // screen reader should read "Thursday, May 10 2018, selected" on select
275
+ await input.type("05/10/2018");
276
+ await component.setProperty("calendarDate", "2018-05-10");
277
+ await page.waitForChanges();
278
+ await page.keyboard.press("Tab");
279
+ await page.waitForChanges();
280
+ await page.keyboard.press("Enter");
281
+ await page.waitForChanges();
282
+ const focusedCell = await popup.find("[role='gridcell'][tabindex='0']");
283
+ await page.waitForChanges();
284
+ // day of the week is read by sr bcse it's the table column
285
+ expect(focusedCell).toEqualAttribute("aria-label", "Thursday, May 10, 2018");
286
+ // screen reader should read "Thursday, May 10 2018, selected" on select
287
+ await page.keyboard.press("Enter");
288
+ await page.waitForChanges();
289
+ const selCell = await popup.find("[aria-selected='true']");
290
+ // day of the week is read by sr bcse it's the table column
291
+ expect(selCell).toEqualAttribute("aria-label", "Thursday, May 10, 2018");
292
+ });
293
+ it("aligns dates properly", async () => {
294
+ // -> check that both 01/01/1999 and 12/31/2100 are in the Friday column
295
+ // couldn't figure this one out...
296
+ });
297
+ it("emits event on input blur", async () => {
298
+ page = await newE2EPage();
299
+ await page.setContent(`<html lang='en'><head><title>Page</title></head><body><main><h1>Title</h1>
300
+ <wm-datepicker id="dp" label="label"></wm-datepicker>
301
+ <div id="indicator">no event heard</div>
302
+ </main></body></html>`);
303
+ component = await page.find("wm-datepicker");
304
+ input = await page.find("wm-datepicker >>> input");
305
+ await page.waitForChanges();
306
+ await page.evaluate(async () => {
307
+ const indicator = document.querySelector("#indicator");
308
+ await document.addEventListener("wmDatepickerInputBlurred", () => (indicator.textContent = "event heard"));
309
+ });
310
+ await page.waitForChanges;
311
+ const indicator = await page.find("#indicator");
312
+ expect(indicator.textContent).toBe("no event heard");
313
+ await input.type("05/10/2018");
314
+ await page.keyboard.press("Tab");
315
+ await page.waitForChanges();
316
+ expect(indicator.textContent).toBe("event heard");
317
+ });
318
+ it("emits event on change", async () => {
319
+ page = await newE2EPage();
320
+ await page.setContent(`<html lang='en'><head><title>Page</title></head><body><main><h1>Title</h1>
321
+ <wm-datepicker id="dp" label="label"></wm-datepicker>
322
+ <div id="indicator">events heard: 0</div>
323
+ </main></body></html>`);
324
+ component = await page.find("wm-datepicker");
325
+ input = await page.find("wm-datepicker >>> input");
326
+ await page.waitForChanges();
327
+ await page.evaluate(async () => {
328
+ const indicator = document.querySelector("#indicator");
329
+ await document
330
+ .querySelector("wm-datepicker")
331
+ .addEventListener("change", () => (indicator.textContent =
332
+ indicator.textContent.slice(0, -1) + (parseInt(indicator.textContent.slice(-1)) + 1)));
333
+ });
334
+ await page.waitForChanges;
335
+ const indicator = await page.find("#indicator");
336
+ expect(indicator.textContent).toBe("events heard: 0");
337
+ // user types date
338
+ await input.type("05/10/2018");
339
+ await page.keyboard.press("Tab");
340
+ await page.waitForChanges();
341
+ expect(indicator.textContent).toBe("events heard: 1");
342
+ // user selects date from calendar
343
+ await page.keyboard.press("Enter");
344
+ await page.waitForChanges();
345
+ await page.keyboard.press("ArrowRight");
346
+ await page.keyboard.press("Enter");
347
+ await page.waitForChanges();
348
+ expect(indicator.textContent).toBe("events heard: 2");
349
+ });
350
+ it("emits event with date on cell selection", async () => {
351
+ page = await newE2EPage();
352
+ await page.setContent(`<html lang='en'><head><title>Page</title></head><body><main><h1>Title</h1>
353
+ <wm-datepicker id="dp" value="12/30/1999" label="label"></wm-datepicker>
354
+ <div id="indicator"></div>
355
+ </main></body></html>`);
356
+ component = await page.find("wm-datepicker");
357
+ input = await page.find("wm-datepicker >>> input");
358
+ await page.waitForChanges();
359
+ await page.evaluate(async () => {
360
+ const indicator = document.querySelector("#indicator");
361
+ await document.querySelector("wm-datepicker").addEventListener("wmDatepickerDateSelected", (ev) => (indicator.textContent =
362
+ //@ts-ignore
363
+ `date received: ${ev.detail.date}`));
364
+ });
365
+ await page.waitForChanges;
366
+ const indicator = await page.find("#indicator");
367
+ // user types date
368
+ await page.keyboard.press("Tab");
369
+ await page.keyboard.press("Tab");
370
+ await page.waitForChanges();
371
+ await page.keyboard.press("Enter");
372
+ await page.waitForChanges();
373
+ await page.keyboard.press("Enter");
374
+ await page.waitForChanges();
375
+ expect(indicator.textContent).toBe("date received: 1999-12-30");
376
+ });
377
+ });
378
+ // Sources:
379
+ // https://watermarkinsights.atlassian.net/browse/DNP-3411
380
+ // https://watermarkinsights.atlassian.net/browse/DNP-4318
381
+ // https://axesslab.com/accessible-datepickers/
382
+ // https://www.w3.org/WAI/PF/HTML/wiki/Datepickers
@@ -212,23 +212,23 @@ export class DatePicker {
212
212
  this.liveRegionEl.textContent = message;
213
213
  }
214
214
  render() {
215
- return (h(Host, { key: 'daac54e642a4c00b37dff5167cf0fd3322b98874', "aria-busy": "false", class: `${this.errorMessage ? "invalid" : ""}` }, h("div", { key: '0633196770bcd3965a8fe60ecd1972653ed3e25c', ref: (d) => (this.dpWrapperEl = d), class: `wrapper label-${this.labelPosition} ${this.errorMessage ? "invalid" : ""}` }, h("div", { key: 'ba80e128d0345635d90c4641c508d05eb4d3794e', class: "label-wrapper", ref: (e) => (this.labelWrapperEl = e) }, this.labelPosition !== "none" && (h("label", { key: '4905e937c7e6249537c5ed43f77331883d006794', id: "datepickerLabel", htmlFor: "date-input", class: "label", title: `${this.label} (${this.dateFormat})` }, this.label, this.requiredField && (h("span", { key: '637e35c7f255629aa75cf177822154a1e6e6e7b3', "aria-hidden": "true", class: "required" }, "*"))))), h("div", { key: '8676b6e03022cd8787d0a77a0b3e6c4dd8419b59' }, h("div", { key: 'e9f24478e3beb32f38ef65aff197d7872e1f3d67', class: "single-wrapper input" }, h("input", { key: '4661fedeafd62c45e1aec2aad699faede4d750b6', disabled: this.isDisabled, type: "text", id: "single-date-input", class: "date-input", name: "date", placeholder: this.dateFormat, value: this.value, onFocus: () => this.handleInputFocus(), onInput: (ev) => this.handleInput(ev), onBlur: () => this.handleInputBlur(), onChange: () => this.handleInputChange(), ref: (input) => (this.inputEl = input), "aria-describedby": "error", "aria-label": this.label, "aria-required": this.requiredField ? "true" : null }), h("div", { key: '0a2afc12a5e44bcb8a9deb92c7171945c67289f4', class: "container", id: "wm-container" }, h("button", { key: 'b6b63ef23dee93ff470de4d5a5d2769086bcb808', disabled: this.disabled, onClick: this.togglePopup.bind(this), "aria-label": intl.formatMessage({
215
+ return (h(Host, { "aria-busy": "false", class: `${this.errorMessage ? "invalid" : ""}` }, h("div", { ref: (d) => (this.dpWrapperEl = d), class: `wrapper label-${this.labelPosition} ${this.errorMessage ? "invalid" : ""}` }, h("div", { class: "label-wrapper", ref: (e) => (this.labelWrapperEl = e) }, this.labelPosition !== "none" && (h("label", { id: "datepickerLabel", htmlFor: "date-input", class: "label", title: `${this.label} (${this.dateFormat})` }, this.label, this.requiredField && (h("span", { "aria-hidden": "true", class: "required" }, "*"))))), h("div", null, h("div", { class: "single-wrapper input" }, h("input", { disabled: this.isDisabled, type: "text", id: "single-date-input", class: "date-input", name: "date", placeholder: this.dateFormat, value: this.value, onFocus: () => this.handleInputFocus(), onInput: (ev) => this.handleInput(ev), onBlur: () => this.handleInputBlur(), onChange: () => this.handleInputChange(), ref: (input) => (this.inputEl = input), "aria-describedby": "error", "aria-label": this.label, "aria-required": this.requiredField ? "true" : null }), h("div", { class: "container", id: "wm-container" }, h("button", { disabled: this.disabled, onClick: this.togglePopup.bind(this), "aria-label": intl.formatMessage({
216
216
  id: "date.selectDate",
217
217
  defaultMessage: "Select date",
218
218
  description: "Button text for screen readers.",
219
- }), "aria-describedby": "single-date-input", ref: (el) => (this.toggleEl = el), "aria-expanded": `${this.isExpanded}`, class: "toggle", id: "toggle" }, h("span", { key: 'debb3ae89f32960a7a269b9f6c951f5bb7bfd874', class: "calendar", title: intl.formatMessage({
219
+ }), "aria-describedby": "single-date-input", ref: (el) => (this.toggleEl = el), "aria-expanded": `${this.isExpanded}`, class: "toggle", id: "toggle" }, h("span", { class: "calendar", title: intl.formatMessage({
220
220
  id: "date.calendarView",
221
221
  defaultMessage: "Calendar View",
222
222
  description: "Calendar button",
223
- }) })), h("div", { key: '87ff9723a2960d5725f5f731dcc0d30719a8bb09', class: `popup-wrapper ${this.calEl && this.calEl.view}-view ${this.openUp ? "expand-upwards" : ""}`, id: "popup-wrapper", ref: (el) => (this.popupEl = el), onClick: () => (this.popupClicked = true) }, h("div", { key: '989a9bc4bd537394bfb2fe1ecd83311bb57187d4', tabIndex: 0, onFocus: () => this.calEl.focusLastFocusable() }), h("priv-calendar", { key: '3253b7e256dc7137aae2c4c2a79099e0093ecc65', ref: (el) => (this.calEl = el), startDate: this.calendarDate, focusDate: this.calendarDate, class: "inside" }), h("div", { key: '9cacded01a3163bebd249d6ed4601ca9a6c3dfd0', tabIndex: 0, onFocus: () => this.calEl.focusFirstFocusable() })), h("div", { key: 'fe890d55779f0619bc6c144d1fd47cc2cb26fe04', id: "live-region", "aria-live": "polite", "aria-relevant": "text", class: "sr-only" }), h("div", { key: '71e28a0c1aaa2c1ddce511bfbf0d9cf6794382ab', id: "month-title", class: "sr-only" }, intl.formatMessage({
223
+ }) })), h("div", { class: `popup-wrapper ${this.calEl && this.calEl.view}-view ${this.openUp ? "expand-upwards" : ""}`, id: "popup-wrapper", ref: (el) => (this.popupEl = el), onClick: () => (this.popupClicked = true) }, h("div", { tabIndex: 0, onFocus: () => this.calEl.focusLastFocusable() }), h("priv-calendar", { ref: (el) => (this.calEl = el), startDate: this.calendarDate, focusDate: this.calendarDate, class: "inside" }), h("div", { tabIndex: 0, onFocus: () => this.calEl.focusFirstFocusable() })), h("div", { id: "live-region", "aria-live": "polite", "aria-relevant": "text", class: "sr-only" }), h("div", { id: "month-title", class: "sr-only" }, intl.formatMessage({
224
224
  id: "date.selectMonth",
225
225
  defaultMessage: "Activate to select a month.",
226
226
  description: "Calendar button",
227
- })), h("div", { key: '2df13fae273fd2186e35d50ab58d888b45bf0b40', id: "year-title", class: "sr-only" }, intl.formatMessage({
227
+ })), h("div", { id: "year-title", class: "sr-only" }, intl.formatMessage({
228
228
  id: "date.selectYear",
229
229
  defaultMessage: "Activate to select a year.",
230
230
  description: "Calendar button",
231
- })))), h("div", { key: '71ca47b61c3ffd7e19c273ae3e4c68a7f3ef1afd', id: "error", class: "error" }, this.errorMessage), h("div", { key: '5adc31a91d03cd34d01e48a88617481051905341', ref: (el) => (this.liveRegionEl = el), class: "sr-only", "aria-live": "polite", "aria-atomic": "true" })))));
231
+ })))), h("div", { id: "error", class: "error" }, this.errorMessage), h("div", { ref: (el) => (this.liveRegionEl = el), class: "sr-only", "aria-live": "polite", "aria-atomic": "true" })))));
232
232
  }
233
233
  static get is() { return "wm-datepicker"; }
234
234
  static get encapsulation() { return "shadow"; }
@@ -433,17 +433,14 @@ export class DatePicker {
433
433
  "complexType": {
434
434
  "signature": "(inputFormat: string, outputFormat: string, date?: string) => Promise<string>",
435
435
  "parameters": [{
436
- "name": "inputFormat",
437
- "type": "string",
438
- "docs": ""
436
+ "tags": [],
437
+ "text": ""
439
438
  }, {
440
- "name": "outputFormat",
441
- "type": "string",
442
- "docs": ""
439
+ "tags": [],
440
+ "text": ""
443
441
  }, {
444
- "name": "date",
445
- "type": "string | undefined",
446
- "docs": ""
442
+ "tags": [],
443
+ "text": ""
447
444
  }],
448
445
  "references": {
449
446
  "Promise": {
@@ -462,9 +459,8 @@ export class DatePicker {
462
459
  "complexType": {
463
460
  "signature": "(input?: string) => Promise<boolean>",
464
461
  "parameters": [{
465
- "name": "input",
466
- "type": "string | undefined",
467
- "docs": ""
462
+ "tags": [],
463
+ "text": ""
468
464
  }],
469
465
  "references": {
470
466
  "Promise": {
@@ -0,0 +1,21 @@
1
+ import { newSpecPage } from "@stencil/core/testing";
2
+ import * as globalFunctions from "../../global/functions";
3
+ jest.spyOn(globalFunctions, "generateId").mockReturnValue("random-id");
4
+ import { DatePicker } from "./wm-datepicker";
5
+ describe("wm-datepicker", () => {
6
+ it("builds", async () => {
7
+ const comp = await newSpecPage({
8
+ components: [DatePicker],
9
+ html: '<wm-datepicker label="mock label"></wm-datepicker>',
10
+ });
11
+ expect(comp.root).toMatchSnapshot();
12
+ });
13
+ it("sets input to required", async () => {
14
+ const page = await newSpecPage({
15
+ components: [DatePicker],
16
+ html: `<wm-datepicker label='datepicker' required-field='true'></wm-datepicker>`,
17
+ });
18
+ const input = await page.root.shadowRoot.querySelector("input");
19
+ expect(input).toEqualAttribute("aria-required", "true");
20
+ });
21
+ });
@@ -31,8 +31,6 @@
31
31
  -------------------------------------- */
32
32
  .search {
33
33
  box-sizing: border-box;
34
- border-bottom: 2px solid;
35
- border-color: var(--wmcolor-select-option-border);
36
34
  padding: 1.25rem;
37
35
  }
38
36
  .search .searchfield-wrapper {
@@ -86,10 +84,7 @@
86
84
  width: 100%;
87
85
  cursor: pointer;
88
86
  padding: 1.25rem;
89
- border: none;
90
87
  margin: 0;
91
- border-bottom: 2px solid;
92
- border-color: var(--wmcolor-select-option-border);
93
88
  background: var(--wmcolor-select-option-background);
94
89
  font-family: inherit;
95
90
  font-size: inherit;
@@ -110,17 +105,32 @@
110
105
  background: var(--wmcolor-select-option-background-focus);
111
106
  }
112
107
 
108
+ .return-btn,
109
+ .select-all,
110
+ .search {
111
+ border: none;
112
+ }
113
+ .return-btn:not(:last-child),
114
+ .select-all:not(:last-child),
115
+ .search:not(:last-child) {
116
+ border-bottom: 2px solid;
117
+ border-color: var(--wmcolor-select-option-border);
118
+ }
119
+
113
120
  .options-wrapper {
114
121
  overflow-y: auto;
115
122
  max-height: var(--max-height);
116
123
  }
117
124
 
125
+ .non-options-wrapper {
126
+ border-bottom: 1px solid var(--wmcolor-border-dark);
127
+ }
128
+
118
129
  .return-btn {
119
130
  display: flex;
120
131
  align-items: center;
121
132
  font-weight: 600;
122
133
  font-size: 0.875rem;
123
- border-bottom: 1px solid #4a4a4a;
124
134
  }
125
135
  .return-btn:before {
126
136
  display: inline-block;
@@ -132,5 +142,15 @@
132
142
  -moz-osx-font-smoothing: grayscale;
133
143
  content: "\f141";
134
144
  pointer-events: none;
145
+ padding-right: 0.5rem;
135
146
  font-size: 1.28rem;
147
+ }
148
+ .return-btn .return-btn-label {
149
+ display: flex;
150
+ flex-grow: 1;
151
+ justify-content: space-between;
152
+ }
153
+ .return-btn .return-btn-label .selection-count {
154
+ font-weight: 400;
155
+ font-style: italic;
136
156
  }
@@ -285,6 +285,7 @@ export class PrivOptionList {
285
285
  }
286
286
  }
287
287
  close() {
288
+ this.listboxEl.scrollTop = 0;
288
289
  if (this.multiple) {
289
290
  this.updateOptionVisibility();
290
291
  }
@@ -368,10 +369,21 @@ export class PrivOptionList {
368
369
  this.announcement = message;
369
370
  }
370
371
  renderReturnBtn() {
372
+ const selectionCount = this.childOptions.filter((o) => o.selected).length;
373
+ const singleSelectionCountMessage = intl.formatMessage({
374
+ id: "select.optgroupSingleSelectionCount",
375
+ defaultMessage: "Item Selected",
376
+ description: "Text indicating number of selected in a group, where only a single selection is possible.",
377
+ }, { numSelected: selectionCount });
378
+ const multipleSelectionCountMessage = intl.formatMessage({
379
+ id: "select.optgroupMultipleSelectionCount",
380
+ defaultMessage: "{numSelected} Selected",
381
+ description: "Text indicating number of selected in a group, where multiple selections are possible.",
382
+ }, { numSelected: selectionCount });
371
383
  return (h("button", { ref: (el) => (this.returnBtnEl = el), id: "return-btn", class: "return-btn", onKeyDown: (ev) => this.handleKeyDown(ev), onClick: () => {
372
384
  //@ts-ignore -- Check out this one weird trick TypeScript doesn't want you to know about
373
385
  this.el.getRootNode().host.isExpanded = false;
374
- } }, this.optgroupLabel));
386
+ } }, h("div", { class: "return-btn-label" }, this.optgroupLabel, selectionCount > 0 && (h("span", { class: "selection-count" }, this.multiple ? multipleSelectionCountMessage : singleSelectionCountMessage)))));
375
387
  }
376
388
  renderSearchField() {
377
389
  return (h("div", { class: "search" }, h("div", { class: "searchfield-wrapper", ref: (el) => (this.searchFieldWrapperEl = el) }, h("div", { class: "icon" }), h("input", { ref: (el) => (this.searchFieldEl = el), class: "searchfield", role: "combobox", "aria-controls": "list",
@@ -390,8 +402,11 @@ export class PrivOptionList {
390
402
  return (h("wm-option", { class: "clone", subinfo: option.subinfo, selected: option.selected }, option.textContent));
391
403
  });
392
404
  }
405
+ renderNonOptions() {
406
+ return (h("div", { class: "non-options-wrapper" }, this.isInNestedSelect && this.renderReturnBtn(), this.search && this.renderSearchField(), this.visibleSelectAllButton && this.renderSelectAllButton()));
407
+ }
393
408
  render() {
394
- return (h("div", { key: '7597806482ea7bf73439a41c22b2dc2d0e3047ff', class: "list-wrapper" }, this.isInNestedSelect && this.renderReturnBtn(), this.search && this.renderSearchField(), this.visibleSelectAllButton && this.renderSelectAllButton(), h("div", { key: '5a74fb5303a7631bf76dc5be9ef637d03f9bc132', id: "list", class: "options-wrapper", tabindex: -1, role: "listbox", "aria-multiselectable": this.multiple ? "true" : null, "aria-labelledby": "label", ref: (el) => (this.listboxEl = el), style: { "--max-height": this.effectiveMaxHeight } }, this.searchTerm && this.filteredOptions.length === 0 && this.renderSearchFailedMessage(), this.multiple && this.renderCloneOptions(), h("slot", { key: 'bcb6e4c35ebd1ee5a9a4295f5eff61072e2dd8a1' })), h("div", { key: 'c1c11fb35beca1207598239727a61939fe996697', id: "optionlist-announcement", "aria-live": "polite", "aria-atomic": "true", class: "sr-only", ref: (el) => (this.liveRegionEl = el) }, this.announcement)));
409
+ return (h("div", { class: "list-wrapper" }, (this.isInNestedSelect || this.search || this.visibleSelectAllButton) && this.renderNonOptions(), h("div", { id: "list", class: "options-wrapper", tabindex: -1, role: "listbox", "aria-multiselectable": this.multiple ? "true" : null, "aria-labelledby": "label", ref: (el) => (this.listboxEl = el), style: { "--max-height": this.effectiveMaxHeight } }, this.searchTerm && this.filteredOptions.length === 0 && this.renderSearchFailedMessage(), this.multiple && this.renderCloneOptions(), h("slot", null)), h("div", { id: "optionlist-announcement", "aria-live": "polite", "aria-atomic": "true", class: "sr-only", ref: (el) => (this.liveRegionEl = el) }, this.announcement)));
395
410
  }
396
411
  static get is() { return "priv-option-list"; }
397
412
  static get originalStyleUrls() {
@@ -675,9 +690,8 @@ export class PrivOptionList {
675
690
  "complexType": {
676
691
  "signature": "(option: HTMLElement) => Promise<void>",
677
692
  "parameters": [{
678
- "name": "option",
679
- "type": "HTMLElement",
680
- "docs": ""
693
+ "tags": [],
694
+ "text": ""
681
695
  }],
682
696
  "references": {
683
697
  "Promise": {
@@ -700,9 +714,8 @@ export class PrivOptionList {
700
714
  "complexType": {
701
715
  "signature": "(optionToSelect?: \"next\" | \"previous\") => Promise<void>",
702
716
  "parameters": [{
703
- "name": "optionToSelect",
704
- "type": "\"next\" | \"previous\" | undefined",
705
- "docs": ""
717
+ "tags": [],
718
+ "text": ""
706
719
  }],
707
720
  "references": {
708
721
  "Promise": {
@@ -218,9 +218,9 @@
218
218
  margin-left: 0.5rem;
219
219
  }
220
220
  .button-wrapper > .displayedoption[disabled] {
221
- color: #6b6b6b;
222
- border-color: #8a8a8a;
223
- background: #f0f0f0;
221
+ color: var(--wmcolor-select-option-text-disabled);
222
+ border-color: var(--wmcolor-border-dark);
223
+ background: var(--wmcolor-select-option-background-disabled);
224
224
  cursor: default;
225
225
  }
226
226
 
@@ -353,11 +353,11 @@
353
353
  padding-right: 0.5rem;
354
354
  font-size: 1.12rem;
355
355
  }
356
- .menu :focus-visible {
356
+ .menu .menuitem:focus-visible {
357
357
  outline: none;
358
358
  background: var(--wmcolor-interactive-background-focus);
359
359
  }
360
- .menu :hover {
360
+ .menu .menuitem:hover {
361
361
  background: var(--wmcolor-select-option-background-hover);
362
362
  outline: none;
363
363
  }