@watermarkinsights/ripple 5.12.0-9 → 5.12.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 (366) hide show
  1. package/dist/cjs/{chartFunctions-7314b414.js → chartFunctions-a1981e06.js} +31 -11
  2. package/dist/cjs/{functions-5ac8a62f.js → functions-4b187487.js} +1587 -370
  3. package/dist/{esm/app-globals-f3dbaf3e.js → cjs/global-4e034486.js} +2 -7
  4. package/dist/cjs/index-e86c28b6.js +2649 -0
  5. package/dist/cjs/{intl-07aaf53c.js → intl-7fd0760e.js} +104 -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/priv-option-list.cjs.entry.js +14 -52
  12. package/dist/cjs/ripple.cjs.js +11 -12
  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 +15 -9
  17. package/dist/cjs/wm-date-range.cjs.entry.js +21 -11
  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 +18 -18
  23. package/dist/cjs/wm-modal-pss_3.cjs.entry.js +10 -13
  24. package/dist/cjs/wm-modal_3.cjs.entry.js +13 -16
  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 +16 -56
  28. package/dist/cjs/wm-optgroup.cjs.entry.js +4 -5
  29. package/dist/cjs/wm-option_2.cjs.entry.js +11 -25
  30. package/dist/cjs/wm-pagination.cjs.entry.js +65 -14
  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 +13 -9
  34. package/dist/cjs/wm-tab-item_3.cjs.entry.js +14 -12
  35. package/dist/cjs/wm-tag-input.cjs.entry.js +29 -24
  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 +6 -7
  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 +29 -9
  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 +10 -3
  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 +14 -13
  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 +26 -19
  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.js +16 -55
  67. package/dist/collection/components/selects/wm-nested-select/wm-nested-select.js +17 -56
  68. package/dist/collection/components/selects/wm-optgroup/wm-optgroup.js +1 -1
  69. package/dist/collection/components/selects/wm-option/wm-option.e2e.js +22 -0
  70. package/dist/collection/components/selects/wm-option/wm-option.js +1 -1
  71. package/dist/collection/components/selects/wm-option/wm-option.spec.js +63 -0
  72. package/dist/collection/components/selects/wm-select/wm-select.e2e.js +521 -0
  73. package/dist/collection/components/selects/wm-select/wm-select.js +10 -22
  74. package/dist/collection/components/selects/wm-select/wm-select.spec.js +271 -0
  75. package/dist/collection/components/wm-action-menu/wm-action-menu.e2e.js +200 -0
  76. package/dist/collection/components/wm-action-menu/wm-action-menu.js +1 -1
  77. package/dist/collection/components/wm-action-menu/wm-action-menu.spec.js +48 -0
  78. package/dist/collection/components/wm-button/wm-button.e2e.js +55 -0
  79. package/dist/collection/components/wm-button/wm-button.js +1 -1
  80. package/dist/collection/components/wm-button/wm-button.spec.js +74 -0
  81. package/dist/collection/components/wm-file/wm-file.js +1 -1
  82. package/dist/collection/components/wm-file/wm-file.spec.js +194 -0
  83. package/dist/collection/components/wm-file-list/wm-file-list.js +1 -1
  84. package/dist/collection/components/wm-file-list/wm-file-list.spec.js +69 -0
  85. package/dist/collection/components/wm-input/wm-input.e2e.js +32 -0
  86. package/dist/collection/components/wm-input/wm-input.js +1 -1
  87. package/dist/collection/components/wm-input/wm-input.spec.js +173 -0
  88. package/dist/collection/components/wm-menuitem/wm-menuitem.e2e.js +23 -0
  89. package/dist/collection/components/wm-menuitem/wm-menuitem.js +1 -1
  90. package/dist/collection/components/wm-menuitem/wm-menuitem.spec.js +54 -0
  91. package/dist/collection/components/wm-modal/wm-modal-footer.css +9 -16
  92. package/dist/collection/components/wm-modal/wm-modal-footer.js +1 -1
  93. package/dist/collection/components/wm-modal/wm-modal-footer.spec.js +11 -0
  94. package/dist/collection/components/wm-modal/wm-modal-header.css +1 -3
  95. package/dist/collection/components/wm-modal/wm-modal-header.js +1 -1
  96. package/dist/collection/components/wm-modal/wm-modal-header.spec.js +8 -0
  97. package/dist/collection/components/wm-modal/wm-modal.css +3 -2
  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.js +1 -1
  102. package/dist/collection/components/wm-modal-pss/wm-modal-pss-header.js +1 -1
  103. package/dist/collection/components/wm-modal-pss/wm-modal-pss.js +2 -2
  104. package/dist/collection/components/wm-navigation/wm-navigation-hamburger.js +1 -1
  105. package/dist/collection/components/wm-navigation/wm-navigation-item.js +1 -1
  106. package/dist/collection/components/wm-navigation/wm-navigation.e2e.js +102 -0
  107. package/dist/collection/components/wm-navigation/wm-navigation.js +2 -2
  108. package/dist/collection/components/wm-navigation/wm-navigation.spec.js +91 -0
  109. package/dist/collection/components/wm-navigator/priv-navigator-button/priv-navigator-button.e2e.js +50 -0
  110. package/dist/collection/components/wm-navigator/priv-navigator-button/priv-navigator-button.js +1 -1
  111. package/dist/collection/components/wm-navigator/priv-navigator-item/priv-navigator-item.js +1 -1
  112. package/dist/collection/components/wm-navigator/wm-navigator.e2e.js +209 -0
  113. package/dist/collection/components/wm-navigator/wm-navigator.spec.js +177 -0
  114. package/dist/collection/components/wm-pagination/wm-pagination.e2e.js +312 -0
  115. package/dist/collection/components/wm-pagination/wm-pagination.js +63 -11
  116. package/dist/collection/components/wm-search/wm-search.e2e.js +76 -0
  117. package/dist/collection/components/wm-search/wm-search.js +4 -5
  118. package/dist/collection/components/wm-search/wm-search.spec.js +71 -0
  119. package/dist/collection/components/wm-snackbar/wm-snackbar.e2e.js +112 -0
  120. package/dist/collection/components/wm-snackbar/wm-snackbar.js +10 -5
  121. package/dist/collection/components/wm-snackbar/wm-snackbar.spec.js +9 -0
  122. package/dist/collection/components/wm-tabs/wm-tab-item/wm-tab-item.js +1 -1
  123. package/dist/collection/components/wm-tabs/wm-tab-list/wm-tab-list.js +8 -3
  124. package/dist/collection/components/wm-tabs/wm-tab-panel/wm-tab-panel.js +1 -1
  125. package/dist/collection/components/wm-tabs/wm-tabs.e2e.js +91 -0
  126. package/dist/collection/components/wm-tabs/wm-tabs.spec.js +12 -0
  127. package/dist/collection/components/wm-tag-input/wm-tag-input.e2e.js +204 -0
  128. package/dist/collection/components/wm-tag-input/wm-tag-input.js +25 -19
  129. package/dist/collection/components/wm-tag-input/wm-tag-input.spec.js +195 -0
  130. package/dist/collection/components/wm-textarea/wm-textarea.e2e.js +41 -0
  131. package/dist/collection/components/wm-textarea/wm-textarea.js +1 -1
  132. package/dist/collection/components/wm-textarea/wm-textarea.spec.js +79 -0
  133. package/dist/collection/components/wm-timepicker/wm-timepicker.e2e.js +163 -0
  134. package/dist/collection/components/wm-timepicker/wm-timepicker.js +8 -11
  135. package/dist/collection/components/wm-timepicker/wm-timepicker.spec.js +147 -0
  136. package/dist/collection/components/wm-toggletip/wm-toggletip.css +0 -1
  137. package/dist/collection/components/wm-toggletip/wm-toggletip.e2e.js +69 -0
  138. package/dist/collection/components/wm-toggletip/wm-toggletip.js +2 -2
  139. package/dist/collection/components/wm-toggletip/wm-toggletip.spec.js +21 -0
  140. package/dist/collection/components/wm-uploader/wm-uploader.e2e.js +70 -0
  141. package/dist/collection/components/wm-uploader/wm-uploader.js +2 -2
  142. package/dist/collection/components/wm-uploader/wm-uploader.spec.js +234 -0
  143. package/dist/collection/global/functions.spec.js +126 -0
  144. package/dist/collection/global/intl.js +102 -0
  145. package/dist/collection/lang/lang.spec.js +20 -0
  146. package/dist/collection/lang/piglatin.js +9 -1
  147. package/dist/esm/{chartFunctions-1478f4db.js → chartFunctions-9099c7e9.js} +31 -11
  148. package/dist/esm/{functions-f53b3537.js → functions-00e1916b.js} +1588 -371
  149. package/dist/{cjs/app-globals-b8352f28.js → esm/global-c76064cb.js} +1 -10
  150. package/dist/esm/index-558b5a82.js +2618 -0
  151. package/dist/esm/{intl-6426ba51.js → intl-a6f16883.js} +104 -2
  152. package/dist/esm/loader.js +4 -5
  153. package/dist/esm/priv-calendar.entry.js +5 -6
  154. package/dist/esm/priv-chart-popover.entry.js +5 -6
  155. package/dist/esm/priv-navigator-button.entry.js +3 -4
  156. package/dist/esm/priv-navigator-item.entry.js +3 -4
  157. package/dist/esm/priv-option-list.entry.js +14 -52
  158. package/dist/esm/ripple.js +12 -13
  159. package/dist/esm/wm-action-menu_2.entry.js +6 -8
  160. package/dist/esm/wm-button.entry.js +4 -5
  161. package/dist/esm/wm-chart-slice.entry.js +1 -1
  162. package/dist/esm/wm-chart.entry.js +15 -9
  163. package/dist/esm/wm-date-range.entry.js +21 -11
  164. package/dist/esm/wm-datepicker.entry.js +8 -9
  165. package/dist/esm/wm-file-list.entry.js +3 -4
  166. package/dist/esm/wm-file.entry.js +4 -5
  167. package/dist/esm/wm-input.entry.js +5 -6
  168. package/dist/esm/wm-line-chart.entry.js +18 -18
  169. package/dist/esm/wm-modal-pss_3.entry.js +10 -13
  170. package/dist/esm/wm-modal_3.entry.js +13 -16
  171. package/dist/esm/wm-navigation_3.entry.js +10 -13
  172. package/dist/esm/wm-navigator.entry.js +3 -4
  173. package/dist/esm/wm-nested-select.entry.js +16 -56
  174. package/dist/esm/wm-optgroup.entry.js +4 -5
  175. package/dist/esm/wm-option_2.entry.js +11 -25
  176. package/dist/esm/wm-pagination.entry.js +65 -14
  177. package/dist/esm/wm-progress-indicator_3.entry.js +7 -9
  178. package/dist/esm/wm-search.entry.js +6 -7
  179. package/dist/esm/wm-snackbar.entry.js +13 -9
  180. package/dist/esm/wm-tab-item_3.entry.js +14 -12
  181. package/dist/esm/wm-tag-input.entry.js +29 -24
  182. package/dist/esm/wm-tag-option.entry.js +2 -2
  183. package/dist/esm/wm-textarea.entry.js +5 -6
  184. package/dist/esm/wm-timepicker.entry.js +5 -6
  185. package/dist/esm/wm-toggletip.entry.js +6 -7
  186. package/dist/esm/wm-uploader.entry.js +6 -7
  187. package/dist/esm/wm-wrapper.entry.js +1 -1
  188. package/dist/esm-es5/chartFunctions-9099c7e9.js +1 -0
  189. package/dist/esm-es5/functions-00e1916b.js +1 -0
  190. package/dist/esm-es5/global-c76064cb.js +1 -0
  191. package/dist/esm-es5/index-558b5a82.js +1 -0
  192. package/dist/esm-es5/intl-a6f16883.js +1 -0
  193. package/dist/esm-es5/loader.js +1 -1
  194. package/dist/esm-es5/priv-calendar.entry.js +1 -1
  195. package/dist/esm-es5/priv-chart-popover.entry.js +1 -1
  196. package/dist/esm-es5/priv-navigator-button.entry.js +1 -1
  197. package/dist/esm-es5/priv-navigator-item.entry.js +1 -1
  198. package/dist/esm-es5/priv-option-list.entry.js +1 -1
  199. package/dist/esm-es5/ripple.js +1 -1
  200. package/dist/esm-es5/wm-action-menu_2.entry.js +1 -1
  201. package/dist/esm-es5/wm-button.entry.js +1 -1
  202. package/dist/esm-es5/wm-chart-slice.entry.js +1 -1
  203. package/dist/esm-es5/wm-chart.entry.js +1 -1
  204. package/dist/esm-es5/wm-date-range.entry.js +1 -1
  205. package/dist/esm-es5/wm-datepicker.entry.js +1 -1
  206. package/dist/esm-es5/wm-file-list.entry.js +1 -1
  207. package/dist/esm-es5/wm-file.entry.js +1 -1
  208. package/dist/esm-es5/wm-input.entry.js +1 -1
  209. package/dist/esm-es5/wm-line-chart.entry.js +1 -1
  210. package/dist/esm-es5/wm-modal-pss_3.entry.js +1 -1
  211. package/dist/esm-es5/wm-modal_3.entry.js +1 -1
  212. package/dist/esm-es5/wm-navigation_3.entry.js +1 -1
  213. package/dist/esm-es5/wm-navigator.entry.js +1 -1
  214. package/dist/esm-es5/wm-nested-select.entry.js +1 -1
  215. package/dist/esm-es5/wm-optgroup.entry.js +1 -1
  216. package/dist/esm-es5/wm-option_2.entry.js +1 -1
  217. package/dist/esm-es5/wm-pagination.entry.js +1 -1
  218. package/dist/esm-es5/wm-progress-indicator_3.entry.js +1 -1
  219. package/dist/esm-es5/wm-search.entry.js +1 -1
  220. package/dist/esm-es5/wm-snackbar.entry.js +1 -1
  221. package/dist/esm-es5/wm-tab-item_3.entry.js +1 -1
  222. package/dist/esm-es5/wm-tag-input.entry.js +1 -1
  223. package/dist/esm-es5/wm-tag-option.entry.js +1 -1
  224. package/dist/esm-es5/wm-textarea.entry.js +1 -1
  225. package/dist/esm-es5/wm-timepicker.entry.js +1 -1
  226. package/dist/esm-es5/wm-toggletip.entry.js +1 -1
  227. package/dist/esm-es5/wm-uploader.entry.js +1 -1
  228. package/dist/esm-es5/wm-wrapper.entry.js +1 -1
  229. package/dist/loader/cdn.js +2 -1
  230. package/dist/loader/index.cjs.js +2 -1
  231. package/dist/loader/index.d.ts +0 -3
  232. package/dist/loader/index.es2017.js +2 -1
  233. package/dist/loader/index.js +2 -1
  234. package/dist/ripple/p-05ae54d7.entry.js +1 -0
  235. package/dist/ripple/{p-fdfa3579.system.entry.js → p-0d89d63c.system.entry.js} +1 -1
  236. package/dist/ripple/p-118c47eb.system.entry.js +1 -0
  237. package/dist/ripple/{p-658f146a.system.entry.js → p-1a4b6b02.system.entry.js} +1 -1
  238. package/dist/ripple/{p-a0edf336.system.entry.js → p-1a4b7504.system.entry.js} +1 -1
  239. package/dist/ripple/{p-165b5d3d.system.entry.js → p-1a71d867.system.entry.js} +1 -1
  240. package/dist/ripple/p-1a951dfb.entry.js +1 -0
  241. package/dist/ripple/{p-28f9e202.system.entry.js → p-1c8f550f.system.entry.js} +1 -1
  242. package/dist/ripple/p-1f751b87.js +1 -0
  243. package/dist/ripple/p-1fac5bf9.js +1 -0
  244. package/dist/ripple/{p-03fafb82.entry.js → p-20a8f732.system.entry.js} +1 -1
  245. package/dist/ripple/{p-3b5d106d.entry.js → p-249b56fb.entry.js} +1 -1
  246. package/dist/ripple/p-249d13a1.system.entry.js +1 -0
  247. package/dist/ripple/p-26906899.entry.js +1 -0
  248. package/dist/ripple/{p-486b3b56.system.entry.js → p-28119645.system.entry.js} +1 -1
  249. package/dist/ripple/{p-a2544443.system.js → p-2f37f3ee.system.js} +1 -1
  250. package/dist/ripple/{p-823d7b4e.system.entry.js → p-32bf3f5b.system.entry.js} +1 -1
  251. package/dist/ripple/{p-20b137a3.system.entry.js → p-335c03d3.system.entry.js} +1 -1
  252. package/dist/ripple/p-363b534b.entry.js +1 -0
  253. package/dist/ripple/p-393e4636.js +1 -0
  254. package/dist/ripple/p-39f79d71.system.entry.js +1 -0
  255. package/dist/ripple/{p-ff60375d.system.entry.js → p-3a231f4b.system.entry.js} +1 -1
  256. package/dist/ripple/{p-55f8aa05.entry.js → p-3d4bb85f.entry.js} +1 -1
  257. package/dist/ripple/p-4228de00.entry.js +1 -0
  258. package/dist/ripple/{p-13b1d775.entry.js → p-48e09589.entry.js} +1 -1
  259. package/dist/ripple/p-4f8fe1d1.system.js +1 -0
  260. package/dist/ripple/{p-02e60a11.system.entry.js → p-522ecb7d.system.entry.js} +1 -1
  261. package/dist/ripple/{p-ee825214.entry.js → p-54d6f0f9.entry.js} +1 -1
  262. package/dist/ripple/p-568c595f.js +2 -0
  263. package/dist/ripple/p-56aeee6e.system.entry.js +1 -0
  264. package/dist/ripple/p-5e6a4f70.system.js +1 -0
  265. package/dist/ripple/{p-82819500.system.entry.js → p-5f082360.system.entry.js} +1 -1
  266. package/dist/ripple/p-5f5fe905.js +1 -0
  267. package/dist/ripple/p-617c2c75.entry.js +1 -0
  268. package/dist/ripple/{p-4fbe205e.system.entry.js → p-6524c53e.system.entry.js} +1 -1
  269. package/dist/ripple/{p-043901ab.system.entry.js → p-65d26233.system.entry.js} +1 -1
  270. package/dist/ripple/p-6834a6d3.entry.js +1 -0
  271. package/dist/ripple/{p-81ac8d49.entry.js → p-68e04222.entry.js} +1 -1
  272. package/dist/ripple/{p-f778baf4.system.entry.js → p-68fddfaa.system.entry.js} +1 -1
  273. package/dist/ripple/{p-e2fbed8c.system.entry.js → p-694903e6.system.entry.js} +1 -1
  274. package/dist/ripple/p-73ca2f26.system.js +1 -0
  275. package/dist/ripple/{p-1f174e18.system.entry.js → p-7b6a65f8.system.entry.js} +1 -1
  276. package/dist/ripple/{p-a9a7731b.system.entry.js → p-7b7e1eb5.system.entry.js} +1 -1
  277. package/dist/ripple/{p-cd0cc88d.entry.js → p-88ebddd7.entry.js} +1 -1
  278. package/dist/ripple/{p-791513e7.entry.js → p-8c1d27a7.entry.js} +1 -1
  279. package/dist/ripple/{p-ccae5bec.entry.js → p-8e9c24f3.entry.js} +1 -1
  280. package/dist/ripple/{p-b16f07f1.system.entry.js → p-8f836507.system.entry.js} +1 -1
  281. package/dist/ripple/p-94495341.entry.js +1 -0
  282. package/dist/ripple/{p-76f9acec.entry.js → p-958331bf.entry.js} +1 -1
  283. package/dist/ripple/p-9872623b.entry.js +1 -0
  284. package/dist/ripple/{p-e6e36701.system.entry.js → p-9ab3c088.system.entry.js} +1 -1
  285. package/dist/ripple/p-9aedd599.entry.js +1 -0
  286. package/dist/ripple/p-9b848151.entry.js +1 -0
  287. package/dist/ripple/{p-3376581a.system.entry.js → p-a04ef164.system.entry.js} +1 -1
  288. package/dist/ripple/{p-02bd68af.system.entry.js → p-a78bb423.system.entry.js} +1 -1
  289. package/dist/ripple/{p-0d163672.system.entry.js → p-a880d9a0.system.entry.js} +1 -1
  290. package/dist/ripple/p-ab8d78cc.system.js +2 -0
  291. package/dist/ripple/p-adc254e6.entry.js +1 -0
  292. package/dist/ripple/p-b165d61a.entry.js +1 -0
  293. package/dist/ripple/p-b39377c7.entry.js +1 -0
  294. package/dist/ripple/p-b9bca547.entry.js +1 -0
  295. package/dist/ripple/p-bae2c236.entry.js +1 -0
  296. package/dist/ripple/{p-8634abad.system.entry.js → p-c53f3704.system.entry.js} +1 -1
  297. package/dist/ripple/p-c56ff16f.entry.js +1 -0
  298. package/dist/ripple/{p-94fbf6f6.system.entry.js → p-c8cf09a2.system.entry.js} +1 -1
  299. package/dist/ripple/p-cbdceb6e.entry.js +1 -0
  300. package/dist/ripple/p-cc813406.system.js +1 -0
  301. package/dist/ripple/{p-529f179c.system.entry.js → p-d20a0f0c.system.entry.js} +1 -1
  302. package/dist/ripple/p-d6111226.entry.js +1 -0
  303. package/dist/ripple/{p-f28106ea.entry.js → p-da68c87c.entry.js} +1 -1
  304. package/dist/ripple/{p-e8cfa832.entry.js → p-ddef82fa.system.entry.js} +1 -1
  305. package/dist/ripple/p-dee6d5a3.entry.js +1 -0
  306. package/dist/ripple/p-e55d5371.entry.js +1 -0
  307. package/dist/ripple/{p-7959c4bd.system.entry.js → p-e8c22f01.system.entry.js} +1 -1
  308. package/dist/ripple/p-f555831b.entry.js +1 -0
  309. package/dist/ripple/{p-226217d3.system.entry.js → p-f5c40e9e.system.entry.js} +1 -1
  310. package/dist/ripple/p-f9cade98.entry.js +1 -0
  311. package/dist/ripple/{p-fc7965e4.system.entry.js → p-fa09191b.system.entry.js} +1 -1
  312. package/dist/ripple/{p-233f14ec.system.entry.js → p-fdfca58b.entry.js} +1 -1
  313. package/dist/ripple/ripple.esm.js +1 -1
  314. package/dist/ripple/ripple.js +1 -1
  315. package/dist/types/components/selects/priv-option-list/priv-option-list.d.ts +0 -6
  316. package/dist/types/components/wm-pagination/wm-pagination.d.ts +6 -0
  317. package/dist/types/components/wm-snackbar/wm-snackbar.d.ts +1 -0
  318. package/dist/types/components/wm-tabs/wm-tab-list/wm-tab-list.d.ts +1 -0
  319. package/dist/types/components/wm-tag-input/wm-tag-input.d.ts +2 -1
  320. package/dist/types/global/intl.d.ts +22 -0
  321. package/dist/types/stencil-public-runtime.d.ts +10 -3
  322. package/package.json +2 -2
  323. package/dist/cjs/index-788526f5.js +0 -1859
  324. package/dist/esm/index-130e07bb.js +0 -1828
  325. package/dist/esm-es5/app-globals-f3dbaf3e.js +0 -1
  326. package/dist/esm-es5/chartFunctions-1478f4db.js +0 -1
  327. package/dist/esm-es5/functions-f53b3537.js +0 -1
  328. package/dist/esm-es5/index-130e07bb.js +0 -1
  329. package/dist/esm-es5/intl-6426ba51.js +0 -1
  330. package/dist/ripple/p-243a7a17.system.entry.js +0 -1
  331. package/dist/ripple/p-263e42e0.entry.js +0 -1
  332. package/dist/ripple/p-27ff3a85.js +0 -1
  333. package/dist/ripple/p-2c8153c1.entry.js +0 -1
  334. package/dist/ripple/p-368e9ee9.entry.js +0 -1
  335. package/dist/ripple/p-3a2a3b70.entry.js +0 -1
  336. package/dist/ripple/p-45b5d2d2.entry.js +0 -1
  337. package/dist/ripple/p-49e24926.entry.js +0 -1
  338. package/dist/ripple/p-50294e3f.entry.js +0 -1
  339. package/dist/ripple/p-53400bc4.system.entry.js +0 -1
  340. package/dist/ripple/p-58734b13.entry.js +0 -1
  341. package/dist/ripple/p-59cc46a6.entry.js +0 -1
  342. package/dist/ripple/p-5c62e26d.entry.js +0 -1
  343. package/dist/ripple/p-6136d0d7.entry.js +0 -1
  344. package/dist/ripple/p-66141f19.entry.js +0 -1
  345. package/dist/ripple/p-713ea307.entry.js +0 -1
  346. package/dist/ripple/p-727175e1.system.entry.js +0 -1
  347. package/dist/ripple/p-73056e10.system.js +0 -1
  348. package/dist/ripple/p-7a1bb29b.js +0 -1
  349. package/dist/ripple/p-864158de.system.entry.js +0 -1
  350. package/dist/ripple/p-8c95493c.js +0 -1
  351. package/dist/ripple/p-94dc80a0.entry.js +0 -1
  352. package/dist/ripple/p-9b739280.entry.js +0 -1
  353. package/dist/ripple/p-a280d710.entry.js +0 -1
  354. package/dist/ripple/p-b78d8ab1.system.js +0 -1
  355. package/dist/ripple/p-c550716e.js +0 -1
  356. package/dist/ripple/p-cef8a45b.system.js +0 -2
  357. package/dist/ripple/p-d530c703.entry.js +0 -1
  358. package/dist/ripple/p-d96291e7.entry.js +0 -1
  359. package/dist/ripple/p-d9da0502.js +0 -2
  360. package/dist/ripple/p-e973024a.entry.js +0 -1
  361. package/dist/ripple/p-ed24dc42.entry.js +0 -1
  362. package/dist/ripple/p-ef75bf23.system.entry.js +0 -1
  363. package/dist/ripple/p-f471ee29.system.js +0 -1
  364. package/dist/ripple/p-f66480de.entry.js +0 -1
  365. package/dist/ripple/p-f9a71cf6.entry.js +0 -1
  366. package/dist/ripple/p-ffbb9fc0.system.js +0 -1
@@ -0,0 +1,312 @@
1
+ import { newE2EPage } from "@stencil/core/testing";
2
+ describe("wm-pagination", () => {
3
+ let page, el;
4
+ beforeEach(async () => {
5
+ page = await newE2EPage();
6
+ await page.setContent("<wm-pagination total-items='43' items-per-page='10' current-page='1'></wm-pagination>");
7
+ el = await page.find("wm-pagination");
8
+ await page.evaluate(async () => {
9
+ await document.addEventListener("wmPaginationPageClicked", function (ev) {
10
+ let pagin = document.querySelector("wm-pagination");
11
+ pagin.currentPage = +ev.target.value;
12
+ });
13
+ });
14
+ });
15
+ // HANDLES ONE PAGE (FALLBACK IF DEV'S CONDITIONAL RENDERING FAILS)
16
+ it("does not render pagination", async () => {
17
+ el.setAttribute("current-page", "1");
18
+ el.setAttribute("total-items", "5");
19
+ el.setAttribute("items-per-page", "10");
20
+ await page.waitForChanges();
21
+ const current = await page.find("wm-pagination >>> nav");
22
+ expect(current).toBe(null);
23
+ });
24
+ //HANDLES SHORT PAGINATION (FIVE PAGES OR LESS )
25
+ it("indicates the current page correctly", async () => {
26
+ el.setAttribute("current-page", "5");
27
+ el.setAttribute("total-items", "47");
28
+ el.setAttribute("items-per-page", "10");
29
+ await page.waitForChanges();
30
+ let current = await page.find("wm-pagination >>> [aria-current='page']");
31
+ let val = await current.getProperty("value");
32
+ expect(val).toEqual("5");
33
+ });
34
+ it("displays the correct number of buttons", async () => {
35
+ el.setAttribute("current-page", "2");
36
+ el.setAttribute("total-items", "47");
37
+ el.setAttribute("items-per-page", "10");
38
+ await page.waitForChanges();
39
+ //There should be prev, five page numbers and next
40
+ let buttons = await page.findAll("wm-pagination >>> button");
41
+ expect(buttons.length).toBe(7);
42
+ el.setAttribute("current-page", "2");
43
+ el.setAttribute("total-items", "11");
44
+ el.setAttribute("items-per-page", "10");
45
+ await page.waitForChanges();
46
+ //There should now be prev, two page numbers, and next
47
+ buttons = await page.findAll("wm-pagination >>> button");
48
+ expect(buttons.length).toBe(4);
49
+ });
50
+ it("disables previous and next", async () => {
51
+ el.setAttribute("current-page", "5");
52
+ el.setAttribute("total-items", "47");
53
+ el.setAttribute("items-per-page", "10");
54
+ await page.waitForChanges();
55
+ let buttons = await page.findAll("wm-pagination >>> button");
56
+ let prev = await buttons[0];
57
+ let next = await buttons[6];
58
+ expect(prev).not.toHaveAttribute("disabled");
59
+ expect(next).toHaveAttribute("disabled");
60
+ el.setAttribute("current-page", "1");
61
+ await page.waitForChanges();
62
+ buttons = await page.findAll("wm-pagination >>> button");
63
+ prev = await buttons[0];
64
+ next = await buttons[6];
65
+ expect(next).not.toHaveAttribute("disabled");
66
+ expect(prev).toHaveAttribute("disabled");
67
+ });
68
+ //Add tests for keyboard navigation to simulate events that update the current page
69
+ // HANDLES LONG PAGINATION (SIX OR MORE PAGES)
70
+ it("indicates the current page correctly", async () => {
71
+ el.setAttribute("current-page", "6");
72
+ el.setAttribute("total-items", "147");
73
+ el.setAttribute("items-per-page", "10");
74
+ await page.waitForChanges();
75
+ let current = await page.find("wm-pagination >>> [aria-current='page']");
76
+ let val = await current.getProperty("value");
77
+ expect(val).toEqual("6");
78
+ });
79
+ it("displays five page number buttons regardless of the current page", async () => {
80
+ el.setAttribute("current-page", "3");
81
+ el.setAttribute("total-items", "147");
82
+ el.setAttribute("items-per-page", "10");
83
+ await page.waitForChanges();
84
+ let buttons = await page.findAll("wm-pagination >>> button");
85
+ //five page number buttons, plus the two prev/next buttons that always render
86
+ expect(buttons.length).toBe(7);
87
+ el.setAttribute("current-page", "15");
88
+ el.setAttribute("total-items", "147");
89
+ el.setAttribute("items-per-page", "10");
90
+ await page.waitForChanges();
91
+ buttons = await page.findAll("wm-pagination >>> button");
92
+ //five page number buttons, plus the two prev/next buttons that always render
93
+ expect(buttons.length).toBe(7);
94
+ el.setAttribute("current-page", "7");
95
+ el.setAttribute("total-items", "147");
96
+ el.setAttribute("items-per-page", "10");
97
+ await page.waitForChanges();
98
+ buttons = await page.findAll("wm-pagination >>> button");
99
+ //five page number buttons, plus the two prev/next buttons that always render
100
+ expect(buttons.length).toBe(7);
101
+ });
102
+ it("displays only the right hand ellipsis when current page is within the first four pages", async () => {
103
+ el.setAttribute("current-page", "3");
104
+ el.setAttribute("total-items", "147");
105
+ el.setAttribute("items-per-page", "10");
106
+ await page.waitForChanges();
107
+ const displayedElements = await page.find("wm-pagination >>> div.pagebtncontainer");
108
+ //Check that page number, not left hand ellipsis, is displayed
109
+ expect(displayedElements.childNodes[2].innerHTML).toBe("2");
110
+ //Check that ellipsis is displayed in the right spot
111
+ expect(displayedElements.childNodes[5].innerHTML).toBe("...");
112
+ });
113
+ it("displays only the left hand ellipsis only when current page is within the last four pages", async () => {
114
+ el.setAttribute("current-page", "13");
115
+ el.setAttribute("total-items", "147");
116
+ el.setAttribute("items-per-page", "10");
117
+ await page.waitForChanges();
118
+ const displayedElements = await page.find("wm-pagination >>> div.pagebtncontainer");
119
+ //Check that page number, not right hand ellipsis, is displayed
120
+ expect(displayedElements.childNodes[5].innerHTML).toBe("14");
121
+ //Check that ellipsis is displayed in the right spot
122
+ expect(displayedElements.childNodes[2].innerHTML).toBe("...");
123
+ });
124
+ it("displays both sets of ellipsis when the total page count is greater than 6 and the current page is not within the first four or the last four pages", async () => {
125
+ el.setAttribute("current-page", "8");
126
+ el.setAttribute("total-items", "147");
127
+ el.setAttribute("items-per-page", "10");
128
+ await page.waitForChanges();
129
+ const displayedElements = await page.find("wm-pagination >>> div.pagebtncontainer");
130
+ //left ellipsis
131
+ expect(displayedElements.childNodes[2].innerHTML).toBe("...");
132
+ //right ellipsis
133
+ expect(displayedElements.childNodes[6].innerHTML).toBe("...");
134
+ });
135
+ it("fires an event when a button is triggered", async () => {
136
+ el.setAttribute("current-page", "3");
137
+ el.setAttribute("total-items", "147");
138
+ el.setAttribute("items-per-page", "10");
139
+ await page.waitForChanges();
140
+ await page.keyboard.press("Tab"); // Previous btn
141
+ await page.waitForChanges();
142
+ await page.keyboard.press("Enter");
143
+ await page.waitForChanges();
144
+ let current = await page.find("wm-pagination >>> [aria-current='page']");
145
+ expect(current.id).toBe("wm-2");
146
+ });
147
+ // A11Y
148
+ // UX requirements, cf. https://watermarkinsights.atlassian.net/wiki/spaces/WDS/pages/51938484/Pagination
149
+ it("allows user to tab through the clickable pagination elements", async () => {
150
+ el.setAttribute("current-page", "5");
151
+ el.setAttribute("total-items", "97");
152
+ el.setAttribute("items-per-page", "10");
153
+ await page.waitForChanges();
154
+ // User should be able to tab through the clickable pagination elements. Navigating below to page 5
155
+ await page.keyboard.press("Tab");
156
+ await page.waitForChanges();
157
+ await page.keyboard.press("Tab");
158
+ await page.waitForChanges();
159
+ await page.keyboard.press("Tab");
160
+ await page.waitForChanges();
161
+ await page.keyboard.press("Tab");
162
+ await page.waitForChanges();
163
+ let activeElId = await page.evaluate(async () => {
164
+ let el = await document.activeElement.shadowRoot.activeElement;
165
+ return el.id;
166
+ });
167
+ expect(activeElId).toBe("wm-5");
168
+ //Navigating below to next button
169
+ await page.keyboard.press("Tab");
170
+ await page.waitForChanges();
171
+ await page.keyboard.press("Tab");
172
+ await page.waitForChanges();
173
+ await page.keyboard.press("Tab");
174
+ await page.waitForChanges();
175
+ activeElId = await page.evaluate(async () => {
176
+ let el = await document.activeElement.shadowRoot.activeElement;
177
+ return el.id;
178
+ });
179
+ expect(activeElId).toBe("next");
180
+ });
181
+ it("updates the current page when enter is pressed on a page button and keeps focus on the selected page", async () => {
182
+ el.setAttribute("current-page", "5");
183
+ el.setAttribute("total-items", "97");
184
+ el.setAttribute("items-per-page", "10");
185
+ await page.waitForChanges();
186
+ //Navigate to page 6 and click on it
187
+ await page.keyboard.press("Tab");
188
+ await page.waitForChanges();
189
+ await page.keyboard.press("Tab");
190
+ await page.waitForChanges();
191
+ await page.keyboard.press("Tab");
192
+ await page.waitForChanges();
193
+ await page.keyboard.press("Tab");
194
+ await page.waitForChanges();
195
+ await page.keyboard.press("Tab");
196
+ await page.waitForChanges();
197
+ await page.keyboard.press("Enter");
198
+ await page.waitForChanges();
199
+ //Current page should update to page 6
200
+ let current = await page.find("wm-pagination >>> [aria-current='page']");
201
+ let val = await current.getProperty("value");
202
+ expect(val).toEqual("6");
203
+ //Focus should remain on 6 even though button arrangement changes
204
+ let activeElId = await page.evaluate(async () => {
205
+ let el = await document.activeElement.shadowRoot.activeElement;
206
+ return el.id;
207
+ });
208
+ expect(activeElId).toBe("wm-6");
209
+ });
210
+ it("decrements the current page when enter is pressed on the previous button, keeps focus on the previous button until it becomes disabled, and moves focus first page once it is disabled", async () => {
211
+ el.setAttribute("current-page", "3");
212
+ el.setAttribute("total-items", "97");
213
+ el.setAttribute("items-per-page", "10");
214
+ await page.waitForChanges();
215
+ //Navigate to previous button
216
+ await page.keyboard.press("Tab");
217
+ await page.waitForChanges();
218
+ await page.keyboard.press("Enter");
219
+ await page.waitForChanges();
220
+ //Current page should decrease by 1
221
+ let current = await page.find("wm-pagination >>> [aria-current='page']");
222
+ let val = await current.getProperty("value");
223
+ expect(val).toEqual("2");
224
+ //Focus should remain on previous button
225
+ let activeElId = await page.evaluate(async () => {
226
+ let el = await document.activeElement.shadowRoot.activeElement;
227
+ return el.id;
228
+ });
229
+ expect(activeElId).toBe("previous");
230
+ //Press previous again, reaching first page and disabling previous button
231
+ await page.keyboard.press("Enter");
232
+ await page.waitForChanges();
233
+ current = await page.find("wm-pagination >>> [aria-current='page']");
234
+ val = await current.getProperty("value");
235
+ expect(val).toEqual("1");
236
+ //Focus is shifted to first page button rather than flying out to body
237
+ activeElId = await page.evaluate(async () => {
238
+ let el = await document.activeElement.shadowRoot.activeElement;
239
+ return el.id;
240
+ });
241
+ expect(activeElId).toBe("wm-1");
242
+ });
243
+ it("increments the current page when enter is pressed on the next button, keeps focus on the next button until it becomes disabled, and moves focus back to last page once it is disabled", async () => {
244
+ el.setAttribute("current-page", "8");
245
+ el.setAttribute("total-items", "97");
246
+ el.setAttribute("items-per-page", "10");
247
+ await page.waitForChanges();
248
+ //Navigate to the next button and press enter
249
+ await page.keyboard.press("Tab");
250
+ await page.waitForChanges();
251
+ await page.keyboard.press("Tab");
252
+ await page.waitForChanges();
253
+ await page.keyboard.press("Tab");
254
+ await page.waitForChanges();
255
+ await page.keyboard.press("Tab");
256
+ await page.waitForChanges();
257
+ await page.keyboard.press("Tab");
258
+ await page.waitForChanges();
259
+ await page.keyboard.press("Tab");
260
+ await page.waitForChanges();
261
+ await page.keyboard.press("Tab");
262
+ await page.waitForChanges();
263
+ await page.keyboard.press("Enter");
264
+ await page.waitForChanges();
265
+ //Current page should increase by 1
266
+ let current = await page.find("wm-pagination >>> [aria-current='page']");
267
+ let val = await current.getProperty("value");
268
+ expect(val).toEqual("9");
269
+ //Focus should remain on the next button
270
+ let activeElId = await page.evaluate(async () => {
271
+ let el = await document.activeElement.shadowRoot.activeElement;
272
+ return el.id;
273
+ });
274
+ expect(activeElId).toBe("next");
275
+ //Press next again
276
+ await page.keyboard.press("Enter");
277
+ await page.waitForChanges();
278
+ //Last page is reached, and next button becomes disabled
279
+ current = await page.find("wm-pagination >>> [aria-current='page']");
280
+ val = await current.getProperty("value");
281
+ expect(val).toEqual("10");
282
+ //Rather than the focus shifting to the body once it is disabled, focus is brought to last page button
283
+ activeElId = await page.evaluate(async () => {
284
+ let el = await document.activeElement.shadowRoot.activeElement;
285
+ return el.id;
286
+ });
287
+ expect(activeElId).toBe("wm-10");
288
+ });
289
+ it("sets labels dynamically so that screenreaders properly announce the navigable pagination elements", async () => {
290
+ el.setAttribute("current-page", "3");
291
+ el.setAttribute("total-items", "47");
292
+ el.setAttribute("items-per-page", "10");
293
+ await page.waitForChanges();
294
+ let buttons = await page.findAll("wm-pagination >>> button");
295
+ let notCurrentPage = buttons[2];
296
+ expect(notCurrentPage).toEqualAttribute("aria-label", "Go to page 2");
297
+ let currentPage = buttons[3];
298
+ expect(currentPage).toEqualAttribute("aria-label", "");
299
+ //Change current page number
300
+ await page.keyboard.press("Tab");
301
+ await page.waitForChanges();
302
+ await page.keyboard.press("Enter");
303
+ await page.waitForChanges();
304
+ buttons = await page.findAll("wm-pagination >>> button");
305
+ //Button 3 no longer as label indicating it's the current page
306
+ notCurrentPage = buttons[3];
307
+ expect(notCurrentPage).toEqualAttribute("aria-label", "Go to page 3");
308
+ //Button 2 now has current page label
309
+ currentPage = buttons[2];
310
+ expect(currentPage).toEqualAttribute("aria-label", "");
311
+ });
312
+ });
@@ -1,8 +1,24 @@
1
1
  import { h } from "@stencil/core";
2
- import { debounce } from "../../global/functions";
2
+ import { debounce, intl } from "../../global/functions";
3
+ import { globalMessages } from "../../global/intl";
3
4
  export class Pagination {
4
5
  constructor() {
5
6
  this.totalPages = 0;
7
+ this.navigationLabel = intl.formatMessage({
8
+ id: "pagination.navLabel",
9
+ defaultMessage: "Pagination navigation.",
10
+ description: "Label for a navigation HTML element within a pagination UI element",
11
+ });
12
+ this.nextPageButtonLabel = intl.formatMessage({
13
+ id: "pagination.nextPageButtonLabel",
14
+ defaultMessage: "Go to next page",
15
+ description: "Page refers to a paginated list of items",
16
+ });
17
+ this.previousPageButtonLabel = intl.formatMessage({
18
+ id: "pagination.previousPageButtonLabel",
19
+ defaultMessage: "Go to previous page",
20
+ description: "Page refers to a paginated list of items",
21
+ });
6
22
  this.debouncedResize = debounce(() => (this.isLargeSize = this.el.clientWidth > 500), 100);
7
23
  this.getMiddlePageNums = () => {
8
24
  let coreBtns;
@@ -25,6 +41,33 @@ export class Pagination {
25
41
  this.isLargeSize = window.innerWidth > 600;
26
42
  this.srAnnouncement = "";
27
43
  }
44
+ pageButtonLabel(pageNum) {
45
+ return intl.formatMessage({
46
+ id: "pagination.pageButtonLabel",
47
+ defaultMessage: `Go to page {pageNum}`,
48
+ description: "Page refers to a paginated list of items",
49
+ }, {
50
+ pageNum: pageNum,
51
+ });
52
+ }
53
+ lastPageButtonLabel(totalPages) {
54
+ return intl.formatMessage({
55
+ id: "pagination.lastPageButtonLabel",
56
+ defaultMessage: `Go to last page, page {totalPages}`,
57
+ description: "Page refers to a paginated list of items",
58
+ }, {
59
+ totalPages: totalPages,
60
+ });
61
+ }
62
+ currentPageAnnouncement(currentPage) {
63
+ return intl.formatMessage({
64
+ id: "pagination.currentPageAnnouncement",
65
+ defaultMessage: "Current page, {currentPage}.",
66
+ description: "Page refers to a paginated list of items",
67
+ }, {
68
+ currentPage: currentPage,
69
+ });
70
+ }
28
71
  maintainFocusOnNumberChange(el) {
29
72
  window.requestAnimationFrame(() => {
30
73
  switch (el) {
@@ -73,7 +116,7 @@ export class Pagination {
73
116
  updatePageDisplayed(pageNum) {
74
117
  this.value = pageNum;
75
118
  this.wmPaginationPageClicked.emit();
76
- this.srAnnouncement = `Current page, ${this.currentPage}. ${this.getCurrentPagesInView()}`;
119
+ this.srAnnouncement = `${this.currentPageAnnouncement(this.currentPage)} ${this.getCurrentPagesInView()}`;
77
120
  }
78
121
  displayShortPagination() {
79
122
  let pages = [];
@@ -97,7 +140,7 @@ export class Pagination {
97
140
  this.currentPage = pageNum;
98
141
  this.updatePageDisplayed(pageNum);
99
142
  this.maintainFocusOnNumberChange("page");
100
- }, value: pageNum, "aria-label": this.currentPage !== pageNum ? `Go to page ${pageNum}` : "", "aria-current": this.currentPage === pageNum ? "page" : undefined }, pageNum));
143
+ }, value: pageNum, "aria-label": this.currentPage !== pageNum ? this.pageButtonLabel(pageNum) : "", "aria-current": this.currentPage === pageNum ? "page" : undefined }, pageNum));
101
144
  }
102
145
  displayEllipsis() {
103
146
  return h("span", { class: "ellipsis" }, "...");
@@ -116,42 +159,51 @@ export class Pagination {
116
159
  if (end > this.totalItems) {
117
160
  end = this.totalItems;
118
161
  }
119
- return "Viewing " + (begin === end ? `${begin}` : `${begin}–${end} of ${this.totalItems}`);
162
+ return intl.formatMessage({
163
+ id: "pagination.pagesInView",
164
+ defaultMessage: "Viewing {atEnd, select, true {{itemStart}} other {{itemStart}-{itemEnd} of {totalItems}}}",
165
+ description: "Text indicating the range of items displayed in a list, and the total amount of items the list contains",
166
+ }, {
167
+ atEnd: begin === end,
168
+ itemStart: begin,
169
+ itemEnd: end,
170
+ totalItems: this.totalItems,
171
+ });
120
172
  }
121
173
  renderLarge() {
122
174
  return (h("div", { class: "largescreen" }, h("div", { class: "pageview" }, this.getCurrentPagesInView()), h("div", { class: "pagebtncontainer" }, h("button", { id: "previous", class: "paginationbtn previousbtn", onClick: () => {
123
175
  this.currentPage = this.currentPage - 1;
124
176
  this.updatePageDisplayed(this.currentPage);
125
177
  this.maintainFocusOnNumberChange("previous");
126
- }, disabled: this.currentPage === 1, "aria-label": "Go to previous page", "aria-controls": "status" }, "Previous"), this.totalPages < 6 ? this.displayShortPagination() : this.displayLongPagination(), h("button", { id: "next", class: "paginationbtn nextbtn", onClick: () => {
178
+ }, disabled: this.currentPage === 1, "aria-label": this.previousPageButtonLabel, "aria-controls": "status" }, globalMessages.previous), this.totalPages < 6 ? this.displayShortPagination() : this.displayLongPagination(), h("button", { id: "next", class: "paginationbtn nextbtn", onClick: () => {
127
179
  this.currentPage = this.currentPage + 1;
128
180
  this.updatePageDisplayed(this.currentPage);
129
181
  this.maintainFocusOnNumberChange("next");
130
- }, disabled: this.currentPage === this.totalPages, "aria-label": "Go to next page", "aria-controls": "status" }, "Next"))));
182
+ }, disabled: this.currentPage === this.totalPages, "aria-label": this.nextPageButtonLabel, "aria-controls": "status" }, globalMessages.next))));
131
183
  }
132
184
  renderSmall() {
133
185
  return (h("div", { class: "smallscreen" }, h("div", { class: "pagebtncontainer" }, h("button", { id: "wm-1-arw", class: "paginationbtn", onClick: () => {
134
186
  this.currentPage = 1;
135
187
  this.updatePageDisplayed(1);
136
188
  this.maintainFocusOnNumberChange("prev-arrow");
137
- }, value: 1, "aria-current": this.currentPage === 1 ? "page" : undefined, "aria-label": `Go to page 1`, "aria-controls": "status", disabled: this.currentPage === 1 }, h("svg", { width: "16", height: "12", xmlns: "http://www.w3.org/2000/svg" }, h("path", { d: "M7.41 10.59L2.83 6l4.58-4.59L6 0 0 6l6 6zM15.41 10.59L10.83 6l4.58-4.59L14 0 8 6l6 6z" }))), h("button", { id: "previous-arw", class: "paginationbtn previousbtn", onClick: () => {
189
+ }, value: 1, "aria-current": this.currentPage === 1 ? "page" : undefined, "aria-label": this.pageButtonLabel(1), "aria-controls": "status", disabled: this.currentPage === 1 }, h("svg", { width: "16", height: "12", xmlns: "http://www.w3.org/2000/svg" }, h("path", { d: "M7.41 10.59L2.83 6l4.58-4.59L6 0 0 6l6 6zM15.41 10.59L10.83 6l4.58-4.59L14 0 8 6l6 6z" }))), h("button", { id: "previous-arw", class: "paginationbtn previousbtn", onClick: () => {
138
190
  this.currentPage -= 1;
139
191
  this.updatePageDisplayed(this.currentPage);
140
192
  this.maintainFocusOnNumberChange("prev-arrow");
141
- }, disabled: this.currentPage === 1, "aria-label": "Go to previous page" }, h("svg", { width: "8", height: "12", xmlns: "http://www.w3.org/2000/svg" }, h("path", { d: "M7.41 10.59L2.83 6l4.58-4.59L6 0 0 6l6 6z" }))), "Page ", this.currentPage, " of ", this.totalPages, h("button", { id: "next-arw", class: "paginationbtn nextbtn", onClick: () => {
193
+ }, disabled: this.currentPage === 1, "aria-label": this.previousPageButtonLabel }, h("svg", { width: "8", height: "12", xmlns: "http://www.w3.org/2000/svg" }, h("path", { d: "M7.41 10.59L2.83 6l4.58-4.59L6 0 0 6l6 6z" }))), "Page ", this.currentPage, " of ", this.totalPages, h("button", { id: "next-arw", class: "paginationbtn nextbtn", onClick: () => {
142
194
  this.currentPage += 1;
143
195
  this.updatePageDisplayed(this.currentPage);
144
196
  this.maintainFocusOnNumberChange("next-arrow");
145
- }, disabled: this.currentPage === this.totalPages, "aria-label": "Go to next page" }, h("svg", { width: "8", height: "12", xmlns: "http://www.w3.org/2000/svg" }, h("path", { d: "M.59 10.59L5.17 6 .59 1.41 2 0l6 6-6 6z" }))), h("button", { id: `wm-${this.totalPages}-arw`, class: "paginationbtn", onClick: () => {
197
+ }, disabled: this.currentPage === this.totalPages, "aria-label": this.nextPageButtonLabel }, h("svg", { width: "8", height: "12", xmlns: "http://www.w3.org/2000/svg" }, h("path", { d: "M.59 10.59L5.17 6 .59 1.41 2 0l6 6-6 6z" }))), h("button", { id: `wm-${this.totalPages}-arw`, class: "paginationbtn", onClick: () => {
146
198
  this.currentPage = this.totalPages;
147
199
  this.updatePageDisplayed(this.totalPages);
148
200
  this.maintainFocusOnNumberChange("next-arrow");
149
- }, value: this.totalPages, "aria-current": this.currentPage === this.totalPages ? "page" : undefined, "aria-label": `Go to last page, page ${this.totalPages}`, "aria-controls": "status", disabled: this.currentPage === this.totalPages }, h("svg", { width: "17", height: "12", xmlns: "http://www.w3.org/2000/svg" }, h("path", { d: "M.59 10.59L5.17 6 .59 1.41 2 0l6 6-6 6zM9.59 10.59L14.17 6 9.59 1.41 11 0l6 6-6 6z" }))))));
201
+ }, value: this.totalPages, "aria-current": this.currentPage === this.totalPages ? "page" : undefined, "aria-label": this.lastPageButtonLabel(this.totalPages), "aria-controls": "status", disabled: this.currentPage === this.totalPages }, h("svg", { width: "17", height: "12", xmlns: "http://www.w3.org/2000/svg" }, h("path", { d: "M.59 10.59L5.17 6 .59 1.41 2 0l6 6-6 6zM9.59 10.59L14.17 6 9.59 1.41 11 0l6 6-6 6z" }))))));
150
202
  }
151
203
  render() {
152
204
  return (
153
205
  // do not render the component if there's only one page
154
- this.totalItems > this.itemsPerPage && (h("nav", { key: '4a9b64a4bbfa5da2d26b64c639054985826fc968', "aria-label": `Pagination Navigation. ${this.getCurrentPagesInView()}. Current page, ${this.currentPage}.` }, this.isLargeSize ? this.renderLarge() : this.renderSmall(), h("div", { key: '98de85ef66a0861f2f1997c7881b17f0a50509b9', id: "status", class: "sr-only", "aria-live": "polite", "aria-relevant": "text", "aria-atomic": "true" }, this.srAnnouncement))));
206
+ this.totalItems > this.itemsPerPage && (h("nav", { "aria-label": `${this.navigationLabel} ${this.getCurrentPagesInView()}. ${this.currentPageAnnouncement(this.currentPage)}` }, this.isLargeSize ? this.renderLarge() : this.renderSmall(), h("div", { id: "status", class: "sr-only", "aria-live": "polite", "aria-relevant": "text", "aria-atomic": "true" }, this.srAnnouncement))));
155
207
  }
156
208
  static get is() { return "wm-pagination"; }
157
209
  static get encapsulation() { return "shadow"; }
@@ -0,0 +1,76 @@
1
+ import { newE2EPage } from "@stencil/core/testing";
2
+ import { AxePuppeteer } from "@axe-core/puppeteer";
3
+ describe("wm-search", () => {
4
+ let page;
5
+ beforeEach(async () => {
6
+ page = await newE2EPage();
7
+ });
8
+ it("passes Axe checks", async () => {
9
+ await page.setContent(`<html lang='en'><head><title>Page</title></head><body><main><h1>Title</h1>
10
+ <wm-search label="example" placeholder="search here"></wm-search>
11
+ </main></body></html>`);
12
+ const results = await new AxePuppeteer(page).analyze();
13
+ expect(results.violations.length).toBe(0);
14
+ });
15
+ it("delegates focus", async () => {
16
+ await page.setContent(`<wm-search label="example" placeholder="search here">click here</wm-search>`);
17
+ const wmSearch = await page.find("wm-search");
18
+ wmSearch.focus();
19
+ let activeEl = await page.evaluate(async () => {
20
+ let el = await document.activeElement.shadowRoot.activeElement;
21
+ return el.nodeName;
22
+ });
23
+ expect(activeEl).toBe("INPUT");
24
+ });
25
+ it("updates the aria-live region with the number of results in the basic type", async () => {
26
+ page = await newE2EPage();
27
+ await page.setContent(`<wm-search label="example" search-type="basic" placeholder="search here">click here</wm-search>`);
28
+ await page.waitForChanges();
29
+ let component = await page.find("wm-search");
30
+ let input = await page.find("wm-search >>> input");
31
+ let liveRegion = await page.find("wm-search >>> #wm-search-live");
32
+ expect(liveRegion.textContent).toEqual("");
33
+ await input.type("a");
34
+ await page.waitForChanges();
35
+ component.setProperty("numResults", 3);
36
+ await page.waitForChanges();
37
+ expect(liveRegion.textContent).toEqual("3 results found");
38
+ await input.type("b");
39
+ await page.waitForChanges();
40
+ component.setProperty("numResults", 2);
41
+ await page.waitForChanges();
42
+ expect(liveRegion.textContent).toEqual("2 results found");
43
+ await input.type("c");
44
+ await page.waitForChanges();
45
+ component.setProperty("numResults", 0);
46
+ await page.waitForChanges();
47
+ expect(liveRegion.textContent).toEqual("No results found");
48
+ });
49
+ it("updates the aria-live region with the number of results and the name of the corresponding item in the find type", async () => {
50
+ page = await newE2EPage();
51
+ await page.setContent(`<wm-search label="example" search-type="find" placeholder="search here">click here</wm-search>`);
52
+ await page.waitForChanges();
53
+ let component = await page.find("wm-search");
54
+ let input = await page.find("wm-search >>> input");
55
+ let liveRegion = await page.find("wm-search >>> #wm-search-live");
56
+ expect(liveRegion.textContent).toEqual("");
57
+ await input.type("a");
58
+ await page.waitForChanges();
59
+ component.setProperty("numResults", 3);
60
+ component.setProperty("highlightedName", "a");
61
+ await page.waitForChanges();
62
+ expect(liveRegion.textContent).toEqual("1 of 3 results, a");
63
+ await input.type("b");
64
+ await page.waitForChanges();
65
+ component.setProperty("numResults", 2);
66
+ component.setProperty("highlightedName", "b");
67
+ await page.waitForChanges();
68
+ expect(liveRegion.textContent).toEqual("1 of 2 results, b");
69
+ await input.type("c");
70
+ await page.waitForChanges();
71
+ component.setProperty("numResults", 0);
72
+ component.setProperty("highlightedName", "");
73
+ await page.waitForChanges();
74
+ expect(liveRegion.textContent).toEqual("No results found");
75
+ });
76
+ });
@@ -166,10 +166,10 @@ export class Search {
166
166
  * End search and find render helpers
167
167
  */
168
168
  render() {
169
- return (h(Host, { key: '1ffec56e18aeda2b15741dd86adb2a0d2d131dfc' }, h("div", { key: '1253a6ac6923653d7bc5daceb3fa83f3eb3f45ea', id: "wm-search-wrapper", class: `wm-search-wrapper ${this.searchType}` }, h("input", { key: '20d3c4520fdf0fc511f7e2b7866e4089a4a58a71', disabled: this.isDisabled, id: "wm-search-input", placeholder: this.placeholder, "aria-label": `${this.label ? this.label + ". " : ""}${intl.formatMessage({
169
+ return (h(Host, null, h("div", { id: "wm-search-wrapper", class: `wm-search-wrapper ${this.searchType}` }, h("input", { disabled: this.isDisabled, id: "wm-search-input", placeholder: this.placeholder, "aria-label": `${this.label ? this.label + ". " : ""}${intl.formatMessage({
170
170
  id: "search.typeToFilterResults",
171
171
  defaultMessage: "Type to filter the results",
172
- })}`, onInput: (ev) => this.updateValue(ev.target.value), onBlur: () => this.handleBlur(), "aria-autocomplete": "none", autocomplete: "off", value: this.value }), h("span", { key: '410a1c3e881bbdf76f9b8c3a6aaf3064e200c776', class: "svg-icon svg-search" }), this.searchType === "find" && this.renderResultsAndBrowseButtons(), h("div", { key: '51a68b524397adab5278394479a5059708629f2c', id: "wm-search-live", class: "sr-only", "aria-live": "polite", "aria-atomic": "true", ref: (el) => (this.resultsLiveRegion = el) }, this.announcement)), this.searchType === "find" && this.renderJumpToLink()));
172
+ })}`, onInput: (ev) => this.updateValue(ev.target.value), onBlur: () => this.handleBlur(), "aria-autocomplete": "none", autocomplete: "off", value: this.value }), h("span", { class: "svg-icon svg-search" }), this.searchType === "find" && this.renderResultsAndBrowseButtons(), h("div", { id: "wm-search-live", class: "sr-only", "aria-live": "polite", "aria-atomic": "true", ref: (el) => (this.resultsLiveRegion = el) }, this.announcement)), this.searchType === "find" && this.renderJumpToLink()));
173
173
  }
174
174
  static get is() { return "wm-search"; }
175
175
  static get encapsulation() { return "shadow"; }
@@ -380,9 +380,8 @@ export class Search {
380
380
  "complexType": {
381
381
  "signature": "(value: string) => Promise<void>",
382
382
  "parameters": [{
383
- "name": "value",
384
- "type": "string",
385
- "docs": ""
383
+ "tags": [],
384
+ "text": ""
386
385
  }],
387
386
  "references": {
388
387
  "Promise": {
@@ -0,0 +1,71 @@
1
+ import { Search } from "./wm-search";
2
+ import { newSpecPage } from "@stencil/core/testing";
3
+ console.error = jest.fn();
4
+ describe("wm-search", () => {
5
+ let page;
6
+ beforeEach(async () => {
7
+ jest.clearAllMocks();
8
+ page = await newSpecPage({
9
+ components: [Search],
10
+ html: `<wm-search></wm-search>`,
11
+ });
12
+ jest
13
+ .spyOn(window, "requestAnimationFrame")
14
+ // @ts-ignore
15
+ .mockImplementation((cb) => cb());
16
+ });
17
+ it("renders", () => {
18
+ expect(new Search()).toBeTruthy();
19
+ expect(page.root).toMatchSnapshot();
20
+ });
21
+ it("has the right props", () => {
22
+ const search = new Search();
23
+ expect(search).toHaveProperty("placeholder");
24
+ expect(search).toHaveProperty("label");
25
+ expect(search).toHaveProperty("numResults");
26
+ expect(search).toHaveProperty("highlightedId");
27
+ expect(search).toHaveProperty("highlightedName");
28
+ expect(search).toHaveProperty("searchType");
29
+ });
30
+ it("should render an input element", async () => {
31
+ const input = page.root.shadowRoot.querySelector("input");
32
+ expect(input).toBeTruthy();
33
+ });
34
+ it("renders an aria-live region", () => {
35
+ const liveRegion = page.root.shadowRoot.querySelector("[aria-live='polite']");
36
+ expect(liveRegion).toBeTruthy();
37
+ });
38
+ it("throws an error if required props aren't passed", async () => {
39
+ expect(console.error).toHaveBeenCalledTimes(2);
40
+ });
41
+ it("should be the basic type by default", () => {
42
+ const search = new Search();
43
+ expect(search.searchType).toEqual("basic");
44
+ });
45
+ it("renders two buttons when the searchType property is set to find", async () => {
46
+ page.rootInstance.searchType = "find";
47
+ await page.waitForChanges();
48
+ const buttons = page.root.shadowRoot.querySelectorAll("wm-button");
49
+ expect(buttons.length).toEqual(2);
50
+ });
51
+ it("sets the input's placeholder attribute in sentence case according to the placeholder prop", async () => {
52
+ page = await newSpecPage({
53
+ components: [Search],
54
+ html: `<wm-search placeholder="Placeholder value"></wm-search>`,
55
+ });
56
+ const input = page.root.shadowRoot.querySelector("input");
57
+ expect(input).toEqualAttribute("placeholder", "Placeholder value");
58
+ });
59
+ it("sets the input's aria-label attribute according to the label prop", async () => {
60
+ page.rootInstance.label = "Label value";
61
+ await page.waitForChanges();
62
+ const input = page.root.shadowRoot.querySelector("input");
63
+ expect(input).toEqualAttribute("aria-label", "Label value. Type to filter the results");
64
+ });
65
+ it("sets the component's value property according to the input's value", async () => {
66
+ //Check input rather than just call the method???
67
+ await page.root.updateValue("hello");
68
+ await page.waitForChanges();
69
+ expect(page.rootInstance.value).toEqual("hello");
70
+ });
71
+ });