@watermarkinsights/ripple 5.11.1-0 → 5.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (347) hide show
  1. package/dist/cjs/{chartFunctions-e7034702.js → chartFunctions-0436714f.js} +3 -3
  2. package/dist/cjs/{functions-5ac8a62f.js → functions-e24249e6.js} +7 -104
  3. package/dist/{esm/app-globals-25b55d38.js → cjs/global-650a6fe6.js} +2 -7
  4. package/dist/cjs/index-e86c28b6.js +2649 -0
  5. package/dist/cjs/{intl-07aaf53c.js → intl-a70cf8c2.js} +1 -1
  6. package/dist/cjs/loader.cjs.js +3 -4
  7. package/dist/cjs/priv-calendar.cjs.entry.js +5 -6
  8. package/dist/cjs/priv-chart-popover.cjs.entry.js +5 -6
  9. package/dist/cjs/priv-navigator-button.cjs.entry.js +3 -4
  10. package/dist/cjs/priv-navigator-item.cjs.entry.js +3 -4
  11. package/dist/cjs/priv-option-list.cjs.entry.js +4 -5
  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 +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 +10 -13
  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 +7 -8
  28. package/dist/cjs/wm-optgroup.cjs.entry.js +4 -5
  29. package/dist/cjs/wm-option_2.cjs.entry.js +8 -10
  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.js +5 -7
  67. package/dist/collection/components/selects/wm-nested-select/wm-nested-select.js +3 -3
  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 +2 -2
  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.js +1 -1
  92. package/dist/collection/components/wm-modal/wm-modal-footer.spec.js +11 -0
  93. package/dist/collection/components/wm-modal/wm-modal-header.js +1 -1
  94. package/dist/collection/components/wm-modal/wm-modal-header.spec.js +8 -0
  95. package/dist/collection/components/wm-modal/wm-modal.e2e.js +104 -0
  96. package/dist/collection/components/wm-modal/wm-modal.js +2 -2
  97. package/dist/collection/components/wm-modal/wm-modal.spec.js +30 -0
  98. package/dist/collection/components/wm-modal-pss/wm-modal-pss-footer.js +1 -1
  99. package/dist/collection/components/wm-modal-pss/wm-modal-pss-header.js +1 -1
  100. package/dist/collection/components/wm-modal-pss/wm-modal-pss.js +2 -2
  101. package/dist/collection/components/wm-navigation/wm-navigation-hamburger.js +1 -1
  102. package/dist/collection/components/wm-navigation/wm-navigation-item.js +1 -1
  103. package/dist/collection/components/wm-navigation/wm-navigation.e2e.js +102 -0
  104. package/dist/collection/components/wm-navigation/wm-navigation.js +2 -2
  105. package/dist/collection/components/wm-navigation/wm-navigation.spec.js +91 -0
  106. package/dist/collection/components/wm-navigator/priv-navigator-button/priv-navigator-button.e2e.js +50 -0
  107. package/dist/collection/components/wm-navigator/priv-navigator-button/priv-navigator-button.js +1 -1
  108. package/dist/collection/components/wm-navigator/priv-navigator-item/priv-navigator-item.js +1 -1
  109. package/dist/collection/components/wm-navigator/wm-navigator.e2e.js +209 -0
  110. package/dist/collection/components/wm-navigator/wm-navigator.spec.js +177 -0
  111. package/dist/collection/components/wm-pagination/wm-pagination.e2e.js +312 -0
  112. package/dist/collection/components/wm-pagination/wm-pagination.js +1 -1
  113. package/dist/collection/components/wm-search/wm-search.e2e.js +76 -0
  114. package/dist/collection/components/wm-search/wm-search.js +4 -5
  115. package/dist/collection/components/wm-search/wm-search.spec.js +71 -0
  116. package/dist/collection/components/wm-snackbar/wm-snackbar.e2e.js +112 -0
  117. package/dist/collection/components/wm-snackbar/wm-snackbar.js +2 -2
  118. package/dist/collection/components/wm-snackbar/wm-snackbar.spec.js +9 -0
  119. package/dist/collection/components/wm-tabs/wm-tab-item/wm-tab-item.js +1 -1
  120. package/dist/collection/components/wm-tabs/wm-tab-list/wm-tab-list.js +1 -1
  121. package/dist/collection/components/wm-tabs/wm-tab-panel/wm-tab-panel.js +1 -1
  122. package/dist/collection/components/wm-tabs/wm-tabs.e2e.js +91 -0
  123. package/dist/collection/components/wm-tabs/wm-tabs.spec.js +12 -0
  124. package/dist/collection/components/wm-tag-input/wm-tag-input.e2e.js +204 -0
  125. package/dist/collection/components/wm-tag-input/wm-tag-input.js +3 -3
  126. package/dist/collection/components/wm-tag-input/wm-tag-input.spec.js +195 -0
  127. package/dist/collection/components/wm-textarea/wm-textarea.e2e.js +41 -0
  128. package/dist/collection/components/wm-textarea/wm-textarea.js +1 -1
  129. package/dist/collection/components/wm-textarea/wm-textarea.spec.js +79 -0
  130. package/dist/collection/components/wm-timepicker/wm-timepicker.e2e.js +163 -0
  131. package/dist/collection/components/wm-timepicker/wm-timepicker.js +8 -11
  132. package/dist/collection/components/wm-timepicker/wm-timepicker.spec.js +147 -0
  133. package/dist/collection/components/wm-toggletip/wm-toggletip.e2e.js +69 -0
  134. package/dist/collection/components/wm-toggletip/wm-toggletip.js +2 -2
  135. package/dist/collection/components/wm-toggletip/wm-toggletip.spec.js +21 -0
  136. package/dist/collection/components/wm-uploader/wm-uploader.e2e.js +70 -0
  137. package/dist/collection/components/wm-uploader/wm-uploader.js +2 -2
  138. package/dist/collection/components/wm-uploader/wm-uploader.spec.js +234 -0
  139. package/dist/collection/global/functions.spec.js +126 -0
  140. package/dist/collection/lang/lang.spec.js +20 -0
  141. package/dist/esm/{chartFunctions-c47231d2.js → chartFunctions-37511f93.js} +3 -3
  142. package/dist/esm/{functions-f39e6177.js → functions-8800c690.js} +8 -105
  143. package/dist/{cjs/app-globals-9c466f56.js → esm/global-1e5a92fa.js} +1 -10
  144. package/dist/esm/index-558b5a82.js +2618 -0
  145. package/dist/esm/{intl-a0ebf99e.js → intl-cf443c87.js} +1 -1
  146. package/dist/esm/loader.js +4 -5
  147. package/dist/esm/priv-calendar.entry.js +5 -6
  148. package/dist/esm/priv-chart-popover.entry.js +5 -6
  149. package/dist/esm/priv-navigator-button.entry.js +3 -4
  150. package/dist/esm/priv-navigator-item.entry.js +3 -4
  151. package/dist/esm/priv-option-list.entry.js +4 -5
  152. package/dist/esm/ripple.js +12 -13
  153. package/dist/esm/wm-action-menu_2.entry.js +6 -8
  154. package/dist/esm/wm-button.entry.js +4 -5
  155. package/dist/esm/wm-chart-slice.entry.js +1 -1
  156. package/dist/esm/wm-chart.entry.js +6 -7
  157. package/dist/esm/wm-date-range.entry.js +8 -9
  158. package/dist/esm/wm-datepicker.entry.js +8 -9
  159. package/dist/esm/wm-file-list.entry.js +3 -4
  160. package/dist/esm/wm-file.entry.js +4 -5
  161. package/dist/esm/wm-input.entry.js +5 -6
  162. package/dist/esm/wm-line-chart.entry.js +14 -15
  163. package/dist/esm/wm-modal-pss_3.entry.js +10 -13
  164. package/dist/esm/wm-modal_3.entry.js +10 -13
  165. package/dist/esm/wm-navigation_3.entry.js +10 -13
  166. package/dist/esm/wm-navigator.entry.js +3 -4
  167. package/dist/esm/wm-nested-select.entry.js +7 -8
  168. package/dist/esm/wm-optgroup.entry.js +4 -5
  169. package/dist/esm/wm-option_2.entry.js +8 -10
  170. package/dist/esm/wm-pagination.entry.js +4 -5
  171. package/dist/esm/wm-progress-indicator_3.entry.js +7 -9
  172. package/dist/esm/wm-search.entry.js +6 -7
  173. package/dist/esm/wm-snackbar.entry.js +6 -7
  174. package/dist/esm/wm-tab-item_3.entry.js +8 -11
  175. package/dist/esm/wm-tag-input.entry.js +7 -8
  176. package/dist/esm/wm-tag-option.entry.js +2 -2
  177. package/dist/esm/wm-textarea.entry.js +5 -6
  178. package/dist/esm/wm-timepicker.entry.js +5 -6
  179. package/dist/esm/wm-toggletip.entry.js +5 -6
  180. package/dist/esm/wm-uploader.entry.js +6 -7
  181. package/dist/esm/wm-wrapper.entry.js +1 -1
  182. package/dist/esm-es5/{chartFunctions-c47231d2.js → chartFunctions-37511f93.js} +1 -1
  183. package/dist/esm-es5/functions-8800c690.js +1 -0
  184. package/dist/esm-es5/global-1e5a92fa.js +1 -0
  185. package/dist/esm-es5/index-558b5a82.js +1 -0
  186. package/dist/esm-es5/{intl-a0ebf99e.js → intl-cf443c87.js} +1 -1
  187. package/dist/esm-es5/loader.js +1 -1
  188. package/dist/esm-es5/priv-calendar.entry.js +1 -1
  189. package/dist/esm-es5/priv-chart-popover.entry.js +1 -1
  190. package/dist/esm-es5/priv-navigator-button.entry.js +1 -1
  191. package/dist/esm-es5/priv-navigator-item.entry.js +1 -1
  192. package/dist/esm-es5/priv-option-list.entry.js +1 -1
  193. package/dist/esm-es5/ripple.js +1 -1
  194. package/dist/esm-es5/wm-action-menu_2.entry.js +1 -1
  195. package/dist/esm-es5/wm-button.entry.js +1 -1
  196. package/dist/esm-es5/wm-chart-slice.entry.js +1 -1
  197. package/dist/esm-es5/wm-chart.entry.js +1 -1
  198. package/dist/esm-es5/wm-date-range.entry.js +1 -1
  199. package/dist/esm-es5/wm-datepicker.entry.js +1 -1
  200. package/dist/esm-es5/wm-file-list.entry.js +1 -1
  201. package/dist/esm-es5/wm-file.entry.js +1 -1
  202. package/dist/esm-es5/wm-input.entry.js +1 -1
  203. package/dist/esm-es5/wm-line-chart.entry.js +1 -1
  204. package/dist/esm-es5/wm-modal-pss_3.entry.js +1 -1
  205. package/dist/esm-es5/wm-modal_3.entry.js +1 -1
  206. package/dist/esm-es5/wm-navigation_3.entry.js +1 -1
  207. package/dist/esm-es5/wm-navigator.entry.js +1 -1
  208. package/dist/esm-es5/wm-nested-select.entry.js +1 -1
  209. package/dist/esm-es5/wm-optgroup.entry.js +1 -1
  210. package/dist/esm-es5/wm-option_2.entry.js +1 -1
  211. package/dist/esm-es5/wm-pagination.entry.js +1 -1
  212. package/dist/esm-es5/wm-progress-indicator_3.entry.js +1 -1
  213. package/dist/esm-es5/wm-search.entry.js +1 -1
  214. package/dist/esm-es5/wm-snackbar.entry.js +1 -1
  215. package/dist/esm-es5/wm-tab-item_3.entry.js +1 -1
  216. package/dist/esm-es5/wm-tag-input.entry.js +1 -1
  217. package/dist/esm-es5/wm-tag-option.entry.js +1 -1
  218. package/dist/esm-es5/wm-textarea.entry.js +1 -1
  219. package/dist/esm-es5/wm-timepicker.entry.js +1 -1
  220. package/dist/esm-es5/wm-toggletip.entry.js +1 -1
  221. package/dist/esm-es5/wm-uploader.entry.js +1 -1
  222. package/dist/esm-es5/wm-wrapper.entry.js +1 -1
  223. package/dist/loader/cdn.js +2 -1
  224. package/dist/loader/index.cjs.js +2 -1
  225. package/dist/loader/index.d.ts +0 -3
  226. package/dist/loader/index.es2017.js +2 -1
  227. package/dist/loader/index.js +2 -1
  228. package/dist/ripple/{p-bda9a663.system.entry.js → p-0ba2e506.system.entry.js} +1 -1
  229. package/dist/ripple/{p-0f09ccc6.system.entry.js → p-0e36d5b8.system.entry.js} +1 -1
  230. package/dist/ripple/{p-658f146a.system.entry.js → p-1a4b6b02.system.entry.js} +1 -1
  231. package/dist/ripple/{p-165b5d3d.system.entry.js → p-1a71d867.system.entry.js} +1 -1
  232. package/dist/ripple/{p-cef86e39.system.entry.js → p-1aea1ad2.system.entry.js} +1 -1
  233. package/dist/ripple/p-22cfff23.entry.js +1 -0
  234. package/dist/ripple/p-32507c13.system.entry.js +1 -0
  235. package/dist/ripple/{p-823d7b4e.system.entry.js → p-32bf3f5b.system.entry.js} +1 -1
  236. package/dist/ripple/{p-bb25b9af.system.js → p-3322823d.system.js} +1 -1
  237. package/dist/ripple/p-39e26322.entry.js +1 -0
  238. package/dist/ripple/{p-23bcc6d4.system.entry.js → p-3f40f06b.system.entry.js} +1 -1
  239. package/dist/ripple/p-3fa38234.entry.js +1 -0
  240. package/dist/ripple/p-44f426ad.entry.js +1 -0
  241. package/dist/ripple/{p-391d9f32.system.entry.js → p-460e9ef3.system.entry.js} +1 -1
  242. package/dist/ripple/{p-c34c9cbb.system.entry.js → p-4743176d.system.entry.js} +1 -1
  243. package/dist/ripple/{p-13b1d775.entry.js → p-48e09589.entry.js} +1 -1
  244. package/dist/ripple/{p-4f8a0222.system.js → p-49c23d69.system.js} +1 -1
  245. package/dist/ripple/p-4de728e1.entry.js +1 -0
  246. package/dist/ripple/p-4ff87702.system.entry.js +1 -0
  247. package/dist/ripple/p-50bcde40.js +1 -0
  248. package/dist/ripple/{p-f84d0c39.entry.js → p-544925c2.entry.js} +1 -1
  249. package/dist/ripple/p-568c595f.js +2 -0
  250. package/dist/ripple/{p-bee47080.system.entry.js → p-58668e84.system.entry.js} +1 -1
  251. package/dist/ripple/{p-83d1c1fb.entry.js → p-59bb36fc.entry.js} +1 -1
  252. package/dist/ripple/p-5e9c9f0d.entry.js +1 -0
  253. package/dist/ripple/{p-39dd3870.system.entry.js → p-608f69c1.system.entry.js} +1 -1
  254. package/dist/ripple/{p-043901ab.system.entry.js → p-65d26233.system.entry.js} +1 -1
  255. package/dist/ripple/{p-5c25870c.entry.js → p-68e04222.entry.js} +1 -1
  256. package/dist/ripple/p-6e72a06c.entry.js +1 -0
  257. package/dist/ripple/{p-5c62e26d.entry.js → p-702252ba.entry.js} +1 -1
  258. package/dist/ripple/{p-a40296fc.system.entry.js → p-704be1e8.system.entry.js} +1 -1
  259. package/dist/ripple/{p-9708c995.js → p-710c6115.js} +1 -1
  260. package/dist/ripple/{p-42596f25.entry.js → p-7478303e.entry.js} +1 -1
  261. package/dist/ripple/p-79043436.entry.js +1 -0
  262. package/dist/ripple/p-797d65b7.entry.js +1 -0
  263. package/dist/ripple/{p-fc170968.system.entry.js → p-79d4f14b.system.entry.js} +1 -1
  264. package/dist/ripple/{p-59e50ea1.system.entry.js → p-7e0fc193.system.entry.js} +1 -1
  265. package/dist/ripple/{p-8efe89f3.system.entry.js → p-84e7a8df.system.entry.js} +1 -1
  266. package/dist/ripple/{p-d0736520.system.entry.js → p-878fd4af.system.entry.js} +1 -1
  267. package/dist/ripple/{p-cd0cc88d.entry.js → p-88ebddd7.entry.js} +1 -1
  268. package/dist/ripple/p-8cd8f784.entry.js +1 -0
  269. package/dist/ripple/p-8d72d140.entry.js +1 -0
  270. package/dist/ripple/p-94495341.entry.js +1 -0
  271. package/dist/ripple/p-94717864.entry.js +1 -0
  272. package/dist/ripple/{p-0ed1e17e.entry.js → p-9d461de5.entry.js} +1 -1
  273. package/dist/ripple/p-9eaa0acb.system.entry.js +1 -0
  274. package/dist/ripple/{p-3376581a.system.entry.js → p-a04ef164.system.entry.js} +1 -1
  275. package/dist/ripple/{p-d1751f87.system.entry.js → p-a2936bcb.system.entry.js} +1 -1
  276. package/dist/ripple/p-a30e2948.entry.js +1 -0
  277. package/dist/ripple/p-a69425b0.entry.js +1 -0
  278. package/dist/ripple/p-ab8d78cc.system.js +2 -0
  279. package/dist/ripple/p-adc254e6.entry.js +1 -0
  280. package/dist/ripple/p-b02048a9.entry.js +1 -0
  281. package/dist/ripple/p-b2706394.entry.js +1 -0
  282. package/dist/ripple/{p-3bde67f1.system.entry.js → p-b5971475.system.entry.js} +1 -1
  283. package/dist/ripple/{p-8240dd82.system.entry.js → p-b5c371aa.system.entry.js} +1 -1
  284. package/dist/ripple/{p-76d248e6.entry.js → p-b976c84b.entry.js} +1 -1
  285. package/dist/ripple/{p-3ec9a2a2.system.entry.js → p-bd547650.system.entry.js} +1 -1
  286. package/dist/ripple/{p-0c7cf863.system.entry.js → p-bfc1065f.system.entry.js} +1 -1
  287. package/dist/ripple/{p-62a99b68.entry.js → p-c2b5d9e5.entry.js} +1 -1
  288. package/dist/ripple/p-c3fa1588.system.js +1 -0
  289. package/dist/ripple/p-c4e329e9.entry.js +1 -0
  290. package/dist/ripple/{p-72e05203.system.entry.js → p-c7e30eb0.system.entry.js} +1 -1
  291. package/dist/ripple/{p-f75688c2.system.entry.js → p-caec4f57.system.entry.js} +1 -1
  292. package/dist/ripple/{p-35c7696e.entry.js → p-ce44ba70.entry.js} +1 -1
  293. package/dist/ripple/{p-c62342c4.entry.js → p-d57e8196.entry.js} +1 -1
  294. package/dist/ripple/p-dc77d98a.entry.js +1 -0
  295. package/dist/ripple/{p-3c407959.system.entry.js → p-ddcbb694.system.entry.js} +1 -1
  296. package/dist/ripple/{p-35218430.system.entry.js → p-de272ae7.system.entry.js} +1 -1
  297. package/dist/ripple/{p-cca7a151.system.entry.js → p-e2c6052b.system.entry.js} +1 -1
  298. package/dist/ripple/{p-efd6ed42.js → p-e6f884a6.js} +1 -1
  299. package/dist/ripple/p-e844cbf3.entry.js +1 -0
  300. package/dist/ripple/p-eca78c2b.js +1 -0
  301. package/dist/ripple/p-edd87140.system.js +1 -0
  302. package/dist/ripple/p-efdad4ea.system.js +1 -0
  303. package/dist/ripple/{p-35644be9.system.entry.js → p-f22e26b6.system.entry.js} +1 -1
  304. package/dist/ripple/p-f5bc8926.entry.js +1 -0
  305. package/dist/ripple/{p-ead461fe.system.entry.js → p-f6eff655.system.entry.js} +1 -1
  306. package/dist/ripple/{p-22dda578.system.entry.js → p-f779ec68.system.entry.js} +1 -1
  307. package/dist/ripple/ripple.esm.js +1 -1
  308. package/dist/ripple/ripple.js +1 -1
  309. package/dist/types/stencil-public-runtime.d.ts +10 -3
  310. package/package.json +1 -1
  311. package/dist/cjs/index-788526f5.js +0 -1859
  312. package/dist/esm/index-130e07bb.js +0 -1828
  313. package/dist/esm-es5/app-globals-25b55d38.js +0 -1
  314. package/dist/esm-es5/functions-f39e6177.js +0 -1
  315. package/dist/esm-es5/index-130e07bb.js +0 -1
  316. package/dist/ripple/p-0f356c45.entry.js +0 -1
  317. package/dist/ripple/p-105e5721.system.entry.js +0 -1
  318. package/dist/ripple/p-152b20ae.entry.js +0 -1
  319. package/dist/ripple/p-2a30d411.system.entry.js +0 -1
  320. package/dist/ripple/p-32b88ab2.entry.js +0 -1
  321. package/dist/ripple/p-3d522bd6.system.js +0 -1
  322. package/dist/ripple/p-3f486eed.system.js +0 -1
  323. package/dist/ripple/p-4960d8ba.entry.js +0 -1
  324. package/dist/ripple/p-4b8cb0a4.entry.js +0 -1
  325. package/dist/ripple/p-558340c5.entry.js +0 -1
  326. package/dist/ripple/p-5d64281d.system.js +0 -1
  327. package/dist/ripple/p-5d8386b4.system.entry.js +0 -1
  328. package/dist/ripple/p-68a96191.entry.js +0 -1
  329. package/dist/ripple/p-6c0c2e1f.entry.js +0 -1
  330. package/dist/ripple/p-76542ab3.entry.js +0 -1
  331. package/dist/ripple/p-76f9acec.entry.js +0 -1
  332. package/dist/ripple/p-88bbb633.js +0 -1
  333. package/dist/ripple/p-89a2db02.js +0 -1
  334. package/dist/ripple/p-8d4f674f.entry.js +0 -1
  335. package/dist/ripple/p-8f5ac061.entry.js +0 -1
  336. package/dist/ripple/p-985fb8b9.entry.js +0 -1
  337. package/dist/ripple/p-aaaee14f.entry.js +0 -1
  338. package/dist/ripple/p-b4e7d63f.entry.js +0 -1
  339. package/dist/ripple/p-ba047c79.entry.js +0 -1
  340. package/dist/ripple/p-c5c31818.entry.js +0 -1
  341. package/dist/ripple/p-cef8a45b.system.js +0 -2
  342. package/dist/ripple/p-d528f5e4.entry.js +0 -1
  343. package/dist/ripple/p-d9da0502.js +0 -2
  344. package/dist/ripple/p-da424bdb.entry.js +0 -1
  345. package/dist/ripple/p-f39b556d.entry.js +0 -1
  346. package/dist/ripple/p-f98f9a32.entry.js +0 -1
  347. package/dist/ripple/p-f9a71cf6.entry.js +0 -1
@@ -0,0 +1,79 @@
1
+ import { newSpecPage } from "@stencil/core/testing";
2
+ import { Textarea } from "./wm-textarea";
3
+ // mock observers
4
+ // global.ResizeObserver = jest.fn().mockImplementation(() => ({
5
+ // observe: jest.fn(),
6
+ // unobserve: jest.fn(),
7
+ // disconnect: jest.fn(),
8
+ // }));
9
+ // global.MutationObserver = jest.fn().mockImplementation(() => ({
10
+ // observe: jest.fn(),
11
+ // unobserve: jest.fn(),
12
+ // disconnect: jest.fn(),
13
+ // }));
14
+ describe("textarea", () => {
15
+ let page;
16
+ let component;
17
+ beforeEach(async () => {
18
+ page = await newSpecPage({
19
+ components: [Textarea],
20
+ html: `<wm-textarea id="textarea" label="label"></wm-textarea>`,
21
+ });
22
+ component = page.root;
23
+ });
24
+ it("builds", async () => {
25
+ expect(page.root).toMatchSnapshot();
26
+ });
27
+ it("has right aria roles", async () => {
28
+ page = await newSpecPage({
29
+ components: [Textarea],
30
+ html: `<wm-textarea id="textarea" label="label" disabled required-field></wm-textarea>`,
31
+ });
32
+ const textarea = await page.root.shadowRoot.querySelector("textarea");
33
+ expect(textarea).toEqualAttribute("aria-describedby", "info error");
34
+ expect(textarea).toHaveAttribute("disabled");
35
+ const error = await page.root.shadowRoot.querySelector("#error");
36
+ expect(error).toEqualAttribute("aria-live", "assertive");
37
+ const livePolite = await page.root.shadowRoot.querySelector("#live-polite");
38
+ expect(livePolite).toEqualAttribute("aria-live", "polite");
39
+ });
40
+ it("sets initial value from textcontent", async () => {
41
+ page = await newSpecPage({
42
+ components: [Textarea],
43
+ html: `<wm-textarea id="textarea" label="label">Initial value</wm-textarea>`,
44
+ });
45
+ component = page.root;
46
+ expect(component.value).toBe("Initial value");
47
+ });
48
+ it("renders character limit", async () => {
49
+ page = await newSpecPage({
50
+ components: [Textarea],
51
+ html: `<wm-textarea id="textarea" label="label" character-limit="20">Hello</wm-textarea>`,
52
+ });
53
+ component = page.root;
54
+ const characterLimitArea = await page.root.shadowRoot.querySelector(".character-count");
55
+ expect(characterLimitArea.textContent).toBe("5/20");
56
+ });
57
+ it("properties override height and width", async () => {
58
+ page = await newSpecPage({
59
+ components: [Textarea],
60
+ html: `<wm-textarea id="textarea" label="label" input-width="200px" input-height="300px"></wm-textarea>`,
61
+ });
62
+ component = page.root;
63
+ const textarea = await component.shadowRoot.querySelector("textarea");
64
+ expect(textarea).toEqualAttribute("style", "height: 300px;");
65
+ const widthWrapper = await component.shadowRoot.querySelector(".inputfield-wrapper");
66
+ expect(widthWrapper).toEqualAttribute("style", "width: 200px;");
67
+ });
68
+ it("displays info and error-message properties", async () => {
69
+ page = await newSpecPage({
70
+ components: [Textarea],
71
+ html: `<wm-textarea id="textarea" label="label" info="example info text" error-message="example error text"></wm-textarea>`,
72
+ });
73
+ component = page.root;
74
+ const info = await component.shadowRoot.querySelector("#info");
75
+ expect(info.textContent).toBe("example info text");
76
+ const error = await component.shadowRoot.querySelector("#error");
77
+ expect(error.textContent).toBe("example error text");
78
+ });
79
+ });
@@ -0,0 +1,163 @@
1
+ import AxePuppeteer from "@axe-core/puppeteer";
2
+ import { newE2EPage } from "@stencil/core/testing";
3
+ describe("wm-timepicker", () => {
4
+ let page, input;
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-timepicker label="timepicker" dropdown-time="09:00"></wm-timepicker>
9
+ </main></body></html>`);
10
+ input = await page.find("wm-timepicker >>> input");
11
+ await page.waitForChanges();
12
+ });
13
+ it("passes Axe checks", async () => {
14
+ const results = await new AxePuppeteer(page).analyze();
15
+ expect(results.violations.length).toBe(0);
16
+ });
17
+ it("emits input blurred event", async () => {
18
+ page = await newE2EPage();
19
+ await page.setContent(`<html lang='en'><head><title>Page</title></head><body><main><h1>Title</h1>
20
+ <wm-timepicker label="timepicker"></wm-timepicker>
21
+ <div id="indicator">no event heard</div>
22
+ </main></body></html>`);
23
+ input = await page.find("wm-timepicker >>> input");
24
+ await page.waitForChanges();
25
+ await page.evaluate(async () => {
26
+ const indicator = document.querySelector("#indicator");
27
+ await document.addEventListener("wmTimepickerInputBlurred", () => (indicator.textContent = "event heard"));
28
+ });
29
+ await page.waitForChanges;
30
+ let indicator = await page.find("#indicator");
31
+ expect(indicator.textContent).toBe("no event heard");
32
+ await input.type("522");
33
+ await page.waitForChanges();
34
+ await page.keyboard.press("Tab");
35
+ await page.waitForChanges();
36
+ expect(indicator.textContent).toBe("event heard");
37
+ });
38
+ it("opens to preselected time", async () => {
39
+ page = await newE2EPage();
40
+ await page.setContent(`<html lang='en'><head><title>Page</title></head><body><main><h1>Title</h1>
41
+ <wm-timepicker label="timepicker" preselected="14:15"></wm-timepicker>
42
+ </main></body></html>`);
43
+ await page.waitForChanges();
44
+ await page.keyboard.press("Tab");
45
+ await page.waitForChanges();
46
+ await page.keyboard.press("Tab");
47
+ await page.waitForChanges();
48
+ await page.keyboard.press("Enter");
49
+ await page.waitForChanges();
50
+ const nineAm = await page.find("wm-timepicker >>> li#option58");
51
+ expect(nineAm).toEqualAttribute("tabindex", 0);
52
+ });
53
+ it("opens next option with down arrow key", async () => {
54
+ await page.keyboard.press("Tab");
55
+ await page.waitForChanges();
56
+ await page.keyboard.press("Tab");
57
+ await page.waitForChanges();
58
+ await page.keyboard.press("ArrowDown");
59
+ await page.waitForChanges();
60
+ const nineFifteenAm = await page.find("wm-timepicker >>> li#option38");
61
+ expect(nineFifteenAm).toEqualAttribute("tabindex", 0);
62
+ });
63
+ it("opens previous option with up arrow key", async () => {
64
+ await page.keyboard.press("Tab");
65
+ await page.waitForChanges();
66
+ await page.keyboard.press("Tab");
67
+ await page.waitForChanges();
68
+ await page.keyboard.press("ArrowUp");
69
+ await page.waitForChanges();
70
+ const eightFourtyFiveAm = await page.find("wm-timepicker >>> li#option36");
71
+ expect(eightFourtyFiveAm).toEqualAttribute("tabindex", 0);
72
+ });
73
+ it("navigates through the dropdown with keyboard", async () => {
74
+ await page.keyboard.press("Tab");
75
+ await page.waitForChanges();
76
+ await page.keyboard.press("Tab");
77
+ await page.waitForChanges();
78
+ await page.keyboard.press("Enter");
79
+ await page.waitForChanges();
80
+ const nineAm = await page.find("wm-timepicker >>> li#option37");
81
+ const nineFifteenAm = await page.find("wm-timepicker >>> li#option38");
82
+ await page.keyboard.press("ArrowDown");
83
+ await page.waitForChanges();
84
+ expect(nineFifteenAm).toEqualAttribute("tabindex", 0);
85
+ await page.keyboard.press("ArrowUp");
86
+ await page.waitForChanges();
87
+ expect(nineAm).toEqualAttribute("tabindex", 0);
88
+ });
89
+ it("emits timeSelected event with time", async () => {
90
+ page = await newE2EPage();
91
+ await page.setContent(`<html lang='en'><head><title>Page</title></head><body><main><h1>Title</h1>
92
+ <wm-timepicker label="timepicker" value="03:15 PM" preselected="15:15"></wm-timepicker>
93
+ <div id="indicator">no event heard</div>
94
+ </main></body></html>`);
95
+ input = await page.find("wm-timepicker >>> input");
96
+ await page.waitForChanges();
97
+ await page.evaluate(async () => {
98
+ const indicator = document.querySelector("#indicator");
99
+ await document.addEventListener("wmTimepickerTimeSelected", (ev) => (indicator.textContent = `event heard: ${ev.detail.time}`));
100
+ });
101
+ await page.waitForChanges;
102
+ let indicator = await page.find("#indicator");
103
+ expect(indicator.textContent).toBe("no event heard");
104
+ await page.keyboard.press("Tab");
105
+ await page.keyboard.press("Tab");
106
+ await page.keyboard.press("Enter");
107
+ await page.waitForChanges();
108
+ await page.keyboard.press("Enter");
109
+ await page.waitForChanges();
110
+ expect(indicator.textContent).toBe("event heard: 15:15");
111
+ });
112
+ it("closes dropdown on Escape and Tab", async () => {
113
+ const dropdown = await page.find("wm-timepicker >>> ul.options");
114
+ expect(dropdown).not.toHaveClass("open");
115
+ await page.keyboard.press("Tab");
116
+ await page.waitForChanges();
117
+ await page.keyboard.press("Tab");
118
+ await page.waitForChanges();
119
+ await page.keyboard.press("Enter");
120
+ await page.waitForChanges();
121
+ expect(dropdown).toHaveClass("open");
122
+ await page.keyboard.press("Escape");
123
+ await page.waitForChanges();
124
+ expect(dropdown).not.toHaveClass("open");
125
+ await page.waitForChanges();
126
+ await page.keyboard.press("Enter");
127
+ await page.waitForChanges();
128
+ expect(dropdown).toHaveClass("open");
129
+ await page.keyboard.press("Tab");
130
+ await page.waitForChanges();
131
+ expect(dropdown).not.toHaveClass("open");
132
+ });
133
+ it("closes dropdown when clicking outside component", async () => {
134
+ const dropdown = await page.find("wm-timepicker >>> ul.options");
135
+ expect(dropdown).not.toHaveClass("open");
136
+ await page.keyboard.press("Tab");
137
+ await page.waitForChanges();
138
+ await page.keyboard.press("Tab");
139
+ await page.waitForChanges();
140
+ await page.keyboard.press("Enter");
141
+ await page.waitForChanges();
142
+ expect(dropdown).toHaveClass("open");
143
+ await page.mouse.click(-10, -10);
144
+ await page.waitForChanges();
145
+ expect(dropdown).not.toHaveClass("open");
146
+ });
147
+ it("handles Home and End keys", async () => {
148
+ await page.keyboard.press("Tab");
149
+ await page.waitForChanges();
150
+ await page.keyboard.press("Tab");
151
+ await page.waitForChanges();
152
+ await page.keyboard.press("Enter");
153
+ await page.waitForChanges();
154
+ const firstOption = await page.find("wm-timepicker >>> li#option1");
155
+ await page.keyboard.press("Home");
156
+ await page.waitForChanges();
157
+ expect(firstOption).toEqualAttribute("tabindex", 0);
158
+ const lastOption = await page.find("wm-timepicker >>> li#option96");
159
+ await page.keyboard.press("End");
160
+ await page.waitForChanges();
161
+ expect(lastOption).toEqualAttribute("tabindex", 0);
162
+ });
163
+ });
@@ -275,13 +275,13 @@ export class Timepicker {
275
275
  return this.times.map((time, index) => (h("li", { id: `option${index + 1}`, "data-time": time, role: "option", onClick: () => this.handleOptionClick(time) }, this.reformatTimeInternal("12", time))));
276
276
  }
277
277
  render() {
278
- return (h(Host, { key: '6c9babdf2a8237a46321cc7fbb9185f23b6e73ee', onBlur: () => this.close(false) }, h("div", { key: '214da15a53ada6e5e1dbfb2d1d6bf73d9e0231b2', class: `wrapper label-${this.labelPosition} ${!!this.errorMessage ? "invalid" : ""}`, ref: (t) => (this.tpWrapper = t) }, h("div", { key: '3179f94028e1645d63b047e33efe756cd337ce17', class: "label-wrapper" }, this.labelPosition !== "none" && (h("label", { key: '9d490705cd32b26bf5de757e6fd5889473a7c4c4', id: "label", class: "label", htmlFor: "time-input" }, this.label, this.requiredField && (h("span", { key: '8e54d504e4ab76a03ef7a01cdf8e1fb161c37016', class: "required", "aria-hidden": "true" }, "*"))))), h("div", { key: '22b7b8c33679f6f7c194e9d3bc3c6794af4ddedd' }, h("div", { key: '4eb746fae7776b906053429059cec00c47ce31c4', class: "inner-wrapper" }, h("input", { key: '7f17b1dfedbf3d2f574247c0fa71b256ac094a79', id: "time-input", "aria-label": this.label, "aria-describedby": "error", ref: (el) => (this.inputEl = el), onBlur: () => this.handleInputBlur(), onInput: () => (this.value = this.inputEl.value), disabled: this.isDisabled, "aria-required": this.requiredField ? "true" : null, placeholder: this.timeFormat, autocomplete: "off", value: this.value, onFocus: () => this.tpWrapper.classList.add("focus") }), h("button", { key: '1c3f6a403417b9baa4e0f17644cac84d7d6ea1af', id: "btn", ref: (el) => (this.buttonEl = el), disabled: this.isDisabled, "aria-controls": "list", "aria-expanded": this.isExpanded ? "true" : "false", "aria-label": this.buttonAriaLabel, "aria-describedby": "time-input", onClick: () => (this.isExpanded ? this.close() : this.open()),
278
+ return (h(Host, { onBlur: () => this.close(false) }, h("div", { class: `wrapper label-${this.labelPosition} ${!!this.errorMessage ? "invalid" : ""}`, ref: (t) => (this.tpWrapper = t) }, h("div", { class: "label-wrapper" }, this.labelPosition !== "none" && (h("label", { id: "label", class: "label", htmlFor: "time-input" }, this.label, this.requiredField && (h("span", { class: "required", "aria-hidden": "true" }, "*"))))), h("div", null, h("div", { class: "inner-wrapper" }, h("input", { id: "time-input", "aria-label": this.label, "aria-describedby": "error", ref: (el) => (this.inputEl = el), onBlur: () => this.handleInputBlur(), onInput: () => (this.value = this.inputEl.value), disabled: this.isDisabled, "aria-required": this.requiredField ? "true" : null, placeholder: this.timeFormat, autocomplete: "off", value: this.value, onFocus: () => this.tpWrapper.classList.add("focus") }), h("button", { id: "btn", ref: (el) => (this.buttonEl = el), disabled: this.isDisabled, "aria-controls": "list", "aria-expanded": this.isExpanded ? "true" : "false", "aria-label": this.buttonAriaLabel, "aria-describedby": "time-input", onClick: () => (this.isExpanded ? this.close() : this.open()),
279
279
  // This addresses an issue in Safari, where clicking buttons does not focus them
280
280
  // if the button does not receive focus when clicked, Timepicker incorrectly emits a blur event
281
281
  onMouseDown: (ev) => {
282
282
  ev.preventDefault();
283
283
  this.buttonEl.focus();
284
- } }, h("span", { key: 'd679e16b6d81f07ecf96a76a5adac12ac41d75a0', class: "svg-icon svg-time" })), h("ul", { key: 'cc793abe39ce5de00299e8d03051424b43cd8bcc', class: `options ${this.isExpanded ? "open" : ""} ${this.openUp ? "upwards" : ""}`, id: "list", role: "listbox", "aria-labelledby": "label", "aria-describedby": this.isExpanded ? "collapsed" : null, tabindex: -1, ref: (el) => (this.optionsEl = el) }, this.renderOptions())), h("div", { key: '3a82aa292fe4d5bfa374d7bcdb8a22bf9f7b3e45', id: "error", class: "error" }, this.errorMessage)), h("div", { key: '11c037ef9b0e95bd6262a34cbdf86be79ef23beb', id: "live-polite", class: "sr-only", "aria-live": "polite", "aria-atomic": "true", ref: (el) => (this.liveRegionEl = el) }))));
284
+ } }, h("span", { class: "svg-icon svg-time" })), h("ul", { class: `options ${this.isExpanded ? "open" : ""} ${this.openUp ? "upwards" : ""}`, id: "list", role: "listbox", "aria-labelledby": "label", "aria-describedby": this.isExpanded ? "collapsed" : null, tabindex: -1, ref: (el) => (this.optionsEl = el) }, this.renderOptions())), h("div", { id: "error", class: "error" }, this.errorMessage)), h("div", { id: "live-polite", class: "sr-only", "aria-live": "polite", "aria-atomic": "true", ref: (el) => (this.liveRegionEl = el) }))));
285
285
  }
286
286
  static get is() { return "wm-timepicker"; }
287
287
  static get encapsulation() { return "shadow"; }
@@ -468,9 +468,8 @@ export class Timepicker {
468
468
  "complexType": {
469
469
  "signature": "(input: string) => Promise<boolean>",
470
470
  "parameters": [{
471
- "name": "input",
472
- "type": "string",
473
- "docs": ""
471
+ "tags": [],
472
+ "text": ""
474
473
  }],
475
474
  "references": {
476
475
  "Promise": {
@@ -489,13 +488,11 @@ export class Timepicker {
489
488
  "complexType": {
490
489
  "signature": "(format: \"12\" | \"24\", time: TimeFormat12 | TimeFormat24) => Promise<string>",
491
490
  "parameters": [{
492
- "name": "format",
493
- "type": "\"12\" | \"24\"",
494
- "docs": ""
491
+ "tags": [],
492
+ "text": ""
495
493
  }, {
496
- "name": "time",
497
- "type": "string",
498
- "docs": ""
494
+ "tags": [],
495
+ "text": ""
499
496
  }],
500
497
  "references": {
501
498
  "Promise": {
@@ -0,0 +1,147 @@
1
+ import { newSpecPage } from "@stencil/core/testing";
2
+ import { Timepicker } from "./wm-timepicker";
3
+ describe("timepicker", () => {
4
+ let page;
5
+ // let timepicker: any;
6
+ beforeEach(async () => {
7
+ page = await newSpecPage({
8
+ components: [Timepicker],
9
+ html: "<wm-timepicker label='timepicker'></wm-timepicker>",
10
+ });
11
+ });
12
+ it("builds", async () => {
13
+ expect(page.root).toMatchSnapshot();
14
+ });
15
+ it("prevents user actions when disabled", async () => {
16
+ await page.setContent(`<wm-timepicker label='timepicker' disabled></wm-timepicker>`);
17
+ const input = await page.root.shadowRoot.querySelector("input");
18
+ const button = await page.root.shadowRoot.querySelector("button");
19
+ expect(input).toHaveAttribute("disabled");
20
+ expect(button).toHaveAttribute("disabled");
21
+ });
22
+ it("validates input", async () => {
23
+ const timepicker = new Timepicker();
24
+ // user passes hour
25
+ expect(await timepicker.isValidTime("0")).toBe(true);
26
+ expect(await timepicker.isValidTime("24")).toBe(true);
27
+ expect(await timepicker.isValidTime("8p")).toBe(true);
28
+ expect(await timepicker.isValidTime("12 a")).toBe(true);
29
+ expect(await timepicker.isValidTime("02am")).toBe(true);
30
+ expect(await timepicker.isValidTime("8:")).toBe(true);
31
+ // user passes hour and minutes
32
+ expect(await timepicker.isValidTime("1223")).toBe(true);
33
+ expect(await timepicker.isValidTime("927a")).toBe(true);
34
+ expect(await timepicker.isValidTime("12:12pm")).toBe(true);
35
+ expect(await timepicker.isValidTime("3:45 am")).toBe(true);
36
+ // rejected
37
+ expect(await timepicker.isValidTime("6f")).toBe(false);
38
+ expect(await timepicker.isValidTime("12m")).toBe(false);
39
+ expect(await timepicker.isValidTime("a")).toBe(false);
40
+ expect(await timepicker.isValidTime("92")).toBe(false);
41
+ expect(await timepicker.isValidTime("88:88")).toBe(false);
42
+ expect(await timepicker.isValidTime("999pm")).toBe(false);
43
+ expect(await timepicker.isValidTime("o1236")).toBe(false);
44
+ expect(await timepicker.isValidTime("12:45fm")).toBe(false);
45
+ expect(await timepicker.isValidTime("12342")).toBe(false);
46
+ expect(await timepicker.isValidTime("123:")).toBe(false);
47
+ expect(await timepicker.isValidTime("3:123")).toBe(false);
48
+ expect(await timepicker.isValidTime("4:60 pm")).toBe(false);
49
+ // weird edge cases
50
+ expect(await timepicker.isValidTime("17am")).toBe(false);
51
+ expect(await timepicker.isValidTime("17pm")).toBe(false);
52
+ // this is not caught by the regex, so we handle it later
53
+ expect(await timepicker.isValidTime("0pm")).toBe(true);
54
+ });
55
+ it("reformats", async () => {
56
+ const timepicker = new Timepicker();
57
+ expect(await timepicker.reformatTime("12", "00:00")).toBe("12:00 AM");
58
+ //@ts-ignore
59
+ expect(await timepicker.reformatTime("12", "12:00am")).toBe("12:00 AM");
60
+ //@ts-ignore
61
+ expect(await timepicker.reformatTime("12", "12:00pm")).toBe("12:00 PM");
62
+ expect(await timepicker.reformatTime("12", "24:00")).toBe("12:00 AM");
63
+ expect(await timepicker.reformatTime("12", "17:00")).toBe("05:00 PM");
64
+ expect(await timepicker.reformatTime("12", "7:00 am")).toBe("07:00 AM");
65
+ expect(await timepicker.reformatTime("12", "7 : 35")).toBe("07:35 AM");
66
+ expect(await timepicker.reformatTime("24", "0:00")).toBe("00:00");
67
+ //@ts-ignore
68
+ expect(await timepicker.reformatTime("24", "12:00am")).toBe("00:00");
69
+ //@ts-ignore
70
+ expect(await timepicker.reformatTime("24", "12:00pm")).toBe("12:00");
71
+ expect(await timepicker.reformatTime("24", "24:00")).toBe("00:00");
72
+ //@ts-ignore
73
+ expect(await timepicker.reformatTime("24", "1700")).toBe("17:00");
74
+ //@ts-ignore
75
+ expect(await timepicker.reformatTime("24", "700a")).toBe("07:00");
76
+ expect(await timepicker.reformatTime("24", "7 :00 pm")).toBe("19:00");
77
+ expect(await timepicker.reformatTime("24", "17: 35")).toBe("17:35");
78
+ });
79
+ it("finds nearest time interval", async () => {
80
+ const timepicker = new Timepicker();
81
+ expect(await timepicker.findNearestTimeInterval("00:07")).toBe("00:00");
82
+ expect(await timepicker.findNearestTimeInterval("01:08")).toBe("01:15");
83
+ expect(await timepicker.findNearestTimeInterval("01:15")).toBe("01:15");
84
+ expect(await timepicker.findNearestTimeInterval("02:22")).toBe("02:15");
85
+ expect(await timepicker.findNearestTimeInterval("03:23")).toBe("03:30");
86
+ expect(await timepicker.findNearestTimeInterval("03:30")).toBe("03:30");
87
+ expect(await timepicker.findNearestTimeInterval("04:37")).toBe("04:30");
88
+ expect(await timepicker.findNearestTimeInterval("15:38")).toBe("15:45");
89
+ expect(await timepicker.findNearestTimeInterval("15:45")).toBe("15:45");
90
+ expect(await timepicker.findNearestTimeInterval("16:52")).toBe("16:45");
91
+ expect(await timepicker.findNearestTimeInterval("17:53")).toBe("18:00");
92
+ expect(await timepicker.findNearestTimeInterval("18:00")).toBe("18:00");
93
+ expect(await timepicker.findNearestTimeInterval("23:59")).toBe("00:00");
94
+ // edge case regarding leading zeroes
95
+ expect(await timepicker.findNearestTimeInterval("09:59")).toBe("10:00");
96
+ });
97
+ it("splits time", () => {
98
+ const timepicker = new Timepicker();
99
+ expect(timepicker.splitTime("5:37")).toStrictEqual([5, "37", undefined]);
100
+ expect(timepicker.splitTime("5:37 am")).toStrictEqual([5, "37", "am"]);
101
+ expect(timepicker.splitTime("09:00")).toStrictEqual([9, "00", undefined]);
102
+ expect(timepicker.splitTime("13:52")).toStrictEqual([13, "52", undefined]);
103
+ // edge case
104
+ //@ts-ignore
105
+ expect(timepicker.splitTime("0pm")).toStrictEqual([0, "00", "AM"]);
106
+ });
107
+ it("generates times", () => {
108
+ const timepicker = new Timepicker();
109
+ //prettier-ignore
110
+ expect(timepicker.generateTimeIntervals()).toStrictEqual([
111
+ "00:00", "00:15", "00:30", "00:45",
112
+ "01:00", "01:15", "01:30", "01:45",
113
+ "02:00", "02:15", "02:30", "02:45",
114
+ "03:00", "03:15", "03:30", "03:45",
115
+ "04:00", "04:15", "04:30", "04:45",
116
+ "05:00", "05:15", "05:30", "05:45",
117
+ "06:00", "06:15", "06:30", "06:45",
118
+ "07:00", "07:15", "07:30", "07:45",
119
+ "08:00", "08:15", "08:30", "08:45",
120
+ "09:00", "09:15", "09:30", "09:45",
121
+ "10:00", "10:15", "10:30", "10:45",
122
+ "11:00", "11:15", "11:30", "11:45",
123
+ "12:00", "12:15", "12:30", "12:45",
124
+ "13:00", "13:15", "13:30", "13:45",
125
+ "14:00", "14:15", "14:30", "14:45",
126
+ "15:00", "15:15", "15:30", "15:45",
127
+ "16:00", "16:15", "16:30", "16:45",
128
+ "17:00", "17:15", "17:30", "17:45",
129
+ "18:00", "18:15", "18:30", "18:45",
130
+ "19:00", "19:15", "19:30", "19:45",
131
+ "20:00", "20:15", "20:30", "20:45",
132
+ "21:00", "21:15", "21:30", "21:45",
133
+ "22:00", "22:15", "22:30", "22:45",
134
+ "23:00", "23:15", "23:30", "23:45",
135
+ ]);
136
+ });
137
+ it("renders error", async () => {
138
+ await page.setContent(`<wm-timepicker label='timepicker' error-message="There is an error."></wm-timepicker>`);
139
+ const errorEl = page.root.shadowRoot.querySelector(".error");
140
+ expect(errorEl.textContent).toBe("There is an error.");
141
+ });
142
+ it("sets input to required", async () => {
143
+ await page.setContent(`<wm-timepicker label='timepicker' required-field='true'></wm-timepicker>`);
144
+ const input = await page.root.shadowRoot.querySelector("input");
145
+ expect(input).toEqualAttribute("aria-required", "true");
146
+ });
147
+ });
@@ -0,0 +1,69 @@
1
+ import { newE2EPage } from "@stencil/core/testing";
2
+ import { AxePuppeteer } from "@axe-core/puppeteer";
3
+ describe("wm-toggletip", () => {
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-toggletip label='More information' tooltip='Further explanation'>Click me</wm-toggletip>
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-toggletip label='label' tooltip='Text'></wm-toggletip>");
17
+ const component = await page.find("wm-toggletip");
18
+ component.focus();
19
+ await page.waitForChanges();
20
+ let activeElNodeName = await page.evaluate(() => document.activeElement.shadowRoot.activeElement.nodeName);
21
+ expect(activeElNodeName).toBe("BUTTON");
22
+ });
23
+ // Enter or click opens tooltip, no change in focus
24
+ // Tab, escape close tooltip
25
+ it("opens and closes properly", async () => {
26
+ await page.setContent(`<wm-toggletip label='More information' tooltip='Further explanation'></wm-toggletip>`);
27
+ const toggletip = await page.find("wm-toggletip >>> .toggletip");
28
+ await page.keyboard.press("Tab");
29
+ await page.waitForChanges();
30
+ await page.keyboard.press("Enter");
31
+ await page.waitForChanges();
32
+ expect(toggletip).not.toHaveClass("hidden");
33
+ // check focus remains on button
34
+ const activeElNodeName = await page.evaluate(() => document.activeElement.shadowRoot.activeElement.nodeName);
35
+ expect(activeElNodeName).toEqual("BUTTON");
36
+ await page.keyboard.press("Escape");
37
+ await page.waitForChanges();
38
+ expect(toggletip).toHaveClass("hidden");
39
+ await page.click("wm-toggletip");
40
+ await page.waitForChanges();
41
+ expect(toggletip).not.toHaveClass("hidden");
42
+ await page.keyboard.press("Tab");
43
+ await page.waitForChanges();
44
+ expect(toggletip).toHaveClass("hidden");
45
+ await page.keyboard.press("Enter");
46
+ await page.waitForChanges();
47
+ await page.mouse.click(-10, -10);
48
+ await page.waitForChanges();
49
+ expect(toggletip).toHaveClass("hidden");
50
+ });
51
+ // test to make sure liveregion is updated properly
52
+ it("updates liveregion", async () => {
53
+ await page.setContent(`<wm-toggletip label='More information' tooltip='Further explanation'></wm-toggletip>`);
54
+ await page.keyboard.press("Tab");
55
+ await page.waitForChanges();
56
+ await page.keyboard.press("Enter");
57
+ await page.waitForChanges();
58
+ const liveRegion = await page.find("wm-toggletip >>> .live-region");
59
+ expect(liveRegion.textContent).toBe("Further explanation");
60
+ });
61
+ it("renders a tooltip", async () => {
62
+ await page.setContent(`<html lang='en'><head><title>Page</title></head><body><div id="tooltip-container"><div id="wm-tooltip" popover="manual" class="wm-tooltip" aria-hidden="true"></div></div><main><h1>Title</h1>
63
+ <wm-toggletip label='More information' tooltip='Further explanation'>Click me</wm-toggletip>
64
+ </main></body></html>`);
65
+ await page.click("wm-toggletip");
66
+ const tooltip = await page.find("#wm-tooltip");
67
+ expect(tooltip.textContent).toEqual("More information");
68
+ });
69
+ });
@@ -98,9 +98,9 @@ export class Toggletip {
98
98
  }
99
99
  }
100
100
  render() {
101
- return (h(Host, { key: '39cd3a5cb28b8ab7c54e5e4b29a3970400f14f87', class: `size-${this.targetSize}` }, h("button", { key: '8362efc0bb5e5699f160bd213254821bd1fac929', class: "button", type: "button", "aria-label": this.label, onClick: () => this.open(),
101
+ return (h(Host, { class: `size-${this.targetSize}` }, h("button", { class: "button", type: "button", "aria-label": this.label, onClick: () => this.open(),
102
102
  // In order to position the tooltip identically to the toggletip, it's presence is determined by these four events
103
- onMouseEnter: () => showTooltip(this.tooltipPosition, this.el, this.tooltipMessage), onMouseLeave: () => hideTooltip(), onFocus: () => showTooltip(this.tooltipPosition, this.el, this.tooltipMessage), onBlur: () => this.handleBlur() }, h("div", { key: '28a75c4b8789d578fa32b5e4de72ad9bdde9e77b', class: "svg-icon svg-info" })), h("div", { key: '553b599a56decb58b4eb7da08ab7b869a3eb5d81', ref: (el) => (this.toggletipEl = el), class: `toggletip ${this.isOpen ? "" : "hidden"} ${this.tooltipPosition}` }, this.tooltip), h("div", { key: '85d556224168be45618ceb6a53042c217ec34287', ref: (el) => (this.liveRegionEl = el), class: "live-region sr-only", role: "status", "aria-live": "polite", "aria-atomic": "true" })));
103
+ onMouseEnter: () => showTooltip(this.tooltipPosition, this.el, this.tooltipMessage), onMouseLeave: () => hideTooltip(), onFocus: () => showTooltip(this.tooltipPosition, this.el, this.tooltipMessage), onBlur: () => this.handleBlur() }, h("div", { class: "svg-icon svg-info" })), h("div", { ref: (el) => (this.toggletipEl = el), class: `toggletip ${this.isOpen ? "" : "hidden"} ${this.tooltipPosition}` }, this.tooltip), h("div", { ref: (el) => (this.liveRegionEl = el), class: "live-region sr-only", role: "status", "aria-live": "polite", "aria-atomic": "true" })));
104
104
  }
105
105
  static get is() { return "wm-toggletip"; }
106
106
  static get encapsulation() { return "shadow"; }
@@ -0,0 +1,21 @@
1
+ import { newSpecPage } from "@stencil/core/testing";
2
+ import { Toggletip } from "./wm-toggletip";
3
+ describe("toggletip", () => {
4
+ let page;
5
+ beforeEach(async () => {
6
+ page = await newSpecPage({
7
+ components: [Toggletip],
8
+ html: `<wm-toggletip label="More information" tooltip="Further explanation"></wm-toggletip>`,
9
+ });
10
+ });
11
+ it("builds", async () => {
12
+ expect(page.root).toMatchSnapshot();
13
+ });
14
+ it("has proper aria roles & attributes", async () => {
15
+ const liveRegion = page.root.shadowRoot.querySelector(".live-region");
16
+ const button = page.root.shadowRoot.querySelector("button");
17
+ expect(liveRegion).toEqualAttribute("role", "status");
18
+ expect(button).toEqualAttribute("type", "button");
19
+ expect(button).toEqualAttribute("aria-label", "More information");
20
+ });
21
+ });
@@ -0,0 +1,70 @@
1
+ import { newE2EPage } from "@stencil/core/testing";
2
+ import { AxePuppeteer } from "@axe-core/puppeteer";
3
+ describe("wm-uploader", () => {
4
+ let page, input, label;
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-uploader button-text="Upload new document">
9
+ <wm-file id="file1" name="File retrieved from server" type="pdf" last-updated="2020-01-28T22:29:10.397Z"></wm-file>
10
+ <wm-file id="file2" name="Second file" type="jpeg" last-updated="2019-02-14T12:21:05.397Z"></wm-file>
11
+ </wm-uploader>
12
+ </main></body></html>`);
13
+ input = await page.find("wm-uploader >>> input[type='file']");
14
+ label = await page.find("wm-uploader >>> label");
15
+ await page.waitForChanges();
16
+ });
17
+ it("passes Axe checks", async () => {
18
+ const results = await new AxePuppeteer(page).analyze();
19
+ expect(results.violations.length).toBe(0);
20
+ });
21
+ it("renders the component", async () => {
22
+ expect(input).not.toBeNull();
23
+ expect(label).not.toBeNull();
24
+ });
25
+ it("focuses previous file when deleting with the keyboard", async () => {
26
+ page = await newE2EPage();
27
+ await page.setContent(`<html lang='en'><head><title>Page</title></head><body><main><h1>Title</h1>
28
+ <wm-uploader button-text="Upload new document">
29
+ <wm-file id="file1" name="First file" type="pdf" file-actions="preview delete"></wm-file>
30
+ <wm-file id="file2" name="Second file" type="pdf" file-actions="delete"></wm-file>
31
+ </wm-uploader>
32
+ </main></body></html>`);
33
+ await page.waitForChanges();
34
+ let fileEls = await page.findAll("wm-file");
35
+ let secondFileEl = fileEls[1];
36
+ // inital check of file count
37
+ expect(fileEls.length).toBe(2);
38
+ // user must be tabbing for these changes to occur
39
+ await page.keyboard.press("Tab");
40
+ await page.keyboard.press("Tab");
41
+ await page.keyboard.press("Tab");
42
+ await page.keyboard.press("Tab");
43
+ await page.keyboard.press("Enter");
44
+ await page.waitForChanges();
45
+ // check focused element is last file, delete button
46
+ let activeElId = await page.evaluate(() => document.activeElement.id);
47
+ expect(activeElId).toBe("file2");
48
+ let activeElButtonType = await page.evaluate(() => document.activeElement.shadowRoot.activeElement.classList[0]);
49
+ expect(activeElButtonType).toBe("delete-button");
50
+ let mockFileDeleteEvent = new CustomEvent("wmFileDelete");
51
+ //@ts-ignore
52
+ mockFileDeleteEvent.target = secondFileEl;
53
+ secondFileEl.dispatchEvent(mockFileDeleteEvent);
54
+ await page.evaluate(() => { var _a; return (_a = document.getElementById("file2")) === null || _a === void 0 ? void 0 : _a.remove(); });
55
+ await page.waitForChanges();
56
+ // confirm file has been removed
57
+ fileEls = await page.findAll("wm-file");
58
+ expect(fileEls.length).toBe(1);
59
+ // check focused element is last file, delete button
60
+ activeElId = await page.evaluate(() => document.activeElement.id);
61
+ expect(activeElId).toBe("file1");
62
+ activeElButtonType = await page.evaluate(() => document.activeElement.shadowRoot.activeElement.classList[0]);
63
+ expect(activeElButtonType).toBe("delete-button");
64
+ });
65
+ // it("disables the button dynamically", async () => {
66
+ // disabled when maxed out
67
+ // disabled while a file is uploading
68
+ // not disabled after upload
69
+ // });
70
+ });
@@ -300,9 +300,9 @@ export class Uploader {
300
300
  return (h("div", { class: `drop-area -${this.dropArea}`, ref: (el) => (this.dropAreaEl = el), onDragEnter: (ev) => this.handleDragEnter(ev), onDragOver: (ev) => this.handleDragOver(ev), onDragLeave: (ev) => this.handleDragLeave(ev), onDrop: (ev) => this.handleDrop(ev) }, this.dropArea == "page" && (h("div", { ref: (el) => (this.dropOverlayEl = el), class: "drop-overlay", popover: "manual" }, h("span", { class: "upload-arrow" }), h("span", null, "Drop to Upload")))));
301
301
  }
302
302
  render() {
303
- return (h(Host, { key: '05fa03d63ba14665a196bece2c82eabb4882ba82', class: `-${this.dropArea}` }, this.uploaderType == "drop" && this.renderDropArea(), this.label && this.renderLabel(), this.renderHeader(), this.renderListContainer(), h("div", { key: 'fd2c2779cc8f5e8aab480fdb68ac0e482905785d', ref: (el) => (this.assertiveLiveRegionEl = el), class: "live-region sr-only", "aria-live": "assertive" // since it's directly linked to the action the user took, it should be read in priority. With polite, some messages get dismissed in favor of the page title
303
+ return (h(Host, { class: `-${this.dropArea}` }, this.uploaderType == "drop" && this.renderDropArea(), this.label && this.renderLabel(), this.renderHeader(), this.renderListContainer(), h("div", { ref: (el) => (this.assertiveLiveRegionEl = el), class: "live-region sr-only", "aria-live": "assertive" // since it's directly linked to the action the user took, it should be read in priority. With polite, some messages get dismissed in favor of the page title
304
304
  ,
305
- "aria-atomic": "true" }), h("div", { key: '2a5c1d00d2a98bd40fa9ac8dbc248209cca470ba', ref: (el) => (this.politeLiveRegionEl = el), class: "live-region sr-only", "aria-live": "polite", "aria-atomic": "true" })));
305
+ "aria-atomic": "true" }), h("div", { ref: (el) => (this.politeLiveRegionEl = el), class: "live-region sr-only", "aria-live": "polite", "aria-atomic": "true" })));
306
306
  }
307
307
  static get is() { return "wm-uploader"; }
308
308
  static get encapsulation() { return "shadow"; }