@watermarkinsights/ripple 3.25.0-2 → 3.25.0
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/README.md +3 -3
- package/dist/cjs/{chartFunctions-9dce0ea3.js → chartFunctions-2f04ab6a.js} +591 -591
- package/dist/cjs/chartFunctions-2f04ab6a.js.map +1 -0
- package/dist/cjs/{functions-53aff314.js → functions-d2d99997.js} +478 -478
- package/dist/cjs/{functions-53aff314.js.map → functions-d2d99997.js.map} +1 -1
- package/dist/cjs/{global-c22b1249.js → global-d0584d18.js} +63 -63
- package/dist/cjs/global-d0584d18.js.map +1 -0
- package/dist/cjs/{http-service-494d81de.js → http-service-9e8c4dd5.js} +50 -50
- package/dist/cjs/http-service-9e8c4dd5.js.map +1 -0
- package/dist/cjs/{interfaces-a3338581.js → interfaces-30a74c1f.js} +30 -30
- package/dist/cjs/interfaces-30a74c1f.js.map +1 -0
- package/dist/cjs/intl-a1ccf587.js +140 -0
- package/dist/cjs/intl-a1ccf587.js.map +1 -0
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/priv-chart-popover.cjs.entry.js +91 -91
- package/dist/cjs/priv-chart-popover.cjs.entry.js.map +1 -1
- package/dist/cjs/priv-datepicker.cjs.entry.js +657 -657
- package/dist/cjs/priv-datepicker.cjs.entry.js.map +1 -1
- package/dist/cjs/priv-navigator-button.cjs.entry.js +19 -19
- package/dist/cjs/priv-navigator-button.cjs.entry.js.map +1 -1
- package/dist/cjs/priv-navigator-item.cjs.entry.js +23 -23
- package/dist/cjs/priv-navigator-item.cjs.entry.js.map +1 -1
- package/dist/cjs/ripple.cjs.js +2 -2
- package/dist/cjs/wm-action-menu_2.cjs.entry.js +334 -334
- package/dist/cjs/wm-action-menu_2.cjs.entry.js.map +1 -1
- package/dist/cjs/wm-button.cjs.entry.js +260 -260
- package/dist/cjs/wm-button.cjs.entry.js.map +1 -1
- package/dist/cjs/wm-chart-slice.cjs.entry.js +18 -18
- package/dist/cjs/wm-chart-slice.cjs.entry.js.map +1 -1
- package/dist/cjs/wm-chart.cjs.entry.js +179 -179
- package/dist/cjs/wm-chart.cjs.entry.js.map +1 -1
- package/dist/cjs/wm-datepicker.cjs.entry.js +264 -264
- package/dist/cjs/wm-datepicker.cjs.entry.js.map +1 -1
- package/dist/cjs/wm-file-list.cjs.entry.js +35 -35
- package/dist/cjs/wm-file-list.cjs.entry.js.map +1 -1
- package/dist/cjs/wm-file.cjs.entry.js +201 -201
- package/dist/cjs/wm-file.cjs.entry.js.map +1 -1
- package/dist/cjs/wm-input.cjs.entry.js +124 -140
- package/dist/cjs/wm-input.cjs.entry.js.map +1 -1
- package/dist/cjs/wm-modal-footer.cjs.entry.js +33 -33
- package/dist/cjs/wm-modal-footer.cjs.entry.js.map +1 -1
- package/dist/cjs/wm-modal-header.cjs.entry.js +32 -32
- package/dist/cjs/wm-modal-header.cjs.entry.js.map +1 -1
- package/dist/cjs/wm-modal.cjs.entry.js +152 -152
- package/dist/cjs/wm-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/wm-navigation_3.cjs.entry.js +225 -230
- package/dist/cjs/wm-navigation_3.cjs.entry.js.map +1 -1
- package/dist/cjs/wm-navigator.cjs.entry.js +264 -264
- package/dist/cjs/wm-navigator.cjs.entry.js.map +1 -1
- package/dist/cjs/wm-network-uploader.cjs.entry.js +465 -467
- package/dist/cjs/wm-network-uploader.cjs.entry.js.map +1 -1
- package/dist/cjs/wm-option_2.cjs.entry.js +769 -772
- package/dist/cjs/wm-option_2.cjs.entry.js.map +1 -1
- package/dist/cjs/wm-pagination.cjs.entry.js +179 -179
- package/dist/cjs/wm-pagination.cjs.entry.js.map +1 -1
- package/dist/cjs/wm-progress-indicator_3.cjs.entry.js +155 -155
- package/dist/cjs/wm-progress-indicator_3.cjs.entry.js.map +1 -1
- package/dist/cjs/wm-search.cjs.entry.js +185 -192
- package/dist/cjs/wm-search.cjs.entry.js.map +1 -1
- package/dist/cjs/wm-snackbar.cjs.entry.js +155 -159
- package/dist/cjs/wm-snackbar.cjs.entry.js.map +1 -1
- package/dist/cjs/wm-tab-item_3.cjs.entry.js +264 -264
- package/dist/cjs/wm-tab-item_3.cjs.entry.js.map +1 -1
- package/dist/cjs/wm-tag-input-row.cjs.entry.js +14 -14
- package/dist/cjs/wm-tag-input-row.cjs.entry.js.map +1 -1
- package/dist/cjs/wm-tag-input.cjs.entry.js +912 -924
- package/dist/cjs/wm-tag-input.cjs.entry.js.map +1 -1
- package/dist/cjs/wm-timepicker.cjs.entry.js +386 -386
- package/dist/cjs/wm-timepicker.cjs.entry.js.map +1 -1
- package/dist/cjs/wm-toggletip.cjs.entry.js +130 -130
- package/dist/cjs/wm-toggletip.cjs.entry.js.map +1 -1
- package/dist/cjs/wm-uploader.cjs.entry.js +441 -510
- package/dist/cjs/wm-uploader.cjs.entry.js.map +1 -1
- package/dist/cjs/wm-wrapper.cjs.entry.js +12 -12
- package/dist/cjs/wm-wrapper.cjs.entry.js.map +1 -1
- package/dist/collection/components/charts/chartFunctions.js +557 -557
- package/dist/collection/components/charts/chartFunctions.js.map +1 -1
- package/dist/collection/components/charts/priv-chart-popover/priv-chart-popover.js +268 -270
- package/dist/collection/components/charts/priv-chart-popover/priv-chart-popover.js.map +1 -1
- package/dist/collection/components/charts/wm-chart/wm-chart-slice.js +126 -126
- package/dist/collection/components/charts/wm-chart/wm-chart-slice.js.map +1 -1
- package/dist/collection/components/charts/wm-chart/wm-chart.js +447 -447
- package/dist/collection/components/charts/wm-chart/wm-chart.js.map +1 -1
- package/dist/collection/components/charts/wm-progress-monitor/wm-progress-indicator.js +208 -208
- package/dist/collection/components/charts/wm-progress-monitor/wm-progress-indicator.js.map +1 -1
- package/dist/collection/components/charts/wm-progress-monitor/wm-progress-monitor.js +144 -144
- package/dist/collection/components/charts/wm-progress-monitor/wm-progress-monitor.js.map +1 -1
- package/dist/collection/components/charts/wm-progress-monitor/wm-progress-slice.js +122 -122
- package/dist/collection/components/charts/wm-progress-monitor/wm-progress-slice.js.map +1 -1
- package/dist/collection/components/wm-action-menu/wm-action-menu.js +473 -473
- package/dist/collection/components/wm-action-menu/wm-action-menu.js.map +1 -1
- package/dist/collection/components/wm-button/wm-button.js +576 -576
- package/dist/collection/components/wm-button/wm-button.js.map +1 -1
- package/dist/collection/components/wm-datepicker/priv-datepicker/priv-datepicker.js +984 -984
- package/dist/collection/components/wm-datepicker/priv-datepicker/priv-datepicker.js.map +1 -1
- package/dist/collection/components/wm-datepicker/wm-datepicker.css +4 -4
- package/dist/collection/components/wm-datepicker/wm-datepicker.js +492 -492
- package/dist/collection/components/wm-datepicker/wm-datepicker.js.map +1 -1
- package/dist/collection/components/wm-file/wm-file.js +334 -334
- package/dist/collection/components/wm-file/wm-file.js.map +1 -1
- package/dist/collection/components/wm-file-list/wm-file-list.js +153 -153
- package/dist/collection/components/wm-file-list/wm-file-list.js.map +1 -1
- package/dist/collection/components/wm-input/wm-input.css +4 -4
- package/dist/collection/components/wm-input/wm-input.js +428 -444
- package/dist/collection/components/wm-input/wm-input.js.map +1 -1
- package/dist/collection/components/wm-menuitem/wm-menuitem.js +455 -455
- package/dist/collection/components/wm-menuitem/wm-menuitem.js.map +1 -1
- package/dist/collection/components/wm-modal/wm-modal-footer.js +139 -139
- package/dist/collection/components/wm-modal/wm-modal-footer.js.map +1 -1
- package/dist/collection/components/wm-modal/wm-modal-header.js +83 -83
- package/dist/collection/components/wm-modal/wm-modal-header.js.map +1 -1
- package/dist/collection/components/wm-modal/wm-modal.js +463 -463
- package/dist/collection/components/wm-modal/wm-modal.js.map +1 -1
- package/dist/collection/components/wm-navigation/wm-navigation-hamburger.js +177 -177
- package/dist/collection/components/wm-navigation/wm-navigation-hamburger.js.map +1 -1
- package/dist/collection/components/wm-navigation/wm-navigation-item.js +131 -131
- package/dist/collection/components/wm-navigation/wm-navigation-item.js.map +1 -1
- package/dist/collection/components/wm-navigation/wm-navigation.js +218 -223
- package/dist/collection/components/wm-navigation/wm-navigation.js.map +1 -1
- package/dist/collection/components/wm-navigator/priv-navigator-button/priv-navigator-button.js +107 -107
- package/dist/collection/components/wm-navigator/priv-navigator-button/priv-navigator-button.js.map +1 -1
- package/dist/collection/components/wm-navigator/priv-navigator-item/priv-navigator-item.js +124 -124
- package/dist/collection/components/wm-navigator/priv-navigator-item/priv-navigator-item.js.map +1 -1
- package/dist/collection/components/wm-navigator/wm-navigator.js +468 -468
- package/dist/collection/components/wm-navigator/wm-navigator.js.map +1 -1
- package/dist/collection/components/wm-option/wm-option.js +436 -436
- package/dist/collection/components/wm-option/wm-option.js.map +1 -1
- package/dist/collection/components/wm-pagination/wm-pagination.js +371 -371
- package/dist/collection/components/wm-pagination/wm-pagination.js.map +1 -1
- package/dist/collection/components/wm-search/wm-search.css +5 -3
- package/dist/collection/components/wm-search/wm-search.js +440 -447
- package/dist/collection/components/wm-search/wm-search.js.map +1 -1
- package/dist/collection/components/wm-select/wm-select.css +4 -4
- package/dist/collection/components/wm-select/wm-select.js +1055 -1058
- package/dist/collection/components/wm-select/wm-select.js.map +1 -1
- package/dist/collection/components/wm-snackbar/wm-snackbar.js +283 -287
- package/dist/collection/components/wm-snackbar/wm-snackbar.js.map +1 -1
- package/dist/collection/components/wm-tabs/wm-tab-item/wm-tab-item.js +212 -212
- package/dist/collection/components/wm-tabs/wm-tab-item/wm-tab-item.js.map +1 -1
- package/dist/collection/components/wm-tabs/wm-tab-list/wm-tab-list.js +328 -328
- package/dist/collection/components/wm-tabs/wm-tab-list/wm-tab-list.js.map +1 -1
- package/dist/collection/components/wm-tabs/wm-tab-panel/wm-tab-panel.js +109 -109
- package/dist/collection/components/wm-tabs/wm-tab-panel/wm-tab-panel.js.map +1 -1
- package/dist/collection/components/wm-tag-input/wm-tag-input-row/wm-tag-input-row.js +123 -123
- package/dist/collection/components/wm-tag-input/wm-tag-input-row/wm-tag-input-row.js.map +1 -1
- package/dist/collection/components/wm-tag-input/wm-tag-input.css +4 -4
- package/dist/collection/components/wm-tag-input/wm-tag-input.js +1267 -1279
- package/dist/collection/components/wm-tag-input/wm-tag-input.js.map +1 -1
- package/dist/collection/components/wm-timepicker/wm-timepicker.css +4 -4
- package/dist/collection/components/wm-timepicker/wm-timepicker.js +606 -606
- package/dist/collection/components/wm-timepicker/wm-timepicker.js.map +1 -1
- package/dist/collection/components/wm-toggletip/wm-toggletip.js +254 -254
- package/dist/collection/components/wm-toggletip/wm-toggletip.js.map +1 -1
- package/dist/collection/components/wm-uploader/wm-network-uploader/wm-network-uploader.js +773 -775
- package/dist/collection/components/wm-uploader/wm-network-uploader/wm-network-uploader.js.map +1 -1
- package/dist/collection/components/wm-uploader/wm-uploader.js +965 -1034
- package/dist/collection/components/wm-uploader/wm-uploader.js.map +1 -1
- package/dist/collection/components/wm-wrapper/wm-wrapper.js +29 -29
- package/dist/collection/components/wm-wrapper/wm-wrapper.js.map +1 -1
- package/dist/collection/dev/scripts.js +20 -20
- package/dist/collection/global/__mocks__/functions.js +7 -7
- package/dist/collection/global/__mocks__/functions.js.map +1 -1
- package/dist/collection/global/functions.js +521 -521
- package/dist/collection/global/functions.js.map +1 -1
- package/dist/collection/global/global.js +70 -70
- package/dist/collection/global/global.js.map +1 -1
- package/dist/collection/global/interfaces.js +50 -50
- package/dist/collection/global/interfaces.js.map +1 -1
- package/dist/collection/global/intl.js +133 -7
- package/dist/collection/global/intl.js.map +1 -1
- package/dist/collection/global/services/__mocks__/http-service.js +131 -131
- package/dist/collection/global/services/__mocks__/http-service.js.map +1 -1
- package/dist/collection/global/services/http-service.js +51 -51
- package/dist/collection/global/services/http-service.js.map +1 -1
- package/dist/collection/lang/lang.js +6 -6
- package/dist/collection/lang/lang.js.map +1 -1
- package/dist/collection/lang/missing.js +43 -43
- package/dist/collection/lang/piglatin.js +93 -93
- package/dist/esm/{chartFunctions-1df8043a.js → chartFunctions-a72f5835.js} +591 -591
- package/dist/esm/chartFunctions-a72f5835.js.map +1 -0
- package/dist/esm/{functions-bb1309d0.js → functions-dc9964aa.js} +478 -478
- package/dist/esm/{functions-bb1309d0.js.map → functions-dc9964aa.js.map} +1 -1
- package/dist/esm/{global-2c5c2727.js → global-3d0ef32b.js} +63 -63
- package/dist/esm/global-3d0ef32b.js.map +1 -0
- package/dist/esm/{http-service-3dc3b3e7.js → http-service-5d037e16.js} +50 -50
- package/dist/esm/http-service-5d037e16.js.map +1 -0
- package/dist/esm/{interfaces-2b97fab2.js → interfaces-61c6305b.js} +30 -30
- package/dist/esm/interfaces-61c6305b.js.map +1 -0
- package/dist/esm/intl-4d4826dd.js +137 -0
- package/dist/esm/intl-4d4826dd.js.map +1 -0
- package/dist/esm/loader.js +2 -2
- package/dist/esm/polyfills/core-js.js +0 -0
- package/dist/esm/polyfills/dom.js +0 -0
- package/dist/esm/polyfills/es5-html-element.js +0 -0
- package/dist/esm/polyfills/index.js +0 -0
- package/dist/esm/polyfills/system.js +0 -0
- package/dist/esm/priv-chart-popover.entry.js +91 -91
- package/dist/esm/priv-chart-popover.entry.js.map +1 -1
- package/dist/esm/priv-datepicker.entry.js +657 -657
- package/dist/esm/priv-datepicker.entry.js.map +1 -1
- package/dist/esm/priv-navigator-button.entry.js +19 -19
- package/dist/esm/priv-navigator-button.entry.js.map +1 -1
- package/dist/esm/priv-navigator-item.entry.js +23 -23
- package/dist/esm/priv-navigator-item.entry.js.map +1 -1
- package/dist/esm/ripple.js +2 -2
- package/dist/esm/wm-action-menu_2.entry.js +334 -334
- package/dist/esm/wm-action-menu_2.entry.js.map +1 -1
- package/dist/esm/wm-button.entry.js +260 -260
- package/dist/esm/wm-button.entry.js.map +1 -1
- package/dist/esm/wm-chart-slice.entry.js +18 -18
- package/dist/esm/wm-chart-slice.entry.js.map +1 -1
- package/dist/esm/wm-chart.entry.js +179 -179
- package/dist/esm/wm-chart.entry.js.map +1 -1
- package/dist/esm/wm-datepicker.entry.js +264 -264
- package/dist/esm/wm-datepicker.entry.js.map +1 -1
- package/dist/esm/wm-file-list.entry.js +35 -35
- package/dist/esm/wm-file-list.entry.js.map +1 -1
- package/dist/esm/wm-file.entry.js +201 -201
- package/dist/esm/wm-file.entry.js.map +1 -1
- package/dist/esm/wm-input.entry.js +124 -140
- package/dist/esm/wm-input.entry.js.map +1 -1
- package/dist/esm/wm-modal-footer.entry.js +33 -33
- package/dist/esm/wm-modal-footer.entry.js.map +1 -1
- package/dist/esm/wm-modal-header.entry.js +32 -32
- package/dist/esm/wm-modal-header.entry.js.map +1 -1
- package/dist/esm/wm-modal.entry.js +152 -152
- package/dist/esm/wm-modal.entry.js.map +1 -1
- package/dist/esm/wm-navigation_3.entry.js +225 -230
- package/dist/esm/wm-navigation_3.entry.js.map +1 -1
- package/dist/esm/wm-navigator.entry.js +264 -264
- package/dist/esm/wm-navigator.entry.js.map +1 -1
- package/dist/esm/wm-network-uploader.entry.js +465 -467
- package/dist/esm/wm-network-uploader.entry.js.map +1 -1
- package/dist/esm/wm-option_2.entry.js +769 -772
- package/dist/esm/wm-option_2.entry.js.map +1 -1
- package/dist/esm/wm-pagination.entry.js +179 -179
- package/dist/esm/wm-pagination.entry.js.map +1 -1
- package/dist/esm/wm-progress-indicator_3.entry.js +155 -155
- package/dist/esm/wm-progress-indicator_3.entry.js.map +1 -1
- package/dist/esm/wm-search.entry.js +185 -192
- package/dist/esm/wm-search.entry.js.map +1 -1
- package/dist/esm/wm-snackbar.entry.js +155 -159
- package/dist/esm/wm-snackbar.entry.js.map +1 -1
- package/dist/esm/wm-tab-item_3.entry.js +264 -264
- package/dist/esm/wm-tab-item_3.entry.js.map +1 -1
- package/dist/esm/wm-tag-input-row.entry.js +14 -14
- package/dist/esm/wm-tag-input-row.entry.js.map +1 -1
- package/dist/esm/wm-tag-input.entry.js +912 -924
- package/dist/esm/wm-tag-input.entry.js.map +1 -1
- package/dist/esm/wm-timepicker.entry.js +386 -386
- package/dist/esm/wm-timepicker.entry.js.map +1 -1
- package/dist/esm/wm-toggletip.entry.js +130 -130
- package/dist/esm/wm-toggletip.entry.js.map +1 -1
- package/dist/esm/wm-uploader.entry.js +441 -510
- package/dist/esm/wm-uploader.entry.js.map +1 -1
- package/dist/esm/wm-wrapper.entry.js +12 -12
- package/dist/esm/wm-wrapper.entry.js.map +1 -1
- package/dist/esm-es5/{chartFunctions-1df8043a.js → chartFunctions-a72f5835.js} +2 -2
- package/dist/esm-es5/chartFunctions-a72f5835.js.map +1 -0
- package/dist/esm-es5/{functions-bb1309d0.js → functions-dc9964aa.js} +1 -1
- package/dist/esm-es5/{functions-bb1309d0.js.map → functions-dc9964aa.js.map} +1 -1
- package/dist/esm-es5/global-3d0ef32b.js +2 -0
- package/dist/esm-es5/global-3d0ef32b.js.map +1 -0
- package/dist/esm-es5/{http-service-3dc3b3e7.js → http-service-5d037e16.js} +1 -1
- package/dist/esm-es5/http-service-5d037e16.js.map +1 -0
- package/dist/esm-es5/{interfaces-2b97fab2.js → interfaces-61c6305b.js} +1 -1
- package/dist/esm-es5/interfaces-61c6305b.js.map +1 -0
- package/dist/esm-es5/intl-4d4826dd.js +2 -0
- package/dist/esm-es5/intl-4d4826dd.js.map +1 -0
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/loader.js.map +1 -1
- package/dist/esm-es5/priv-chart-popover.entry.js +1 -1
- package/dist/esm-es5/priv-chart-popover.entry.js.map +1 -1
- package/dist/esm-es5/priv-datepicker.entry.js +1 -1
- package/dist/esm-es5/priv-datepicker.entry.js.map +1 -1
- package/dist/esm-es5/priv-navigator-button.entry.js.map +1 -1
- package/dist/esm-es5/priv-navigator-item.entry.js.map +1 -1
- package/dist/esm-es5/ripple.js +1 -1
- package/dist/esm-es5/ripple.js.map +1 -1
- package/dist/esm-es5/wm-action-menu_2.entry.js +1 -1
- package/dist/esm-es5/wm-action-menu_2.entry.js.map +1 -1
- package/dist/esm-es5/wm-button.entry.js +1 -1
- package/dist/esm-es5/wm-button.entry.js.map +1 -1
- package/dist/esm-es5/wm-chart-slice.entry.js.map +1 -1
- package/dist/esm-es5/wm-chart.entry.js +1 -1
- package/dist/esm-es5/wm-chart.entry.js.map +1 -1
- package/dist/esm-es5/wm-datepicker.entry.js +1 -1
- package/dist/esm-es5/wm-datepicker.entry.js.map +1 -1
- package/dist/esm-es5/wm-file-list.entry.js.map +1 -1
- package/dist/esm-es5/wm-file.entry.js +1 -1
- package/dist/esm-es5/wm-file.entry.js.map +1 -1
- package/dist/esm-es5/wm-input.entry.js +1 -1
- package/dist/esm-es5/wm-input.entry.js.map +1 -1
- package/dist/esm-es5/wm-modal-footer.entry.js.map +1 -1
- package/dist/esm-es5/wm-modal-header.entry.js +1 -1
- package/dist/esm-es5/wm-modal-header.entry.js.map +1 -1
- package/dist/esm-es5/wm-modal.entry.js +1 -1
- package/dist/esm-es5/wm-modal.entry.js.map +1 -1
- package/dist/esm-es5/wm-navigation_3.entry.js +1 -1
- package/dist/esm-es5/wm-navigation_3.entry.js.map +1 -1
- package/dist/esm-es5/wm-navigator.entry.js +1 -1
- package/dist/esm-es5/wm-navigator.entry.js.map +1 -1
- package/dist/esm-es5/wm-network-uploader.entry.js +1 -1
- package/dist/esm-es5/wm-network-uploader.entry.js.map +1 -1
- package/dist/esm-es5/wm-option_2.entry.js +1 -1
- package/dist/esm-es5/wm-option_2.entry.js.map +1 -1
- package/dist/esm-es5/wm-pagination.entry.js +1 -1
- package/dist/esm-es5/wm-pagination.entry.js.map +1 -1
- package/dist/esm-es5/wm-progress-indicator_3.entry.js +1 -1
- package/dist/esm-es5/wm-progress-indicator_3.entry.js.map +1 -1
- package/dist/esm-es5/wm-search.entry.js +1 -1
- package/dist/esm-es5/wm-search.entry.js.map +1 -1
- package/dist/esm-es5/wm-snackbar.entry.js +1 -1
- package/dist/esm-es5/wm-snackbar.entry.js.map +1 -1
- package/dist/esm-es5/wm-tab-item_3.entry.js +1 -1
- package/dist/esm-es5/wm-tab-item_3.entry.js.map +1 -1
- package/dist/esm-es5/wm-tag-input-row.entry.js.map +1 -1
- package/dist/esm-es5/wm-tag-input.entry.js +1 -1
- package/dist/esm-es5/wm-tag-input.entry.js.map +1 -1
- package/dist/esm-es5/wm-timepicker.entry.js +1 -1
- package/dist/esm-es5/wm-timepicker.entry.js.map +1 -1
- package/dist/esm-es5/wm-toggletip.entry.js +1 -1
- package/dist/esm-es5/wm-toggletip.entry.js.map +1 -1
- package/dist/esm-es5/wm-uploader.entry.js +1 -1
- package/dist/esm-es5/wm-uploader.entry.js.map +1 -1
- package/dist/esm-es5/wm-wrapper.entry.js.map +1 -1
- package/dist/ripple/{p-3f6c7e6c.entry.js → p-002d067e.entry.js} +2 -2
- package/dist/ripple/p-002d067e.entry.js.map +1 -0
- package/dist/ripple/p-02a1000a.entry.js +2 -0
- package/dist/ripple/p-02a1000a.entry.js.map +1 -0
- package/dist/ripple/{p-21bb563a.system.entry.js → p-04ae66fd.system.entry.js} +2 -2
- package/dist/ripple/p-04ae66fd.system.entry.js.map +1 -0
- package/dist/ripple/{p-c38f6103.system.js → p-0826dc64.system.js} +2 -2
- package/dist/ripple/{p-c38f6103.system.js.map → p-0826dc64.system.js.map} +1 -1
- package/dist/ripple/{p-f5df5903.system.js → p-08b7ec08.system.js} +1 -1
- package/dist/ripple/p-08b7ec08.system.js.map +1 -0
- package/dist/ripple/{p-d5b0809e.entry.js → p-0ad3a708.entry.js} +2 -2
- package/dist/ripple/p-0ad3a708.entry.js.map +1 -0
- package/dist/ripple/p-0cd13c7d.system.entry.js +2 -0
- package/dist/ripple/p-0cd13c7d.system.entry.js.map +1 -0
- package/dist/ripple/p-0d7bccf7.entry.js.map +1 -1
- package/dist/ripple/p-0eb7b1b7.system.entry.js +2 -0
- package/dist/ripple/p-0eb7b1b7.system.entry.js.map +1 -0
- package/dist/ripple/{p-70768add.entry.js → p-11124a23.entry.js} +2 -2
- package/dist/ripple/p-11124a23.entry.js.map +1 -0
- package/dist/ripple/p-1808b90a.entry.js +2 -0
- package/dist/ripple/p-1808b90a.entry.js.map +1 -0
- package/dist/ripple/p-1fd20e05.system.entry.js +2 -0
- package/dist/ripple/p-1fd20e05.system.entry.js.map +1 -0
- package/dist/ripple/{p-f36b1c58.system.entry.js → p-23fa1ff6.system.entry.js} +2 -2
- package/dist/ripple/p-23fa1ff6.system.entry.js.map +1 -0
- package/dist/ripple/p-24a4cb11.system.entry.js.map +1 -1
- package/dist/ripple/p-2c2a7092.system.entry.js.map +1 -1
- package/dist/ripple/{p-9d02957d.system.js → p-313b6073.system.js} +1 -1
- package/dist/ripple/p-313b6073.system.js.map +1 -0
- package/dist/ripple/p-33558ec4.system.entry.js.map +1 -1
- package/dist/ripple/{p-28c12986.system.entry.js → p-33ec18d4.system.entry.js} +2 -2
- package/dist/ripple/p-33ec18d4.system.entry.js.map +1 -0
- package/dist/ripple/{p-7d0f3abe.entry.js → p-341aa131.entry.js} +2 -2
- package/dist/ripple/p-341aa131.entry.js.map +1 -0
- package/dist/ripple/p-3759b7af.system.entry.js.map +1 -1
- package/dist/ripple/p-38449dff.system.entry.js +2 -0
- package/dist/ripple/p-38449dff.system.entry.js.map +1 -0
- package/dist/ripple/{p-ee97c3f6.entry.js → p-384c4981.entry.js} +2 -2
- package/dist/ripple/p-384c4981.entry.js.map +1 -0
- package/dist/ripple/{p-b81ce905.system.entry.js → p-3869a69e.system.entry.js} +2 -2
- package/dist/ripple/p-3869a69e.system.entry.js.map +1 -0
- package/dist/ripple/p-4391166c.entry.js.map +1 -1
- package/dist/ripple/{p-e6e7cb2d.entry.js → p-43be123d.entry.js} +2 -2
- package/dist/ripple/p-43be123d.entry.js.map +1 -0
- package/dist/ripple/p-4a014591.entry.js.map +1 -1
- package/dist/ripple/p-4a06d0a9.system.entry.js +2 -0
- package/dist/ripple/p-4a06d0a9.system.entry.js.map +1 -0
- package/dist/ripple/p-4e02e2ae.entry.js +2 -0
- package/dist/ripple/p-4e02e2ae.entry.js.map +1 -0
- package/dist/ripple/p-56cd4d5e.entry.js +2 -0
- package/dist/ripple/p-56cd4d5e.entry.js.map +1 -0
- package/dist/ripple/p-59654f8e.entry.js.map +1 -1
- package/dist/ripple/p-5cc287d2.entry.js +2 -0
- package/dist/ripple/p-5cc287d2.entry.js.map +1 -0
- package/dist/ripple/{p-8eebf787.entry.js → p-7e0e6b00.entry.js} +2 -2
- package/dist/ripple/p-7e0e6b00.entry.js.map +1 -0
- package/dist/ripple/{p-0400599e.system.entry.js → p-833c622f.system.entry.js} +2 -2
- package/dist/ripple/p-833c622f.system.entry.js.map +1 -0
- package/dist/ripple/{p-b00991d9.system.entry.js → p-8613600d.system.entry.js} +2 -2
- package/dist/ripple/p-8613600d.system.entry.js.map +1 -0
- package/dist/ripple/{p-43f1298b.js → p-888bec42.js} +1 -1
- package/dist/ripple/p-888bec42.js.map +1 -0
- package/dist/ripple/p-889579fc.entry.js +2 -0
- package/dist/ripple/p-889579fc.entry.js.map +1 -0
- package/dist/ripple/p-8c51e9f8.system.entry.js.map +1 -1
- package/dist/ripple/{p-42158d44.entry.js → p-8db604d2.entry.js} +2 -2
- package/dist/ripple/p-8db604d2.entry.js.map +1 -0
- package/dist/ripple/{p-24ef6556.system.entry.js → p-91deb45f.system.entry.js} +2 -2
- package/dist/ripple/p-91deb45f.system.entry.js.map +1 -0
- package/dist/ripple/p-9338011f.system.entry.js +2 -0
- package/dist/ripple/p-9338011f.system.entry.js.map +1 -0
- package/dist/ripple/p-976b2789.system.entry.js.map +1 -1
- package/dist/ripple/{p-1aa16d42.js → p-994303f2.js} +2 -2
- package/dist/ripple/p-994303f2.js.map +1 -0
- package/dist/ripple/p-9b2dfb54.js +2 -0
- package/dist/ripple/p-9b2dfb54.js.map +1 -0
- package/dist/ripple/p-9b9eb944.entry.js.map +1 -1
- package/dist/ripple/{p-980afed1.system.entry.js → p-a6d64d8a.system.entry.js} +2 -2
- package/dist/ripple/p-a6d64d8a.system.entry.js.map +1 -0
- package/dist/ripple/{p-fd8070fb.js → p-a6d6eae7.js} +1 -1
- package/dist/ripple/p-a6d6eae7.js.map +1 -0
- package/dist/ripple/{p-219fbe2b.system.entry.js → p-a73cf968.system.entry.js} +2 -2
- package/dist/ripple/p-a73cf968.system.entry.js.map +1 -0
- package/dist/ripple/{p-76aafb99.system.entry.js → p-aed625c1.system.entry.js} +2 -2
- package/dist/ripple/p-aed625c1.system.entry.js.map +1 -0
- package/dist/ripple/{p-0d36ceba.system.entry.js → p-b5b521e4.system.entry.js} +2 -2
- package/dist/ripple/p-b5b521e4.system.entry.js.map +1 -0
- package/dist/ripple/{p-47d223f1.system.entry.js → p-b7451e73.system.entry.js} +2 -2
- package/dist/ripple/p-b7451e73.system.entry.js.map +1 -0
- package/dist/ripple/p-bafdcb4e.system.entry.js +2 -0
- package/dist/ripple/p-bafdcb4e.system.entry.js.map +1 -0
- package/dist/ripple/{p-262713b9.entry.js → p-bb45e122.entry.js} +2 -2
- package/dist/ripple/p-bb45e122.entry.js.map +1 -0
- package/dist/ripple/p-bd84628c.system.entry.js +2 -0
- package/dist/ripple/p-bd84628c.system.entry.js.map +1 -0
- package/dist/ripple/p-bf569af0.entry.js.map +1 -1
- package/dist/ripple/p-c094f6a8.entry.js +2 -0
- package/dist/ripple/p-c094f6a8.entry.js.map +1 -0
- package/dist/ripple/p-c36002b6.system.js +2 -0
- package/dist/ripple/p-c36002b6.system.js.map +1 -0
- package/dist/ripple/p-c5bf7db8.entry.js +2 -0
- package/dist/ripple/p-c5bf7db8.entry.js.map +1 -0
- package/dist/ripple/p-c68b3798.system.js +2 -0
- package/dist/ripple/p-c68b3798.system.js.map +1 -0
- package/dist/ripple/{p-05e0f901.js → p-c6a0f7e5.js} +1 -1
- package/dist/ripple/{p-05e0f901.js.map → p-c6a0f7e5.js.map} +1 -1
- package/dist/ripple/{p-bcba3ce8.entry.js → p-d46f5794.entry.js} +2 -2
- package/dist/ripple/p-d46f5794.entry.js.map +1 -0
- package/dist/ripple/{p-d7ffac2f.entry.js → p-d48313e0.entry.js} +2 -2
- package/dist/ripple/p-d48313e0.entry.js.map +1 -0
- package/dist/ripple/p-d939cb54.entry.js.map +1 -1
- package/dist/ripple/p-dbfd1640.system.entry.js.map +1 -1
- package/dist/ripple/{p-d7c55ce1.entry.js → p-e22854c1.entry.js} +2 -2
- package/dist/ripple/p-e22854c1.entry.js.map +1 -0
- package/dist/ripple/p-e70bb79f.js +2 -0
- package/dist/ripple/p-e70bb79f.js.map +1 -0
- package/dist/ripple/{p-e99a7f36.entry.js → p-ed82573a.entry.js} +2 -2
- package/dist/ripple/p-ed82573a.entry.js.map +1 -0
- package/dist/ripple/{p-bc28c815.system.js → p-f0fd8695.system.js} +1 -1
- package/dist/ripple/{p-bc28c815.system.js.map → p-f0fd8695.system.js.map} +1 -1
- package/dist/ripple/{p-e5f84104.system.entry.js → p-f312d59a.system.entry.js} +2 -2
- package/dist/ripple/p-f312d59a.system.entry.js.map +1 -0
- package/dist/ripple/{p-c19ddc00.system.entry.js → p-f59a495a.system.entry.js} +2 -2
- package/dist/ripple/p-f59a495a.system.entry.js.map +1 -0
- package/dist/ripple/{p-cc8ca6bd.system.js → p-f80eb8a5.system.js} +2 -2
- package/dist/ripple/p-f80eb8a5.system.js.map +1 -0
- package/dist/ripple/{p-1be55579.system.entry.js → p-fb67c39e.system.entry.js} +2 -2
- package/dist/ripple/p-fb67c39e.system.entry.js.map +1 -0
- package/dist/ripple/{p-20d0d019.entry.js → p-fc08d5e1.entry.js} +2 -2
- package/dist/ripple/p-fc08d5e1.entry.js.map +1 -0
- package/dist/ripple/{p-d7b946ed.entry.js → p-fe7da854.entry.js} +2 -2
- package/dist/ripple/p-fe7da854.entry.js.map +1 -0
- package/dist/ripple/ripple.esm.js +1 -1
- package/dist/ripple/ripple.esm.js.map +1 -1
- package/dist/ripple/ripple.js +1 -1
- package/dist/types/components/charts/chartFunctions.d.ts +37 -37
- package/dist/types/components/charts/priv-chart-popover/priv-chart-popover.d.ts +27 -0
- package/dist/types/components/charts/wm-chart/wm-chart-slice.d.ts +11 -11
- package/dist/types/components/charts/wm-chart/wm-chart.d.ts +47 -0
- package/dist/types/components/charts/wm-progress-monitor/wm-progress-indicator.d.ts +29 -0
- package/dist/types/components/charts/wm-progress-monitor/wm-progress-monitor.d.ts +20 -0
- package/dist/types/components/charts/wm-progress-monitor/wm-progress-slice.d.ts +10 -10
- package/dist/types/components/wm-action-menu/wm-action-menu.d.ts +49 -0
- package/dist/types/components/wm-button/wm-button.d.ts +49 -0
- package/dist/types/components/wm-datepicker/priv-datepicker/priv-datepicker.d.ts +80 -0
- package/dist/types/components/wm-datepicker/wm-datepicker.d.ts +42 -0
- package/dist/types/components/wm-file/wm-file.d.ts +42 -0
- package/dist/types/components/wm-file-list/wm-file-list.d.ts +16 -0
- package/dist/types/components/wm-input/wm-input.d.ts +45 -0
- package/dist/types/components/wm-menuitem/wm-menuitem.d.ts +34 -0
- package/dist/types/components/wm-modal/wm-modal-footer.d.ts +14 -14
- package/dist/types/components/wm-modal/wm-modal-header.d.ts +10 -10
- package/dist/types/components/wm-modal/wm-modal.d.ts +40 -0
- package/dist/types/components/wm-navigation/wm-navigation-hamburger.d.ts +21 -0
- package/dist/types/components/wm-navigation/wm-navigation-item.d.ts +13 -0
- package/dist/types/components/wm-navigation/wm-navigation.d.ts +26 -0
- package/dist/types/components/wm-navigator/priv-navigator-button/priv-navigator-button.d.ts +10 -10
- package/dist/types/components/wm-navigator/priv-navigator-item/priv-navigator-item.d.ts +13 -0
- package/dist/types/components/wm-navigator/wm-navigator.d.ts +61 -0
- package/dist/types/components/wm-option/wm-option.d.ts +34 -0
- package/dist/types/components/wm-pagination/wm-pagination.d.ts +32 -32
- package/dist/types/components/wm-search/wm-search.d.ts +77 -0
- package/dist/types/components/wm-select/wm-select.d.ts +101 -0
- package/dist/types/components/wm-snackbar/wm-snackbar.d.ts +31 -32
- package/dist/types/components/wm-tabs/wm-tab-item/wm-tab-item.d.ts +37 -0
- package/dist/types/components/wm-tabs/wm-tab-list/wm-tab-list.d.ts +52 -0
- package/dist/types/components/wm-tabs/wm-tab-panel/wm-tab-panel.d.ts +20 -0
- package/dist/types/components/wm-tag-input/wm-tag-input-row/wm-tag-input-row.d.ts +11 -0
- package/dist/types/components/wm-tag-input/wm-tag-input.d.ts +135 -0
- package/dist/types/components/wm-timepicker/wm-timepicker.d.ts +62 -0
- package/dist/types/components/wm-toggletip/wm-toggletip.d.ts +28 -0
- package/dist/types/components/wm-uploader/wm-network-uploader/wm-network-uploader.d.ts +85 -0
- package/dist/types/components/wm-uploader/wm-uploader.d.ts +99 -0
- package/dist/types/components/wm-wrapper/wm-wrapper.d.ts +7 -7
- package/dist/types/components.d.ts +27 -27
- package/dist/types/global/__mocks__/functions.d.ts +6 -6
- package/dist/types/global/functions.d.ts +48 -48
- package/dist/types/global/global.d.ts +1 -1
- package/dist/types/global/interfaces.d.ts +74 -74
- package/dist/types/global/intl.d.ts +29 -1
- package/dist/types/global/services/__mocks__/http-service.d.ts +6 -6
- package/dist/types/global/services/http-service.d.ts +4 -4
- package/dist/types/lang/lang.d.ts +5 -5
- package/package.json +46 -46
- package/dist/cjs/chartFunctions-9dce0ea3.js.map +0 -1
- package/dist/cjs/global-c22b1249.js.map +0 -1
- package/dist/cjs/http-service-494d81de.js.map +0 -1
- package/dist/cjs/interfaces-a3338581.js.map +0 -1
- package/dist/cjs/intl-e14dc0a1.js +0 -13
- package/dist/cjs/intl-e14dc0a1.js.map +0 -1
- package/dist/esm/chartFunctions-1df8043a.js.map +0 -1
- package/dist/esm/global-2c5c2727.js.map +0 -1
- package/dist/esm/http-service-3dc3b3e7.js.map +0 -1
- package/dist/esm/interfaces-2b97fab2.js.map +0 -1
- package/dist/esm/intl-4153b9ef.js +0 -11
- package/dist/esm/intl-4153b9ef.js.map +0 -1
- package/dist/esm-es5/chartFunctions-1df8043a.js.map +0 -1
- package/dist/esm-es5/global-2c5c2727.js +0 -2
- package/dist/esm-es5/global-2c5c2727.js.map +0 -1
- package/dist/esm-es5/http-service-3dc3b3e7.js.map +0 -1
- package/dist/esm-es5/interfaces-2b97fab2.js.map +0 -1
- package/dist/esm-es5/intl-4153b9ef.js +0 -2
- package/dist/esm-es5/intl-4153b9ef.js.map +0 -1
- package/dist/ripple/p-0400599e.system.entry.js.map +0 -1
- package/dist/ripple/p-075607ac.entry.js +0 -2
- package/dist/ripple/p-075607ac.entry.js.map +0 -1
- package/dist/ripple/p-08d17d5a.entry.js +0 -2
- package/dist/ripple/p-08d17d5a.entry.js.map +0 -1
- package/dist/ripple/p-0d36ceba.system.entry.js.map +0 -1
- package/dist/ripple/p-124da634.entry.js +0 -2
- package/dist/ripple/p-124da634.entry.js.map +0 -1
- package/dist/ripple/p-1aa16d42.js.map +0 -1
- package/dist/ripple/p-1be55579.system.entry.js.map +0 -1
- package/dist/ripple/p-20d0d019.entry.js.map +0 -1
- package/dist/ripple/p-219fbe2b.system.entry.js.map +0 -1
- package/dist/ripple/p-21bb563a.system.entry.js.map +0 -1
- package/dist/ripple/p-241d4d41.system.entry.js +0 -2
- package/dist/ripple/p-241d4d41.system.entry.js.map +0 -1
- package/dist/ripple/p-24ef6556.system.entry.js.map +0 -1
- package/dist/ripple/p-262713b9.entry.js.map +0 -1
- package/dist/ripple/p-28c12986.system.entry.js.map +0 -1
- package/dist/ripple/p-3f6c7e6c.entry.js.map +0 -1
- package/dist/ripple/p-42158d44.entry.js.map +0 -1
- package/dist/ripple/p-43f1298b.js.map +0 -1
- package/dist/ripple/p-47d223f1.system.entry.js.map +0 -1
- package/dist/ripple/p-4d30004f.entry.js +0 -2
- package/dist/ripple/p-4d30004f.entry.js.map +0 -1
- package/dist/ripple/p-58b1415e.system.js +0 -2
- package/dist/ripple/p-58b1415e.system.js.map +0 -1
- package/dist/ripple/p-5cda4e9c.system.entry.js +0 -2
- package/dist/ripple/p-5cda4e9c.system.entry.js.map +0 -1
- package/dist/ripple/p-64f15a9e.system.entry.js +0 -2
- package/dist/ripple/p-64f15a9e.system.entry.js.map +0 -1
- package/dist/ripple/p-6e6b5b2c.system.entry.js +0 -2
- package/dist/ripple/p-6e6b5b2c.system.entry.js.map +0 -1
- package/dist/ripple/p-70768add.entry.js.map +0 -1
- package/dist/ripple/p-76aafb99.system.entry.js.map +0 -1
- package/dist/ripple/p-7d0f3abe.entry.js.map +0 -1
- package/dist/ripple/p-8aa85021.system.entry.js +0 -2
- package/dist/ripple/p-8aa85021.system.entry.js.map +0 -1
- package/dist/ripple/p-8eebf787.entry.js.map +0 -1
- package/dist/ripple/p-96b0ca93.system.js +0 -2
- package/dist/ripple/p-96b0ca93.system.js.map +0 -1
- package/dist/ripple/p-980afed1.system.entry.js.map +0 -1
- package/dist/ripple/p-9d02957d.system.js.map +0 -1
- package/dist/ripple/p-adbeb6a8.system.entry.js +0 -2
- package/dist/ripple/p-adbeb6a8.system.entry.js.map +0 -1
- package/dist/ripple/p-b00991d9.system.entry.js.map +0 -1
- package/dist/ripple/p-b81ce905.system.entry.js.map +0 -1
- package/dist/ripple/p-bcba3ce8.entry.js.map +0 -1
- package/dist/ripple/p-bf808ec4.entry.js +0 -2
- package/dist/ripple/p-bf808ec4.entry.js.map +0 -1
- package/dist/ripple/p-c19ddc00.system.entry.js.map +0 -1
- package/dist/ripple/p-cc8ca6bd.system.js.map +0 -1
- package/dist/ripple/p-ce52357e.js +0 -2
- package/dist/ripple/p-ce52357e.js.map +0 -1
- package/dist/ripple/p-d0f5773a.entry.js +0 -2
- package/dist/ripple/p-d0f5773a.entry.js.map +0 -1
- package/dist/ripple/p-d5b0809e.entry.js.map +0 -1
- package/dist/ripple/p-d7b946ed.entry.js.map +0 -1
- package/dist/ripple/p-d7c55ce1.entry.js.map +0 -1
- package/dist/ripple/p-d7ffac2f.entry.js.map +0 -1
- package/dist/ripple/p-dbf657c5.js +0 -2
- package/dist/ripple/p-dbf657c5.js.map +0 -1
- package/dist/ripple/p-e1b812ed.entry.js +0 -2
- package/dist/ripple/p-e1b812ed.entry.js.map +0 -1
- package/dist/ripple/p-e5f84104.system.entry.js.map +0 -1
- package/dist/ripple/p-e6e7cb2d.entry.js.map +0 -1
- package/dist/ripple/p-e99a7f36.entry.js.map +0 -1
- package/dist/ripple/p-ed14d37c.system.entry.js +0 -2
- package/dist/ripple/p-ed14d37c.system.entry.js.map +0 -1
- package/dist/ripple/p-ee97c3f6.entry.js.map +0 -1
- package/dist/ripple/p-f3130941.entry.js +0 -2
- package/dist/ripple/p-f3130941.entry.js.map +0 -1
- package/dist/ripple/p-f36b1c58.system.entry.js.map +0 -1
- package/dist/ripple/p-f4a622a9.system.entry.js +0 -2
- package/dist/ripple/p-f4a622a9.system.entry.js.map +0 -1
- package/dist/ripple/p-f5df5903.system.js.map +0 -1
- package/dist/ripple/p-fd8070fb.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["wmUploaderCss","Uploader","this","inputId","generateId","Object","defineProperty","prototype","el","shadowRoot","querySelector","concat","type","uploaderType","defaultMaxSize","maxSizeLimit","maxSize","Math","min","maxFiles","fileList","length","errorMessage","internalErrorMessage","intl","formatMessage","id","defaultMessage","description","x","y","effectiveMaxSize","validTypes","fileTypes","split","join","amount","toggleTabbingOn","isTabbing","toggleTabbingOff","handleUploadProgress","ev","_this","map","i","detail","progress","forceUpdate","numFilesInProgress","srProgress","total_1","setInterval","aggregate","reduce","avg","item","announce","percentage","floor","handleFileErrorCleared","filename","name","errorList","filter","error","uploadButtonEl","focus","handleFileDeleted","clearErrors","wmUploaderDeleteFile","emit","wmFileDelete","wmDeleteFile","handleFilePreviewed","wmUploaderPreviewFile","wmFilePreview","handleFileDownloaded","wmUploaderDownloadFile","wmFileDownload","wmDownloadFile","parseFiles","files","list","JSON","parse","forEach","size","match","convertedSize","convertBytes","toFixed","unit","Error","focusAfterRemoval","newFiles","oldFiles","newFileIds_1","file","oldFileIds","removedFileId","includes","indexOf","fileIdPrecedingRemoved_1","fileElPrecedingRemoved","focusedElementsButtons","querySelectorAll","lastButtonInFile","parseRejectedFiles","rejectedFiles","uploadNotifications","newNum","oldNum","setTimeout","notif","finishedMessage","clearInterval","filesUploadingMessage","num","handleErrorMessageChange","isValidSize","bytes","unitOrder","unitIndex","result","parseInt","isDuplicate","hasDuplicateUploadingFile","filesToUpload","some","fileToUpload","hasDuplicateUploadedFile","f","isEmpty","fileLimitReached","isItemUploading","hasOwnProperty","message","liveRegion","textContent","announcement","handleFiles","Array","from","target","fileLimitExceededMessage","hasValidType","push","wmUploaderFilesSelected","wmFilesSelected","value","componentWillLoad","buttonText","console","warn","tempUploaderType","emptyStateText","componentDidLoad","document","body","classList","contains","uploadButtonOnClick","isDisabled","preventDefault","srMsg","fileLimitReachedMessage","renderUploadSvg","h","class","width","height","viewBox","transform","fill","d","renderIcon","rotate","icon","String","fromCodePoint","renderInfo","info","renderNotif","renderError","displayedErrorMessage","renderUploadButton","classes","accessibleLabel","label","requiredField","multiple","onClick","onChange","htmlFor","renderEmptyState","renderErrorList","srMessage","acc","err","formatTimestamp","timestamp","uploadDate","Date","day","getDate","month","getMonth","year","getFullYear","time","toLocaleTimeString","hour","minute","formattedDate","renderInProgressFileList","stringify","showInfo","renderUploadedFileList","lastUpdated","renderFiles","sortBy","sort","a","b","localeCompare","legacyRenderHeader","renderHeader","renderRequirements","acceptedFileTypesMessage","fileCountMessage","maxSizeMessage","renderFooter","numFiles","renderWithItems","hasNewlyUploadedFiles","renderLabel","render","Host","ref"],"sources":["src/components/wm-uploader/wm-uploader.scss?tag=wm-uploader&encapsulation=shadow","src/components/wm-uploader/wm-uploader.tsx"],"sourcesContent":[":host,\r\nwm-uploader {\r\n display: block;\r\n position: relative;\r\n max-width: 1140px;\r\n\r\n &[dir=\"RTL\"] {\r\n .mdi {\r\n margin-left: rem-calc(5);\r\n margin-right: 0;\r\n }\r\n }\r\n @extend %wm-button;\r\n\r\n input:focus + .wm-button.user-is-tabbing {\r\n -webkit-box-shadow: 0 2px 2px 0 rgba(244, 243, 246, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.1), 0 0 4px 3px #61279e !important;\r\n -moz-box-shadow: 0 2px 2px 0 rgba(244, 243, 246, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.1), 0 0 4px 3px #61279e !important;\r\n box-shadow: 0 2px 2px 0 rgba(244, 243, 246, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.1), 0 0 4px 3px #61279e !important;\r\n }\r\n}\r\n\r\n:host *,\r\nwm-uploader * {\r\n box-sizing: border-box;\r\n}\r\n\r\n.wm-button.disabled {\r\n // override the %wm-button rule\r\n // we want a pointer event when disabled,\r\n // to trigger a SR message\r\n pointer-events: initial !important;\r\n}\r\n\r\n@include label;\r\n#label {\r\n margin-bottom: rem-calc(8);\r\n}\r\n\r\n.header {\r\n .info-wrapper {\r\n align-items: center;\r\n .info {\r\n font-size: rem-calc(14);\r\n margin-left: 1rem;\r\n }\r\n }\r\n\r\n .accepted-types {\r\n font-size: rem-calc(14);\r\n }\r\n\r\n .requirements {\r\n font-size: rem-calc(14);\r\n margin-left: rem-calc(16);\r\n }\r\n}\r\n\r\n.footer {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: flex-end;\r\n padding: rem-calc(15 30);\r\n\r\n .notif-wrapper {\r\n align-items: flex-end;\r\n }\r\n\r\n .filecount-wrapper {\r\n display: flex;\r\n align-items: center;\r\n .filecount {\r\n font-size: 0.875rem;\r\n margin-right: 1rem;\r\n }\r\n }\r\n}\r\n\r\n.notif-wrapper {\r\n position: relative;\r\n display: flex;\r\n flex-direction: row;\r\n margin-bottom: rem-calc(12);\r\n\r\n .requirements {\r\n display: flex;\r\n flex-direction: column;\r\n }\r\n}\r\n\r\n.notif,\r\n#error {\r\n padding-top: rem-calc(4);\r\n font-size: 0.875rem;\r\n font-style: italic;\r\n\r\n &#error {\r\n @include errorMessage;\r\n }\r\n}\r\n\r\n.info-wrapper {\r\n position: relative; // for .info\r\n display: flex;\r\n}\r\n\r\n.list-container {\r\n overflow-y: unset;\r\n\r\n &.checkmark-spacer {\r\n margin-right: rem-calc(44);\r\n }\r\n\r\n &:has(.error-list, .inprogress-list, .file-list) {\r\n margin-top: rem-calc(40);\r\n }\r\n\r\n ul {\r\n padding: 0;\r\n width: 100%;\r\n margin: 0;\r\n\r\n wm-file {\r\n margin-bottom: rem-calc(8);\r\n }\r\n }\r\n}\r\n\r\n.sr-only {\r\n @include srOnly;\r\n}\r\n\r\n/// FOR DEPRECATED TYPES ///////////////////////////////////////\r\n.empty-block {\r\n margin: 5rem auto;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n\r\n .upload-file {\r\n margin-bottom: rem-calc(30);\r\n }\r\n\r\n .empty-message {\r\n font-size: 0.875rem;\r\n &.large {\r\n font-size: 1.5rem;\r\n }\r\n margin-bottom: rem-calc(7);\r\n }\r\n\r\n .info-wrapper {\r\n justify-content: center;\r\n width: 100%; // for .notif\r\n\r\n .wm-button {\r\n // Removing the width inherit here to prevent a 100% width\r\n // from the info-wrapper. Future proofing a day when\r\n // we might want a long notif to wrap.\r\n width: auto;\r\n }\r\n }\r\n}\r\n\r\n.header {\r\n &.type1,\r\n &.type2 {\r\n margin-bottom: 1rem;\r\n }\r\n .slot-wrapper {\r\n display: flex;\r\n justify-content: flex-start;\r\n align-items: flex-start;\r\n }\r\n}\r\n\r\n.notif-wrapper {\r\n &.type1,\r\n &.type2 {\r\n flex-direction: column;\r\n margin-bottom: rem-calc(16);\r\n }\r\n}\r\n\r\n.list-container {\r\n &.type1,\r\n &.type2 {\r\n overflow-y: auto;\r\n ul {\r\n margin: revert;\r\n }\r\n .file-list li,\r\n .inprogress-list li {\r\n // margin-bottom also on the last element, otherwise tooltip on dl and delete btns triggers a scrollbar\r\n margin-bottom: rem-calc(26);\r\n }\r\n .error-list li {\r\n margin-bottom: rem-calc(20);\r\n }\r\n }\r\n\r\n &.type1 {\r\n padding: rem-calc(0 30);\r\n height: rem-calc(260);\r\n }\r\n}\r\n","import { Component, Element, Event, EventEmitter, h, Host, Prop, State, Listen, Watch } from \"@stencil/core\";\r\nimport { forceUpdate } from \"@stencil/core\";\r\nimport { generateId, hasValidType, intl } from \"../../global/functions\";\r\nimport { UploadedFile } from \"../../global/interfaces\";\r\ninterface ErrorFile {\r\n name: string;\r\n message: string;\r\n}\r\n\r\n@Component({\r\n tag: \"wm-uploader\",\r\n styleUrl: \"wm-uploader.scss\",\r\n shadow: { delegatesFocus: true },\r\n})\r\nexport class Uploader {\r\n @Element() el!: HTMLWmUploaderElement;\r\n private liveRegion!: HTMLDivElement;\r\n get uploadButtonEl(): HTMLElement {\r\n return this.el.shadowRoot!.querySelector(`#${this.inputId}`) as HTMLElement;\r\n }\r\n\r\n @Prop({ mutable: true }) uploaderType?: \"1\" | \"2\"; // only mutable for the deprecation transition\r\n @Prop() type?: \"1\" | \"2\"; // DEPRECATED in favor of uploaderType\r\n get tempUploaderType() {\r\n // replace instances of this.tempUploaderType with this.uploaderType once type is fully phased out\r\n return this.type || this.uploaderType;\r\n }\r\n @Prop() label?: string;\r\n @Prop() buttonText!: string;\r\n @Prop() info?: string;\r\n @Prop() emptyStateText!: string;\r\n @Prop() icon!: string;\r\n @Prop() fileTypes: string = \"pdf txt log xml doc docx xls xlsx ppt pptx gif jpg jpeg png csv\";\r\n @Prop() maxSize?: number | null; // in Mb\r\n @Prop() maxFiles?: number;\r\n @Prop() sortBy: \"name\" | \"date\" = \"date\"; // name is descending (a -> z), date is ascending (earlier -> later)\r\n @Prop() showInfo: \"time\" | \"size\" | \"none\" = \"time\";\r\n @Prop() errorMessage?: string;\r\n @Prop() requiredField?: boolean;\r\n\r\n @Prop() files?: string; // String representation of an array of files (the files retrieved from the server)\r\n @State() fileList: UploadedFile[] = []; // the string above transformed into the actual array\r\n @Prop({ mutable: true }) filesToUpload: File[] = []; // input.files that passed validation\r\n\r\n @State() isTabbing: boolean = false;\r\n\r\n @Prop() rejectedFiles?: string; // String representation of an array of errors to add to errorList, allows devs to display server-side errors\r\n @State() errorList: ErrorFile[] = []; // for errors on a particular file\r\n @State() notif?: string | null; // for upload notifications\r\n @State() internalErrorMessage?: string;\r\n @State() announcement: string = \"\";\r\n @State() numFilesInProgress?: number | null; // null when not uploading != 0 (when all files are done uploading) != undefined (original state)\r\n @State() isCondensed: boolean = false;\r\n private srProgress?: any; // setInterval for SR to announce the aggregate progress percentage when things take a long time. stored here so it can be stopped when upload is finished.\r\n private inputId = generateId();\r\n\r\n @Event() wmUploaderFilesSelected!: EventEmitter;\r\n @Event() wmFilesSelected!: EventEmitter; // deprecated in favor of wmUploaderFilesSelected\r\n @Event() wmUploaderDeleteFile!: EventEmitter;\r\n @Event() wmDeleteFile!: EventEmitter; // deprecated in favor of wmUploaderDeleteFile\r\n @Event() wmUploaderDownloadFile!: EventEmitter;\r\n @Event() wmDownloadFile!: EventEmitter; // deprecated in favor of wmUploaderDownloadFile\r\n @Event() wmUploaderPreviewFile!: EventEmitter;\r\n\r\n @Event() wmFileDelete!: EventEmitter<string>;\r\n @Event() wmFileDownload!: EventEmitter<string>;\r\n @Event() wmFilePreview!: EventEmitter<string>;\r\n\r\n get effectiveMaxSize() {\r\n const defaultMaxSize = 100;\r\n // maxsize cannot be set to over 100Mb\r\n const maxSizeLimit = 100;\r\n\r\n return this.maxSize ? Math.min(this.maxSize, maxSizeLimit) : defaultMaxSize;\r\n }\r\n\r\n get fileLimitReached() {\r\n return this.maxFiles && this.fileList.length >= this.maxFiles;\r\n }\r\n\r\n get displayedErrorMessage(): string {\r\n return this.errorMessage || this.internalErrorMessage || \"\";\r\n }\r\n\r\n get fileLimitExceededMessage() {\r\n return intl.formatMessage({\r\n id: \"uploader.fileUploadLimitExceeded\",\r\n defaultMessage: \"Upload unsuccessful because file selection would exceed the maximum number of files\",\r\n description: \"Message displayed when trying to upload too many files\",\r\n });\r\n }\r\n\r\n get fileLimitReachedMessage() {\r\n return intl.formatMessage({\r\n id: \"uploader.fileUploadLimitReached\",\r\n defaultMessage: \"The maximum number of files has been reached\",\r\n description: \"Message displayed when trying to upload additional files, but the limit has been reached\",\r\n });\r\n }\r\n\r\n get fileCountMessage() {\r\n return intl.formatMessage(\r\n {\r\n id: \"uploader.fileCount\",\r\n defaultMessage: \"{x} of {y} Files\",\r\n description: \"A count of the number of files currently uploaded\",\r\n },\r\n { x: this.fileList.length, y: this.maxFiles }\r\n );\r\n }\r\n\r\n get maxSizeMessage() {\r\n return intl.formatMessage(\r\n {\r\n id: \"uploader.maxSize\",\r\n defaultMessage: \"Maximum file size {maxSize}MB\",\r\n description: \"An indicator of the maximum file size the uploader allows\",\r\n },\r\n {\r\n maxSize: this.effectiveMaxSize,\r\n }\r\n );\r\n }\r\n\r\n get acceptedFileTypesMessage() {\r\n const validTypes = \".\" + this.fileTypes.split(\" \").join(\", .\");\r\n return intl.formatMessage(\r\n {\r\n id: \"uploader.acceptedFileTypes\",\r\n defaultMessage: \"Accepted file {amount, plural, =1 {type} other {types}}: {fileTypes}\",\r\n },\r\n {\r\n fileTypes: validTypes,\r\n amount: this.fileTypes.split(\" \").length,\r\n }\r\n );\r\n }\r\n\r\n @Listen(\"wmUserIsTabbing\", { target: \"window\" })\r\n toggleTabbingOn() {\r\n this.isTabbing = true;\r\n }\r\n\r\n @Listen(\"wmUserIsNotTabbing\", { target: \"window\" })\r\n toggleTabbingOff() {\r\n this.isTabbing = false;\r\n }\r\n\r\n @Listen(\"wmUploadProgress\")\r\n handleUploadProgress(ev: CustomEvent) {\r\n this.fileList.map((i) => {\r\n if (i.id === ev.detail.id) {\r\n i.progress = ev.detail.progress;\r\n forceUpdate(this.el);\r\n }\r\n });\r\n\r\n if (ev.detail.progress === 100) {\r\n // inProgressList is not a perfect reflection of how many files are uploading\r\n // because even after progress reached 100% the item should remain in the array\r\n // (should only be removed once it appears in fileList)\r\n this.numFilesInProgress! -= 1;\r\n }\r\n\r\n // aggregate the percentages for SR to announce progress\r\n if (!this.srProgress && this.numFilesInProgress) {\r\n const total = this.numFilesInProgress; // if we don't reassign this number changes when a file is done and the percentage becomes wrong\r\n this.srProgress = setInterval(() => {\r\n const aggregate = this.fileList.reduce((avg, item) => (item.progress ? avg + item.progress : avg), 0);\r\n this.announce(\r\n intl.formatMessage(\r\n {\r\n id: \"uploader.uploadProgress\",\r\n defaultMessage: \"Upload progress: {percentage}%\",\r\n },\r\n { percentage: Math.floor(aggregate / total) }\r\n )\r\n );\r\n }, 5000);\r\n }\r\n }\r\n\r\n @Listen(\"wmFileClearErrorClicked\")\r\n handleFileErrorCleared(ev: CustomEvent) {\r\n const filename = ev.detail.name;\r\n this.errorList = this.errorList.filter((error) => error.name != filename);\r\n this.uploadButtonEl.focus();\r\n }\r\n\r\n @Listen(\"wmIntFileDeleted\")\r\n handleFileDeleted(ev: CustomEvent) {\r\n this.clearErrors();\r\n forceUpdate(this.el); // for the button to stop being disabled if num files become < max-files\r\n this.wmUploaderDeleteFile.emit(ev.detail);\r\n this.wmFileDelete.emit(ev.detail);\r\n this.wmDeleteFile.emit(ev.detail); // deprecated\r\n }\r\n\r\n @Listen(\"wmIntFilePreviewed\")\r\n handleFilePreviewed(ev: CustomEvent) {\r\n this.clearErrors();\r\n this.wmUploaderPreviewFile.emit(ev.detail);\r\n this.wmFilePreview.emit(ev.detail);\r\n }\r\n\r\n @Listen(\"wmIntFileDownloaded\")\r\n handleFileDownloaded(ev: CustomEvent) {\r\n this.clearErrors();\r\n this.wmUploaderDownloadFile.emit(ev.detail);\r\n this.wmFileDownload.emit(ev.detail);\r\n this.wmDownloadFile.emit(ev.detail); // deprecated\r\n }\r\n\r\n @Watch(\"files\")\r\n parseFiles() {\r\n if (!!this.files) {\r\n if (typeof this.files === \"string\") {\r\n let list = JSON.parse(this.files);\r\n if (typeof list === \"object\") {\r\n // if size is in byte format, convert to display format\r\n list.forEach((item: any) => {\r\n if (item.size && (typeof item.size === \"number\" || item.size.match(/^[0-9]+$/))) {\r\n const convertedSize = this.convertBytes(item.size);\r\n item.size = `${convertedSize.size.toFixed(0)} ${convertedSize.unit}`;\r\n }\r\n });\r\n this.fileList = list;\r\n } else {\r\n throw new Error(\"could not parse string passed to files attribute\");\r\n }\r\n } else {\r\n throw new Error(\"Attribute 'files' should be a string\");\r\n }\r\n }\r\n }\r\n\r\n @Watch(\"fileList\")\r\n focusAfterRemoval(newFiles: UploadedFile[], oldFiles: UploadedFile[]) {\r\n if (this.isTabbing && newFiles.length < oldFiles.length) {\r\n const newFileIds = newFiles.map((file: UploadedFile) => file.id);\r\n const oldFileIds = oldFiles.map((file: UploadedFile) => file.id);\r\n // even in the case that multiple files have been removed at once, work off of the first in that group\r\n const removedFileId = oldFileIds.filter((id: string) => !newFileIds.includes(id))[0];\r\n\r\n if (oldFileIds.indexOf(removedFileId) > 0) {\r\n const fileIdPrecedingRemoved = oldFileIds[oldFileIds.indexOf(removedFileId) - 1];\r\n const fileElPrecedingRemoved = this.el.shadowRoot!.querySelector(\"#file-\" + fileIdPrecedingRemoved);\r\n const focusedElementsButtons = fileElPrecedingRemoved?.shadowRoot!.querySelectorAll(\"wm-button\");\r\n\r\n if (focusedElementsButtons && focusedElementsButtons.length > 0) {\r\n const lastButtonInFile = focusedElementsButtons[focusedElementsButtons.length - 1];\r\n lastButtonInFile.focus();\r\n } else {\r\n // if preceding file has no file action buttons, rerun function with adjusted params\r\n // by removing the fileElPrecedingRemoved from the newFiles list, it is now considered the removedFile and looks to focus it's preceding file\r\n // if it continues to cannot find an appropriate preceding file and becomes the first file in the list, it focuses the upload button\r\n this.focusAfterRemoval(\r\n newFiles.filter((file: UploadedFile) => file.id !== fileIdPrecedingRemoved),\r\n oldFiles\r\n );\r\n }\r\n } else {\r\n this.uploadButtonEl.focus();\r\n }\r\n }\r\n }\r\n\r\n @Watch(\"rejectedFiles\")\r\n parseRejectedFiles() {\r\n if (!!this.rejectedFiles) {\r\n if (typeof this.files === \"string\") {\r\n const list = JSON.parse(this.rejectedFiles);\r\n if (typeof list === \"object\") {\r\n this.errorList = list;\r\n } else {\r\n throw new Error(\"could not parse string passed to errors attribute\");\r\n }\r\n } else {\r\n throw new Error(\"Attribute 'rejected-files' should be a string\");\r\n }\r\n }\r\n }\r\n\r\n @Watch(\"numFilesInProgress\")\r\n uploadNotifications(newNum: number, oldNum: number) {\r\n if (oldNum > 0 && newNum === 0) {\r\n setTimeout(() => {\r\n this.notif = \"\";\r\n this.internalErrorMessage = \"\";\r\n }, 20 * 1000);\r\n const finishedMessage = intl.formatMessage({\r\n id: \"uploader.finishedUploading\",\r\n defaultMessage: \"Finished uploading\",\r\n });\r\n this.notif = finishedMessage;\r\n this.announce(finishedMessage);\r\n this.numFilesInProgress = null;\r\n clearInterval(this.srProgress);\r\n forceUpdate(this.el);\r\n } else if (newNum > 0 && newNum != oldNum) {\r\n const filesUploadingMessage = intl.formatMessage(\r\n {\r\n id: \"uploader.filesUploading\",\r\n defaultMessage: \"{num, plural, one {1 file uploading} other {# files uploading}}\",\r\n },\r\n { num: newNum }\r\n );\r\n this.notif = filesUploadingMessage;\r\n this.announce(filesUploadingMessage);\r\n forceUpdate(this.el);\r\n }\r\n }\r\n\r\n @Watch(\"errorMessage\")\r\n handleErrorMessageChange() {\r\n if (this.errorMessage) {\r\n this.announce(this.errorMessage);\r\n }\r\n }\r\n\r\n isValidSize(size: number) {\r\n return this.convertBytes(size, \"MB\").size <= this.effectiveMaxSize;\r\n }\r\n\r\n convertBytes(bytes: number, unit?: \"KB\" | \"MB\" | \"GB\" | \"TB\") {\r\n // https://stackoverflow.com/questions/2365100/converting-bytes-to-megabytes\r\n const unitOrder = [\"bytes\", \"KB\", \"MB\", \"GB\", \"TB\"];\r\n let unitIndex = 0;\r\n let result = typeof bytes === \"number\" ? bytes : parseInt(bytes);\r\n\r\n if (unit) {\r\n // convert until result matches desired unit\r\n while (unitOrder.indexOf(unit) > unitIndex) {\r\n result /= 1024;\r\n unitIndex++;\r\n }\r\n } else {\r\n // convert until result is appropriate unit (value is under 1000)\r\n while (result > 1000) {\r\n result /= 1024;\r\n unitIndex++;\r\n }\r\n }\r\n return { size: result, unit: unitOrder[unitIndex] };\r\n }\r\n\r\n isDuplicate(name: string) {\r\n const hasDuplicateUploadingFile = this.filesToUpload.some((fileToUpload: File) => fileToUpload.name === name);\r\n const hasDuplicateUploadedFile = this.fileList.some((f) => {\r\n const filename: string = f.type ? f.name + \".\" + f.type : f.name;\r\n return filename === name;\r\n });\r\n\r\n return hasDuplicateUploadingFile || hasDuplicateUploadedFile;\r\n }\r\n\r\n isEmpty() {\r\n return !this.fileList.length && !this.errorList.length;\r\n }\r\n\r\n get isDisabled() {\r\n // disable if is the uploader is maxed out or if something is uploading\r\n return this.fileLimitReached || this.numFilesInProgress! > 0;\r\n }\r\n\r\n isItemUploading(item: UploadedFile) {\r\n return item.hasOwnProperty(\"progress\") && item.progress! < 100;\r\n }\r\n\r\n announce(message: string) {\r\n if (this.liveRegion.textContent === message) {\r\n message += \"\\u00A0\";\r\n }\r\n this.announcement = message;\r\n }\r\n\r\n clearErrors() {\r\n this.errorList = [];\r\n this.notif = \"\";\r\n this.internalErrorMessage = \"\";\r\n }\r\n\r\n handleFiles(ev: Event) {\r\n this.filesToUpload = [];\r\n const validTypes = this.fileTypes.split(\" \").join(\", \");\r\n const files = Array.from((ev.target! as HTMLInputElement).files!);\r\n\r\n if (!!this.maxFiles && this.fileList.length + files.length > this.maxFiles) {\r\n this.internalErrorMessage = this.fileLimitExceededMessage;\r\n this.announce(this.fileLimitExceededMessage);\r\n } else {\r\n files &&\r\n files.map((file) => {\r\n if (!hasValidType(file, this.fileTypes)) {\r\n const error = {\r\n name: file.name,\r\n message: intl.formatMessage(\r\n {\r\n id: \"uploader.invalidFileType\",\r\n defaultMessage: \"The file type is invalid. Accepted types: {validTypes}\",\r\n },\r\n { validTypes }\r\n ),\r\n };\r\n this.errorList.push(error);\r\n } else if (file.size === 0) {\r\n const error = {\r\n name: file.name,\r\n message: intl.formatMessage({\r\n id: \"uploader.zeroFileSize\",\r\n defaultMessage: \"The file must be more than 0 bytes\",\r\n description: \"Error message when user attempts to upload a file of no size\",\r\n }),\r\n };\r\n this.errorList.push(error);\r\n } else if (!this.isValidSize(file.size)) {\r\n const error = {\r\n name: file.name,\r\n message: intl.formatMessage(\r\n {\r\n id: \"uploader.fileTooLarge\",\r\n defaultMessage: \"The selected file is too large. Maximum file size is {size}Mb\",\r\n },\r\n { size: this.effectiveMaxSize }\r\n ),\r\n };\r\n this.errorList.push(error);\r\n } else if (this.isDuplicate(file.name)) {\r\n const error = {\r\n name: file.name,\r\n message: intl.formatMessage({\r\n id: \"uploader.duplicateName\",\r\n defaultMessage: \"A file with this name already exists.\",\r\n }),\r\n };\r\n this.errorList.push(error);\r\n } else {\r\n this.filesToUpload.push(file);\r\n }\r\n });\r\n\r\n if (this.filesToUpload.length > 0) {\r\n this.numFilesInProgress = this.filesToUpload.length;\r\n this.wmUploaderFilesSelected.emit(this.filesToUpload);\r\n this.wmFilesSelected.emit(this.filesToUpload); // deprecated\r\n }\r\n }\r\n (ev.target! as HTMLInputElement).value = \"\"; // reset to ensure that onChange is triggered when the same file is selected a second time\r\n }\r\n\r\n componentWillLoad() {\r\n if (!this.buttonText) {\r\n throw new Error(\"wm-uploader: button-text is a required prop\");\r\n }\r\n\r\n if (this.type) {\r\n console.warn(\"wm-uploader: type has been deprecated as of v3.1.0. Please use uploader-type instead.\");\r\n }\r\n\r\n if (this.tempUploaderType === \"1\" && !this.emptyStateText) {\r\n throw new Error(\"wm-uploader: empty-state-text is a required prop\");\r\n }\r\n\r\n this.parseFiles();\r\n this.clearErrors();\r\n this.parseRejectedFiles();\r\n }\r\n\r\n componentDidLoad() {\r\n if (document.body.classList.contains(\"wmcl-user-is-tabbing\")) {\r\n this.toggleTabbingOn();\r\n }\r\n }\r\n\r\n uploadButtonOnClick(ev: Event) {\r\n if (this.isDisabled) {\r\n // this is a temporary fix.\r\n // we need the disabled button to be programmatically focusable\r\n // to allow return focus after closing the browser file panel\r\n // since it's focusable the button should respond when activated\r\n // it looks disabled, and announces the reason why the action cannot\r\n // be taken when activated.\r\n ev.preventDefault();\r\n\r\n if (this.numFilesInProgress! > 0) {\r\n const srMsg = intl.formatMessage({\r\n id: \"uploader.waitToUpload\",\r\n defaultMessage: \"Please wait for current upload to complete before uploading new files.\",\r\n description: \"Message for screen reader users\",\r\n });\r\n this.announce(srMsg);\r\n } else if (this.fileLimitReached) {\r\n this.internalErrorMessage = this.fileLimitReachedMessage;\r\n this.announce(this.fileLimitReachedMessage);\r\n }\r\n } else {\r\n this.clearErrors();\r\n }\r\n }\r\n\r\n renderUploadSvg() {\r\n return (\r\n <svg class=\"upload-file\" width=\"91\" height=\"84\" viewBox=\"0 0 91 84\">\r\n <path\r\n transform=\"rotate(-180.000000) translate(-452, -255.5)\"\r\n fill=\"#eae8ec\"\r\n d=\"M361,249.681818 L361,197.318182 C361,194.118182 365.555061,191.5 371.122358,191.5 L391.316463,191.5 L391.286495,200.562515 L369.871211,200.600292 L369.885404,200.622146 L369.886423,246.655947 L443.657038,246.840767 L443.657038,200.622146 L421.683537,200.622146 L421.683537,191.5 L441.978865,191.5 C447.546162,191.5 452,194.118182 452,197.318182 L452,249.681818 C452,252.881818 447.546162,255.5 441.978865,255.5 L371.122358,255.5 C365.504449,255.5 361,252.881818 361,249.681818 Z M391.5,207 L406,221 L420.5,207 L409.625,207 L409.625,172 L402.375,172 L402.375,207 L391.5,207 Z\"\r\n ></path>\r\n </svg>\r\n );\r\n }\r\n\r\n renderIcon() {\r\n // mdi attachment icon (paper clip) is horizontal but we want it vertical\r\n const rotate = this.icon && this.icon === \"f066\";\r\n return (\r\n this.icon && (\r\n <span class={`mdi ${rotate ? \"rotate\" : \"\"}`}>{String.fromCodePoint(parseInt(`0x${this.icon}`))}</span>\r\n )\r\n );\r\n }\r\n\r\n renderInfo() {\r\n return this.info && this.tempUploaderType === \"2\" ? <span class=\"info\">{this.info}</span> : \"\";\r\n }\r\n\r\n renderNotif() {\r\n return <div class=\"notif\">{this.notif}</div>;\r\n }\r\n\r\n renderError() {\r\n return <div id=\"error\">{this.displayedErrorMessage}</div>;\r\n }\r\n\r\n renderUploadButton(classes: string) {\r\n let accessibleLabel = `${this.label && this.label !== this.buttonText ? `${this.label}, ` : \"\"}${this.buttonText}`;\r\n\r\n return (\r\n <div class=\"info-wrapper\">\r\n <input\r\n name={this.inputId}\r\n id={this.inputId}\r\n class=\"sr-only\"\r\n aria-label={accessibleLabel}\r\n aria-required={this.requiredField ? \"true\" : null}\r\n aria-describedby={`${this.displayedErrorMessage ? \"error \" : \"\"}file-count max-size accepted-types`}\r\n type=\"file\"\r\n multiple\r\n onClick={(ev) => this.uploadButtonOnClick(ev)}\r\n onChange={(ev) => this.handleFiles(ev)}\r\n />\r\n <label htmlFor={this.inputId} class={`wm-button ${classes}${this.isTabbing ? \" user-is-tabbing\" : \"\"}`}>\r\n {this.renderIcon()}\r\n {this.buttonText}\r\n </label>\r\n {this.renderInfo()}\r\n </div>\r\n );\r\n }\r\n\r\n renderEmptyState() {\r\n return (\r\n <div class=\"empty-block\">\r\n {this.renderUploadSvg()}\r\n <div class={`empty-message`}>{this.emptyStateText}</div>\r\n {this.renderUploadButton(\"-primary empty-button\")}\r\n {this.notif && this.renderNotif()}\r\n {this.displayedErrorMessage && this.renderError()}\r\n </div>\r\n );\r\n }\r\n\r\n renderErrorList() {\r\n let srMessage = this.errorList.reduce(function (acc, err) {\r\n return acc + `${err.name}: ${err.message} `;\r\n }, \"\");\r\n this.announce(srMessage);\r\n\r\n return (\r\n <ul class=\"error-list\">\r\n {this.errorList.map((err) => (\r\n <wm-file file={`{\"name\": \"${err.name}\"}`} error-message={err.message}></wm-file>\r\n ))}\r\n </ul>\r\n );\r\n }\r\n\r\n formatTimestamp(timestamp: string): string {\r\n const uploadDate = new Date(Date.parse(timestamp));\r\n const day = uploadDate.getDate();\r\n const month = uploadDate.getMonth() + 1;\r\n const year = uploadDate.getFullYear();\r\n const time = uploadDate.toLocaleTimeString(\"en-us\", { hour: \"numeric\", minute: \"2-digit\" });\r\n const formattedDate = `${month}/${day}/${year} ${time}`;\r\n\r\n return formattedDate;\r\n }\r\n\r\n renderInProgressFileList() {\r\n return (\r\n <ul class=\"inprogress-list\">\r\n {this.fileList\r\n .filter((item) => this.isItemUploading(item))\r\n .map((item) => (\r\n <wm-file file={JSON.stringify(item)} show-info={this.showInfo}></wm-file>\r\n ))}\r\n </ul>\r\n );\r\n }\r\n\r\n renderUploadedFileList() {\r\n return (\r\n <ul class=\"file-list\">\r\n {this.fileList\r\n .filter((item) => !this.isItemUploading(item))\r\n .map((item) => {\r\n item.lastUpdated = this.formatTimestamp(item.lastUpdated);\r\n return <wm-file id={`file-${item.id}`} file={JSON.stringify(item)} show-info={this.showInfo}></wm-file>;\r\n })}\r\n </ul>\r\n );\r\n }\r\n\r\n renderFiles() {\r\n // if we switch to accepting display format for the wm-uploader's file lastUpdateds, sorting by date will become impossible\r\n this.sortBy === \"name\"\r\n ? this.fileList.sort((a, b) => a.name.localeCompare(b.name))\r\n : this.fileList.sort((a, b) => Date.parse(a.lastUpdated) - Date.parse(b.lastUpdated));\r\n return (\r\n <div>\r\n {this.renderInProgressFileList()}\r\n {this.renderUploadedFileList()}\r\n </div>\r\n );\r\n }\r\n\r\n legacyRenderHeader() {\r\n return (\r\n <div class={`header ${this.tempUploaderType ? `type${this.tempUploaderType}` : \"\"}`}>\r\n <div class=\"slot-wrapper\">\r\n <slot />\r\n <div class={`notif-wrapper ${this.tempUploaderType ? `type${this.tempUploaderType}` : \"\"}`}>\r\n {this.renderUploadButton(`-secondary ${this.isDisabled ? \"disabled\" : \"\"}`)}\r\n {this.notif && this.renderNotif()}\r\n {this.displayedErrorMessage && this.renderError()}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n renderHeader() {\r\n return (\r\n <div class={`header ${this.tempUploaderType ? `type${this.tempUploaderType}` : \"\"}`}>\r\n <div class={`notif-wrapper ${this.tempUploaderType ? `type${this.tempUploaderType}` : \"\"}`}>\r\n {this.renderUploadButton(`-secondary ${this.isDisabled ? \"disabled\" : \"\"}`)}\r\n {this.renderRequirements()}\r\n </div>\r\n <div id=\"accepted-types\" class=\"accepted-types\">\r\n {this.acceptedFileTypesMessage}\r\n </div>\r\n {this.notif && this.renderNotif()}\r\n {this.displayedErrorMessage && this.renderError()}\r\n </div>\r\n );\r\n }\r\n\r\n renderRequirements() {\r\n return (\r\n <div class=\"requirements\">\r\n {this.maxFiles && <span id=\"file-count\">{this.fileCountMessage}</span>}\r\n {this.maxSize && <span id=\"max-size\">{this.maxSizeMessage}</span>}\r\n </div>\r\n );\r\n }\r\n\r\n renderFooter() {\r\n return (\r\n <div class=\"footer\">\r\n <div class={`notif-wrapper ${this.tempUploaderType ? `type${this.tempUploaderType}` : \"\"}`}>\r\n <div class=\"filecount-wrapper\">\r\n <div class=\"filecount\">\r\n {intl.formatMessage(\r\n {\r\n id: \"uploader.filesAdded\",\r\n defaultMessage: \"{numFiles, plural, one {1 file added} other {# files added}}\",\r\n },\r\n { numFiles: this.fileList.length }\r\n )}\r\n </div>\r\n {this.renderUploadButton(`-primary ${this.isDisabled ? \"disabled\" : \"\"}`)}\r\n </div>\r\n {this.notif && this.renderNotif()}\r\n {this.displayedErrorMessage && this.renderError()}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n renderWithItems() {\r\n // it's possible progress is passed in as a string, so we need to check for \"100\" as well\r\n const hasNewlyUploadedFiles =\r\n this.fileList.filter((file) => file.progress === (typeof file.progress === \"number\" ? 100 : \"100\")).length > 0;\r\n return (\r\n <div>\r\n {!this.tempUploaderType && this.renderHeader()}\r\n {this.tempUploaderType === \"2\" && this.legacyRenderHeader()}\r\n <div\r\n class={`list-container type${this.tempUploaderType} ${\r\n !this.tempUploaderType && hasNewlyUploadedFiles ? \"checkmark-spacer\" : \"\"\r\n }`}\r\n >\r\n {this.errorList.length > 0 && this.renderErrorList()}\r\n {this.fileList.length > 0 && this.renderFiles()}\r\n </div>\r\n {this.tempUploaderType === \"1\" && this.renderFooter()}\r\n </div>\r\n );\r\n }\r\n\r\n renderLabel() {\r\n return (\r\n <div class={`wrapper ${this.displayedErrorMessage ? \"invalid\" : \"\"}`}>\r\n <div id=\"label\" class={`label`}>\r\n {this.label}\r\n {this.requiredField && (\r\n <span class=\"required\" aria-hidden=\"true\">\r\n *\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n {this.label && this.renderLabel()}\r\n {this.isEmpty() && this.tempUploaderType === \"1\" ? this.renderEmptyState() : this.renderWithItems()}\r\n <div\r\n ref={(el) => (this.liveRegion = el as HTMLDivElement)}\r\n class=\"live-region sr-only\"\r\n 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\r\n aria-atomic=\"true\"\r\n >\r\n {this.announcement}\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["wmUploaderCss","Uploader","this","inputId","generateId","Object","defineProperty","prototype","el","shadowRoot","querySelector","concat","type","uploaderType","defaultMaxSize","maxSizeLimit","maxSize","Math","min","maxFiles","fileList","length","errorMessage","internalErrorMessage","toggleTabbingOn","isTabbing","toggleTabbingOff","handleUploadProgress","ev","_this","map","i","id","detail","progress","forceUpdate","numFilesInProgress","srProgress","total_1","setInterval","aggregate","reduce","avg","item","announce","uploaderMessages","getUploadProgress","floor","handleFileErrorCleared","filename","name","errorList","filter","error","uploadButtonEl","focus","handleFileDeleted","clearErrors","wmUploaderDeleteFile","emit","wmFileDelete","wmDeleteFile","handleFilePreviewed","wmUploaderPreviewFile","wmFilePreview","handleFileDownloaded","wmUploaderDownloadFile","wmFileDownload","wmDownloadFile","parseFiles","files","list","JSON","parse","forEach","size","match","convertedSize","convertBytes","toFixed","unit","Error","focusAfterRemoval","newFiles","oldFiles","newFileIds_1","file","oldFileIds","removedFileId","includes","indexOf","fileIdPrecedingRemoved_1","fileElPrecedingRemoved","focusedElementsButtons","querySelectorAll","lastButtonInFile","parseRejectedFiles","rejectedFiles","uploadNotifications","newNum","oldNum","setTimeout","notif","finishedUploading","clearInterval","getFilesUploading","handleErrorMessageChange","isValidSize","effectiveMaxSize","bytes","unitOrder","unitIndex","result","parseInt","isDuplicate","hasDuplicateUploadingFile","filesToUpload","some","fileToUpload","hasDuplicateUploadedFile","f","isEmpty","fileLimitReached","isItemUploading","hasOwnProperty","message","liveRegion","textContent","announcement","handleFiles","Array","from","target","validTypes","fileTypes","split","join","fileLimitExceeded","hasValidType","getInvalidFileType","push","zeroFileSize","getFileTooLarge","duplicateName","wmUploaderFilesSelected","wmFilesSelected","value","componentWillLoad","buttonText","console","warn","tempUploaderType","emptyStateText","componentDidLoad","document","body","classList","contains","uploadButtonOnClick","isDisabled","preventDefault","srMsg","waitToUpload","renderUploadSvg","h","class","width","height","viewBox","transform","fill","d","renderIcon","rotate","icon","String","fromCodePoint","renderInfo","info","renderNotif","renderError","displayedErrorMessage","renderUploadButton","classes","accessibleLabel","label","requiredField","multiple","onClick","onChange","htmlFor","renderEmptyState","renderErrorList","srMessage","acc","err","formatTimestamp","timestamp","uploadDate","Date","day","getDate","month","getMonth","year","getFullYear","time","toLocaleTimeString","hour","minute","formattedDate","renderInProgressFileList","stringify","showInfo","renderUploadedFileList","lastUpdated","renderFiles","sortBy","sort","a","b","localeCompare","legacyRenderHeader","renderHeader","renderRequirements","getAcceptedFileTypes","getFileCount","getMaxSize","renderFooter","getFilesAdded","renderWithItems","hasNewlyUploadedFiles","renderLabel","render","Host","ref"],"sources":["src/components/wm-uploader/wm-uploader.scss?tag=wm-uploader&encapsulation=shadow","src/components/wm-uploader/wm-uploader.tsx"],"sourcesContent":[":host,\nwm-uploader {\n display: block;\n position: relative;\n max-width: 1140px;\n\n &[dir=\"RTL\"] {\n .mdi {\n margin-left: rem-calc(5);\n margin-right: 0;\n }\n }\n @extend %wm-button;\n\n input:focus + .wm-button.user-is-tabbing {\n -webkit-box-shadow: 0 2px 2px 0 rgba(244, 243, 246, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.1), 0 0 4px 3px #61279e !important;\n -moz-box-shadow: 0 2px 2px 0 rgba(244, 243, 246, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.1), 0 0 4px 3px #61279e !important;\n box-shadow: 0 2px 2px 0 rgba(244, 243, 246, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.1), 0 0 4px 3px #61279e !important;\n }\n}\n\n:host *,\nwm-uploader * {\n box-sizing: border-box;\n}\n\n.wm-button.disabled {\n // override the %wm-button rule\n // we want a pointer event when disabled,\n // to trigger a SR message\n pointer-events: initial !important;\n}\n\n@include label;\n#label {\n margin-bottom: rem-calc(8);\n}\n\n.header {\n .info-wrapper {\n align-items: center;\n .info {\n font-size: rem-calc(14);\n margin-left: 1rem;\n }\n }\n\n .accepted-types {\n font-size: rem-calc(14);\n }\n\n .requirements {\n font-size: rem-calc(14);\n margin-left: rem-calc(16);\n }\n}\n\n.footer {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n padding: rem-calc(15 30);\n\n .notif-wrapper {\n align-items: flex-end;\n }\n\n .filecount-wrapper {\n display: flex;\n align-items: center;\n .filecount {\n font-size: 0.875rem;\n margin-right: 1rem;\n }\n }\n}\n\n.notif-wrapper {\n position: relative;\n display: flex;\n flex-direction: row;\n margin-bottom: rem-calc(12);\n\n .requirements {\n display: flex;\n flex-direction: column;\n }\n}\n\n.notif,\n#error {\n padding-top: rem-calc(4);\n font-size: 0.875rem;\n font-style: italic;\n\n &#error {\n @include errorMessage;\n }\n}\n\n.info-wrapper {\n position: relative; // for .info\n display: flex;\n}\n\n.list-container {\n overflow-y: unset;\n\n &.checkmark-spacer {\n margin-right: rem-calc(44);\n }\n\n &:has(.error-list, .inprogress-list, .file-list) {\n margin-top: rem-calc(40);\n }\n\n ul {\n padding: 0;\n width: 100%;\n margin: 0;\n\n wm-file {\n margin-bottom: rem-calc(8);\n }\n }\n}\n\n.sr-only {\n @include srOnly;\n}\n\n/// FOR DEPRECATED TYPES ///////////////////////////////////////\n.empty-block {\n margin: 5rem auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n\n .upload-file {\n margin-bottom: rem-calc(30);\n }\n\n .empty-message {\n font-size: 0.875rem;\n &.large {\n font-size: 1.5rem;\n }\n margin-bottom: rem-calc(7);\n }\n\n .info-wrapper {\n justify-content: center;\n width: 100%; // for .notif\n\n .wm-button {\n // Removing the width inherit here to prevent a 100% width\n // from the info-wrapper. Future proofing a day when\n // we might want a long notif to wrap.\n width: auto;\n }\n }\n}\n\n.header {\n &.type1,\n &.type2 {\n margin-bottom: 1rem;\n }\n .slot-wrapper {\n display: flex;\n justify-content: flex-start;\n align-items: flex-start;\n }\n}\n\n.notif-wrapper {\n &.type1,\n &.type2 {\n flex-direction: column;\n margin-bottom: rem-calc(16);\n }\n}\n\n.list-container {\n &.type1,\n &.type2 {\n overflow-y: auto;\n ul {\n margin: revert;\n }\n .file-list li,\n .inprogress-list li {\n // margin-bottom also on the last element, otherwise tooltip on dl and delete btns triggers a scrollbar\n margin-bottom: rem-calc(26);\n }\n .error-list li {\n margin-bottom: rem-calc(20);\n }\n }\n\n &.type1 {\n padding: rem-calc(0 30);\n height: rem-calc(260);\n }\n}\n","import { Component, Element, Event, EventEmitter, h, Host, Prop, State, Listen, Watch } from \"@stencil/core\";\nimport { forceUpdate } from \"@stencil/core\";\nimport { generateId, hasValidType } from \"../../global/functions\";\nimport { UploadedFile } from \"../../global/interfaces\";\nimport { uploaderMessages } from \"../../global/intl\";\ninterface ErrorFile {\n name: string;\n message: string;\n}\n\n@Component({\n tag: \"wm-uploader\",\n styleUrl: \"wm-uploader.scss\",\n shadow: { delegatesFocus: true },\n})\nexport class Uploader {\n @Element() el!: HTMLWmUploaderElement;\n private liveRegion!: HTMLDivElement;\n get uploadButtonEl(): HTMLElement {\n return this.el.shadowRoot!.querySelector(`#${this.inputId}`) as HTMLElement;\n }\n\n @Prop({ mutable: true }) uploaderType?: \"1\" | \"2\"; // only mutable for the deprecation transition\n @Prop() type?: \"1\" | \"2\"; // DEPRECATED in favor of uploaderType\n get tempUploaderType() {\n // replace instances of this.tempUploaderType with this.uploaderType once type is fully phased out\n return this.type || this.uploaderType;\n }\n @Prop() label?: string;\n @Prop() buttonText!: string;\n @Prop() info?: string;\n @Prop() emptyStateText!: string;\n @Prop() icon!: string;\n @Prop() fileTypes: string = \"pdf txt log xml doc docx xls xlsx ppt pptx gif jpg jpeg png csv\";\n @Prop() maxSize?: number | null; // in Mb\n @Prop() maxFiles?: number;\n @Prop() sortBy: \"name\" | \"date\" = \"date\"; // name is descending (a -> z), date is ascending (earlier -> later)\n @Prop() showInfo: \"time\" | \"size\" | \"none\" = \"time\";\n @Prop() errorMessage?: string;\n @Prop() requiredField?: boolean;\n\n @Prop() files?: string; // String representation of an array of files (the files retrieved from the server)\n @State() fileList: UploadedFile[] = []; // the string above transformed into the actual array\n @Prop({ mutable: true }) filesToUpload: File[] = []; // input.files that passed validation\n\n @State() isTabbing: boolean = false;\n\n @Prop() rejectedFiles?: string; // String representation of an array of errors to add to errorList, allows devs to display server-side errors\n @State() errorList: ErrorFile[] = []; // for errors on a particular file\n @State() notif?: string | null; // for upload notifications\n @State() internalErrorMessage?: string;\n @State() announcement: string = \"\";\n @State() numFilesInProgress?: number | null; // null when not uploading != 0 (when all files are done uploading) != undefined (original state)\n @State() isCondensed: boolean = false;\n private srProgress?: any; // setInterval for SR to announce the aggregate progress percentage when things take a long time. stored here so it can be stopped when upload is finished.\n private inputId = generateId();\n\n @Event() wmUploaderFilesSelected!: EventEmitter;\n @Event() wmFilesSelected!: EventEmitter; // deprecated in favor of wmUploaderFilesSelected\n @Event() wmUploaderDeleteFile!: EventEmitter;\n @Event() wmDeleteFile!: EventEmitter; // deprecated in favor of wmUploaderDeleteFile\n @Event() wmUploaderDownloadFile!: EventEmitter;\n @Event() wmDownloadFile!: EventEmitter; // deprecated in favor of wmUploaderDownloadFile\n @Event() wmUploaderPreviewFile!: EventEmitter;\n\n @Event() wmFileDelete!: EventEmitter<string>;\n @Event() wmFileDownload!: EventEmitter<string>;\n @Event() wmFilePreview!: EventEmitter<string>;\n\n get effectiveMaxSize() {\n const defaultMaxSize = 100;\n // maxsize cannot be set to over 100Mb\n const maxSizeLimit = 100;\n\n return this.maxSize ? Math.min(this.maxSize, maxSizeLimit) : defaultMaxSize;\n }\n\n get fileLimitReached() {\n return this.maxFiles && this.fileList.length >= this.maxFiles;\n }\n\n get displayedErrorMessage(): string {\n return this.errorMessage || this.internalErrorMessage || \"\";\n }\n\n @Listen(\"wmUserIsTabbing\", { target: \"window\" })\n toggleTabbingOn() {\n this.isTabbing = true;\n }\n\n @Listen(\"wmUserIsNotTabbing\", { target: \"window\" })\n toggleTabbingOff() {\n this.isTabbing = false;\n }\n\n @Listen(\"wmUploadProgress\")\n handleUploadProgress(ev: CustomEvent) {\n this.fileList.map((i) => {\n if (i.id === ev.detail.id) {\n i.progress = ev.detail.progress;\n forceUpdate(this.el);\n }\n });\n\n if (ev.detail.progress === 100) {\n // inProgressList is not a perfect reflection of how many files are uploading\n // because even after progress reached 100% the item should remain in the array\n // (should only be removed once it appears in fileList)\n this.numFilesInProgress! -= 1;\n }\n\n // aggregate the percentages for SR to announce progress\n if (!this.srProgress && this.numFilesInProgress) {\n const total = this.numFilesInProgress; // if we don't reassign this number changes when a file is done and the percentage becomes wrong\n this.srProgress = setInterval(() => {\n const aggregate = this.fileList.reduce((avg, item) => (item.progress ? avg + item.progress : avg), 0);\n this.announce(uploaderMessages.getUploadProgress(Math.floor(aggregate / total)));\n }, 5000);\n }\n }\n\n @Listen(\"wmFileClearErrorClicked\")\n handleFileErrorCleared(ev: CustomEvent) {\n const filename = ev.detail.name;\n this.errorList = this.errorList.filter((error) => error.name != filename);\n this.uploadButtonEl.focus();\n }\n\n @Listen(\"wmIntFileDeleted\")\n handleFileDeleted(ev: CustomEvent) {\n this.clearErrors();\n forceUpdate(this.el); // for the button to stop being disabled if num files become < max-files\n this.wmUploaderDeleteFile.emit(ev.detail);\n this.wmFileDelete.emit(ev.detail);\n this.wmDeleteFile.emit(ev.detail); // deprecated\n }\n\n @Listen(\"wmIntFilePreviewed\")\n handleFilePreviewed(ev: CustomEvent) {\n this.clearErrors();\n this.wmUploaderPreviewFile.emit(ev.detail);\n this.wmFilePreview.emit(ev.detail);\n }\n\n @Listen(\"wmIntFileDownloaded\")\n handleFileDownloaded(ev: CustomEvent) {\n this.clearErrors();\n this.wmUploaderDownloadFile.emit(ev.detail);\n this.wmFileDownload.emit(ev.detail);\n this.wmDownloadFile.emit(ev.detail); // deprecated\n }\n\n @Watch(\"files\")\n parseFiles() {\n if (!!this.files) {\n if (typeof this.files === \"string\") {\n let list = JSON.parse(this.files);\n if (typeof list === \"object\") {\n // if size is in byte format, convert to display format\n list.forEach((item: any) => {\n if (item.size && (typeof item.size === \"number\" || item.size.match(/^[0-9]+$/))) {\n const convertedSize = this.convertBytes(item.size);\n item.size = `${convertedSize.size.toFixed(0)} ${convertedSize.unit}`;\n }\n });\n this.fileList = list;\n } else {\n throw new Error(\"could not parse string passed to files attribute\");\n }\n } else {\n throw new Error(\"Attribute 'files' should be a string\");\n }\n }\n }\n\n @Watch(\"fileList\")\n focusAfterRemoval(newFiles: UploadedFile[], oldFiles: UploadedFile[]) {\n if (this.isTabbing && newFiles.length < oldFiles.length) {\n const newFileIds = newFiles.map((file: UploadedFile) => file.id);\n const oldFileIds = oldFiles.map((file: UploadedFile) => file.id);\n // even in the case that multiple files have been removed at once, work off of the first in that group\n const removedFileId = oldFileIds.filter((id: string) => !newFileIds.includes(id))[0];\n\n if (oldFileIds.indexOf(removedFileId) > 0) {\n const fileIdPrecedingRemoved = oldFileIds[oldFileIds.indexOf(removedFileId) - 1];\n const fileElPrecedingRemoved = this.el.shadowRoot!.querySelector(\"#file-\" + fileIdPrecedingRemoved);\n const focusedElementsButtons = fileElPrecedingRemoved?.shadowRoot!.querySelectorAll(\"wm-button\");\n\n if (focusedElementsButtons && focusedElementsButtons.length > 0) {\n const lastButtonInFile = focusedElementsButtons[focusedElementsButtons.length - 1];\n lastButtonInFile.focus();\n } else {\n // if preceding file has no file action buttons, rerun function with adjusted params\n // by removing the fileElPrecedingRemoved from the newFiles list, it is now considered the removedFile and looks to focus it's preceding file\n // if it continues to cannot find an appropriate preceding file and becomes the first file in the list, it focuses the upload button\n this.focusAfterRemoval(\n newFiles.filter((file: UploadedFile) => file.id !== fileIdPrecedingRemoved),\n oldFiles\n );\n }\n } else {\n this.uploadButtonEl.focus();\n }\n }\n }\n\n @Watch(\"rejectedFiles\")\n parseRejectedFiles() {\n if (!!this.rejectedFiles) {\n if (typeof this.files === \"string\") {\n const list = JSON.parse(this.rejectedFiles);\n if (typeof list === \"object\") {\n this.errorList = list;\n } else {\n throw new Error(\"could not parse string passed to errors attribute\");\n }\n } else {\n throw new Error(\"Attribute 'rejected-files' should be a string\");\n }\n }\n }\n\n @Watch(\"numFilesInProgress\")\n uploadNotifications(newNum: number, oldNum: number) {\n if (oldNum > 0 && newNum === 0) {\n setTimeout(() => {\n this.notif = \"\";\n this.internalErrorMessage = \"\";\n }, 20 * 1000);\n this.notif = uploaderMessages.finishedUploading;\n this.announce(uploaderMessages.finishedUploading);\n this.numFilesInProgress = null;\n clearInterval(this.srProgress);\n forceUpdate(this.el);\n } else if (newNum > 0 && newNum != oldNum) {\n this.notif = uploaderMessages.getFilesUploading(newNum);\n this.announce(uploaderMessages.getFilesUploading(newNum));\n forceUpdate(this.el);\n }\n }\n\n @Watch(\"errorMessage\")\n handleErrorMessageChange() {\n if (this.errorMessage) {\n this.announce(this.errorMessage);\n }\n }\n\n isValidSize(size: number) {\n return this.convertBytes(size, \"MB\").size <= this.effectiveMaxSize;\n }\n\n convertBytes(bytes: number, unit?: \"KB\" | \"MB\" | \"GB\" | \"TB\") {\n // https://stackoverflow.com/questions/2365100/converting-bytes-to-megabytes\n const unitOrder = [\"bytes\", \"KB\", \"MB\", \"GB\", \"TB\"];\n let unitIndex = 0;\n let result = typeof bytes === \"number\" ? bytes : parseInt(bytes);\n\n if (unit) {\n // convert until result matches desired unit\n while (unitOrder.indexOf(unit) > unitIndex) {\n result /= 1024;\n unitIndex++;\n }\n } else {\n // convert until result is appropriate unit (value is under 1000)\n while (result > 1000) {\n result /= 1024;\n unitIndex++;\n }\n }\n return { size: result, unit: unitOrder[unitIndex] };\n }\n\n isDuplicate(name: string) {\n const hasDuplicateUploadingFile = this.filesToUpload.some((fileToUpload: File) => fileToUpload.name === name);\n const hasDuplicateUploadedFile = this.fileList.some((f) => {\n const filename: string = f.type ? f.name + \".\" + f.type : f.name;\n return filename === name;\n });\n\n return hasDuplicateUploadingFile || hasDuplicateUploadedFile;\n }\n\n isEmpty() {\n return !this.fileList.length && !this.errorList.length;\n }\n\n get isDisabled() {\n // disable if is the uploader is maxed out or if something is uploading\n return this.fileLimitReached || this.numFilesInProgress! > 0;\n }\n\n isItemUploading(item: UploadedFile) {\n return item.hasOwnProperty(\"progress\") && item.progress! < 100;\n }\n\n announce(message: string) {\n if (this.liveRegion.textContent === message) {\n message += \"\\u00A0\";\n }\n this.announcement = message;\n }\n\n clearErrors() {\n this.errorList = [];\n this.notif = \"\";\n this.internalErrorMessage = \"\";\n }\n\n handleFiles(ev: Event) {\n this.filesToUpload = [];\n const files = Array.from((ev.target! as HTMLInputElement).files!);\n const validTypes = this.fileTypes.split(\" \").join(\", \");\n\n if (!!this.maxFiles && this.fileList.length + files.length > this.maxFiles) {\n this.internalErrorMessage = uploaderMessages.fileLimitExceeded;\n this.announce(uploaderMessages.fileLimitExceeded);\n } else {\n files &&\n files.map((file) => {\n if (!hasValidType(file, this.fileTypes)) {\n const error = {\n name: file.name,\n message: uploaderMessages.getInvalidFileType(validTypes),\n };\n this.errorList.push(error);\n } else if (file.size === 0) {\n const error = {\n name: file.name,\n message: uploaderMessages.zeroFileSize,\n };\n this.errorList.push(error);\n } else if (!this.isValidSize(file.size)) {\n const error = {\n name: file.name,\n message: uploaderMessages.getFileTooLarge(this.effectiveMaxSize),\n };\n this.errorList.push(error);\n } else if (this.isDuplicate(file.name)) {\n const error = {\n name: file.name,\n message: uploaderMessages.duplicateName,\n };\n this.errorList.push(error);\n } else {\n this.filesToUpload.push(file);\n }\n });\n\n if (this.filesToUpload.length > 0) {\n this.numFilesInProgress = this.filesToUpload.length;\n this.wmUploaderFilesSelected.emit(this.filesToUpload);\n this.wmFilesSelected.emit(this.filesToUpload); // deprecated\n }\n }\n (ev.target! as HTMLInputElement).value = \"\"; // reset to ensure that onChange is triggered when the same file is selected a second time\n }\n\n componentWillLoad() {\n if (!this.buttonText) {\n throw new Error(\"wm-uploader: button-text is a required prop\");\n }\n\n if (this.type) {\n console.warn(\"wm-uploader: type has been deprecated as of v3.1.0. Please use uploader-type instead.\");\n }\n\n if (this.tempUploaderType === \"1\" && !this.emptyStateText) {\n throw new Error(\"wm-uploader: empty-state-text is a required prop\");\n }\n\n this.parseFiles();\n this.clearErrors();\n this.parseRejectedFiles();\n }\n\n componentDidLoad() {\n if (document.body.classList.contains(\"wmcl-user-is-tabbing\")) {\n this.toggleTabbingOn();\n }\n }\n\n uploadButtonOnClick(ev: Event) {\n if (this.isDisabled) {\n // this is a temporary fix.\n // we need the disabled button to be programmatically focusable\n // to allow return focus after closing the browser file panel\n // since it's focusable the button should respond when activated\n // it looks disabled, and announces the reason why the action cannot\n // be taken when activated.\n ev.preventDefault();\n\n if (this.numFilesInProgress! > 0) {\n const srMsg = uploaderMessages.waitToUpload;\n this.announce(srMsg);\n } else if (this.fileLimitReached) {\n this.internalErrorMessage = uploaderMessages.fileLimitReached;\n this.announce(uploaderMessages.fileLimitReached);\n }\n } else {\n this.clearErrors();\n }\n }\n\n renderUploadSvg() {\n return (\n <svg class=\"upload-file\" width=\"91\" height=\"84\" viewBox=\"0 0 91 84\">\n <path\n transform=\"rotate(-180.000000) translate(-452, -255.5)\"\n fill=\"#eae8ec\"\n d=\"M361,249.681818 L361,197.318182 C361,194.118182 365.555061,191.5 371.122358,191.5 L391.316463,191.5 L391.286495,200.562515 L369.871211,200.600292 L369.885404,200.622146 L369.886423,246.655947 L443.657038,246.840767 L443.657038,200.622146 L421.683537,200.622146 L421.683537,191.5 L441.978865,191.5 C447.546162,191.5 452,194.118182 452,197.318182 L452,249.681818 C452,252.881818 447.546162,255.5 441.978865,255.5 L371.122358,255.5 C365.504449,255.5 361,252.881818 361,249.681818 Z M391.5,207 L406,221 L420.5,207 L409.625,207 L409.625,172 L402.375,172 L402.375,207 L391.5,207 Z\"\n ></path>\n </svg>\n );\n }\n\n renderIcon() {\n // mdi attachment icon (paper clip) is horizontal but we want it vertical\n const rotate = this.icon && this.icon === \"f066\";\n return (\n this.icon && (\n <span class={`mdi ${rotate ? \"rotate\" : \"\"}`}>{String.fromCodePoint(parseInt(`0x${this.icon}`))}</span>\n )\n );\n }\n\n renderInfo() {\n return this.info && this.tempUploaderType === \"2\" ? <span class=\"info\">{this.info}</span> : \"\";\n }\n\n renderNotif() {\n return <div class=\"notif\">{this.notif}</div>;\n }\n\n renderError() {\n return <div id=\"error\">{this.displayedErrorMessage}</div>;\n }\n\n renderUploadButton(classes: string) {\n let accessibleLabel = `${this.label && this.label !== this.buttonText ? `${this.label}, ` : \"\"}${this.buttonText}`;\n\n return (\n <div class=\"info-wrapper\">\n <input\n name={this.inputId}\n id={this.inputId}\n class=\"sr-only\"\n aria-label={accessibleLabel}\n aria-required={this.requiredField ? \"true\" : null}\n aria-describedby={`${this.displayedErrorMessage ? \"error \" : \"\"}file-count max-size accepted-types`}\n type=\"file\"\n multiple\n onClick={(ev) => this.uploadButtonOnClick(ev)}\n onChange={(ev) => this.handleFiles(ev)}\n />\n <label htmlFor={this.inputId} class={`wm-button ${classes}${this.isTabbing ? \" user-is-tabbing\" : \"\"}`}>\n {this.renderIcon()}\n {this.buttonText}\n </label>\n {this.renderInfo()}\n </div>\n );\n }\n\n renderEmptyState() {\n return (\n <div class=\"empty-block\">\n {this.renderUploadSvg()}\n <div class={`empty-message`}>{this.emptyStateText}</div>\n {this.renderUploadButton(\"-primary empty-button\")}\n {this.notif && this.renderNotif()}\n {this.displayedErrorMessage && this.renderError()}\n </div>\n );\n }\n\n renderErrorList() {\n let srMessage = this.errorList.reduce(function (acc, err) {\n return acc + `${err.name}: ${err.message} `;\n }, \"\");\n this.announce(srMessage);\n\n return (\n <ul class=\"error-list\">\n {this.errorList.map((err) => (\n <wm-file file={`{\"name\": \"${err.name}\"}`} error-message={err.message}></wm-file>\n ))}\n </ul>\n );\n }\n\n formatTimestamp(timestamp: string): string {\n const uploadDate = new Date(Date.parse(timestamp));\n const day = uploadDate.getDate();\n const month = uploadDate.getMonth() + 1;\n const year = uploadDate.getFullYear();\n const time = uploadDate.toLocaleTimeString(\"en-us\", { hour: \"numeric\", minute: \"2-digit\" });\n const formattedDate = `${month}/${day}/${year} ${time}`;\n\n return formattedDate;\n }\n\n renderInProgressFileList() {\n return (\n <ul class=\"inprogress-list\">\n {this.fileList\n .filter((item) => this.isItemUploading(item))\n .map((item) => (\n <wm-file file={JSON.stringify(item)} show-info={this.showInfo}></wm-file>\n ))}\n </ul>\n );\n }\n\n renderUploadedFileList() {\n return (\n <ul class=\"file-list\">\n {this.fileList\n .filter((item) => !this.isItemUploading(item))\n .map((item) => {\n item.lastUpdated = this.formatTimestamp(item.lastUpdated);\n return <wm-file id={`file-${item.id}`} file={JSON.stringify(item)} show-info={this.showInfo}></wm-file>;\n })}\n </ul>\n );\n }\n\n renderFiles() {\n // if we switch to accepting display format for the wm-uploader's file lastUpdateds, sorting by date will become impossible\n this.sortBy === \"name\"\n ? this.fileList.sort((a, b) => a.name.localeCompare(b.name))\n : this.fileList.sort((a, b) => Date.parse(a.lastUpdated) - Date.parse(b.lastUpdated));\n return (\n <div>\n {this.renderInProgressFileList()}\n {this.renderUploadedFileList()}\n </div>\n );\n }\n\n legacyRenderHeader() {\n return (\n <div class={`header ${this.tempUploaderType ? `type${this.tempUploaderType}` : \"\"}`}>\n <div class=\"slot-wrapper\">\n <slot />\n <div class={`notif-wrapper ${this.tempUploaderType ? `type${this.tempUploaderType}` : \"\"}`}>\n {this.renderUploadButton(`-secondary ${this.isDisabled ? \"disabled\" : \"\"}`)}\n {this.notif && this.renderNotif()}\n {this.displayedErrorMessage && this.renderError()}\n </div>\n </div>\n </div>\n );\n }\n\n renderHeader() {\n const validTypes = \".\" + this.fileTypes.split(\" \").join(\", .\");\n\n return (\n <div class={`header ${this.tempUploaderType ? `type${this.tempUploaderType}` : \"\"}`}>\n <div class={`notif-wrapper ${this.tempUploaderType ? `type${this.tempUploaderType}` : \"\"}`}>\n {this.renderUploadButton(`-secondary ${this.isDisabled ? \"disabled\" : \"\"}`)}\n {this.renderRequirements()}\n </div>\n <div id=\"accepted-types\" class=\"accepted-types\">\n {uploaderMessages.getAcceptedFileTypes(validTypes, this.fileTypes.split(\" \").length)}\n </div>\n {this.notif && this.renderNotif()}\n {this.displayedErrorMessage && this.renderError()}\n </div>\n );\n }\n\n renderRequirements() {\n return (\n <div class=\"requirements\">\n {this.maxFiles && (\n <span id=\"file-count\">{uploaderMessages.getFileCount(this.fileList.length, this.maxFiles)}</span>\n )}\n {this.maxSize && <span id=\"max-size\">{uploaderMessages.getMaxSize(this.effectiveMaxSize)}</span>}\n </div>\n );\n }\n\n renderFooter() {\n return (\n <div class=\"footer\">\n <div class={`notif-wrapper ${this.tempUploaderType ? `type${this.tempUploaderType}` : \"\"}`}>\n <div class=\"filecount-wrapper\">\n <div class=\"filecount\">{uploaderMessages.getFilesAdded(this.fileList.length)}</div>\n {this.renderUploadButton(`-primary ${this.isDisabled ? \"disabled\" : \"\"}`)}\n </div>\n {this.notif && this.renderNotif()}\n {this.displayedErrorMessage && this.renderError()}\n </div>\n </div>\n );\n }\n\n renderWithItems() {\n // it's possible progress is passed in as a string, so we need to check for \"100\" as well\n const hasNewlyUploadedFiles =\n this.fileList.filter((file) => file.progress === (typeof file.progress === \"number\" ? 100 : \"100\")).length > 0;\n return (\n <div>\n {!this.tempUploaderType && this.renderHeader()}\n {this.tempUploaderType === \"2\" && this.legacyRenderHeader()}\n <div\n class={`list-container type${this.tempUploaderType} ${\n !this.tempUploaderType && hasNewlyUploadedFiles ? \"checkmark-spacer\" : \"\"\n }`}\n >\n {this.errorList.length > 0 && this.renderErrorList()}\n {this.fileList.length > 0 && this.renderFiles()}\n </div>\n {this.tempUploaderType === \"1\" && this.renderFooter()}\n </div>\n );\n }\n\n renderLabel() {\n return (\n <div class={`wrapper ${this.displayedErrorMessage ? \"invalid\" : \"\"}`}>\n <div id=\"label\" class={`label`}>\n {this.label}\n {this.requiredField && (\n <span class=\"required\" aria-hidden=\"true\">\n *\n </span>\n )}\n </div>\n </div>\n );\n }\n\n render() {\n return (\n <Host>\n {this.label && this.renderLabel()}\n {this.isEmpty() && this.tempUploaderType === \"1\" ? this.renderEmptyState() : this.renderWithItems()}\n <div\n ref={(el) => (this.liveRegion = el as HTMLDivElement)}\n class=\"live-region sr-only\"\n 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\n aria-atomic=\"true\"\n >\n {this.announcement}\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Wrapper","prototype","componentDidLoad","this","wmWrapperLoaded","emit","render"],"sources":["src/components/wm-wrapper/wm-wrapper.tsx"],"sourcesContent":["import { Component, Element, Event, EventEmitter } from \"@stencil/core\";\
|
|
1
|
+
{"version":3,"names":["Wrapper","prototype","componentDidLoad","this","wmWrapperLoaded","emit","render"],"sources":["src/components/wm-wrapper/wm-wrapper.tsx"],"sourcesContent":["import { Component, Element, Event, EventEmitter } from \"@stencil/core\";\n\n@Component({\n tag: \"wm-wrapper\",\n shadow: false,\n})\nexport class Wrapper {\n @Element() el!: any;\n @Event() wmWrapperLoaded!: EventEmitter<void>;\n\n componentDidLoad() {\n this.wmWrapperLoaded.emit();\n }\n\n render() {\n return;\n }\n}\n"],"mappings":"4FAMaA,QAAO,W,kGAIlBA,EAAAC,UAAAC,iBAAA,WACEC,KAAKC,gBAAgBC,M,EAGvBL,EAAAC,UAAAK,OAAA,WACE,M,gIATgB,U"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as e,c as t,h as i,H as r,g as a}from"./p-1c23de4a.js";import{i as s,e as l,h as o,g as p}from"./p-05e0f901.js";const n=':host,wm-datepicker{font-family:inherit}:host *,wm-datepicker *{-webkit-box-sizing:border-box;box-sizing:border-box}:host .wrapper,wm-datepicker .wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;font-size:0.875rem}:host .wrapper .label,wm-datepicker .wrapper .label{display:block;line-height:normal;font-weight:600;white-space:nowrap;margin-bottom:0.25rem}:host .wrapper .label .required,wm-datepicker .wrapper .label .required{color:#c0392b}:host .wrapper.label-left,wm-datepicker .wrapper.label-left{-ms-flex-direction:row;flex-direction:row}:host .wrapper.label-left .label-wrapper,wm-datepicker .wrapper.label-left .label-wrapper{line-height:2.5rem}:host .wrapper.label-left .label-wrapper .label,wm-datepicker .wrapper.label-left .label-wrapper .label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:2.5rem;white-space:normal;margin-bottom:0;margin-right:0.75rem}:host .wrapper.label-none label,wm-datepicker .wrapper.label-none label{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;border:0 !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;white-space:nowrap !important;margin:-1px !important}:host .wrapper.invalid .label,wm-datepicker .wrapper.invalid .label{color:#c0392b}:host .wrapper.invalid .label:after,wm-datepicker .wrapper.invalid .label:after{display:inline-block;font:normal normal normal 24px/1 "Material Design Icons";font-size:inherit;text-rendering:auto;line-height:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\\f026";margin-left:0.3125rem}[dir=RTL] :host .wrapper.invalid .label:after,[dir=RTL] wm-datepicker .wrapper.invalid .label:after{margin-left:0;margin-right:0.3125rem}:host .wrapper.rtl.label-left .label,wm-datepicker .wrapper.rtl.label-left .label{margin-right:0;margin-left:0.75rem}:host .wrapper,wm-datepicker .wrapper{position:relative}:host .wrapper .required,wm-datepicker .wrapper .required{color:#c4431c}:host .wrapper .inner-wrapper,wm-datepicker .wrapper .inner-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;height:2.5rem;border:1px solid;border-color:rgba(35, 35, 35, 0.6);-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;border-radius:3px;max-width:236px;-ms-flex-pack:justify;justify-content:space-between;position:relative}:host .wrapper .inner-wrapper .date-input,wm-datepicker .wrapper .inner-wrapper .date-input{-moz-border-top-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-bottom-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;border:none;font-size:0.875rem;padding:0.625rem 0.9375rem 0.5rem;min-width:0;height:100%;-ms-flex:1;flex:1;margin:0}:host .wrapper .inner-wrapper .date-input:disabled,wm-datepicker .wrapper .inner-wrapper .date-input:disabled{background-color:#f0f0f0;color:#737373}:host .wrapper .inner-wrapper .date-input:focus,wm-datepicker .wrapper .inner-wrapper .date-input:focus{outline:none}:host .wrapper.invalid .inner-wrapper,wm-datepicker .wrapper.invalid .inner-wrapper{-webkit-box-shadow:0 0 0 1px #c0392b;-moz-box-shadow:0 0 0 1px #c0392b;box-shadow:0 0 0 1px #c0392b;border-color:#c0392b}:host .wrapper.invalid .error,wm-datepicker .wrapper.invalid .error{display:block;font-style:italic;color:#c0392b;font-size:0.875rem;margin-top:0.25rem;margin-bottom:4px;top:100%;left:0}:host .wrapper.focus .inner-wrapper,wm-datepicker .wrapper.focus .inner-wrapper{-webkit-box-shadow:0 0 0 1px #20cbd4;-moz-box-shadow:0 0 0 1px #20cbd4;box-shadow:0 0 0 1px #20cbd4;outline:none;border-color:#20cbd4}:host .user-is-tabbing .toggle:focus:not(:active),wm-datepicker .user-is-tabbing .toggle:focus:not(:active){border:none;z-index:11}';const d=class{constructor(i){e(this,i);this.wmDatepickerNewValidValue=t(this,"wmDatepickerNewValidValue",7);this.lastCommittedValue=this.value;this.parsableEntry=/^(\d{1}|\d{2}|\d{4})[\-\.\/]\d{1,2}[\-\.\/](\d{1}|\d{2}|\d{4})$/;this.isoEntry=/^\d\d\d\d[-]\d\d[-]\d\d$/;this.eightDigitsEntry=/^\d{8}$/;this.dateFormats={US:s.formatMessage({id:"date.formatUS",defaultMessage:"mm/dd/yyyy"}),INT:s.formatMessage({id:"date.formatINT",defaultMessage:"dd/mm/yyyy"}),ISO:s.formatMessage({id:"date.formatISO",defaultMessage:"yyyy/mm/dd"})};this.value="";this.disabled=false;this.dateFormat="US";this.errorMessage="";this.labelPosition="top";this.label="";this.requiredField=false;this.requiredFieldMessage=undefined;this.preventValidation=undefined;this.displayError=""}handleTabbingOn(){this.dpWrapper&&this.dpWrapper.classList.add("user-is-tabbing")}handleTabbingOff(){this.dpWrapper&&this.dpWrapper.classList.remove("user-is-tabbing")}handleError(){if(this.errorMessage){this.generateError()}else{this.clearError();this.processInput()}}handleInput(e){this.value=e.target.value}handleBlur(e){const t=this.preventValidation&&l(e,this.preventValidation);if(!t){this.processInput()}this.dpWrapper.classList.remove("focus")}focusHandler(){this.dpWrapper.classList.add("focus")}handlePopupBlurred(e){if(e.detail.relatedTarget!==this.el){const t=new CustomEvent("blur");t.relatedTarget=e.detail.relatedTarget;this.el.dispatchEvent(t)}}getActiveElement(){return o(document.activeElement)}handleCellTriggered(e){let t=e.detail;let i=t.getAttribute("data-year")+"-"+t.getAttribute("data-month")+"-"+t.textContent;this.inputEl.value=this.reformatDate(this.dateFormat,i);this.processInput();const r=new CustomEvent("input");this.el.dispatchEvent(r)}processInput(e){const t=!e&&this.requiredField;let i=this.inputEl.value;if(this.eightDigitsEntry.test(this.inputEl.value)){this.inputEl.value=this.addSlashes(this.inputEl.value)}if(this.parsableEntry.test(this.inputEl.value)){i=this.reformatDate("ISO",this.inputEl.value);this.inputEl.value=this.reformatDate(this.dateFormat,i);if(this.isValidDate(i)){if(this.errorMessage){this.generateError()}else{this.clearError()}}else if(this.inputEl.value.length){this.generateError()}}else if(this.inputEl.value.length||t||this.errorMessage){this.generateError()}else if(!this.inputEl.value.length&&!t){this.clearError()}this.value=i;if(i!==this.lastCommittedValue){const e=new CustomEvent("change");this.el.dispatchEvent(e);this.lastCommittedValue=this.value}if(this.isValidDate(i)&&i!==this.lastValidValue){this.wmDatepickerNewValidValue.emit();this.lastValidValue=i}}reformatDate(e,t){if(!t){return""}else if(!this.parsableEntry.test(t)){return t}else{let i=t.replace(/[\-\.]/gi,"/").split("/");switch(e){case"US":case this.dateFormats["US"]:return i[1].padStart(2,"0")+"/"+i[2].padStart(2,"0")+"/"+i[0].padStart(4,"20");case"INT":case this.dateFormats["INT"]:return i[2].padStart(2,"0")+"/"+i[1].padStart(2,"0")+"/"+i[0].padStart(4,"20");case"ISO":case this.dateFormats["ISO"]:if(this.dateFormat==="US"||this.dateFormat===this.dateFormats["US"]){return i[2].padStart(4,"20")+"-"+i[0].padStart(2,"0")+"-"+i[1].padStart(2,"0")}else if(this.dateFormat==="INT"||this.dateFormat===this.dateFormats["INT"]){return i[2].padStart(4,"20")+"-"+i[1].padStart(2,"0")+"-"+i[0].padStart(2,"0")}else if(this.dateFormat==="ISO"||this.dateFormat===this.dateFormats["ISO"]){return i[0].padStart(4,"20")+"-"+i[1].padStart(2,"0")+"-"+i[2].padStart(2,"0")}default:return i.join("/")}}}isValidDate(e){if(!e||!this.isoEntry.test(e)){return false}else{let t=e.split("-");let i=parseInt(t[2],10);let r=parseInt(t[1],10);let a=parseInt(t[0],10);if(a<1e3||a>3e3||r==0||r>12)return false;let s=[31,28,31,30,31,30,31,31,30,31,30,31];if(a%400==0||a%100!=0&&a%4==0)s[1]=29;return i>0&&i<=s[r-1]}}generateError(){const e=this.requiredFieldMessage||s.formatMessage({id:"date.requiredDateError",defaultMessage:"A date is required."});const t=s.formatMessage({id:"date.invalidDate",defaultMessage:"Please enter a valid date in the format {dateFormat, select, us {mm/dd/yyyy} int {dd/mm/yyyy} other {yyyy/mm/dd}}."},{dateFormat:this.dateFormat.toLowerCase()});if(this.errorMessage){this.displayError=this.errorMessage}else if(this.inputEl.value.length){this.displayError=t}else if(!this.inputEl.value.length&&this.requiredField){this.displayError=e}}clearError(){this.displayError=""}addSlashes(e){if(this.dateFormat==="ISO"||this.dateFormat===this.dateFormats["ISO"]){return e.substring(0,4)+"/"+e.substring(4,6)+"/"+e.substring(6)}else{return e.substring(0,2)+"/"+e.substring(2,4)+"/"+e.substring(4)}}componentWillLoad(){if(this.label===""){console.error("You must include a label prop for the datepicker input (for accessibility reasons), even if the label position is none.")}if(this.errorMessage){this.generateError()}this.uid=this.el.id?this.el.id:p();if(this.value&&this.isValidDate(this.value)){this.lastValidValue=this.value}}componentDidLoad(){this.inputEl.value=this.reformatDate(this.dateFormat,this.value);this.processInput(true)}render(){const e=s.formatMessage({id:"date.format",defaultMessage:"{dateFormat, select, us {mm/dd/yyyy} int {dd/mm/yyyy} other {yyyy/mm/dd}}"},{dateFormat:this.dateFormat.toLowerCase()});return i(r,{id:this.uid,"aria-busy":"false",class:`${this.displayError?"invalid":""}`,invalid:this.displayError?"true":null},i("div",{ref:e=>this.dpWrapper=e,class:`wrapper label-${this.labelPosition} ${this.displayError?"invalid":""}`},i("div",{class:"label-wrapper"},this.labelPosition!=="none"&&i("label",{id:`datepickerLabel-${this.uid}`,htmlFor:`date-input-${this.uid}`,class:"label",title:`${this.label} (${e})`},this.label,this.requiredField&&i("span",{"aria-hidden":"true",class:"required"},"*"))),i("div",null,i("div",{class:"inner-wrapper"},i("input",{disabled:this.disabled,type:"text",id:`date-input-${this.uid}`,class:"date-input",name:"date",placeholder:e,onFocus:this.focusHandler.bind(this),onInput:e=>this.handleInput(e),onBlur:e=>this.handleBlur(e),ref:e=>this.inputEl=e,"aria-describedby":`error-${this.uid}`,"aria-controls":`popup-${this.uid}`,"aria-label":this.label,"aria-required":this.requiredField?"true":null}),i("priv-datepicker",{disabled:this.disabled,date:this.lastValidValue?new Date(this.lastValidValue):new Date,parentId:this.uid})),i("div",{id:`error-${this.uid}`,class:"error","aria-live":"assertive","aria-atomic":"true"},this.displayError))))}static get delegatesFocus(){return true}get el(){return a(this)}static get watchers(){return{errorMessage:["handleError"]}}};d.style=n;export{d as wm_datepicker};
|
|
2
|
-
//# sourceMappingURL=p-
|
|
1
|
+
import{r as e,c as t,h as i,H as r,g as a}from"./p-1c23de4a.js";import{i as s,e as l,h as o,g as p}from"./p-c6a0f7e5.js";const n=':host,wm-datepicker{font-family:inherit}:host *,wm-datepicker *{-webkit-box-sizing:border-box;box-sizing:border-box}:host .wrapper,wm-datepicker .wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;font-size:0.875rem}:host .wrapper .label,wm-datepicker .wrapper .label{display:block;line-height:normal;font-weight:600;white-space:nowrap;margin-bottom:0.25rem}:host .wrapper .label .required,wm-datepicker .wrapper .label .required{color:#c0392b}:host .wrapper.label-left,wm-datepicker .wrapper.label-left{-ms-flex-direction:row;flex-direction:row}:host .wrapper.label-left .label-wrapper,wm-datepicker .wrapper.label-left .label-wrapper{line-height:2.5rem}:host .wrapper.label-left .label-wrapper .label,wm-datepicker .wrapper.label-left .label-wrapper .label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:2.5rem;white-space:normal;margin-bottom:0;margin-right:0.75rem}:host .wrapper.label-none label,wm-datepicker .wrapper.label-none label{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;border:0 !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;white-space:nowrap !important;margin:-1px !important}:host .wrapper.invalid .label,wm-datepicker .wrapper.invalid .label{color:#c0392b}:host .wrapper.invalid .label:after,wm-datepicker .wrapper.invalid .label:after{display:inline-block;font:normal normal normal 24px/1 "Material Design Icons";font-size:inherit;text-rendering:auto;line-height:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\\f026";margin-left:0.3125rem}[dir=RTL] :host .wrapper.invalid .label:after,[dir=RTL] wm-datepicker .wrapper.invalid .label:after{margin-left:0;margin-right:0.3125rem}:host .wrapper.rtl.label-left .label,wm-datepicker .wrapper.rtl.label-left .label{margin-right:0;margin-left:0.75rem}:host .wrapper,wm-datepicker .wrapper{position:relative}:host .wrapper .required,wm-datepicker .wrapper .required{color:#c4431c}:host .wrapper .inner-wrapper,wm-datepicker .wrapper .inner-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;height:2.5rem;border:1px solid;border-color:rgba(35, 35, 35, 0.6);-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;border-radius:3px;max-width:236px;-ms-flex-pack:justify;justify-content:space-between;position:relative}:host .wrapper .inner-wrapper .date-input,wm-datepicker .wrapper .inner-wrapper .date-input{-moz-border-top-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-bottom-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;border:none;font-size:0.875rem;padding:0.625rem 0.9375rem 0.5rem;min-width:0;height:100%;-ms-flex:1;flex:1;margin:0}:host .wrapper .inner-wrapper .date-input:disabled,wm-datepicker .wrapper .inner-wrapper .date-input:disabled{background-color:#f0f0f0;color:#737373}:host .wrapper .inner-wrapper .date-input:focus,wm-datepicker .wrapper .inner-wrapper .date-input:focus{outline:none}:host .wrapper.invalid .inner-wrapper,wm-datepicker .wrapper.invalid .inner-wrapper{-webkit-box-shadow:0 0 0 1px #c0392b;-moz-box-shadow:0 0 0 1px #c0392b;box-shadow:0 0 0 1px #c0392b;border-color:#c0392b}:host .wrapper.invalid .error,wm-datepicker .wrapper.invalid .error{display:block;font-style:italic;color:#c0392b;font-size:0.875rem;margin-top:0.25rem;margin-bottom:4px;top:100%;left:0}:host .wrapper.focus .inner-wrapper,wm-datepicker .wrapper.focus .inner-wrapper{-webkit-box-shadow:0 0 0 1px #19a1a9;-moz-box-shadow:0 0 0 1px #19a1a9;box-shadow:0 0 0 1px #19a1a9;outline:none;border-color:#19a1a9}:host .user-is-tabbing .toggle:focus:not(:active),wm-datepicker .user-is-tabbing .toggle:focus:not(:active){border:none;z-index:11}';const d=class{constructor(i){e(this,i);this.wmDatepickerNewValidValue=t(this,"wmDatepickerNewValidValue",7);this.lastCommittedValue=this.value;this.parsableEntry=/^(\d{1}|\d{2}|\d{4})[\-\.\/]\d{1,2}[\-\.\/](\d{1}|\d{2}|\d{4})$/;this.isoEntry=/^\d\d\d\d[-]\d\d[-]\d\d$/;this.eightDigitsEntry=/^\d{8}$/;this.dateFormats={US:s.formatMessage({id:"date.formatUS",defaultMessage:"mm/dd/yyyy"}),INT:s.formatMessage({id:"date.formatINT",defaultMessage:"dd/mm/yyyy"}),ISO:s.formatMessage({id:"date.formatISO",defaultMessage:"yyyy/mm/dd"})};this.value="";this.disabled=false;this.dateFormat="US";this.errorMessage="";this.labelPosition="top";this.label="";this.requiredField=false;this.requiredFieldMessage=undefined;this.preventValidation=undefined;this.displayError=""}handleTabbingOn(){this.dpWrapper&&this.dpWrapper.classList.add("user-is-tabbing")}handleTabbingOff(){this.dpWrapper&&this.dpWrapper.classList.remove("user-is-tabbing")}handleError(){if(this.errorMessage){this.generateError()}else{this.clearError();this.processInput()}}handleInput(e){this.value=e.target.value}handleBlur(e){const t=this.preventValidation&&l(e,this.preventValidation);if(!t){this.processInput()}this.dpWrapper.classList.remove("focus")}focusHandler(){this.dpWrapper.classList.add("focus")}handlePopupBlurred(e){if(e.detail.relatedTarget!==this.el){const t=new CustomEvent("blur");t.relatedTarget=e.detail.relatedTarget;this.el.dispatchEvent(t)}}getActiveElement(){return o(document.activeElement)}handleCellTriggered(e){let t=e.detail;let i=t.getAttribute("data-year")+"-"+t.getAttribute("data-month")+"-"+t.textContent;this.inputEl.value=this.reformatDate(this.dateFormat,i);this.processInput();const r=new CustomEvent("input");this.el.dispatchEvent(r)}processInput(e){const t=!e&&this.requiredField;let i=this.inputEl.value;if(this.eightDigitsEntry.test(this.inputEl.value)){this.inputEl.value=this.addSlashes(this.inputEl.value)}if(this.parsableEntry.test(this.inputEl.value)){i=this.reformatDate("ISO",this.inputEl.value);this.inputEl.value=this.reformatDate(this.dateFormat,i);if(this.isValidDate(i)){if(this.errorMessage){this.generateError()}else{this.clearError()}}else if(this.inputEl.value.length){this.generateError()}}else if(this.inputEl.value.length||t||this.errorMessage){this.generateError()}else if(!this.inputEl.value.length&&!t){this.clearError()}this.value=i;if(i!==this.lastCommittedValue){const e=new CustomEvent("change");this.el.dispatchEvent(e);this.lastCommittedValue=this.value}if(this.isValidDate(i)&&i!==this.lastValidValue){this.wmDatepickerNewValidValue.emit();this.lastValidValue=i}}reformatDate(e,t){if(!t){return""}else if(!this.parsableEntry.test(t)){return t}else{let i=t.replace(/[\-\.]/gi,"/").split("/");switch(e){case"US":case this.dateFormats["US"]:return i[1].padStart(2,"0")+"/"+i[2].padStart(2,"0")+"/"+i[0].padStart(4,"20");case"INT":case this.dateFormats["INT"]:return i[2].padStart(2,"0")+"/"+i[1].padStart(2,"0")+"/"+i[0].padStart(4,"20");case"ISO":case this.dateFormats["ISO"]:if(this.dateFormat==="US"||this.dateFormat===this.dateFormats["US"]){return i[2].padStart(4,"20")+"-"+i[0].padStart(2,"0")+"-"+i[1].padStart(2,"0")}else if(this.dateFormat==="INT"||this.dateFormat===this.dateFormats["INT"]){return i[2].padStart(4,"20")+"-"+i[1].padStart(2,"0")+"-"+i[0].padStart(2,"0")}else if(this.dateFormat==="ISO"||this.dateFormat===this.dateFormats["ISO"]){return i[0].padStart(4,"20")+"-"+i[1].padStart(2,"0")+"-"+i[2].padStart(2,"0")}default:return i.join("/")}}}isValidDate(e){if(!e||!this.isoEntry.test(e)){return false}else{let t=e.split("-");let i=parseInt(t[2],10);let r=parseInt(t[1],10);let a=parseInt(t[0],10);if(a<1e3||a>3e3||r==0||r>12)return false;let s=[31,28,31,30,31,30,31,31,30,31,30,31];if(a%400==0||a%100!=0&&a%4==0)s[1]=29;return i>0&&i<=s[r-1]}}generateError(){const e=this.requiredFieldMessage||s.formatMessage({id:"date.requiredDateError",defaultMessage:"A date is required."});const t=s.formatMessage({id:"date.invalidDate",defaultMessage:"Please enter a valid date in the format {dateFormat, select, us {mm/dd/yyyy} int {dd/mm/yyyy} other {yyyy/mm/dd}}."},{dateFormat:this.dateFormat.toLowerCase()});if(this.errorMessage){this.displayError=this.errorMessage}else if(this.inputEl.value.length){this.displayError=t}else if(!this.inputEl.value.length&&this.requiredField){this.displayError=e}}clearError(){this.displayError=""}addSlashes(e){if(this.dateFormat==="ISO"||this.dateFormat===this.dateFormats["ISO"]){return e.substring(0,4)+"/"+e.substring(4,6)+"/"+e.substring(6)}else{return e.substring(0,2)+"/"+e.substring(2,4)+"/"+e.substring(4)}}componentWillLoad(){if(this.label===""){console.error("You must include a label prop for the datepicker input (for accessibility reasons), even if the label position is none.")}if(this.errorMessage){this.generateError()}this.uid=this.el.id?this.el.id:p();if(this.value&&this.isValidDate(this.value)){this.lastValidValue=this.value}}componentDidLoad(){this.inputEl.value=this.reformatDate(this.dateFormat,this.value);this.processInput(true)}render(){const e=s.formatMessage({id:"date.format",defaultMessage:"{dateFormat, select, us {mm/dd/yyyy} int {dd/mm/yyyy} other {yyyy/mm/dd}}"},{dateFormat:this.dateFormat.toLowerCase()});return i(r,{id:this.uid,"aria-busy":"false",class:`${this.displayError?"invalid":""}`,invalid:this.displayError?"true":null},i("div",{ref:e=>this.dpWrapper=e,class:`wrapper label-${this.labelPosition} ${this.displayError?"invalid":""}`},i("div",{class:"label-wrapper"},this.labelPosition!=="none"&&i("label",{id:`datepickerLabel-${this.uid}`,htmlFor:`date-input-${this.uid}`,class:"label",title:`${this.label} (${e})`},this.label,this.requiredField&&i("span",{"aria-hidden":"true",class:"required"},"*"))),i("div",null,i("div",{class:"inner-wrapper"},i("input",{disabled:this.disabled,type:"text",id:`date-input-${this.uid}`,class:"date-input",name:"date",placeholder:e,onFocus:this.focusHandler.bind(this),onInput:e=>this.handleInput(e),onBlur:e=>this.handleBlur(e),ref:e=>this.inputEl=e,"aria-describedby":`error-${this.uid}`,"aria-controls":`popup-${this.uid}`,"aria-label":this.label,"aria-required":this.requiredField?"true":null}),i("priv-datepicker",{disabled:this.disabled,date:this.lastValidValue?new Date(this.lastValidValue):new Date,parentId:this.uid})),i("div",{id:`error-${this.uid}`,class:"error","aria-live":"assertive","aria-atomic":"true"},this.displayError))))}static get delegatesFocus(){return true}get el(){return a(this)}static get watchers(){return{errorMessage:["handleError"]}}};d.style=n;export{d as wm_datepicker};
|
|
2
|
+
//# sourceMappingURL=p-002d067e.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["wmDatepickerCss","DatePicker","this","lastCommittedValue","value","parsableEntry","isoEntry","eightDigitsEntry","dateFormats","US","intl","formatMessage","id","defaultMessage","INT","ISO","handleTabbingOn","dpWrapper","classList","add","handleTabbingOff","remove","handleError","errorMessage","generateError","clearError","processInput","handleInput","ev","target","handleBlur","shouldPreventValidation","preventValidation","isRelatedTarget","focusHandler","handlePopupBlurred","detail","relatedTarget","el","event","CustomEvent","dispatchEvent","getActiveElement","checkForFocusableElInShadow","document","activeElement","handleCellTriggered","dateElement","isoDate","getAttribute","textContent","inputEl","reformatDate","dateFormat","isFirstLoad","leftEmpty","requiredField","test","addSlashes","isValidDate","length","lastValidValue","wmDatepickerNewValidValue","emit","toFormat","date","dateArr","replace","split","padStart","join","input","parts","day","parseInt","month","year","monthLength","requiredDateErr","requiredFieldMessage","validDateErr","toLowerCase","displayError","substring","componentWillLoad","label","console","error","uid","generateId","componentDidLoad","render","h","Host","class","invalid","ref","d","labelPosition","htmlFor","title","disabled","type","name","placeholder","onFocus","bind","onInput","onBlur","Date","parentId"],"sources":["./src/components/wm-datepicker/wm-datepicker.scss?tag=wm-datepicker&encapsulation=shadow","./src/components/wm-datepicker/wm-datepicker.tsx"],"sourcesContent":[":host,\nwm-datepicker {\n font-family: inherit;\n\n * {\n box-sizing: border-box;\n }\n\n @include label;\n\n .wrapper {\n position: relative;\n\n .required {\n color: $datepicker-required-input;\n }\n\n .inner-wrapper {\n @include displayFlex();\n align-items: center;\n height: rem-calc(40);\n border: 1px solid;\n border-color: $datepicker-input-border-color;\n @include border-radius(3px);\n max-width: 236px; /* input is 200px or smaller, button is 36px */\n justify-content: space-between;\n position: relative;\n\n .date-input {\n -moz-border-top-left-radius: 3px;\n -webkit-border-top-left-radius: 3px;\n border-top-left-radius: 3px;\n -moz-border-bottom-left-radius: 3px;\n -webkit-border-bottom-left-radius: 3px;\n border-bottom-left-radius: 3px;\n border: none;\n font-size: rem-calc(14);\n padding: rem-calc(10 15 8);\n min-width: 0;\n height: 100%;\n flex: 1;\n margin: 0;\n\n &:disabled {\n background-color: $input-disabled-bg;\n color: $input-disabled-color;\n }\n\n &:focus {\n outline: none;\n }\n }\n }\n\n &.invalid {\n .inner-wrapper {\n @include invalidBorder;\n }\n\n .error {\n @include errorMessage;\n margin-bottom: 4px;\n top: 100%;\n left: 0;\n }\n }\n\n &.focus {\n .inner-wrapper {\n @include field-focus;\n }\n }\n }\n\n .user-is-tabbing {\n .toggle:focus {\n &:not(:active) {\n border: none;\n z-index: 11;\n }\n }\n }\n}\n","import { h, Component, Host, Element, Event, EventEmitter, Prop, Listen, Watch, State } from \"@stencil/core\";\nimport { generateId, checkForFocusableElInShadow, intl, isRelatedTarget } from \"../../global/functions\";\n\n@Component({\n tag: \"wm-datepicker\",\n styleUrl: \"wm-datepicker.scss\",\n shadow: { delegatesFocus: true },\n})\nexport class DatePicker {\n @Element() el!: HTMLWmDatepickerElement;\n private dpWrapper!: HTMLDivElement;\n private inputEl!: HTMLInputElement;\n\n @Prop({ mutable: true }) value?: string = \"\";\n @Prop() disabled: boolean = false;\n @Prop({ mutable: true }) dateFormat: string = \"US\";\n @Prop({ reflect: true }) errorMessage: string = \"\";\n @Prop({ mutable: true }) labelPosition: \"top\" | \"left\" | \"none\" = \"top\";\n @Prop({ mutable: true }) label: string = \"\";\n @Prop() requiredField: boolean = false;\n @Prop() requiredFieldMessage?: string;\n @Prop() preventValidation?: string; // id or series of ids, validation will not occur when clicking an element with this id\n @State() displayError: string = \"\";\n @Event() wmDatepickerNewValidValue!: EventEmitter;\n\n // we only want to fire the \"change\" event if the value has actually changed (that's\n // how native elements do it), so we need to keep in state the last committed value.\n private lastCommittedValue?: string = this.value;\n private lastValidValue?: string;\n private uid!: string;\n\n // 1, 2, or 4 digits, separator, 1 or 2 digits, separator, then 1 or 2 or 4 digits\n private parsableEntry = /^(\\d{1}|\\d{2}|\\d{4})[\\-\\.\\/]\\d{1,2}[\\-\\.\\/](\\d{1}|\\d{2}|\\d{4})$/;\n private isoEntry = /^\\d\\d\\d\\d[-]\\d\\d[-]\\d\\d$/;\n private eightDigitsEntry = /^\\d{8}$/;\n\n dateFormats: any = {\n US: intl.formatMessage({\n id: \"date.formatUS\",\n defaultMessage: \"mm/dd/yyyy\",\n }),\n INT: intl.formatMessage({\n id: \"date.formatINT\",\n defaultMessage: \"dd/mm/yyyy\",\n }),\n ISO: intl.formatMessage({\n id: \"date.formatISO\",\n defaultMessage: \"yyyy/mm/dd\",\n }),\n };\n\n @Listen(\"keydown\")\n handleTabbingOn() {\n this.dpWrapper && this.dpWrapper.classList.add(\"user-is-tabbing\");\n }\n\n @Listen(\"click\")\n handleTabbingOff() {\n this.dpWrapper && this.dpWrapper.classList.remove(\"user-is-tabbing\");\n }\n\n @Watch(\"errorMessage\")\n handleError() {\n if (this.errorMessage) {\n this.generateError();\n } else {\n this.clearError();\n this.processInput();\n }\n }\n\n handleInput(ev: Event) {\n // keep component's value in sync with input's value\n // validation only happens on blur and initial load,\n // but component's value should reflect user input at any time\n this.value = (ev.target! as HTMLInputElement).value; // same as this.inputEl.value\n }\n\n // this is input blur, not component blur\n handleBlur(ev: FocusEvent) {\n // do not validate if clicking to an element that should prevent validation (e.g. close button on modal)\n const shouldPreventValidation = this.preventValidation && isRelatedTarget(ev, this.preventValidation);\n if (!shouldPreventValidation) {\n this.processInput();\n }\n this.dpWrapper.classList.remove(\"focus\");\n }\n\n // this is input focus, not component focus\n focusHandler() {\n this.dpWrapper.classList.add(\"focus\");\n }\n\n @Listen(\"popupBlurred\")\n handlePopupBlurred(ev: CustomEvent) {\n // emit blur event when leaving component from priv-datepicker\n if (ev.detail.relatedTarget !== this.el) {\n const event = new CustomEvent(\"blur\");\n // @ts-ignore\n event.relatedTarget = ev.detail.relatedTarget;\n this.el.dispatchEvent(event);\n }\n }\n\n getActiveElement() {\n return checkForFocusableElInShadow(document.activeElement as HTMLElement);\n }\n\n @Listen(\"cellTriggered\")\n handleCellTriggered(ev: CustomEvent) {\n let dateElement = ev.detail as HTMLTableCellElement;\n let isoDate =\n dateElement.getAttribute(\"data-year\")! +\n \"-\" +\n dateElement.getAttribute(\"data-month\")! +\n \"-\" +\n dateElement.textContent!;\n this.inputEl.value = this.reformatDate(this.dateFormat, isoDate);\n this.processInput();\n\n // Create event to trigger onInput function on host element, to get the updated value\n // Because there are more ways to input than just typing, we are firing this event upon cellTriggered\n const event = new CustomEvent(\"input\");\n this.el.dispatchEvent(event);\n }\n\n processInput(isFirstLoad?: boolean) {\n // The required field error should not display on first load\n const leftEmpty = !isFirstLoad && this.requiredField;\n\n let isoDate = this.inputEl.value;\n\n //If input is 8 digits, add slashes as a courtesy and process anyway\n if (this.eightDigitsEntry.test(this.inputEl.value)) {\n this.inputEl.value = this.addSlashes(this.inputEl.value);\n }\n\n // if we don't have 2 separators we can't reformat so we'll return what was passed in\n if (this.parsableEntry.test(this.inputEl.value)) {\n //ISO format for submission\n isoDate = this.reformatDate(\"ISO\", this.inputEl.value);\n\n //User-specific format for display\n this.inputEl.value = this.reformatDate(this.dateFormat, isoDate);\n\n if (this.isValidDate(isoDate)) {\n //If there's no errorMessage on state, all errors can be cleared. If there IS an error message, it will clear any internal validation errors by overriding them.\n if (this.errorMessage) {\n this.generateError();\n } else {\n this.clearError();\n }\n //Prevents error from appearing if input field is empty\n } else if (this.inputEl.value.length) {\n this.generateError();\n }\n } else if (this.inputEl.value.length || leftEmpty || this.errorMessage) {\n this.generateError();\n } else if (!this.inputEl.value.length && !leftEmpty) {\n this.clearError();\n }\n\n // value is set to the reformated date or whatever the user passed\n this.value = isoDate;\n\n if (isoDate !== this.lastCommittedValue) {\n const event = new CustomEvent(\"change\");\n this.el.dispatchEvent(event);\n this.lastCommittedValue = this.value;\n }\n\n // event must fire after we set this.value\n // only fire if new valid value is different from the previous one\n if (this.isValidDate(isoDate) && isoDate !== this.lastValidValue) {\n this.wmDatepickerNewValidValue.emit();\n //Update prop passed into calendar to valid date\n this.lastValidValue = isoDate;\n }\n }\n\n // this function reformats date strings to/from the storage format ONLY. US -> INT and vice versa is not supported.\n reformatDate(toFormat: string, date?: string): string {\n if (!date) {\n return \"\";\n } else if (!this.parsableEntry.test(date)) {\n return date;\n } else {\n let dateArr = date.replace(/[\\-\\.]/gi, \"/\").split(\"/\");\n switch (toFormat) {\n case \"US\":\n case this.dateFormats[\"US\"]:\n return dateArr[1].padStart(2, \"0\") + \"/\" + dateArr[2].padStart(2, \"0\") + \"/\" + dateArr[0].padStart(4, \"20\");\n case \"INT\":\n case this.dateFormats[\"INT\"]:\n return dateArr[2].padStart(2, \"0\") + \"/\" + dateArr[1].padStart(2, \"0\") + \"/\" + dateArr[0].padStart(4, \"20\");\n case \"ISO\":\n case this.dateFormats[\"ISO\"]:\n if (this.dateFormat === \"US\" || this.dateFormat === this.dateFormats[\"US\"]) {\n return dateArr[2].padStart(4, \"20\") + \"-\" + dateArr[0].padStart(2, \"0\") + \"-\" + dateArr[1].padStart(2, \"0\");\n } else if (this.dateFormat === \"INT\" || this.dateFormat === this.dateFormats[\"INT\"]) {\n return dateArr[2].padStart(4, \"20\") + \"-\" + dateArr[1].padStart(2, \"0\") + \"-\" + dateArr[0].padStart(2, \"0\");\n } else if (this.dateFormat === \"ISO\" || this.dateFormat === this.dateFormats[\"ISO\"]) {\n return dateArr[0].padStart(4, \"20\") + \"-\" + dateArr[1].padStart(2, \"0\") + \"-\" + dateArr[2].padStart(2, \"0\");\n }\n default:\n return dateArr.join(\"/\");\n }\n }\n }\n\n isValidDate(input?: string) {\n // if it's not ISO it's not valid\n if (!input || !this.isoEntry.test(input)) {\n return false;\n } else {\n // Parse the ISO date parts to integers\n let parts = input.split(\"-\");\n let day = parseInt(parts[2], 10);\n let month = parseInt(parts[1], 10);\n let year = parseInt(parts[0], 10);\n // Check the ranges of month and year\n if (year < 1000 || year > 3000 || month == 0 || month > 12) return false;\n let monthLength = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n // Adjust for leap years\n if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)) monthLength[1] = 29;\n // Check the range of the day\n return day > 0 && day <= monthLength[month - 1];\n }\n }\n\n generateError() {\n const requiredDateErr: string =\n this.requiredFieldMessage ||\n intl.formatMessage({\n id: \"date.requiredDateError\",\n defaultMessage: \"A date is required.\",\n });\n const validDateErr = intl.formatMessage(\n {\n id: \"date.invalidDate\",\n defaultMessage:\n \"Please enter a valid date in the format {dateFormat, select, us {mm/dd/yyyy} int {dd/mm/yyyy} other {yyyy/mm/dd}}.\",\n },\n { dateFormat: this.dateFormat.toLowerCase() }\n );\n if (this.errorMessage) {\n this.displayError = this.errorMessage;\n } else if (this.inputEl.value.length) {\n this.displayError = validDateErr;\n } else if (!this.inputEl.value.length && this.requiredField) {\n this.displayError = requiredDateErr;\n }\n }\n\n clearError() {\n this.displayError = \"\";\n }\n\n addSlashes(input: string) {\n if (this.dateFormat === \"ISO\" || this.dateFormat === this.dateFormats[\"ISO\"]) {\n return input.substring(0, 4) + \"/\" + input.substring(4, 6) + \"/\" + input.substring(6);\n } else {\n return input.substring(0, 2) + \"/\" + input.substring(2, 4) + \"/\" + input.substring(4);\n }\n }\n\n componentWillLoad() {\n if (this.label === \"\") {\n console.error(\n \"You must include a label prop for the datepicker input (for accessibility reasons), even if the label position is none.\"\n );\n }\n if (this.errorMessage) {\n this.generateError();\n }\n\n this.uid = this.el.id ? this.el.id : generateId();\n\n if (this.value && this.isValidDate(this.value)) {\n // update value passed into calendar so that it opens on the specified date\n this.lastValidValue = this.value;\n }\n }\n\n componentDidLoad() {\n // convert passed-in starting date from ISO to locale format, update displayed input to proper format\n this.inputEl.value = this.reformatDate(this.dateFormat, this.value);\n this.processInput(true);\n }\n\n render() {\n const dateFormat = intl.formatMessage(\n {\n id: \"date.format\",\n defaultMessage: \"{dateFormat, select, us {mm/dd/yyyy} int {dd/mm/yyyy} other {yyyy/mm/dd}}\",\n },\n { dateFormat: this.dateFormat.toLowerCase() }\n );\n return (\n <Host\n id={this.uid}\n aria-busy=\"false\"\n class={`${this.displayError ? \"invalid\" : \"\"}`}\n invalid={this.displayError ? \"true\" : null}\n >\n <div\n ref={(d) => (this.dpWrapper = d as HTMLDivElement)}\n class={`wrapper label-${this.labelPosition} ${this.displayError ? \"invalid\" : \"\"}`}\n >\n <div class=\"label-wrapper\">\n {this.labelPosition !== \"none\" && (\n <label\n id={`datepickerLabel-${this.uid}`}\n htmlFor={`date-input-${this.uid}`}\n class=\"label\"\n title={`${this.label} (${dateFormat})`}\n >\n {this.label}\n {this.requiredField && (\n <span aria-hidden=\"true\" class=\"required\">\n *\n </span>\n )}\n </label>\n )}\n </div>\n <div>\n <div class=\"inner-wrapper\">\n <input\n disabled={this.disabled}\n type=\"text\"\n id={`date-input-${this.uid}`}\n class=\"date-input\"\n name=\"date\"\n placeholder={dateFormat}\n onFocus={this.focusHandler.bind(this)}\n onInput={(ev) => this.handleInput(ev)}\n onBlur={(ev) => this.handleBlur(ev)}\n ref={(input) => (this.inputEl = input as HTMLInputElement)}\n aria-describedby={`error-${this.uid}`}\n aria-controls={`popup-${this.uid}`}\n aria-label={this.label}\n aria-required={this.requiredField ? \"true\" : null}\n />\n <priv-datepicker\n disabled={this.disabled}\n date={this.lastValidValue ? new Date(this.lastValidValue) : new Date()}\n parentId={this.uid}\n />\n </div>\n <div id={`error-${this.uid}`} class=\"error\" aria-live=\"assertive\" aria-atomic=\"true\">\n {this.displayError}\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as t,c as s,h as e,H as i,g as o}from"./p-1c23de4a.js";import{i as r}from"./p-c6a0f7e5.js";import{g as n}from"./p-9b2dfb54.js";const a=':host,wm-search{width:100%;font-size:0.875rem}:host *,wm-search *{-webkit-box-sizing:border-box;box-sizing:border-box}:host .wm-search-wrapper,wm-search .wm-search-wrapper{border-radius:3px;position:relative;border:1px solid rgba(35, 35, 35, 0.6);display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:center;align-items:center}:host .wm-search-wrapper .search-icon,wm-search .wm-search-wrapper .search-icon{display:inline-block;font:normal normal normal 24px/1 "Material Design Icons";font-size:inherit;text-rendering:auto;line-height:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:1.0625rem;position:absolute;left:0.4375rem}:host .wm-search-wrapper input,wm-search .wm-search-wrapper input{border:none;height:40px;padding:0 1.75rem;background:transparent;overflow:visible;width:100%;-ms-flex:1;flex:1;font-family:inherit}:host .wm-search-wrapper input:focus,wm-search .wm-search-wrapper input:focus{outline:none}:host .wm-search-wrapper.focus,wm-search .wm-search-wrapper.focus{-webkit-box-shadow:0 0 0 1px #19a1a9;-moz-box-shadow:0 0 0 1px #19a1a9;box-shadow:0 0 0 1px #19a1a9;outline:none;border-color:#19a1a9}:host .find,wm-search .find{min-height:3rem}:host .find input,wm-search .find input{padding:16px 8px 16px 28px}:host .find .wm-find-elements,wm-search .find .wm-find-elements{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:start;justify-content:flex-start;padding-right:16px}:host .find .wm-find-elements wm-button+wm-button,wm-search .find .wm-find-elements wm-button+wm-button{margin-left:0.25rem}:host .find .wm-find-elements .results,wm-search .find .wm-find-elements .results{margin-right:0.5rem;font-style:italic}:host .sr-only,wm-search .sr-only{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;border:0 !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;white-space:nowrap !important;margin:-1px !important}:host .show-for-tabbers,wm-search .show-for-tabbers{all:unset;color:#575195;text-decoration:none;font-weight:500;font-size:0.875rem;margin:10px 0}:host .show-for-tabbers:hover,wm-search .show-for-tabbers:hover{background:-webkit-gradient(linear, left top, left bottom, from(#575195), to(#575195)) no-repeat;background:linear-gradient(#575195, #575195) no-repeat;background-size:100% 1px;background-position:0 1.2em;padding-bottom:0.2em}:host .show-for-tabbers:focus,wm-search .show-for-tabbers:focus{outline:none;background:-webkit-gradient(linear, left top, right top, color-stop(66%, #3862e9), color-stop(0, transparent)) repeat-x;background:linear-gradient(90deg, #3862e9 66%, transparent 0) repeat-x;background-size:6px 3px;background-position:0 1.2em;padding-bottom:0.2em}';const h=class{constructor(e){t(this,e);this.wmSearchBrowseResults=s(this,"wmSearchBrowseResults",7);this.wmBrowseSearchResults=s(this,"wmBrowseSearchResults",7);this.wmSearchValueChanged=s(this,"wmSearchValueChanged",7);this.wrapperEl=null;this.linkEl=null;this.searchType="basic";this.disabled=false;this.placeholder="";this.label="";this.numResults=0;this.value="";this.isTabbing=false;this.highlightedId="";this.highlightedName=null;this.highlightedNum=0;this.previousBlurredValue="";this.parentModal=undefined;this.announcement=""}get resultCount(){let t="";const s=r.formatMessage({id:"search.resultsFound",defaultMessage:"{numResults, plural, =0 {No results} one {1 result} other {# results}} found"},{numResults:this.numResults});const e=r.formatMessage({id:"search.xOfYResults",defaultMessage:"{numResults, plural, =0 {No results found} other {{current} of {numResults} results}}"},{numResults:this.numResults,current:this.highlightedNum});if(this.searchType==="basic"){t=s}else if(this.searchType==="find"){t=e}return t}toggleTabbingOn(){this.isTabbing=true;this.linkEl&&this.linkEl.classList.remove("sr-only");this.linkEl&&this.linkEl.classList.add("show-for-tabbers")}toggleTabbingOff(){this.isTabbing=false;this.linkEl&&this.linkEl.classList.add("sr-only");this.linkEl&&this.linkEl.classList.remove("show-for-tabbers")}componentWillLoad(){if(this.placeholder===""){console.error("You must set the placeholder property for the wm-search component.")}if(this.label===""){console.error("You must set the label property for the wm-search component.")}this.hookToModal()}hookToModal(){let t=this.el;while(!!t){if(t.tagName==="WM-MODAL"){this.parentModal=t}t=t.parentElement}if(this.parentModal){const t=["wmCloseTriggered","wmPrimaryTriggered","wmSecondaryTriggered"];t.map((t=>{this.parentModal.addEventListener(t,(()=>{this.updateValue("")}))}))}}async updateValue(t){this.value=t;this.resetHighlightCountToStart();if(this.value){this.announceChanges()}}resetHighlightCountToStart(){if(this.searchType==="find"){this.highlightedNum=this.numResults?1:0}}announce(t){if(this.resultsLiveRegion.textContent===t){t+=" "}this.announcement=t}announceChanges(){window.requestAnimationFrame((()=>{let t=this.resultCount;if(this.searchType==="find"&&this.highlightedName){t+=`, ${this.highlightedName}`}this.announce(t)}))}changeHighlightedNum(t){if(this.numResults){if(t<1){this.highlightedNum=this.numResults}else if(t>this.numResults){this.highlightedNum=1}else{this.highlightedNum=t}this.wmSearchBrowseResults.emit({position:this.highlightedNum});this.wmBrowseSearchResults.emit({position:this.highlightedNum});this.announceChanges()}}addFocusStyle(){if(this.wrapperEl){this.wrapperEl.classList.add("focus")}}removeFocusStyle(){if(this.wrapperEl){this.wrapperEl.classList.remove("focus")}}handleBlur(){this.removeFocusStyle();if(this.previousBlurredValue!==this.value){this.wmSearchValueChanged.emit({value:this.value})}this.previousBlurredValue=this.value}renderResultsAndBrowseButtons(){return e("div",{class:"wm-find-elements"},e("div",{id:"results-display",class:"results"},this.resultCount),e("div",{class:"wm-button-collection"},e("wm-button",{"button-type":"icononly",icon:"f05d",tooltip:n.previous,"tooltip-position":"bottom",onClick:()=>this.changeHighlightedNum(this.highlightedNum-1),disabled:this.disabled||this.numResults<2,"label-for-identical-buttons":r.formatMessage({id:"search.previousResult",defaultMessage:"Press to hear previous matching result"})}),e("wm-button",{"button-type":"icononly",icon:"f045",tooltip:n.next,"tooltip-position":"bottom",onClick:()=>this.changeHighlightedNum(this.highlightedNum+1),disabled:this.disabled||this.numResults<2,"label-for-identical-buttons":r.formatMessage({id:"search.nextResult",defaultMessage:"Press to hear next matching result"})})))}renderJumpToLink(){if(this.numResults&&this.highlightedId){return e("a",{ref:t=>this.linkEl=t,href:`#${this.highlightedId}`,class:"sr-only"},r.formatMessage({id:"search.jumpToResult",defaultMessage:"Jump to search result in list"}))}else{return null}}render(){return e(i,null,e("div",{id:"wm-search-wrapper",class:`wm-search-wrapper ${this.searchType}`,ref:t=>this.wrapperEl=t},e("input",{disabled:this.disabled,id:"wm-search-input",placeholder:this.placeholder,"aria-label":`${this.label?this.label+". ":""}${r.formatMessage({id:"search.typeToFilterResults",defaultMessage:"Type to filter the results"})}`,onInput:t=>this.updateValue(t.target.value),onFocus:()=>this.addFocusStyle(),onBlur:()=>this.handleBlur(),"aria-autocomplete":"none",autocomplete:"off",value:this.value}),e("span",{class:"mdi search-icon"},String.fromCodePoint(parseInt(`0xf349`))),this.searchType==="find"&&this.renderResultsAndBrowseButtons(),e("div",{id:"wm-search-live",class:"sr-only","aria-live":"polite","aria-atomic":"true",ref:t=>this.resultsLiveRegion=t},this.announcement)),this.searchType==="find"&&this.renderJumpToLink())}static get delegatesFocus(){return true}get el(){return o(this)}static get watchers(){return{numResults:["resetHighlightCountToStart"]}}};h.style=a;export{h as wm_search};
|
|
2
|
+
//# sourceMappingURL=p-02a1000a.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["wmSearchCss","Search","this","wrapperEl","linkEl","resultCount","message","basicMessage","intl","formatMessage","id","defaultMessage","numResults","findMessage","current","highlightedNum","searchType","toggleTabbingOn","isTabbing","classList","remove","add","toggleTabbingOff","componentWillLoad","placeholder","console","error","label","hookToModal","el","tagName","parentModal","parentElement","events","map","event","addEventListener","updateValue","async","value","resetHighlightCountToStart","announceChanges","announce","resultsLiveRegion","textContent","announcement","window","requestAnimationFrame","messageToAnnounce","highlightedName","changeHighlightedNum","newNum","wmSearchBrowseResults","emit","position","wmBrowseSearchResults","addFocusStyle","removeFocusStyle","handleBlur","previousBlurredValue","wmSearchValueChanged","renderResultsAndBrowseButtons","h","class","icon","tooltip","globalMessages","previous","onClick","disabled","next","renderJumpToLink","highlightedId","ref","href","render","Host","onInput","ev","target","onFocus","onBlur","autocomplete","String","fromCodePoint","parseInt"],"sources":["./src/components/wm-search/wm-search.scss?tag=wm-search&encapsulation=shadow","./src/components/wm-search/wm-search.tsx"],"sourcesContent":[":host,\nwm-search {\n * {\n box-sizing: border-box;\n }\n width: 100%;\n font-size: rem-calc(14);\n\n .wm-search-wrapper {\n border-radius: 3px;\n position: relative;\n border: 1px solid rgba(35, 35, 35, 0.6);\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n .search-icon {\n @include mdi-icon;\n font-size: rem-calc(17);\n position: absolute;\n left: rem-calc(7);\n }\n\n input {\n border: none;\n height: 40px;\n padding: rem-calc(0 28);\n background: transparent;\n overflow: visible;\n width: 100%;\n flex: 1;\n font-family: inherit;\n\n &:focus {\n outline: none;\n }\n }\n\n &.focus {\n @include field-focus;\n }\n }\n\n .find {\n min-height: 3rem;\n\n input {\n padding: 16px 8px 16px 28px;\n }\n\n .wm-find-elements {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding-right: 16px;\n wm-button + wm-button {\n margin-left: rem-calc(4);\n }\n\n .results {\n margin-right: rem-calc(8);\n font-style: italic;\n }\n }\n }\n\n .sr-only {\n @include srOnly;\n }\n\n .show-for-tabbers {\n all: unset;\n color: #575195;\n text-decoration: none;\n font-weight: 500;\n font-size: rem-calc(14);\n margin: 10px 0;\n\n &:hover {\n background: linear-gradient(#575195, #575195) no-repeat;\n background-size: 100% 1px;\n background-position: 0 1.2em;\n padding-bottom: 0.2em;\n }\n\n &:focus {\n outline: none;\n background: linear-gradient(90deg, #3862e9 66%, transparent 0) repeat-x;\n background-size: 6px 3px;\n background-position: 0 1.2em;\n padding-bottom: 0.2em;\n }\n }\n}\n","import { h, Component, Element, Prop, Watch, Host, Method, Listen, State, Event, EventEmitter } from \"@stencil/core\";\nimport { intl } from \"../../global/functions\";\nimport { globalMessages } from \"../../global/intl\";\n\n@Component({\n tag: \"wm-search\",\n styleUrl: \"wm-search.scss\",\n shadow: { delegatesFocus: true },\n})\nexport class Search {\n @Element() el!: HTMLWmSearchElement;\n @Prop({ mutable: true }) searchType: \"basic\" | \"find\" = \"basic\";\n @Prop({ reflect: true }) disabled: boolean = false;\n\n /**\n * Props required for both variants.\n */\n @Prop() placeholder: string = \"\";\n @Prop() label: string = \"\";\n @Prop({ mutable: true }) numResults: number = 0;\n\n /**\n * This exposes the input's value on the host component so that the app can access it.\n */\n @Prop({ mutable: true, reflect: true }) value: string = \"\";\n\n /**\n * If the user is tabbing, the search and find variant will display a link to jump to a search result.\n */\n @State() isTabbing: boolean = false;\n\n /**\n * Prop specifically for the search and find variant. The id points to the id of the option currently highlighted,\n * so that tabbing and screen reader users can jump to this option rather than tab through the list to find it.\n */\n @Prop() highlightedId: string = \"\";\n @Prop() highlightedName: string | null = null;\n\n /**\n * Indicates which of the search results is currently highlighted. It will be displayed as \"[highlightedNum] of [numResults]\" next to the input in the search and find variant.\n * This number updates as the user browses using the buttons.\n */\n @State() highlightedNum: number = 0;\n\n @State() previousBlurredValue: string = \"\";\n @State() parentModal?: HTMLWmModalElement;\n\n /**\n * Live region announcement\n */\n @State() announcement: string = \"\";\n\n get resultCount(): string {\n let message = \"\";\n const basicMessage = intl.formatMessage(\n {\n id: \"search.resultsFound\",\n defaultMessage: \"{numResults, plural, =0 {No results} one {1 result} other {# results}} found\",\n },\n { numResults: this.numResults }\n );\n const findMessage = intl.formatMessage(\n {\n id: \"search.xOfYResults\",\n defaultMessage: \"{numResults, plural, =0 {No results found} other {{current} of {numResults} results}}\",\n },\n { numResults: this.numResults, current: this.highlightedNum }\n );\n\n if (this.searchType === \"basic\") {\n message = basicMessage;\n } else if (this.searchType === \"find\") {\n message = findMessage;\n }\n\n return message;\n }\n\n /**\n * Emitted when the buttons in the search-and-find variant are pressed.\n */\n @Event() wmSearchBrowseResults!: EventEmitter<{ position: number }>;\n @Event() wmBrowseSearchResults!: EventEmitter<{ position: number }>; // deprecated in favor of wmSearchBrowseResults\n @Event() wmSearchValueChanged!: EventEmitter<{ value: string }>;\n\n /**\n * Element refs\n */\n private resultsLiveRegion!: HTMLElement;\n private wrapperEl: HTMLElement | null = null;\n private linkEl: HTMLElement | null = null;\n\n @Listen(\"wmUserIsTabbing\", { target: \"window\" })\n toggleTabbingOn() {\n this.isTabbing = true;\n this.linkEl && this.linkEl.classList.remove(\"sr-only\");\n this.linkEl && this.linkEl.classList.add(\"show-for-tabbers\");\n }\n\n @Listen(\"wmUserIsNotTabbing\", { target: \"window\" })\n toggleTabbingOff() {\n this.isTabbing = false;\n this.linkEl && this.linkEl.classList.add(\"sr-only\");\n this.linkEl && this.linkEl.classList.remove(\"show-for-tabbers\");\n }\n\n componentWillLoad() {\n if (this.placeholder === \"\") {\n console.error(\"You must set the placeholder property for the wm-search component.\");\n }\n\n if (this.label === \"\") {\n console.error(\"You must set the label property for the wm-search component.\");\n }\n this.hookToModal();\n }\n\n hookToModal() {\n // if the search is in a modal we want to clear the input when the modal closes\n let el = this.el as any;\n while (!!el) {\n if (el.tagName === \"WM-MODAL\") {\n this.parentModal = el as HTMLWmModalElement;\n }\n el = el.parentElement as HTMLElement;\n }\n\n if (this.parentModal) {\n const events = [\"wmCloseTriggered\", \"wmPrimaryTriggered\", \"wmSecondaryTriggered\"];\n events.map((event) => {\n this.parentModal!.addEventListener(event, () => {\n this.updateValue(\"\");\n });\n });\n }\n }\n\n // this undocumented method is needed in hookToModal (needs to be exposed so we can set the callback func)\n @Method()\n async updateValue(value: string) {\n this.value = value;\n\n //For search-and-find, the results should always restart at \"[1 or 0] of ...\" after any new input.\n //Reset the highlight count here just in case the new value doesn't end up changing the number of results.\n this.resetHighlightCountToStart();\n\n if (this.value) {\n this.announceChanges();\n }\n }\n\n @Watch(\"numResults\")\n resetHighlightCountToStart(): void {\n if (this.searchType === \"find\") {\n this.highlightedNum = this.numResults ? 1 : 0;\n }\n }\n\n announce(message: string) {\n if (this.resultsLiveRegion!.textContent === message) {\n message += \"\\u00A0\";\n }\n this.announcement = message;\n }\n\n announceChanges() {\n window.requestAnimationFrame(() => {\n // requestAnimationFrame to allow all changes to occur before announcing results\n let messageToAnnounce = this.resultCount;\n\n // if a result is found, also include it after the liveregion message\n if (this.searchType === \"find\" && this.highlightedName) {\n messageToAnnounce += `, ${this.highlightedName}`;\n }\n\n this.announce(messageToAnnounce);\n });\n }\n\n changeHighlightedNum(newNum: number): void {\n if (this.numResults) {\n if (newNum < 1) {\n // we were on the first item, going down: go to last item\n this.highlightedNum = this.numResults;\n } else if (newNum > this.numResults) {\n // we were on the last item, going up: go to first item\n this.highlightedNum = 1;\n } else {\n this.highlightedNum = newNum;\n }\n\n this.wmSearchBrowseResults.emit({ position: this.highlightedNum });\n this.wmBrowseSearchResults.emit({ position: this.highlightedNum });\n this.announceChanges();\n }\n }\n\n addFocusStyle() {\n if (this.wrapperEl) {\n this.wrapperEl.classList.add(\"focus\");\n }\n }\n\n removeFocusStyle() {\n if (this.wrapperEl) {\n this.wrapperEl.classList.remove(\"focus\");\n }\n }\n\n handleBlur() {\n this.removeFocusStyle();\n if (this.previousBlurredValue !== this.value) {\n this.wmSearchValueChanged.emit({ value: this.value });\n }\n this.previousBlurredValue = this.value;\n }\n\n /**\n * Functions that return elements specifically for search-and-find.\n */\n renderResultsAndBrowseButtons(): HTMLDivElement {\n return (\n <div class=\"wm-find-elements\">\n <div id=\"results-display\" class=\"results\">\n {this.resultCount}\n </div>\n <div class=\"wm-button-collection\">\n <wm-button\n button-type=\"icononly\"\n icon=\"f05d\"\n tooltip={globalMessages.previous}\n tooltip-position=\"bottom\"\n onClick={() => this.changeHighlightedNum(this.highlightedNum - 1)}\n disabled={this.disabled || this.numResults < 2}\n label-for-identical-buttons={intl.formatMessage({\n id: \"search.previousResult\",\n defaultMessage: \"Press to hear previous matching result\",\n })}\n />\n <wm-button\n button-type=\"icononly\"\n icon=\"f045\"\n tooltip={globalMessages.next}\n tooltip-position=\"bottom\"\n onClick={() => this.changeHighlightedNum(this.highlightedNum + 1)}\n disabled={this.disabled || this.numResults < 2}\n label-for-identical-buttons={intl.formatMessage({\n id: \"search.nextResult\",\n defaultMessage: \"Press to hear next matching result\",\n })}\n />\n </div>\n </div>\n );\n }\n\n renderJumpToLink(): HTMLAnchorElement | null {\n if (this.numResults && this.highlightedId) {\n return (\n <a ref={(el) => (this.linkEl = el as HTMLAnchorElement)} href={`#${this.highlightedId}`} class=\"sr-only\">\n {intl.formatMessage({\n id: \"search.jumpToResult\",\n defaultMessage: \"Jump to search result in list\",\n })}\n </a>\n );\n } else {\n return null;\n }\n }\n /**\n * End search and find render helpers\n */\n\n render() {\n return (\n <Host>\n <div\n id=\"wm-search-wrapper\"\n class={`wm-search-wrapper ${this.searchType}`}\n ref={(el) => (this.wrapperEl = el as HTMLDivElement)}\n >\n <input\n disabled={this.disabled}\n id=\"wm-search-input\"\n placeholder={this.placeholder}\n aria-label={`${this.label ? this.label + \". \" : \"\"}${intl.formatMessage({\n id: \"search.typeToFilterResults\",\n defaultMessage: \"Type to filter the results\",\n })}`}\n onInput={(ev: Event) => this.updateValue((ev.target as HTMLInputElement).value)}\n onFocus={() => this.addFocusStyle()}\n onBlur={() => this.handleBlur()}\n aria-autocomplete=\"none\"\n autocomplete=\"off\"\n value={this.value}\n />\n <span class=\"mdi search-icon\">{String.fromCodePoint(parseInt(`0xf349`))}</span>\n {this.searchType === \"find\" && this.renderResultsAndBrowseButtons()}\n <div\n id=\"wm-search-live\"\n class=\"sr-only\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n ref={(el) => (this.resultsLiveRegion = el as HTMLElement)}\n >\n {this.announcement}\n </div>\n </div>\n {this.searchType === \"find\" && this.renderJumpToLink()}\n </Host>\n );\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var __awaiter=this&&this.__awaiter||function(t,e,r,n){function o(t){return t instanceof r?t:new r((function(e){e(t)}))}return new(r||(r=Promise))((function(r,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n["throw"](t))}catch(t){i(t)}}function u(t){t.done?r(t.value):o(t.value).then(s,a)}u((n=n.apply(t,e||[])).next())}))};var __generator=this&&this.__generator||function(t,e){var r={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},n,o,i,s;return s={next:a(0),throw:a(1),return:a(2)},typeof Symbol==="function"&&(s[Symbol.iterator]=function(){return this}),s;function a(t){return function(e){return u([t,e])}}function u(a){if(n)throw new TypeError("Generator is already executing.");while(s&&(s=0,a[0]&&(r=0)),r)try{if(n=1,o&&(i=a[0]&2?o["return"]:a[0]?o["throw"]||((i=o["return"])&&i.call(o),0):o.next)&&!(i=i.call(o,a[1])).done)return i;if(o=0,i)a=[a[0]&2,i.value];switch(a[0]){case 0:case 1:i=a;break;case 4:r.label++;return{value:a[1],done:false};case 5:r.label++;o=a[1];a=[0];continue;case 7:a=r.ops.pop();r.trys.pop();continue;default:if(!(i=r.trys,i=i.length>0&&i[i.length-1])&&(a[0]===6||a[0]===2)){r=0;continue}if(a[0]===3&&(!i||a[1]>i[0]&&a[1]<i[3])){r.label=a[1];break}if(a[0]===6&&r.label<i[1]){r.label=i[1];i=a;break}if(i&&r.label<i[2]){r.label=i[2];r.ops.push(a);break}if(i[2])r.ops.pop();r.trys.pop();continue}a=e.call(t,r)}catch(t){a=[6,t];o=0}finally{n=i=0}if(a[0]&5)throw a[1];return{value:a[0]?a[1]:void 0,done:true}}};System.register(["./p-7b2fc615.system.js","./p-f5df5903.system.js","./p-bc28c815.system.js","./p-9d02957d.system.js"],(function(t){"use strict";var e,r,n,o,i,s,a,u,c,l;return{setters:[function(t){e=t.r;r=t.c;n=t.h;o=t.H;i=t.g},function(t){s=t.a},function(t){a=t.k;u=t.l;c=t.i},function(t){l=t.g}],execute:function(){var p=":host,wm-navigator{min-width:0;position:relative;display:inline-block}:host .wrapper,wm-navigator .wrapper{overflow:auto;font-size:1.125rem;min-width:13.125rem;width:auto;max-height:80vh;text-align:left;position:absolute;z-index:50;top:100%;right:20px;left:auto;background:#fff;letter-spacing:normal;-webkit-box-shadow:0 4px 15px 0 rgba(0, 0, 0, 0.2);-moz-box-shadow:0 4px 15px 0 rgba(0, 0, 0, 0.2);box-shadow:0 4px 15px 0 rgba(0, 0, 0, 0.2);-ms-transition:transform 0.25s ease;-webkit-transition:transform 0.25s ease;-moz-transition:transform 0.25s ease;-webkit-transition:-webkit-transform 0.25s ease;transition:-webkit-transform 0.25s ease;transition:transform 0.25s ease;transition:transform 0.25s ease, -webkit-transform 0.25s ease;-ms-transform-origin:center top;-webkit-transform-origin:center top;-moz-transform-origin:center top;transform-origin:center top;-ms-transform:scale(1, 1);-webkit-transform:scale(1, 1);-moz-transform:scale(1, 1);transform:scale(1, 1)}:host .wrapper .user,wm-navigator .wrapper .user{background:#f4f4f4;padding:0.625rem 1.25rem;font-size:0.875rem}:host .wrapper .user p,wm-navigator .wrapper .user p{margin:0}:host .wrapper .user p:first-child,wm-navigator .wrapper .user p:first-child{font-weight:700;text-transform:capitalize}:host .wrapper h2,wm-navigator .wrapper h2{background:#2e1b46;color:#fff;font-weight:700;margin:0;padding:0.625rem 1.25rem;font-size:0.875rem}:host .wrapper [role=listbox],wm-navigator .wrapper [role=listbox]{list-style:none;margin:0;padding-left:0}:host .wrapper.hide,wm-navigator .wrapper.hide{-ms-transform:scale(1, 0);-webkit-transform:scale(1, 0);-moz-transform:scale(1, 0);transform:scale(1, 0)}:host .wrapper.right,wm-navigator .wrapper.right{right:auto;left:20px}:host img,wm-navigator img{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transform-origin:left center;transform-origin:left center;display:block}:host .logout,wm-navigator .logout{text-align:center;text-transform:capitalize}priv-navigator-item:focus{outline:none}";var f=t("wm_navigator",function(){function t(t){e(this,t);this.wmNavigatorLogout=r(this,"wmNavigatorLogout",7);this.retrievedInfo=!this.loadFromUserinfo;this.parsedProducts=[];this.openRight=false;this.userName=undefined;this.email=undefined;this.authType=1;this.connectionName=undefined;this.logoutUrl=undefined;this.products=undefined;this.loadFromUserinfo=false;this.isOpen=false;this.isTabbing=false;this.itemIndexToFocus=0}t.prototype.componentWillLoad=function(){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(t){switch(t.label){case 0:if(!this.userName){console.error("wm-navigator: user-name is a required property.")}return[4,this.parseData()];case 1:t.sent();this.setFocusIndex();return[2]}}))}))};t.prototype.parseData=function(){return __awaiter(this,void 0,void 0,(function(){var t=this;return __generator(this,(function(e){switch(e.label){case 0:if(!!!this.loadFromUserinfo)return[3,2];return[4,l("/platform/navigator/userinfo").then((function(e){t.email=e.email;t.currentProductId=e.current_product_id;t.parsedProducts=t.productKeysToCamelCase(e.products);t.logoutUrl=t.logoutUrl?t.logoutUrl:e.logout_url;t.connectionName=t.connectionName?t.connectionName:e.connection_name;if(!!t.email&&!!t.currentProductId){t.retrievedInfo=true}})).catch((function(t){console.error(t)}))];case 1:e.sent();return[3,3];case 2:this.currentProductId=s(this.el);if(!!this.products){if(typeof this.products==="string"){this.parsedProducts=JSON.parse(this.products)}else{this.parsedProducts=this.products}this.parsedProducts=this.productKeysToCamelCase(this.parsedProducts)}e.label=3;case 3:this.parsedProducts.sort((function(t,e){return t.name<e.name?-1:1}));return[2]}}))}))};t.prototype.productKeysToCamelCase=function(t){t=t.map((function(t){var e=Object.keys(t);var r={};e.forEach((function(e){r[a(e)]=t[e]}));return r}));return t};t.prototype.setFocusIndex=function(){if(this.parsedProducts.length>1){var t=this.getProduct(this.currentProductId);if(t){this.itemIndexToFocus=this.parsedProducts.indexOf(t)}}};t.prototype.toggleTabbingOn=function(){this.isTabbing=true};t.prototype.toggleTabbingOff=function(){this.isTabbing=false};t.prototype.handleKeys=function(t){switch(t.key){case"Escape":t.preventDefault();this.closeMenu();break;case"ArrowDown":case"ArrowUp":t.preventDefault();if(!this.isOpen){this.itemIndexToFocus=u(this.itemIndexToFocus,t.key,this.navigatorItems.length);this.openMenu()}break}};t.prototype.handleKeydown=function(t){var e=t.detail.key;var r=t.detail.navItem;switch(e){case"Tab":this.closeMenu();break;case"Enter":case" ":r.click();break;case"ArrowDown":case"ArrowUp":var n=this.itemIndexToFocus;this.itemIndexToFocus=u(this.itemIndexToFocus,e,this.navigatorItems.length);this.focusItem();this.unfocusItem(n);break}};t.prototype.handleClick=function(t){var e=t.target===this.el||this.el.contains(t.target);if(!e&&this.isOpen){this.closeMenu()}};t.prototype.handleButtonClick=function(){this.isOpen?this.closeMenu():this.openMenu()};t.prototype.openMenu=function(){if(this.wrapperEl){var t=this.wrapperEl.clientWidth;var e=this.el.getBoundingClientRect().left;var r=document.documentElement.clientWidth-this.el.getBoundingClientRect().right;this.openRight=t>e&&r>e}this.isOpen=true;this.focusItem()};t.prototype.closeMenu=function(){this.isOpen=false;this.buttonFocusHandler();this.unfocusItem(this.itemIndexToFocus);this.setFocusIndex()};t.prototype.focusItem=function(){var t=this.navigatorItems[this.itemIndexToFocus];t.tabIndex=0;t.focused=true;window.requestAnimationFrame((function(){return t.focus()}))};t.prototype.unfocusItem=function(t){var e=this.navigatorItems[t];e.tabIndex=-1;e.focused=false};t.prototype.buttonFocusHandler=function(){var t=this.el.shadowRoot.querySelector("priv-navigator-button");var e=t.shadowRoot.querySelector("button");window.requestAnimationFrame((function(){return e.focus()}))};t.prototype.renderUserInfo=function(){return n("div",{class:"user",id:"wm-nav-user","aria-label":c.formatMessage({id:"navigator.userinfoLabel",defaultMessage:"for {name}, email {email}"},{name:this.userName,email:this.email})},n("p",null,this.userName),n("p",null,this.email))};t.prototype.setAltText=function(){if(this.parsedProducts.length>1){return c.formatMessage({id:"navigator.userinfoAndProductNavigator",defaultMessage:"User information and product navigator"})}else{return c.formatMessage({id:"navigator.userinfo",defaultMessage:"User information"})}};t.prototype.renderHeading=function(){return n("h2",null,c.formatMessage({id:"navigator.watermarkApps",defaultMessage:"Watermark Apps",description:"Applications made by Watermark Insights"}))};t.prototype.renderList=function(){return n("ul",{role:"listbox","aria-label":"".concat(c.formatMessage({id:"navigator.WatermarkAppNavigation",defaultMessage:"Watermark App Navigation",description:"list of applications by Watermark Insights"})),"aria-describedby":"wm-nav-user"},this.parsedProducts.length>1&&this.renderProductOptions(),this.renderLogoutOption())};t.prototype.renderProductOptions=function(){var t=this;return this.parsedProducts.map((function(e){var r,o,i,s;r=e.name;o=e.iconUrl;s=t.setProductOnClick(e.id);if(!!r&&!!o){i=t.currentProductId===e.id;return n("priv-navigator-item",{selected:i,id:e.id,onClick:s,role:"option","aria-label":r},n("img",{src:o,alt:r}))}}))};t.prototype.setProductOnClick=function(t){var e=this.getProduct(t);if(this.currentProductId===t){return function(){}}else if(e){if(!!this.loadFromUserinfo||this.authType===2){return function(){return window.location.href=e.linkUrl}}else if(this.authType===3){var r=this.connectionName?"/?connection_name=".concat(this.connectionName):"";return function(){return window.location.href=e.samlLinkUrl+r}}}};t.prototype.renderLogoutOption=function(){return n("priv-navigator-item",{class:"logout",selected:!(this.parsedProducts.length>1),id:"nav-logout",onClick:this.setLogoutOnclick(),role:"option"},n("span",{class:"logout"},c.formatMessage({id:"navigator.logout",defaultMessage:"Log Out"})))};t.prototype.setLogoutOnclick=function(){var t=this;return function(){t.wmNavigatorLogout.emit();if(t.logoutUrl){window.location.href=t.logoutUrl}}};Object.defineProperty(t.prototype,"navigatorItems",{get:function(){return Array.from(this.el.shadowRoot.querySelectorAll("priv-navigator-item"))},enumerable:false,configurable:true});t.prototype.getProduct=function(t){return this.parsedProducts.find((function(e){return e.id===t}))};t.prototype.render=function(){var t=this;return this.retrievedInfo?n(o,{class:this.isTabbing?"user-is-tabbing":""},n("priv-navigator-button",{expanded:this.isOpen,altText:this.setAltText(),isTabbing:this.isTabbing}),n("div",{class:"wrapper ".concat(this.isOpen?"":"hide"," ").concat(this.openRight?"right":""),ref:function(e){return t.wrapperEl=e}},this.renderUserInfo(),this.parsedProducts.length>1&&this.renderHeading(),this.renderList())):""};Object.defineProperty(t,"delegatesFocus",{get:function(){return true},enumerable:false,configurable:true});Object.defineProperty(t.prototype,"el",{get:function(){return i(this)},enumerable:false,configurable:true});Object.defineProperty(t,"watchers",{get:function(){return{products:["parseData"]}},enumerable:false,configurable:true});return t}());f.style=p}}}));
|
|
2
|
-
//# sourceMappingURL=p-
|
|
1
|
+
var __awaiter=this&&this.__awaiter||function(t,e,r,n){function o(t){return t instanceof r?t:new r((function(e){e(t)}))}return new(r||(r=Promise))((function(r,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n["throw"](t))}catch(t){i(t)}}function u(t){t.done?r(t.value):o(t.value).then(s,a)}u((n=n.apply(t,e||[])).next())}))};var __generator=this&&this.__generator||function(t,e){var r={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},n,o,i,s;return s={next:a(0),throw:a(1),return:a(2)},typeof Symbol==="function"&&(s[Symbol.iterator]=function(){return this}),s;function a(t){return function(e){return u([t,e])}}function u(a){if(n)throw new TypeError("Generator is already executing.");while(s&&(s=0,a[0]&&(r=0)),r)try{if(n=1,o&&(i=a[0]&2?o["return"]:a[0]?o["throw"]||((i=o["return"])&&i.call(o),0):o.next)&&!(i=i.call(o,a[1])).done)return i;if(o=0,i)a=[a[0]&2,i.value];switch(a[0]){case 0:case 1:i=a;break;case 4:r.label++;return{value:a[1],done:false};case 5:r.label++;o=a[1];a=[0];continue;case 7:a=r.ops.pop();r.trys.pop();continue;default:if(!(i=r.trys,i=i.length>0&&i[i.length-1])&&(a[0]===6||a[0]===2)){r=0;continue}if(a[0]===3&&(!i||a[1]>i[0]&&a[1]<i[3])){r.label=a[1];break}if(a[0]===6&&r.label<i[1]){r.label=i[1];i=a;break}if(i&&r.label<i[2]){r.label=i[2];r.ops.push(a);break}if(i[2])r.ops.pop();r.trys.pop();continue}a=e.call(t,r)}catch(t){a=[6,t];o=0}finally{n=i=0}if(a[0]&5)throw a[1];return{value:a[0]?a[1]:void 0,done:true}}};System.register(["./p-7b2fc615.system.js","./p-08b7ec08.system.js","./p-f0fd8695.system.js","./p-313b6073.system.js"],(function(t){"use strict";var e,r,n,o,i,s,a,u,c,l;return{setters:[function(t){e=t.r;r=t.c;n=t.h;o=t.H;i=t.g},function(t){s=t.a},function(t){a=t.k;u=t.l;c=t.i},function(t){l=t.g}],execute:function(){var p=":host,wm-navigator{min-width:0;position:relative;display:inline-block}:host .wrapper,wm-navigator .wrapper{overflow:auto;font-size:1.125rem;min-width:13.125rem;width:auto;max-height:80vh;text-align:left;position:absolute;z-index:50;top:100%;right:20px;left:auto;background:#fff;letter-spacing:normal;-webkit-box-shadow:0 4px 15px 0 rgba(0, 0, 0, 0.2);-moz-box-shadow:0 4px 15px 0 rgba(0, 0, 0, 0.2);box-shadow:0 4px 15px 0 rgba(0, 0, 0, 0.2);-ms-transition:transform 0.25s ease;-webkit-transition:transform 0.25s ease;-moz-transition:transform 0.25s ease;-webkit-transition:-webkit-transform 0.25s ease;transition:-webkit-transform 0.25s ease;transition:transform 0.25s ease;transition:transform 0.25s ease, -webkit-transform 0.25s ease;-ms-transform-origin:center top;-webkit-transform-origin:center top;-moz-transform-origin:center top;transform-origin:center top;-ms-transform:scale(1, 1);-webkit-transform:scale(1, 1);-moz-transform:scale(1, 1);transform:scale(1, 1)}:host .wrapper .user,wm-navigator .wrapper .user{background:#f4f4f4;padding:0.625rem 1.25rem;font-size:0.875rem}:host .wrapper .user p,wm-navigator .wrapper .user p{margin:0}:host .wrapper .user p:first-child,wm-navigator .wrapper .user p:first-child{font-weight:700;text-transform:capitalize}:host .wrapper h2,wm-navigator .wrapper h2{background:#2e1b46;color:#fff;font-weight:700;margin:0;padding:0.625rem 1.25rem;font-size:0.875rem}:host .wrapper [role=listbox],wm-navigator .wrapper [role=listbox]{list-style:none;margin:0;padding-left:0}:host .wrapper.hide,wm-navigator .wrapper.hide{-ms-transform:scale(1, 0);-webkit-transform:scale(1, 0);-moz-transform:scale(1, 0);transform:scale(1, 0)}:host .wrapper.right,wm-navigator .wrapper.right{right:auto;left:20px}:host img,wm-navigator img{-webkit-transform:scale(0.8);transform:scale(0.8);-webkit-transform-origin:left center;transform-origin:left center;display:block}:host .logout,wm-navigator .logout{text-align:center;text-transform:capitalize}priv-navigator-item:focus{outline:none}";var f=t("wm_navigator",function(){function t(t){e(this,t);this.wmNavigatorLogout=r(this,"wmNavigatorLogout",7);this.retrievedInfo=!this.loadFromUserinfo;this.parsedProducts=[];this.openRight=false;this.userName=undefined;this.email=undefined;this.authType=1;this.connectionName=undefined;this.logoutUrl=undefined;this.products=undefined;this.loadFromUserinfo=false;this.isOpen=false;this.isTabbing=false;this.itemIndexToFocus=0}t.prototype.componentWillLoad=function(){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(t){switch(t.label){case 0:if(!this.userName){console.error("wm-navigator: user-name is a required property.")}return[4,this.parseData()];case 1:t.sent();this.setFocusIndex();return[2]}}))}))};t.prototype.parseData=function(){return __awaiter(this,void 0,void 0,(function(){var t=this;return __generator(this,(function(e){switch(e.label){case 0:if(!!!this.loadFromUserinfo)return[3,2];return[4,l("/platform/navigator/userinfo").then((function(e){t.email=e.email;t.currentProductId=e.current_product_id;t.parsedProducts=t.productKeysToCamelCase(e.products);t.logoutUrl=t.logoutUrl?t.logoutUrl:e.logout_url;t.connectionName=t.connectionName?t.connectionName:e.connection_name;if(!!t.email&&!!t.currentProductId){t.retrievedInfo=true}})).catch((function(t){console.error(t)}))];case 1:e.sent();return[3,3];case 2:this.currentProductId=s(this.el);if(!!this.products){if(typeof this.products==="string"){this.parsedProducts=JSON.parse(this.products)}else{this.parsedProducts=this.products}this.parsedProducts=this.productKeysToCamelCase(this.parsedProducts)}e.label=3;case 3:this.parsedProducts.sort((function(t,e){return t.name<e.name?-1:1}));return[2]}}))}))};t.prototype.productKeysToCamelCase=function(t){t=t.map((function(t){var e=Object.keys(t);var r={};e.forEach((function(e){r[a(e)]=t[e]}));return r}));return t};t.prototype.setFocusIndex=function(){if(this.parsedProducts.length>1){var t=this.getProduct(this.currentProductId);if(t){this.itemIndexToFocus=this.parsedProducts.indexOf(t)}}};t.prototype.toggleTabbingOn=function(){this.isTabbing=true};t.prototype.toggleTabbingOff=function(){this.isTabbing=false};t.prototype.handleKeys=function(t){switch(t.key){case"Escape":t.preventDefault();this.closeMenu();break;case"ArrowDown":case"ArrowUp":t.preventDefault();if(!this.isOpen){this.itemIndexToFocus=u(this.itemIndexToFocus,t.key,this.navigatorItems.length);this.openMenu()}break}};t.prototype.handleKeydown=function(t){var e=t.detail.key;var r=t.detail.navItem;switch(e){case"Tab":this.closeMenu();break;case"Enter":case" ":r.click();break;case"ArrowDown":case"ArrowUp":var n=this.itemIndexToFocus;this.itemIndexToFocus=u(this.itemIndexToFocus,e,this.navigatorItems.length);this.focusItem();this.unfocusItem(n);break}};t.prototype.handleClick=function(t){var e=t.target===this.el||this.el.contains(t.target);if(!e&&this.isOpen){this.closeMenu()}};t.prototype.handleButtonClick=function(){this.isOpen?this.closeMenu():this.openMenu()};t.prototype.openMenu=function(){if(this.wrapperEl){var t=this.wrapperEl.clientWidth;var e=this.el.getBoundingClientRect().left;var r=document.documentElement.clientWidth-this.el.getBoundingClientRect().right;this.openRight=t>e&&r>e}this.isOpen=true;this.focusItem()};t.prototype.closeMenu=function(){this.isOpen=false;this.buttonFocusHandler();this.unfocusItem(this.itemIndexToFocus);this.setFocusIndex()};t.prototype.focusItem=function(){var t=this.navigatorItems[this.itemIndexToFocus];t.tabIndex=0;t.focused=true;window.requestAnimationFrame((function(){return t.focus()}))};t.prototype.unfocusItem=function(t){var e=this.navigatorItems[t];e.tabIndex=-1;e.focused=false};t.prototype.buttonFocusHandler=function(){var t=this.el.shadowRoot.querySelector("priv-navigator-button");var e=t.shadowRoot.querySelector("button");window.requestAnimationFrame((function(){return e.focus()}))};t.prototype.renderUserInfo=function(){return n("div",{class:"user",id:"wm-nav-user","aria-label":c.formatMessage({id:"navigator.userinfoLabel",defaultMessage:"for {name}, email {email}"},{name:this.userName,email:this.email})},n("p",null,this.userName),n("p",null,this.email))};t.prototype.setAltText=function(){if(this.parsedProducts.length>1){return c.formatMessage({id:"navigator.userinfoAndProductNavigator",defaultMessage:"User information and product navigator"})}else{return c.formatMessage({id:"navigator.userinfo",defaultMessage:"User information"})}};t.prototype.renderHeading=function(){return n("h2",null,c.formatMessage({id:"navigator.watermarkApps",defaultMessage:"Watermark Apps",description:"Applications made by Watermark Insights"}))};t.prototype.renderList=function(){return n("ul",{role:"listbox","aria-label":"".concat(c.formatMessage({id:"navigator.WatermarkAppNavigation",defaultMessage:"Watermark App Navigation",description:"list of applications by Watermark Insights"})),"aria-describedby":"wm-nav-user"},this.parsedProducts.length>1&&this.renderProductOptions(),this.renderLogoutOption())};t.prototype.renderProductOptions=function(){var t=this;return this.parsedProducts.map((function(e){var r,o,i,s;r=e.name;o=e.iconUrl;s=t.setProductOnClick(e.id);if(!!r&&!!o){i=t.currentProductId===e.id;return n("priv-navigator-item",{selected:i,id:e.id,onClick:s,role:"option","aria-label":r},n("img",{src:o,alt:r}))}}))};t.prototype.setProductOnClick=function(t){var e=this.getProduct(t);if(this.currentProductId===t){return function(){}}else if(e){if(!!this.loadFromUserinfo||this.authType===2){return function(){return window.location.href=e.linkUrl}}else if(this.authType===3){var r=this.connectionName?"/?connection_name=".concat(this.connectionName):"";return function(){return window.location.href=e.samlLinkUrl+r}}}};t.prototype.renderLogoutOption=function(){return n("priv-navigator-item",{class:"logout",selected:!(this.parsedProducts.length>1),id:"nav-logout",onClick:this.setLogoutOnclick(),role:"option"},n("span",{class:"logout"},c.formatMessage({id:"navigator.logout",defaultMessage:"Log Out"})))};t.prototype.setLogoutOnclick=function(){var t=this;return function(){t.wmNavigatorLogout.emit();if(t.logoutUrl){window.location.href=t.logoutUrl}}};Object.defineProperty(t.prototype,"navigatorItems",{get:function(){return Array.from(this.el.shadowRoot.querySelectorAll("priv-navigator-item"))},enumerable:false,configurable:true});t.prototype.getProduct=function(t){return this.parsedProducts.find((function(e){return e.id===t}))};t.prototype.render=function(){var t=this;return this.retrievedInfo?n(o,{class:this.isTabbing?"user-is-tabbing":""},n("priv-navigator-button",{expanded:this.isOpen,altText:this.setAltText(),isTabbing:this.isTabbing}),n("div",{class:"wrapper ".concat(this.isOpen?"":"hide"," ").concat(this.openRight?"right":""),ref:function(e){return t.wrapperEl=e}},this.renderUserInfo(),this.parsedProducts.length>1&&this.renderHeading(),this.renderList())):""};Object.defineProperty(t,"delegatesFocus",{get:function(){return true},enumerable:false,configurable:true});Object.defineProperty(t.prototype,"el",{get:function(){return i(this)},enumerable:false,configurable:true});Object.defineProperty(t,"watchers",{get:function(){return{products:["parseData"]}},enumerable:false,configurable:true});return t}());f.style=p}}}));
|
|
2
|
+
//# sourceMappingURL=p-04ae66fd.system.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["wmNavigatorCss","Navigator","exports","this","retrievedInfo","loadFromUserinfo","parsedProducts","openRight","class_1","prototype","componentWillLoad","userName","console","error","parseData","_a","sent","setFocusIndex","getRequest","then","response","_this","email","currentProductId","current_product_id","productKeysToCamelCase","products","logoutUrl","logout_url","connectionName","connection_name","catch","errStatus","getWmMode","el","JSON","parse","sort","a","b","name","map","product","keys","Object","newProduct","forEach","key","snakeCaseToCamelCase","length","currentProduct","getProduct","itemIndexToFocus","indexOf","toggleTabbingOn","isTabbing","toggleTabbingOff","handleKeys","ev","preventDefault","closeMenu","isOpen","getNewIndexToFocus","navigatorItems","openMenu","handleKeydown","detail","item","navItem","click","oldIndex","focusItem","unfocusItem","handleClick","isElOrChild","target","contains","handleButtonClick","wrapperEl","wrapperWidth","clientWidth","spaceLeft","getBoundingClientRect","left","spaceRight","document","documentElement","right","buttonFocusHandler","newSelection","tabIndex","focused","window","requestAnimationFrame","focus","index","oldSelection","hostButton","shadowRoot","querySelector","button","renderUserInfo","h","class","id","intl","formatMessage","defaultMessage","setAltText","renderHeading","description","renderList","role","concat","renderProductOptions","renderLogoutOption","icon","isSelected","clickRedirect","iconUrl","setProductOnClick","selected","onClick","src","alt","productId","authType","location","href","linkUrl","connName_1","samlLinkUrl","setLogoutOnclick","wmNavigatorLogout","emit","defineProperty","Array","from","querySelectorAll","find","render","Host","expanded","altText","ref"],"sources":["src/components/wm-navigator/wm-navigator.scss?tag=wm-navigator&encapsulation=shadow","src/components/wm-navigator/wm-navigator.tsx"],"sourcesContent":[":host,\nwm-navigator {\n min-width: 0;\n position: relative;\n display: inline-block;\n\n .wrapper {\n overflow: auto;\n font-size: rem-calc(18);\n min-width: rem-calc(210);\n width: auto;\n max-height: 80vh;\n text-align: left;\n position: absolute;\n z-index: 50;\n top: 100%;\n right: 20px;\n left: auto;\n background: #fff;\n letter-spacing: normal;\n @include box-shadow(0 4px 15px 0 rgba(0, 0, 0, 0.2));\n @include transition(transform 0.25s ease);\n @include transformOrigin(center top);\n @include scale($xVal: 1, $yVal: 1);\n\n .user {\n background: $background;\n padding: rem-calc(10 20);\n font-size: rem-calc(14);\n\n p {\n margin: 0;\n }\n p:first-child {\n font-weight: 700;\n text-transform: capitalize;\n }\n }\n\n h2 {\n background: #2e1b46;\n color: #fff;\n font-weight: 700;\n margin: 0;\n padding: rem-calc(10 20);\n font-size: rem-calc(14);\n }\n\n [role=\"listbox\"] {\n list-style: none;\n margin: 0;\n padding-left: 0;\n }\n\n &.hide {\n @include scale($xVal: 1, $yVal: 0);\n }\n\n &.right {\n right: auto;\n left: 20px;\n }\n }\n\n img {\n transform: scale(0.8);\n transform-origin: left center;\n display: block;\n }\n\n .logout {\n text-align: center;\n text-transform: capitalize;\n }\n}\n\npriv-navigator-item:focus {\n outline: none;\n}\n","import { Component, Element, h, Host, Prop, State, Listen, EventEmitter, Event, Watch } from \"@stencil/core\";\nimport { getWmMode, Product, NavigatorPayload } from \"../../global/interfaces\";\nimport { intl, snakeCaseToCamelCase, getNewIndexToFocus } from \"../../global/functions\";\nimport { getRequest } from \"../../global/services/http-service\";\n\n@Component({\n tag: \"wm-navigator\",\n styleUrl: \"wm-navigator.scss\",\n shadow: { delegatesFocus: true },\n})\nexport class Navigator {\n @Element() el!: any;\n private wrapperEl?: HTMLDivElement;\n\n // Component can receive user info and products as props (this is how it worked before)\n @Prop() userName?: string;\n @Prop() email?: string;\n @Prop() authType: number = 1; // 1: none or off, 2: username-password or username_password_sso, 3: saml or saml_sso\n @Prop() connectionName?: string;\n @Prop() logoutUrl?: string;\n @Prop() products?: string | []; // products as JSON string, parsed on load\n\n // The new way is to retrieve user info from an endpoint\n // dev needs to opt-in by setting loadFromUserinfo to true\n @Prop() loadFromUserinfo: boolean = false;\n // comp can check whether the info was successfully retrieved with:\n private retrievedInfo: boolean = !this.loadFromUserinfo; // when in endpoint mode, only render after get request completed\n\n // used either way to store the products\n parsedProducts: Array<Product> = [];\n\n /**\n * Event emitted from child wm-navigator-button updates the state, which is then passed down as a prop by wm-navigator.\n */\n @State() isOpen: boolean = false;\n private openRight: boolean = false; // whether the menu should open on the right side\n\n @State() isTabbing: boolean = false;\n\n /**\n * Value is set to the index of the current product on load.\n * Keyboard navigation updates the state to keep track of focus in the dropdown.\n * State resets to the index of the current product when the dropdown closes.\n */\n @State() itemIndexToFocus: number = 0;\n\n @Event() wmNavigatorLogout!: EventEmitter;\n\n private currentProductId!: string;\n\n async componentWillLoad() {\n if (!this.userName) {\n console.error(\"wm-navigator: user-name is a required property.\");\n }\n\n await this.parseData();\n this.setFocusIndex();\n }\n\n // async because we need the http request to complete before proceeding\n @Watch(\"products\")\n async parseData() {\n if (!!this.loadFromUserinfo) {\n await getRequest(\"/platform/navigator/userinfo\")\n .then((response: NavigatorPayload) => {\n this.email = response.email;\n this.currentProductId = response.current_product_id;\n this.parsedProducts = this.productKeysToCamelCase(response.products);\n this.logoutUrl = this.logoutUrl ? this.logoutUrl : response.logout_url;\n this.connectionName = this.connectionName ? this.connectionName : response.connection_name;\n if (!!this.email && !!this.currentProductId) {\n this.retrievedInfo = true;\n }\n })\n .catch((errStatus) => {\n console.error(errStatus);\n });\n } else {\n this.currentProductId = getWmMode(this.el);\n if (!!this.products) {\n if (typeof this.products === \"string\") {\n this.parsedProducts = JSON.parse(this.products);\n } else {\n this.parsedProducts = this.products;\n }\n this.parsedProducts = this.productKeysToCamelCase(this.parsedProducts);\n }\n }\n // products is initialized as empty array in case nothing is passed\n this.parsedProducts.sort((a, b) => (a.name < b.name ? -1 : 1));\n }\n\n productKeysToCamelCase(products: object[]): Product[] {\n products = products.map((product: any) => {\n const keys = Object.keys(product);\n let newProduct: { [key: string]: string } = {};\n keys.forEach((key) => {\n newProduct[snakeCaseToCamelCase(key)] = product[key];\n });\n return newProduct;\n });\n return products as Product[];\n }\n\n /**\n * Sets index to focus on open to the selected product. This index resets it when the menu closes.\n */\n setFocusIndex() {\n if (this.parsedProducts.length > 1) {\n const currentProduct = this.getProduct(this.currentProductId);\n\n if (currentProduct) {\n this.itemIndexToFocus = this.parsedProducts.indexOf(currentProduct);\n }\n }\n }\n\n @Listen(\"wmUserIsTabbing\", { target: \"window\" })\n toggleTabbingOn() {\n this.isTabbing = true;\n }\n\n @Listen(\"wmUserIsNotTabbing\", { target: \"window\" })\n toggleTabbingOff() {\n this.isTabbing = false;\n }\n\n @Listen(\"keydown\")\n handleKeys(ev: KeyboardEvent) {\n switch (ev.key) {\n case \"Escape\":\n ev.preventDefault();\n this.closeMenu();\n break;\n case \"ArrowDown\":\n case \"ArrowUp\":\n ev.preventDefault();\n if (!this.isOpen) {\n this.itemIndexToFocus = getNewIndexToFocus(this.itemIndexToFocus, ev.key, this.navigatorItems.length);\n this.openMenu();\n }\n break;\n }\n }\n\n @Listen(\"keydownOnNavItem\")\n handleKeydown(ev: CustomEvent) {\n const key = ev.detail.key;\n const item = ev.detail.navItem;\n switch (key) {\n case \"Tab\":\n this.closeMenu();\n break;\n case \"Enter\":\n case \" \":\n item.click();\n break;\n case \"ArrowDown\":\n case \"ArrowUp\":\n const oldIndex = this.itemIndexToFocus;\n this.itemIndexToFocus = getNewIndexToFocus(this.itemIndexToFocus, key, this.navigatorItems.length);\n this.focusItem();\n this.unfocusItem(oldIndex);\n break;\n }\n }\n\n @Listen(\"click\", { target: \"document\" })\n handleClick(ev: MouseEvent) {\n const isElOrChild = ev.target === this.el || this.el.contains(ev.target as Node);\n\n if (!isElOrChild && this.isOpen) {\n this.closeMenu();\n }\n }\n\n @Listen(\"buttonActivated\")\n handleButtonClick() {\n this.isOpen ? this.closeMenu() : this.openMenu();\n }\n\n openMenu() {\n if (this.wrapperEl) {\n const wrapperWidth = this.wrapperEl.clientWidth;\n const spaceLeft = this.el.getBoundingClientRect().left;\n const spaceRight = document.documentElement.clientWidth - this.el.getBoundingClientRect().right;\n this.openRight = wrapperWidth > spaceLeft && spaceRight > spaceLeft;\n }\n this.isOpen = true;\n this.focusItem();\n }\n\n closeMenu() {\n this.isOpen = false;\n this.buttonFocusHandler();\n this.unfocusItem(this.itemIndexToFocus);\n this.setFocusIndex();\n }\n\n focusItem() {\n const newSelection = this.navigatorItems[this.itemIndexToFocus];\n newSelection.tabIndex = 0;\n newSelection.focused = true;\n window.requestAnimationFrame(() => newSelection.focus());\n }\n\n unfocusItem(index: number) {\n const oldSelection = this.navigatorItems[index];\n oldSelection.tabIndex = -1;\n oldSelection.focused = false;\n }\n\n buttonFocusHandler() {\n const hostButton = this.el.shadowRoot.querySelector(\"priv-navigator-button\");\n const button = hostButton.shadowRoot.querySelector(\"button\");\n window.requestAnimationFrame(() => button.focus());\n }\n\n /**\n * HELPERS FOR RENDER\n */\n renderUserInfo() {\n return (\n <div\n class=\"user\"\n id=\"wm-nav-user\"\n aria-label={intl.formatMessage(\n {\n id: \"navigator.userinfoLabel\",\n defaultMessage: \"for {name}, email {email}\",\n },\n { name: this.userName, email: this.email }\n )}\n >\n <p>{this.userName}</p>\n <p>{this.email}</p>\n </div>\n );\n }\n\n setAltText(): string {\n if (this.parsedProducts.length > 1) {\n return intl.formatMessage({\n id: \"navigator.userinfoAndProductNavigator\",\n defaultMessage: \"User information and product navigator\",\n });\n } else {\n return intl.formatMessage({\n id: \"navigator.userinfo\",\n defaultMessage: \"User information\",\n });\n }\n }\n\n renderHeading() {\n return (\n <h2>\n {intl.formatMessage({\n id: \"navigator.watermarkApps\",\n defaultMessage: \"Watermark Apps\",\n description: \"Applications made by Watermark Insights\",\n })}\n </h2>\n );\n }\n\n renderList() {\n return (\n <ul\n role=\"listbox\"\n aria-label={`${intl.formatMessage({\n id: \"navigator.WatermarkAppNavigation\",\n defaultMessage: \"Watermark App Navigation\",\n description: \"list of applications by Watermark Insights\",\n })}`}\n aria-describedby=\"wm-nav-user\"\n >\n {this.parsedProducts.length > 1 && this.renderProductOptions()}\n {this.renderLogoutOption()}\n </ul>\n );\n }\n\n renderProductOptions(): Array<HTMLPrivNavigatorItemElement> {\n return this.parsedProducts.map((product: Product) => {\n let name: string | undefined, icon: string | undefined, isSelected: boolean, clickRedirect: any;\n\n name = product.name;\n icon = (product as Product).iconUrl;\n\n clickRedirect = this.setProductOnClick(product.id);\n\n if (!!name && !!icon) {\n isSelected = this.currentProductId === product.id;\n\n return (\n <priv-navigator-item\n selected={isSelected}\n id={product.id}\n onClick={clickRedirect}\n role=\"option\"\n aria-label={name}\n >\n <img src={icon} alt={name} />\n </priv-navigator-item>\n );\n }\n });\n }\n\n setProductOnClick(productId: string) {\n const product = this.getProduct(productId);\n\n if (this.currentProductId === productId) {\n return () => {};\n } else if (product) {\n if (!!this.loadFromUserinfo || this.authType === 2) {\n return () => (window.location.href = (product as Product).linkUrl);\n } else if (this.authType === 3) {\n // products passed as prop, saml\n const connName = this.connectionName ? `/?connection_name=${this.connectionName}` : \"\";\n return () => (window.location.href = (product as Product).samlLinkUrl + connName);\n }\n }\n }\n\n renderLogoutOption() {\n return (\n <priv-navigator-item\n class=\"logout\"\n selected={!(this.parsedProducts.length > 1)}\n id=\"nav-logout\"\n onClick={this.setLogoutOnclick()}\n role=\"option\"\n >\n <span class=\"logout\">\n {intl.formatMessage({\n id: \"navigator.logout\",\n defaultMessage: \"Log Out\",\n })}\n </span>\n </priv-navigator-item>\n );\n }\n\n setLogoutOnclick() {\n // The logout item will always emit a custom event on click so that the dev can run any business logic specific to the app on logout (e.g., clearing local storage).\n // It will only redirect if the dev has set the logoutUrl. If some sort of custom redirect is needed, the logoutUrl should not be set.\n return () => {\n this.wmNavigatorLogout.emit();\n if (this.logoutUrl) {\n window.location.href = this.logoutUrl;\n }\n };\n }\n\n private get navigatorItems(): Array<HTMLPrivNavigatorItemElement> {\n return Array.from(this.el.shadowRoot.querySelectorAll(\"priv-navigator-item\"));\n }\n\n private getProduct(id: string): Product | undefined {\n return this.parsedProducts.find((product) => product.id === id);\n }\n\n render() {\n return this.retrievedInfo ? (\n <Host class={this.isTabbing ? \"user-is-tabbing\" : \"\"}>\n <priv-navigator-button expanded={this.isOpen} altText={this.setAltText()} isTabbing={this.isTabbing} />\n <div\n class={`wrapper ${this.isOpen ? \"\" : \"hide\"} ${this.openRight ? \"right\" : \"\"}`}\n ref={(el) => (this.wrapperEl = el as HTMLDivElement)}\n >\n {this.renderUserInfo()}\n {this.parsedProducts.length > 1 && this.renderHeading()}\n {this.renderList()}\n </div>\n </Host>\n ) : (\n \"\"\n );\n }\n}\n"],"mappings":"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"}
|