@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,70 @@
|
|
|
1
|
+
import { newE2EPage } from "@stencil/core/testing";
|
|
2
|
+
import { AxePuppeteer } from "@axe-core/puppeteer";
|
|
3
|
+
describe("wm-uploader", () => {
|
|
4
|
+
let page, input, label;
|
|
5
|
+
beforeEach(async () => {
|
|
6
|
+
page = await newE2EPage();
|
|
7
|
+
await page.setContent(`<html lang='en'><head><title>Page</title></head><body><main><h1>Title</h1>
|
|
8
|
+
<wm-uploader button-text="Upload new document">
|
|
9
|
+
<wm-file id="file1" name="File retrieved from server" type="pdf" last-updated="2020-01-28T22:29:10.397Z"></wm-file>
|
|
10
|
+
<wm-file id="file2" name="Second file" type="jpeg" last-updated="2019-02-14T12:21:05.397Z"></wm-file>
|
|
11
|
+
</wm-uploader>
|
|
12
|
+
</main></body></html>`);
|
|
13
|
+
input = await page.find("wm-uploader >>> input[type='file']");
|
|
14
|
+
label = await page.find("wm-uploader >>> label");
|
|
15
|
+
await page.waitForChanges();
|
|
16
|
+
});
|
|
17
|
+
it("passes Axe checks", async () => {
|
|
18
|
+
const results = await new AxePuppeteer(page).analyze();
|
|
19
|
+
expect(results.violations.length).toBe(0);
|
|
20
|
+
});
|
|
21
|
+
it("renders the component", async () => {
|
|
22
|
+
expect(input).not.toBeNull();
|
|
23
|
+
expect(label).not.toBeNull();
|
|
24
|
+
});
|
|
25
|
+
it("focuses previous file when deleting with the keyboard", async () => {
|
|
26
|
+
page = await newE2EPage();
|
|
27
|
+
await page.setContent(`<html lang='en'><head><title>Page</title></head><body><main><h1>Title</h1>
|
|
28
|
+
<wm-uploader button-text="Upload new document">
|
|
29
|
+
<wm-file id="file1" name="First file" type="pdf" file-actions="preview delete"></wm-file>
|
|
30
|
+
<wm-file id="file2" name="Second file" type="pdf" file-actions="delete"></wm-file>
|
|
31
|
+
</wm-uploader>
|
|
32
|
+
</main></body></html>`);
|
|
33
|
+
await page.waitForChanges();
|
|
34
|
+
let fileEls = await page.findAll("wm-file");
|
|
35
|
+
let secondFileEl = fileEls[1];
|
|
36
|
+
// inital check of file count
|
|
37
|
+
expect(fileEls.length).toBe(2);
|
|
38
|
+
// user must be tabbing for these changes to occur
|
|
39
|
+
await page.keyboard.press("Tab");
|
|
40
|
+
await page.keyboard.press("Tab");
|
|
41
|
+
await page.keyboard.press("Tab");
|
|
42
|
+
await page.keyboard.press("Tab");
|
|
43
|
+
await page.keyboard.press("Enter");
|
|
44
|
+
await page.waitForChanges();
|
|
45
|
+
// check focused element is last file, delete button
|
|
46
|
+
let activeElId = await page.evaluate(() => document.activeElement.id);
|
|
47
|
+
expect(activeElId).toBe("file2");
|
|
48
|
+
let activeElButtonType = await page.evaluate(() => document.activeElement.shadowRoot.activeElement.classList[0]);
|
|
49
|
+
expect(activeElButtonType).toBe("delete-button");
|
|
50
|
+
let mockFileDeleteEvent = new CustomEvent("wmFileDelete");
|
|
51
|
+
//@ts-ignore
|
|
52
|
+
mockFileDeleteEvent.target = secondFileEl;
|
|
53
|
+
secondFileEl.dispatchEvent(mockFileDeleteEvent);
|
|
54
|
+
await page.evaluate(() => { var _a; return (_a = document.getElementById("file2")) === null || _a === void 0 ? void 0 : _a.remove(); });
|
|
55
|
+
await page.waitForChanges();
|
|
56
|
+
// confirm file has been removed
|
|
57
|
+
fileEls = await page.findAll("wm-file");
|
|
58
|
+
expect(fileEls.length).toBe(1);
|
|
59
|
+
// check focused element is last file, delete button
|
|
60
|
+
activeElId = await page.evaluate(() => document.activeElement.id);
|
|
61
|
+
expect(activeElId).toBe("file1");
|
|
62
|
+
activeElButtonType = await page.evaluate(() => document.activeElement.shadowRoot.activeElement.classList[0]);
|
|
63
|
+
expect(activeElButtonType).toBe("delete-button");
|
|
64
|
+
});
|
|
65
|
+
// it("disables the button dynamically", async () => {
|
|
66
|
+
// disabled when maxed out
|
|
67
|
+
// disabled while a file is uploading
|
|
68
|
+
// not disabled after upload
|
|
69
|
+
// });
|
|
70
|
+
});
|
|
@@ -300,9 +300,9 @@ export class Uploader {
|
|
|
300
300
|
return (h("div", { class: `drop-area -${this.dropArea}`, ref: (el) => (this.dropAreaEl = el), onDragEnter: (ev) => this.handleDragEnter(ev), onDragOver: (ev) => this.handleDragOver(ev), onDragLeave: (ev) => this.handleDragLeave(ev), onDrop: (ev) => this.handleDrop(ev) }, this.dropArea == "page" && (h("div", { ref: (el) => (this.dropOverlayEl = el), class: "drop-overlay", popover: "manual" }, h("span", { class: "upload-arrow" }), h("span", null, "Drop to Upload")))));
|
|
301
301
|
}
|
|
302
302
|
render() {
|
|
303
|
-
return (h(Host, {
|
|
303
|
+
return (h(Host, { class: `-${this.dropArea}` }, this.uploaderType == "drop" && this.renderDropArea(), this.label && this.renderLabel(), this.renderHeader(), this.renderListContainer(), h("div", { ref: (el) => (this.assertiveLiveRegionEl = el), class: "live-region sr-only", "aria-live": "assertive" // since it's directly linked to the action the user took, it should be read in priority. With polite, some messages get dismissed in favor of the page title
|
|
304
304
|
,
|
|
305
|
-
"aria-atomic": "true" }), h("div", {
|
|
305
|
+
"aria-atomic": "true" }), h("div", { ref: (el) => (this.politeLiveRegionEl = el), class: "live-region sr-only", "aria-live": "polite", "aria-atomic": "true" })));
|
|
306
306
|
}
|
|
307
307
|
static get is() { return "wm-uploader"; }
|
|
308
308
|
static get encapsulation() { return "shadow"; }
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
jest.mock("../../global/services/http-service");
|
|
2
|
+
import { newSpecPage } from "@stencil/core/testing";
|
|
3
|
+
import { Uploader } from "./wm-uploader";
|
|
4
|
+
import { File } from "../wm-file/wm-file";
|
|
5
|
+
// mock ResizeObserver
|
|
6
|
+
global.ResizeObserver = jest.fn().mockImplementation(() => ({
|
|
7
|
+
observe: jest.fn(),
|
|
8
|
+
unobserve: jest.fn(),
|
|
9
|
+
disconnect: jest.fn(),
|
|
10
|
+
}));
|
|
11
|
+
// mock MutationObserver
|
|
12
|
+
global.MutationObserver = jest.fn().mockImplementation(() => ({
|
|
13
|
+
observe: jest.fn(),
|
|
14
|
+
unobserve: jest.fn(),
|
|
15
|
+
disconnect: jest.fn(),
|
|
16
|
+
}));
|
|
17
|
+
describe("wm-uploader", () => {
|
|
18
|
+
let html, page;
|
|
19
|
+
beforeEach(async () => {
|
|
20
|
+
html = `<wm-uploader
|
|
21
|
+
id="uploader1"
|
|
22
|
+
button-text="Upload new document"
|
|
23
|
+
max-size="200 MB"
|
|
24
|
+
max-files="5"
|
|
25
|
+
>
|
|
26
|
+
<wm-file id="file1" name="File retrieved from server" type="pdf" last-updated="1/28/2020" size="28 KB"></wm-file>
|
|
27
|
+
<wm-file id="file2" name="Second file" type="jpeg" last-updated="2/14/2019" size="3 MB""></wm-file>
|
|
28
|
+
</wm-uploader>`;
|
|
29
|
+
page = await newSpecPage({ components: [Uploader, File], html });
|
|
30
|
+
await page.waitForChanges();
|
|
31
|
+
});
|
|
32
|
+
afterEach(() => {
|
|
33
|
+
html = undefined;
|
|
34
|
+
page = undefined;
|
|
35
|
+
});
|
|
36
|
+
it("has necessary aria properties", async () => {
|
|
37
|
+
let inputEl = page.root.shadowRoot.querySelector("input");
|
|
38
|
+
expect(inputEl).toEqualAttribute("aria-describedby", "file-count max-size accepted-types");
|
|
39
|
+
html = `<wm-uploader
|
|
40
|
+
id="uploader1"
|
|
41
|
+
button-text="Upload new document"
|
|
42
|
+
label="example label"
|
|
43
|
+
required-field="true"
|
|
44
|
+
></wm-uploader>`;
|
|
45
|
+
page = await newSpecPage({ components: [Uploader, File], html });
|
|
46
|
+
await page.waitForChanges();
|
|
47
|
+
inputEl = page.root.shadowRoot.querySelector("input");
|
|
48
|
+
expect(inputEl).toEqualAttribute("aria-label", "example label, Upload new document");
|
|
49
|
+
expect(inputEl).toEqualAttribute("aria-required", "true");
|
|
50
|
+
html = `<wm-uploader
|
|
51
|
+
id="uploader1"
|
|
52
|
+
button-text="Upload new document"
|
|
53
|
+
required-field="true"
|
|
54
|
+
></wm-uploader>`;
|
|
55
|
+
page = await newSpecPage({ components: [Uploader, File], html });
|
|
56
|
+
await page.waitForChanges();
|
|
57
|
+
inputEl = page.root.shadowRoot.querySelector("input");
|
|
58
|
+
expect(inputEl).toEqualAttribute("aria-label", "Upload new document");
|
|
59
|
+
html = `<wm-uploader
|
|
60
|
+
id="uploader1"
|
|
61
|
+
button-text="Upload new document"
|
|
62
|
+
label="Upload new document"
|
|
63
|
+
required-field="true"
|
|
64
|
+
></wm-uploader>`;
|
|
65
|
+
page = await newSpecPage({ components: [Uploader, File], html });
|
|
66
|
+
await page.waitForChanges();
|
|
67
|
+
inputEl = page.root.shadowRoot.querySelector("input");
|
|
68
|
+
expect(inputEl).toEqualAttribute("aria-label", "Upload new document");
|
|
69
|
+
});
|
|
70
|
+
it("renders button text based on button-text prop", () => {
|
|
71
|
+
const labelEl = page.root.shadowRoot.querySelector("label");
|
|
72
|
+
expect(labelEl.textContent).toBe("Upload new document");
|
|
73
|
+
});
|
|
74
|
+
it("uploads files", async () => {
|
|
75
|
+
const input = page.root.shadowRoot.querySelector("input");
|
|
76
|
+
// fake files which the components uploadFiles() function will process
|
|
77
|
+
// @ts-ignore
|
|
78
|
+
input.files = {
|
|
79
|
+
length: 2,
|
|
80
|
+
0: {
|
|
81
|
+
lastModified: 1562163068000,
|
|
82
|
+
lastModifiedDate: new Date(1562163068000),
|
|
83
|
+
name: "third_file.pdf",
|
|
84
|
+
size: 104857600,
|
|
85
|
+
type: "application/pdf",
|
|
86
|
+
webkitRelativePath: "",
|
|
87
|
+
},
|
|
88
|
+
1: {
|
|
89
|
+
lastModified: 1562062469000,
|
|
90
|
+
lastModifiedDate: new Date(1562062469000),
|
|
91
|
+
name: "fourth file.jpg",
|
|
92
|
+
size: 123456,
|
|
93
|
+
type: "image/jpeg",
|
|
94
|
+
webkitRelativePath: "",
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
// triggering the change event will run validations and emit event wmUploaderFilesSelected
|
|
98
|
+
const ev = new Event("change");
|
|
99
|
+
let validFiles = [];
|
|
100
|
+
page.root.addEventListener("wmUploaderFilesSelected", (ev) => (validFiles = ev.detail));
|
|
101
|
+
input.dispatchEvent(ev);
|
|
102
|
+
await page.waitForChanges();
|
|
103
|
+
expect(validFiles[0].name).toBe("third_file.pdf");
|
|
104
|
+
expect(validFiles[1].size).toBe(123456);
|
|
105
|
+
});
|
|
106
|
+
it("disables button when upload is in progress", async () => {
|
|
107
|
+
html = `<wm-uploader id="uploader1">
|
|
108
|
+
<wm-file id="file1" name="File retrieved from server" type="pdf" last-updated="1/28/2020" size="28 KB" progress="30"></wm-file>
|
|
109
|
+
<wm-file id="file2" name="Second file" type="jpeg" last-updated="2/14/2019" size="3 MB""></wm-file>
|
|
110
|
+
</wm-uploader>`;
|
|
111
|
+
page = await newSpecPage({ components: [Uploader, File], html });
|
|
112
|
+
await page.waitForChanges();
|
|
113
|
+
const labelEl = page.root.shadowRoot.querySelector("label");
|
|
114
|
+
expect(labelEl).toHaveClass("disabled");
|
|
115
|
+
});
|
|
116
|
+
it("renders max-files text, if set", async () => {
|
|
117
|
+
let html, page;
|
|
118
|
+
html = `<wm-uploader
|
|
119
|
+
id="uploader1"
|
|
120
|
+
button-text="Upload new document"
|
|
121
|
+
></wm-uploader>`;
|
|
122
|
+
page = await newSpecPage({ components: [Uploader, File], html });
|
|
123
|
+
await page.waitForChanges();
|
|
124
|
+
let fileCountEl = page.root.shadowRoot.querySelector("#file-count");
|
|
125
|
+
expect(fileCountEl).toBeFalsy();
|
|
126
|
+
html = `<wm-uploader
|
|
127
|
+
id="uploader1"
|
|
128
|
+
max-files="3"
|
|
129
|
+
>
|
|
130
|
+
<wm-file id="file1" name="File retrieved from server" type="pdf" last-updated="1/28/2020" size="28 KB"></wm-file>
|
|
131
|
+
<wm-file id="file2" name="Second file" type="jpeg" last-updated="2/14/2019" size="3 MB""></wm-file>
|
|
132
|
+
</wm-uploader>`;
|
|
133
|
+
page = await newSpecPage({ components: [Uploader, File], html });
|
|
134
|
+
await page.waitForChanges();
|
|
135
|
+
fileCountEl = page.root.shadowRoot.querySelector("#file-count");
|
|
136
|
+
expect(fileCountEl).toBeTruthy();
|
|
137
|
+
expect(fileCountEl.textContent).toBe("2 of 3 Files");
|
|
138
|
+
});
|
|
139
|
+
it("renders max-size text, if set", async () => {
|
|
140
|
+
let html, page;
|
|
141
|
+
html = `<wm-uploader
|
|
142
|
+
id="uploader1"
|
|
143
|
+
button-text="Upload new document"
|
|
144
|
+
></wm-uploader>`;
|
|
145
|
+
page = await newSpecPage({ components: [Uploader, File], html });
|
|
146
|
+
await page.waitForChanges();
|
|
147
|
+
let maxSizeEl = page.root.shadowRoot.querySelector("#max-size");
|
|
148
|
+
expect(maxSizeEl).toBeFalsy();
|
|
149
|
+
html = `<wm-uploader
|
|
150
|
+
id="uploader1"
|
|
151
|
+
max-size="25 MB"
|
|
152
|
+
button-text="Upload new document"
|
|
153
|
+
></wm-uploader>`;
|
|
154
|
+
page = await newSpecPage({ components: [Uploader, File], html });
|
|
155
|
+
await page.waitForChanges();
|
|
156
|
+
maxSizeEl = page.root.shadowRoot.querySelector("#max-size");
|
|
157
|
+
expect(maxSizeEl).toBeTruthy();
|
|
158
|
+
expect(maxSizeEl.textContent).toBe("Maximum file size 25 MB");
|
|
159
|
+
});
|
|
160
|
+
it("announces error when max-files has been reached and button clicked", async () => {
|
|
161
|
+
html = `<wm-uploader
|
|
162
|
+
id="uploader1"
|
|
163
|
+
max-files="2"
|
|
164
|
+
>
|
|
165
|
+
<wm-file id="file1" name="File retrieved from server" type="pdf" last-updated="1/28/2020" size="28 KB"></wm-file>
|
|
166
|
+
<wm-file id="file2" name="Second file" type="jpeg" last-updated="2/14/2019" size="3 MB""></wm-file>
|
|
167
|
+
</wm-uploader>`;
|
|
168
|
+
page = await newSpecPage({ components: [Uploader, File], html });
|
|
169
|
+
await page.waitForChanges();
|
|
170
|
+
const input = page.root.shadowRoot.querySelector("input");
|
|
171
|
+
input.click();
|
|
172
|
+
await page.waitForChanges();
|
|
173
|
+
const liveRegion = page.root.shadowRoot.querySelector(".live-region").textContent;
|
|
174
|
+
expect(liveRegion).toBe("The maximum number of files has been reached");
|
|
175
|
+
});
|
|
176
|
+
it("singularizes the accepted file types message", async () => {
|
|
177
|
+
let message = page.root.shadowRoot.querySelector("#accepted-types").textContent;
|
|
178
|
+
expect(message).toBe("Accepted file types: .pdf, .txt, .log, .xml, .doc, .docx, .xls, .xlsx, .ppt, .pptx, .gif, .jpg, .jpeg, .png, .csv");
|
|
179
|
+
html = `<wm-uploader
|
|
180
|
+
id="uploader1"
|
|
181
|
+
file-types="jpeg"
|
|
182
|
+
button-text="Upload new document"
|
|
183
|
+
files='[{"id": "file1", "name": "File retrieved from server", "type": "pdf", "lastUpdated": "1/28/2020"},{"id": "file2", "name": "Second file", "type": "jpeg", "lastUpdated": "2/14/2019"}]'
|
|
184
|
+
></wm-uploader>`;
|
|
185
|
+
page = await newSpecPage({ components: [Uploader, File], html });
|
|
186
|
+
await page.waitForChanges();
|
|
187
|
+
message = page.root.shadowRoot.querySelector("#accepted-types").textContent;
|
|
188
|
+
expect(message).toBe("Accepted file type: .jpeg");
|
|
189
|
+
});
|
|
190
|
+
it("provides wm-files with the proper show-info", async () => {
|
|
191
|
+
// defaults to time
|
|
192
|
+
let infoEl = await page.root.querySelector("wm-file").shadowRoot.querySelector(".file-info");
|
|
193
|
+
expect(infoEl.textContent).toBe("1/28/2020");
|
|
194
|
+
// size
|
|
195
|
+
html = `<wm-uploader
|
|
196
|
+
id="uploader1"
|
|
197
|
+
button-text="Upload new document"
|
|
198
|
+
show-info="size"
|
|
199
|
+
>
|
|
200
|
+
<wm-file id="file1" name="File retrieved from server" type="pdf" last-updated="1/28/2020" size="28 KB"></wm-file>
|
|
201
|
+
<wm-file id="file2" name="Second file" type="jpeg" last-updated="2/14/2019" size="3 MB""></wm-file>
|
|
202
|
+
</wm-uploader>`;
|
|
203
|
+
page = await newSpecPage({ components: [Uploader, File], html });
|
|
204
|
+
await page.waitForChanges();
|
|
205
|
+
infoEl = await page.root.querySelector("wm-file").shadowRoot.querySelector(".file-info");
|
|
206
|
+
expect(infoEl.textContent).toBe("28 KB");
|
|
207
|
+
// time
|
|
208
|
+
html = `<wm-uploader
|
|
209
|
+
id="uploader1"
|
|
210
|
+
button-text="Upload new document"
|
|
211
|
+
show-info="time"
|
|
212
|
+
>
|
|
213
|
+
<wm-file id="file1" name="File retrieved from server" type="pdf" last-updated="1/28/2020" size="28 KB"></wm-file>
|
|
214
|
+
<wm-file id="file2" name="Second file" type="jpeg" last-updated="2/14/2019" size="3 MB""></wm-file>
|
|
215
|
+
</wm-uploader>`;
|
|
216
|
+
page = await newSpecPage({ components: [Uploader, File], html });
|
|
217
|
+
await page.waitForChanges();
|
|
218
|
+
infoEl = await page.root.querySelector("wm-file").shadowRoot.querySelector(".file-info");
|
|
219
|
+
expect(infoEl.textContent).toBe("1/28/2020");
|
|
220
|
+
// none
|
|
221
|
+
html = `<wm-uploader
|
|
222
|
+
id="uploader1"
|
|
223
|
+
button-text="Upload new document"
|
|
224
|
+
show-info="none"
|
|
225
|
+
>
|
|
226
|
+
<wm-file id="file1" name="File retrieved from server" type="pdf" last-updated="1/28/2020" size="28 KB"></wm-file>
|
|
227
|
+
<wm-file id="file2" name="Second file" type="jpeg" last-updated="2/14/2019" size="3 MB""></wm-file>
|
|
228
|
+
</wm-uploader>`;
|
|
229
|
+
page = await newSpecPage({ components: [Uploader, File], html });
|
|
230
|
+
await page.waitForChanges();
|
|
231
|
+
infoEl = await page.root.querySelector("wm-file").shadowRoot.querySelector(".file-info");
|
|
232
|
+
expect(infoEl).toBe(null);
|
|
233
|
+
});
|
|
234
|
+
});
|
|
@@ -7,39 +7,42 @@ function hideModal(ev) {
|
|
|
7
7
|
ev.target.open = false;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
//
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
|
|
10
|
+
// if we don't wait, sometimes the DOM else are not queryied. Waiting for load doesn't work as load, it seems it have already fired. requestAnimationFrame doesn't work either
|
|
11
|
+
setTimeout(() => {
|
|
12
|
+
// hook up each modal and its button
|
|
13
|
+
const ids = ["modal", "inner-modal", "inner-dialog", "nested-modal", "dialog"];
|
|
14
|
+
ids.forEach((id) => {
|
|
15
|
+
const modalBtn = document.getElementById(`${id}-btn`);
|
|
16
|
+
modalBtn && modalBtn.addEventListener("click", () => showModal(id));
|
|
15
17
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
});
|
|
18
|
+
const modal = document.getElementById(id);
|
|
19
|
+
modal && modal.addEventListener("wmModalPrimaryTriggered", actionTriggered);
|
|
20
|
+
modal && modal.addEventListener("wmModalSecondaryTriggered", hideModal);
|
|
21
|
+
modal && modal.addEventListener("wmModalCloseTriggered", hideModal);
|
|
22
|
+
});
|
|
21
23
|
|
|
22
|
-
const modalInput = document.getElementById("modal-input");
|
|
23
|
-
const count = document.getElementById("count");
|
|
24
|
-
const modalFooter = document.getElementById("modal-footer");
|
|
24
|
+
const modalInput = document.getElementById("modal-input");
|
|
25
|
+
const count = document.getElementById("count");
|
|
26
|
+
const modalFooter = document.getElementById("modal-footer");
|
|
25
27
|
|
|
26
|
-
modalInput &&
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
modalInput &&
|
|
29
|
+
modalInput.addEventListener("change", function () {
|
|
30
|
+
if (modalInput.value !== "") {
|
|
31
|
+
modalFooter.primaryActionDisabled = false;
|
|
32
|
+
} else {
|
|
33
|
+
modalFooter.primaryActionDisabled = true;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
34
36
|
|
|
35
|
-
count &&
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
count &&
|
|
38
|
+
count.addEventListener("change", (ev) => {
|
|
39
|
+
modalFooter.setAttribute("info-text", ev.target.value + " things ready to launch");
|
|
40
|
+
});
|
|
39
41
|
|
|
40
|
-
function actionTriggered(ev) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
42
|
+
function actionTriggered(ev) {
|
|
43
|
+
modalInput.value = "";
|
|
44
|
+
console.log("Changes saved");
|
|
45
|
+
modalFooter.actionDisabled = true;
|
|
46
|
+
ev.target.open = false;
|
|
47
|
+
}
|
|
48
|
+
}, 50);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
requestAnimationFrame(() => {
|
|
2
|
+
// put toggletip in shadow DOM
|
|
3
|
+
const host = document.querySelector("#host");
|
|
4
|
+
const shadow = host.attachShadow({ mode: "open" });
|
|
5
|
+
const tsd = document.querySelector("#tsd");
|
|
6
|
+
tsd.label = "Toggletip in shadow DOM";
|
|
7
|
+
tsd.tooltip = "Toggletip in shadow DOM";
|
|
8
|
+
shadow.appendChild(tsd);
|
|
9
|
+
});
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { csvToArray, getAcceptedMimeTypesList, intl, snakeCaseToCamelCase, getNewIndexToFocus, transposeMatrix, wrapAround, skipByInterval, getSmallestSkipInterval, calcPercentageInRange, } from "./functions";
|
|
2
|
+
describe("Global functions", () => {
|
|
3
|
+
it("converts the list of extensions into a list of MIME types", () => {
|
|
4
|
+
expect(getAcceptedMimeTypesList(["pdf", "doc", "txt"])).toMatchObject([
|
|
5
|
+
"application/pdf",
|
|
6
|
+
"application/msword",
|
|
7
|
+
"text/plain",
|
|
8
|
+
]);
|
|
9
|
+
});
|
|
10
|
+
it("translates", () => {
|
|
11
|
+
expect(intl.formatMessage({ id: "date.Monday", defaultMessage: "Monday" })).toEqual("Monday"); // falls back to English when language attribute is not set
|
|
12
|
+
});
|
|
13
|
+
it("changes string from snake_case to camelCase", async () => {
|
|
14
|
+
expect(snakeCaseToCamelCase("snake_case")).toBe("snakeCase");
|
|
15
|
+
expect(snakeCaseToCamelCase("even_more_words")).toBe("evenMoreWords");
|
|
16
|
+
expect(snakeCaseToCamelCase("camelCase")).toBe("camelCase");
|
|
17
|
+
expect(snakeCaseToCamelCase("A regular sentence")).toBe("A regular sentence");
|
|
18
|
+
expect(snakeCaseToCamelCase("singleword")).toBe("singleword");
|
|
19
|
+
});
|
|
20
|
+
it("parses comma separated values properly", async () => {
|
|
21
|
+
expect(csvToArray("one, two, three")).toStrictEqual(["one", "two", "three"]);
|
|
22
|
+
expect(csvToArray("four,five, six")).toStrictEqual(["four", "five", "six"]);
|
|
23
|
+
expect(csvToArray("seven eight,nine ten eleven")).toStrictEqual(["seven eight", "nine ten eleven"]);
|
|
24
|
+
});
|
|
25
|
+
it("gets new index to focus correctly", async () => {
|
|
26
|
+
let index = 1;
|
|
27
|
+
let direction = "ArrowDown";
|
|
28
|
+
let listLength = 5;
|
|
29
|
+
// moves forward
|
|
30
|
+
expect(getNewIndexToFocus(index, direction, listLength)).toBe(index + 1);
|
|
31
|
+
// wraps backwards
|
|
32
|
+
index = 4;
|
|
33
|
+
expect(getNewIndexToFocus(index, direction, listLength)).toBe(0);
|
|
34
|
+
// moves backwards
|
|
35
|
+
direction = "ArrowUp";
|
|
36
|
+
index = 2;
|
|
37
|
+
expect(getNewIndexToFocus(index, direction, listLength)).toBe(index - 1);
|
|
38
|
+
// wraps forward
|
|
39
|
+
index = 0;
|
|
40
|
+
expect(getNewIndexToFocus(index, direction, listLength)).toBe(listLength - 1);
|
|
41
|
+
});
|
|
42
|
+
it("transposes matrices correctly", () => {
|
|
43
|
+
expect(transposeMatrix([
|
|
44
|
+
[0, 1, 2],
|
|
45
|
+
[3, 4, 5],
|
|
46
|
+
[6, 7, 8],
|
|
47
|
+
])).toStrictEqual([
|
|
48
|
+
[0, 3, 6],
|
|
49
|
+
[1, 4, 7],
|
|
50
|
+
[2, 5, 8],
|
|
51
|
+
]);
|
|
52
|
+
expect(transposeMatrix([
|
|
53
|
+
[0, 1, 2, 3],
|
|
54
|
+
[4, 5, 6, 7],
|
|
55
|
+
[8, 9, 10, 11],
|
|
56
|
+
])).toStrictEqual([
|
|
57
|
+
[0, 4, 8],
|
|
58
|
+
[1, 5, 9],
|
|
59
|
+
[2, 6, 10],
|
|
60
|
+
[3, 7, 11],
|
|
61
|
+
]);
|
|
62
|
+
expect(transposeMatrix([
|
|
63
|
+
["0", "1", "2"],
|
|
64
|
+
["3", "4", "5"],
|
|
65
|
+
["6", "7", "8"],
|
|
66
|
+
])).toStrictEqual([
|
|
67
|
+
["0", "3", "6"],
|
|
68
|
+
["1", "4", "7"],
|
|
69
|
+
["2", "5", "8"],
|
|
70
|
+
]);
|
|
71
|
+
expect(transposeMatrix([
|
|
72
|
+
[0, "1", 2],
|
|
73
|
+
[3, 4, [5]],
|
|
74
|
+
[{ key: "value" }, 7, 8],
|
|
75
|
+
])).toStrictEqual([
|
|
76
|
+
[0, 3, { key: "value" }],
|
|
77
|
+
["1", 4, 7],
|
|
78
|
+
[2, [5], 8],
|
|
79
|
+
]);
|
|
80
|
+
});
|
|
81
|
+
it("wraps around indices correctly", () => {
|
|
82
|
+
// forward steps
|
|
83
|
+
expect(wrapAround(0, 1, 8)).toBe(1);
|
|
84
|
+
expect(wrapAround(2, 3, 8)).toBe(5);
|
|
85
|
+
expect(wrapAround(7, 1, 8)).toBe(8);
|
|
86
|
+
// forward to 0
|
|
87
|
+
expect(wrapAround(8, 1, 8)).toBe(0);
|
|
88
|
+
expect(wrapAround(2, 7, 8)).toBe(0);
|
|
89
|
+
// forward beyond 0
|
|
90
|
+
expect(wrapAround(8, 4, 8)).toBe(3);
|
|
91
|
+
expect(wrapAround(2, 10, 8)).toBe(3);
|
|
92
|
+
// backward steps
|
|
93
|
+
expect(wrapAround(8, -1, 8)).toBe(7);
|
|
94
|
+
expect(wrapAround(5, -3, 8)).toBe(2);
|
|
95
|
+
expect(wrapAround(1, -1, 8)).toBe(0);
|
|
96
|
+
// backward to end
|
|
97
|
+
expect(wrapAround(0, -1, 8)).toBe(8);
|
|
98
|
+
expect(wrapAround(7, -8, 8)).toBe(8);
|
|
99
|
+
// backward beyond end
|
|
100
|
+
expect(wrapAround(0, -7, 8)).toBe(2);
|
|
101
|
+
expect(wrapAround(2, -7, 8)).toBe(4);
|
|
102
|
+
// multiple wraps
|
|
103
|
+
expect(wrapAround(0, 10, 2)).toBe(1);
|
|
104
|
+
expect(wrapAround(0, -10, 2)).toBe(2);
|
|
105
|
+
});
|
|
106
|
+
it("skips by interval correctly", () => {
|
|
107
|
+
const list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
|
|
108
|
+
expect(skipByInterval(list, 0)).toStrictEqual([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
|
|
109
|
+
expect(skipByInterval(list, 1)).toStrictEqual([0, 2, 4, 6, 8]);
|
|
110
|
+
expect(skipByInterval(list, 2)).toStrictEqual([0, 3, 6, 9]);
|
|
111
|
+
expect(skipByInterval(list, 3)).toStrictEqual([0, 4, 8]);
|
|
112
|
+
expect(skipByInterval(list, 4)).toStrictEqual([0, 5]);
|
|
113
|
+
expect(skipByInterval(list, 5)).toStrictEqual([0, 6]);
|
|
114
|
+
expect(skipByInterval(list, 20)).toStrictEqual([0]);
|
|
115
|
+
expect(getSmallestSkipInterval(list, 6)).toStrictEqual({ skipInterval: 1, skippedList: [0, 2, 4, 6, 8] });
|
|
116
|
+
expect(getSmallestSkipInterval(list, 5)).toStrictEqual({ skipInterval: 1, skippedList: [0, 2, 4, 6, 8] });
|
|
117
|
+
expect(getSmallestSkipInterval(list, 3)).toStrictEqual({ skipInterval: 3, skippedList: [0, 4, 8] });
|
|
118
|
+
expect(getSmallestSkipInterval(list, 1)).toStrictEqual({ skipInterval: 9, skippedList: [0] });
|
|
119
|
+
});
|
|
120
|
+
it("calcs percentage in range properly", () => {
|
|
121
|
+
expect(calcPercentageInRange(13, 0, 100)).toBe(13);
|
|
122
|
+
expect(calcPercentageInRange(-75, -100, 0)).toBe(25);
|
|
123
|
+
expect(calcPercentageInRange(50, 25, 75)).toBe(50);
|
|
124
|
+
expect(calcPercentageInRange(150, 100, 300)).toBe(25);
|
|
125
|
+
});
|
|
126
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const en = require("./en.json");
|
|
3
|
+
const fr = require("./fr.json");
|
|
4
|
+
const es = require("./es.json");
|
|
5
|
+
const pig = require("./pig.json");
|
|
6
|
+
describe("translations", () => {
|
|
7
|
+
it("has translated strings for every key", () => {
|
|
8
|
+
let missingFR = [];
|
|
9
|
+
let missingES = [];
|
|
10
|
+
let missingPIG = [];
|
|
11
|
+
for (let i = 0; i < Object.keys(en).length; i++) {
|
|
12
|
+
!Object.keys(fr).includes(Object.keys(en)[i]) && missingFR.push(Object.keys(en)[i]);
|
|
13
|
+
!Object.keys(es).includes(Object.keys(en)[i]) && missingES.push(Object.keys(en)[i]);
|
|
14
|
+
!Object.keys(pig).includes(Object.keys(en)[i]) && missingPIG.push(Object.keys(en)[i]);
|
|
15
|
+
}
|
|
16
|
+
expect(missingFR.length).toBe(0);
|
|
17
|
+
expect(missingES.length).toBe(0);
|
|
18
|
+
expect(missingPIG.length).toBe(0);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { h } from './index-
|
|
2
|
-
import { i as intl, c as checkForActiveElInShadow, e as safeMultiplyFloat, f as getPosition } from './functions-
|
|
1
|
+
import { h } from './index-558b5a82.js';
|
|
2
|
+
import { i as intl, c as checkForActiveElInShadow, e as safeMultiplyFloat, f as getPosition } from './functions-899cea51.js';
|
|
3
3
|
|
|
4
4
|
const colors = {
|
|
5
5
|
salmon: "#ff5f4e",
|
|
@@ -69,7 +69,7 @@ const allChartsDetails = {
|
|
|
69
69
|
bar5: {
|
|
70
70
|
size: 400,
|
|
71
71
|
colors: [
|
|
72
|
-
colors.gray,
|
|
72
|
+
colors.gray,
|
|
73
73
|
colors.lavender,
|
|
74
74
|
colors.midnight,
|
|
75
75
|
"#0089e4",
|
|
@@ -395,9 +395,9 @@ function getPathData(amount, offset, chartType) {
|
|
|
395
395
|
const half = this.chartDetails.size / 2;
|
|
396
396
|
const innerRadius = this.chartDetails.thickness;
|
|
397
397
|
const outerRadius = 1;
|
|
398
|
-
const
|
|
398
|
+
const isProgressIndicator = chartType === "doughnut";
|
|
399
399
|
const outerSeparatorOffset = 1.5;
|
|
400
|
-
const innerSeparatorOffset =
|
|
400
|
+
const innerSeparatorOffset = isProgressIndicator ? 2.25 : 3;
|
|
401
401
|
if (activeAngle === 360) {
|
|
402
402
|
// fix to avoid bad svg shape when the path goes all around (100%)
|
|
403
403
|
endAngle -= 0.01;
|
|
@@ -464,18 +464,28 @@ function applyMinimumAngle(minimumAngle, slicesDetails, total) {
|
|
|
464
464
|
}
|
|
465
465
|
function renderDoughnut(chartType) {
|
|
466
466
|
const outerSize = this.chartDetails.size + this.chartDetails.padding;
|
|
467
|
-
const
|
|
467
|
+
const isProgressIndicator = chartType === "doughnut";
|
|
468
468
|
// no sorting in progress indicators
|
|
469
|
-
let slicesDetails =
|
|
469
|
+
let slicesDetails = isProgressIndicator ? this.slicesDetails : sortSlicesDetails(this.slicesDetails, this.total);
|
|
470
470
|
slicesDetails = applyMinimumAngle(7, slicesDetails, this.total);
|
|
471
|
-
|
|
472
|
-
|
|
471
|
+
// perc is only for progress indicator
|
|
472
|
+
const amount = slicesDetails[0].amount;
|
|
473
|
+
let perc = amountToPercent(amount, this.total, true);
|
|
474
|
+
if (perc === 0 && amount > 0) {
|
|
475
|
+
perc = "<1%";
|
|
476
|
+
}
|
|
477
|
+
else if (perc === 100 && amount < this.total) {
|
|
478
|
+
perc = ">99%";
|
|
479
|
+
}
|
|
480
|
+
else {
|
|
481
|
+
perc = perc + "%";
|
|
482
|
+
}
|
|
473
483
|
return (h("div", { class: "chart-wrapper doughnut-wrapper" },
|
|
474
484
|
h("svg", { width: outerSize + "px", height: outerSize + "px", id: `graphic-${this.uid}`, class: "doughnut-svg" },
|
|
475
485
|
renderFilter(),
|
|
476
486
|
slicesDetails.map((s) => renderPath.call(this, s, chartType)),
|
|
477
487
|
renderFocusOutline.call(this),
|
|
478
|
-
|
|
488
|
+
isProgressIndicator ? (h("text", { class: "value", x: "50%", y: "50%", "font-size": "1.5rem", "font-weight": "500", "text-anchor": "middle", "dominant-baseline": "middle" }, perc)) : (h("g", { transform: `translate(${this.chartDetails.padding / 2}, ${this.chartDetails.padding / 2})`, "text-anchor": "middle", "dominant-baseline": "middle" }, slicesDetails.map((s) => s.amount > 0 && !s.inSmallCluster ? renderDoughnutText.call(this, s) : ""))))));
|
|
479
489
|
}
|
|
480
490
|
function highlightSegmentInfo(infoEls, s) {
|
|
481
491
|
infoEls.forEach((el) => {
|
|
@@ -506,7 +516,17 @@ function renderFocusOutline() {
|
|
|
506
516
|
function renderDoughnutText(s) {
|
|
507
517
|
const arcMiddle = amountToDegree(s.offset + s.visualAmount / 2, this.total);
|
|
508
518
|
let { x, y } = polarToCartesian(this.chartDetails.size / 2, 1.4, arcMiddle - 90);
|
|
509
|
-
|
|
519
|
+
let val;
|
|
520
|
+
if (s.perc === 0 && s.amount > 0) {
|
|
521
|
+
val = "<1%";
|
|
522
|
+
}
|
|
523
|
+
else if (s.perc === 100 && s.amount < this.total) {
|
|
524
|
+
val = ">99%";
|
|
525
|
+
}
|
|
526
|
+
else {
|
|
527
|
+
val = s.perc + "%";
|
|
528
|
+
}
|
|
529
|
+
return (h("text", { class: "value", x: x + "px", y: y + "px", "data-segmentindex": s.index }, val));
|
|
510
530
|
}
|
|
511
531
|
function renderStackedBar(chartType) {
|
|
512
532
|
const isHybridBar = chartType === "bar";
|