@watermarkinsights/ripple 5.3.0 → 5.3.1-1
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-86227b27.js → chartFunctions-0238043b.js} +3 -3
- package/dist/cjs/{functions-05e7ad5a.js → functions-3be85c6d.js} +7 -104
- package/dist/{esm/app-globals-4021eaa9.js → cjs/global-fd87ec47.js} +2 -7
- package/dist/cjs/index-e86c28b6.js +2641 -0
- package/dist/cjs/{intl-2b550151.js → intl-567eb9d8.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/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 +6 -7
- package/dist/cjs/wm-date-range.cjs.entry.js +7 -8
- package/dist/cjs/wm-datepicker.cjs.entry.js +7 -8
- 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-footer.cjs.entry.js +3 -4
- package/dist/cjs/wm-modal-header.cjs.entry.js +5 -6
- package/dist/cjs/wm-modal.cjs.entry.js +5 -6
- 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-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 +8 -8
- 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 +1 -1
- 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 +1 -1
- 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 +12 -16
- 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 +12 -16
- package/dist/collection/components/datepickers/wm-datepicker.spec.js +21 -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-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-option/wm-option.e2e.js +22 -0
- package/dist/collection/components/wm-option/wm-option.js +1 -1
- package/dist/collection/components/wm-option/wm-option.spec.js +63 -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-select/wm-select.e2e.js +521 -0
- package/dist/collection/components/wm-select/wm-select.js +2 -2
- package/dist/collection/components/wm-select/wm-select.spec.js +271 -0
- package/dist/collection/components/wm-snackbar/wm-snackbar.css +7 -3
- package/dist/collection/components/wm-snackbar/wm-snackbar.e2e.js +112 -0
- package/dist/collection/components/wm-snackbar/wm-snackbar.js +3 -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-da985798.js → chartFunctions-036fdb89.js} +3 -3
- package/dist/esm/{functions-25781571.js → functions-46843ea0.js} +8 -105
- package/dist/{cjs/app-globals-7e0e393a.js → esm/global-e277c5f6.js} +1 -10
- package/dist/esm/index-558b5a82.js +2610 -0
- package/dist/esm/{intl-df3d34d1.js → intl-8b8740b9.js} +1 -1
- package/dist/esm/loader.js +4 -5
- package/dist/esm/polyfills/core-js.js +0 -0
- package/dist/esm/polyfills/dom.js +0 -0
- package/dist/esm/polyfills/es5-html-element.js +0 -0
- package/dist/esm/polyfills/index.js +0 -0
- package/dist/esm/polyfills/system.js +0 -0
- 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/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 +6 -7
- package/dist/esm/wm-date-range.entry.js +7 -8
- package/dist/esm/wm-datepicker.entry.js +7 -8
- 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-footer.entry.js +3 -4
- package/dist/esm/wm-modal-header.entry.js +5 -6
- package/dist/esm/wm-modal.entry.js +5 -6
- package/dist/esm/wm-navigation_3.entry.js +10 -13
- package/dist/esm/wm-navigator.entry.js +3 -4
- 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 +8 -8
- 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-da985798.js → chartFunctions-036fdb89.js} +1 -1
- package/dist/esm-es5/functions-46843ea0.js +1 -0
- package/dist/esm-es5/global-e277c5f6.js +1 -0
- package/dist/esm-es5/index-558b5a82.js +1 -0
- package/dist/esm-es5/{intl-df3d34d1.js → intl-8b8740b9.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/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-footer.entry.js +1 -1
- package/dist/esm-es5/wm-modal-header.entry.js +1 -1
- package/dist/esm-es5/wm-modal.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-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-09a31f0c.entry.js +1 -0
- package/dist/ripple/p-0aa17cac.entry.js +1 -0
- package/dist/ripple/p-0dc51fad.entry.js +1 -0
- package/dist/ripple/p-0ea8609b.system.entry.js +1 -0
- package/dist/ripple/p-126939fb.system.js +1 -0
- package/dist/ripple/{p-a9d89ac8.system.js → p-1ac66a15.system.js} +1 -1
- package/dist/ripple/p-240124b0.system.entry.js +1 -0
- package/dist/ripple/p-26fbc7f5.system.entry.js +1 -0
- package/dist/ripple/p-294b38ca.system.entry.js +1 -0
- package/dist/ripple/p-2b05bf05.entry.js +1 -0
- package/dist/ripple/{p-72bdebb5.system.entry.js → p-2ba7e68e.system.entry.js} +1 -1
- package/dist/ripple/p-311923b2.system.entry.js +1 -0
- package/dist/ripple/p-3183bba8.entry.js +1 -0
- package/dist/ripple/p-31976813.entry.js +1 -0
- package/dist/ripple/{p-823d7b4e.system.entry.js → p-32bf3f5b.system.entry.js} +1 -1
- package/dist/ripple/p-33679b9d.entry.js +1 -0
- package/dist/ripple/p-34b5830f.system.js +1 -0
- package/dist/ripple/p-3568472c.entry.js +1 -0
- package/dist/ripple/p-359d45dc.entry.js +1 -0
- package/dist/ripple/p-36e7e63a.system.entry.js +1 -0
- package/dist/ripple/{p-67a7f0b0.entry.js → p-3a44e1c8.entry.js} +1 -1
- package/dist/ripple/{p-672ae2cb.entry.js → p-42d1c301.entry.js} +1 -1
- package/dist/ripple/{p-041e579b.entry.js → p-45abd8fe.entry.js} +1 -1
- package/dist/ripple/{p-13b1d775.entry.js → p-48e09589.entry.js} +1 -1
- package/dist/ripple/p-4b184d22.entry.js +1 -0
- package/dist/ripple/p-4e56f3f5.system.entry.js +1 -0
- package/dist/ripple/{p-9f06ed3b.system.entry.js → p-5029fcd8.system.entry.js} +1 -1
- package/dist/ripple/p-568c595f.js +2 -0
- package/dist/ripple/p-591918a4.entry.js +1 -0
- package/dist/ripple/{p-bee8ab6e.entry.js → p-624a2812.entry.js} +1 -1
- package/dist/ripple/p-62a8f09c.entry.js +1 -0
- package/dist/ripple/{p-043901ab.system.entry.js → p-65d26233.system.entry.js} +1 -1
- package/dist/ripple/p-75ba63ba.entry.js +1 -0
- package/dist/ripple/{p-ac40417b.system.entry.js → p-79106e23.system.entry.js} +1 -1
- package/dist/ripple/p-7e6f5a1e.system.entry.js +1 -0
- package/dist/ripple/p-8029af07.system.entry.js +1 -0
- package/dist/ripple/{p-8e72de50.entry.js → p-8159cdf5.entry.js} +1 -1
- package/dist/ripple/p-822618d7.entry.js +1 -0
- package/dist/ripple/p-86d655fb.system.entry.js +1 -0
- package/dist/ripple/p-884294c6.entry.js +1 -0
- package/dist/ripple/{p-cd0cc88d.entry.js → p-88ebddd7.entry.js} +1 -1
- package/dist/ripple/p-8fbddb6c.system.entry.js +1 -0
- package/dist/ripple/p-902a54c5.entry.js +1 -0
- package/dist/ripple/p-905dd4da.system.entry.js +1 -0
- package/dist/ripple/p-9d82aeff.js +1 -0
- package/dist/ripple/{p-aab56a37.system.entry.js → p-a152cf3a.system.entry.js} +1 -1
- package/dist/ripple/{p-468a0218.entry.js → p-a37cf34a.entry.js} +1 -1
- package/dist/ripple/p-a8524a48.entry.js +1 -0
- package/dist/ripple/p-a966f716.system.js +1 -0
- package/dist/ripple/p-ab8d78cc.system.js +2 -0
- package/dist/ripple/{p-6fe35d1e.system.entry.js → p-b7ead395.system.entry.js} +1 -1
- package/dist/ripple/p-bc5e9d24.entry.js +1 -0
- package/dist/ripple/p-c4b9d46d.entry.js +1 -0
- package/dist/ripple/p-c885c7f9.entry.js +1 -0
- package/dist/ripple/p-c91b10f3.system.entry.js +1 -0
- package/dist/ripple/p-c9543950.system.entry.js +1 -0
- package/dist/ripple/p-cacfbaf1.system.entry.js +1 -0
- package/dist/ripple/{p-2e3728f1.entry.js → p-cc4a429b.entry.js} +1 -1
- package/dist/ripple/p-ce9a8bd1.entry.js +1 -0
- package/dist/ripple/p-d24882a7.system.entry.js +1 -0
- package/dist/ripple/p-d33d6e96.system.entry.js +1 -0
- package/dist/ripple/{p-777b8ebc.system.js → p-d4b209ec.system.js} +1 -1
- package/dist/ripple/{p-f54e9ed0.js → p-d79fdf0b.js} +1 -1
- package/dist/ripple/{p-fcf76854.js → p-d837c1f5.js} +1 -1
- package/dist/ripple/{p-d93c51dd.system.entry.js → p-df1a11f1.system.entry.js} +1 -1
- package/dist/ripple/p-df2560f3.system.entry.js +1 -0
- package/dist/ripple/p-e3bcdde8.system.entry.js +1 -0
- package/dist/ripple/p-e3de5bbd.system.entry.js +1 -0
- package/dist/ripple/{p-ca35a8b7.system.entry.js → p-e7a64841.system.entry.js} +1 -1
- package/dist/ripple/p-e83a98d3.entry.js +1 -0
- package/dist/ripple/p-e995f7f0.js +1 -0
- package/dist/ripple/p-eaac6bcd.entry.js +1 -0
- package/dist/ripple/p-f67fd802.system.entry.js +1 -0
- package/dist/ripple/p-fe8d02c3.system.entry.js +1 -0
- package/dist/ripple/{p-b0c566b5.system.entry.js → p-ffb31979.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 -1851
- package/dist/esm/index-130e07bb.js +0 -1820
- package/dist/esm-es5/app-globals-4021eaa9.js +0 -1
- package/dist/esm-es5/functions-25781571.js +0 -1
- package/dist/esm-es5/index-130e07bb.js +0 -1
- package/dist/ripple/p-0af94825.entry.js +0 -1
- package/dist/ripple/p-0ff41567.system.entry.js +0 -1
- package/dist/ripple/p-13fc2164.entry.js +0 -1
- package/dist/ripple/p-155224a2.system.entry.js +0 -1
- package/dist/ripple/p-1f09134c.entry.js +0 -1
- package/dist/ripple/p-298c2675.entry.js +0 -1
- package/dist/ripple/p-2d619f83.entry.js +0 -1
- package/dist/ripple/p-31781d88.system.entry.js +0 -1
- package/dist/ripple/p-31d7ecf9.system.entry.js +0 -1
- package/dist/ripple/p-341ebafa.entry.js +0 -1
- package/dist/ripple/p-3423a9b6.system.entry.js +0 -1
- package/dist/ripple/p-376efca9.entry.js +0 -1
- package/dist/ripple/p-3b5f4364.system.entry.js +0 -1
- package/dist/ripple/p-418ed08c.system.entry.js +0 -1
- package/dist/ripple/p-4670ccb4.system.js +0 -1
- package/dist/ripple/p-488e1690.entry.js +0 -1
- package/dist/ripple/p-4b7a444c.system.entry.js +0 -1
- package/dist/ripple/p-4baaf026.entry.js +0 -1
- package/dist/ripple/p-56766bb2.entry.js +0 -1
- package/dist/ripple/p-5caaf651.system.entry.js +0 -1
- package/dist/ripple/p-5ece78e5.system.entry.js +0 -1
- package/dist/ripple/p-691ecf14.entry.js +0 -1
- package/dist/ripple/p-6d0e5159.system.entry.js +0 -1
- package/dist/ripple/p-6d56676e.system.entry.js +0 -1
- package/dist/ripple/p-7eab6bea.system.entry.js +0 -1
- package/dist/ripple/p-7fb95b89.entry.js +0 -1
- package/dist/ripple/p-85cbeb7d.system.entry.js +0 -1
- package/dist/ripple/p-88cfd58d.js +0 -1
- package/dist/ripple/p-8af06db6.system.entry.js +0 -1
- package/dist/ripple/p-8d075bcf.system.entry.js +0 -1
- package/dist/ripple/p-a62e7532.entry.js +0 -1
- package/dist/ripple/p-a70a261c.entry.js +0 -1
- package/dist/ripple/p-ad4529d2.entry.js +0 -1
- package/dist/ripple/p-b7307be6.system.entry.js +0 -1
- package/dist/ripple/p-bafefea3.js +0 -1
- package/dist/ripple/p-c2181de0.entry.js +0 -1
- package/dist/ripple/p-ca76dc92.entry.js +0 -1
- package/dist/ripple/p-cb33f410.system.js +0 -1
- package/dist/ripple/p-cef8a45b.system.js +0 -2
- package/dist/ripple/p-d5ba9de1.system.entry.js +0 -1
- package/dist/ripple/p-d5d04b09.system.js +0 -1
- package/dist/ripple/p-d9da0502.js +0 -2
- package/dist/ripple/p-db10990a.entry.js +0 -1
- package/dist/ripple/p-de0e138f.system.entry.js +0 -1
- package/dist/ripple/p-e2fe86a7.system.entry.js +0 -1
- package/dist/ripple/p-e85b1f40.entry.js +0 -1
- package/dist/ripple/p-ea0dfadf.system.entry.js +0 -1
- package/dist/ripple/p-eb14b354.entry.js +0 -1
- package/dist/ripple/p-f17fd62b.entry.js +0 -1
- package/dist/ripple/p-f836a5e8.entry.js +0 -1
- package/dist/ripple/p-fabe4ca4.entry.js +0 -1
- package/dist/ripple/p-fbaae34d.system.entry.js +0 -1
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { newSpecPage } from "@stencil/core/testing";
|
|
2
|
+
import { FileList } from "./wm-file-list";
|
|
3
|
+
import { File } from "../wm-file/wm-file";
|
|
4
|
+
// mock ResizeObserver
|
|
5
|
+
global.ResizeObserver = jest.fn().mockImplementation(() => ({
|
|
6
|
+
observe: jest.fn(),
|
|
7
|
+
unobserve: jest.fn(),
|
|
8
|
+
disconnect: jest.fn(),
|
|
9
|
+
}));
|
|
10
|
+
describe("wm-file-list", () => {
|
|
11
|
+
let page;
|
|
12
|
+
async function createPageHelper() {
|
|
13
|
+
return await newSpecPage({
|
|
14
|
+
components: [FileList, File],
|
|
15
|
+
html: `<wm-file-list id="filelist1">
|
|
16
|
+
<wm-file id="file1" name="File retrieved from server" type="pdf" last-updated="1/28/2020 5:29 PM" file-actions="preview download"></wm-file>
|
|
17
|
+
<wm-file id="file2" name="Second file" type="jpeg" last-updated="2/14/2019 7:21 AM" file-actions="preview download"></wm-file>
|
|
18
|
+
</wm-file-list>`,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
it("renders all files", async () => {
|
|
22
|
+
page = await createPageHelper();
|
|
23
|
+
await page.waitForChanges();
|
|
24
|
+
let fileEls = page.root.querySelectorAll("wm-file");
|
|
25
|
+
expect(fileEls.length).toBe(2);
|
|
26
|
+
expect(fileEls[0]).toEqualAttribute("id", "file1");
|
|
27
|
+
expect(fileEls[1]).toEqualAttribute("id", "file2");
|
|
28
|
+
});
|
|
29
|
+
it("passes on show-info to it's children wm-files", async () => {
|
|
30
|
+
page = await createPageHelper();
|
|
31
|
+
await page.waitForChanges();
|
|
32
|
+
// default (last-updated)
|
|
33
|
+
let fileEl = page.root.querySelector("wm-file");
|
|
34
|
+
expect(fileEl.showInfo).toBe("last-updated");
|
|
35
|
+
// size
|
|
36
|
+
page = await newSpecPage({
|
|
37
|
+
components: [FileList, File],
|
|
38
|
+
html: `<wm-file-list id="filelist1" show-info="size">
|
|
39
|
+
<wm-file id="file1" name="File retrieved from server" type="pdf" last-updated="1/28/2020 5:29 PM" file-actions="preview download"></wm-file>
|
|
40
|
+
<wm-file id="file2" name="Second file" type="jpeg" last-updated="2/14/2019 7:21 AM" file-actions="preview download"></wm-file>
|
|
41
|
+
</wm-file-list>`,
|
|
42
|
+
});
|
|
43
|
+
await page.waitForChanges();
|
|
44
|
+
fileEl = page.root.querySelector("wm-file");
|
|
45
|
+
expect(fileEl.showInfo).toBe("size");
|
|
46
|
+
// last-updated (specified)
|
|
47
|
+
page = await newSpecPage({
|
|
48
|
+
components: [FileList, File],
|
|
49
|
+
html: `<wm-file-list id="filelist1" show-info="last-updated">
|
|
50
|
+
<wm-file id="file1" name="File retrieved from server" type="pdf" last-updated="1/28/2020 5:29 PM" file-actions="preview download"></wm-file>
|
|
51
|
+
<wm-file id="file2" name="Second file" type="jpeg" last-updated="2/14/2019 7:21 AM" file-actions="preview download"></wm-file>
|
|
52
|
+
</wm-file-list>`,
|
|
53
|
+
});
|
|
54
|
+
await page.waitForChanges();
|
|
55
|
+
fileEl = page.root.querySelector("wm-file");
|
|
56
|
+
expect(fileEl.showInfo).toBe("last-updated");
|
|
57
|
+
// none
|
|
58
|
+
page = await newSpecPage({
|
|
59
|
+
components: [FileList, File],
|
|
60
|
+
html: `<wm-file-list id="filelist1" show-info="none">
|
|
61
|
+
<wm-file id="file1" name="File retrieved from server" type="pdf" last-updated="1/28/2020 5:29 PM" file-actions="preview download"></wm-file>
|
|
62
|
+
<wm-file id="file2" name="Second file" type="jpeg" last-updated="2/14/2019 7:21 AM" file-actions="preview download"></wm-file>
|
|
63
|
+
</wm-file-list>`,
|
|
64
|
+
});
|
|
65
|
+
await page.waitForChanges();
|
|
66
|
+
fileEl = page.root.querySelector("wm-file");
|
|
67
|
+
expect(fileEl.showInfo).toBe("none");
|
|
68
|
+
});
|
|
69
|
+
});
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import AxePuppeteer from "@axe-core/puppeteer";
|
|
2
|
+
import { newE2EPage } from "@stencil/core/testing";
|
|
3
|
+
describe("wm-input", () => {
|
|
4
|
+
// ts throws erroneous warning about vars being unused...
|
|
5
|
+
// @ts-ignore
|
|
6
|
+
let page, el, inputField;
|
|
7
|
+
beforeEach(async () => {
|
|
8
|
+
page = await newE2EPage();
|
|
9
|
+
await page.setContent(`<html lang='en'><head><title>Page</title></head><body><main><h1>Title</h1>
|
|
10
|
+
<wm-input label="input"></wm-input>
|
|
11
|
+
</main></body></html>`);
|
|
12
|
+
el = await page.find("wm-input");
|
|
13
|
+
inputField = await page.find("wm-input >>> input");
|
|
14
|
+
await page.waitForChanges();
|
|
15
|
+
});
|
|
16
|
+
it("passes Axe checks", async () => {
|
|
17
|
+
const results = await new AxePuppeteer(page).analyze();
|
|
18
|
+
expect(results.violations.length).toBe(0);
|
|
19
|
+
});
|
|
20
|
+
it("updates input value when changed programatically", async () => {
|
|
21
|
+
el.setProperty("value", "33245");
|
|
22
|
+
await page.waitForChanges();
|
|
23
|
+
const value = await el.getProperty("value");
|
|
24
|
+
expect(value).toBe("33245");
|
|
25
|
+
});
|
|
26
|
+
it("updates value prop when user types", async () => {
|
|
27
|
+
await inputField.type("example");
|
|
28
|
+
await page.waitForChanges();
|
|
29
|
+
const value = await el.getProperty("value");
|
|
30
|
+
expect(value).toBe("example");
|
|
31
|
+
});
|
|
32
|
+
});
|
|
@@ -101,7 +101,7 @@ export class Input {
|
|
|
101
101
|
: `info error`;
|
|
102
102
|
}
|
|
103
103
|
render() {
|
|
104
|
-
return (h("div", {
|
|
104
|
+
return (h("div", { class: `wrapper label-${this.labelPosition} ${this.errorMessage ? "invalid" : ""}`, ref: (el) => (this.inputWrapperEl = el) }, h("div", { class: "label-wrapper" }, h("label", { htmlFor: "inputfield", class: "label" }, this.label, this.characterLimit && (h("span", { class: "sr-only" }, " ", globalMessages.getCharacterLimit(this.characterLimit))), this.requiredField && (h("span", { class: "required", "aria-hidden": "true" }, "*")))), h("div", { class: "inner-wrapper" }, h("div", { class: "text-after-wrapper" }, h("div", { class: `inputfield-wrapper ${this.isDisabled ? "disabled" : ""}`, style: this.getInputWidth() }, this.symbolBefore && (h("span", { class: "symbol", id: "symbol-before" }, this.symbolBefore)), h("input", { ref: (el) => (this.inputEl = el), id: "inputfield", disabled: this.isDisabled, "aria-describedby": this.descriptors(), onInput: (ev) => this.handleInput(ev), onKeyDown: (ev) => this.handleKeyDown(ev), onBlur: () => this.handleBlur(), onFocus: () => this.handleFocus(), placeholder: this.placeholder, autocomplete: "off", "aria-required": this.requiredField ? "true" : null, maxLength: this.characterLimit || undefined, type: this.type, step: this.step, max: this.max, min: this.min, value: this.el.value }), this.symbolAfter && (h("span", { class: "symbol", id: "symbol-after" }, this.symbolAfter)), this.characterLimit && typeof this.characterLimit === "number" ? (h("div", { class: "character-count" }, this.charCount, "/", this.characterLimit)) : ("")), this.textAfter && (h("span", { class: "text-after", id: "text-after" }, this.textAfter))), this.info && (h("div", { id: "info", class: "info" }, this.info)), h("div", { id: "error", class: "error-message" }, this.errorMessage), h("div", { class: "sr-only", "aria-live": "polite", "aria-atomic": "true", ref: (el) => (this.liveRegionEl = el) }, this.announcement))));
|
|
105
105
|
}
|
|
106
106
|
static get is() { return "wm-input"; }
|
|
107
107
|
static get encapsulation() { return "shadow"; }
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { newSpecPage } from "@stencil/core/testing";
|
|
2
|
+
import { Input } from "./wm-input";
|
|
3
|
+
describe("input", () => {
|
|
4
|
+
let page;
|
|
5
|
+
beforeEach(async () => {
|
|
6
|
+
page = await newSpecPage({
|
|
7
|
+
components: [Input],
|
|
8
|
+
html: "<wm-input label='input'></wm-input>",
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
it("has the right aria attributes", async () => {
|
|
12
|
+
let inputField = await page.root.shadowRoot.querySelector("input");
|
|
13
|
+
// input field is described by help text
|
|
14
|
+
expect(inputField).toEqualAttribute("aria-describedby", "info error");
|
|
15
|
+
});
|
|
16
|
+
it("inputfield is disabled when the prop is passed", async () => {
|
|
17
|
+
await page.setContent(`<wm-input label="input" disabled></wm-input>`);
|
|
18
|
+
let inputField = await page.root.shadowRoot.querySelector("input");
|
|
19
|
+
expect(inputField).toHaveAttribute("disabled");
|
|
20
|
+
});
|
|
21
|
+
it("handles keydown", () => {
|
|
22
|
+
// handleKeyDown
|
|
23
|
+
const component = new Input();
|
|
24
|
+
component.characterLimit = 10;
|
|
25
|
+
let event = { key: "", ctrlKey: false, metaKey: false, altKey: false };
|
|
26
|
+
let inputEl = document.createElement("input");
|
|
27
|
+
// @ts-ignore
|
|
28
|
+
component.inputEl = inputEl;
|
|
29
|
+
const mockAnnounce = (component.announce = jest.fn());
|
|
30
|
+
const mockGenerateCharacterLimiWarning = (component.generateCharacterLimitWarning = jest.fn());
|
|
31
|
+
function resetKeys() {
|
|
32
|
+
event.key = "";
|
|
33
|
+
event.ctrlKey = false;
|
|
34
|
+
event.metaKey = false;
|
|
35
|
+
event.altKey = false;
|
|
36
|
+
//@ts-ignore
|
|
37
|
+
component.inputEl.value = "";
|
|
38
|
+
}
|
|
39
|
+
// no modifiers, empty key
|
|
40
|
+
resetKeys();
|
|
41
|
+
component.handleKeyDown(event);
|
|
42
|
+
expect(mockAnnounce).toHaveBeenCalledTimes(0);
|
|
43
|
+
expect(mockGenerateCharacterLimiWarning).toHaveBeenCalledTimes(0);
|
|
44
|
+
jest.clearAllMocks();
|
|
45
|
+
// no modifiers, wrong key
|
|
46
|
+
resetKeys();
|
|
47
|
+
event.key = "ArrowDown";
|
|
48
|
+
component.handleKeyDown(event);
|
|
49
|
+
expect(mockAnnounce).toHaveBeenCalledTimes(0);
|
|
50
|
+
expect(mockGenerateCharacterLimiWarning).toHaveBeenCalledTimes(0);
|
|
51
|
+
jest.clearAllMocks();
|
|
52
|
+
// no modifiers, right key, not at limit
|
|
53
|
+
resetKeys();
|
|
54
|
+
event.key = "a";
|
|
55
|
+
component.handleKeyDown(event);
|
|
56
|
+
expect(mockAnnounce).toHaveBeenCalledTimes(0);
|
|
57
|
+
expect(mockGenerateCharacterLimiWarning).toHaveBeenCalledTimes(0);
|
|
58
|
+
jest.clearAllMocks();
|
|
59
|
+
// no modifiers, right key, at limit
|
|
60
|
+
resetKeys();
|
|
61
|
+
//@ts-ignore
|
|
62
|
+
component.inputEl.value = "1234567890";
|
|
63
|
+
event.key = "a";
|
|
64
|
+
component.handleKeyDown(event);
|
|
65
|
+
expect(mockAnnounce).toHaveBeenCalledTimes(1);
|
|
66
|
+
expect(mockGenerateCharacterLimiWarning).toHaveBeenCalledTimes(1);
|
|
67
|
+
jest.clearAllMocks();
|
|
68
|
+
// no modifiers, right key, above limit
|
|
69
|
+
resetKeys();
|
|
70
|
+
//@ts-ignore
|
|
71
|
+
component.inputEl.value = "12345678901234567890";
|
|
72
|
+
event.key = "a";
|
|
73
|
+
component.handleKeyDown(event);
|
|
74
|
+
expect(mockAnnounce).toHaveBeenCalledTimes(1);
|
|
75
|
+
expect(mockGenerateCharacterLimiWarning).toHaveBeenCalledTimes(1);
|
|
76
|
+
jest.clearAllMocks();
|
|
77
|
+
// ctrl modifier, right key, above limit
|
|
78
|
+
resetKeys();
|
|
79
|
+
//@ts-ignore
|
|
80
|
+
component.inputEl.value = "12345678901234567890";
|
|
81
|
+
event.key = "a";
|
|
82
|
+
event.ctrlKey = true;
|
|
83
|
+
component.handleKeyDown(event);
|
|
84
|
+
expect(mockAnnounce).toHaveBeenCalledTimes(0);
|
|
85
|
+
expect(mockGenerateCharacterLimiWarning).toHaveBeenCalledTimes(0);
|
|
86
|
+
jest.clearAllMocks();
|
|
87
|
+
// meta modifier, right key, above limit
|
|
88
|
+
resetKeys();
|
|
89
|
+
//@ts-ignore
|
|
90
|
+
component.inputEl.value = "12345678901234567890";
|
|
91
|
+
event.key = "a";
|
|
92
|
+
event.metaKey = true;
|
|
93
|
+
component.handleKeyDown(event);
|
|
94
|
+
expect(mockAnnounce).toHaveBeenCalledTimes(0);
|
|
95
|
+
expect(mockGenerateCharacterLimiWarning).toHaveBeenCalledTimes(0);
|
|
96
|
+
jest.clearAllMocks();
|
|
97
|
+
// alt modifier, right key, above limit
|
|
98
|
+
resetKeys();
|
|
99
|
+
//@ts-ignore
|
|
100
|
+
component.inputEl.value = "12345678901234567890";
|
|
101
|
+
event.key = "a";
|
|
102
|
+
event.altKey = true;
|
|
103
|
+
component.handleKeyDown(event);
|
|
104
|
+
expect(mockAnnounce).toHaveBeenCalledTimes(0);
|
|
105
|
+
expect(mockGenerateCharacterLimiWarning).toHaveBeenCalledTimes(0);
|
|
106
|
+
jest.clearAllMocks();
|
|
107
|
+
jest.restoreAllMocks();
|
|
108
|
+
});
|
|
109
|
+
it("handles input", () => {
|
|
110
|
+
// handleInput
|
|
111
|
+
const component = new Input();
|
|
112
|
+
let inputEl = {};
|
|
113
|
+
let event = { target: inputEl };
|
|
114
|
+
const mockAnnounce = (component.announce = jest.fn());
|
|
115
|
+
const mockGenerateCharacterLimitWarning = (component.generateCharacterLimitWarning = jest.fn(() => "announcement"));
|
|
116
|
+
inputEl.value = "fish";
|
|
117
|
+
event.target = inputEl;
|
|
118
|
+
//@ts-ignore
|
|
119
|
+
component.handleInput(event);
|
|
120
|
+
expect(component.value).toBe("fish");
|
|
121
|
+
expect(component.charCount).toBe(4);
|
|
122
|
+
expect(mockAnnounce).toHaveBeenCalledTimes(0);
|
|
123
|
+
expect(mockGenerateCharacterLimitWarning).toHaveBeenCalledTimes(0);
|
|
124
|
+
component.characterLimit = 10;
|
|
125
|
+
inputEl.value = "two fish";
|
|
126
|
+
event.target = inputEl;
|
|
127
|
+
//@ts-ignore
|
|
128
|
+
component.handleInput(event);
|
|
129
|
+
expect(component.value).toBe("two fish");
|
|
130
|
+
expect(component.charCount).toBe(8);
|
|
131
|
+
expect(mockAnnounce).toHaveBeenCalledTimes(1);
|
|
132
|
+
expect(mockAnnounce).toHaveBeenCalledWith("announcement");
|
|
133
|
+
expect(mockGenerateCharacterLimitWarning).toHaveBeenCalledTimes(1);
|
|
134
|
+
expect(mockGenerateCharacterLimitWarning).toHaveBeenCalledWith(8, 10);
|
|
135
|
+
jest.resetAllMocks();
|
|
136
|
+
});
|
|
137
|
+
it("updates classes on focus", () => {
|
|
138
|
+
const component = new Input();
|
|
139
|
+
const divEl = document.createElement("div");
|
|
140
|
+
//@ts-ignore
|
|
141
|
+
component.inputWrapperEl = divEl;
|
|
142
|
+
//@ts-ignore
|
|
143
|
+
expect(component.inputWrapperEl).not.toHaveClass("focus");
|
|
144
|
+
component.handleFocus();
|
|
145
|
+
//@ts-ignore
|
|
146
|
+
expect(component.inputWrapperEl).toHaveClass("focus");
|
|
147
|
+
});
|
|
148
|
+
it("updates the live region announcement", () => {
|
|
149
|
+
// announce
|
|
150
|
+
const component = new Input();
|
|
151
|
+
let divEl = document.createElement("div");
|
|
152
|
+
//@ts-ignore
|
|
153
|
+
component.liveRegionEl = divEl;
|
|
154
|
+
component.announce("Message");
|
|
155
|
+
expect(component.announcement).toBe("Message");
|
|
156
|
+
//@ts-ignore
|
|
157
|
+
component.liveRegionEl.textContent = "Message";
|
|
158
|
+
component.announce("Message");
|
|
159
|
+
expect(component.announcement).toBe("Message" + "\u00A0");
|
|
160
|
+
});
|
|
161
|
+
it("generates the appropriate character limit warning", () => {
|
|
162
|
+
// generateCharacterLimitWarning
|
|
163
|
+
const component = new Input();
|
|
164
|
+
expect(component.generateCharacterLimitWarning(0, 10)).toBe("0 of 10 characters entered.");
|
|
165
|
+
expect(component.generateCharacterLimitWarning(5, 8)).toBe("5 of 8 characters entered.");
|
|
166
|
+
expect(component.generateCharacterLimitWarning(8, 8)).toBe("8 of 8 characters entered. No additional characters will be entered.");
|
|
167
|
+
});
|
|
168
|
+
it("sets input to required", async () => {
|
|
169
|
+
await page.setContent(`<wm-input label='input' required-field='true'></wm-input>`);
|
|
170
|
+
const input = await page.root.shadowRoot.querySelector("input");
|
|
171
|
+
expect(input).toEqualAttribute("aria-required", "true");
|
|
172
|
+
});
|
|
173
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { newE2EPage } from "@stencil/core/testing";
|
|
2
|
+
describe("wm-menuitem", () => {
|
|
3
|
+
let page;
|
|
4
|
+
beforeEach(async () => {
|
|
5
|
+
page = await newE2EPage();
|
|
6
|
+
await page.setContent(`<html lang='en'><head><title>Page</title></head><body><main><h1>Title</h1>
|
|
7
|
+
<wm-action-menu id='menu' tooltip="menu name"><wm-menuitem id='first' disabled onClick='action()'>First action</wm-menuitem><wm-menuitem id='second'>Second action</wm-menuitem><wm-menuitem id='third'>Third action</wm-menuitem></wm-action-menu>
|
|
8
|
+
<script>function action() {document.getElementById('second').innerHTML = 'Changed text'}</script></main></body></html>`);
|
|
9
|
+
});
|
|
10
|
+
it("renders", async () => {
|
|
11
|
+
const element = await page.find("wm-menuitem");
|
|
12
|
+
expect(element).not.toBeNull();
|
|
13
|
+
});
|
|
14
|
+
it("prevents action on disabled item", async () => {
|
|
15
|
+
await page.keyboard.press("Tab");
|
|
16
|
+
await page.keyboard.press("Enter"); // open popup
|
|
17
|
+
await page.waitForChanges();
|
|
18
|
+
await page.keyboard.press("Enter");
|
|
19
|
+
await page.waitForChanges();
|
|
20
|
+
let changedMenuitem = await page.find("wm-menuitem#second");
|
|
21
|
+
expect(changedMenuitem.innerHTML).toEqual("Second action");
|
|
22
|
+
});
|
|
23
|
+
});
|
|
@@ -88,7 +88,7 @@ export class Menuitem {
|
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
render() {
|
|
91
|
-
return (h(Host, {
|
|
91
|
+
return (h(Host, { tabindex: -1, role: "menuitem", "aria-disabled": this.disabled ? "true" : null }, h("div", { class: "wrapper", "aria-disabled": this.disabled ? "true" : null }, h("span", { ref: (el) => (this.iconEl = el) }), this.el.textContent, this.description ? h("div", { class: "description" }, this.description) : "")));
|
|
92
92
|
}
|
|
93
93
|
static get is() { return "wm-menuitem"; }
|
|
94
94
|
static get encapsulation() { return "shadow"; }
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { newSpecPage } from "@stencil/core/testing";
|
|
2
|
+
import { Menuitem } from "./wm-menuitem";
|
|
3
|
+
describe("wm-menuitem", () => {
|
|
4
|
+
it("builds", async () => {
|
|
5
|
+
const comp = await newSpecPage({
|
|
6
|
+
components: [Menuitem],
|
|
7
|
+
html: "<wm-menuitem><wm-menuitem>",
|
|
8
|
+
});
|
|
9
|
+
expect(comp.root).toMatchSnapshot();
|
|
10
|
+
});
|
|
11
|
+
it("handles disabled onClick function", async () => {
|
|
12
|
+
const page = await newSpecPage({
|
|
13
|
+
components: [Menuitem],
|
|
14
|
+
html: "<wm-menuitem><wm-menuitem>",
|
|
15
|
+
});
|
|
16
|
+
const menuItem = page.root;
|
|
17
|
+
const onClickFunc = () => console.log("Message");
|
|
18
|
+
menuItem.onclick = onClickFunc;
|
|
19
|
+
expect(menuItem.onclick).toEqual(onClickFunc);
|
|
20
|
+
menuItem.disabled = true;
|
|
21
|
+
expect(menuItem.onclick).toBe(null);
|
|
22
|
+
menuItem.disabled = false;
|
|
23
|
+
expect(menuItem.onclick).toEqual(onClickFunc);
|
|
24
|
+
});
|
|
25
|
+
it("renders description if prop is present", async () => {
|
|
26
|
+
const page = await newSpecPage({
|
|
27
|
+
components: [Menuitem],
|
|
28
|
+
html: "<wm-menuitem description='Description here'><wm-menuitem>",
|
|
29
|
+
});
|
|
30
|
+
const descriptionEl = page.root.shadowRoot.querySelector(".description");
|
|
31
|
+
expect(descriptionEl === null || descriptionEl === void 0 ? void 0 : descriptionEl.textContent).toBe("Description here");
|
|
32
|
+
});
|
|
33
|
+
describe("error throwing", () => {
|
|
34
|
+
it("throws error when description is over character limit", async () => {
|
|
35
|
+
const mockFunc = jest.fn();
|
|
36
|
+
console.error = mockFunc;
|
|
37
|
+
const description = "q".repeat(200);
|
|
38
|
+
await newSpecPage({
|
|
39
|
+
components: [Menuitem],
|
|
40
|
+
html: `<wm-menuitem description='${description}'></wm-menuitem>`,
|
|
41
|
+
});
|
|
42
|
+
expect(mockFunc).toHaveBeenCalledWith("wm-menuitem description is above the character limit of 100");
|
|
43
|
+
});
|
|
44
|
+
it("throws error when description and icon props are used simultaneously", async () => {
|
|
45
|
+
const mockFunc = jest.fn();
|
|
46
|
+
console.error = mockFunc;
|
|
47
|
+
await newSpecPage({
|
|
48
|
+
components: [Menuitem],
|
|
49
|
+
html: `<wm-menuitem description='Example description' icon="f3eb"></wm-menuitem>`,
|
|
50
|
+
});
|
|
51
|
+
expect(mockFunc).toHaveBeenCalledWith("wm-menuitems with descriptions do not support the use of icons");
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
});
|
|
@@ -30,7 +30,7 @@ export class ModalFooter {
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
render() {
|
|
33
|
-
return (h("div", {
|
|
33
|
+
return (h("div", { class: `wm-wrapper ${this.infoText ? " footer-text" : ""}` }, h("div", { class: "wm-info", "aria-live": "polite" }, this.infoText), h("div", { class: "wm-button-collection" }, this.secondaryText && (h("wm-button", { onClick: () => this.emitParentSecondaryEvent(), id: `wm-secondary-${this.uid}`, ref: (el) => (this.primaryActionDisabled ? (this.lastElement = el) : undefined) }, this.secondaryText)), h("wm-button", { "button-type": this.deleteStyle ? "secondary" : "primary", "permanently-delete": this.deleteStyle, onClick: () => this.emitParentPrimaryEvent(), disabled: this.primaryActionDisabled, id: `wm-primary-${this.uid}`, ref: (el) => (!this.primaryActionDisabled ? (this.lastElement = el) : undefined) }, this.primaryText))));
|
|
34
34
|
}
|
|
35
35
|
static get is() { return "wm-modal-footer"; }
|
|
36
36
|
static get originalStyleUrls() {
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ModalFooter } from "./wm-modal-footer";
|
|
2
|
+
describe("wm-modal-footer", () => {
|
|
3
|
+
it("has the right props", () => {
|
|
4
|
+
const modal = new ModalFooter();
|
|
5
|
+
expect(modal).toHaveProperty("secondaryText");
|
|
6
|
+
expect(modal).toHaveProperty("primaryText");
|
|
7
|
+
expect(modal).toHaveProperty("infoText");
|
|
8
|
+
expect(modal).toHaveProperty("primaryActionDisabled");
|
|
9
|
+
expect(modal).toHaveProperty("deleteStyle");
|
|
10
|
+
});
|
|
11
|
+
});
|
|
@@ -21,7 +21,7 @@ export class ModalHeader {
|
|
|
21
21
|
parentModal.emitCloseEvent();
|
|
22
22
|
}
|
|
23
23
|
render() {
|
|
24
|
-
return (h(Host,
|
|
24
|
+
return (h(Host, null, h("div", { class: "wm-wrapper" }, h("div", null, h("h2", { class: "title", id: `wm-modal-heading-text-${this.uid}` }, this.heading, h("span", { class: "subtitle" }, this.subheading))), h("wm-button", { "button-type": "navigational", icon: "f156", tooltip: globalMessages.close, "tooltip-position": "left", id: `wm-modal-close-${this.uid}`, ref: (el) => (this.closeButtonEl = el), onClick: () => this.emitParentCloseEvent() }))));
|
|
25
25
|
}
|
|
26
26
|
static get is() { return "wm-modal-header"; }
|
|
27
27
|
static get originalStyleUrls() {
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { newE2EPage } from "@stencil/core/testing";
|
|
2
|
+
import { AxePuppeteer } from "@axe-core/puppeteer";
|
|
3
|
+
describe("wm-modal", () => {
|
|
4
|
+
let page, modal,
|
|
5
|
+
// overlay: any,
|
|
6
|
+
closeButton;
|
|
7
|
+
beforeEach(async () => {
|
|
8
|
+
page = await newE2EPage();
|
|
9
|
+
await page.setContent(`<html lang='en'><head><title>Page</title></head><body><main><h1>Title</h1>
|
|
10
|
+
<button onClick="showModal()" id="modal-trigger">Open Modal</button><wm-modal id="modal-test"><wm-modal-header heading="Modal Heading"></wm-modal-header><div>Modal Body</div><wm-modal-footer primary-text="Save" secondary-text="Discard"></wm-modal-footer></wm-modal><button>Filler</button></main></body><script>const dialog = document.getElementById("modal-test");
|
|
11
|
+
|
|
12
|
+
dialog.addEventListener("wmModalCloseTriggered", function() {
|
|
13
|
+
dialog.open = false;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
dialog.addEventListener("wmModalSecondaryTriggered", function() {
|
|
17
|
+
dialog.open = false;
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
dialog.addEventListener("wmModalPrimaryTriggered", function() {
|
|
21
|
+
dialog.open = false;
|
|
22
|
+
});
|
|
23
|
+
function showModal() {
|
|
24
|
+
dialog.open = true;
|
|
25
|
+
}
|
|
26
|
+
</script></html>`);
|
|
27
|
+
modal = await page.find("wm-modal");
|
|
28
|
+
closeButton = await page.find("wm-button#wm-modal-close-modal-test >>> button");
|
|
29
|
+
});
|
|
30
|
+
it("passes Axe checks", async () => {
|
|
31
|
+
const results = await new AxePuppeteer(page).analyze();
|
|
32
|
+
expect(results.violations.length).toBe(0);
|
|
33
|
+
});
|
|
34
|
+
// RENDER
|
|
35
|
+
it("renders", async () => {
|
|
36
|
+
expect(modal).toHaveClass("hydrated");
|
|
37
|
+
});
|
|
38
|
+
// DISPLAY AND HIDE
|
|
39
|
+
it("emits the proper event when the close (X) button is clicked", async () => {
|
|
40
|
+
const eventSpy = await modal.spyOnEvent("wmModalCloseTriggered");
|
|
41
|
+
await page.keyboard.press("Tab");
|
|
42
|
+
await page.keyboard.press("Enter");
|
|
43
|
+
await page.waitForChanges();
|
|
44
|
+
expect(modal).toHaveAttribute("open");
|
|
45
|
+
closeButton.click();
|
|
46
|
+
await page.waitForChanges();
|
|
47
|
+
expect(eventSpy).toHaveReceivedEventTimes(1);
|
|
48
|
+
});
|
|
49
|
+
//ACCESSIBILITY
|
|
50
|
+
it("focuses the close button when the modal opens if no elementToFocus property is set", async () => {
|
|
51
|
+
await page.keyboard.press("Tab");
|
|
52
|
+
await page.keyboard.press("Enter"); // open popup
|
|
53
|
+
await page.waitForChanges();
|
|
54
|
+
const activeElId = await page.evaluate(() => document.activeElement.id);
|
|
55
|
+
expect(activeElId).toEqual("wm-modal-close-modal-test");
|
|
56
|
+
});
|
|
57
|
+
it("focuses the correct element when the elementToFocus property is set", async () => {
|
|
58
|
+
page = await newE2EPage();
|
|
59
|
+
//The elementToFocus prop isn't mutable, so "setProperty" doesn't work. Page content has to be reset.
|
|
60
|
+
await page.setContent(`<html lang='en'><head><title>Page</title></head><body><main><h1>Title</h1>
|
|
61
|
+
<button onClick="showModal()">Open Modal</button><wm-modal element-to-focus="modal-input" id="second-modal"><wm-modal-header heading="Modal Heading"></wm-modal-header><div>Modal Body<div><input id="modal-input"></input></div></div><wm-modal-footer></wm-modal-footer></wm-modal></main></body><script>const dialog = document.getElementById("second-modal");
|
|
62
|
+
|
|
63
|
+
dialog.addEventListener("wmModalCloseTriggered", function() {
|
|
64
|
+
dialog.open = false;
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
dialog.addEventListener("wmModalSecondaryTriggered", function() {
|
|
68
|
+
dialog.open = false;
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
dialog.addEventListener("wmModalPrimaryTriggered", function() {
|
|
72
|
+
dialog.open = false;
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
function showModal() {
|
|
76
|
+
dialog.open = true;
|
|
77
|
+
}
|
|
78
|
+
</script></html>`);
|
|
79
|
+
await page.waitForChanges();
|
|
80
|
+
await page.keyboard.press("Tab");
|
|
81
|
+
await page.keyboard.press("Enter");
|
|
82
|
+
await page.waitForChanges();
|
|
83
|
+
const activeElId = await page.evaluate(() => document.activeElement.id);
|
|
84
|
+
expect(activeElId).toEqual("modal-input");
|
|
85
|
+
});
|
|
86
|
+
it("returns focus to the triggering element when the modal closes", async () => {
|
|
87
|
+
await page.keyboard.press("Tab");
|
|
88
|
+
await page.keyboard.press("Enter");
|
|
89
|
+
await page.waitForChanges();
|
|
90
|
+
await page.keyboard.press("Enter");
|
|
91
|
+
await page.waitForChanges();
|
|
92
|
+
const activeElId = await page.evaluate(() => document.activeElement.id);
|
|
93
|
+
expect(activeElId).toEqual("modal-trigger");
|
|
94
|
+
});
|
|
95
|
+
it("closes the modal when escape key is pressed", async () => {
|
|
96
|
+
await page.keyboard.press("Tab");
|
|
97
|
+
await page.keyboard.press("Enter");
|
|
98
|
+
await page.waitForChanges();
|
|
99
|
+
expect(modal).toHaveAttribute("open");
|
|
100
|
+
await page.keyboard.press("Escape");
|
|
101
|
+
await page.waitForChanges();
|
|
102
|
+
expect(modal).not.toHaveAttribute("open");
|
|
103
|
+
});
|
|
104
|
+
});
|
|
@@ -108,11 +108,11 @@ export class Modal {
|
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
110
|
render() {
|
|
111
|
-
return (h("dialog", {
|
|
111
|
+
return (h("dialog", { class: `${"wm-" + this.modalType}`, ref: (el) => (this.dialogEl = el), onKeyDown: (ev) => this.handleKeyDown(ev) }, h("div", { class: "tabtrap sr-only", tabindex: "0", onFocus: (ev) => {
|
|
112
112
|
const focusedFromCloseButton = ev.relatedTarget && ev.relatedTarget == this.closeButtonEl;
|
|
113
113
|
// no related target means we're coming from outside the page (browser chrome), and first element should be focused instead
|
|
114
114
|
focusedFromCloseButton ? this.focusLastElement.emit() : this.focusFirstElement.emit();
|
|
115
|
-
} }), !this.hasBrowserPopoverSupport && h("div", {
|
|
115
|
+
} }), !this.hasBrowserPopoverSupport && h("div", { class: "wm-tooltip" }), h("slot", null), h("div", { class: "tabtrap sr-only", tabindex: "0", onFocus: () => {
|
|
116
116
|
this.focusFirstElement.emit();
|
|
117
117
|
} })));
|
|
118
118
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { newSpecPage } from "@stencil/core/testing";
|
|
2
|
+
jest.mock("../../global/functions");
|
|
3
|
+
import { Modal } from "./wm-modal";
|
|
4
|
+
import { ModalHeader } from "./wm-modal-header";
|
|
5
|
+
import { ModalFooter } from "./wm-modal-footer";
|
|
6
|
+
describe("wm-modal", () => {
|
|
7
|
+
it("builds", async () => {
|
|
8
|
+
const comp = await newSpecPage({
|
|
9
|
+
components: [Modal, ModalHeader, ModalFooter],
|
|
10
|
+
html: "<wm-modal open='false'><wm-modal-header heading='heading'></wm-modal-header><div>content</div><wm-modal-footer primary-text='primary-text'></wm-modal-footer></wm-modal>",
|
|
11
|
+
});
|
|
12
|
+
expect(comp.root).toMatchSnapshot();
|
|
13
|
+
});
|
|
14
|
+
it("watching open-- toggles the modal", () => {
|
|
15
|
+
//toggleModal
|
|
16
|
+
const component = new Modal();
|
|
17
|
+
const mockShowModal = (component.showModal = jest.fn());
|
|
18
|
+
const mockHideModal = (component.hideModal = jest.fn());
|
|
19
|
+
component.open = true;
|
|
20
|
+
component.toggleModal();
|
|
21
|
+
expect(mockShowModal).toHaveBeenCalledTimes(1);
|
|
22
|
+
expect(mockHideModal).toHaveBeenCalledTimes(0);
|
|
23
|
+
jest.resetAllMocks();
|
|
24
|
+
component.open = false;
|
|
25
|
+
component.toggleModal();
|
|
26
|
+
expect(mockShowModal).toHaveBeenCalledTimes(0);
|
|
27
|
+
expect(mockHideModal).toHaveBeenCalledTimes(1);
|
|
28
|
+
jest.resetAllMocks();
|
|
29
|
+
});
|
|
30
|
+
});
|
|
@@ -34,7 +34,7 @@ export class NavigationHamburger {
|
|
|
34
34
|
this.wmNavigationHamburgerClicked.emit();
|
|
35
35
|
}
|
|
36
36
|
render() {
|
|
37
|
-
return (h(Host, {
|
|
37
|
+
return (h(Host, { class: `hamburger ${this.open ? "nav-open" : "nav-closed"}` }, h("button", { "aria-expanded": this.open, "aria-label": this.showNavMessage, onMouseEnter: () => showTooltip("right", this.el, this.showNavMessage), onMouseLeave: () => hideTooltip(), onFocus: () => this.isTabbing && showTooltip("right", this.el, this.showNavMessage), onBlur: () => hideTooltip(), onClick: () => this.handleClick() }, h("span", { class: "icon" }))));
|
|
38
38
|
}
|
|
39
39
|
static get is() { return "wm-navigation-hamburger"; }
|
|
40
40
|
static get encapsulation() { return "shadow"; }
|
|
@@ -6,7 +6,7 @@ export class NavigationItem {
|
|
|
6
6
|
this.active = undefined;
|
|
7
7
|
}
|
|
8
8
|
render() {
|
|
9
|
-
return (h(Host, {
|
|
9
|
+
return (h(Host, { role: "listitem" }, h("a", { class: `link ${this.active ? "active" : ""}`, href: this.href, onClick: () => this.wmNavigationItemClicked.emit() }, h("div", { class: "icon", "aria-hidden": "true" }, h("slot", null)), h("div", { class: "text" }, this.text))));
|
|
10
10
|
}
|
|
11
11
|
static get is() { return "wm-navigation-item"; }
|
|
12
12
|
static get encapsulation() { return "shadow"; }
|