@watermarkinsights/ripple 5.11.1 → 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.
- package/dist/cjs/{chartFunctions-7314b414.js → chartFunctions-0436714f.js} +31 -11
- package/dist/cjs/{functions-5ac8a62f.js → functions-e24249e6.js} +7 -104
- package/dist/{esm/app-globals-c3920c78.js → cjs/global-650a6fe6.js} +2 -7
- package/dist/cjs/index-e86c28b6.js +2649 -0
- package/dist/cjs/{intl-07aaf53c.js → intl-a70cf8c2.js} +1 -1
- package/dist/cjs/loader.cjs.js +3 -4
- package/dist/cjs/priv-calendar.cjs.entry.js +5 -6
- package/dist/cjs/priv-chart-popover.cjs.entry.js +5 -6
- package/dist/cjs/priv-navigator-button.cjs.entry.js +3 -4
- package/dist/cjs/priv-navigator-item.cjs.entry.js +3 -4
- package/dist/cjs/priv-option-list.cjs.entry.js +4 -5
- package/dist/cjs/ripple.cjs.js +11 -12
- package/dist/cjs/wm-action-menu_2.cjs.entry.js +6 -8
- package/dist/cjs/wm-button.cjs.entry.js +4 -5
- package/dist/cjs/wm-chart-slice.cjs.entry.js +1 -1
- package/dist/cjs/wm-chart.cjs.entry.js +15 -9
- package/dist/cjs/wm-date-range.cjs.entry.js +8 -9
- package/dist/cjs/wm-datepicker.cjs.entry.js +8 -9
- package/dist/cjs/wm-file-list.cjs.entry.js +3 -4
- package/dist/cjs/wm-file.cjs.entry.js +4 -5
- package/dist/cjs/wm-input.cjs.entry.js +5 -6
- package/dist/cjs/wm-line-chart.cjs.entry.js +14 -15
- package/dist/cjs/wm-modal-pss_3.cjs.entry.js +10 -13
- package/dist/cjs/wm-modal_3.cjs.entry.js +10 -13
- package/dist/cjs/wm-navigation_3.cjs.entry.js +10 -13
- package/dist/cjs/wm-navigator.cjs.entry.js +3 -4
- package/dist/cjs/wm-nested-select.cjs.entry.js +7 -8
- package/dist/cjs/wm-optgroup.cjs.entry.js +4 -5
- package/dist/cjs/wm-option_2.cjs.entry.js +8 -10
- package/dist/cjs/wm-pagination.cjs.entry.js +4 -5
- package/dist/cjs/wm-progress-indicator_3.cjs.entry.js +7 -9
- package/dist/cjs/wm-search.cjs.entry.js +6 -7
- package/dist/cjs/wm-snackbar.cjs.entry.js +6 -7
- package/dist/cjs/wm-tab-item_3.cjs.entry.js +8 -11
- package/dist/cjs/wm-tag-input.cjs.entry.js +7 -8
- package/dist/cjs/wm-tag-option.cjs.entry.js +2 -2
- package/dist/cjs/wm-textarea.cjs.entry.js +5 -6
- package/dist/cjs/wm-timepicker.cjs.entry.js +5 -6
- package/dist/cjs/wm-toggletip.cjs.entry.js +5 -6
- package/dist/cjs/wm-uploader.cjs.entry.js +6 -7
- package/dist/cjs/wm-wrapper.cjs.entry.js +1 -1
- package/dist/collection/collection-manifest.json +2 -2
- package/dist/collection/components/charts/chartFunctions.js +29 -9
- package/dist/collection/components/charts/chartFunctions.spec.js +16 -0
- package/dist/collection/components/charts/priv-chart-popover/priv-chart-popover.e2e.js +81 -0
- package/dist/collection/components/charts/priv-chart-popover/priv-chart-popover.js +2 -2
- package/dist/collection/components/charts/screenshots.e2e.js +96 -0
- package/dist/collection/components/charts/wm-chart/wm-chart.e2e.js +213 -0
- package/dist/collection/components/charts/wm-chart/wm-chart.js +10 -3
- package/dist/collection/components/charts/wm-chart/wm-chart.spec.js +37 -0
- package/dist/collection/components/charts/wm-line-chart/wm-line-chart.e2e.js +176 -0
- package/dist/collection/components/charts/wm-line-chart/wm-line-chart.js +9 -9
- package/dist/collection/components/charts/wm-line-chart/wm-line-chart.spec.js +163 -0
- package/dist/collection/components/charts/wm-progress-monitor/wm-progress-indicator.js +1 -1
- package/dist/collection/components/charts/wm-progress-monitor/wm-progress-monitor.e2e.js +69 -0
- package/dist/collection/components/charts/wm-progress-monitor/wm-progress-monitor.js +1 -1
- package/dist/collection/components/charts/wm-progress-monitor/wm-progress-monitor.spec.js +79 -0
- package/dist/collection/components/datepickers/priv-calendar/priv-calendar.js +2 -2
- package/dist/collection/components/datepickers/priv-calendar/priv-calendar.spec.js +89 -0
- package/dist/collection/components/datepickers/wm-date-range.e2e.js +443 -0
- package/dist/collection/components/datepickers/wm-date-range.js +13 -17
- package/dist/collection/components/datepickers/wm-date-range.spec.js +22 -0
- package/dist/collection/components/datepickers/wm-datepicker.e2e.js +382 -0
- package/dist/collection/components/datepickers/wm-datepicker.js +13 -17
- package/dist/collection/components/datepickers/wm-datepicker.spec.js +21 -0
- package/dist/collection/components/selects/priv-option-list/priv-option-list.js +5 -7
- package/dist/collection/components/selects/wm-nested-select/wm-nested-select.js +3 -3
- package/dist/collection/components/selects/wm-optgroup/wm-optgroup.js +1 -1
- package/dist/collection/components/selects/wm-option/wm-option.e2e.js +22 -0
- package/dist/collection/components/selects/wm-option/wm-option.js +1 -1
- package/dist/collection/components/selects/wm-option/wm-option.spec.js +63 -0
- package/dist/collection/components/selects/wm-select/wm-select.e2e.js +521 -0
- package/dist/collection/components/selects/wm-select/wm-select.js +2 -2
- package/dist/collection/components/selects/wm-select/wm-select.spec.js +271 -0
- package/dist/collection/components/wm-action-menu/wm-action-menu.e2e.js +200 -0
- package/dist/collection/components/wm-action-menu/wm-action-menu.js +1 -1
- package/dist/collection/components/wm-action-menu/wm-action-menu.spec.js +48 -0
- package/dist/collection/components/wm-button/wm-button.e2e.js +55 -0
- package/dist/collection/components/wm-button/wm-button.js +1 -1
- package/dist/collection/components/wm-button/wm-button.spec.js +74 -0
- package/dist/collection/components/wm-file/wm-file.js +1 -1
- package/dist/collection/components/wm-file/wm-file.spec.js +194 -0
- package/dist/collection/components/wm-file-list/wm-file-list.js +1 -1
- package/dist/collection/components/wm-file-list/wm-file-list.spec.js +69 -0
- package/dist/collection/components/wm-input/wm-input.e2e.js +32 -0
- package/dist/collection/components/wm-input/wm-input.js +1 -1
- package/dist/collection/components/wm-input/wm-input.spec.js +173 -0
- package/dist/collection/components/wm-menuitem/wm-menuitem.e2e.js +23 -0
- package/dist/collection/components/wm-menuitem/wm-menuitem.js +1 -1
- package/dist/collection/components/wm-menuitem/wm-menuitem.spec.js +54 -0
- package/dist/collection/components/wm-modal/wm-modal-footer.js +1 -1
- package/dist/collection/components/wm-modal/wm-modal-footer.spec.js +11 -0
- package/dist/collection/components/wm-modal/wm-modal-header.js +1 -1
- package/dist/collection/components/wm-modal/wm-modal-header.spec.js +8 -0
- package/dist/collection/components/wm-modal/wm-modal.e2e.js +104 -0
- package/dist/collection/components/wm-modal/wm-modal.js +2 -2
- package/dist/collection/components/wm-modal/wm-modal.spec.js +30 -0
- package/dist/collection/components/wm-modal-pss/wm-modal-pss-footer.js +1 -1
- package/dist/collection/components/wm-modal-pss/wm-modal-pss-header.js +1 -1
- package/dist/collection/components/wm-modal-pss/wm-modal-pss.js +2 -2
- package/dist/collection/components/wm-navigation/wm-navigation-hamburger.js +1 -1
- package/dist/collection/components/wm-navigation/wm-navigation-item.js +1 -1
- package/dist/collection/components/wm-navigation/wm-navigation.e2e.js +102 -0
- package/dist/collection/components/wm-navigation/wm-navigation.js +2 -2
- package/dist/collection/components/wm-navigation/wm-navigation.spec.js +91 -0
- package/dist/collection/components/wm-navigator/priv-navigator-button/priv-navigator-button.e2e.js +50 -0
- package/dist/collection/components/wm-navigator/priv-navigator-button/priv-navigator-button.js +1 -1
- package/dist/collection/components/wm-navigator/priv-navigator-item/priv-navigator-item.js +1 -1
- package/dist/collection/components/wm-navigator/wm-navigator.e2e.js +209 -0
- package/dist/collection/components/wm-navigator/wm-navigator.spec.js +177 -0
- package/dist/collection/components/wm-pagination/wm-pagination.e2e.js +312 -0
- package/dist/collection/components/wm-pagination/wm-pagination.js +1 -1
- package/dist/collection/components/wm-search/wm-search.e2e.js +76 -0
- package/dist/collection/components/wm-search/wm-search.js +4 -5
- package/dist/collection/components/wm-search/wm-search.spec.js +71 -0
- package/dist/collection/components/wm-snackbar/wm-snackbar.e2e.js +112 -0
- package/dist/collection/components/wm-snackbar/wm-snackbar.js +2 -2
- package/dist/collection/components/wm-snackbar/wm-snackbar.spec.js +9 -0
- package/dist/collection/components/wm-tabs/wm-tab-item/wm-tab-item.js +1 -1
- package/dist/collection/components/wm-tabs/wm-tab-list/wm-tab-list.js +1 -1
- package/dist/collection/components/wm-tabs/wm-tab-panel/wm-tab-panel.js +1 -1
- package/dist/collection/components/wm-tabs/wm-tabs.e2e.js +91 -0
- package/dist/collection/components/wm-tabs/wm-tabs.spec.js +12 -0
- package/dist/collection/components/wm-tag-input/wm-tag-input.e2e.js +204 -0
- package/dist/collection/components/wm-tag-input/wm-tag-input.js +3 -3
- package/dist/collection/components/wm-tag-input/wm-tag-input.spec.js +195 -0
- package/dist/collection/components/wm-textarea/wm-textarea.e2e.js +41 -0
- package/dist/collection/components/wm-textarea/wm-textarea.js +1 -1
- package/dist/collection/components/wm-textarea/wm-textarea.spec.js +79 -0
- package/dist/collection/components/wm-timepicker/wm-timepicker.e2e.js +163 -0
- package/dist/collection/components/wm-timepicker/wm-timepicker.js +8 -11
- package/dist/collection/components/wm-timepicker/wm-timepicker.spec.js +147 -0
- package/dist/collection/components/wm-toggletip/wm-toggletip.e2e.js +69 -0
- package/dist/collection/components/wm-toggletip/wm-toggletip.js +2 -2
- package/dist/collection/components/wm-toggletip/wm-toggletip.spec.js +21 -0
- package/dist/collection/components/wm-uploader/wm-uploader.e2e.js +70 -0
- package/dist/collection/components/wm-uploader/wm-uploader.js +2 -2
- package/dist/collection/components/wm-uploader/wm-uploader.spec.js +234 -0
- package/dist/collection/global/functions.spec.js +126 -0
- package/dist/collection/lang/lang.spec.js +20 -0
- package/dist/esm/{chartFunctions-c273c613.js → chartFunctions-37511f93.js} +31 -11
- package/dist/esm/{functions-f39e6177.js → functions-8800c690.js} +8 -105
- package/dist/{cjs/app-globals-e5411d07.js → esm/global-1e5a92fa.js} +1 -10
- package/dist/esm/index-558b5a82.js +2618 -0
- package/dist/esm/{intl-a0ebf99e.js → intl-cf443c87.js} +1 -1
- package/dist/esm/loader.js +4 -5
- package/dist/esm/priv-calendar.entry.js +5 -6
- package/dist/esm/priv-chart-popover.entry.js +5 -6
- package/dist/esm/priv-navigator-button.entry.js +3 -4
- package/dist/esm/priv-navigator-item.entry.js +3 -4
- package/dist/esm/priv-option-list.entry.js +4 -5
- package/dist/esm/ripple.js +12 -13
- package/dist/esm/wm-action-menu_2.entry.js +6 -8
- package/dist/esm/wm-button.entry.js +4 -5
- package/dist/esm/wm-chart-slice.entry.js +1 -1
- package/dist/esm/wm-chart.entry.js +15 -9
- package/dist/esm/wm-date-range.entry.js +8 -9
- package/dist/esm/wm-datepicker.entry.js +8 -9
- package/dist/esm/wm-file-list.entry.js +3 -4
- package/dist/esm/wm-file.entry.js +4 -5
- package/dist/esm/wm-input.entry.js +5 -6
- package/dist/esm/wm-line-chart.entry.js +14 -15
- package/dist/esm/wm-modal-pss_3.entry.js +10 -13
- package/dist/esm/wm-modal_3.entry.js +10 -13
- package/dist/esm/wm-navigation_3.entry.js +10 -13
- package/dist/esm/wm-navigator.entry.js +3 -4
- package/dist/esm/wm-nested-select.entry.js +7 -8
- package/dist/esm/wm-optgroup.entry.js +4 -5
- package/dist/esm/wm-option_2.entry.js +8 -10
- package/dist/esm/wm-pagination.entry.js +4 -5
- package/dist/esm/wm-progress-indicator_3.entry.js +7 -9
- package/dist/esm/wm-search.entry.js +6 -7
- package/dist/esm/wm-snackbar.entry.js +6 -7
- package/dist/esm/wm-tab-item_3.entry.js +8 -11
- package/dist/esm/wm-tag-input.entry.js +7 -8
- package/dist/esm/wm-tag-option.entry.js +2 -2
- package/dist/esm/wm-textarea.entry.js +5 -6
- package/dist/esm/wm-timepicker.entry.js +5 -6
- package/dist/esm/wm-toggletip.entry.js +5 -6
- package/dist/esm/wm-uploader.entry.js +6 -7
- package/dist/esm/wm-wrapper.entry.js +1 -1
- package/dist/esm-es5/chartFunctions-37511f93.js +1 -0
- package/dist/esm-es5/functions-8800c690.js +1 -0
- package/dist/esm-es5/global-1e5a92fa.js +1 -0
- package/dist/esm-es5/index-558b5a82.js +1 -0
- package/dist/esm-es5/{intl-a0ebf99e.js → intl-cf443c87.js} +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/priv-calendar.entry.js +1 -1
- package/dist/esm-es5/priv-chart-popover.entry.js +1 -1
- package/dist/esm-es5/priv-navigator-button.entry.js +1 -1
- package/dist/esm-es5/priv-navigator-item.entry.js +1 -1
- package/dist/esm-es5/priv-option-list.entry.js +1 -1
- package/dist/esm-es5/ripple.js +1 -1
- package/dist/esm-es5/wm-action-menu_2.entry.js +1 -1
- package/dist/esm-es5/wm-button.entry.js +1 -1
- package/dist/esm-es5/wm-chart-slice.entry.js +1 -1
- package/dist/esm-es5/wm-chart.entry.js +1 -1
- package/dist/esm-es5/wm-date-range.entry.js +1 -1
- package/dist/esm-es5/wm-datepicker.entry.js +1 -1
- package/dist/esm-es5/wm-file-list.entry.js +1 -1
- package/dist/esm-es5/wm-file.entry.js +1 -1
- package/dist/esm-es5/wm-input.entry.js +1 -1
- package/dist/esm-es5/wm-line-chart.entry.js +1 -1
- package/dist/esm-es5/wm-modal-pss_3.entry.js +1 -1
- package/dist/esm-es5/wm-modal_3.entry.js +1 -1
- package/dist/esm-es5/wm-navigation_3.entry.js +1 -1
- package/dist/esm-es5/wm-navigator.entry.js +1 -1
- package/dist/esm-es5/wm-nested-select.entry.js +1 -1
- package/dist/esm-es5/wm-optgroup.entry.js +1 -1
- package/dist/esm-es5/wm-option_2.entry.js +1 -1
- package/dist/esm-es5/wm-pagination.entry.js +1 -1
- package/dist/esm-es5/wm-progress-indicator_3.entry.js +1 -1
- package/dist/esm-es5/wm-search.entry.js +1 -1
- package/dist/esm-es5/wm-snackbar.entry.js +1 -1
- package/dist/esm-es5/wm-tab-item_3.entry.js +1 -1
- package/dist/esm-es5/wm-tag-input.entry.js +1 -1
- package/dist/esm-es5/wm-tag-option.entry.js +1 -1
- package/dist/esm-es5/wm-textarea.entry.js +1 -1
- package/dist/esm-es5/wm-timepicker.entry.js +1 -1
- package/dist/esm-es5/wm-toggletip.entry.js +1 -1
- package/dist/esm-es5/wm-uploader.entry.js +1 -1
- package/dist/esm-es5/wm-wrapper.entry.js +1 -1
- package/dist/loader/cdn.js +2 -1
- package/dist/loader/index.cjs.js +2 -1
- package/dist/loader/index.d.ts +0 -3
- package/dist/loader/index.es2017.js +2 -1
- package/dist/loader/index.js +2 -1
- package/dist/ripple/{p-bda9a663.system.entry.js → p-0ba2e506.system.entry.js} +1 -1
- package/dist/ripple/{p-0f09ccc6.system.entry.js → p-0e36d5b8.system.entry.js} +1 -1
- package/dist/ripple/{p-658f146a.system.entry.js → p-1a4b6b02.system.entry.js} +1 -1
- package/dist/ripple/{p-165b5d3d.system.entry.js → p-1a71d867.system.entry.js} +1 -1
- package/dist/ripple/{p-79a6b32f.system.entry.js → p-1aea1ad2.system.entry.js} +1 -1
- package/dist/ripple/p-22cfff23.entry.js +1 -0
- package/dist/ripple/p-32507c13.system.entry.js +1 -0
- package/dist/ripple/{p-823d7b4e.system.entry.js → p-32bf3f5b.system.entry.js} +1 -1
- package/dist/ripple/{p-bb25b9af.system.js → p-3322823d.system.js} +1 -1
- package/dist/ripple/p-39e26322.entry.js +1 -0
- package/dist/ripple/{p-23bcc6d4.system.entry.js → p-3f40f06b.system.entry.js} +1 -1
- package/dist/ripple/p-3fa38234.entry.js +1 -0
- package/dist/ripple/p-44f426ad.entry.js +1 -0
- package/dist/ripple/{p-391d9f32.system.entry.js → p-460e9ef3.system.entry.js} +1 -1
- package/dist/ripple/{p-c34c9cbb.system.entry.js → p-4743176d.system.entry.js} +1 -1
- package/dist/ripple/{p-13b1d775.entry.js → p-48e09589.entry.js} +1 -1
- package/dist/ripple/{p-4c1efa04.system.js → p-49c23d69.system.js} +1 -1
- package/dist/ripple/p-4de728e1.entry.js +1 -0
- package/dist/ripple/p-4ff87702.system.entry.js +1 -0
- package/dist/ripple/p-50bcde40.js +1 -0
- package/dist/ripple/{p-362b19a2.entry.js → p-544925c2.entry.js} +1 -1
- package/dist/ripple/p-568c595f.js +2 -0
- package/dist/ripple/{p-bee47080.system.entry.js → p-58668e84.system.entry.js} +1 -1
- package/dist/ripple/{p-83d1c1fb.entry.js → p-59bb36fc.entry.js} +1 -1
- package/dist/ripple/p-5e9c9f0d.entry.js +1 -0
- package/dist/ripple/{p-39dd3870.system.entry.js → p-608f69c1.system.entry.js} +1 -1
- package/dist/ripple/{p-043901ab.system.entry.js → p-65d26233.system.entry.js} +1 -1
- package/dist/ripple/{p-5c25870c.entry.js → p-68e04222.entry.js} +1 -1
- package/dist/ripple/p-6e72a06c.entry.js +1 -0
- package/dist/ripple/{p-5c62e26d.entry.js → p-702252ba.entry.js} +1 -1
- package/dist/ripple/{p-a40296fc.system.entry.js → p-704be1e8.system.entry.js} +1 -1
- package/dist/ripple/{p-9708c995.js → p-710c6115.js} +1 -1
- package/dist/ripple/{p-42596f25.entry.js → p-7478303e.entry.js} +1 -1
- package/dist/ripple/p-79043436.entry.js +1 -0
- package/dist/ripple/p-797d65b7.entry.js +1 -0
- package/dist/ripple/{p-fc170968.system.entry.js → p-79d4f14b.system.entry.js} +1 -1
- package/dist/ripple/{p-59e50ea1.system.entry.js → p-7e0fc193.system.entry.js} +1 -1
- package/dist/ripple/{p-a3f9e2f6.system.entry.js → p-84e7a8df.system.entry.js} +1 -1
- package/dist/ripple/{p-d0736520.system.entry.js → p-878fd4af.system.entry.js} +1 -1
- package/dist/ripple/{p-cd0cc88d.entry.js → p-88ebddd7.entry.js} +1 -1
- package/dist/ripple/p-8cd8f784.entry.js +1 -0
- package/dist/ripple/p-8d72d140.entry.js +1 -0
- package/dist/ripple/p-94495341.entry.js +1 -0
- package/dist/ripple/p-94717864.entry.js +1 -0
- package/dist/ripple/{p-0ed1e17e.entry.js → p-9d461de5.entry.js} +1 -1
- package/dist/ripple/p-9eaa0acb.system.entry.js +1 -0
- package/dist/ripple/{p-3376581a.system.entry.js → p-a04ef164.system.entry.js} +1 -1
- package/dist/ripple/{p-d1751f87.system.entry.js → p-a2936bcb.system.entry.js} +1 -1
- package/dist/ripple/p-a30e2948.entry.js +1 -0
- package/dist/ripple/p-a69425b0.entry.js +1 -0
- package/dist/ripple/p-ab8d78cc.system.js +2 -0
- package/dist/ripple/p-adc254e6.entry.js +1 -0
- package/dist/ripple/p-b02048a9.entry.js +1 -0
- package/dist/ripple/p-b2706394.entry.js +1 -0
- package/dist/ripple/{p-3bde67f1.system.entry.js → p-b5971475.system.entry.js} +1 -1
- package/dist/ripple/{p-8240dd82.system.entry.js → p-b5c371aa.system.entry.js} +1 -1
- package/dist/ripple/{p-76d248e6.entry.js → p-b976c84b.entry.js} +1 -1
- package/dist/ripple/{p-3ec9a2a2.system.entry.js → p-bd547650.system.entry.js} +1 -1
- package/dist/ripple/{p-0c7cf863.system.entry.js → p-bfc1065f.system.entry.js} +1 -1
- package/dist/ripple/{p-62a99b68.entry.js → p-c2b5d9e5.entry.js} +1 -1
- package/dist/ripple/p-c3fa1588.system.js +1 -0
- package/dist/ripple/p-c4e329e9.entry.js +1 -0
- package/dist/ripple/{p-72e05203.system.entry.js → p-c7e30eb0.system.entry.js} +1 -1
- package/dist/ripple/{p-9287d70b.system.entry.js → p-caec4f57.system.entry.js} +1 -1
- package/dist/ripple/{p-35c7696e.entry.js → p-ce44ba70.entry.js} +1 -1
- package/dist/ripple/{p-c62342c4.entry.js → p-d57e8196.entry.js} +1 -1
- package/dist/ripple/p-dc77d98a.entry.js +1 -0
- package/dist/ripple/{p-3c407959.system.entry.js → p-ddcbb694.system.entry.js} +1 -1
- package/dist/ripple/{p-35218430.system.entry.js → p-de272ae7.system.entry.js} +1 -1
- package/dist/ripple/{p-cca7a151.system.entry.js → p-e2c6052b.system.entry.js} +1 -1
- package/dist/ripple/p-e6f884a6.js +1 -0
- package/dist/ripple/p-e844cbf3.entry.js +1 -0
- package/dist/ripple/p-eca78c2b.js +1 -0
- package/dist/ripple/p-edd87140.system.js +1 -0
- package/dist/ripple/p-efdad4ea.system.js +1 -0
- package/dist/ripple/{p-35644be9.system.entry.js → p-f22e26b6.system.entry.js} +1 -1
- package/dist/ripple/p-f5bc8926.entry.js +1 -0
- package/dist/ripple/{p-ead461fe.system.entry.js → p-f6eff655.system.entry.js} +1 -1
- package/dist/ripple/{p-22dda578.system.entry.js → p-f779ec68.system.entry.js} +1 -1
- package/dist/ripple/ripple.esm.js +1 -1
- package/dist/ripple/ripple.js +1 -1
- package/dist/types/stencil-public-runtime.d.ts +10 -3
- package/package.json +1 -1
- package/dist/cjs/index-788526f5.js +0 -1859
- package/dist/esm/index-130e07bb.js +0 -1828
- package/dist/esm-es5/app-globals-c3920c78.js +0 -1
- package/dist/esm-es5/chartFunctions-c273c613.js +0 -1
- package/dist/esm-es5/functions-f39e6177.js +0 -1
- package/dist/esm-es5/index-130e07bb.js +0 -1
- package/dist/ripple/p-0f356c45.entry.js +0 -1
- package/dist/ripple/p-105e5721.system.entry.js +0 -1
- package/dist/ripple/p-152b20ae.entry.js +0 -1
- package/dist/ripple/p-2a30d411.system.entry.js +0 -1
- package/dist/ripple/p-32b88ab2.entry.js +0 -1
- package/dist/ripple/p-3ceed568.entry.js +0 -1
- package/dist/ripple/p-3f486eed.system.js +0 -1
- package/dist/ripple/p-4a1601c5.js +0 -1
- package/dist/ripple/p-4b8cb0a4.entry.js +0 -1
- package/dist/ripple/p-5d8386b4.system.entry.js +0 -1
- package/dist/ripple/p-68a96191.entry.js +0 -1
- package/dist/ripple/p-6c0c2e1f.entry.js +0 -1
- package/dist/ripple/p-72f7d6e1.system.js +0 -1
- package/dist/ripple/p-76542ab3.entry.js +0 -1
- package/dist/ripple/p-76f9acec.entry.js +0 -1
- package/dist/ripple/p-86a5178d.entry.js +0 -1
- package/dist/ripple/p-89a2db02.js +0 -1
- package/dist/ripple/p-8d4f674f.entry.js +0 -1
- package/dist/ripple/p-8f5ac061.entry.js +0 -1
- package/dist/ripple/p-96505312.js +0 -1
- package/dist/ripple/p-985fb8b9.entry.js +0 -1
- package/dist/ripple/p-aaaee14f.entry.js +0 -1
- package/dist/ripple/p-b4e7d63f.entry.js +0 -1
- package/dist/ripple/p-ba047c79.entry.js +0 -1
- package/dist/ripple/p-ba32888d.system.js +0 -1
- package/dist/ripple/p-c5c31818.entry.js +0 -1
- package/dist/ripple/p-cef8a45b.system.js +0 -2
- package/dist/ripple/p-d528f5e4.entry.js +0 -1
- package/dist/ripple/p-d9da0502.js +0 -2
- package/dist/ripple/p-da424bdb.entry.js +0 -1
- package/dist/ripple/p-f39b556d.entry.js +0 -1
- package/dist/ripple/p-f98f9a32.entry.js +0 -1
- package/dist/ripple/p-f9a71cf6.entry.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
|
+
});
|
|
@@ -151,7 +151,7 @@ export class Pagination {
|
|
|
151
151
|
render() {
|
|
152
152
|
return (
|
|
153
153
|
// do not render the component if there's only one page
|
|
154
|
-
this.totalItems > this.itemsPerPage && (h("nav", {
|
|
154
|
+
this.totalItems > this.itemsPerPage && (h("nav", { "aria-label": `Pagination Navigation. ${this.getCurrentPagesInView()}. Current page, ${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
155
|
}
|
|
156
156
|
static get is() { return "wm-pagination"; }
|
|
157
157
|
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,
|
|
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", {
|
|
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
|
-
"
|
|
384
|
-
"
|
|
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
|
+
});
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { newE2EPage } from "@stencil/core/testing";
|
|
2
|
+
describe("wm-snackbar", () => {
|
|
3
|
+
let page;
|
|
4
|
+
beforeEach(async () => {
|
|
5
|
+
page = await newE2EPage();
|
|
6
|
+
await page.setContent("<wm-button id='create-snack' onclick='generateSnackbar()'></wm-button><wm-snackbar notifications='[]' id='snack'></wm-snackbar ><script>function generateSnackbar() { const snackbar = document.getElementById('snack'); const id = '3'; let notifications = JSON.parse(snackbar.notifications); let newNotification = {'id': id, message: 'You did something', link: 'Undo'}; let updatedNotifications = [ ...notifications, newNotification ]; snackbar.notifications = JSON.stringify(updatedNotifications); }</script>");
|
|
7
|
+
await page.evaluate(async () => {
|
|
8
|
+
document.addEventListener("wmSnackbarSnackFinished", (ev) => {
|
|
9
|
+
const snackbar = document.querySelector("wm-snackbar");
|
|
10
|
+
let newSnacks = JSON.parse(snackbar.notifications).filter((snack) => +snack.id !== +ev.detail.id);
|
|
11
|
+
snackbar.notifications = JSON.stringify(newSnacks);
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
afterEach(async () => {
|
|
16
|
+
jest.clearAllTimers();
|
|
17
|
+
});
|
|
18
|
+
// RENDER
|
|
19
|
+
it("it displays a snackbar when it receives a notification", async () => {
|
|
20
|
+
//generate snackbar
|
|
21
|
+
const button = await page.find("wm-button");
|
|
22
|
+
button.click(); //perform action that generates a notification
|
|
23
|
+
await page.waitForChanges();
|
|
24
|
+
const snackbar = await page.find("wm-snackbar >>> .content-wrapper");
|
|
25
|
+
expect(snackbar).not.toBeNull();
|
|
26
|
+
});
|
|
27
|
+
it("it displays multiple snackbars when it receives more than one notification", async () => {
|
|
28
|
+
//generate snackbars
|
|
29
|
+
const button = await page.find("wm-button");
|
|
30
|
+
button.click();
|
|
31
|
+
await page.waitForChanges();
|
|
32
|
+
button.click();
|
|
33
|
+
await page.waitForChanges();
|
|
34
|
+
const snackbars = await page.findAll("wm-snackbar >>> .content-wrapper");
|
|
35
|
+
expect(snackbars.length).toBe(2);
|
|
36
|
+
});
|
|
37
|
+
it("dismisses the snackbar after 20 seconds if the user is clicking and not tabbing", async () => {
|
|
38
|
+
//generate snackbar
|
|
39
|
+
const snackExpired = await page.spyOnEvent("wmSnackbarSnackFinished");
|
|
40
|
+
const button = await page.find("wm-button");
|
|
41
|
+
button.click();
|
|
42
|
+
await page.waitForChanges();
|
|
43
|
+
let snack = await page.find("wm-snackbar >>> .content-wrapper");
|
|
44
|
+
expect(snack).not.toBeNull();
|
|
45
|
+
await new Promise((resolve) => {
|
|
46
|
+
setTimeout(() => {
|
|
47
|
+
resolve("");
|
|
48
|
+
}, 21000);
|
|
49
|
+
});
|
|
50
|
+
snack = await page.find("wm-snackbar >>> .content-wrapper");
|
|
51
|
+
expect(snack).toBeNull();
|
|
52
|
+
expect(snackExpired).toHaveReceivedEventDetail({
|
|
53
|
+
id: "3",
|
|
54
|
+
message: "You did something",
|
|
55
|
+
link: "Undo",
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
it("dismisses the snackbar when the close button is clicked", async () => {
|
|
59
|
+
//generate snackbar
|
|
60
|
+
const triggerButton = await page.find("wm-button");
|
|
61
|
+
triggerButton.click();
|
|
62
|
+
await page.waitForChanges();
|
|
63
|
+
//press close button
|
|
64
|
+
const closeButton = await page.find("wm-snackbar >>> button");
|
|
65
|
+
closeButton.click();
|
|
66
|
+
await page.waitForChanges();
|
|
67
|
+
const snackbar = await page.find("wm-snackbar >>> .content-wrapper");
|
|
68
|
+
expect(snackbar).toBeNull();
|
|
69
|
+
});
|
|
70
|
+
//ACCESSIBILITY
|
|
71
|
+
it("renders an aria-live region", async () => {
|
|
72
|
+
const element = await page.find("wm-snackbar >>> #wm-live-region-snack");
|
|
73
|
+
expect(element).toEqualAttribute("aria-live", "polite");
|
|
74
|
+
});
|
|
75
|
+
it("focuses the action link in snackbar if the user is tabbing", async () => {
|
|
76
|
+
//generate snackbar
|
|
77
|
+
await page.keyboard.press("Tab");
|
|
78
|
+
await page.keyboard.press("Enter");
|
|
79
|
+
await page.waitForChanges();
|
|
80
|
+
const focusedElId = await page.evaluate(() => document.activeElement.shadowRoot.activeElement.id);
|
|
81
|
+
const link = await page.find("wm-snackbar >>> .link");
|
|
82
|
+
expect(focusedElId).toBe(link.id);
|
|
83
|
+
});
|
|
84
|
+
it("dismisses the snackbar when enter is pressed on close button and returns focus to last active element before snackbar was created", async () => {
|
|
85
|
+
//generate snackbar
|
|
86
|
+
await page.keyboard.press("Tab");
|
|
87
|
+
await page.keyboard.press("Enter");
|
|
88
|
+
await page.waitForChanges();
|
|
89
|
+
//press close button
|
|
90
|
+
await page.keyboard.press("Tab");
|
|
91
|
+
await page.keyboard.press("Enter");
|
|
92
|
+
await page.waitForChanges();
|
|
93
|
+
const snackbar = await page.find("wm-snackbar >>> .content-wrapper");
|
|
94
|
+
expect(snackbar).toBeNull();
|
|
95
|
+
const focusedElId = await page.evaluate(() => document.activeElement.id);
|
|
96
|
+
expect(focusedElId).toBe("create-snack");
|
|
97
|
+
});
|
|
98
|
+
it("dismisses the snackbar if the user tabs out of it and it returns focus to last active element before snackbar was created", async () => {
|
|
99
|
+
//generate snackbar
|
|
100
|
+
await page.keyboard.press("Tab");
|
|
101
|
+
await page.keyboard.press("Enter");
|
|
102
|
+
await page.waitForChanges();
|
|
103
|
+
//tab out
|
|
104
|
+
await page.keyboard.press("Tab");
|
|
105
|
+
await page.keyboard.press("Tab");
|
|
106
|
+
await page.waitForChanges();
|
|
107
|
+
const snackbar = await page.find("wm-snackbar >>> .content-wrapper");
|
|
108
|
+
expect(snackbar).toBeNull();
|
|
109
|
+
const focusedElId = await page.evaluate(() => document.activeElement.id);
|
|
110
|
+
expect(focusedElId).toBe("create-snack");
|
|
111
|
+
});
|
|
112
|
+
});
|
|
@@ -150,11 +150,11 @@ export class Snackbar {
|
|
|
150
150
|
}, onKeyDown: (ev) => ev.key === "Enter" && this.snackLinkClicked(notification) }, h("span", { "aria-hidden": "true" }, notification.link), notification.newWindow && h("div", { class: "svg-icon svg-open-in-new" })))), h("button", { id: `close-button-${notification.id}`, "aria-label": "Close this notification", class: "closesnack", tabindex: notification.link ? 0 : -1, onClick: () => this.snackDismissed(notification), onMouseEnter: (ev) => showTooltip("bottom", ev.target, globalMessages.close), onMouseLeave: () => hideTooltip(), onFocus: (ev) => this.isTabbing && showTooltip("bottom", ev.target, globalMessages.close), onBlur: () => hideTooltip() }, h("div", { class: "svg-icon svg-close" }))), h("div", { class: "sr-only", tabindex: notification.link ? 0 : -1, onFocus: () => notification.link && this.snackDismissed(notification) })))));
|
|
151
151
|
}
|
|
152
152
|
render() {
|
|
153
|
-
return (h(Host,
|
|
153
|
+
return (h(Host, null, h("div", { ref: (el) => (this.snackAreaEl = el), class: {
|
|
154
154
|
"list-wrapper": true,
|
|
155
155
|
"user-is-tabbing": this.isTabbing,
|
|
156
156
|
empty: this.parsedNotifications.length == 0,
|
|
157
|
-
} }, this.renderSnackbars()), h("div", {
|
|
157
|
+
} }, this.renderSnackbars()), h("div", { class: "sr-only", "aria-live": "polite", "aria-atomic": "false", id: `wm-live-region-${this.uid}`, ref: (el) => (this.liveRegionEl = el) }, this.announcement)));
|
|
158
158
|
}
|
|
159
159
|
static get is() { return "wm-snackbar"; }
|
|
160
160
|
static get encapsulation() { return "shadow"; }
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { newSpecPage } from "@stencil/core/testing";
|
|
2
|
+
jest.mock("../../global/functions");
|
|
3
|
+
import { Snackbar } from "./wm-snackbar";
|
|
4
|
+
describe("wm-snackbar", () => {
|
|
5
|
+
it("builds", async () => {
|
|
6
|
+
const comp = await newSpecPage({ components: [Snackbar], html: "<wm-snackbar><wm-snackbar>" });
|
|
7
|
+
expect(comp.root).toMatchSnapshot();
|
|
8
|
+
});
|
|
9
|
+
});
|
|
@@ -40,7 +40,7 @@ export class TabItem {
|
|
|
40
40
|
"background-size": `calc(100% - ${bkgSize}${units}) 3px`,
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
|
-
return (h(Host, {
|
|
43
|
+
return (h(Host, { role: "presentation" }, h("li", { class: "tab-item", role: "presentation" }, h("a", { class: `tab ${classes}`, style: styles, role: "tab", ref: (el) => (this.linkEl = el), onClick: this.tabClicked, id: `tab-link-${this.tabId}`, onKeyDown: (ev) => this.tabPressed(ev), "aria-selected": this.selected ? "true" : "false", tabindex: this.selected ? 0 : -1 }, h("slot", null)))));
|
|
44
44
|
}
|
|
45
45
|
static get is() { return "wm-tab-item"; }
|
|
46
46
|
static get encapsulation() { return "shadow"; }
|