@watermarkinsights/ripple 5.12.0-1 → 5.12.0-11
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-7fb0e89a.js → cjs/global-da3d372b.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 +4 -5
- 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 +12 -13
- 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 +13 -16
- 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 +42 -14
- 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.css +9 -16
- 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.css +1 -3
- 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.css +19 -17
- 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 +45 -10
- 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/dev/modal.js +34 -31
- package/dist/collection/dev/toggletip.js +9 -0
- package/dist/collection/global/functions.spec.js +126 -0
- package/dist/collection/lang/lang.spec.js +20 -0
- package/dist/esm/{chartFunctions-ef4089f9.js → chartFunctions-7a2b7a90.js} +31 -11
- package/dist/esm/{functions-a3c016ae.js → functions-899cea51.js} +8 -105
- package/dist/{cjs/app-globals-6945eb73.js → esm/global-c1827d25.js} +1 -10
- package/dist/esm/index-558b5a82.js +2618 -0
- package/dist/esm/{intl-66ad4bcd.js → intl-87b9b541.js} +1 -1
- package/dist/esm/loader.js +5 -6
- 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 +13 -14
- 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 +13 -16
- 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 +42 -14
- package/dist/esm/wm-uploader.entry.js +6 -7
- package/dist/esm/wm-wrapper.entry.js +1 -1
- package/dist/esm-es5/{chartFunctions-ef4089f9.js → chartFunctions-7a2b7a90.js} +1 -1
- package/dist/esm-es5/functions-899cea51.js +1 -0
- package/dist/esm-es5/global-c1827d25.js +1 -0
- package/dist/esm-es5/index-558b5a82.js +1 -0
- package/dist/esm-es5/{intl-66ad4bcd.js → intl-87b9b541.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-7f2bd4c9.system.entry.js → p-00daed0d.system.entry.js} +1 -1
- package/dist/ripple/{p-7c4757c8.system.entry.js → p-08c0a003.system.entry.js} +1 -1
- package/dist/ripple/{p-a538aa2b.system.entry.js → p-08cae940.system.entry.js} +1 -1
- package/dist/ripple/{p-f2578643.system.entry.js → p-0b779f0c.system.entry.js} +1 -1
- package/dist/ripple/p-15778b2d.entry.js +1 -0
- package/dist/ripple/p-17a72fc6.system.entry.js +1 -0
- package/dist/ripple/{p-658f146a.system.entry.js → p-1a4b6b02.system.entry.js} +1 -1
- package/dist/ripple/{p-e5e9de87.entry.js → p-1a6699ee.entry.js} +1 -1
- package/dist/ripple/{p-165b5d3d.system.entry.js → p-1a71d867.system.entry.js} +1 -1
- package/dist/ripple/p-1fcea04c.entry.js +1 -0
- package/dist/ripple/p-20cb733d.js +1 -0
- package/dist/ripple/{p-5c62e26d.entry.js → p-29bc2e29.entry.js} +1 -1
- package/dist/ripple/p-2d0b6f97.entry.js +1 -0
- package/dist/ripple/{p-823d7b4e.system.entry.js → p-32bf3f5b.system.entry.js} +1 -1
- package/dist/ripple/p-338f476b.entry.js +1 -0
- package/dist/ripple/{p-3a2b3dcd.system.js → p-3703934b.system.js} +1 -1
- package/dist/ripple/{p-d3f7730f.system.entry.js → p-39436e07.system.entry.js} +1 -1
- package/dist/ripple/{p-bd9fb348.system.entry.js → p-3f3dadc5.system.entry.js} +1 -1
- package/dist/ripple/p-3ffd83ff.entry.js +1 -0
- package/dist/ripple/{p-6fafc1f1.system.entry.js → p-4392f369.system.entry.js} +1 -1
- package/dist/ripple/p-466c31d7.entry.js +1 -0
- package/dist/ripple/{p-dcf62788.system.entry.js → p-47285fc5.system.entry.js} +1 -1
- package/dist/ripple/{p-13b1d775.entry.js → p-48e09589.entry.js} +1 -1
- package/dist/ripple/{p-19c4e55f.system.entry.js → p-49faa27e.system.entry.js} +1 -1
- package/dist/ripple/p-4b6ef736.system.js +1 -0
- package/dist/ripple/p-50ba37b9.entry.js +1 -0
- package/dist/ripple/{p-0204a0fe.system.js → p-529bf080.system.js} +1 -1
- package/dist/ripple/{p-7649cbfe.system.entry.js → p-555091aa.system.entry.js} +1 -1
- package/dist/ripple/{p-45a2ea03.system.entry.js → p-5567f97d.system.entry.js} +1 -1
- package/dist/ripple/p-568c595f.js +2 -0
- package/dist/ripple/p-56f88847.system.entry.js +1 -0
- package/dist/ripple/{p-ef6be458.system.entry.js → p-639011da.system.entry.js} +1 -1
- package/dist/ripple/{p-28d6a7b4.system.entry.js → p-63faf802.system.entry.js} +1 -1
- package/dist/ripple/{p-043901ab.system.entry.js → p-65d26233.system.entry.js} +1 -1
- package/dist/ripple/{p-688f175a.entry.js → p-66b8e9a0.entry.js} +1 -1
- package/dist/ripple/p-688b090d.entry.js +1 -0
- package/dist/ripple/{p-1403e680.entry.js → p-68e04222.entry.js} +1 -1
- package/dist/ripple/{p-78faed97.js → p-69d44bc5.js} +1 -1
- package/dist/ripple/p-6c7e754c.js +1 -0
- package/dist/ripple/p-7dc6ea5b.system.js +1 -0
- package/dist/ripple/{p-cd0cc88d.entry.js → p-88ebddd7.entry.js} +1 -1
- package/dist/ripple/{p-6be11c03.system.entry.js → p-8a555fea.system.entry.js} +1 -1
- package/dist/ripple/{p-c59f9246.system.entry.js → p-8fcd6f3e.system.entry.js} +1 -1
- package/dist/ripple/p-90f4a160.entry.js +1 -0
- package/dist/ripple/p-92b3a061.system.js +1 -0
- package/dist/ripple/{p-ba0614f5.system.entry.js → p-930a43cd.system.entry.js} +1 -1
- package/dist/ripple/p-94495341.entry.js +1 -0
- package/dist/ripple/p-9479898e.entry.js +1 -0
- package/dist/ripple/{p-79ad7be0.system.entry.js → p-94cf5830.system.entry.js} +1 -1
- package/dist/ripple/{p-146bc712.system.entry.js → p-9609af5c.system.entry.js} +1 -1
- package/dist/ripple/p-98c0893f.system.entry.js +1 -0
- package/dist/ripple/p-98f95d71.entry.js +1 -0
- package/dist/ripple/{p-3376581a.system.entry.js → p-a04ef164.system.entry.js} +1 -1
- package/dist/ripple/p-a7709012.entry.js +1 -0
- package/dist/ripple/{p-add4b737.entry.js → p-a94b1ea9.entry.js} +1 -1
- package/dist/ripple/p-ab7a7407.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-724c9ebf.entry.js → p-b027e0e7.entry.js} +1 -1
- package/dist/ripple/{p-ef91a9d6.system.entry.js → p-b22b8da5.system.entry.js} +1 -1
- package/dist/ripple/p-b7577799.entry.js +1 -0
- package/dist/ripple/{p-7d0c9c6a.system.entry.js → p-bda32fc9.system.entry.js} +1 -1
- package/dist/ripple/{p-0d18809d.system.entry.js → p-bfe5815c.system.entry.js} +1 -1
- package/dist/ripple/p-c0deae46.entry.js +1 -0
- package/dist/ripple/{p-89121330.system.entry.js → p-c32d42ff.system.entry.js} +1 -1
- package/dist/ripple/{p-e19ff8fc.system.entry.js → p-c850c123.system.entry.js} +1 -1
- package/dist/ripple/{p-391f300f.system.entry.js → p-ce219de1.system.entry.js} +1 -1
- package/dist/ripple/p-d1da356b.entry.js +1 -0
- package/dist/ripple/{p-47f21da9.system.entry.js → p-dbca5668.system.entry.js} +1 -1
- package/dist/ripple/p-dd566933.entry.js +1 -0
- package/dist/ripple/{p-1abd114f.entry.js → p-e27499cc.entry.js} +1 -1
- package/dist/ripple/p-e917500f.entry.js +1 -0
- package/dist/ripple/{p-76f9acec.entry.js → p-e9177cb5.entry.js} +1 -1
- package/dist/ripple/{p-5eaa2392.entry.js → p-f0645532.entry.js} +1 -1
- package/dist/ripple/{p-c2e95216.system.entry.js → p-f3b7781a.system.entry.js} +1 -1
- package/dist/ripple/{p-120bc89b.entry.js → p-f594d6e1.entry.js} +1 -1
- package/dist/ripple/{p-a2b40881.entry.js → p-f6ec10c6.entry.js} +1 -1
- package/dist/ripple/p-f8192441.js +1 -0
- package/dist/ripple/p-fa0dcbe4.entry.js +1 -0
- package/dist/ripple/ripple.esm.js +1 -1
- package/dist/ripple/ripple.js +1 -1
- package/dist/types/components/wm-toggletip/wm-toggletip.d.ts +2 -0
- 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-7fb0e89a.js +0 -1
- package/dist/esm-es5/functions-a3c016ae.js +0 -1
- package/dist/esm-es5/index-130e07bb.js +0 -1
- package/dist/ripple/p-03071693.js +0 -1
- package/dist/ripple/p-0e148b6a.system.js +0 -1
- package/dist/ripple/p-1419b29f.entry.js +0 -1
- package/dist/ripple/p-16ec9711.system.entry.js +0 -1
- package/dist/ripple/p-1804d8dd.entry.js +0 -1
- package/dist/ripple/p-1dc791dd.system.js +0 -1
- package/dist/ripple/p-1dd1ce52.entry.js +0 -1
- package/dist/ripple/p-1ec431e6.entry.js +0 -1
- package/dist/ripple/p-24b23624.entry.js +0 -1
- package/dist/ripple/p-4a5e7fd4.entry.js +0 -1
- package/dist/ripple/p-5429827a.entry.js +0 -1
- package/dist/ripple/p-5e5524a1.js +0 -1
- package/dist/ripple/p-7271dbdd.system.entry.js +0 -1
- package/dist/ripple/p-7f8a93dc.entry.js +0 -1
- package/dist/ripple/p-7fa67af6.entry.js +0 -1
- package/dist/ripple/p-8a596bc9.entry.js +0 -1
- package/dist/ripple/p-93b1503a.entry.js +0 -1
- package/dist/ripple/p-a2171118.entry.js +0 -1
- package/dist/ripple/p-a8f1f6ce.entry.js +0 -1
- package/dist/ripple/p-ab0e1a61.js +0 -1
- package/dist/ripple/p-be92ae6c.entry.js +0 -1
- package/dist/ripple/p-cef8a45b.system.js +0 -2
- package/dist/ripple/p-d8c6b2f0.system.entry.js +0 -1
- package/dist/ripple/p-d9da0502.js +0 -2
- package/dist/ripple/p-ddd6addd.entry.js +0 -1
- package/dist/ripple/p-df1c9682.entry.js +0 -1
- package/dist/ripple/p-dfa9dc58.system.js +0 -1
- package/dist/ripple/p-e13f558e.entry.js +0 -1
- package/dist/ripple/p-e9032dfc.entry.js +0 -1
- package/dist/ripple/p-ed9031a2.entry.js +0 -1
- package/dist/ripple/p-f850a628.entry.js +0 -1
- package/dist/ripple/p-f9a71cf6.entry.js +0 -1
|
@@ -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
|
+
});
|
|
@@ -828,25 +828,18 @@ wm-modal-footer .wm-wrapper {
|
|
|
828
828
|
-webkit-align-items: center;
|
|
829
829
|
-ms-flex-align: center;
|
|
830
830
|
align-items: center;
|
|
831
|
+
gap: 1rem;
|
|
832
|
+
flex-wrap: wrap;
|
|
831
833
|
}
|
|
832
|
-
|
|
833
|
-
wm-modal-footer .wm-wrapper.footer-text {
|
|
834
|
-
flex-direction: column;
|
|
835
|
-
align-items: flex-start;
|
|
836
|
-
}
|
|
837
|
-
}
|
|
838
|
-
wm-modal-footer .wm-wrapper wm-button + wm-button {
|
|
839
|
-
margin-left: 1rem;
|
|
840
|
-
}
|
|
841
|
-
wm-modal-footer .wm-wrapper .wm-info {
|
|
834
|
+
wm-modal-footer .wm-info {
|
|
842
835
|
font-size: 0.875rem;
|
|
843
836
|
font-style: italic;
|
|
844
837
|
}
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
838
|
+
wm-modal-footer .wm-button-collection {
|
|
839
|
+
display: flex;
|
|
840
|
+
gap: 1rem;
|
|
841
|
+
flex-wrap: wrap;
|
|
849
842
|
}
|
|
850
|
-
wm-modal-footer
|
|
851
|
-
|
|
843
|
+
wm-modal-footer wm-button + wm-button {
|
|
844
|
+
margin-left: 0;
|
|
852
845
|
}
|
|
@@ -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
|
+
});
|
|
@@ -828,6 +828,7 @@ wm-modal-header .wm-wrapper {
|
|
|
828
828
|
-webkit-align-items: center;
|
|
829
829
|
-ms-flex-align: center;
|
|
830
830
|
align-items: center;
|
|
831
|
+
column-gap: 1rem;
|
|
831
832
|
}
|
|
832
833
|
wm-modal-header .wm-wrapper .title {
|
|
833
834
|
margin: 0;
|
|
@@ -840,7 +841,4 @@ wm-modal-header .wm-wrapper .title .subtitle {
|
|
|
840
841
|
display: block;
|
|
841
842
|
font-size: 0.875rem;
|
|
842
843
|
font-weight: normal;
|
|
843
|
-
}
|
|
844
|
-
wm-modal-header .wm-wrapper .title:focus {
|
|
845
|
-
outline: none;
|
|
846
844
|
}
|
|
@@ -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: "#close", 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() {
|
|
@@ -821,49 +821,51 @@ wm-modal dialog {
|
|
|
821
821
|
color: inherit;
|
|
822
822
|
padding: 0;
|
|
823
823
|
width: 80vw;
|
|
824
|
-
max-width:
|
|
824
|
+
max-width: 46.875rem;
|
|
825
825
|
max-height: 80vh;
|
|
826
|
-
-webkit-border-radius: 5px
|
|
827
|
-
-moz-border-radius: 5px
|
|
828
|
-
-ms-border-radius: 5px
|
|
829
|
-
border-radius: 5px
|
|
826
|
+
-webkit-border-radius: 5px;
|
|
827
|
+
-moz-border-radius: 5px;
|
|
828
|
+
-ms-border-radius: 5px;
|
|
829
|
+
border-radius: 5px;
|
|
830
830
|
border: none;
|
|
831
831
|
background: var(--wmcolor-modal-background);
|
|
832
832
|
}
|
|
833
|
-
wm-modal dialog > :not(wm-modal-header):not(wm-modal-footer) {
|
|
834
|
-
max-height: calc(80vh - 166px);
|
|
835
|
-
}
|
|
836
833
|
wm-modal dialog::backdrop {
|
|
837
|
-
background:
|
|
834
|
+
background: var(--wmcolor-modal-overlay);
|
|
838
835
|
}
|
|
839
836
|
wm-modal dialog[open] {
|
|
840
837
|
-webkit-box-shadow: 0px 11px 15px 0px rgba(0, 0, 0, 0.2), 0px 9px 46px 8px rgba(0, 0, 0, 0.12), 0px 24px 38px 3px rgba(0, 0, 0, 0.14);
|
|
841
838
|
-moz-box-shadow: 0px 11px 15px 0px rgba(0, 0, 0, 0.2), 0px 9px 46px 8px rgba(0, 0, 0, 0.12), 0px 24px 38px 3px rgba(0, 0, 0, 0.14);
|
|
842
839
|
box-shadow: 0px 11px 15px 0px rgba(0, 0, 0, 0.2), 0px 9px 46px 8px rgba(0, 0, 0, 0.12), 0px 24px 38px 3px rgba(0, 0, 0, 0.14);
|
|
843
840
|
}
|
|
841
|
+
wm-modal dialog.wm-modal[open] {
|
|
842
|
+
display: flex;
|
|
843
|
+
flex-direction: column;
|
|
844
|
+
}
|
|
845
|
+
wm-modal dialog.wm-modal > :not(wm-modal-header, wm-modal-footer) {
|
|
846
|
+
flex: 1;
|
|
847
|
+
}
|
|
844
848
|
wm-modal dialog.wm-modal > wm-modal-header {
|
|
845
849
|
border-bottom: 1px solid var(--wmcolor-modal-border);
|
|
846
850
|
}
|
|
847
851
|
wm-modal dialog.wm-modal > wm-modal-footer {
|
|
848
852
|
border-top: 1px solid var(--wmcolor-modal-border);
|
|
849
853
|
}
|
|
850
|
-
@media only screen and (max-width:
|
|
854
|
+
@media only screen and (max-width: 48rem) {
|
|
851
855
|
wm-modal dialog.wm-modal {
|
|
852
|
-
height:
|
|
856
|
+
height: 100vh;
|
|
857
|
+
height: 100dvh;
|
|
853
858
|
max-height: none;
|
|
854
859
|
max-width: none;
|
|
855
860
|
width: 100vw;
|
|
861
|
+
border-radius: 0;
|
|
856
862
|
}
|
|
857
863
|
wm-modal dialog.wm-modal > * {
|
|
858
|
-
max-width:
|
|
864
|
+
max-width: 100%;
|
|
859
865
|
width: 100vw;
|
|
860
866
|
}
|
|
861
|
-
wm-modal dialog.wm-modal > *:not(wm-modal-header):not(wm-modal-footer) {
|
|
862
|
-
max-height: none;
|
|
863
|
-
height: calc(100vh - 166px);
|
|
864
|
-
}
|
|
865
867
|
}
|
|
866
|
-
wm-modal dialog.wm-dialog > :not(wm-modal-header
|
|
868
|
+
wm-modal dialog.wm-dialog > :not(wm-modal-header, wm-modal-footer) {
|
|
867
869
|
padding: 0 1.875rem 1.25rem 1.875rem;
|
|
868
870
|
font-size: 0.875rem;
|
|
869
871
|
border: none;
|
|
@@ -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
|
+
});
|
|
@@ -27,7 +27,7 @@ export class ModalPssFooter {
|
|
|
27
27
|
parentModal.emitSecondaryEvent();
|
|
28
28
|
}
|
|
29
29
|
render() {
|
|
30
|
-
return (h("div", {
|
|
30
|
+
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) : null) }, 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) : null) }, this.primaryText))));
|
|
31
31
|
}
|
|
32
32
|
static get is() { return "wm-modal-pss-footer"; }
|
|
33
33
|
static get originalStyleUrls() {
|
|
@@ -25,7 +25,7 @@ export class ModalPssHeader {
|
|
|
25
25
|
// this.headingElement.focus();
|
|
26
26
|
// }
|
|
27
27
|
render() {
|
|
28
|
-
return (h(Host,
|
|
28
|
+
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() }))));
|
|
29
29
|
}
|
|
30
30
|
static get is() { return "wm-modal-pss-header"; }
|
|
31
31
|
static get originalStyleUrls() {
|
|
@@ -112,9 +112,9 @@ export class ModalPss {
|
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
114
|
render() {
|
|
115
|
-
return (h(Host, {
|
|
115
|
+
return (h(Host, { class: `${this.open ? "" : "hide "}${"wm-" + this.modalType}`, role: "dialog", "aria-describedby": `wm-modal-heading-text-${this.uid}`, "aria-modal": "true", tabindex: this.open ? 0 : null, onFocus: () => {
|
|
116
116
|
this.focusLastElement.emit();
|
|
117
|
-
} }, h("div", {
|
|
117
|
+
} }, h("div", { class: "overlay", ref: (el) => (this.overlayEl = el) }), h("div", { class: "sr-only", tabIndex: 0, onFocus: () => {
|
|
118
118
|
this.focusFirstElement.emit();
|
|
119
119
|
} })));
|
|
120
120
|
}
|
|
@@ -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: "svg-icon svg-menu" }))));
|
|
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"; }
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { newE2EPage } from "@stencil/core/testing";
|
|
2
|
+
import { AxePuppeteer } from "@axe-core/puppeteer";
|
|
3
|
+
describe("wm-navigation", () => {
|
|
4
|
+
let page, nav, hamburger, items;
|
|
5
|
+
beforeEach(async () => {
|
|
6
|
+
page = await newE2EPage();
|
|
7
|
+
await page.setContent(`<html lang='en'><head><title>Page</title></head><body>
|
|
8
|
+
<wm-navigation-hamburger nav-id="mynav"></wm-navigation-hamburger>
|
|
9
|
+
<wm-navigation id="mynav">
|
|
10
|
+
<wm-navigation-item href="/home" text="Home" active>Home</wm-navigation-item>
|
|
11
|
+
<wm-navigation-item href="/things" text="Things">Things</wm-navigation-item>
|
|
12
|
+
</wm-navigation><main><h1>Title</h1><button>something tabbable here</button>
|
|
13
|
+
</main></body></html>`);
|
|
14
|
+
nav = await page.find("wm-navigation");
|
|
15
|
+
hamburger = await page.find("wm-navigation-hamburger");
|
|
16
|
+
items = await page.find("wm-navigation-item");
|
|
17
|
+
});
|
|
18
|
+
it("passes Axe checks", async () => {
|
|
19
|
+
const results = await new AxePuppeteer(page).analyze();
|
|
20
|
+
expect(results.violations.length).toBe(0);
|
|
21
|
+
});
|
|
22
|
+
it("renders the component", async () => {
|
|
23
|
+
expect(nav).not.toBeNull();
|
|
24
|
+
expect(hamburger).not.toBeNull();
|
|
25
|
+
expect(items).not.toBeNull();
|
|
26
|
+
});
|
|
27
|
+
it("traps focus when collapsible", async () => {
|
|
28
|
+
// small screen, trap focus
|
|
29
|
+
page.setViewport({ width: 1023, height: 800 });
|
|
30
|
+
page.waitForChanges();
|
|
31
|
+
await page.keyboard.press("Tab"); // focus on hamburger
|
|
32
|
+
await page.keyboard.press("Enter"); // open. focus on close btn
|
|
33
|
+
await page.waitForTimeout(250); // wait for animation to complete and focus to be called
|
|
34
|
+
await page.keyboard.press("Tab"); // focus on 1st nav item
|
|
35
|
+
await page.keyboard.press("Tab"); // focus on 2nd nav item
|
|
36
|
+
await page.keyboard.press("Tab"); // with trap focus we circle back within the nav (on close btn)
|
|
37
|
+
let activeEl = await page.evaluate(() => document.activeElement.tagName);
|
|
38
|
+
expect(activeEl).toEqual("WM-NAVIGATION");
|
|
39
|
+
});
|
|
40
|
+
it("doesn't trap focus when persistent", async () => {
|
|
41
|
+
// wide screen, no trap focus
|
|
42
|
+
page.setViewport({ width: 1024, height: 800 });
|
|
43
|
+
await page.waitForChanges(); // test fails randomly without this
|
|
44
|
+
await page.keyboard.press("Tab"); // focus on 1st nav item
|
|
45
|
+
await page.keyboard.press("Tab"); // focus on 2nd nav item
|
|
46
|
+
await page.keyboard.press("Tab"); // focus on the button in main
|
|
47
|
+
let activeEl = await page.evaluate(() => document.activeElement.tagName);
|
|
48
|
+
expect(activeEl).toEqual("BUTTON");
|
|
49
|
+
});
|
|
50
|
+
it("handles focus method when collapsible and closed", async () => {
|
|
51
|
+
page.setViewport({ width: 1023, height: 800 });
|
|
52
|
+
let activeEl = await page.evaluate(() => document.activeElement.tagName);
|
|
53
|
+
expect(activeEl).toEqual("BODY");
|
|
54
|
+
nav.focus();
|
|
55
|
+
activeEl = await page.evaluate(() => document.activeElement.tagName);
|
|
56
|
+
expect(activeEl).toEqual("WM-NAVIGATION-HAMBURGER");
|
|
57
|
+
});
|
|
58
|
+
it("handles focus method when collapsible and open", async () => {
|
|
59
|
+
page.setViewport({ width: 1023, height: 800 });
|
|
60
|
+
let activeEl = await page.evaluate(() => document.activeElement.tagName);
|
|
61
|
+
expect(activeEl).toEqual("BODY");
|
|
62
|
+
expect(nav.getAttribute("aria-expanded")).toBe("false");
|
|
63
|
+
hamburger.click();
|
|
64
|
+
await page.waitForChanges();
|
|
65
|
+
expect(nav.getAttribute("aria-expanded")).toBe("true");
|
|
66
|
+
nav.focus();
|
|
67
|
+
activeEl = await page.evaluate(() => document.activeElement.shadowRoot.activeElement.tagName);
|
|
68
|
+
expect(activeEl).toEqual("WM-BUTTON"); // the close button
|
|
69
|
+
});
|
|
70
|
+
it("handles focus method when persistent", async () => {
|
|
71
|
+
page.setViewport({ width: 1024, height: 800 });
|
|
72
|
+
let activeEl = await page.evaluate(() => document.activeElement.tagName);
|
|
73
|
+
expect(activeEl).toEqual("BODY");
|
|
74
|
+
expect(nav.getAttribute("aria-expanded")).toBeUndefined;
|
|
75
|
+
nav.focus();
|
|
76
|
+
expect(nav.getAttribute("aria-expanded")).toBeUndefined; // should still be undefined
|
|
77
|
+
activeEl = await page.evaluate(() => document.activeElement.shadowRoot.activeElement.textContent);
|
|
78
|
+
expect(activeEl).toEqual("Home"); // first item
|
|
79
|
+
});
|
|
80
|
+
it("is open on load if open prop is set to true", async () => {
|
|
81
|
+
page = await newE2EPage();
|
|
82
|
+
await page.setContent(`<html lang='en'><head><title>Page</title></head><body>
|
|
83
|
+
<wm-navigation-hamburger nav-id="mynav"></wm-navigation-hamburger>
|
|
84
|
+
<wm-navigation open id="mynav">
|
|
85
|
+
<wm-navigation-item href="/home" text="Home" active>Home</wm-navigation-item>
|
|
86
|
+
<wm-navigation-item href="/things" text="Things">Things</wm-navigation-item>
|
|
87
|
+
</wm-navigation><main><h1>Title</h1><button>something tabbable here</button>
|
|
88
|
+
</main></body></html>`);
|
|
89
|
+
await page.waitForTimeout(500);
|
|
90
|
+
const nav = await page.find("wm-navigation");
|
|
91
|
+
expect(nav.getAttribute("aria-expanded")).toBe("true");
|
|
92
|
+
});
|
|
93
|
+
it("programatically associates hamburger and nav and properly announces to SR", async () => {
|
|
94
|
+
const hamburgerAriaControls = hamburger.shadowRoot.querySelector("button").getAttribute("aria-controls");
|
|
95
|
+
const hamburgerAriaLabel = hamburger.shadowRoot.querySelector("button").getAttribute("aria-label");
|
|
96
|
+
const navAriaLabel = nav.getAttribute("aria-label");
|
|
97
|
+
expect(hamburgerAriaControls).toBe(nav.id);
|
|
98
|
+
expect(hamburgerAriaLabel).toBe("Show navigation");
|
|
99
|
+
expect(navAriaLabel).toBe("Main");
|
|
100
|
+
});
|
|
101
|
+
// when closed, focus returns to hamburger
|
|
102
|
+
});
|
|
@@ -96,9 +96,9 @@ export class Navigation {
|
|
|
96
96
|
} }));
|
|
97
97
|
}
|
|
98
98
|
render() {
|
|
99
|
-
return (h(Host, {
|
|
99
|
+
return (h(Host, { role: "navigation", "aria-expanded": this.ariaExpanded, "aria-label": this.mainNavigationMessage }, this.open ? this.renderOverlay() : "", this.isCollapsible && (h("div", { class: "trapfocus", tabindex: this.open ? 0 : undefined, onFocus: () => this.focusLastItem() })), h("div", { class: "tray" }, h("div", { class: "toggle-wrapper" }, h("wm-button", { ref: (el) => (this.toggleEl = el), class: "toggle", "button-type": "navigational", icon: this.open ? "#close" : "#menu", "icon-size": "2rem", tooltip: this.open ? globalMessages.close : globalMessages.open, "tooltip-position": "right", tabIndex: this.open ? undefined : -1, onClick: () => {
|
|
100
100
|
this.open = !this.open;
|
|
101
|
-
} })), h("ul", {
|
|
101
|
+
} })), h("ul", { class: "navlist" }, h("slot", null))), this.isCollapsible && (h("div", { class: "trapfocus", tabindex: this.open ? 0 : undefined, onFocus: () => this.toggleEl.focus() }))));
|
|
102
102
|
}
|
|
103
103
|
static get is() { return "wm-navigation"; }
|
|
104
104
|
static get encapsulation() { return "shadow"; }
|